demo-mode
Wes Holland 1 year ago
parent d3364af395
commit d219c136c0

@ -1,10 +1,6 @@
{% extends "problem.html" %}
{% block content %}
{% extends "problem.html" %} {% block content %}
<h1>Error</h1>
<p>
Oops, something went wrong. Press the back button to try again.
</p>
<p>Oops, something went wrong. Press the back button to try again.</p>
{% endblock %}

@ -1,22 +1,37 @@
{% extends "main.html" %}
{% extends "main.html" %} {% block title %} Items {% endblock %} {% block
content %}
{% block title %} Items {% endblock %}
{% block content %}
<div class="mx-auto px-4 mb-4">
<label for="item-filter" class="mb-2 text-sm font-medium text-gray-900 sr-only dark:text-white">Search</label>
<div class="relative content-center mb-4 max-w-56">
<div class="absolute inset-y-0 start-0 flex items-center ps-3 pointer-events-none">
<svg class="w-4 h-4 text-gray-500 dark:text-gray-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z"/>
<div class="mx-auto mb-4 px-4">
<label
for="item-filter"
class="sr-only mb-2 text-sm font-medium text-gray-900 dark:text-white"
>Search</label
>
<div class="relative mb-4 max-w-56 content-center">
<div
class="pointer-events-none absolute inset-y-0 start-0 flex items-center ps-3"
>
<svg
class="h-4 w-4 text-gray-500 dark:text-gray-400"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 20 20"
>
<path
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z"
/>
</svg>
</div>
<input id="item-filter"
class="block w-full p-4 ps-10 text-sm bg-slate-100 text-neutral-900 dark:bg-neutral-900 dark:text-slate-100 border border-gray-300 rounded-lg focus:ring-paynes-gray focus:border-paynes-gray"
type="search" name="q"
<input
id="item-filter"
class="block w-full rounded-lg border border-gray-300 bg-slate-100 p-4 ps-10 text-sm text-neutral-900 focus:border-paynes-gray focus:ring-paynes-gray dark:bg-neutral-900 dark:text-slate-100"
type="search"
name="q"
placeholder="Filter"
aria-label="Filter"
value='{{ query.search.as_deref().unwrap_or("") }}'
@ -30,7 +45,6 @@
<div id="items" class="container">
{% include "catalog_item_fragment.html" %}
</div>
</div>
{% endblock %}

@ -1,10 +1,13 @@
<div class="mx-auto">
<div class="flex flex-col">
{% for item in items %}
<div class="mb-4 mx-1 flex flex-row">
<div class="mx-1 mb-4 flex flex-row">
<div class="basis-1/2">
<a class="font-medium text-paynes-gray dark:text-paynes-gray hover:underline"
href="/item/{{item.id}}/" hx-push-url="true">
<a
class="font-medium text-paynes-gray hover:underline dark:text-paynes-gray"
href="/item/{{item.id}}/"
hx-push-url="true"
>
{{ item.name }}
</a>
</div>

@ -1,10 +1,9 @@
{% extends "problem.html" %}
{% block content %}
{% extends "problem.html" %} {% block content %}
<h1>Forbidden</h1>
<p>
You are forbidden from accessing this resource. Please contact your supervisor or <a href="/auth/logout">logout</a>
You are forbidden from accessing this resource. Please contact your supervisor
or <a href="/auth/logout">logout</a>
and log back in with a different user.
</p>

@ -1,30 +1,56 @@
{% extends "main.html" %}
{% block title %} Audit Log {% endblock %}
{% block content %}
{% extends "main.html" %} {% block title %} Audit Log {% endblock %} {% block
content %}
<h1>Audit Log (Coming soon)</h1>
<section class="container mb-4">
<form action="/history" hx-get="/history" hx-trigger="change" hx-target="#items">
<form
action="/history"
hx-get="/history"
hx-trigger="change"
hx-target="#items"
>
<div class="row">
<div class="col-sm-2">
<label for="start-date" class="form-label">Start Date</label>
<input type="date" id="start-date" name="start-date" value="{{ start_date }}" class="form-control" />
<input
type="date"
id="start-date"
name="start-date"
value="{{ start_date }}"
class="form-control"
/>
</div>
<div class="col-sm-2">
<label for="start-time" class="form-label">Start Time</label>
<input type="time" id="start-time" name="start-time" value="{{ start_time }}" class="form-control"/>
<input
type="time"
id="start-time"
name="start-time"
value="{{ start_time }}"
class="form-control"
/>
<small class="form-text">Timezone {{ time_zone }}</small>
</div>
<div class="col-sm-2">
<label for="end-date" class="form-label">End Date</label>
<input type="date" id="end-date" name="end-date" value="{{ end_date }}" class="form-control"/>
<input
type="date"
id="end-date"
name="end-date"
value="{{ end_date }}"
class="form-control"
/>
</div>
<div class="col-sm-2">
<label for="end-time" class="form-label">End Time</label>
<input type="time" id="end-time" name="end-time" value="{{ end_time }}" class="form-control"/>
<input
type="time"
id="end-time"
name="end-time"
value="{{ end_time }}"
class="form-control"
/>
<small class="form-text">Timezone {{ time_zone }}</small>
</div>
</div>

