summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2026-02-27 09:36:15 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2026-02-27 09:36:15 +0700
commit68040bdf60a35486ed1015421679310df742b74d (patch)
treebaa62427b5c139beefac6ea1db6b41b456bccf47
parenta3ff90b7a2616a01535fc1968d4ac5bfdf9f3c26 (diff)
push api altama odoo indo
-rwxr-xr-xindoteknik_custom/__manifest__.py2
-rw-r--r--indoteknik_custom/models/automatic_purchase.py56
-rwxr-xr-xindoteknik_custom/models/purchase_order.py12
-rwxr-xr-xindoteknik_custom/views/purchase_order.xml4
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">