Processing...

{{ config.company_name || 'HHL Portal' }}

{{ config.address || 'Helping Hands Logistics' }}

{{ config.company_name }}

Dashboard

Total Orders

{{ stats.total_orders || 0 }}

Total Clients

{{ stats.total_clients || 0 }}

Revenue

{{ formatCurrency(stats.total_revenue) }}

Outstanding

{{ formatCurrency(stats.outstanding) }}

Orders Today

{{ stats.orders_today || 0 }}

Pending Shipments

{{ stats.shipment_status?.Scheduled || 0 }}

Avg. Order Value

{{ formatCurrency(stats.avg_order_value) }}

Recent Activity

{{ a.desc }} {{ a.date }}

Order Status Distribution

{{ status }} {{ count }}

Vessel Status Distribution

{{ status }} {{ count }}

Avg. Order Processing Time

{{ stats.avg_order_processing_time || 0 }} hours

Avg. Vessel Transit Time

{{ stats.avg_vessel_transit_time || 0 }} days

Orders Trend

Shipments

Top Clients

By Order Count

{{ index + 1 }} {{ client.name }} {{ client.count }} orders

By Order Value

{{ index + 1 }} {{ client.name }} {{ formatCurrency(client.value) }}

Orders Management

Order # Client Date Order Status Vessel Vessel Status Total Paid Amount Left Collected Date Action
{{ o.order_number }} {{ o.client_name }} {{ formatDate(o.order_date) }} {{ o.order_status }}
{{ getVesselName(o) }}
No vessel
{{ getVesselStatus(o) }} - {{ formatCurrency(o.amount_due) }} {{ formatCurrency(o.amount_paid) }} {{ formatCurrency(o.amount_due - o.amount_paid) }} {{ formatDate(o.collected_date) || '-' }}
Processing
{{ order.order_number }}
{{ formatDate(order.order_date) }}
{{ order.client_name }}
{{ formatCurrency(order.amount_due) }}
{{ formatCurrency(order.amount_paid) }}
Shipped
{{ order.order_number }}
{{ formatDate(order.order_date) }}
{{ order.client_name }}
{{ formatCurrency(order.amount_due) }}
{{ formatCurrency(order.amount_paid) }}
Arrived
{{ order.order_number }}
{{ formatDate(order.order_date) }}
{{ order.client_name }}
{{ formatCurrency(order.amount_due) }}
{{ formatCurrency(order.amount_paid) }}
Completed
{{ order.order_number }}
{{ formatDate(order.order_date) }}
{{ order.client_name }}
{{ formatCurrency(order.amount_due) }}
{{ formatCurrency(order.amount_paid) }}
Cancelled
{{ order.order_number }}
{{ formatDate(order.order_date) }}
{{ order.client_name }}
{{ formatCurrency(order.amount_due) }}
{{ formatCurrency(order.amount_paid) }}

Create Order

Items (Max 20) Edit Mode - Add/Remove Items

{{ formatCurrency(calculateLineTotal(line)) }}
Subtotal {{ formatCurrency(orderSubtotal) }}
Discount
Total {{ formatCurrency(orderGrandTotal) }}
Paid

Order #{{ viewOrderData.order.order_number }}

{{ formatDate(viewOrderData.order.order_date) }}

Client

{{ viewOrderData.order.client_name }}

Vessel

{{ getVesselName(viewOrderData.order) }}
{{ getVesselStatus(viewOrderData.order) }}
{{ getVesselStatus(viewOrderData.order) }}

Status

{{ viewOrderData.order.order_status }}

Due / Paid / Left

Discount: {{ formatCurrency(viewOrderData.order.discount_amount) }} ({{ viewOrderData.order.discount_reason }})
{{ formatCurrency(viewOrderData.order.amount_due) }} / {{ formatCurrency(viewOrderData.order.amount_paid) }} / {{ formatCurrency(viewOrderData.order.amount_due - viewOrderData.order.amount_paid) }}
Item Qty Outside Accra Total
{{ item.item_name }} {{ item.quantity }} {{ formatCurrency(item.item_sum) }}

Payment History

{{ formatDate(p.date) }} - {{ p.recorded_by || 'System' }}
{{ formatCurrency(p.amount) }}
No payments.
{{ r }}

Images & Actions

No images.

Pickup Images

Completed Orders

Order # Client Date Collected Date Vessel Status Action
{{ o.order_number }} {{ o.client_name }} {{ formatDate(o.order_date) }} {{ formatDate(o.collected_date) || '-' }}
{{ getVesselName(o) }}
No vessel
{{ o.order_status }}

Order #{{ viewCompletedOrderData.order.order_number }}

{{ formatDate(viewCompletedOrderData.order.order_date) }}

Client

{{ viewCompletedOrderData.order.client_name }}

Vessel

{{ getVesselName(viewCompletedOrderData.order) }}
No vessel

Status

{{ viewCompletedOrderData.order.order_status }}

Collected: {{ formatDate(viewCompletedOrderData.order.collected_date) }}