@ -1,4 +1,3 @@
<div class="card">
<ul class="list-group list-group-flush">
{% for item in items %}
@ -8,12 +7,11 @@
<p class="col">{{ item.item_name }}</p>
<p class="col">{{ item.user_name }}</p>
<p class="col">
{% match item.item_type %}
{% when HistoryItemEntry::PositiveAdjustment with (entry) %}
{{ entry.amount }} @ {{ entry.unit_value }}
{% when HistoryItemEntry::NegativeAdjustment with (entry) %}
{{ entry.amount }} {{ entry.reason }}
{% endmatch %}
{% match item.item_type %} {% when
HistoryItemEntry::PositiveAdjustment with (entry) %} {{ entry.amount
}} @ {{ entry.unit_value }} {% when
HistoryItemEntry::NegativeAdjustment with (entry) %} {{ entry.amount
}} {{ entry.reason }} {% endmatch %}
</p>
</div>
</li>

@ -1,22 +1,37 @@
{% extends "main.html" %}
{% extends "main.html" %} {% block title %} Home {% endblock %} {% block content
%}
{% block title %} Home {% endblock %}
{% block content %}
<div class="mx-auto px-4 mb-4">
<label for="default-search" class="mb-2 text-sm font-medium text-gray-900 sr-only dark:text-white">Search</label>
<div class="relative content-center mb-4 max-w-56">
<div class="absolute inset-y-0 start-0 flex items-center ps-3 pointer-events-none">
<svg class="w-4 h-4 text-gray-500 dark:text-gray-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z"/>
<div class="mx-auto mb-4 px-4">
<label
for="default-search"
class="sr-only mb-2 text-sm font-medium text-gray-900 dark:text-white"
>Search</label
>
<div class="relative mb-4 max-w-56 content-center">
<div
class="pointer-events-none absolute inset-y-0 start-0 flex items-center ps-3"
>
<svg
class="h-4 w-4 text-gray-500 dark:text-gray-400"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 20 20"
>
<path
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z"
/>
</svg>
</div>
<input id="default-search"
class="block w-full p-4 ps-10 text-sm bg-slate-100 text-neutral-900 dark:bg-neutral-900 dark:text-slate-100 border border-gray-300 rounded-lg focus:ring-paynes-gray focus:border-paynes-gray"
type="search" name="q"
<input
id="default-search"
class="block w-full rounded-lg border border-gray-300 bg-slate-100 p-4 ps-10 text-sm text-neutral-900 focus:border-paynes-gray focus:ring-paynes-gray dark:bg-neutral-900 dark:text-slate-100"
type="search"
name="q"
placeholder="Search"
aria-label="Search"
value='{{ query.search.as_deref().unwrap_or("") }}'

@ -2,19 +2,26 @@
<div class="mx-auto">
<div class="flex flex-col">
{% for item in items %}
<div class="mb-4 mx-1 flex flex-row">
<div class="mx-1 mb-4 flex flex-row">
<div class="basis-1/2">
<a class="font-medium text-paynes-gray dark:text-paynes-gray hover:underline"
href="/item/{{item.id}}/" hx-push-url="true">
<a
class="font-medium text-paynes-gray hover:underline dark:text-paynes-gray"
href="/item/{{item.id}}/"
hx-push-url="true"
>
{{ item.name }}
</a>
</div>
<div class="basis-1/4">
Count: <span id="item-{{item.id}}-count" hx-get="/item/{{item.id}}/count" hx-trigger="load">0</span>
</div>
<div class="basis-1/4">
Reorder Point: {{ item.reorder_point }}
Count:
<span
id="item-{{item.id}}-count"
hx-get="/item/{{item.id}}/count"
hx-trigger="load"
>0</span
>
</div>
<div class="basis-1/4">Reorder Point: {{ item.reorder_point }}</div>
</div>
{% endfor %}
</div>

