Task #19667
openTask #19803: Sprint Planning for 27/04/2026 - 11/05/2026
Create Invoice for MAWB in Air Module
90%
Description
Implement Invoice for MAWB in the Air module.
This feature will allow users to generate invoices at Master Air Waybill (MAWB) level, following the same core logic as Ocean invoicing, but adapted to:
- Air shipment data
- Updated UI structure (AIR tab + Create Air Invoice button)
Scope
- Applicable to Air module only
- Applicable to MAWB (Master Air Waybill)
- Accessible via:
- Invoice → AIR tab → “Create Air Invoice”
- Covers linked invoices only
- Out of scope:
- Create Unlinked Invoice functionality
UI Alignment (Air Invoice Module)
- Invoice creation is initiated from:
- Accounting→ Invoice → AIR tab
- User clicks:
- “+ Create Air Invoice”
- Invoice list must display the following columns:
- Invoice Reference
- Client
- Entity Type (MAWB)
- Created On
- File Ref
- House
- Master (MAWB No.)
- Shipment (Air)
- Cargo Type (Import/Export)
- Status
- Amount Excl. VAT
- VAT Amount
- Total Amount
- Download
- Preview
- Entity Type must clearly identify invoices created from:
- MAWB
Functional Requirements
1. Create Air Invoice Entry
- User clicks “+ Create Air Invoice”
- User selects MAWB tab
2. MAWB Selection
System should allow selection of MAWB using filters:
Filters:
- File Reference
- MAWB Reference
- Cargo Type
- Date Range
Search Results Must Display:
- File Reference
- MAWB Reference
- Airline
Flight Details- Origin Airport
- Destination Airport
- Cargo Type
- Created On
3. Expandable MAWB Row
- User can expand MAWB row to view invoiceable data:
- Customer / Client Name
- Client Type
- VAT Type
- Total Invoiceable Amount
4. Create Invoice from MAWB
- User clicks the "+" Create Invoice against a MAWB row
- System opens Invoice Detail Screen
5. MAWB Invoice Detail Screen
Shipment Summary:
- File Reference
- MAWB No.
- Airline
- Flight Number
- ETD / ETA
- Origin Airport
- Destination Airport
- Shipper
- Consignee
- Number of Packages
- Package Type
Weight- Chargeable Weight
- Volume
- Description of Goods
6. Invoice Charges Section
Display all invoiceable charges linked to MAWB:
Columns:
- Charge Code
- Description
- Currency
- Prepaid / Collect
- Amount Excl. VAT
- VAT
- Discount
- Exchange Rate
- Total Amount
- Footer - System displays totals
7. Invoice Processing
User can:
- Process individual invoice—follows same logic as for ocean module
- Process all invoices—follows same logic as for ocean module
8. Save Invoice Modal
User must select:
- Invoice Currency (mandatory)
- Bank
(mandatory)
System displays:
- Exchange rate details, which can be modified by the user and the charges will be calculated as per this new rate.
Save options:
- Draft
- Proforma
- Standard
9.Invoice PDF format
Invoice-MACCS26INV03691-2026-03-18.pdf
The invoice format will be the same as the attached; however, the "HAWB Reference:" will be replaced by "MAWB Reference:" in the header.
10. List of Generated Invoices
After creation:
- The invoice appears in the "List of Generated Invoices" section
|
Reference |
Client |
VAT Type |
Type |
Inv. Type |
Due Date |
Status |
Inv. Currency |
Total Inv. Amt. |
Total Amt. (MUR) |
Disbursement |
Action |
|---|
- Reference
- Client
- VAT Type
- Type
- Inv. Type
- Due Date
- Status
- Inv. Currency
- Total Inv. Amt.
- Total Amt. (MUR)
- Disbursement
- Action
11. List of Invoices
Clicking on "Back" button returns the user to the "List of Invoices" screen.
- The created invoice appears in invoice list under the AIR Tab
|
Invoice Reference |
Client |
Entity Type |
Created On |
File Ref. |
House |
Master |
Type |
Shipment |
Cargo Type |
Status |
Amt. Excl. VAT |
VAT Amt. |
Total Amt. |
Download |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No record(s) found. | ||||||||||||||
Columns must include:
- Invoice Reference
- Client
- Entity Type (MAWB)
- Created On
- File Ref
- House
- Master (MAWB No.)
- Type
- Shipment
- Cargo Type
- Status
- Amount Excl. VAT
- VAT Amount
- Total Amount
- Download - Download icon & Preview Icon
12. Invoice Output / Download
- User can preview and download the invoice.
- Existing PDF generation logic should be reused
- Output format remains consistent with system standards
13. Validation Rules
- Only MAWB records should appear in the MAWB tab
- Currency and bank are mandatory before saving
- Prevent invalid or duplicate invoice creation
- System displays success confirmation
14. Linking & Traceability
Each invoice must be linked to:
- File Reference
- MAWB
- Customer
Non-Functional Requirements
- Reuse existing invoice engine from Ocean module
- No regression to Ocean MBL invoicing
- Maintain performance for search and invoice creation
- Ensure proper PDF rendering
Acceptance Criteria
- User can access invoice module via AIR tab
- User clicks Create Air Invoice to initiate process
- MAWB selection supports filters (File Ref, MAWB, Cargo Type, Date Range)
- MAWB search results display correct Air shipment data
- User can expand MAWB row to view invoiceable details
- User can create invoice from selected MAWB
- Invoice detail screen shows Air-specific shipment summary
- Invoice charges are displayed correctly
- User can process individual invoices or all invoices
- Save Invoice modal enforces Currency and Bank selection
- User can save as Draft, Proforma, or Standard
- Generated invoice appears in AIR invoice list
- Entity Type is displayed as MAWB
- Invoice list columns match UI design
- User can download/preview invoice
- Invoice is linked to MAWB and source charges
- No regression to Ocean invoice functionality
Dependencies
- Existing Invoice Module
- Air shipment (MAWB) data
- MAWB Charges exist
- Bank & currency configuration
- Existing Invoice PDF design
GitLab Sync Log
[{"id": "42061", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2026-04-13T07:17:53.638Z", "log_date": "2026-04-08", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-13T07:17:53.638Z: 4h-(4.0)h spend at: 2026-04-08", "status": "active", "deleted_by": "", "redmine_entry_id": 13051}, {"id": "42109", "author": "Nihaal Ramfoll", "hours": 2.0, "created": "2026-04-14T10:05:18.001Z", "log_date": "2026-04-14", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-14T10:05:18.001Z: 2h-(2.0)h spend at: 2026-04-14", "status": "active", "deleted_by": "", "redmine_entry_id": 13078}, {"id": "42108", "author": "Nihaal Ramfoll", "hours": 3.0, "created": "2026-04-14T10:03:28.493Z", "log_date": "2026-04-14", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-14T10:03:28.493Z: 3h-(3.0)h spend at: 2026-04-14", "status": "active", "deleted_by": "", "redmine_entry_id": 13079}, {"id": "42480", "author": "Nihaal Ramfoll", "hours": 5.5, "created": "2026-04-20T06:30:22.884Z", "log_date": "2026-04-12", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-20T06:30:22.884Z: 5h 30m-(5.5)h spend at: 2026-04-12", "status": "active", "deleted_by": "", "redmine_entry_id": 13151}, {"id": "42536", "author": "Nihaal Ramfoll", "hours": 2.0, "created": "2026-04-21T05:36:38.992Z", "log_date": "2026-04-16", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-21T05:36:38.992Z: 2h-(2.0)h spend at: 2026-04-16", "status": "active", "deleted_by": "", "redmine_entry_id": 13163}, {"id": "42597", "author": "Al-Shad Isaac", "hours": 0.5, "created": "2026-04-21T06:15:59.726Z", "log_date": "2026-04-12", "comment": "Imported from GitLab by @Al-Shad Isaac on 2026-04-21T06:15:59.726Z: 30m-(0.5)h spend at: 2026-04-12", "status": "active", "deleted_by": "", "redmine_entry_id": 13194}, {"id": "42664", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2026-04-21T11:46:53.719Z", "log_date": "2026-04-21", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-21T11:46:53.719Z: 4h-(4.0)h spend at: 2026-04-21", "status": "deleted", "deleted_by": "42662", "redmine_entry_id": 13215}, {"id": "42659", "author": "Nihaal Ramfoll", "hours": 1.5, "created": "2026-04-21T11:34:29.515Z", "log_date": "2026-04-21", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-21T11:34:29.515Z: 1h 30m-(1.5)h spend at: 2026-04-21", "status": "deleted", "deleted_by": "42663", "redmine_entry_id": 13216}, {"id": "42654", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2026-04-21T11:31:02.347Z", "log_date": "2026-04-21", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-21T11:31:02.347Z: 4h-(4.0)h spend at: 2026-04-21", "status": "deleted", "deleted_by": "", "redmine_entry_id": 13217}, {"id": "42729", "author": "Nihaal Ramfoll", "hours": 1.0, "created": "2026-04-22T06:35:51.140Z", "log_date": "2026-04-20", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-22T06:35:51.140Z: 1h-(1.0)h spend at: 2026-04-20", "status": "deleted", "deleted_by": "", "redmine_entry_id": 13227}, {"id": "42865", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2026-04-23T06:38:53.117Z", "log_date": "2026-04-21", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-23T06:38:53.117Z: 4h-(4.0)h spend at: 2026-04-21", "status": "deleted", "deleted_by": "", "redmine_entry_id": 13265}, {"id": "42850", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2026-04-23T06:26:58.584Z", "log_date": "2026-04-21", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-23T06:26:58.584Z: 4h-(4.0)h spend at: 2026-04-21", "status": "deleted", "deleted_by": "", "redmine_entry_id": 13266}, {"id": "42966", "author": "Nihaal Ramfoll", "hours": 2.0, "created": "2026-04-24T05:13:24.590Z", "log_date": "2026-04-22", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-24T05:13:24.590Z: 2h-(2.0)h spend at: 2026-04-22", "status": "active", "deleted_by": "", "redmine_entry_id": 13290}, {"id": "42965", "author": "Nihaal Ramfoll", "hours": 2.0, "created": "2026-04-24T05:12:55.066Z", "log_date": "2026-04-22", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-24T05:12:55.066Z: 2h-(2.0)h spend at: 2026-04-22", "status": "active", "deleted_by": "", "redmine_entry_id": 13291}, {"id": "43089", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2026-04-27T05:57:46.003Z", "log_date": "2026-04-23", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-27T05:57:46.003Z: 4h-(4.0)h spend at: 2026-04-23", "status": "active", "deleted_by": "", "redmine_entry_id": 13312}, {"id": "43154", "author": "Nihaal Ramfoll", "hours": 2.0, "created": "2026-04-27T07:44:30.325Z", "log_date": "2026-04-19", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-27T07:44:30.325Z: 2h-(2.0)h spend at: 2026-04-19", "status": "active", "deleted_by": "", "redmine_entry_id": 13319}, {"id": "43116", "author": "Nihaal Ramfoll", "hours": 2.0, "created": "2026-04-27T06:47:51.009Z", "log_date": "2026-04-27", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-04-27T06:47:51.009Z: 2h-(2.0)h spend at: 2026-04-27", "status": "active", "deleted_by": "", "redmine_entry_id": 13320}, {"id": "43564", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2026-05-04T10:57:28.978Z", "log_date": "2026-04-29", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-05-04T10:57:28.978Z: 4h-(4.0)h spend at: 2026-04-29", "status": "active", "deleted_by": "", "redmine_entry_id": 13414}, {"id": "43563", "author": "Nihaal Ramfoll", "hours": 4.0, "created": "2026-05-04T10:57:17.918Z", "log_date": "2026-04-28", "comment": "Imported from GitLab by @Nihaal Ramfoll on 2026-05-04T10:57:17.918Z: 4h-(4.0)h spend at: 2026-04-28", "status": "active", "deleted_by": "", "redmine_entry_id": 13415}]
Updated by Redmine Admin 5 months ago
- % Done changed from 0 to 10
- GitLab Time Logged changed from 0 to 14400
Updated by Redmine Admin 5 months ago
- % Done changed from 10 to 22
- GitLab Time Logged changed from 14400 to 32400
Updated by Redmine Admin 4 months ago
- % Done changed from 22 to 36
- GitLab Time Logged changed from 32400 to 52200
Updated by Redmine Admin 4 months ago
- % Done changed from 36 to 41
- GitLab Time Logged changed from 52200 to 59400
Updated by Redmine Admin 4 months ago
- % Done changed from 41 to 42
- GitLab Time Logged changed from 59400 to 61200
Updated by Redmine Admin 4 months ago
- % Done changed from 42 to 52
- GitLab Time Logged changed from 61200 to 75600
Updated by Redmine Admin 4 months ago
- Description updated (diff)
- % Done changed from 52 to 55
- GitLab Time Logged changed from 75600 to 79200
Updated by Redmine Admin 4 months ago
- % Done changed from 55 to 65
- GitLab Time Logged changed from 79200 to 93600
Updated by Redmine Admin 4 months ago
- % Done changed from 65 to 75
- Parent task changed from #19655 to #19803
- GitLab Time Logged changed from 93600 to 108000
- gitlab project trace changed from Sprint Planning for 09/04/2026 to 23/04/2026 to Sprint Planning for 27/04/2026 - 11/05/2026
Updated by Redmine Admin 4 months ago
- % Done changed from 75 to 85
- GitLab Time Logged changed from 108000 to 122400
Updated by Redmine Admin 4 months ago
- Status changed from New to Development Done
- % Done changed from 85 to 92
- GitLab Time Logged changed from 122400 to 133200
Updated by Redmine Admin 4 months ago
- % Done changed from 92 to 90
- Estimated time changed from 40:00 h to 50:00 h
- GitLab Time Logged changed from 133200 to 162000
Updated by Redmine Admin 4 months ago
- Status changed from Development Done to New