summaryrefslogtreecommitdiff
path: root/indoteknik_api/models
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-08-04 09:02:28 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-08-04 09:02:28 +0700
commit4aa9ca7105297079d109e20c793769476af91d02 (patch)
tree73f7067c6b868a73fb940db4cb38725d9fcd6953 /indoteknik_api/models
parent145d15ceaf462f0b3533c441287a66410b7d12e6 (diff)
parent71c0324d483419d3b91078cf6efc2263f279362a (diff)
Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into reminder-tempo-v2
Diffstat (limited to 'indoteknik_api/models')
-rw-r--r--indoteknik_api/models/sale_order.py65
1 files changed, 44 insertions, 21 deletions
diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py
index 45461974..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):
@@ -20,12 +21,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': []
}
for picking in sale_order.picking_ids:
@@ -49,29 +52,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:
@@ -116,11 +122,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