diff --git a/app/templates/clients/list.html b/app/templates/clients/list.html index e980be5..37b97f9 100644 --- a/app/templates/clients/list.html +++ b/app/templates/clients/list.html @@ -15,8 +15,14 @@ ) }}
-

Filter Clients

-
+
+

Filter Clients

+ +
+
+
@@ -29,10 +35,11 @@
-
- +
+
+
@@ -49,7 +56,7 @@ -
- +
{% if current_user.is_admin %} - {% endif %} - - - - - + + + + + {% for client in clients %} - + {% if current_user.is_admin %} {% endif %} - - - + + + {% else %} - - - {% endfor %}
+ NameContact PersonEmailStatusProjectsNameContact PersonEmailStatusProjects Actions
{{ client.name }}{{ client.contact_person }}{{ client.email }}{{ client.name }}{{ client.contact_person or '—' }}{{ client.email or '—' }} {% if client.status == 'active' %} - Active + Active {% else %} - Inactive + Inactive {% endif %} @@ -101,66 +108,166 @@
No clients found.
- - {% if current_user.is_admin %} - - - + {% if not clients %} + {% from "components/ui.html" import empty_state %} + {% set actions %} + {% if current_user.is_admin %} + + Create Your First Client + + {% endif %} + + Learn More + + {% endset %} + {{ empty_state('fas fa-users', 'No Clients Found', 'Get started by creating your first client to organize your projects.', actions) }} {% endif %} + +{% if current_user.is_admin %} + + +{% endif %} + +{% endblock %} + +{% block scripts_extra %} + + {% endblock %} diff --git a/app/templates/expenses/list.html b/app/templates/expenses/list.html index 650fd4d..b36e13b 100644 --- a/app/templates/expenses/list.html +++ b/app/templates/expenses/list.html @@ -61,8 +61,14 @@
-

Filter Expenses

-
+
+

Filter Expenses

+ +
+
+
-
+
@@ -156,108 +162,184 @@
+
+{% if current_user.is_admin %} + + + + + + + + + + + +{% endif %} + -
-
- - +
+
+

+ {{ expenses|length }} expense{{ 's' if expenses|length != 1 else '' }} found +

+
+ + Export + + {% if current_user.is_admin %} +
+ + +
+ {% endif %} +
+
+
+
+ - - - - - - - - + {% if current_user.is_admin %} + + {% endif %} + + + + + + + + - + {% if expenses %} {% for expense in expenses %} - - + {% if current_user.is_admin %} + - + - - - - - - + + {% endfor %} - {% else %} - - - {% endif %}
DateTitleCategoryAmountStatusUserProjectActions + + DateTitleCategoryAmountStatusUserProjectActions
- {{ expense.expense_date.strftime('%Y-%m-%d') }} +
+ + {% endif %} + {{ expense.expense_date.strftime('%Y-%m-%d') }} {{ expense.title }} {% if expense.vendor %} -
{{ expense.vendor }}
+
{{ expense.vendor }}
{% endif %}
- + + {{ expense.category|title }} + {{ expense.currency_code }} {{ '%.2f'|format(expense.total_amount) }} {% if expense.billable %} - + {% endif %} + {% if expense.status == 'pending' %} - - Pending - + Pending {% elif expense.status == 'approved' %} - - Approved - + Approved {% elif expense.status == 'rejected' %} - - Rejected - + Rejected {% elif expense.status == 'reimbursed' %} - - Reimbursed - - {% endif %} - - {{ expense.user.username if expense.user else '-' }} - - {% if expense.project %} - - {{ expense.project.name }} - + Reimbursed {% else %} - - + {{ expense.status|title }} {% endif %} -
- - - - {% if current_user.is_admin or expense.user_id == current_user.id %} - - - - {% endif %} -
+
{{ expense.user.username if expense.user else '—' }} + {% if expense.project %} + {{ expense.project.name }} + {% else %} + + {% endif %} + + View
- -

No expenses found

- - Create your first expense - -
+ {% if not expenses %} + {% from "components/ui.html" import empty_state %} + {% set actions %} + + Create Your First Expense + + + Learn More + + {% endset %} + {{ empty_state('fas fa-receipt', 'No Expenses Found', 'Get started by creating your first expense entry.', actions) }} + {% endif %}
@@ -323,3 +405,180 @@ {% endblock %} +{% block scripts_extra %} + + +{% endblock %} + diff --git a/app/templates/invoices/list.html b/app/templates/invoices/list.html index 608911b..f8e3eb6 100644 --- a/app/templates/invoices/list.html +++ b/app/templates/invoices/list.html @@ -26,44 +26,192 @@ {{ info_card("Overdue", "%.2f"|format(summary.overdue_amount), "All time") }}
-
- - +
+
+

