{# app/templates/admin/inventory.html #} {% extends "admin/base.html" %} {% from 'shared/macros/pagination.html' import pagination %} {% from 'shared/macros/headers.html' import page_header_flex, refresh_button %} {% from 'shared/macros/alerts.html' import loading_state, error_state %} {% from 'shared/macros/tables.html' import table_wrapper %} {% from 'shared/macros/modals.html' import modal_simple %} {% from 'shared/macros/inputs.html' import vendor_selector %} {% block title %}Inventory{% endblock %} {% block alpine_data %}adminInventory(){% endblock %} {% block content %} {% call page_header_flex(title='Inventory', subtitle='Manage stock levels across all vendors') %}
{{ vendor_selector( ref_name='vendorSelect', id='inventory-vendor-select', placeholder='Filter by vendor...', width='w-80' ) }} {{ refresh_button(loading_var='loading', onclick='refresh()', variant='secondary') }}
{% endcall %}
{{ loading_state('Loading inventory...') }} {{ error_state('Error loading inventory') }}

Total Entries

0

Total Stock

0

Available

0

Low Stock

0

{% call table_wrapper() %} Product Vendor Location Quantity Reserved Available Status Actions {% endcall %} {{ pagination(show_condition="!loading && pagination.total > 0") }}
{% call modal_simple('adjustStockModal', 'Adjust Stock', show_var='showAdjustModal', size='sm') %}

Location:

Current Stock:

{# noqa: FE-008 - Custom stepper with negative values for stock adjustments #}

Positive = add stock, Negative = remove stock

New quantity will be:

{% endcall %} {% call modal_simple('setQuantityModal', 'Set Quantity', show_var='showSetModal', size='sm') %}

Location:

Current Stock:

{% endcall %} {% call modal_simple('deleteModal', 'Delete Inventory Entry', show_var='showDeleteModal', size='sm') %}

Are you sure you want to delete this inventory entry?

Location:

Current Stock:

This action cannot be undone.

{% endcall %} {% call modal_simple('importModal', 'Import Inventory', show_var='showImportModal', size='md') %}

Upload a TSV or CSV file to import inventory. Products are matched by EAN/GTIN.

File Format:

BIN EAN PRODUCT QUANTITY

Required: BIN, EAN
Optional: PRODUCT (display only), QUANTITY (defaults to 1 per row)

{% endcall %} {% endblock %} {% block extra_scripts %} {% endblock %}