diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2025-05-26 11:09:33 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2025-05-26 11:09:33 +0700 |
| commit | e42e2c17b9ac48a50baa3af1338547031d1a1371 (patch) | |
| tree | 66edab78f81d50c3049fc2a3d804001a237814ae | |
| parent | d0a4c0efbe59afb75790ab55f242a0e1a694f629 (diff) | |
push
| -rw-r--r-- | fixco_custom/models/detail_order.py | 65 |
1 files changed, 31 insertions, 34 deletions
diff --git a/fixco_custom/models/detail_order.py b/fixco_custom/models/detail_order.py index 146f584..54d3a0a 100644 --- a/fixco_custom/models/detail_order.py +++ b/fixco_custom/models/detail_order.py @@ -162,7 +162,6 @@ class DetailOrder(models.Model): return order_lines def execute_queue_detail(self): - self.env.cr.execute('SAVEPOINT queue_detail') try: json_data = json.loads(self.detail_order) data = self.prepare_data_so(json_data) @@ -170,48 +169,46 @@ class DetailOrder(models.Model): order_id, order_status, print_info = self.get_order_id_detail() if order_status != 'PENDING_PAYMENT': - sale_orders = self.env['sale.order'].search([('order_reference', '=', order_id)]) - - if sale_orders: - self.sale_id = sale_orders.id - self.execute_status = 'already_so' - self.env.cr.execute('RELEASE SAVEPOINT queue_detail') - return - - if order_status in ('PARTIALLY_PAID', 'PAID'): + if order_status == 'PARTIALLY_PAID' or order_status == 'PAID': data['order_line'] = order_lines - sale_order = self.env['sale.order'].create(data) - # First write - minimal data - self.write({ - 'sale_id': sale_order.id, - 'execute_status': 'processing_get_so' # Intermediate state - }) - self.env.cr.commit() # Commit after initial write + sale_order = self.env['sale.order'].create(data) - # Process confirmation + self.sale_id = sale_order.id sale_order.order_reference = order_id sale_order.action_confirm() - # Second write - remaining data - self.write({ - 'picking_id': sale_order.picking_ids[0].id, - 'execute_status': 'so_confirm' - }) - sale_order.picking_ids[0].order_reference = order_id - - self.env.cr.commit() # Final commit - self.env.cr.execute('RELEASE SAVEPOINT queue_detail') + + self.picking_id = sale_order.picking_ids[0].id + + self.picking_id.order_reference = order_id + + self.execute_status = 'so_confirm' + else: + sale_orders = self.env['sale.order'].search([('order_reference', '=', order_id)]) + if not sale_orders: + 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.action_confirm() + + self.picking_id = sale_order.picking_ids[0].id + self.picking_id.order_reference = order_id + + self.execute_status = 'so_confirm' + else: + self.sale_id = sale_orders.id + self.execute_status = 'already_so' + except Exception as e: - self.env.cr.execute('ROLLBACK TO SAVEPOINT queue_detail') - error_msg = str(e) - # Use with_context to prevent automatic recomputation if needed - self.with_context(mail_notrack=True).write({ - 'message_error': json.dumps({'error': error_msg}) + self.write({ + 'message_error': json.dumps({ + 'error': str(e) + }) }) - self.env.cr.commit() # Commit the error state - _logger.error("Order processing failed for record %s: %s", self.id, error_msg) def sign_request(self): signData = '$'.join(['POST', Request_URI]) + '$' |
