summaryrefslogtreecommitdiff
path: root/fixco_custom/models/detail_order.py
diff options
context:
space:
mode:
Diffstat (limited to 'fixco_custom/models/detail_order.py')
-rwxr-xr-xfixco_custom/models/detail_order.py188
1 files changed, 99 insertions, 89 deletions
diff --git a/fixco_custom/models/detail_order.py b/fixco_custom/models/detail_order.py
index 41a5466..b8e6cc3 100755
--- a/fixco_custom/models/detail_order.py
+++ b/fixco_custom/models/detail_order.py
@@ -5,6 +5,7 @@ import requests
import json
import hmac
import base64
+from datetime import datetime
from hashlib import sha256
import logging
@@ -283,96 +284,105 @@ class DetailOrder(models.Model):
# First check if a sale order with this reference already exists
existing_order = self.env['sale.order'].search([('order_reference', '=', order_id)], limit=1)
- if order_status == 'CANCELLED':
- external_order_id = json_data.get('data', [{}])[0].get('externalOrderId')
- order_id = json_data.get('data', [{}])[0].get('orderId')
-
- # Try to find existing SO
- existing_order = self.env['sale.order'].search([
- '|',
- ('invoice_mp', '=', external_order_id),
- ('client_order_ref', '=', order_id)
- ], limit=1)
-
- if existing_order:
- if existing_order.state == 'sale':
- # Cancel all pickings linked to this order
- for picking in existing_order.picking_ids:
- if picking.state not in ['cancel', 'done']:
- picking.action_cancel()
+ create_at_str = json_data.get('data', [{}])[0].get('createAt')
+
+ if create_at_str:
+ create_at = datetime.strptime(create_at_str, "%Y-%m-%dT%H:%M:%SZ")
+
+ cutoff = datetime(2026, 1, 1) # 1 Jan 2026 UTC
+
+ if create_at >= cutoff:
+
+ if order_status == 'CANCELLED':
+ external_order_id = json_data.get('data', [{}])[0].get('externalOrderId')
+ order_id = json_data.get('data', [{}])[0].get('orderId')
+
+ # Try to find existing SO
+ existing_order = self.env['sale.order'].search([
+ '|',
+ ('invoice_mp', '=', external_order_id),
+ ('client_order_ref', '=', order_id)
+ ], limit=1)
+
+ if existing_order:
+ if existing_order.state == 'sale':
+ # Cancel all pickings linked to this order
+ for picking in existing_order.picking_ids:
+ if picking.state not in ['cancel', 'done']:
+ picking.action_cancel()
+ self.sale_id = existing_order.id
+ self.execute_status = 'cancelled_so_picking'
+ existing_order.action_cancel()
+ else:
+ existing_order.action_cancel()
+ self.sale_id = existing_order.id
+ self.execute_status = 'cancelled_so'
+
+ else:
+ # If no existing SO, create one, then cancel
+ data = self.prepare_data_so(json_data)
+ order_lines, product_not_found = self.prepare_data_so_line(json_data)
+ data['order_line'] = order_lines
+ sale_order = self.env['sale.order'].create(data)
+
+ self.sale_id = sale_order.id
+ sale_order.order_reference = order_id
+ sale_order.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
+ sale_order.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
+
+ sale_order.action_cancel()
+ self.execute_status = 'cancelled_so_created'
+
+ return
+
+ if existing_order:
+ # If order already exists, just update the references
self.sale_id = existing_order.id
- self.execute_status = 'cancelled_so_picking'
- existing_order.action_cancel()
- else:
- existing_order.action_cancel()
- self.sale_id = existing_order.id
- self.execute_status = 'cancelled_so'
-
- else:
- # If no existing SO, create one, then cancel
- data = self.prepare_data_so(json_data)
- order_lines, product_not_found = self.prepare_data_so_line(json_data)
- data['order_line'] = order_lines
- sale_order = self.env['sale.order'].create(data)
-
- self.sale_id = sale_order.id
- sale_order.order_reference = order_id
- sale_order.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
- sale_order.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
-
- sale_order.action_cancel()
- self.execute_status = 'cancelled_so_created'
-
- return
-
- if existing_order:
- # If order already exists, just update the references
- self.sale_id = existing_order.id
- self.execute_status = 'already_so'
- return # Exit early since we don't need to create anything
-
- if order_status != 'PENDING_PAYMENT':
- if order_status in ('PARTIALLY_PAID', 'PAID'):
- data['order_line'] = order_lines
- sale_order = self.env['sale.order'].create(data)
-
- self.sale_id = sale_order.id
- sale_order.order_reference = order_id
- sale_order.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
- sale_order.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
- if not product_not_found:
- sale_order.action_confirm()
- # self.picking_id = sale_order.picking_ids[0].id
- # self.picking_id.order_reference = order_id
- # self.picking_id.invoice_mp = sale_order.invoice_mp
- # self.picking_id.carrier = sale_order.carrier
- # self.picking_id.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
- # self.picking_id.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
-
- self.execute_status = 'so_confirm'
- else:
- self.execute_status = 'so_draft'
- else:
- # For other statuses, create new order only if it doesn't exist
- data['order_line'] = order_lines
- sale_order = self.env['sale.order'].create(data)
-
- self.sale_id = sale_order.id
- sale_order.order_reference = order_id
- sale_order.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
- sale_order.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
- if not product_not_found:
- sale_order.action_confirm()
- # self.picking_id = sale_order.picking_ids[0].id
- # self.picking_id.order_reference = order_id
- # self.picking_id.invoice_mp = sale_order.invoice_mp
- # self.picking_id.carrier = sale_order.carrier
- # self.picking_id.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
- # self.picking_id.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
-
- self.execute_status = 'so_confirm'
- else:
- self.execute_status = 'so_draft'
+ self.execute_status = 'already_so'
+ return # Exit early since we don't need to create anything
+
+ if order_status != 'PENDING_PAYMENT':
+ if order_status in ('PARTIALLY_PAID', 'PAID'):
+ data['order_line'] = order_lines
+ sale_order = self.env['sale.order'].create(data)
+
+ self.sale_id = sale_order.id
+ sale_order.order_reference = order_id
+ sale_order.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
+ sale_order.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
+ if not product_not_found:
+ sale_order.action_confirm()
+ # self.picking_id = sale_order.picking_ids[0].id
+ # self.picking_id.order_reference = order_id
+ # self.picking_id.invoice_mp = sale_order.invoice_mp
+ # self.picking_id.carrier = sale_order.carrier
+ # self.picking_id.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
+ # self.picking_id.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
+
+ self.execute_status = 'so_confirm'
+ else:
+ self.execute_status = 'so_draft'
+ else:
+ # For other statuses, create new order only if it doesn't exist
+ data['order_line'] = order_lines
+ sale_order = self.env['sale.order'].create(data)
+
+ self.sale_id = sale_order.id
+ sale_order.order_reference = order_id
+ sale_order.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
+ sale_order.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
+ if not product_not_found:
+ sale_order.action_confirm()
+ # self.picking_id = sale_order.picking_ids[0].id
+ # self.picking_id.order_reference = order_id
+ # self.picking_id.invoice_mp = sale_order.invoice_mp
+ # self.picking_id.carrier = sale_order.carrier
+ # self.picking_id.address = json_data.get('data', [{}])[0].get('shippingAddressInfo', []).get('fullAddress', [])
+ # self.picking_id.note_by_buyer = json_data.get('data', [{}])[0].get('extraInfo', []).get('noteByBuyer', [])
+
+ self.execute_status = 'so_confirm'
+ else:
+ self.execute_status = 'so_draft'
except Exception as e:
self.write({