@ -1,6 +1,12 @@
<table class="w-full text-sm text-left rtl:text-right" hx-get="/item/{{item_id}}/adjustments" hx-trigger="new-adjustment from:body" hx-swap="outerHTML">
<thead class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400">
<table
class="w-full text-left text-sm rtl:text-right"
hx-get="/item/{{item_id}}/adjustments"
hx-trigger="new-adjustment from:body"
hx-swap="outerHTML"
>
<thead
class="bg-gray-50 text-xs uppercase text-gray-700 dark:bg-gray-700 dark:text-gray-400"
>
<tr>
<th class="px-6 py-3" scope="col">Date</th>
<th class="px-6 py-3" scope="col">Amount</th>

@ -1,21 +1,30 @@
<form hx-post="/item/{{item_id}}/adjustment/negative"
hx-target="this" hx-swap="outerHTML"
<form
hx-post="/item/{{item_id}}/adjustment/negative"
hx-target="this"
hx-swap="outerHTML"
x-ref="formNegativeAdjustment"
x-data="{ reason: 'Sale', reason_dropdown_show: false }">
x-data="{ reason: 'Sale', reason_dropdown_show: false }"
>
<div class="mb-5">
<label for="amount" class="block mb-2 text-sm font-medium">Amount</label>
<input type="number"
<label for="amount" class="mb-2 block text-sm font-medium">Amount</label>
<input
type="number"
id="amount"
name="amount"
step="0.01"
class="border border-neutral-900 text-neutral-900 dark:text-slate-100 text-sm rounded-lg focus:ring-paynes-gray focus:border-paynes-gray block max-w-56 p-2.5"
class="block max-w-56 rounded-lg border border-neutral-900 p-2.5 text-sm text-neutral-900 focus:border-paynes-gray focus:ring-paynes-gray dark:text-slate-100"
placeholder="Amount"
aria-label="amount"
required
{% if !amount_error.is_empty() -%}
{%
if
!amount_error.is_empty()
-%}
aria-invalid="true"
aria-describedby="invalid-amount"
{% endif -%}
{%
endif
-%}
/>
{% if !amount_error.is_empty() -%}
<small id="invalid-amount" class="mt-2 text-sm text-cerise">
@ -25,54 +34,82 @@
</div>
<div class="mb-5 flex justify-start">
<button
class="text-slate-100 bg-english-violet hover:bg-dark-cyan focus:ring-4 focus:ring-dark-cyan font-medium rounded-l-lg text-sm px-5 py-2.5 focus:outline-none"
x-text="reason">
class="rounded-l-lg bg-english-violet px-5 py-2.5 text-sm font-medium text-slate-100 hover:bg-dark-cyan focus:outline-none focus:ring-4 focus:ring-dark-cyan"
x-text="reason"
>
Sale
</button>
<div x-data="{ isOpen: false, openedWithKeyboard: false }"
<div
x-data="{ isOpen: false, openedWithKeyboard: false }"
class="relative w-fit"
x-on:keydown.esc.window="isOpen = false; openedWithKeyboard = false">
<button type="button" x-on:click="isOpen = ! isOpen"
class="text-slate-100 bg-english-violet hover:bg-dark-cyan focus:ring-4 focus:ring-dark-cyan font-medium rounded-r-lg text-sm px-3.5 py-3.5 focus:outline-none inline-flex items-center whitespace-nowrap rounded-radius border-l-2 border-slate-100 dark:border-neutral-900 tracking-wide transition"
aria-haspopup="true" x-on:keydown.space.prevent="openedWithKeyboard = true"
x-on:keydown.esc.window="isOpen = false; openedWithKeyboard = false"
>
<button
type="button"
x-on:click="isOpen = ! isOpen"
class="rounded-radius inline-flex items-center whitespace-nowrap rounded-r-lg border-l-2 border-slate-100 bg-english-violet px-3.5 py-3.5 text-sm font-medium tracking-wide text-slate-100 transition hover:bg-dark-cyan focus:outline-none focus:ring-4 focus:ring-dark-cyan dark:border-neutral-900"
aria-haspopup="true"
x-on:keydown.space.prevent="openedWithKeyboard = true"
x-on:keydown.enter.prevent="openedWithKeyboard = true"
x-on:keydown.down.prevent="openedWithKeyboard = true"
x-bind:class="isOpen || openedWithKeyboard ? 'text-on-surface-strong dark:text-on-surface-dark-strong' : 'text-on-surface dark:text-on-surface-dark'"
x-bind:aria-expanded="isOpen || openedWithKeyboard">
x-bind:aria-expanded="isOpen || openedWithKeyboard"
>
<span class="sr-only">Reason Options</span>
<svg aria-hidden="true" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"
stroke-width="2" stroke="currentColor" class="size-4 rotate-0">
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5"/>
<svg
aria-hidden="true"
fill="none"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
stroke-width="2"
stroke="currentColor"
class="size-4 rotate-0"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M19.5 8.25l-7.5 7.5-7.5-7.5"
/>
</svg>
</button>
<!-- Dropdown Menu -->
<div x-cloak
<div
x-cloak
x-show="isOpen || openedWithKeyboard"
x-transition
x-trap="openedWithKeyboard"
x-on:click.outside="isOpen = false, openedWithKeyboard = false"
x-on:keydown.down.prevent="$focus.wrap().next()"
x-on:keydown.up.prevent="$focus.wrap().previous()"
class="bg-slate-100 dark:bg-neutral-900 absolute top-11 left-0 flex w-fit min-w-48 flex-col overflow-hidden rounded-radius border border-outline border-neutral-900 dark:border-slate-100"
role="menu">
<a class="px-4 py-2 text-sm hover:bg-dark-cyan hover:font-semibold focus-visible:bg-dark-cyan focus-visible:font-semibold focus-visible:outline-hidden"
class="rounded-radius border-outline absolute left-0 top-11 flex w-fit min-w-48 flex-col overflow-hidden border border-neutral-900 bg-slate-100 dark:border-slate-100 dark:bg-neutral-900"
role="menu"
>
<a
class="focus-visible:outline-hidden px-4 py-2 text-sm hover:bg-dark-cyan hover:font-semibold focus-visible:bg-dark-cyan focus-visible:font-semibold"
role="menuitem"
@click="reason = 'Sale'; isOpen = false">
@click="reason = 'Sale'; isOpen = false"
>
Sale
</a>
<a class="px-4 py-2 text-sm hover:bg-dark-cyan hover:font-semibold focus-visible:bg-dark-cyan focus-visible:font-semibold focus-visible:outline-hidden"
<a
class="focus-visible:outline-hidden px-4 py-2 text-sm hover:bg-dark-cyan hover:font-semibold focus-visible:bg-dark-cyan focus-visible:font-semibold"
role="menuitem"
@click="reason = 'Destruction'; isOpen = false">
@click="reason = 'Destruction'; isOpen = false"
>
Destruction
</a>
<a class="px-4 py-2 text-sm hover:bg-dark-cyan hover:font-semibold focus-visible:bg-dark-cyan focus-visible:font-semibold focus-visible:outline-hidden"
<a
class="focus-visible:outline-hidden px-4 py-2 text-sm hover:bg-dark-cyan hover:font-semibold focus-visible:bg-dark-cyan focus-visible:font-semibold"
role="menuitem"
@click="reason = 'Expiration'; isOpen = false">
@click="reason = 'Expiration'; isOpen = false"
>
Expiration
</a>
<a class="px-4 py-2 text-sm hover:bg-dark-cyan hover:font-semibold focus-visible:bg-dark-cyan focus-visible:font-semibold focus-visible:outline-hidden"
<a
class="focus-visible:outline-hidden px-4 py-2 text-sm hover:bg-dark-cyan hover:font-semibold focus-visible:bg-dark-cyan focus-visible:font-semibold"
role="menuitem"
@click="reason = 'Theft'; isOpen = false">
@click="reason = 'Theft'; isOpen = false"
>
Theft
</a>
</div>