Filter Invoices

+ +
+
+
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +
+
+

+ {{ invoices|length }} invoice{{ 's' if invoices|length != 1 else '' }} found +

+
+ + Export + + {% if current_user.is_admin %} +
+ + +
+ {% endif %} +
+
+
+ - - - - - + {% if current_user.is_admin %} + + {% endif %} + + + + + + {% for invoice in invoices %} - - - - - - + {% if current_user.is_admin %} + + {% endif %} + + + + + + {% else %} - - - {% endfor %}
NumberClientStatusTotalActions + + NumberClientStatusTotalDue DateActions
{{ invoice.invoice_number }}{{ invoice.client_name }}{{ invoice.status }}{{ "%.2f"|format(invoice.total_amount) }} {{ invoice.currency_code }} - View - | - Edit - | - +
+ + {{ invoice.invoice_number }}{{ invoice.client_name }} + {% set s = invoice.status %} + {% if s == 'draft' %} + Draft + {% elif s == 'sent' %} + Sent + {% elif s == 'paid' %} + Paid + {% elif s == 'overdue' %} + Overdue + {% else %} + {{ s }} + {% endif %} + {{ "%.2f"|format(invoice.total_amount) }} {{ invoice.currency_code }} + {% if invoice.due_date %} + {{ invoice.due_date.strftime('%Y-%m-%d') }} + {% else %} + + {% endif %} + + View
No invoices found.
+ {% if not invoices %} + {% from "components/ui.html" import empty_state %} + {% set actions %} + + Create Your First Invoice + + + Learn More + + {% endset %} + {{ empty_state('fas fa-file-invoice', 'No Invoices Found', 'Get started by creating your first invoice to bill your clients.', actions) }} + {% endif %}
- + +{% if current_user.is_admin %} + + + + + + + + + + +{% endif %} + + +{% endblock %} + +{% block scripts_extra %} + +{% endblock %} + diff --git a/app/templates/payments/list.html b/app/templates/payments/list.html index 1a9d67a..fae2bab 100644 --- a/app/templates/payments/list.html +++ b/app/templates/payments/list.html @@ -41,7 +41,14 @@
-
+
+

Filter Payments

+ +
+
+
-
- +
+ Clear
+
-
- {% if payments %} -
- - +
+
+

+ {{ payments|length }} payment{{ 's' if payments|length != 1 else '' }} found +

+
+ + Export + + {% if current_user.is_admin %} +
+ + +
+ {% endif %} +
+
+
+
+ - - - - - - - + {% if current_user.is_admin %} + + {% endif %} + + + + + + + - - {% for payment in payments %} - - - - + {% if payments %} + {% for payment in payments %} + + {% if current_user.is_admin %} + {% endif %} - - - - - - - {% endfor %} + + + + + + + + + {% endfor %} + {% endif %}
IDInvoiceAmountDateMethodStatusActions + + IDInvoiceAmountDateMethodStatusActions
#{{ payment.id }} - - {{ payment.invoice.invoice_number }} - - - - {{ payment.amount }} {{ payment.currency or 'EUR' }} - - {% if payment.gateway_fee %} - - Fee: {{ payment.gateway_fee }} {{ payment.currency or 'EUR' }} - +
+ + - {{ payment.payment_date.strftime('%Y-%m-%d') if payment.payment_date else 'N/A' }} - - - {{ payment.method or 'N/A' }} - - - {% if payment.status == 'completed' %} - - Completed - - {% elif payment.status == 'pending' %} - - Pending - - {% elif payment.status == 'failed' %} - - Failed - - {% elif payment.status == 'refunded' %} - - Refunded - - {% endif %} - - View - Edit -
#{{ payment.id }} + + {{ payment.invoice.invoice_number }} + + + + {{ payment.amount }} {{ payment.currency or 'EUR' }} + + {% if payment.gateway_fee %} +
+ Fee: {{ payment.gateway_fee }} {{ payment.currency or 'EUR' }} +
+ {% endif %} +
{{ payment.payment_date.strftime('%Y-%m-%d') if payment.payment_date else '—' }}{{ payment.method or '—' }} + {% if payment.status == 'completed' %} + Completed + {% elif payment.status == 'pending' %} + Pending + {% elif payment.status == 'failed' %} + Failed + {% elif payment.status == 'refunded' %} + Refunded + {% else %} + {{ payment.status|title }} + {% endif %} + + View +
+ {% if not payments %} + {% from "components/ui.html" import empty_state %} + {% set actions %} + + Record Your First Payment + + + Learn More + + {% endset %} + {{ empty_state('fas fa-credit-card', 'No Payments Found', 'Get started by recording your first payment.', actions) }} + {% endif %}
- {% else %} -
-

