Project

General

Profile

Actions

Task #18325

closed

Task #18453: Ocean Sprint Planning for 01/07/2025 - 11/07/2025

Invoicing in Foreign Currency

Added by Redmine Admin 6 months ago. Updated about 3 hours ago.

Status:
Closed
Priority:
High
Assignee:
-
Start date:
06/12/2025
Due date:
07/11/2025
% Done:

100%

Estimated time:
64:00 h
Spent time:
GitLab ID:
2776
GitLab Milestone:
GitLab Ticket Number:
645
GitLab Time Logged:
212400
Lock Timeline Date:
No
gitlab project trace:
Ocean Sprint Planning for 01/07/2025 - 11/07/2025

Description

Acceptance Criteria:

Trigger on Save Invoice:

  • When the user clicks the "Save" button on any invoice type screen (Draft, Proforma, or Standard), a modal dialog (popup) MUST appear.

Popup Fields:

  1. Currency Selection Dropdown:
    • Data Source: Populated with values from the "Additional Currencies for Invoices" configuration list.
    • Behavior: This field MUST be mandatory. The invoice currency defaults to the default currency currency if not changed by the user.
  2. Bank Account Dropdown:
    • Default Selection Logic:
      • Upon selection of a currency from the "Currency Selection Dropdown," the system MUST attempt to auto-select a default bank account if one is explicitly configured and linked to the selected currency.
    • User Override: The user MUST be able to override the auto-selected default bank account by choosing another available bank from the dropdown.
    • No Linked Bank Scenario:
      • If no bank account is explicitly linked to the selected currency in the system, the dropdown should display all available bank accounts.
      • The system should prompt the user with a warning message: "No specific bank account found for this currency. Please select an appropriate bank account."
  3. Exchange Rate (FC Rate) Field:
    • Default Rate Population Logic:
      • Scenario 1: Charges in selected foreign currency exist (e.g., USD charges on HBL/MBL/Clearing, invoicing in USD).
        • The field MUST auto-populate with the specific saved exchange rate from the relevant MBL/HBL/Clearing charges that are in the selected foreign currency.
        • Example 1:* If HBL001 has 2 USD charges and 1 MUR charge, and the user selects USD for the invoice, the system MUST retrieve and display the pre-existing exchange rate from the USD charges on HBL001.
      • Scenario 2: No charges exist in the selected foreign currency (e.g., all charges in MUR, invoicing in USD).
        • The field MUST auto-populate with the system's current default exchange rate for the selected foreign currency.
        • Example 2:* If HBL001 has 3 MUR charges, and the user selects USD for the invoice, the system MUST retrieve and display the most current exchange rate between MUR and USD from the system's global exchange rate configuration.
      • Scenario 3: Invoice generated in Default System Currency (MUR).
        • The FC Rate field MUST display "1" (and be read-only/non-editable).
    • User Editability: The user MUST be able to manually edit the populated exchange rate in the FC Rate field, unless the invoice is in the default currency.
    • Impact on Charges: All invoice charges, regardless of their original currency, MUST be recalculated and displayed based on the final exchange rate entered or selected in this field.

Validation Rules (during popup interaction and on final save):

  • Currency Not Selected: If the "Currency Selection Dropdown" is empty or not selected, a mandatory validation error message MUST be displayed, preventing further action until a currency is chosen.
  • Bank Account Not Available/Selected: If the "Bank Account Dropdown" is empty or not selected (and the system didn't auto-select one or the user hasn't chosen), a mandatory validation error message MUST be displayed, preventing further action until a bank account is chosen.
  • Exchange Rate Empty/Invalid: If the "Exchange Rate (FC Rate) Field" is empty (and not auto-populated) or contains an invalid value, a mandatory validation error message MUST be displayed, prompting the user to enter a valid rate.

Invoice PDF Output: The final generated PDF invoice MUST clearly and prominently display:

  • The selected Foreign Currency (e.g., "USD").
  • The applicable FC Rate used for calculation.
  • The Bank Details corresponding to the chosen bank account (Account Name, Account Number, SWIFT/BIC, Bank Name, Bank Address).

Audit Trail:

  • The system MUST capture and store the following details as part of the finalized invoice record for auditing and reporting purposes:
    • Selected Foreign Currency
    • Selected Bank Account ID/Name
    • Applicable FC Rate used for calculations

GitLab Sync Log

