updated to uplodad orders
This commit is contained in:
244
py_app/app/templates/upload_orders.html
Normal file
244
py_app/app/templates/upload_orders.html
Normal file
@@ -0,0 +1,244 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Upload Order Data for Labels{% endblock %}
|
||||
{% block content %}
|
||||
<div class="scan-container">
|
||||
<!-- Upload Orders Card (first, fixed position) -->
|
||||
<div class="card scan-form-card" style="margin-bottom: 24px;">
|
||||
<h3>Upload Order Data for Labels</h3>
|
||||
<form method="POST" enctype="multipart/form-data" class="form-centered" id="csv-upload-form">
|
||||
<label for="csv_file">Choose CSV file:</label>
|
||||
{% if not orders %}
|
||||
<input type="file" name="csv_file" accept=".csv" required><br>
|
||||
<button type="submit" class="btn">Upload & Preview</button>
|
||||
{% else %}
|
||||
<label style="font-weight: bold;">Selected file: {{ session['csv_filename'] if session['csv_filename'] else 'Unknown' }}</label><br>
|
||||
<button type="button" class="btn" onclick="showPopupAndSubmit()">Save to Database</button>
|
||||
{% endif %}
|
||||
</form>
|
||||
|
||||
<!-- Popup Modal -->
|
||||
<div id="popup-modal" class="popup" style="display:none; position:fixed; top:0; left:0; width:100vw; height:100vh; background:var(--app-overlay-bg, rgba(30,41,59,0.85)); z-index:9999; align-items:center; justify-content:center;">
|
||||
<div class="popup-content" style="margin:auto; padding:32px; border-radius:8px; box-shadow:0 2px 8px #333; min-width:320px; max-width:400px; text-align:center;">
|
||||
<h3 style="color:var(--app-label-text);">Saving orders to database...</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function showPopupAndSubmit() {
|
||||
document.getElementById('popup-modal').style.display = 'flex';
|
||||
// Submit the form after showing popup
|
||||
setTimeout(function() {
|
||||
var form = document.getElementById('csv-upload-form');
|
||||
var input = document.createElement('input');
|
||||
input.type = 'hidden';
|
||||
input.name = 'save_to_database';
|
||||
input.value = '1';
|
||||
form.appendChild(input);
|
||||
form.submit();
|
||||
}, 500);
|
||||
}
|
||||
window.onload = function() {
|
||||
if (window.location.hash === '#saved') {
|
||||
document.getElementById('popup-modal').style.display = 'none';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<!-- Preview Table Card (expandable height, scrollable) -->
|
||||
<div class="card scan-table-card" style="margin-bottom: 24px; max-height: 480px; overflow-y: auto;">
|
||||
<h3>Preview Table</h3>
|
||||
<table class="scan-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Comanda Productie</th>
|
||||
<th>Cod Articol</th>
|
||||
<th>Descr. Com. Prod</th>
|
||||
<th>Cantitate</th>
|
||||
<th>Com.Achiz.Client</th>
|
||||
<th>Nr. Linie com. Client</th>
|
||||
<th>Customer Name</th>
|
||||
<th>Customer Article Number</th>
|
||||
<th>Open for order</th>
|
||||
<th>Line</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if orders %}
|
||||
{% for order in orders %}
|
||||
<tr>
|
||||
<td>{{ order.get('comanda_productie', '') }}</td>
|
||||
<td>{{ order.get('cod_articol', '') }}</td>
|
||||
<td>{{ order.get('descr_com_prod', '') }}</td>
|
||||
<td>{{ order.get('cantitate', '') }}</td>
|
||||
<td>{{ order.get('com_achiz_client', '') }}</td>
|
||||
<td>{{ order.get('nr_linie_com_client', '') }}</td>
|
||||
<td>{{ order.get('customer_name', '') }}</td>
|
||||
<td>{{ order.get('customer_article_number', '') }}</td>
|
||||
<td>{{ order.get('open_for_order', '') }}</td>
|
||||
<td>{{ order.get('line_number', '') }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr><td colspan="10" style="text-align:center;">No CSV file uploaded yet.</td></tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{% if validation_errors or validation_warnings %}
|
||||
<div class="card" style="margin-bottom: 24px;">
|
||||
<h4>Validation Results</h4>
|
||||
|
||||
{% if validation_errors %}
|
||||
<div style="color: #dc3545; margin-bottom: 16px;">
|
||||
<strong>Errors found:</strong>
|
||||
<ul>
|
||||
{% for error in validation_errors %}
|
||||
<li>{{ error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if validation_warnings %}
|
||||
<div style="color: #ffc107;">
|
||||
<strong>Warnings:</strong>
|
||||
<ul>
|
||||
{% for warning in validation_warnings %}
|
||||
<li>{{ warning }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if report %}
|
||||
<div class="card" style="margin-bottom: 24px;">
|
||||
<h4>Import Report</h4>
|
||||
<p>{{ report }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
/* Optimize table for better content fitting */
|
||||
.scan-table {
|
||||
font-size: 11px !important;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.scan-table th,
|
||||
.scan-table td {
|
||||
padding: 6px 4px !important;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.scan-table th {
|
||||
font-size: 10px !important;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.3px;
|
||||
}
|
||||
|
||||
/* Specific column width optimizations */
|
||||
.scan-table th:nth-child(1), /* Comanda Productie */
|
||||
.scan-table td:nth-child(1) {
|
||||
max-width: 80px;
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(2), /* Cod Articol */
|
||||
.scan-table td:nth-child(2) {
|
||||
max-width: 70px;
|
||||
min-width: 70px;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(3), /* Descr. Com. Prod */
|
||||
.scan-table td:nth-child(3) {
|
||||
max-width: 120px;
|
||||
min-width: 120px;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(4), /* Cantitate */
|
||||
.scan-table td:nth-child(4) {
|
||||
max-width: 60px;
|
||||
min-width: 60px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(5), /* Com.Achiz.Client */
|
||||
.scan-table td:nth-child(5) {
|
||||
max-width: 90px;
|
||||
min-width: 90px;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(6), /* Nr. Linie com. Client */
|
||||
.scan-table td:nth-child(6) {
|
||||
max-width: 60px;
|
||||
min-width: 60px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(7), /* Customer Name */
|
||||
.scan-table td:nth-child(7) {
|
||||
max-width: 100px;
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(8), /* Customer Article Number */
|
||||
.scan-table td:nth-child(8) {
|
||||
max-width: 80px;
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(9), /* Open for order */
|
||||
.scan-table td:nth-child(9) {
|
||||
max-width: 50px;
|
||||
min-width: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.scan-table th:nth-child(10), /* Line */
|
||||
.scan-table td:nth-child(10) {
|
||||
max-width: 40px;
|
||||
min-width: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Ensure table fits in container */
|
||||
.scan-table-card {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.scan-table {
|
||||
min-width: 800px;
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
/* Add hover effect for better readability */
|
||||
.scan-table tbody tr:hover td {
|
||||
background-color: #f8f9fa !important;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Tooltip on hover for truncated text */
|
||||
.scan-table td {
|
||||
cursor: help;
|
||||
}
|
||||
|
||||
.scan-table td:hover {
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
word-wrap: break-word;
|
||||
z-index: 10;
|
||||
position: relative;
|
||||
background-color: #fff3cd !important;
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user