Upgrade Factory Live Dashboard to ultra-premium UI with hero telemetry, bento cards and launchpad

This commit is contained in:
Alaguraj0361 2026-09-21 17:02:51 +05:30
parent c365322e3d
commit 842f71e6e2
2 changed files with 505 additions and 131 deletions

View File

@ -31,6 +31,12 @@ class GarmentDashboard(models.Model):
active_rework_orders = fields.Integer(string='Open Rework Orders', compute='_compute_kpis') active_rework_orders = fields.Integer(string='Open Rework Orders', compute='_compute_kpis')
pending_dispatch_cartons = fields.Integer(string='Cartons Ready for Dispatch', compute='_compute_kpis') pending_dispatch_cartons = fields.Integer(string='Cartons Ready for Dispatch', compute='_compute_kpis')
# Extra Telemetry
total_styles_count = fields.Integer(string='Active Styles', compute='_compute_kpis')
total_cutting_orders = fields.Integer(string='Active Cutting Orders', compute='_compute_kpis')
total_bundles_active = fields.Integer(string='Active Bundles in Floor', compute='_compute_kpis')
output_achievement_pct = fields.Float(string='Daily Target Achievement %', compute='_compute_kpis')
def _compute_kpis(self): def _compute_kpis(self):
for rec in self: for rec in self:
# Sales # Sales
@ -38,11 +44,18 @@ class GarmentDashboard(models.Model):
rec.total_sales_orders = len(orders) rec.total_sales_orders = len(orders)
rec.total_ordered_pieces = sum(orders.mapped('total_garment_qty')) rec.total_ordered_pieces = sum(orders.mapped('total_garment_qty'))
# Styles
rec.total_styles_count = self.env['garment.style'].search_count([('active', '=', True)])
# Production # Production
plans = self.env['garment.production.plan'].search([('state', 'in', ['planned', 'in_progress'])]) plans = self.env['garment.production.plan'].search([('state', 'in', ['planned', 'in_progress'])])
rec.active_production_plans = len(plans) rec.active_production_plans = len(plans)
rec.avg_production_progress = round(sum(plans.mapped('progress_pct')) / (len(plans) or 1), 1) rec.avg_production_progress = round(sum(plans.mapped('progress_pct')) / (len(plans) or 1), 1)
# Cutting & Bundles
rec.total_cutting_orders = self.env['garment.cutting.plan'].search_count([('state', 'in', ['draft', 'planned', 'cutting'])])
rec.total_bundles_active = self.env['garment.bundle'].search_count([('stage', 'not in', ['completed'])])
# Sewing Lines & Today's Hourly # Sewing Lines & Today's Hourly
lines = self.env['garment.sewing.line'].search([('active', '=', True)]) lines = self.env['garment.sewing.line'].search([('active', '=', True)])
rec.total_sewing_lines = len(lines) rec.total_sewing_lines = len(lines)
@ -55,6 +68,11 @@ class GarmentDashboard(models.Model):
else: else:
rec.avg_line_efficiency = 0.0 rec.avg_line_efficiency = 0.0
if rec.today_target_pieces > 0:
rec.output_achievement_pct = min(100.0, round((rec.today_actual_pieces / rec.today_target_pieces) * 100.0, 1))
else:
rec.output_achievement_pct = 0.0
# Fabric & FG # Fabric & FG
rolls = self.env['garment.fabric.roll'].search([('status', 'in', ['received', 'inspected', 'approved', 'issued'])]) rolls = self.env['garment.fabric.roll'].search([('status', 'in', ['received', 'inspected', 'approved', 'issued'])])
rec.total_fabric_stock_kg = round(sum(rolls.mapped('remaining_weight')), 1) rec.total_fabric_stock_kg = round(sum(rolls.mapped('remaining_weight')), 1)

View File

