diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2023-07-04 14:44:58 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2023-07-04 14:44:58 +0700 |
| commit | 6eaf93b898640ffa752f9addf109a293aa7ad776 (patch) | |
| tree | 4e71560251e3a58598b0e9686a9823bc8f304491 | |
| parent | 917bc54da1bdcbbac36e20aa483e8fd0bac39e4f (diff) | |
api sla product altama
| -rw-r--r-- | indoteknik_api/controllers/api_v1/product.py | 7 | ||||
| -rw-r--r-- | indoteknik_custom/models/product_sla.py | 110 | ||||
| -rwxr-xr-x | indoteknik_custom/models/product_template.py | 1 | ||||
| -rw-r--r-- | indoteknik_custom/views/product_sla.xml | 8 |
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> |