Items

Item Qty Outside Accra
{{ item.item_name }} {{ item.quantity }}

Remarks

{{ r }}

Order Images

Pickup Images

Warehouse Management

Filters

Orders

Showing {{ filteredWarehouseOrders.length }} of {{ warehouseOrders.length }} orders
Order # Client Order Date Status Vessel Amount Left Collected Date Actions
{{ order.order_number }} {{ order.client_name }} {{ formatDate(order.order_date) }} {{ order.order_status }}
{{ getVesselName(order) }}
{{ getVesselStatus(order) }}
No vessel
{{ formatCurrency(order.amount_due - order.amount_paid) }} {{ formatDate(order.collected_date) || '-' }}

Clients Management

ID Name Phone 1 Phone 2 Digital Address Email Location Type Actions
{{ row.display_id }} {{ row.firstName }} {{ row.surname }} {{ row.phone1 }} {{ row.phone2 || '-' }} {{ row.digital_address || '-' }} {{ row.email }} {{ row.location }} {{ row.client_type }}

Items

Items List

Name Cost Outside Accra Cost Category CBM Size Actions
{{row.name}} {{ formatCurrency(row.unit_cost) }} {{ formatCurrency(row.outside_accra_cost) }} {{row.category}} {{ row.cbm_size || '-' }}

Vessels

Vessels List

Name Departure Date Arrival Date Status Max CBM Capacity Actions
{{row.name}} {{ formatDate(row.departure_date) }} {{ formatDate(row.arrival_date) }} {{row.status || 'Scheduled'}} {{ row.max_cbm_capacity || '-' }}

Communication

Send Bulk Message

Select multiple clients as needed
Password is required for Gmail SMTP authentication and will not be saved

Message Delivery Status (Last 100 Entries)

Timestamp User Recipient Status Message
{{ formatDate(status.timestamp) }} {{ status.user_identity }} {{ status.resource_id }} {{ status.after && status.after.includes('success') ? 'Success' : 'Queued' }} {{ JSON.parse(status.before || '{}').message || '-' }}

No SMS status records available.

Click "Refresh Status" to load the latest SMS delivery status.

Sent Messages (Last 100)

Timestamp Channel Recipient Status Message
{{ formatDate(msg.timestamp) }} SMS Email {{ msg.recipient }} Success Queued {{ msg.message }}

No sent messages available.

Click "Refresh" to load the latest sent messages.

CBM Calculator

Calculate cubic meters and shipping costs

Measurement Unit

Dimensions

Total CBM
{{ calculateCBM.toFixed(3) }}
cubic meters
Estimated Cost
{{ formatCurrency(calculateCBMCost) }}
shipping cost
CBM Rate
{{ formatCurrency(config.cbm_rate || 485.65) }}
per CBM

Package Details

Expense Management

Filters

Total Expenses

{{ formatCurrency(totalExpenses) }}

This Month

{{ formatCurrency(monthExpenses) }}

This Week

{{ formatCurrency(weekExpenses) }}

Today

{{ formatCurrency(todayExpenses) }}

Expenses

Showing {{ filteredExpenses.length }} expenses
Expense # Date Category Description Payment Method Reference Amount Actions
{{ expense.expense_number }} {{ formatDate(expense.expense_date) }} {{ getCategoryName(expense.category_id) }} {{ expense.description || '-' }} {{ expense.payment_method }} {{ expense.reference || '-' }} {{ formatCurrency(expense.amount) }}

{{ expenseForm.id ? 'Edit Expense' : 'Add Expense' }}

{{ categoryForm.id ? 'Edit Category' : 'Add Category' }}

Expense Categories

{{ expenseCategories.length }} categories
ID Name Description Actions
{{ category.id }} {{ category.name }} {{ category.description || '-' }}
No expense categories found. Click "Add Category" to create one.

Reports

Orders

{{ reportResults.total_orders }}

Revenue

{{ formatCurrency(reportResults.total_revenue) }}

Outstanding

{{ formatCurrency(reportResults.outstanding) }}

Completed

{{ reportResults.completed }}

Total Clients

{{ reportResults.total_clients }}

Total Orders

{{ (reportResults.clients || []).reduce(function(sum, c) { return sum + (c.total_orders || 0); }, 0) }}

Total Value

{{ formatCurrency((reportResults.clients || []).reduce(function(sum, c) { return sum + (c.total_value || 0); }, 0)) }}

Corporate

{{ reportResults.clients.filter(function(c) { return c.client_type === 'Corporate'; }).length }}

Total Items

{{ reportResults.total_items }}

Categories

{{ getUniqueCategoriesCount(reportResults.items || []) }}

Avg Cost

{{ formatCurrency((reportResults.items || []).reduce(function(sum, i) { return sum + (i.unit_cost || 0); }, 0) / (reportResults.items || []).length) }}

Total CBM

{{ (reportResults.items || []).reduce(function(sum, i) { return sum + (i.cbm_size || 0); }, 0).toFixed(2) }}

