diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-10-14 14:43:42 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-10-14 14:43:42 +0700 |
| commit | 4426c0a7f19969b59ff35fa1e4f793b66c6c5d91 (patch) | |
| tree | 80bc2af8e6c3a3cef8e22a03595b0b49e07bdeeb | |
| parent | 90d69c1f43812912dddbec1e4ccfbd0a69221590 (diff) | |
Update purchase_order.py and purchase_order.xml
| -rwxr-xr-x | indoteknik_custom/models/purchase_order.py | 137 | ||||
| -rwxr-xr-x | indoteknik_custom/views/purchase_order.xml | 1 |
2 files changed, 67 insertions, 71 deletions
diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index 54ef60af..8736a6f4 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -1,5 +1,8 @@ from odoo import fields, models, api, _ from odoo.exceptions import AccessError, UserError, ValidationError +import logging + +_logger = logging.getLogger(__name__) class PurchaseOrder(models.Model): @@ -7,6 +10,11 @@ class PurchaseOrder(models.Model): sale_order_id = fields.Many2one('sale.order', string='Sale Order') procurement_status = fields.Char(string='Procurement Status', compute='get_procurement_status', readonly=True) + po_status = fields.Selection([ + ('terproses', 'Terproses'), + ('sebagian', 'Sebagian Diproses'), + ('menunggu', 'Menunggu Diproses'), + ]) approval_status = fields.Selection([ ('pengajuan1', 'Approval Manager'), #siapa? darren - 11 ('pengajuan2', 'Approval Pimpinan'), #akbar - 7 temporary not used @@ -26,18 +34,68 @@ class PurchaseOrder(models.Model): 'SO Margin%', compute='compute_total_margin', help="Total % Margin in Sales Order Header") amount_total_without_service = fields.Float('AmtTotalWithoutService', compute='compute_amt_total_without_service') + summary_qty_po = fields.Float('Summary Qty PO', compute='_compute_summary_qty') + summary_qty_receipt = fields.Float('Summary Qty Receipt', compute='_compute_summary_qty') + + def calculate_po_status_beginning(self): + purchases = self.env['purchase.order'].search([ + ('po_status', '=', False), + '|', + ('state', '=', 'purchase'), + ('state', '=', 'done') + ]) + for order in purchases: + sum_qty_received = sum_qty_po = 0 + for po_line in order.order_line: + sum_qty_po += po_line.product_uom_qty + sum_qty_received += po_line.qty_received + + if order.summary_qty_po == order.summary_qty_receipt: + order.po_status = 'terproses' + elif order.summary_qty_po > order.summary_qty_receipt > 0: + order.po_status = 'sebagian' + else: + order.po_status = 'menunggu' + _logger.info("Calculate PO Status %s" % order.id) + + def calculate_po_status(self): + purchases = self.env['purchase.order'].search([ + ('po_status', '!=', 'terproses'), + ]) + for order in purchases: + sum_qty_received = sum_qty_po = 0 + for po_line in order.order_line: + sum_qty_po += po_line.product_uom_qty + sum_qty_received += po_line.qty_received + + if order.summary_qty_po == order.summary_qty_receipt: + order.po_status = 'terproses' + elif order.summary_qty_po > order.summary_qty_receipt > 0: + order.po_status = 'sebagian' + else: + order.po_status = 'menunggu' + _logger.info("Calculate PO Status %s" % order.id) + + def _compute_summary_qty(self): + for order in self: + sum_qty_po = sum_qty_receipt = 0 + for line in order.order_line: + sum_qty_po += line.product_uom_qty + sum_qty_receipt += line.qty_received + order.summary_qty_po = sum_qty_po + order.summary_qty_receipt = sum_qty_receipt def get_procurement_status(self): for purchase_order in self: - product_uom_qty = sum_qty_received = 0 - - for order_line in purchase_order.order_line: - product_uom_qty += order_line.product_uom_qty - sum_qty_received += order_line.qty_received + # product_uom_qty = sum_qty_received = 0 + # + # for order_line in purchase_order.order_line: + # product_uom_qty += order_line.product_uom_qty + # sum_qty_received += order_line.qty_received - if product_uom_qty == sum_qty_received: + if purchase_order.summary_qty_po == purchase_order.summary_qty_receipt: status = 'Terproses' - elif product_uom_qty > sum_qty_received > 0: + elif purchase_order.summary_qty_po > purchase_order.summary_qty_receipt > 0: status = 'Sebagian Diproses' else: status = 'Menunggu Diproses' @@ -85,37 +143,12 @@ class PurchaseOrder(models.Model): def button_confirm(self): res = super(PurchaseOrder, self).button_confirm() - test = self.env.user.is_leader - test2 = self.env.user.is_purchasing_manager if self.total_percent_margin < self.total_so_percent_margin and not self.env.user.is_purchasing_manager and not self.env.user.is_leader: raise UserError("Beda Margin dengan Sales, harus approval Manager") if not self.sale_order_id and not self.env.user.is_purchasing_manager and not self.env.user.is_leader: raise UserError("Tidak ada link dengan SO, harus approval Manager") self.approval_status = 'approved' - - # for line in self.order_line: - # if not line.product_id: - # continue - # if line.product_id.type == 'service' and self.env.user.id != 6: - # raise UserError("Ada tambahan Ongkos kirim, harus Approval Manager") - # sale_order_line = self.env['sale.order.line'].search( - # [('product_id', '=', line.product_id.id), - # ('order_id', '=', line.order_id.sale_order_id.id)], limit=1, order='price_reduce_taxexcl') - # - # est_purchase_price = sale_order_line.purchase_price - # real_purchase_price = line.price_unit - # real_tax = real_tax_amount = count_real_tax = 0 - # for tax in line.taxes_id: - # count_real_tax += 1 - # real_tax = tax - # real_tax_amount += tax.amount - # if (sale_order_line.purchase_tax_id.amount != real_tax_amount or count_real_tax > 1 \ - # or real_tax.price_include != sale_order_line.purchase_tax_id.price_include) \ - # and (self.env.user.id != 6 and self.env.user.id != 7): - # raise UserError("Beda tax amount dengan Sales, harus Approval Manager") - # elif est_purchase_price < real_purchase_price and self.env.user.id != 6 and self.env.user.id != 7: - # raise UserError("Beda Price dengan Sales, harus Approval Manager") - # self.approval_status = 'approved' + self.po_status = 'menunggu' return res @@ -126,36 +159,6 @@ class PurchaseOrder(models.Model): raise UserError("Bisa langsung Confirm") else: self.approval_status = 'pengajuan1' - # approval = 0 - # for line in self.order_line: - # if not line.product_id: - # continue - # elif line.product_id.type == 'service' and self.env.user.id != 6: - # approval += 1 - # else: - # sale_order_line = self.env['sale.order.line'].search( - # [('product_id', '=', line.product_id.id), - # ('order_id', '=', line.order_id.sale_order_id.id)], limit=1, order='price_reduce_taxexcl') - # - # est_purchase_price = sale_order_line.purchase_price - # real_purchase_price = line.price_unit - # real_tax = real_tax_amount = count_real_tax = 0 - # for tax in line.taxes_id: - # count_real_tax += 1 - # real_tax = tax - # real_tax_amount += tax.amount - # if (sale_order_line.purchase_tax_id.amount != real_tax_amount or count_real_tax > 1 \ - # or real_tax.price_include != sale_order_line.purchase_tax_id.price_include) \ - # and (self.env.user.id != 6 and self.env.user.id != 7): - # approval += 1 - # elif est_purchase_price != real_purchase_price and self.env.user.id != 6 and self.env.user.id != 7: - # approval += 1 - # elif line.product_id.type == 'service' and self.env.user.id != 6 and self.env.user.id != 7: - # approval += 1 - # if approval > 0: - # self.approval_status = "pengajuan1" - # else: - # raise UserError("Bisa langsung Confirm") def button_cancel(self): res = super(PurchaseOrder, self).button_cancel() @@ -189,14 +192,6 @@ class PurchaseOrder(models.Model): self.total_percent_margin = 0 self.total_so_margin = 0 self.total_so_percent_margin = 0 - # if not self.order_line or not self.sale_order_id: - # self.total_margin = 0 - # self.total_percent_margin = 0 - # self.total_so_margin = 0 - # self.total_so_percent_margin = 0 - # return - # for line in self.order_line: - # line.compute_item_margin() def compute_amt_total_without_service(self): for order in self: diff --git a/indoteknik_custom/views/purchase_order.xml b/indoteknik_custom/views/purchase_order.xml index a8b71d5a..41e97cd9 100755 --- a/indoteknik_custom/views/purchase_order.xml +++ b/indoteknik_custom/views/purchase_order.xml @@ -53,6 +53,7 @@ <field name="arch" type="xml"> <field name="invoice_status" position="after"> <field name="procurement_status" /> + <field name="po_status" /> </field> </field> </record> |