[{"id": "25097", "author": "Nihaal Ramfoll", "hours": 40.0, "created": "2025-06-16T11:03:35.577Z", "log_date": "2025-06-16", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-06-16T11:03:35.577Z: 1w-(40.0)h spend at: 2025-06-16", "status": "deleted", "deleted_by": "25098", "redmine_entry_id": 9647}, {"id": "25235", "author": "Nihaal Ramfoll", "hours": 2.0, "created": "2025-06-18T10:18:46.761Z", "log_date": "2025-06-16", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-06-18T10:18:46.761Z: 2h-(2.0)h spend at: 2025-06-16", "status": "active", "deleted_by": "", "redmine_entry_id": 9679}, {"id": "25764", "author": "Nihaal Ramfoll", "hours": 5.0, "created": "2025-06-25T10:13:12.756Z", "log_date": "2025-06-22", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-06-25T10:13:12.756Z: 5h-(5.0)h spend at: 2025-06-22", "status": "active", "deleted_by": "", "redmine_entry_id": 9754}, {"id": "25763", "author": "Nihaal Ramfoll", "hours": 5.0, "created": "2025-06-25T10:13:01.876Z", "log_date": "2025-06-25", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-06-25T10:13:01.876Z: 5h-(5.0)h spend at: 2025-06-25", "status": "active", "deleted_by": "", "redmine_entry_id": 9755}, {"id": "26000", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2025-07-01T06:24:42.083Z", "log_date": "2025-06-23", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-01T06:24:42.083Z: 4h-(4.0)h spend at: 2025-06-23", "status": "active", "deleted_by": "", "redmine_entry_id": 9817}, {"id": "26331", "author": "Nihaal Ramfoll", "hours": 3.0, "created": "2025-07-04T11:01:18.457Z", "log_date": "2025-06-29", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-04T11:01:18.457Z: 3h-(3.0)h spend at: 2025-06-29", "status": "active", "deleted_by": "", "redmine_entry_id": 9863}, {"id": "26329", "author": "Nihaal Ramfoll", "hours": 3.0, "created": "2025-07-04T11:01:10.041Z", "log_date": "2025-07-02", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-04T11:01:10.041Z: 3h-(3.0)h spend at: 2025-07-02", "status": "active", "deleted_by": "", "redmine_entry_id": 9864}, {"id": "26466", "author": "Nihaal Ramfoll", "hours": 5.0, "created": "2025-07-08T10:49:16.206Z", "log_date": "2025-07-08", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-08T10:49:16.206Z: 5h-(5.0)h spend at: 2025-07-08", "status": "deleted", "deleted_by": "26465", "redmine_entry_id": 9889}, {"id": "26464", "author": "Nihaal Ramfoll", "hours": 5.0, "created": "2025-07-08T10:48:51.086Z", "log_date": "2025-07-08", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-08T10:48:51.086Z: 5h-(5.0)h spend at: 2025-07-08", "status": "active", "deleted_by": "", "redmine_entry_id": 9890}, {"id": "26463", "author": "Nihaal Ramfoll", "hours": 5.0, "created": "2025-07-08T10:48:13.769Z", "log_date": "2025-07-01", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-08T10:48:13.769Z: 5h-(5.0)h spend at: 2025-07-01", "status": "active", "deleted_by": "", "redmine_entry_id": 9891}, {"id": "26462", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2025-07-08T10:47:48.678Z", "log_date": "2025-07-03", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-08T10:47:48.678Z: 4h-(4.0)h spend at: 2025-07-03", "status": "active", "deleted_by": "", "redmine_entry_id": 9892}, {"id": "26457", "author": "Nihaal Ramfoll", "hours": 5.0, "created": "2025-07-08T10:44:36.998Z", "log_date": "2025-07-06", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-08T10:44:36.998Z: 5h-(5.0)h spend at: 2025-07-06", "status": "active", "deleted_by": "", "redmine_entry_id": 9893}, {"id": "26562", "author": "Nihaal Ramfoll", "hours": 5.0, "created": "2025-07-11T05:30:52.376Z", "log_date": "2025-07-09", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-11T05:30:52.376Z: 5h-(5.0)h spend at: 2025-07-09", "status": "active", "deleted_by": "", "redmine_entry_id": 9916}, {"id": "26561", "author": "Nihaal Ramfoll", "hours": 5.0, "created": "2025-07-11T05:30:44.008Z", "log_date": "2025-07-08", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-11T05:30:44.008Z: 5h-(5.0)h spend at: 2025-07-08", "status": "active", "deleted_by": "", "redmine_entry_id": 9917}, {"id": "26683", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2025-07-14T11:35:35.980Z", "log_date": "2025-07-10", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-14T11:35:35.980Z: 4h-(4.0)h spend at: 2025-07-10", "status": "active", "deleted_by": "", "redmine_entry_id": 9932}, {"id": "27163", "author": "Nihaal Ramfoll", "hours": 3.0, "created": "2025-07-24T10:41:50.292Z", "log_date": "2025-07-21", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2025-07-24T10:41:50.292Z: 3h-(3.0)h spend at: 2025-07-21", "status": "active", "deleted_by": "", "redmine_entry_id": 9987}, {"id": "27731", "author": "Yashvee Seetul", "hours": 1.0, "created": "2025-08-05T09:47:14.977Z", "log_date": "2025-08-04", "comment": "Imported from GitLab by @Yashvee Seetul on 2025-08-05T09:47:14.977Z: 1h-(1.0)h spend at: 2025-08-04", "status": "active", "deleted_by": "", "redmine_entry_id": 10053}]

Actions

Also available in: Atom PDF