Commit inicial - upload de todos os arquivos da pasta

This commit is contained in:
2026-07-24 23:55:21 -03:00
commit 9d4d395881
88 changed files with 9484 additions and 0 deletions
+144
View File
@@ -0,0 +1,144 @@
{% extends "base.html" %}
{% block title %}Documentos{% endblock %}
{% block content %}
<div class="page-head">
<div>
<h2>Documentos</h2>
<p class="muted">{{ total_count }} registro(s) · total {{ total | money }}</p>
</div>
<a href="/documents/new" class="btn btn-primary btn-sm">+ Novo lançamento</a>
</div>
<section class="card">
<form method="get" action="/documents" class="filters">
<label class="field">
<span>De (competência)</span>
<span class="field-group">
<select name="start_mes">
<option value="" {{ 'selected' if not filters.start_mes else '' }}>Mês</option>
{% for m in meses_competencia %}
<option value="{{ loop.index }}" {{ 'selected' if filters.start_mes == loop.index | string else '' }}>{{ m }}</option>
{% endfor %}
</select>
<select name="start_ano">
<option value="" {{ 'selected' if not filters.start_ano else '' }}>Ano</option>
{% for a in anos_competencia %}
<option value="{{ a }}" {{ 'selected' if filters.start_ano == a | string else '' }}>{{ a }}</option>
{% endfor %}
</select>
</span>
</label>
<label class="field">
<span>Até (competência)</span>
<span class="field-group">
<select name="end_mes">
<option value="" {{ 'selected' if not filters.end_mes else '' }}>Mês</option>
{% for m in meses_competencia %}
<option value="{{ loop.index }}" {{ 'selected' if filters.end_mes == loop.index | string else '' }}>{{ m }}</option>
{% endfor %}
</select>
<select name="end_ano">
<option value="" {{ 'selected' if not filters.end_ano else '' }}>Ano</option>
{% for a in anos_competencia %}
<option value="{{ a }}" {{ 'selected' if filters.end_ano == a | string else '' }}>{{ a }}</option>
{% endfor %}
</select>
</span>
</label>
<label class="field grow"><span>Fornecedor</span><input type="text" name="supplier" value="{{ filters.supplier }}" placeholder="contém…"></label>
<label class="field grow">
<span>Categoria</span>
<select name="category" onchange="this.form.submit()">
<option value="">Todas</option>
{% for c in categorias %}
<option value="{{ c.id }}" {{ 'selected' if filters.category == c.id | string else '' }}>{{ c.categoria }}</option>
{% endfor %}
<option value="none" {{ 'selected' if filters.category == 'none' else '' }}>Sem categoria</option>
</select>
</label>
<div class="filters-actions">
<button type="submit" class="btn btn-primary btn-sm">Filtrar</button>
<a href="/documents" class="btn btn-ghost btn-sm">Limpar</a>
</div>
</form>
</section>
<section class="card">
{% if rows %}
{% macro sort_url(key) -%}
/documents?start_mes={{ filters.start_mes | urlencode }}&start_ano={{ filters.start_ano | urlencode }}&end_mes={{ filters.end_mes | urlencode }}&end_ano={{ filters.end_ano | urlencode }}&supplier={{ filters.supplier | urlencode }}&category={{ filters.category | urlencode }}&sort={{ key }}&order={{ 'asc' if (sort == key and order == 'desc') else 'desc' }}
{%- endmacro %}
{% macro sort_arrow(key) -%}
{% if sort == key %}{{ ' ▲' if order == 'asc' else ' ▼' }}{% endif %}
{%- endmacro %}
<div class="table-scroll">
<table class="table">
<thead>
<tr>
<th><a href="{{ sort_url('competencia') }}" class="link">Competência{{ sort_arrow('competencia') }}</a></th>
<th><a href="{{ sort_url('supplier_name') }}" class="link">Fornecedor{{ sort_arrow('supplier_name') }}</a></th>
<th><a href="{{ sort_url('categoria') }}" class="link">Categoria{{ sort_arrow('categoria') }}</a></th>
<th class="r"><a href="{{ sort_url('total_paid') }}" class="link">Valor{{ sort_arrow('total_paid') }}</a></th>
<th>Origem</th>
<th class="r">Ações</th>
</tr>
</thead>
<tbody>
{% for d in rows %}
<tr>
<td class="nowrap">{{ d.mes | competencia(d.ano) }}</td>
<td>{{ d.supplier_name }}</td>
<td>{{ d.categoria_nome or '' }}</td>
<td class="r money nowrap">{{ d.total_paid | money }}</td>
<td class="muted small">{{ d.source_location }}</td>
<td class="r nowrap">
<a href="/documents/{{ d.id }}/edit" class="link">Editar</a>
<form method="post" action="/documents/{{ d.id }}/delete" class="inline"
onsubmit="return confirm('Excluir este documento?');">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
<button type="submit" class="linkbtn danger">Excluir</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
<tr><td colspan="3">Total registros: {{ total_count }}</td><td class="r money">{{ total | money }}</td><td colspan="2"></td></tr>
</tfoot>
</table>
</div>
{% if total_pages > 1 %}
{% macro page_url(p) -%}
/documents?start_mes={{ filters.start_mes | urlencode }}&start_ano={{ filters.start_ano | urlencode }}&end_mes={{ filters.end_mes | urlencode }}&end_ano={{ filters.end_ano | urlencode }}&supplier={{ filters.supplier | urlencode }}&category={{ filters.category | urlencode }}&sort={{ sort }}&order={{ order }}&page={{ p }}
{%- endmacro %}
<nav class="pagination" aria-label="Paginação">
{% if page <= 1 %}
<span class="btn btn-ghost btn-sm disabled" aria-disabled="true">&laquo; Anterior</span>
{% else %}
<a href="{{ page_url(page - 1) }}" class="btn btn-ghost btn-sm">&laquo; Anterior</a>
{% endif %}
{% for p in page_numbers %}
{% if p is none %}
<span class="pagination-ellipsis"></span>
{% elif p == page %}
<span class="pagination-page current" aria-current="page">{{ p }}</span>
{% else %}
<a href="{{ page_url(p) }}" class="pagination-page">{{ p }}</a>
{% endif %}
{% endfor %}
{% if page >= total_pages %}
<span class="btn btn-ghost btn-sm disabled" aria-disabled="true">Próxima &raquo;</span>
{% else %}
<a href="{{ page_url(page + 1) }}" class="btn btn-ghost btn-sm">Próxima &raquo;</a>
{% endif %}
</nav>
{% endif %}
{% else %}
<p class="muted">Nenhum documento encontrado. <a href="/documents/new" class="link">Lançar manualmente</a> ou <a href="/" class="link">importar</a>.</p>
{% endif %}
</section>
{% endblock %}