@ -1,21 +1,28 @@
<form hx-post="/item/{{item_id}}/adjustment/positive"
hx-target="this" hx-swap="outerHTML">
<form
hx-post="/item/{{item_id}}/adjustment/positive"
hx-target="this"
hx-swap="outerHTML"
>
<div class="mb-5">
<label for="amount" class="block mb-2 text-sm font-medium">Amount</label>
<label for="amount" class="mb-2 block text-sm font-medium">Amount</label>
<input
type="number"
id="amount"
name="amount"
class="border border-neutral-900 text-neutral-900 dark:text-slate-100 text-sm rounded-lg focus:ring-paynes-gray focus:border-paynes-gray block max-w-56 p-2.5"
class="block max-w-56 rounded-lg border border-neutral-900 p-2.5 text-sm text-neutral-900 focus:border-paynes-gray focus:ring-paynes-gray dark:text-slate-100"
step="0.01"
placeholder="Amount"
aria-label="amount"
required
{% if !amount_error.is_empty() -%}
{%
if
!amount_error.is_empty()
-%}
aria-invalid="true"
aria-describedby="invalid-amount"
{% endif -%}
{%
endif
-%}
/>
{% if !amount_error.is_empty() -%}
<small id="invalid-amount" class="mt-2 text-sm text-cerise">
@ -24,24 +31,36 @@
{% endif -%}
</div>
<div class="mb-5">
<label for="price" class="block mb-2 text-sm font-medium">Price</label>
<input type="text"
<label for="price" class="mb-2 block text-sm font-medium">Price</label>
<input
type="text"
id="price"
name="price"
class="border border-neutral-900 text-neutral-900 dark:text-slate-100 text-sm rounded-lg focus:ring-paynes-gray focus:border-paynes-gray block max-w-56 p-2.5"
class="block max-w-56 rounded-lg border border-neutral-900 p-2.5 text-sm text-neutral-900 focus:border-paynes-gray focus:ring-paynes-gray dark:text-slate-100"
placeholder="Price"
aria-label="price"
required
{% if !price_error.is_empty() -%}
{%
if
!price_error.is_empty()
-%}
aria-invalid="true"
aria-describedby="invalid-price"
{% endif -%}
{%
endif
-%}
/>
{% if !price_error.is_empty() -%}
<small id="invalid-price" class="mt-2 text-sm text-cerise">{{ price_error }}</small>
<small id="invalid-price" class="mt-2 text-sm text-cerise"
>{{ price_error }}</small
>
{% endif -%}
</div>
<div class="mb-5">
<button class="text-slate-100 bg-english-violet hover:bg-dark-cyan focus:ring-4 focus:ring-dark-cyan font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 focus:outline-none">Add</button>
<button
class="mb-2 me-2 rounded-lg bg-english-violet px-5 py-2.5 text-sm font-medium text-slate-100 hover:bg-dark-cyan focus:outline-none focus:ring-4 focus:ring-dark-cyan"
>
Add
</button>
</div>
</form>

