- Created warehouse_orders.py module with 8 order management functions - Added /warehouse/set-orders-on-boxes route and 7 API endpoints - Implemented 4-tab interface: assign, find, move, and view orders - Changed assign input from dropdown to text field with BOX validation - Fixed location join issue in warehouse.py (use boxes_crates.location_id) - Added debouncing flag to prevent multiple rapid form submissions - Added page refresh after successful order assignment - Disabled assign button during processing - Added page refresh with 2 second delay for UX feedback - Added CP code validation in inventory page - Improved modal styling with theme support - Fixed set_boxes_locations page to refresh box info after assignments
168 lines
6.9 KiB
HTML
168 lines
6.9 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Warehouse Module - Quality App v2{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container-fluid py-5">
|
|
<div class="row mb-4">
|
|
<div class="col-12">
|
|
<h1 class="mb-2">
|
|
<i class="fas fa-warehouse"></i> Warehouse Module
|
|
</h1>
|
|
<p class="text-muted">Manage warehouse operations, inventory, and locations</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<!-- Set Boxes Locations Card -->
|
|
<div class="col-md-6 col-lg-4 mb-4">
|
|
<div class="card shadow-sm h-100 module-launcher">
|
|
<div class="card-body text-center">
|
|
<div class="launcher-icon mb-3">
|
|
<i class="fas fa-cube text-danger"></i>
|
|
</div>
|
|
<h5 class="card-title">Set Boxes Locations</h5>
|
|
<p class="card-text text-muted">Add or update articles in the warehouse inventory.</p>
|
|
<a href="{{ url_for('warehouse.set_boxes_locations') }}" class="btn btn-danger btn-sm">
|
|
<i class="fas fa-arrow-right"></i> Go to Set Boxes
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Set Orders on Boxes Card -->
|
|
<div class="col-md-6 col-lg-4 mb-4">
|
|
<div class="card shadow-sm h-100 module-launcher">
|
|
<div class="card-body text-center">
|
|
<div class="launcher-icon mb-3">
|
|
<i class="fas fa-archive text-secondary"></i>
|
|
</div>
|
|
<h5 class="card-title">Set Orders on Boxes</h5>
|
|
<p class="card-text text-muted">Assign, move, or view orders on boxes and manage order-to-box relationships.</p>
|
|
<a href="{{ url_for('warehouse.set_orders_on_boxes') }}" class="btn btn-secondary btn-sm">
|
|
<i class="fas fa-arrow-right"></i> Manage Orders
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Create Warehouse Locations Card -->
|
|
<div class="col-md-6 col-lg-4 mb-4">
|
|
<div class="card shadow-sm h-100 module-launcher">
|
|
<div class="card-body text-center">
|
|
<div class="launcher-icon mb-3">
|
|
<i class="fas fa-map-pin text-primary"></i>
|
|
</div>
|
|
<h5 class="card-title">Create Warehouse Locations</h5>
|
|
<p class="card-text text-muted">Define and manage storage locations in the warehouse.</p>
|
|
<a href="{{ url_for('warehouse.locations') }}" class="btn btn-primary btn-sm">
|
|
<i class="fas fa-arrow-right"></i> Go to Locations
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Manage Boxes/Crates Card -->
|
|
<div class="col-md-6 col-lg-4 mb-4">
|
|
<div class="card shadow-sm h-100 module-launcher">
|
|
<div class="card-body text-center">
|
|
<div class="launcher-icon mb-3">
|
|
<i class="fas fa-box text-success"></i>
|
|
</div>
|
|
<h5 class="card-title">Manage Boxes/Crates</h5>
|
|
<p class="card-text text-muted">Track and manage boxes and crates in the warehouse.</p>
|
|
<a href="{{ url_for('boxes.manage_boxes') }}" class="btn btn-success btn-sm">
|
|
<i class="fas fa-arrow-right"></i> Go to Boxes
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- View Inventory Card -->
|
|
<div class="col-md-6 col-lg-4 mb-4">
|
|
<div class="card shadow-sm h-100 module-launcher">
|
|
<div class="card-body text-center">
|
|
<div class="launcher-icon mb-3">
|
|
<i class="fas fa-list text-info"></i>
|
|
</div>
|
|
<h5 class="card-title">View Inventory</h5>
|
|
<p class="card-text text-muted">Search and view products, boxes, and their warehouse locations.</p>
|
|
<a href="{{ url_for('warehouse.inventory') }}" class="btn btn-info btn-sm">
|
|
<i class="fas fa-arrow-right"></i> View Inventory
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Warehouse Reports Card -->
|
|
<div class="col-md-6 col-lg-4 mb-4">
|
|
<div class="card shadow-sm h-100 module-launcher">
|
|
<div class="card-body text-center">
|
|
<div class="launcher-icon mb-3">
|
|
<i class="fas fa-chart-bar text-warning"></i>
|
|
</div>
|
|
<h5 class="card-title">Warehouse Reports</h5>
|
|
<p class="card-text text-muted">View and export warehouse activity and inventory reports.</p>
|
|
<a href="{{ url_for('warehouse.reports') }}" class="btn btn-warning btn-sm">
|
|
<i class="fas fa-arrow-right"></i> Go to Reports
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Module Overview Section -->
|
|
<div class="row mt-5">
|
|
<div class="col-12">
|
|
<div class="card shadow-sm">
|
|
<div class="card-header bg-light">
|
|
<h5 class="mb-0"><i class="fas fa-info-circle"></i> Module Overview</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<h6><i class="fas fa-check-circle text-success"></i> Key Features:</h6>
|
|
<ul class="text-muted">
|
|
<li>Create and manage warehouse locations</li>
|
|
<li>Track boxes and crates</li>
|
|
<li>Assign products to boxes</li>
|
|
<li>Search inventory by location</li>
|
|
</ul>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<h6><i class="fas fa-chart-pie text-primary"></i> Reports & Analytics:</h6>
|
|
<ul class="text-muted">
|
|
<li>Inventory reports</li>
|
|
<li>Location utilization</li>
|
|
<li>Box status tracking</li>
|
|
<li>Export data to CSV</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<style>
|
|
.module-launcher {
|
|
transition: transform 0.2s, box-shadow 0.2s;
|
|
}
|
|
|
|
.module-launcher:hover {
|
|
transform: translateY(-5px);
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
|
|
}
|
|
|
|
.launcher-icon {
|
|
font-size: 48px;
|
|
line-height: 1;
|
|
}
|
|
|
|
.launcher-icon i {
|
|
display: inline-block;
|
|
}
|
|
</style>
|
|
{% endblock %}
|