03 sept 2026 - apropape gata, de schimbat setarile pt productie
This commit is contained in:
@@ -25,9 +25,9 @@
|
|||||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'equipment:peripheral_create' %}" hx-target="#modal-content-area" data-bs-toggle="modal" data-bs-target="#form-modal">🖨️ Periferic</a></li>
|
<li><a class="dropdown-item" href="#" hx-get="{% url 'equipment:peripheral_create' %}" hx-target="#modal-content-area" data-bs-toggle="modal" data-bs-target="#form-modal">🖨️ Periferic</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<a href="{% url 'equipment:export_inventory' %}" class="btn btn-success fw-bold shadow-sm me-2">
|
<!-- <a href="{% url 'equipment:export_inventory' %}" class="btn btn-success fw-bold shadow-sm me-2">
|
||||||
📊 Exportă Inventar (Excel)
|
📊 Exportă Inventar (Excel)
|
||||||
</a>
|
</a> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container-fluid mt-4">
|
||||||
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
|
<h2>Raport Mentenanță Echipamente</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Formularul de filtrare -->
|
||||||
|
<div class="card mb-4">
|
||||||
|
<div class="card-body">
|
||||||
|
<form method="GET" action="{% url 'equipment:maintenance_report' %}" class="row g-3 align-items-end">
|
||||||
|
<div class="col-auto">
|
||||||
|
<label for="start_date" class="form-label">De la data:</label>
|
||||||
|
<!-- Am schimbat type="date" cu type="text" și am adăugat clasa flatpickr-date -->
|
||||||
|
<input type="text" class="form-control flatpickr-date" id="start_date" name="start_date" value="{{ start_date|default_if_none:'' }}" placeholder="ZZ.LL.AAAA" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<label for="end_date" class="form-label">Până la data:</label>
|
||||||
|
<!-- Am schimbat type="date" cu type="text" și am adăugat clasa flatpickr-date -->
|
||||||
|
<input type="text" class="form-control flatpickr-date" id="end_date" name="end_date" value="{{ end_date|default_if_none:'' }}" placeholder="ZZ.LL.AAAA" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<button type="submit" class="btn btn-primary">Generează Raport</button>
|
||||||
|
{% if records %}
|
||||||
|
<a href="{% url 'equipment:maintenance_report' %}" class="btn btn-secondary ms-2">Resetează</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Tabelul cu rezultate -->
|
||||||
|
{% if records is not None %}
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body p-0">
|
||||||
|
<table class="table table-striped table-hover mb-0">
|
||||||
|
<thead class="table-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Dată Intervenție</th>
|
||||||
|
<th>Echipament</th>
|
||||||
|
<th>Tip Operațiune</th>
|
||||||
|
<th>Efectuat de</th>
|
||||||
|
<th>Observații</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for record in records %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ record.date|date:"d.m.Y" }}</td>
|
||||||
|
<!-- Ajustează record.equipment / record.operation_type etc. conform modelului tău -->
|
||||||
|
<td>{{ record.equipment }}</td>
|
||||||
|
<td>{{ record.operation_type }}</td>
|
||||||
|
<td>{{ record.performed_by }}</td>
|
||||||
|
<td>{{ record.notes|default:"-" }}</td>
|
||||||
|
</tr>
|
||||||
|
{% empty %}
|
||||||
|
<tr>
|
||||||
|
<td colspan="5" class="text-center py-4">Nu au fost găsite intervenții de mentenanță în perioada selectată.</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@@ -78,6 +78,7 @@ urlpatterns = [
|
|||||||
views.generate_decommission_pdf,
|
views.generate_decommission_pdf,
|
||||||
name="decommission_pdf",
|
name="decommission_pdf",
|
||||||
),
|
),
|
||||||
|
path("raport-mentenanta/", views.maintenance_report, name="maintenance_report"),
|
||||||
path("certificates/", views.certificate_list, name="certificate_list"),
|
path("certificates/", views.certificate_list, name="certificate_list"),
|
||||||
path("certificates/new/", views.certificate_form, name="certificate_create"),
|
path("certificates/new/", views.certificate_form, name="certificate_create"),
|
||||||
path(
|
path(
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ from datetime import date, timedelta
|
|||||||
from .models import DigitalCertificate
|
from .models import DigitalCertificate
|
||||||
from .forms import DigitalCertificateForm
|
from .forms import DigitalCertificateForm
|
||||||
import csv
|
import csv
|
||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -914,3 +916,49 @@ def export_inventory_csv(request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def maintenance_report(request):
|
||||||
|
# Preluăm datele exact așa cum le introduce utilizatorul (ex: 20.05.2026 sau 20-05-2026)
|
||||||
|
start_date_raw = request.GET.get("start_date")
|
||||||
|
end_date_raw = request.GET.get("end_date")
|
||||||
|
|
||||||
|
records = None
|
||||||
|
|
||||||
|
# Funcție ajutătoare pentru a traduce formatul românesc în formatul bazei de date
|
||||||
|
def parse_romanian_date(date_str):
|
||||||
|
if not date_str:
|
||||||
|
return None
|
||||||
|
|
||||||
|
clean_str = str(date_str).strip()
|
||||||
|
|
||||||
|
# Unificăm separatorii (transformăm cratima în punct pentru a verifica mai ușor)
|
||||||
|
clean_str = clean_str.replace("-", ".")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Traducem din ZZ.LL.AAAA în AAAA-LL-ZZ
|
||||||
|
parsed = datetime.strptime(clean_str, "%d.%m.%Y")
|
||||||
|
return parsed.strftime("%Y-%m-%d")
|
||||||
|
except ValueError:
|
||||||
|
# Dacă deja este în formatul corect (ex. a fost introdus manual AAAA-LL-ZZ), îl lăsăm așa
|
||||||
|
return clean_str
|
||||||
|
|
||||||
|
# Convertim datele pentru baza de date
|
||||||
|
start_date_db = parse_romanian_date(start_date_raw)
|
||||||
|
end_date_db = parse_romanian_date(end_date_raw)
|
||||||
|
|
||||||
|
if start_date_db and end_date_db:
|
||||||
|
records = MaintenanceRecord.objects.filter(
|
||||||
|
date__range=[start_date_db, end_date_db]
|
||||||
|
).order_by("-date")
|
||||||
|
|
||||||
|
context = {
|
||||||
|
"records": records,
|
||||||
|
"start_date": start_date_raw, # Trimitem înapoi formatul original pentru a rămâne afișat în formular
|
||||||
|
"end_date": end_date_raw,
|
||||||
|
}
|
||||||
|
return render(request, "equipment/maintenance_report.html", context)
|
||||||
|
|||||||
+5
-2
@@ -29,10 +29,13 @@
|
|||||||
<a class="nav-link" href="{% url 'equipment:equipment_list' %}">Echipamente</a>
|
<a class="nav-link" href="{% url 'equipment:equipment_list' %}">Echipamente</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'equipment:certificate_list' %}">Certificate Digitale</a>
|
<a class="nav-link" href="{% url 'equipment:handover_list' %}">Procese Verbale</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'equipment:handover_list' %}">Procese Verbale</a>
|
<a class="nav-link" href="{% url 'equipment:maintenance_report' %}">Rapoarte Mentenanță</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="{% url 'equipment:certificate_list' %}">Certificate Digitale</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'equipment:decommission_list' %}">Casări</a>
|
<a class="nav-link" href="{% url 'equipment:decommission_list' %}">Casări</a>
|
||||||
|
|||||||
Reference in New Issue
Block a user