@ -1,48 +1,66 @@
{% extends "main.html" %}
{% extends "main.html" %} {% block title %} Items {% endblock %} {% block
content %}
{% block title %} Items {% endblock %}
{% block content %}
<h2 class="flex items-center text-4xl font-extrabold mb-4">
{{item.name}}
{% if !item.active %}
<span class="bg-orchid-pink text-cerise border border-cerise text-2xl font-semibold me-2 px-2.5 py-0.5 rounded ms-2">
<h2 class="mb-4 flex items-center text-4xl font-extrabold">
{{item.name}} {% if !item.active %}
<span
class="me-2 ms-2 rounded border border-cerise bg-orchid-pink px-2.5 py-0.5 text-2xl font-semibold text-cerise"
>
Inactive
</span>
{% endif %}
</h2>
<section hx-get="/item/{{item_id}}/stats" hx-trigger="load" hx-swap="outerHTML"></section>
<section
hx-get="/item/{{item_id}}/stats"
hx-trigger="load"
hx-swap="outerHTML"
></section>
{% if item.active %}
<section class="mx-auto mb-5"
x-data="{ negative_form_open: false, positive_form_open: false }">
<section
class="mx-auto mb-5"
x-data="{ negative_form_open: false, positive_form_open: false }"
>
<div class="flex justify-evenly">
<button class="text-slate-100 bg-paynes-gray hover:bg-dark-cyan focus:ring-4 focus:ring-dark-cyan font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 focus:outline-none"
@click="negative_form_open = ! negative_form_open">
<button
class="mb-2 me-2 rounded-lg bg-paynes-gray px-5 py-2.5 text-sm font-medium text-slate-100 hover:bg-dark-cyan focus:outline-none focus:ring-4 focus:ring-dark-cyan"
@click="negative_form_open = ! negative_form_open"
>
Minus
</button>
<button class="text-slate-100 bg-paynes-gray hover:bg-dark-cyan focus:ring-4 focus:ring-dark-cyan font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 focus:outline-none"
@click="positive_form_open = ! positive_form_open">
<button
class="mb-2 me-2 rounded-lg bg-paynes-gray px-5 py-2.5 text-sm font-medium text-slate-100 hover:bg-dark-cyan focus:outline-none focus:ring-4 focus:ring-dark-cyan"
@click="positive_form_open = ! positive_form_open"
>
Plus
</button>
</div>
<div x-show="negative_form_open" @click.outside="negative_form_open = false">
<div hx-get="/item/{{item_id}}/adjustment/negative" hx-trigger="load" hx-swap="outerHTML"></div>
<div
hx-get="/item/{{item_id}}/adjustment/negative"
hx-trigger="load"
hx-swap="outerHTML"
></div>
</div>
<div x-show="positive_form_open" @click.outside="positive_form_open = false">
<div hx-get="/item/{{item_id}}/adjustment/positive" hx-trigger="load" hx-swap="outerHTML"></div>
<div
hx-get="/item/{{item_id}}/adjustment/positive"
hx-trigger="load"
hx-swap="outerHTML"
></div>
</div>
</section>
{% endif %}
<section class="mx-auto">
<div hx-get="/item/{{item_id}}/adjustments" hx-trigger="load" hx-swap="outerHTML">
</div>
<div
hx-get="/item/{{item_id}}/adjustments"
hx-trigger="load"
hx-swap="outerHTML"
></div>
</section>
{% endblock %}