Total Vessels

{{ reportResults.total_vessels }}

Scheduled

{{ (reportResults.vessels || []).filter(function(v) { return v.status === 'Scheduled'; }).length }}

Departed

{{ (reportResults.vessels || []).filter(function(v) { return v.status === 'Departed'; }).length }}

Arrived

{{ (reportResults.vessels || []).filter(function(v) { return v.status === 'Arrived'; }).length }}

Order # Client Date Total Paid Status
{{ o.order_number }} {{ o.client_name }} {{ formatDate(o.order_date) }} {{ formatCurrency(o.amount_due) }} {{ formatCurrency(o.amount_paid) }} {{ o.order_status }}
No orders found
ID Name Email Phone Location Type Orders Value
{{ c.display_id }} {{ c.name }} {{ c.email }} {{ c.phone1 }} {{ c.location }} {{ c.client_type }} {{ c.total_orders || 0 }} {{ formatCurrency(c.total_value || 0) }}
No clients found
Name Category Cost Outside Accra Cost CBM Size
{{ i.name }} {{ i.category }} {{ formatCurrency(i.unit_cost) }} {{ formatCurrency(i.outside_accra_cost) }} {{ i.cbm_size || '-' }}
No items found
Name Departure Date Arrival Date Status Max CBM Capacity
{{ v.name }} {{ formatDate(v.departure_date) }} {{ formatDate(v.arrival_date) }} {{ v.status || 'Scheduled' }} {{ v.max_cbm_capacity || '-' }}
No vessels found

Total Expenses

{{ formatCurrency(reportResults.total_expenses || 0) }}

This Month

{{ formatCurrency(reportResults.month_expenses || 0) }}

This Week

{{ formatCurrency(reportResults.week_expenses || 0) }}

Today

{{ formatCurrency(reportResults.today_expenses || 0) }}

Expense # Date Category Description Payment Method Reference Amount
{{ e.expense_number }} {{ formatDate(e.expense_date) }} {{ getCategoryName(e.category_id) }} {{ e.description || '-' }} {{ e.payment_method }} {{ e.reference || '-' }} {{ formatCurrency(e.amount) }}
No expenses found

Admin

Users

Username Role Status Actions
{{ u.username }} {{ u.role }} {{ u.active ? 'Active' : 'Disabled' }}

System Configuration

Mass Upload

Upload Clients

Upload Items

Upload Vessels

Company Information

API Request Logs (Last 100)

Timestamp User Method Path Action Resource Resource ID
{{ formatDate(log.timestamp) }} {{ log.user_identity }} {{ log.method }} {{ log.path }} {{ log.action_type || '-' }} {{ log.resource || '-' }} {{ log.resource_id || '-' }}

No API logs available.

Click "Refresh Logs" to load the latest API requests.

CBM Configuration

Payment Instructions

Terms & Conditions

Backup Management

Backup

Create manual backup of database

Backups are retained weekly for up to 6 months

Leave empty to save to server backup folder

Restore

Restore database from a backup file

Choose restore method

Restore from server backup folder


Restore from your local file

Server Backups

Loading backups...

No backups found in server folder

{{ backup.filename }}

{{ formatDate(backup.modified_date) }}

{{ formatFileSize(backup.size) }}

Select Backup Folder

Enter the full path where you want to save the backup file:

Complete Order

Order: {{ completeOrderData.order_number }}

Client:

{{ completeOrderData.client_name }}

Total Amount:

{{ formatCurrency(completeOrderData.amount_due) }}

Validation Errors:

  • {{ error }}

Complete Order

Order: {{ warehouseCompleteData.order_number }}

Client:

{{ warehouseCompleteData.client_name }}

Validation Errors:

  • {{ error }}

Add Payment

Order: {{ warehousePaymentData.order_number }}

View Order

Order Number

{{ warehouseViewData.order_number }}

Order Date

{{ formatDate(warehouseViewData.order_date) }}

Client

{{ warehouseViewData.client_name }}

Status

{{ warehouseViewData.order_status }}

Vessel Information

{{ getVesselName(warehouseViewData) }} {{ getVesselStatus(warehouseViewData) }}
No vessel assigned

Order Items

Item Qty Outside Accra
{{ item.item_name }} {{ item.quantity }}
No items found

Payment Information

Amount Left

{{ formatCurrency(warehouseViewData.amount_due - warehouseViewData.amount_paid) }}

Remarks

{{ warehouseViewData.remarks || 'No remarks' }}

Order Images

Pickup Images

Apply Discount

Order: {{ viewOrderData.order.order_number }}

Current Subtotal:

{{ formatCurrency(orderSubtotalBeforeDiscount) }}

Current Discount:

{{ formatCurrency(viewOrderData.order.discount_amount) }} ({{ viewOrderData.order.discount_reason }})

New Total After Discount:

{{ formatCurrency(orderSubtotalBeforeDiscount - (discountForm.amount || 0)) }}

{{ modalMode }} {{ modalType }}