From 3fa5e5bfe91969b4ab74a43a63ab673a76aff9da Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Wed, 23 Oct 2024 15:26:16 +0700 Subject: cr requisition --- indoteknik_custom/models/requisition.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 2b148c96..c4104ec5 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -214,6 +214,7 @@ class RequisitionLine(models.Model): last_price = fields.Float(string='Last Price') last_order_id = fields.Many2one('purchase.order', string='Last Order') last_orderline_id = fields.Many2one('purchase.order.line', string='Last Order Line') + taxes_id = fields.Many2one('account.tax', string='Tax') is_po = fields.Boolean(String='Is PO') current_po_id = fields.Many2one('purchase.order', string='Current') current_po_line_id = fields.Many2one('purchase.order.line', string='Current Line') @@ -221,6 +222,23 @@ class RequisitionLine(models.Model): qty_available_store = fields.Float(string='Available') suggest = fields.Char(string='Suggest') + def _get_valid_purchase_price(self, purchase_price): + price = 0 + taxes = '' + human_last_update = purchase_price.human_last_update or datetime.min + system_last_update = purchase_price.system_last_update or datetime.min + + if purchase_price.taxes_product_id.type_tax_use == 'purchase': + price = purchase_price.product_price + taxes = purchase_price.taxes_product_id.id + + if system_last_update > human_last_update: + if purchase_price.taxes_system_id.type_tax_use == 'purchase': + price = purchase_price.system_price + taxes = purchase_price.taxes_system_id.id + + return price, taxes + @api.onchange('price_unit') def _onchange_price_unit(self): for line in self: @@ -230,6 +248,15 @@ class RequisitionLine(models.Model): def _onchange_product(self): for line in self: line.brand_id = line.product_id.product_tmpl_id.x_manufacture.id + purchase_pricelist = self.env['purchase.pricelist'].search([ + ('product_id', '=', line.product_id.id) + ],order='count_trx_po desc, count_trx_po_vendor desc', limit=1) + + price, taxes = line._get_valid_purchase_price(purchase_pricelist) + line.price_unit = price + line.taxes_id = taxes + line.partner_id = purchase_pricelist.vendor_id.id + class RequisitionPurchaseMatch(models.Model): _name = 'requisition.purchase.match' -- cgit v1.2.3 From 3c5b4bbecca6614c0b6f894e41e9551793957b00 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 11 Nov 2024 13:24:11 +0700 Subject: bug fix match requisition and purchase order --- indoteknik_custom/models/requisition.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index c4104ec5..92b222a8 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -108,6 +108,13 @@ class Requisition(models.Model): new_po_line = self.env['purchase.order.line'].create([param_line]) line.current_po_id = new_po.id line.current_po_line_id = new_po_line.id + + self.env['requisition.purchase.match'].create([{ + 'requisition_id': self.id, + 'order_id': new_po.id + }]) + self.is_po = True + return po_ids # def create_po_from_requisition(self): -- cgit v1.2.3 From c8359019759d78dcddea6d419c4a8f8eebe23c69 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 11 Nov 2024 13:27:04 +0700 Subject: validasi SO harus diisi pada saat create PO di requisition --- indoteknik_custom/models/requisition.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 92b222a8..576857df 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -35,6 +35,8 @@ class Requisition(models.Model): raise UserError('Tidak ada Lines, belum bisa create PO') if self.is_po: raise UserError('Sudah pernah di create PO') + if self.sale_order_id: + raise UserError('Tidak ada link dengan Sales Order, tidak bisa dihitung sebagai Plafon Qty di PO') vendor_ids = self.env['requisition.line'].read_group([ ('requisition_id', '=', self.id), -- cgit v1.2.3 From beefbce9a41d0210582cf8ceb6e4e7a6a5bc8fef Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 11 Nov 2024 13:41:46 +0700 Subject: add view of requisition match po --- indoteknik_custom/models/requisition.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 576857df..e5053d34 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -1,4 +1,4 @@ -from odoo import models, fields, api, _ +from odoo import models, fields, api, tools, _ from odoo.exceptions import UserError from datetime import datetime import math @@ -7,6 +7,30 @@ import logging _logger = logging.getLogger(__name__) +class RequisitionMatchPO(models.Model): + _name = 'v.requisition.match.po' + _auto = False + _rec_name = 'purchase_id' + + id = fields.Integer(string='ID') + requisition_id = fields.Many2one('requisition', string='Requisition') + line_id = fields.Many2one('requisition.line', string='Requisition Line') + product_id = fields.Many2one('product.product', string='Product') + partner_id = fields.Many2one('res.partner', string='Partner') + purchase_id = fields.Many2one('purchase.order', string='Purchase Order') + + def init(self): + tools.drop_view_if_exists(self.env.cr, self._table) + self.env.cr.execute(""" + create or replace view %s as + select rpm.id as id, r.id as requisition_id, rl.id as line_id, rl.product_id, rl.partner_id, + rpm.order_id as purchase_id + from requisition_line rl + join requisition r on r.id = rl.requisition_id + join requisition_purchase_match rpm on rpm.requisition_id = r.id + """ % self._table) + + class Requisition(models.Model): _name = 'requisition' _order = 'id desc' -- cgit v1.2.3 From 03e9f9e8997836e37a5ab38798edb310ce6a6c76 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 11 Nov 2024 13:43:48 +0700 Subject: add sale order --- indoteknik_custom/models/requisition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index e5053d34..68c57e4c 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -24,7 +24,7 @@ class RequisitionMatchPO(models.Model): self.env.cr.execute(""" create or replace view %s as select rpm.id as id, r.id as requisition_id, rl.id as line_id, rl.product_id, rl.partner_id, - rpm.order_id as purchase_id + rpm.order_id as purchase_id, r.sale_order_id as sale_id from requisition_line rl join requisition r on r.id = rl.requisition_id join requisition_purchase_match rpm on rpm.requisition_id = r.id -- cgit v1.2.3 From e40f5a21ec251363b3b71d81b7801a782716ca0a Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Mon, 11 Nov 2024 13:43:58 +0700 Subject: add approval sales manager and marketing manager on rpo --- indoteknik_custom/models/requisition.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index c4104ec5..e09c9e41 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -22,15 +22,30 @@ class Requisition(models.Model): requisition_match = fields.One2many('requisition.purchase.match', 'requisition_id', string='Matches', auto_join=True) sale_order_id = fields.Many2one('sale.order', string='SO', help='harus diisi nomor SO yang ingin digenerate', domain="[('state', '=', 'sale')]") + sales_approve = fields.Boolean(string='Sales Approve', tracking=3, copy=False) + merchandise_approve = fields.Boolean(string='Merchandise Approve', tracking=3, copy=False) @api.model def create(self, vals): vals['number'] = self.env['ir.sequence'].next_by_code('requisition') or '0' result = super(Requisition, self).create(vals) return result - + + def button_approve(self): + if self.env.user.id not in [377, 19]: + raise UserError('Hanya Vita dan Darren Yang Bisa Approve') + if self.env.user.id == 377: + self.sales_approve = True + elif self.env.user.id == 19: + if not self.sales_approve: + raise UserError('Vita Belum Approve') + self.merchandise_approve = True def create_po_from_requisition(self): + if not self.sales_approve: + raise UserError('Harus di Approve Vita') + if not self.merchandise_approve: + raise UserError('Harus di Approve Darren') if not self.requisition_lines: raise UserError('Tidak ada Lines, belum bisa create PO') if self.is_po: -- cgit v1.2.3 From e573a766b997e4dc60935f8cc87e887d09f64b7a Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 11 Nov 2024 13:53:22 +0700 Subject: add sale order condition in match requisition --- indoteknik_custom/models/requisition.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 68c57e4c..583a25c4 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -28,6 +28,11 @@ class RequisitionMatchPO(models.Model): from requisition_line rl join requisition r on r.id = rl.requisition_id join requisition_purchase_match rpm on rpm.requisition_id = r.id + join purchase_order po on po.id = rpm.order_id + join sale_order so on so.id = r.sale_order_id + where r.date_doc >= '2024-11-11' + and po.state in ('done', 'purchase') + and so.state in ('draft', 'sent') """ % self._table) -- cgit v1.2.3 From 9a0fd25e54491bd14a5b29b62b31a440dfa1bebc Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 11 Nov 2024 14:10:13 +0700 Subject: change view requisition match --- indoteknik_custom/models/requisition.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 0ab78530..704ae8c0 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -13,26 +13,24 @@ class RequisitionMatchPO(models.Model): _rec_name = 'purchase_id' id = fields.Integer(string='ID') - requisition_id = fields.Many2one('requisition', string='Requisition') - line_id = fields.Many2one('requisition.line', string='Requisition Line') product_id = fields.Many2one('product.product', string='Product') - partner_id = fields.Many2one('res.partner', string='Partner') - purchase_id = fields.Many2one('purchase.order', string='Purchase Order') + qty_rpo = fields.Float(string='Qty RPO', help='Qty RPO yang sudah di PO namun SO masih Draft') def init(self): tools.drop_view_if_exists(self.env.cr, self._table) self.env.cr.execute(""" create or replace view %s as - select rpm.id as id, r.id as requisition_id, rl.id as line_id, rl.product_id, rl.partner_id, - rpm.order_id as purchase_id, r.sale_order_id as sale_id + select rl.product_id as id, rl.product_id, sum(rl.qty_purchase) as qty_rpo from requisition_line rl join requisition r on r.id = rl.requisition_id join requisition_purchase_match rpm on rpm.requisition_id = r.id join purchase_order po on po.id = rpm.order_id join sale_order so on so.id = r.sale_order_id - where r.date_doc >= '2024-11-11' + where 1=1 + and r.date_doc >= '2024-11-11' and po.state in ('done', 'purchase') and so.state in ('draft', 'sent') + group by rl.product_id """ % self._table) -- cgit v1.2.3 From 17d46cf9f4eede8177b2373c03d5b36123f712c1 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Mon, 11 Nov 2024 14:39:26 +0700 Subject: change rec name view match requisition --- indoteknik_custom/models/requisition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models/requisition.py') diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 704ae8c0..3d9ca876 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -10,7 +10,7 @@ _logger = logging.getLogger(__name__) class RequisitionMatchPO(models.Model): _name = 'v.requisition.match.po' _auto = False - _rec_name = 'purchase_id' + _rec_name = 'product_id' id = fields.Integer(string='ID') product_id = fields.Many2one('product.product', string='Product') -- cgit v1.2.3