@ -1,18 +1,25 @@
<section hx-get="/item/{{item_id}}/stats" hx-trigger="new-adjustment from:body" hx-swap="outerHTML" class="mb-4">
<section
hx-get="/item/{{item_id}}/stats"
hx-trigger="new-adjustment from:body"
hx-swap="outerHTML"
class="mb-4"
>
<div class="flex justify-start">
<div class="border border-space-cadet rounded px-4 py-4 me-4">
<p class="text-xl uppercase text-center">Stock</p>
<p class="text-xl text-center">{{item.amount}} {{item.display_unit_short}}</p>
<div class="me-4 rounded border border-space-cadet px-4 py-4">
<p class="text-center text-xl uppercase">Stock</p>
<p class="text-center text-xl">
{{item.amount}} {{item.display_unit_short}}
</p>
</div>
<div class="border border-space-cadet rounded px-4 py-4 me-4">
<p class="text-xl uppercase text-center">Reorder</p>
<p class="text-xl text-center">{{item.reorder_point}} {{item.display_unit_short}}</p>
<div class="me-4 rounded border border-space-cadet px-4 py-4">
<p class="text-center text-xl uppercase">Reorder</p>
<p class="text-center text-xl">
{{item.reorder_point}} {{item.display_unit_short}}
</p>
</div>
<div class="border border-space-cadet rounded px-4 py-4 me-4">
<p class="text-xl uppercase text-center">Value</p>
<p class="text-xl text-center">{{value}}</p>
<div class="me-4 rounded border border-space-cadet px-4 py-4">
<p class="text-center text-xl uppercase">Value</p>
<p class="text-center text-xl">{{value}}</p>
</div>
</div>
</section>

@ -1,6 +1,4 @@
{% extends "main.html" %}
{% block content %}
{% extends "main.html" %} {% block content %}
<h1>Logged out</h1>
<p>You have been logged out</p>

