summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2023-07-04 14:44:58 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2023-07-04 14:44:58 +0700
commit6eaf93b898640ffa752f9addf109a293aa7ad776 (patch)
tree4e71560251e3a58598b0e9686a9823bc8f304491
parent917bc54da1bdcbbac36e20aa483e8fd0bac39e4f (diff)
api sla product altama
-rw-r--r--indoteknik_api/controllers/api_v1/product.py7
-rw-r--r--indoteknik_custom/models/product_sla.py110
-rwxr-xr-xindoteknik_custom/models/product_template.py1
-rw-r--r--indoteknik_custom/views/product_sla.xml8
4 files changed, 70 insertions, 56 deletions
diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py
index 5ed6490c..a2a0779b 100644
--- a/indoteknik_api/controllers/api_v1/product.py
+++ b/indoteknik_api/controllers/api_v1/product.py
@@ -17,7 +17,7 @@ class Product(controller.Controller):
id = kw.get('id')
stock_location_id = 57 # Ubah dengan location_id yang diinginkan
product = request.env['product.product'].search([('id', '=', id)], limit=1)
- stock = product.qty_available
+ # stock = product.qty_available - 10
item_code = product.default_code
qty_altama = request.env['product.template'].get_stock_altama(item_code)
qty_altama -= int(qty_altama * 0.1)
@@ -25,13 +25,14 @@ class Product(controller.Controller):
qty_b2b_altama = rounded_qty_altama
qty = 0
- sla_date = '-'
+ sla_date = '-'
qty_available = 0
for stock in product.stock_quant_ids:
- if stock.location_id.id == 57:
+ if stock.location_id.id == stock_location_id:
qty_available += stock.quantity
+ qty_available -= 10
if qty_available == 0:
if qty_b2b_altama > 0:
qty = qty_b2b_altama
diff --git a/indoteknik_custom/models/product_sla.py b/indoteknik_custom/models/product_sla.py
index 4f74b28f..afc2a5af 100644
--- a/indoteknik_custom/models/product_sla.py
+++ b/indoteknik_custom/models/product_sla.py
@@ -9,65 +9,83 @@ _logger = logging.getLogger(__name__)
class ProductSla(models.Model):
_name = 'product.sla'
_description = 'Product Sla'
+ _rec_name = 'product_variant_id'
+
product_variant_id = fields.Many2one('product.product',string='Product')
avg_leadtime = fields.Char(string='AVG Leadtime', readonly=True)
leadtime = fields.Char(string='Leadtime', readonly=True)
sla = fields.Char(string='SLA', readonly=True)
+ version = fields.Integer(string="Version", compute="_compute_version")
+
+ def _compute_version(self):
+ for sla in self:
+ sla.version = sla.product_variant_id.sla_version
- def generate_product_variant_id_sla(self):
+ def generate_product_variant_id_sla(self, limit=5000):
# Filter produk non-Altama
products = self.env['product.product'].search([
- ('x_manufacture', 'not in', [10,122,89]),
- ('location_id', '=', 57),
- ], offset=74465)
+ ('x_manufacture', 'not in', [10, 122, 89]),
+ ('location_id', '=', 57)
+ ], order='sla_version asc', limit=limit)
i = 1
for product in products:
- print(f"PRODUCT KE: {i}/{len(products)}")
- i += 1
- sla = self.env['product.sla'].create({
- 'product_variant_id': product.id,
- })
+ _logger.info(f'Update Product SLA {i}/{len(products)}')
+ product_sla = self.search([('product_variant_id', '=', product.id)], limit=1)
+ if not product_sla:
+ product_sla = self.env['product.sla'].create({
+ 'product_variant_id': product.id,
+ })
- sla.generate_product_sla()
+ product_sla.generate_product_sla()
+ i += 1
def generate_product_sla(self):
for sla in self:
- if sla.product_variant_id.stock_move_ids.picking_id:
- query = [
- ('product_id', '=', sla.product_variant_id.id),
- ('picking_id', '!=', False),
- ('picking_id.state', '=', 'done'),
- ('picking_id.location_id', '=', 57)
- ]
- picking = self.env['stock.move.line'].search(query)
- leadtimes=[]
- for stock in picking:
- if not stock.picking_id.driver_departure_date:
- continue
- date_delivered = stock.picking_id.driver_departure_date
- date_so_confirmed = stock.picking_id.sale_id.date_order
- if date_delivered and date_so_confirmed:
- leadtime = date_delivered - date_so_confirmed
- leadtime_in_days = leadtime.days
- leadtimes.append(leadtime_in_days)
- if len(leadtimes) > 0:
- avg_leadtime = sum(leadtimes)/len(leadtimes)
- rounded_leadtime = math.ceil(float(avg_leadtime))
- sla.avg_leadtime = rounded_leadtime
- if sla.product_variant_id.qty_available > 10:
- sla.sla = '1 Hari'
- elif sla.avg_leadtime and float(sla.avg_leadtime) >= 1 and float(sla.avg_leadtime) <= 5:
- sla.sla = '3-6 Hari'
- elif sla.avg_leadtime and float(sla.avg_leadtime) >= 6 and float(sla.avg_leadtime) <= 10:
- sla.sla = '4-12 Hari'
- elif sla.avg_leadtime and float(sla.avg_leadtime) >= 11:
- sla.sla = 'Indent'
- else:
- sla.sla = '-'
-
+ sla.avg_leadtime = '-'
+ sla.sla = '-'
+
+ qty_available = 0
for stock in sla.product_variant_id.stock_quant_ids:
- if not sla.avg_leadtime and stock.location_id.id == 57 and stock.quantity > 0:
+ if stock.location_id.id == 57:
+ qty_available += stock.quantity
+ qty_available -= 10
+ total_stock_moves = len(sla.product_variant_id.stock_move_ids)
+
+ if total_stock_moves > 0:
+ if qty_available > 10:
sla.sla = '1 Hari'
- sla.avg_leadtime = '-'
-
+ elif qty_available <= 0:
+ sla.sla = 'barang mempunyai stock move tetapi tidak ada qty available'
+ elif total_stock_moves == 0 and qty_available > 10:
+ sla.sla = 'barang tidak mempunyai stock move tetapi ada qty available'
+
+ query = [
+ ('product_id', '=', sla.product_variant_id.id),
+ ('picking_id', '!=', False),
+ ('picking_id.location_id', '=', 57),
+ ('picking_id.state', 'in', ['done','assigned'])
+ ]
+ picking = self.env['stock.move.line'].search(query)
+ leadtimes=[]
+ for stock in picking:
+ date_delivered = stock.picking_id.driver_departure_date
+ date_so_confirmed = stock.picking_id.sale_id.date_order
+ if date_delivered and date_so_confirmed:
+ leadtime = date_delivered - date_so_confirmed
+ leadtime_in_days = leadtime.days
+ leadtimes.append(leadtime_in_days)
+
+ if len(leadtimes) > 0:
+ avg_leadtime = sum(leadtimes) / len(leadtimes)
+ rounded_leadtime = math.ceil(avg_leadtime)
+ sla.avg_leadtime = rounded_leadtime
+ if rounded_leadtime >= 1 and rounded_leadtime <= 5:
+ sla.sla = '3-6 Hari'
+ elif rounded_leadtime >= 6 and rounded_leadtime <= 10:
+ sla.sla = '4-12 Hari'
+ elif rounded_leadtime >= 11:
+ sla.sla = 'Indent'
+ else:
+ sla.sla = 'tidak masuk kondisi manapun'
+ sla.product_variant_id.sla_version += 1
diff --git a/indoteknik_custom/models/product_template.py b/indoteknik_custom/models/product_template.py
index 8247cd7e..1a83b702 100755
--- a/indoteknik_custom/models/product_template.py
+++ b/indoteknik_custom/models/product_template.py
@@ -278,6 +278,7 @@ class ProductProduct(models.Model):
material = fields.Char(string='Material')
qty_onhand_bandengan = fields.Float(string='Qty Incoming Bandengan', compute='_get_qty_onhand_bandengan')
qty_incoming_bandengan = fields.Float(string='Qty Incoming Bandengan', compute='_get_qty_incoming_bandengan')
+ sla_version = fields.Integer(string="SLA Version", default=0)
def _get_qty_incoming_bandengan(self):
for product in self:
diff --git a/indoteknik_custom/views/product_sla.xml b/indoteknik_custom/views/product_sla.xml
index 2cc29d7c..f91cf97c 100644
--- a/indoteknik_custom/views/product_sla.xml
+++ b/indoteknik_custom/views/product_sla.xml
@@ -17,19 +17,13 @@
<field name="model">product.sla</field>
<field name="arch" type="xml">
<form>
- <header>
- <button name="generate_product_variant_id_sla"
- string="Generate Product Sla"
- type="object"
- class="mr-2 oe_highlight">
- </button>
- </header>
<sheet string="Product Sla">
<group>
<group>
<field name="product_variant_id"/>
<field name="avg_leadtime"/>
<field name="sla"/>
+ <field name="version"/>
</group>
</group>
</sheet>