{% extends 'admin/layout.html.twig' %} {% block title %}{{ is_new ? 'New' : 'Edit' }} Expense - KitscoApp{% endblock %} {% block page_title %}{{ is_new ? 'New Expense' : 'Edit: ' ~ expense.referenceNumber }}{% endblock %} {% block content %}
Back to Expenses

Expense Details

{{ form_start(form) }}
{# Category dropdown #}
{% set category_options = [] %} {% for choice in form.category.vars.choices %} {% set category_options = category_options|merge([{value: choice.value, label: choice.label}]) %} {% endfor %} {% include 'components/_select_dropdown.html.twig' with { id: form.category.vars.id, name: form.category.vars.full_name, value: form.category.vars.value, label: 'Category', options: category_options, placeholder: 'Select category...', searchable: true, searchPlaceholder: 'Search categories...', required: true, extra_attrs: {'data-expense-form-target': 'category'} } %} {% do form.category.setRendered %}
{{ form_row(form.expenseDate) }}
{{ form_row(form.description) }}
{# Currency and Exchange Rate with Stimulus controller #}
{{ form_row(form.amount) }}
{# Currency dropdown #}
{% set currency_options = [] %} {% for choice in form.currency.vars.choices %} {% set currency_options = currency_options|merge([{value: choice.value, label: choice.label}]) %} {% endfor %} {% include 'components/_select_dropdown.html.twig' with { id: form.currency.vars.id, name: form.currency.vars.full_name, value: form.currency.vars.value, label: 'Currency', options: currency_options, placeholder: 'Select currency...', required: true, extra_attrs: {'data-exchange-rate-target': 'currency', 'data-action': 'change->exchange-rate#toggle'} } %} {% do form.currency.setRendered %}
{# Exchange Rate field - shown only for foreign currencies #}

How many TZS equals 1 unit of the selected currency

{% do form.exchangeRate.setRendered %}
{# Account dropdown #}
{% set account_options = [] %} {% for choice in form.account.vars.choices %} {% set account_options = account_options|merge([{value: choice.value, label: choice.label}]) %} {% endfor %} {% include 'components/_select_dropdown.html.twig' with { id: form.account.vars.id, name: form.account.vars.full_name, value: form.account.vars.value, label: 'Account', options: account_options, placeholder: 'Select account...', required: true } %} {% do form.account.setRendered %}
{# Supplier dropdown #}
{% set supplier_options = [] %} {% for choice in form.supplier.vars.choices %} {% set supplier_options = supplier_options|merge([{value: choice.value, label: choice.label}]) %} {% endfor %} {% include 'components/_select_dropdown.html.twig' with { id: form.supplier.vars.id, name: form.supplier.vars.full_name, value: form.supplier.vars.value, label: 'Supplier', options: supplier_options, placeholder: 'Select supplier (optional)...', searchable: true, searchPlaceholder: 'Search suppliers...', required: false } %} {% do form.supplier.setRendered %}
{# Stock Receipt dropdown #} {% set stock_receipt_options = [] %} {% for choice in form.relatedStockReceipt.vars.choices %} {% set stock_receipt_options = stock_receipt_options|merge([{value: choice.value, label: choice.label}]) %} {% endfor %} {% include 'components/_select_dropdown.html.twig' with { id: form.relatedStockReceipt.vars.id, name: form.relatedStockReceipt.vars.full_name, value: form.relatedStockReceipt.vars.value, label: 'Related Stock Receipt', options: stock_receipt_options, placeholder: 'Select stock receipt (optional)...', searchable: true, searchPlaceholder: 'Search receipts...', required: false } %} {% do form.relatedStockReceipt.setRendered %}

Only shown for "Restocking" category

{# Receipt file upload with drag & drop #} {% set is_image = expense.receiptPath and expense.receiptPath|lower matches '/\\.(jpg|jpeg|png|gif|webp)$/' %}
{# Drop zone prompt #}

Drag & drop your receipt here

or browse to upload

PNG, JPG, PDF up to 5MB

{# Loading indicator #} {# Preview container #}
Preview

{{ expense.receiptPath ? 'Current receipt' : '' }}

{% if expense.receiptPath %} View | {% endif %}
{# Error message #} {# Hidden file input #} {{ form_widget(form.receiptFile, {attr: {class: 'sr-only absolute', 'data-file-dropzone-target': 'input'}}) }}
{{ form_errors(form.receiptFile) }} {% do form.receiptFile.setRendered %}
{{ form_row(form.notes) }}
{{ form_row(form.isReconciled) }}
{% if not is_new %} {% else %}
{% endif %}
Cancel
{{ form_end(form) }} {% if not is_new %} {% endif %}
{% endblock %} {% block javascripts %} {{ parent() }} {% endblock %}