@ -1,51 +1,75 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light dark">
<link rel="stylesheet" href="/css/main.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="color-scheme" content="light dark" />
<link rel="stylesheet" href="/css/main.css" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script src="/js/htmx.min.js"></script>
<!--TODO Vendor this script -->
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
<script
defer
src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"
></script>
<title>{% block title %}Title{% endblock %}</title>
</head>
<body class="bg-slate-100 text-neutral-900 dark:bg-neutral-900 dark:text-slate-100 min-h-screen">
<header class="bg-space-cadet font-sans mb-4 mx-auto">
<nav class="mx-auto max-w-7xl px-2 py-4 sm:px-6 lg:px-8 flex justify-between gap-2">
<body
class="min-h-screen bg-slate-100 text-neutral-900 dark:bg-neutral-900 dark:text-slate-100"
>
<header class="mx-auto mb-4 bg-space-cadet font-sans">
<nav
class="mx-auto flex max-w-7xl justify-between gap-2 px-2 py-4 sm:px-6 lg:px-8"
>
<div>
<a href="/home" class="rounded-md bg-english-violet px-3 py-2 text-sm font-medium text-white">
<a
href="/home"
class="rounded-md bg-english-violet px-3 py-2 text-sm font-medium text-white"
>
Inventory App
</a>
</div>
<div>
<a href="/overview"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white">
<a
href="/overview"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white"
>
Overview
</a>
<a href="/catalog"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white">
<a
href="/catalog"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white"
>
Catalog
</a>
<a href="/upload"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white">
<a
href="/upload"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white"
>
Upload
</a>
<a href="/reports"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white">
<a
href="/reports"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white"
>
Reports
</a>
<a href="/history"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white">
<a
href="/history"
class="rounded-md px-3 py-2 text-sm font-medium text-gray-300 hover:bg-gray-700 hover:text-white"
>
History
</a>
</div>
</nav>
</header>
<main class="bg-slate-100 text-neutral-900 dark:bg-neutral-900 dark:text-slate-100 mx-auto px-1">
{% block content %}<p>Content Missing</p>{% endblock %}
<main
class="mx-auto bg-slate-100 px-1 text-neutral-900 dark:bg-neutral-900 dark:text-slate-100"
>
{% block content %}
<p>Content Missing</p>
{% endblock %}
</main>
<footer>
<!--
@ -54,7 +78,6 @@
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="dropdown"]');
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
</script>
-->
</footer>
--></footer>
</body>
</html>

@ -1,10 +1,9 @@
{% extends "problem.html" %}
{% block content %}
{% extends "problem.html" %} {% block content %}
<h1>Not Found</h1>
<p>
Sorry, we can't seem to find the page you're looking for. Please press back button or return
Sorry, we can't seem to find the page you're looking for. Please press back
button or return
<a href="/">home</a>.
</p>

@ -1,8 +1,5 @@
{% extends "main.html" %}
{% block title %} Overview {% endblock %}
{% block content %}
{% extends "main.html" %} {% block title %} Overview {% endblock %} {% block
content %}
<h1>Overview (Coming soon)</h1>

@ -1,16 +1,18 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light dark">
<link rel="stylesheet" href="/css/pico.min.css">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="color-scheme" content="light dark" />
<link rel="stylesheet" href="/css/pico.min.css" />
<script src="/js/htmx.min.js"></script>
<title>Problem</title>
</head>
<body>
<main class="container">
{% block content %}<p>Something went wrong</p>{% endblock %}
{% block content %}
<p>Something went wrong</p>
{% endblock %}
</main>
</body>
</html>

@ -1,8 +1,5 @@
{% extends "main.html" %}
{% block title %} Reports {% endblock %}
{% block content %}
{% extends "main.html" %} {% block title %} Reports {% endblock %} {% block
content %}
<h1>Reports (Coming soon)</h1>

@ -1,18 +1,26 @@
{% extends "main.html" %}
{% extends "main.html" %} {% block title %} Upload {% endblock %} {% block
content %}
{% block title %} Upload {% endblock %}
{% block content %}
<form action="/upload/catalog" method="post" enctype="multipart/form-data" x-data="{ file: '' }">
<form
action="/upload/catalog"
method="post"
enctype="multipart/form-data"
x-data="{ file: '' }"
>
<fieldset class="grid">
<h3>Catalog Import</h3>
<label role="button" class="secondary" x-show="!file">
Choose File
<input type="file" name="file" x-model="file" style="display: none" required />
<input
type="file"
name="file"
x-model="file"
style="display: none"
required
/>
</label>
<input type="submit" value="Upload" x-show="file">
<input type="reset" value="Cancel" x-show="file">
<input type="submit" value="Upload" x-show="file" />
<input type="reset" value="Cancel" x-show="file" />
</fieldset>
</form>

Loading…
Cancel
Save

Powered by TurnKey Linux.