summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-10-14 14:43:42 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-10-14 14:43:42 +0700
commit4426c0a7f19969b59ff35fa1e4f793b66c6c5d91 (patch)
tree80bc2af8e6c3a3cef8e22a03595b0b49e07bdeeb
parent90d69c1f43812912dddbec1e4ccfbd0a69221590 (diff)
Update purchase_order.py and purchase_order.xml
-rwxr-xr-xindoteknik_custom/models/purchase_order.py137
-rwxr-xr-xindoteknik_custom/views/purchase_order.xml1
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>