Upgrade Factory Live Dashboard to ultra-premium UI with hero telemetry, bento cards and launchpad
This commit is contained in:
parent
c365322e3d
commit
842f71e6e2
@ -30,6 +30,12 @@ class GarmentDashboard(models.Model):
|
|||||||
pending_quality_inspections = fields.Integer(string='Pending Quality Inspections', compute='_compute_kpis')
|
pending_quality_inspections = fields.Integer(string='Pending Quality Inspections', compute='_compute_kpis')
|
||||||
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:
|
||||||
@ -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)
|
||||||
@ -54,6 +67,11 @@ class GarmentDashboard(models.Model):
|
|||||||
rec.avg_line_efficiency = round(sum(today_logs.mapped('efficiency_pct')) / len(today_logs), 1)
|
rec.avg_line_efficiency = round(sum(today_logs.mapped('efficiency_pct')) / len(today_logs), 1)
|
||||||
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'])])
|
||||||
|
|||||||
@ -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 & 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 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 & 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>
|
</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>
|
|
||||||
|
|
||||||
|
<!-- 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 & 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 & 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 & Planning</h6>
|
||||||
|
<small class="text-muted" style="font-size: 11px;">Tech packs, orders & 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 & 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 & 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 & 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 & Shop Floor</h6>
|
||||||
|
<small class="text-muted" style="font-size: 11px;">Roll stock, lays, bundles & 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 & 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 & 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;">H1–H8 Logs & 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 & Quality</h6>
|
||||||
|
<small class="text-muted" style="font-size: 11px;">Job work, QC, packing & 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 & Rework</div>
|
||||||
|
<small class="text-muted" style="font-size: 11px;">Inline, Endline & 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 & 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 & Shipments</div>
|
||||||
|
<small class="text-muted" style="font-size: 11px;">Containers, B/L & 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>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user