No payments found.

- Record your first payment -
- {% endif %}
{% endblock %} +{% block scripts_extra %} + + +{% endblock %} + diff --git a/app/templates/per_diem/list.html b/app/templates/per_diem/list.html index cdcd00c..d05dc8f 100644 --- a/app/templates/per_diem/list.html +++ b/app/templates/per_diem/list.html @@ -43,8 +43,14 @@
-

Filter Claims

-
+
+

Filter Claims

+ +
+
+
+ + + + + + + + + +{% endif %} + -
-
- - +
+
+

+ {{ per_diem_claims|length }} claim{{ 's' if per_diem_claims|length != 1 else '' }} found +

+
+ {% if current_user.is_admin %} +
+ + +
+ {% endif %} +
+
+
+
+ - - - - - - - + {% if current_user.is_admin %} + + {% endif %} + + + + + + + - + {% if per_diem_claims %} {% for claim in per_diem_claims %} - - + {% if current_user.is_admin %} + - + - - - - + + + - {% endfor %} - {% else %} - - - {% endif %}
PeriodPurposeLocationDaysAmountStatusActions + + PeriodPurposeLocationDaysAmountStatusActions
- {{ claim.start_date.strftime('%Y-%m-%d') }}
- to {{ claim.end_date.strftime('%Y-%m-%d') }} +
+ + {% endif %} + + {{ claim.start_date.strftime('%Y-%m-%d') }}
+ to {{ claim.end_date.strftime('%Y-%m-%d') }} +
{{ claim.trip_purpose }} {% if claim.project %} -
{{ claim.project.name }}
+
{{ claim.project.name }}
{% endif %}
- {{ claim.city + ', ' if claim.city else '' }}{{ claim.country }} - - {{ claim.total_days if claim.total_days else ((claim.full_days or 0) + (claim.half_days or 0) * 0.5) }} - - {{ claim.currency_code or 'EUR' }} {{ '%.2f'|format(claim.calculated_amount or 0) }} - + {{ claim.city + ', ' if claim.city else '' }}{{ claim.country }}{{ claim.total_days if claim.total_days else ((claim.full_days or 0) + (claim.half_days or 0) * 0.5) }}{{ claim.currency_code or 'EUR' }} {{ '%.2f'|format(claim.calculated_amount or 0) }} {% if claim.status == 'pending' %} - - Pending - + Pending {% elif claim.status == 'approved' %} - - Approved - + Approved {% elif claim.status == 'rejected' %} - - Rejected - + Rejected {% elif claim.status == 'reimbursed' %} - - Reimbursed - + Reimbursed + {% else %} + {{ claim.status|title }} {% endif %} -
- - - - {% if current_user.is_admin or claim.user_id == current_user.id %} - - - - {% endif %} -
+
+ View
- -

No per diem claims found

- - Create your first claim - -
+ {% if not per_diem_claims %} + {% from "components/ui.html" import empty_state %} + {% set actions %} + + Create Your First Claim + + + Learn More + + {% endset %} + {{ empty_state('fas fa-money-bill-alt', 'No Per Diem Claims Found', 'Get started by creating your first per diem claim.', actions) }} + {% endif %}
{% endblock %} +{% block scripts_extra %} + + +{% endblock %} + diff --git a/app/templates/projects/list.html b/app/templates/projects/list.html index 29047ea..0462e06 100644 --- a/app/templates/projects/list.html +++ b/app/templates/projects/list.html @@ -15,7 +15,13 @@ ) }}
-

Filter Projects

+
+

Filter Projects

+ +
+
@@ -46,10 +52,11 @@
-
+
+
@@ -66,7 +73,7 @@ -
- +
{% if current_user.is_admin %} - {% endif %} @@ -97,7 +104,7 @@ {% for project in projects %} - + {% if current_user.is_admin %}
+
@@ -118,18 +125,18 @@ {{ project.client }} {% if project.status == 'active' %} - Active + Active {% elif project.status == 'inactive' %} - Inactive + Inactive {% else %} - Archived + Archived {% endif %} {% if project.billable %} - Billable + Billable {% else %} - Non‑billable + Non-billable {% endif %} @@ -151,7 +158,7 @@ {% else %} {% set badge_classes = 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300' %} {% endif %} - {{ pct|round(0) }}% + {{ pct|round(0) }}% {% else %} {% endif %} @@ -182,6 +189,10 @@ {% endblock %} {% block scripts_extra %} +