diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2025-05-20 13:21:30 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2025-05-20 13:21:30 +0700 |
| commit | 6c6940052eb8d480fc6719819c06a964dc0827dc (patch) | |
| tree | 5f5abeb820c4892729ca8ea0f2829e44bd462c0c /fixco_custom/models/detail_order.py | |
| parent | 6deeb1b12e7773d85155fee45f17d9b1a575ec10 (diff) | |
webhook ginee and api detail orders
Diffstat (limited to 'fixco_custom/models/detail_order.py')
| -rw-r--r-- | fixco_custom/models/detail_order.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/fixco_custom/models/detail_order.py b/fixco_custom/models/detail_order.py new file mode 100644 index 0000000..c93bc72 --- /dev/null +++ b/fixco_custom/models/detail_order.py @@ -0,0 +1,59 @@ +from odoo import api, fields, models, _ +from odoo.exceptions import UserError +import time +import requests +import json +import hmac +import base64 +from hashlib import sha256 + +class DetailOrder(models.Model): + _name = "detail.order" + _inherit = ['mail.thread'] + + detail_order = fields.Text() + execute_status = fields.Selection([ + ('success', 'Success'), + ('failed', 'Failed'), + ('done', 'Done'), + ('not_found', 'Record not found') + ], 'Execute Status') + + def get_order_id(self): + try: + if self.json_ginee: + json_data = json.loads(self.json_ginee) + order_id = json_data.get('data', {}).get('orderId') + order_status = json_data.get('data', {}).get('orderStatus') + print_info = json_data.get('data', {}).get('printInfo', {}).get('labelPrintStatus') + if not order_id: + raise UserError(_("Order ID not found in JSON data")) + return order_id + raise UserError(_("No JSON data available")) + except json.JSONDecodeError: + raise UserError(_("Invalid JSON format in json_ginee field")) + except Exception as e: + raise UserError(_("Error extracting order ID: %s") % str(e)) + + def process_queue_item(self, limit=100, max_exec_time=30): + domain = [('execute_status', '=', 'success')] + records = self.search(domain, order='create_date asc', limit=limit) + start_time = time.time() + for rec in records: + end_time = time.time() + elapsed_time = end_time - start_time + if elapsed_time > max_exec_time: + break + rec.execute_queue() + + def execute_queue(self): + try: + order_id, order_status, print_info = self.get_order_id() + + except Exception as e: + self.write({ + 'execute_status': 'failed', + 'json_ginee': json.dumps({ + 'error': str(e) + }) + }) |