@ -7,143 +7,499 @@
<field name="model">garment.dashboard</field> <field name="model">garment.dashboard</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Tiruppur Factory Control Room" create="false" edit="false" delete="false"> <form string="Tiruppur Factory Control Room" create="false" edit="false" delete="false">
<sheet> <sheet class="p-0 border-0 shadow-none bg-transparent">
<div class="oe_title">
<h1 class="text-primary mb-3">Tiruppur Garment Manufacturing - Live Control Center</h1>
</div>
<!-- Row 1: Merchandising & Production Header Cards --> <!-- Embedded Scoped Styling for Premium Industrial UI -->
<div class="row g-3 mb-4"> <style>
<div class="col-md-3"> .o_dashboard_container {
<div class="p-3 bg-light border rounded shadow-sm"> font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
<div class="text-muted text-uppercase small fw-bold">Active Orders</div> color: #1e293b;
<div class="fs-3 fw-bold text-dark"><field name="total_sales_orders"/> Orders</div> }
<div class="small text-muted"><field name="total_ordered_pieces"/> Total Pieces</div> @keyframes pulseLive {
</div> 0% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7); }
</div> 70% { box-shadow: 0 0 0 8px rgba(34, 197, 94, 0); }
<div class="col-md-3"> 100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); }
<div class="p-3 bg-light border rounded shadow-sm"> }
<div class="text-muted text-uppercase small fw-bold">Production in Progress</div> .pulse-dot {
<div class="fs-3 fw-bold text-primary"><field name="active_production_plans"/> Plans</div> width: 9px;
<div class="small text-success">Avg Progress: <field name="avg_production_progress"/>%</div> height: 9px;
</div> border-radius: 50%;
</div> background-color: #22c55e;
<div class="col-md-3"> display: inline-block;
<div class="p-3 bg-light border rounded shadow-sm"> animation: pulseLive 2s infinite;
<div class="text-muted text-uppercase small fw-bold">Today's Sewing Output</div> }
<div class="fs-3 fw-bold text-success"><field name="today_actual_pieces"/> Pcs</div> .kpi-card {
<div class="small text-muted">Target: <field name="today_target_pieces"/> Pcs</div> background: #ffffff;
</div> border: 1px solid #e2e8f0;
</div> border-radius: 14px;
<div class="col-md-3"> transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);
<div class="p-3 bg-light border rounded shadow-sm"> position: relative;
<div class="text-muted text-uppercase small fw-bold">Sewing Floor Efficiency</div> overflow: hidden;
<div class="fs-3 fw-bold text-info"><field name="avg_line_efficiency"/>%</div> }
<div class="small text-danger"><field name="today_defects"/> Alterations Logged</div> .kpi-card:hover {
</div> transform: translateY(-4px);
</div> box-shadow: 0 16px 32px -8px rgba(15, 23, 42, 0.1), 0 4px 12px -2px rgba(15, 23, 42, 0.04);
</div> border-color: #cbd5e1;
}
.kpi-card::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
}
.kpi-card-blue::before { background: linear-gradient(90deg, #3b82f6, #1d4ed8); }
.kpi-card-purple::before { background: linear-gradient(90deg, #8b5cf6, #6d28d9); }
.kpi-card-emerald::before { background: linear-gradient(90deg, #10b981, #059669); }
.kpi-card-cyan::before { background: linear-gradient(90deg, #06b6d4, #0284c7); }
.kpi-card-amber::before { background: linear-gradient(90deg, #f59e0b, #d97706); }
.kpi-card-green::before { background: linear-gradient(90deg, #22c55e, #16a34a); }
.kpi-card-sky::before { background: linear-gradient(90deg, #0ea5e9, #0284c7); }
.kpi-card-rose::before { background: linear-gradient(90deg, #f43f5e, #be123c); }
<!-- Row 2: Inventory, Subcontracting & Quality Cards --> .kpi-icon-box {
<div class="row g-3 mb-4"> width: 48px;
<div class="col-md-3"> height: 48px;
<div class="p-3 bg-light border rounded shadow-sm"> border-radius: 12px;
<div class="text-muted text-uppercase small fw-bold">Fabric Roll Stock</div> display: flex;
<div class="fs-3 fw-bold text-dark"><field name="total_fabric_stock_kg"/> Kg</div> align-items: center;
<div class="small text-success"><field name="total_approved_rolls"/> QC Approved Rolls</div> justify-content: center;
</div> font-size: 20px;
</div> flex-shrink: 0;
<div class="col-md-3"> }
<div class="p-3 bg-light border rounded shadow-sm"> .nav-tile {
<div class="text-muted text-uppercase small fw-bold">Finished Goods Stock</div> background: #ffffff;
<div class="fs-3 fw-bold text-success"><field name="total_finished_goods_pcs"/> Pcs</div> border: 1px solid #e2e8f0;
<div class="small text-muted">Ready in Warehouse</div> border-radius: 12px;
</div> padding: 14px 16px;
</div> display: flex;
<div class="col-md-3"> align-items: center;
<div class="p-3 bg-light border rounded shadow-sm"> text-decoration: none !important;
<div class="text-muted text-uppercase small fw-bold">Subcontracting (Job Work)</div> color: #1e293b !important;
<div class="fs-3 fw-bold text-warning"><field name="pending_jobwork_dc"/> DCs</div> transition: all 0.2s ease-in-out;
<div class="small text-muted">Outward in Processing</div> }
</div> .nav-tile:hover {
</div> background: #f8fafc;
<div class="col-md-3"> border-color: #3b82f6;
<div class="p-3 bg-light border rounded shadow-sm"> transform: translateY(-2px);
<div class="text-muted text-uppercase small fw-bold">Ready for Dispatch</div> box-shadow: 0 8px 16px -4px rgba(59, 130, 246, 0.12);
<div class="fs-3 fw-bold text-primary"><field name="pending_dispatch_cartons"/> Cartons</div> color: #1d4ed8 !important;
<div class="small text-danger"><field name="active_rework_orders"/> Pending Rework</div> }
</div> .nav-tile:hover .nav-tile-arrow {
</div> transform: translateX(4px);
</div> color: #2563eb;
}
.nav-tile-arrow {
transition: transform 0.2s ease-in-out, color 0.2s;
color: #94a3b8;
font-size: 14px;
}
.nav-tile-icon {
width: 40px;
height: 40px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 17px;
margin-right: 14px;
flex-shrink: 0;
}
.pipeline-pill {
background: #f1f5f9;
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 8px 12px;
font-size: 12.5px;
font-weight: 600;
color: #334155;
display: flex;
align-items: center;
gap: 6px;
white-space: nowrap;
}
.pipeline-arrow {
color: #94a3b8;
font-size: 12px;
}
</style>
<!-- Department Quick Launchpad --> <div class="o_dashboard_container p-2">
<separator string="Department Navigation &amp; Quick Actions"/>
<div class="row g-2 mb-3">
<div class="col-md-2">
<a class="btn btn-outline-primary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_style">
<i class="fa fa-tag me-1"/> Garment Styles
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-primary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_sales_order">
<i class="fa fa-shopping-cart me-1"/> Sales Matrix
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-primary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_production_plan">
<i class="fa fa-industry me-1"/> Production Plans
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-primary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_cutting_plan">
<i class="fa fa-scissors me-1"/> Cutting Orders
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-primary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_bundle">
<i class="fa fa-tags me-1"/> Bundles Tracker
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-primary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_sewing_hourly">
<i class="fa fa-clock-o me-1"/> Hourly Production
</a>
</div>
</div>
<div class="row g-2"> <!-- Top Hero Command Center Banner -->
<div class="col-md-2"> <div class="rounded-4 mb-4 text-white position-relative overflow-hidden p-4"
<a class="btn btn-outline-secondary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_fabric_roll"> style="background: linear-gradient(135deg, #090d16 0%, #0f172a 45%, #1e1b4b 100%); box-shadow: 0 10px 25px -5px rgba(15, 23, 42, 0.25); border: 1px solid #1e293b;">
<i class="fa fa-cubes me-1"/> Fabric Rolls
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-secondary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_jobwork_order">
<i class="fa fa-truck me-1"/> Job Work DCs
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-secondary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_quality_inspection">
<i class="fa fa-check-circle me-1"/> Quality QC
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-secondary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_packing_plan">
<i class="fa fa-archive me-1"/> Packing Plans
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-secondary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_dispatch">
<i class="fa fa-ship me-1"/> Dispatch
</a>
</div>
<div class="col-md-2">
<a class="btn btn-outline-secondary w-100 py-2" role="button" href="/odoo/action-garment_erp.action_garment_costing">
<i class="fa fa-dollar me-1"/> Costing Sheets
</a>
</div>
</div>
<div class="d-flex flex-wrap align-items-center justify-content-between gap-3">
<div>
<div class="d-inline-flex align-items-center gap-2 px-3 py-1 rounded-pill mb-2"
style="background: rgba(34, 197, 94, 0.15); border: 1px solid rgba(34, 197, 94, 0.3); font-size: 12px; font-weight: 700; color: #4ade80; letter-spacing: 0.5px;">
<span class="pulse-dot"></span> LIVE FACTORY TELEMETRY · TIRUPPUR CLUSTER
</div>
<h1 class="fw-bold mb-1 text-white" style="font-size: 26px; letter-spacing: -0.5px;">
Tiruppur Garment Operations Command Center
</h1>
<p class="text-slate-300 mb-0 opacity-75 small">
End-to-End Real-Time Control: Style Tech Packs, 2D Matrix POs, Roll Stores, Lay Cutting, Bundle Travelers, Sewing Efficiency &amp; Export Dispatch
</p>
</div>
<div class="d-flex align-items-center gap-3">
<div class="px-3 py-2 rounded-3 text-center" style="background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); min-width: 100px;">
<div class="small text-white-50" style="font-size: 11px;">Active Styles</div>
<div class="fs-4 fw-bold text-white"><field name="total_styles_count"/></div>
</div>
<div class="px-3 py-2 rounded-3 text-center" style="background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); min-width: 100px;">
<div class="small text-white-50" style="font-size: 11px;">Sewing Lines</div>
<div class="fs-4 fw-bold text-white"><field name="total_sewing_lines"/></div>
</div>
<div class="px-3 py-2 rounded-3 text-center" style="background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); min-width: 100px;">
<div class="small text-white-50" style="font-size: 11px;">Active Bundles</div>
<div class="fs-4 fw-bold text-info"><field name="total_bundles_active"/></div>
</div>
</div>
</div>
</div>
<!-- 8 Super-Premium Bento KPI Cards -->
<!-- Row 1: Merchandising, Planning & Sewing Line Performance -->
<div class="row g-3 mb-4">
<!-- Card 1: Active Sales Orders -->
<div class="col-xl-3 col-md-6">
<div class="kpi-card kpi-card-blue p-3 h-100 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="badge rounded-pill" style="background: #eff6ff; color: #1d4ed8; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;">COMMERCIAL DEMAND</span>
<div class="kpi-icon-box text-white" style="background: linear-gradient(135deg, #3b82f6, #1d4ed8);">
<i class="fa fa-shopping-bag" title="Sales Orders"/>
</div>
</div>
<div class="fs-2 fw-bold text-dark mb-1">
<field name="total_sales_orders"/> <span class="fs-6 fw-normal text-muted">Orders</span>
</div>
<div class="d-flex align-items-center justify-content-between small text-muted pt-2 border-top">
<span>Total Booked Pieces</span>
<strong class="text-primary"><field name="total_ordered_pieces"/> Pcs</strong>
</div>
</div>
</div>
<!-- Card 2: Production Plans in Progress -->
<div class="col-xl-3 col-md-6">
<div class="kpi-card kpi-card-purple p-3 h-100 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="badge rounded-pill" style="background: #f5f3ff; color: #6d28d9; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;">SHOP FLOOR PLANNING</span>
<div class="kpi-icon-box text-white" style="background: linear-gradient(135deg, #8b5cf6, #6d28d9);">
<i class="fa fa-industry" title="Production Plans"/>
</div>
</div>
<div class="fs-2 fw-bold text-dark mb-1">
<field name="active_production_plans"/> <span class="fs-6 fw-normal text-muted">Active Plans</span>
</div>
<div class="d-flex align-items-center justify-content-between small pt-2 border-top">
<span class="text-muted">Average Completion</span>
<strong class="text-purple" style="color: #7c3aed;"><field name="avg_production_progress"/>%</strong>
</div>
</div>
</div>
<!-- Card 3: Today's Sewing Output -->
<div class="col-xl-3 col-md-6">
<div class="kpi-card kpi-card-emerald p-3 h-100 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="badge rounded-pill" style="background: #ecfdf5; color: #047857; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;">DAILY SEWING FLOOR</span>
<div class="kpi-icon-box text-white" style="background: linear-gradient(135deg, #10b981, #059669);">
<i class="fa fa-cubes" title="Sewing Output"/>
</div>
</div>
<div class="fs-2 fw-bold text-dark mb-1">
<field name="today_actual_pieces"/> <span class="fs-6 fw-normal text-muted">Pcs Produced</span>
</div>
<div class="d-flex align-items-center justify-content-between small text-muted pt-2 border-top">
<span>Target: <field name="today_target_pieces"/> Pcs</span>
<span class="badge bg-success bg-opacity-10 text-success fw-bold">Active Shift</span>
</div>
</div>
</div>
<!-- Card 4: Sewing Line Efficiency -->
<div class="col-xl-3 col-md-6">
<div class="kpi-card kpi-card-cyan p-3 h-100 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="badge rounded-pill" style="background: #ecfeff; color: #0e7490; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;">IE EFFICIENCY (SAM)</span>
<div class="kpi-icon-box text-white" style="background: linear-gradient(135deg, #06b6d4, #0284c7);">
<i class="fa fa-dashboard" title="Efficiency"/>
</div>
</div>
<div class="fs-2 fw-bold text-dark mb-1">
<field name="avg_line_efficiency"/>% <span class="fs-6 fw-normal text-muted">Efficiency</span>
</div>
<div class="d-flex align-items-center justify-content-between small pt-2 border-top">
<span class="text-muted">Alteration Audit</span>
<strong class="text-danger"><field name="today_defects"/> Defects Logged</strong>
</div>
</div>
</div>
</div>
<!-- Row 2: Raw Material Stores, Finished Goods, Subcontracting & Dispatch -->
<div class="row g-3 mb-4">
<!-- Card 5: Fabric Roll Stores -->
<div class="col-xl-3 col-md-6">
<div class="kpi-card kpi-card-amber p-3 h-100 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="badge rounded-pill" style="background: #fffbeb; color: #b45309; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;">RAW FABRIC STORES</span>
<div class="kpi-icon-box text-white" style="background: linear-gradient(135deg, #f59e0b, #d97706);">
<i class="fa fa-database" title="Fabric Rolls"/>
</div>
</div>
<div class="fs-2 fw-bold text-dark mb-1">
<field name="total_fabric_stock_kg"/> <span class="fs-6 fw-normal text-muted">Kg in Stock</span>
</div>
<div class="d-flex align-items-center justify-content-between small pt-2 border-top">
<span class="text-muted">Approved to Cut</span>
<strong class="text-success"><field name="total_approved_rolls"/> Rolls QC Passed</strong>
</div>
</div>
</div>
<!-- Card 6: Finished Goods Warehouse -->
<div class="col-xl-3 col-md-6">
<div class="kpi-card kpi-card-green p-3 h-100 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="badge rounded-pill" style="background: #f0fdf4; color: #15803d; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;">FG WAREHOUSE</span>
<div class="kpi-icon-box text-white" style="background: linear-gradient(135deg, #22c55e, #16a34a);">
<i class="fa fa-check-square-o" title="Finished Goods"/>
</div>
</div>
<div class="fs-2 fw-bold text-dark mb-1">
<field name="total_finished_goods_pcs"/> <span class="fs-6 fw-normal text-muted">Pcs on Hand</span>
</div>
<div class="d-flex align-items-center justify-content-between small text-muted pt-2 border-top">
<span>Packed in Inventory</span>
<span class="badge bg-success bg-opacity-10 text-success fw-bold">Ready to Ship</span>
</div>
</div>
</div>
<!-- Card 7: Subcontracting (Job Work) -->
<div class="col-xl-3 col-md-6">
<div class="kpi-card kpi-card-sky p-3 h-100 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="badge rounded-pill" style="background: #f0f9ff; color: #0369a1; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;">EXTERNAL JOB WORK</span>
<div class="kpi-icon-box text-white" style="background: linear-gradient(135deg, #0ea5e9, #0284c7);">
<i class="fa fa-truck" title="Job Work"/>
</div>
</div>
<div class="fs-2 fw-bold text-dark mb-1">
<field name="pending_jobwork_dc"/> <span class="fs-6 fw-normal text-muted">Active DCs</span>
</div>
<div class="d-flex align-items-center justify-content-between small text-muted pt-2 border-top">
<span>Knitting, Dyeing, Print, Wash</span>
<strong class="text-info">In Transit</strong>
</div>
</div>
</div>
<!-- Card 8: Ready for Dispatch & QC Gate -->
<div class="col-xl-3 col-md-6">
<div class="kpi-card kpi-card-rose p-3 h-100 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="badge rounded-pill" style="background: #fff1f2; color: #be123c; font-size: 11px; font-weight: 700; letter-spacing: 0.5px;">DISPATCH &amp; QUALITY</span>
<div class="kpi-icon-box text-white" style="background: linear-gradient(135deg, #f43f5e, #be123c);">
<i class="fa fa-ship" title="Dispatch"/>
</div>
</div>
<div class="fs-2 fw-bold text-dark mb-1">
<field name="pending_dispatch_cartons"/> <span class="fs-6 fw-normal text-muted">Cartons Ready</span>
</div>
<div class="d-flex align-items-center justify-content-between small pt-2 border-top">
<span class="text-muted">Quality Alterations</span>
<strong class="text-danger"><field name="active_rework_orders"/> Open Reworks</strong>
</div>
</div>
</div>
</div>
<!-- Visual Manufacturing Pipeline Stepper -->
<div class="bg-white border rounded-4 p-3 mb-4 shadow-sm">
<div class="d-flex align-items-center justify-content-between mb-2">
<div class="small text-uppercase fw-bold text-muted" style="letter-spacing: 0.5px;">
<i class="fa fa-random text-primary me-1" title="Flow"/> Tiruppur Apparel Manufacturing Lifecycle
</div>
<span class="badge bg-primary bg-opacity-10 text-primary small">Integrated Flow</span>
</div>
<div class="d-flex align-items-center justify-content-between flex-wrap gap-2 py-1">
<div class="pipeline-pill"><span class="badge bg-dark rounded-circle" style="width:18px;height:18px;padding:2px;">1</span> 2D Matrix PO</div>
<i class="fa fa-angle-right pipeline-arrow" title="Next"/>
<div class="pipeline-pill"><span class="badge bg-dark rounded-circle" style="width:18px;height:18px;padding:2px;">2</span> Fabric 4-Pt QC</div>
<i class="fa fa-angle-right pipeline-arrow" title="Next"/>
<div class="pipeline-pill"><span class="badge bg-dark rounded-circle" style="width:18px;height:18px;padding:2px;">3</span> Cutting &amp; Plies</div>
<i class="fa fa-angle-right pipeline-arrow" title="Next"/>
<div class="pipeline-pill"><span class="badge bg-dark rounded-circle" style="width:18px;height:18px;padding:2px;">4</span> QR Bundles</div>
<i class="fa fa-angle-right pipeline-arrow" title="Next"/>
<div class="pipeline-pill"><span class="badge bg-dark rounded-circle" style="width:18px;height:18px;padding:2px;">5</span> Sewing Assembly</div>
<i class="fa fa-angle-right pipeline-arrow" title="Next"/>
<div class="pipeline-pill"><span class="badge bg-dark rounded-circle" style="width:18px;height:18px;padding:2px;">6</span> Job Work DC</div>
<i class="fa fa-angle-right pipeline-arrow" title="Next"/>
<div class="pipeline-pill"><span class="badge bg-dark rounded-circle" style="width:18px;height:18px;padding:2px;">7</span> Endline QC</div>
<i class="fa fa-angle-right pipeline-arrow" title="Next"/>
<div class="pipeline-pill"><span class="badge bg-dark rounded-circle" style="width:18px;height:18px;padding:2px;">8</span> Export Carton</div>
<i class="fa fa-angle-right pipeline-arrow" title="Next"/>
<div class="pipeline-pill" style="background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8;"><span class="badge bg-primary rounded-circle" style="width:18px;height:18px;padding:2px;">9</span> Port Dispatch</div>
</div>
</div>
<!-- Department Navigation Launchpad (Interactive Quick Action Hub) -->
<div class="row g-4">
<!-- Section 1: Merchandising & Product Engineering -->
<div class="col-lg-4">
<div class="bg-white border rounded-4 p-3 h-100 shadow-sm">
<div class="d-flex align-items-center gap-2 mb-3 pb-2 border-bottom">
<div class="rounded-3 p-2 text-white" style="background: linear-gradient(135deg, #3b82f6, #1d4ed8);">
<i class="fa fa-bookmark" title="Merchandising"/>
</div>
<div>
<h6 class="fw-bold mb-0 text-dark">Merchandising &amp; Planning</h6>
<small class="text-muted" style="font-size: 11px;">Tech packs, orders &amp; BOM costing</small>
</div>
</div>
<div class="d-flex flex-column gap-2">
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_style">
<div class="nav-tile-icon" style="background: #eff6ff; color: #2563eb;"><i class="fa fa-tag" title="Styles"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Garment Styles</div>
<small class="text-muted" style="font-size: 11px;">Tech Packs &amp; POM Grading</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_sales_order">
<div class="nav-tile-icon" style="background: #eff6ff; color: #2563eb;"><i class="fa fa-th" title="Sales Matrix"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Sales Matrix Orders</div>
<small class="text-muted" style="font-size: 11px;">2D Color × Size Order Breakdown</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_production_plan">
<div class="nav-tile-icon" style="background: #f5f3ff; color: #7c3aed;"><i class="fa fa-calendar-check-o" title="Production Plans"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Production Plans</div>
<small class="text-muted" style="font-size: 11px;">Master Schedules &amp; MRP Tracking</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_costing">
<div class="nav-tile-icon" style="background: #ecfdf5; color: #059669;"><i class="fa fa-calculator" title="Costing"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Garment Costing</div>
<small class="text-muted" style="font-size: 11px;">Pre/Post Cost Sheets &amp; Margins</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
</div>
</div>
</div>
<!-- Section 2: Cutting Room & Sewing Floor Execution -->
<div class="col-lg-4">
<div class="bg-white border rounded-4 p-3 h-100 shadow-sm">
<div class="d-flex align-items-center gap-2 mb-3 pb-2 border-bottom">
<div class="rounded-3 p-2 text-white" style="background: linear-gradient(135deg, #10b981, #059669);">
<i class="fa fa-scissors" title="Cutting"/>
</div>
<div>
<h6 class="fw-bold mb-0 text-dark">Cutting &amp; Shop Floor</h6>
<small class="text-muted" style="font-size: 11px;">Roll stock, lays, bundles &amp; lines</small>
</div>
</div>
<div class="d-flex flex-column gap-2">
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_fabric_roll">
<div class="nav-tile-icon" style="background: #fffbeb; color: #d97706;"><i class="fa fa-database" title="Fabric Rolls"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Fabric Roll Inventory</div>
<small class="text-muted" style="font-size: 11px;">Roll Weights &amp; 4-Point QC</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_cutting_plan">
<div class="nav-tile-icon" style="background: #ecfeff; color: #0891b2;"><i class="fa fa-tasks" title="Cutting Orders"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Cutting Orders</div>
<small class="text-muted" style="font-size: 11px;">Marker Lay &amp; Size Cut Ratios</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_bundle">
<div class="nav-tile-icon" style="background: #fdf4ff; color: #c026d3;"><i class="fa fa-qrcode" title="Bundles Tracker"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Bundles Tracker</div>
<small class="text-muted" style="font-size: 11px;">QR / Barcode Ply Travelers</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_sewing_hourly">
<div class="nav-tile-icon" style="background: #ecfdf5; color: #059669;"><i class="fa fa-clock-o" title="Hourly Production"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Hourly Production</div>
<small class="text-muted" style="font-size: 11px;">H1H8 Logs &amp; Line Efficiency</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
</div>
</div>
</div>
<!-- Section 3: Subcontracting, Quality & Export Logistics -->
<div class="col-lg-4">
<div class="bg-white border rounded-4 p-3 h-100 shadow-sm">
<div class="d-flex align-items-center gap-2 mb-3 pb-2 border-bottom">
<div class="rounded-3 p-2 text-white" style="background: linear-gradient(135deg, #f43f5e, #be123c);">
<i class="fa fa-globe" title="Logistics"/>
</div>
<div>
<h6 class="fw-bold mb-0 text-dark">Subcontracting &amp; Quality</h6>
<small class="text-muted" style="font-size: 11px;">Job work, QC, packing &amp; shipment</small>
</div>
</div>
<div class="d-flex flex-column gap-2">
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_jobwork_order">
<div class="nav-tile-icon" style="background: #f0f9ff; color: #0284c7;"><i class="fa fa-truck" title="Job Work"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Job Work Challans (DC)</div>
<small class="text-muted" style="font-size: 11px;">Dyeing, Printing, Bio-Wash</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_quality_inspection">
<div class="nav-tile-icon" style="background: #fef2f2; color: #dc2626;"><i class="fa fa-check-circle" title="Quality QC"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Quality Control &amp; Rework</div>
<small class="text-muted" style="font-size: 11px;">Inline, Endline &amp; AQL 2.5 Audits</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_packing_plan">
<div class="nav-tile-icon" style="background: #f0fdf4; color: #16a34a;"><i class="fa fa-archive" title="Packing Plans"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Master Packing Plans</div>
<small class="text-muted" style="font-size: 11px;">Solid &amp; Ratio Export Cartons</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
<a class="nav-tile" role="button" href="/odoo/action-garment_erp.action_garment_dispatch">
<div class="nav-tile-icon" style="background: #eff6ff; color: #2563eb;"><i class="fa fa-ship" title="Dispatch"/></div>
<div class="flex-grow-1">
<div class="fw-bold" style="font-size: 13.5px;">Dispatch &amp; Shipments</div>
<small class="text-muted" style="font-size: 11px;">Containers, B/L &amp; Port Shipping</small>
</div>
<i class="fa fa-chevron-right nav-tile-arrow" title="Open"/>
</a>
</div>
</div>
</div>
</div>
</div>
</sheet> </sheet>
</form> </form>
</field> </field>