icons dashboard

This commit is contained in:
raman 2025-11-18 13:45:25 +05:30
parent a5113dd0e1
commit b22e8b417d
5 changed files with 119 additions and 118 deletions

View File

@ -14,7 +14,7 @@
'assets': { 'assets': {
'web.assets_backend': [ 'web.assets_backend': [
('include', 'web_grid._assets_pqgrid'), ('include', 'web_grid._assets_pqgrid'),
'web/static/src/libs/fontawesome/css/font-awesome.css', 'web/static/src/libs/fontawesome/*',
# Internal module JS and XML files (ensure correct paths within 'static/src') # Internal module JS and XML files (ensure correct paths within 'static/src')
'dashboard/static/src/components/pqgrid_dashboard/pqgrid_stock_dashboard.js', 'dashboard/static/src/components/pqgrid_dashboard/pqgrid_stock_dashboard.js',
'dashboard/static/src/components/pqgrid_dashboard/pqgrid_sale_dashboard.js', 'dashboard/static/src/components/pqgrid_dashboard/pqgrid_sale_dashboard.js',

View File

@ -60,8 +60,8 @@
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-primary mb-3"> <div class="text-primary mb-3" style="font-size: 2rem;">
<i class="fas fa-receipt fa-2x"></i> 🧾
</div> </div>
<h6 class="card-title text-muted small mb-2">Total Invoices</h6> <h6 class="card-title text-muted small mb-2">Total Invoices</h6>
<h4 class="text-primary fw-bold mb-0" t-esc="state.sale_rows.length"/> <h4 class="text-primary fw-bold mb-0" t-esc="state.sale_rows.length"/>
@ -72,8 +72,8 @@
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-danger mb-3"> <div class="text-danger mb-3" style="font-size: 2rem;">
<i class="fas fa-industry fa-2x"></i> 🏭
</div> </div>
<h6 class="card-title text-muted small mb-2">Total Production</h6> <h6 class="card-title text-muted small mb-2">Total Production</h6>
<h4 class="text-danger fw-bold mb-0" t-esc="this.getTotalProductionValue()"/> <h4 class="text-danger fw-bold mb-0" t-esc="this.getTotalProductionValue()"/>
@ -84,8 +84,8 @@
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-warning mb-3"> <div class="text-warning mb-3" style="font-size: 2rem;">
<i class="fas fa-shopping-cart fa-2x"></i> 🛒
</div> </div>
<h6 class="card-title text-muted small mb-2">Total Sale</h6> <h6 class="card-title text-muted small mb-2">Total Sale</h6>
<h4 class="text-warning fw-bold mb-0" t-esc="this.getTotalSaleValue()"/> <h4 class="text-warning fw-bold mb-0" t-esc="this.getTotalSaleValue()"/>
@ -96,8 +96,8 @@
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-success mb-3"> <div class="text-success mb-3" style="font-size: 2rem;">
<i class="fas fa-chart-line fa-2x"></i> 📈
</div> </div>
<h6 class="card-title text-muted small mb-2">Total Margin</h6> <h6 class="card-title text-muted small mb-2">Total Margin</h6>
<h4 class="text-success fw-bold mb-0" t-esc="this.getTotalMarginValue()"/> <h4 class="text-success fw-bold mb-0" t-esc="this.getTotalMarginValue()"/>
@ -108,15 +108,14 @@
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-info mb-3"> <div class="text-info mb-3" style="font-size: 2rem;">📊</div>
<i class="fas fa-percentage fa-2x"></i>
</div>
<h6 class="card-title text-muted small mb-2">Margin %</h6> <h6 class="card-title text-muted small mb-2">Margin %</h6>
<h4 class="text-info fw-bold mb-0" t-esc="this.getMarginPercentage() + '%'"/> <h4 class="text-info fw-bold mb-0" t-esc="this.getMarginPercentage() + '%'"/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="card shadow-sm"> <div class="card shadow-sm">
<div class="card-header bg-success text-white"> <div class="card-header bg-success text-white">
<h5 class="mb-0"> <h5 class="mb-0">

View File

@ -58,12 +58,13 @@
</div> </div>
<div class="row mb-4"> <div class="row mb-4">
<!-- Total Products Card --> <!-- Total Products Card -->
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-primary mb-3"> <div class="text-primary mb-3" style="font-size: 2rem;">
<i class="fas fa-cubes fa-2x"></i> 📦
</div> </div>
<h6 class="card-title text-muted small mb-2">Total Products</h6> <h6 class="card-title text-muted small mb-2">Total Products</h6>
<h4 class="text-primary fw-bold mb-0"> <h4 class="text-primary fw-bold mb-0">
@ -78,8 +79,8 @@
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-success mb-3"> <div class="text-success mb-3" style="font-size: 2rem;">
<i class="fas fa-dollar-sign fa-2x"></i> 💰
</div> </div>
<h6 class="card-title text-muted small mb-2">Current Stock Value</h6> <h6 class="card-title text-muted small mb-2">Current Stock Value</h6>
<h4 class="text-success fw-bold mb-0" t-esc="this.getTotalStockValue()"/> <h4 class="text-success fw-bold mb-0" t-esc="this.getTotalStockValue()"/>
@ -92,8 +93,8 @@
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-danger mb-3"> <div class="text-danger mb-3" style="font-size: 2rem;">
<i class="fas fa-times-circle fa-2x"></i>
</div> </div>
<h6 class="card-title text-muted small mb-2">Out of Stock</h6> <h6 class="card-title text-muted small mb-2">Out of Stock</h6>
<h4 class="text-danger fw-bold mb-0" t-esc="this.getOutOfStockCount()"/> <h4 class="text-danger fw-bold mb-0" t-esc="this.getOutOfStockCount()"/>
@ -102,12 +103,12 @@
</div> </div>
</div> </div>
<!-- Low Stock Percentage Card --> <!-- Low Stock Alert Card -->
<div class="col mb-4"> <div class="col mb-4">
<div class="card shadow-sm h-100"> <div class="card shadow-sm h-100">
<div class="card-body text-center py-4"> <div class="card-body text-center py-4">
<div class="text-info mb-3"> <div class="text-info mb-3" style="font-size: 2rem;">
<i class="fas fa-exclamation-triangle fa-2x"></i> ⚠️
</div> </div>
<h6 class="card-title text-muted small mb-2">Low Stock Alert</h6> <h6 class="card-title text-muted small mb-2">Low Stock Alert</h6>
<h4 class="text-info fw-bold mb-0" t-esc="this.getLowStockCount()"/> <h4 class="text-info fw-bold mb-0" t-esc="this.getLowStockCount()"/>
@ -115,6 +116,7 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="card shadow-sm"> <div class="card shadow-sm">

View File

@ -24,7 +24,7 @@ class AssetDetail(models.Model):
quantity = fields.Float('Quantity', default=1.0, copy=False, tracking=True) quantity = fields.Float('Quantity', default=1.0, copy=False, tracking=True)
state = fields.Selection([('draft', 'New'), ('active', 'Active'), ('scrap', 'Scrap')], string='State', default="draft") state = fields.Selection([('draft', 'New'), ('active', 'Active'), ('scrap', 'Scrap')], string='State', default="draft")
@api.model @api.model_create_multi
def create(self, vals): def create(self, vals):
location_id = self.env["asset.location"].search([("is_default", "=", True)], limit=1) location_id = self.env["asset.location"].search([("is_default", "=", True)], limit=1)
vals["asset_code"] = self.env["ir.sequence"].next_by_code("asset.detail", sequence_date=datetime.now().year) or "New" vals["asset_code"] = self.env["ir.sequence"].next_by_code("asset.detail", sequence_date=datetime.now().year) or "New"

View File

@ -12,7 +12,7 @@ class AssetMove(models.Model):
asset_id = fields.Many2one(comodel_name="asset.detail", string="Asset") asset_id = fields.Many2one(comodel_name="asset.detail", string="Asset")
state = fields.Selection([('draft', 'Draft'),('done', 'Done'),('cancel', 'Cancel')], string='State', default="draft") state = fields.Selection([('draft', 'Draft'),('done', 'Done'),('cancel', 'Cancel')], string='State', default="draft")
@api.model @api.model_create_multi
def create(self, vals): def create(self, vals):
vals["name"] = self.env["ir.sequence"].next_by_code("asset.move", sequence_date=datetime.now().year) or "New" vals["name"] = self.env["ir.sequence"].next_by_code("asset.move", sequence_date=datetime.now().year) or "New"
return super(AssetMove, self).create(vals) return super(AssetMove, self).create(vals)