diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2026-02-27 09:36:15 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2026-02-27 09:36:15 +0700 |
| commit | 68040bdf60a35486ed1015421679310df742b74d (patch) | |
| tree | baa62427b5c139beefac6ea1db6b41b456bccf47 | |
| parent | a3ff90b7a2616a01535fc1968d4ac5bfdf9f3c26 (diff) | |
push api altama odoo indo
| -rwxr-xr-x | indoteknik_custom/__manifest__.py | 2 | ||||
| -rw-r--r-- | indoteknik_custom/models/automatic_purchase.py | 56 | ||||
| -rwxr-xr-x | indoteknik_custom/models/purchase_order.py | 12 | ||||
| -rwxr-xr-x | indoteknik_custom/views/purchase_order.xml | 4 |
4 files changed, 62 insertions, 12 deletions
diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index 88abc162..8c427579 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -192,7 +192,7 @@ 'views/update_depreciation_move_wizard_view.xml', 'views/commission_internal.xml', 'views/keywords.xml', - 'views/token_log.xml' + 'views/token_log.xml', 'views/gudang_service.xml', 'views/kartu_stock.xml', ], diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py index 3035ceab..f4ecdcd6 100644 --- a/indoteknik_custom/models/automatic_purchase.py +++ b/indoteknik_custom/models/automatic_purchase.py @@ -315,6 +315,53 @@ class AutomaticPurchase(models.Model): sale_ids_set = set() sale_ids_name = set() for sale_order in matches_so: + exist = self.env['purchase.order.sales.match'].search([ + ('product_id', '=', sale_order.product_id.id), + ('sale_line_id', '=', sale_order.sale_line_id.id), + ('sale_id', '=', sale_order.sale_id.id), + ('purchase_order_id.state', '!=', 'cancel'), + ]) + + skip_line = False + + for existing in exist: + if existing.purchase_order_id.state in ['done', 'purchase']: + # if existing.purchase_line_id.qty_received != existing.purchase_line_id.product_qty: + # break + + incoming = self.env['stock.move'].search([ + ('reference', 'ilike', 'BU/INPUT'), + ('state', 'not in', ['done','cancel']), + ('product_id', '=', existing.product_id.id), + ('purchase_line_id', '=', existing.purchase_line_id.id), + ], limit=1) + + if incoming: + skip_line = True + break + + retur = self.env['stock.move'].search([ + ('reference', 'ilike', 'BU/INPUT'), + ('state', 'in', ['done']), + ('product_id', '=', existing.product_id.id), + ('purchase_line_id', '=', existing.purchase_line_id.id), + ], limit=1) + + if retur and existing.purchase_line_id.qty_received == existing.purchase_line_id.product_qty: + skip_line = True + break + + if skip_line: + continue + + stock_move = self.env['stock.move'].search([ + ('reference', 'ilike', 'BU/PICK'), + ('state', 'in', ['confirmed','waiting','partially_available']), + ('product_id', '=', sale_order.product_id.id), + ('sale_line_id', '=', sale_order.sale_line_id.id), + ]) + if not stock_move: + continue # @stephan skip so line yang sudah pernah ada di purchase order sales match sebelumnya salesperson_name = sale_order.sale_id.user_id.name @@ -740,14 +787,5 @@ class SaleNotInMatchPO(models.Model): apsm.create_date, apsm.write_uid, apsm.write_date, apsm.purchase_price, apsm.purchase_tax_id, apsm.note_procurement from automatic_purchase_sales_match apsm - where apsm.sale_line_id not in ( - select distinct coalesce(posm.sale_line_id,0) - from purchase_order_sales_match posm - join purchase_order po on po.id = posm.purchase_order_id - join purchase_order_line pol on pol.order_id = posm.purchase_order_id and pol.product_id = posm.product_id - join stock_move sm on sm.purchase_line_id = pol.id - where po.state not in ('cancel') - and sm.state not in ('cancel') - ) ) """ % self._table)
\ No newline at end of file diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py index b0fea18b..a345b96b 100755 --- a/indoteknik_custom/models/purchase_order.py +++ b/indoteknik_custom/models/purchase_order.py @@ -304,11 +304,15 @@ class PurchaseOrder(models.Model): if len(unique_soo) == 1: order.soo_number = unique_soo[0] if not order.picking_ids.number_soo: - order.picking_ids[0].number_soo = unique_soo[0] + # order.picking_ids[0].number_soo = unique_soo[0] + for picking in order.picking_ids: + picking.number_soo = unique_soo[0] elif len(unique_soo) > 1: order.soo_number = ", ".join(unique_soo) if not order.picking_ids.number_soo: - order.picking_ids[0].number_soo = ", ".join(unique_soo) + # order.picking_ids[0].number_soo = ", ".join(unique_soo) + for picking in order.picking_ids: + picking.number_soo = ", ".join(unique_soo) else: order.soo_number = False @@ -1442,6 +1446,9 @@ class PurchaseOrder(models.Model): send_email = True break + if self.partner_id.id == 5571 and not self.revisi_po: + self.action_create_order_altama() + if send_email: if self.is_local_env(): _logger.warning("📪 Local environment detected — skip sending email reminders.") @@ -1459,6 +1466,7 @@ class PurchaseOrder(models.Model): self.calculate_line_no() self.approve_by = self.env.user.id + # override date planned added with two days # leadtime = self.partner_id.leadtime # delta_time = current_time + timedelta(days=leadtime) diff --git a/indoteknik_custom/views/purchase_order.xml b/indoteknik_custom/views/purchase_order.xml index e7741abd..9651cdd6 100755 --- a/indoteknik_custom/views/purchase_order.xml +++ b/indoteknik_custom/views/purchase_order.xml @@ -89,6 +89,10 @@ </field> <field name="approval_status" position="after"> <field name="revisi_po"/> + <field name="soo_number" attrs="{'invisible': [('partner_id', '!=', 5571)]}"/> + <field name="soo_price" attrs="{'invisible': [('partner_id', '!=', 5571)]}"/> + <field name="soo_discount" attrs="{'invisible': [('partner_id', '!=', 5571)]}"/> + <field name="soo_tax" attrs="{'invisible': [('partner_id', '!=', 5571)]}"/> <field name="not_update_purchasepricelist"/> </field> <field name="approval_status" position="after"> |
