From 1c5eaef25d30a2f760afaad4f5329a87cc4da3c1 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 26 Feb 2025 16:30:42 +0700 Subject: CR repeat order --- indoteknik_api/models/sale_order.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'indoteknik_api/models') diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 727379c5..0b9881ec 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -104,11 +104,28 @@ class SaleOrder(models.Model): data.update(data_with_detail) else: data_with_detail = { + 'products': [], 'address': { 'customer': res_users.api_address_response(sale_order.partner_id), } } data.update(data_with_detail) + for line in sale_order.order_line: + product = self.env['product.product'].api_single_response(line.product_id) + product['price'] = { + 'price': line.price_unit, + 'discount_percentage': line.discount, + 'price_discount': line.price_reduce_taxexcl, + 'subtotal': line.price_subtotal + } + product['quantity'] = line.product_uom_qty + product['available_quantity'] = line.product_available_quantity + for data_v2 in sale_order.fulfillment_line_v2: + product_v2 = self.env['product.product'].api_single_response(data_v2.product_id) + if product['id'] == product_v2['id']: + product['so_qty'] = data_v2.so_qty + product['reserved_stock_qty'] = data_v2.reserved_stock_qty + data_with_detail['products'].append(product) return data -- cgit v1.2.3 From 84a7a5fde0f5be9c24a5b324087b8726b1b8f01a Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 12 Mar 2025 16:59:54 +0700 Subject: add sorting dari yg terbaru --- indoteknik_api/models/sale_order.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'indoteknik_api/models') diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 0b9881ec..6debf762 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -28,12 +28,19 @@ class SaleOrder(models.Model): 'date_order': self.env['rest.api'].datetime_to_str(sale_order.date_order, '%d/%m/%Y %H:%M:%S'), 'pickings': [] } - for picking in sale_order.picking_ids: + # Urutkan picking berdasarkan create_date descending + sorted_pickings = sale_order.picking_ids.sorted(key=lambda p: p.create_date, reverse=True) + + for picking in sorted_pickings: data['pickings'].append({ 'id': picking.id, 'name': picking.name, 'tracking_number': picking.delivery_tracking_no or '', + 'carrier_name': picking.carrier_id.name or '', 'delivered': picking.waybill_id.delivered or picking.driver_arrival_date != False or picking.sj_return_date != False, + 'date': self.env['rest.api'].datetime_to_str(picking.driver_departure_date, '%d/%m/%Y'), + 'eta': picking.generate_eta_delivery(), + 'service_type': sale_order.delivery_service_type or '', }) if sale_order.state == 'cancel': data['status'] = 'cancel' -- cgit v1.2.3 From 431229f2a6f1203fbdfe470229e55da8ebd3ea01 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 14 Mar 2025 16:17:10 +0700 Subject: fix code --- indoteknik_api/models/sale_order.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indoteknik_api/models') diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 6debf762..4fc96386 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -20,12 +20,14 @@ class SaleOrder(models.Model): 'amount_untaxed': sale_order.amount_untaxed, 'amount_tax': sale_order.amount_tax, 'amount_total': sale_order.grand_total, + 'amount_discount': sale_order.amount_voucher_shipping_disc, 'purchase_order_name': sale_order.partner_purchase_order_name or sale_order.client_order_ref, 'purchase_order_file': True if sale_order.partner_purchase_order_file else False, 'invoice_count': sale_order.invoice_count, 'status': 'draft', 'approval_step': APPROVAL_STEP[sale_order.web_approval] if sale_order.web_approval else 0, 'date_order': self.env['rest.api'].datetime_to_str(sale_order.date_order, '%d/%m/%Y %H:%M:%S'), + 'payment_type': sale_order.payment_type, 'pickings': [] } # Urutkan picking berdasarkan create_date descending @@ -41,6 +43,7 @@ class SaleOrder(models.Model): 'date': self.env['rest.api'].datetime_to_str(picking.driver_departure_date, '%d/%m/%Y'), 'eta': picking.generate_eta_delivery(), 'service_type': sale_order.delivery_service_type or '', + 'weight_total': picking.weight or 0, }) if sale_order.state == 'cancel': data['status'] = 'cancel' -- cgit v1.2.3 From 8d1af98bb7dab812f91d7d275b4004c4e5b0ff75 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 31 Jul 2025 08:33:22 +0700 Subject: repeat order fix --- indoteknik_api/models/sale_order.py | 45 ++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 21 deletions(-) (limited to 'indoteknik_api/models') diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 5427ed07..54b4a6dc 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -51,29 +51,32 @@ class SaleOrder(models.Model): }) if sale_order.state == 'cancel': data['status'] = 'cancel' - if sale_order.state in ['draft', 'sent']: + if sale_order.state == 'draft' and sale_order.approval_status == False: data['status'] = 'draft' - if sale_order.is_continue_transaction: - data['status'] = 'waiting' - if sale_order.approval_status in ['pengajuan1', 'pengajuan2']: - data['status'] = 'waiting' - if sale_order.state == 'sale': - data['status'] = 'sale' - picking_count = { - 'assigned': 0, - 'done': 0, - } - for picking in sale_order.picking_ids: - if picking.state in ['confirmed', 'assigned']: - picking_count['assigned'] += 1 - if picking.state == 'done': - picking_count['done'] += 1 - if picking_count['done'] > 0: + if sale_order.state == 'draft' and sale_order.approval_status in ['pengajuan1', 'pengajuan2']: + data['status'] = 'waiting' + + + if sale_order.state == 'sale': + bu_pickings = [ + p for p in sale_order.picking_ids + if p.picking_type_id and p.picking_type_id.id == 29 + ] + + # Hitung status masing-masing picking + total = len(bu_pickings) + done_pickings = [p for p in bu_pickings if p.state == 'done'] + done_with_driver = [p for p in done_pickings if p.driver_arrival_date] + done_without_driver = [p for p in done_pickings if not p.driver_arrival_date] + + if len(done_pickings) == 0: + data['status'] = 'sale' + elif len(done_pickings) == total and len(done_pickings) > 0 and len(done_with_driver) == total: + data['status'] = 'done' + elif len(done_pickings) == total and len(done_pickings) > 0 and len(done_without_driver) == total: data['status'] = 'shipping' - if picking_count['assigned'] > 0: - data['status'] = 'partial_shipping' - if sale_order.state == 'done': - data['status'] = 'done' + else: + data['status'] = 'partial_shipping' res_users = self.env['res.users'] if context: -- cgit v1.2.3 From dddfd3846d37e24c5b52cc98bbe889bd4a958775 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 31 Jul 2025 15:51:03 +0700 Subject: repeat order --- indoteknik_api/models/sale_order.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indoteknik_api/models') diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 54b4a6dc..615dcdcb 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -1,4 +1,5 @@ from odoo import models +from datetime import datetime class SaleOrder(models.Model): -- cgit v1.2.3 From fcd98b0f038cfa1653b8b12df77750253ebd7a68 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 6 Aug 2025 09:10:16 +0700 Subject: change api delivered --- indoteknik_api/models/sale_order.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indoteknik_api/models') diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index 615dcdcb..0561043b 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -67,8 +67,8 @@ class SaleOrder(models.Model): # Hitung status masing-masing picking total = len(bu_pickings) done_pickings = [p for p in bu_pickings if p.state == 'done'] - done_with_driver = [p for p in done_pickings if p.driver_arrival_date] - done_without_driver = [p for p in done_pickings if not p.driver_arrival_date] + done_with_driver = [p for p in done_pickings if p.sj_return_date] + done_without_driver = [p for p in done_pickings if not p.sj_return_date] if len(done_pickings) == 0: data['status'] = 'sale' -- cgit v1.2.3