Initial commit: aplicatie de cantarire si etichetare
Aplicatie Flask + SQLite pentru productie alimentara: cantarirea componentelor unui produs finit si tiparirea etichetei prin QZ Tray. - produse finite (retete) formate din componente cantarite - designer vizual de etichete (mm/px, zona sigura, campuri variabile, cod QR cu continut din mai multe bucati) - legare produs finit -> sablon de eticheta - navigare pe doua taburi: Cantarire / Setari - administrare: componente, produse finite, sabloane, campuri, istoric - backup, resetare baza de date, checklist de pregatire, /healthz - CLI de administrare si serviciu systemd pentru productie - vendor/syncpulse-scale-bridge (GPL-3.0-or-later) pentru citirea cantarului
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Câmpuri variabile{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<section class="page-head">
|
||||
<div>
|
||||
<h1>Câmpuri variabile</h1>
|
||||
<p class="subtitle">
|
||||
Text gata de pus pe etichetă, care poate prelua date din pachet, produs sau firmă.
|
||||
</p>
|
||||
</div>
|
||||
<a class="btn primary" href="{{ url_for('fields.create') }}">+ Câmp nou</a>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
{% if fields %}
|
||||
<div class="table-wrap">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Denumire</th>
|
||||
<th>Text</th>
|
||||
<th>Rezultat (demo)</th>
|
||||
<th>Cheie</th>
|
||||
<th>Șabloane</th>
|
||||
<th>Stare</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for f in fields %}
|
||||
<tr class="{{ 'row-muted' if not f.active }}">
|
||||
<td><strong>{{ f.label }}</strong></td>
|
||||
<td><code class="field-template">{{ f.template }}</code></td>
|
||||
<td>{{ f.preview or "-" }}</td>
|
||||
<td><code class="muted">{{ f.key }}</code></td>
|
||||
<td>
|
||||
{% if f.usage %}<a class="link" href="{{ url_for('label_templates.index') }}">{{ f.usage }}</a>
|
||||
{% else %}<span class="muted">-</span>{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if f.active %}<span class="badge ok">activ</span>
|
||||
{% else %}<span class="badge off">inactiv</span>{% endif %}
|
||||
</td>
|
||||
<td class="right nowrap">
|
||||
<a class="link" href="{{ url_for('fields.edit', field_id=f.id) }}">Editează</a>
|
||||
<form class="inline" method="post" action="{{ url_for('fields.remove', field_id=f.id) }}"
|
||||
onsubmit="return confirm('Ștergi câmpul {{ f.label }}?{% if f.usage %} Este folosit în {{ f.usage }} șabloane și va apărea gol.{% endif %}');">
|
||||
<button class="link danger" type="submit">Șterge</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="muted">
|
||||
Nu există câmpuri proprii. <a href="{{ url_for('fields.create') }}">Adaugă primul câmp</a>
|
||||
sau folosește câmpurile fixe din designer.
|
||||
</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2>Cum funcționează</h2>
|
||||
<p class="muted small">
|
||||
În textul câmpului poți scrie orice, iar între acolade poți pune un câmp existent:
|
||||
<code>Tel. {{ '{{company.phone}}' }}</code> sau
|
||||
<code>{{ '{{recipe.name}}' }} · lot {{ '{{package.lot}}' }}</code>.
|
||||
La tipărire, acestea sunt înlocuite cu datele reale. Câmpurile proprii apar în designer
|
||||
în grupul <strong>Câmpuri proprii</strong>.
|
||||
</p>
|
||||
</section>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user