summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-09-06 13:59:28 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-09-06 13:59:28 +0700
commit4986c63d2a6bd8e2feadbd2403a211b0b0cf405f (patch)
treeb80d2d415b887a7ab66c9d55d5a4857d34142bea /indoteknik_api/controllers
parentea48748650d1abe7b9c09f961eaa3762750e21be (diff)
parente07379886024a313695a56ebdd072bfd87b6626a (diff)
Merge branch 'production' into feature/voucher-group
Diffstat (limited to 'indoteknik_api/controllers')
-rw-r--r--indoteknik_api/controllers/api_v1/__init__.py3
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py12
-rw-r--r--indoteknik_api/controllers/api_v1/stock_picking.py81
3 files changed, 88 insertions, 8 deletions
diff --git a/indoteknik_api/controllers/api_v1/__init__.py b/indoteknik_api/controllers/api_v1/__init__.py
index 65bcf926..36fcbd53 100644
--- a/indoteknik_api/controllers/api_v1/__init__.py
+++ b/indoteknik_api/controllers/api_v1/__init__.py
@@ -25,4 +25,5 @@ from . import content
from . import midtrans
from . import wati
from . import courier
-from . import voucher \ No newline at end of file
+from . import voucher
+from . import stock_picking \ No newline at end of file
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index ccecb55f..adc89f66 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -97,12 +97,8 @@ class SaleOrder(controller.Controller):
if not params['valid']:
return self.response(code=400, description=params)
- partner_child_ids = self.get_partner_child_ids(
- params['value']['partner_id'])
- domain = [
- ('id', '=', params['value']['id']),
- ('partner_id', 'in', partner_child_ids)
- ]
+ partner_child_ids = self.get_partner_child_ids(params['value']['partner_id'])
+ domain = [('id', '=', params['value']['id']), ('partner_id', 'in', partner_child_ids)]
data = {}
sale_order = request.env['sale.order'].search(domain)
if sale_order:
@@ -262,7 +258,8 @@ class SaleOrder(controller.Controller):
'carrier_id': [],
'delivery_service_type': [],
'voucher': [],
- 'source': []
+ 'source': [],
+ 'estimated_arrival_days': ['number', 'default:0']
})
if not params['valid']:
@@ -287,6 +284,7 @@ class SaleOrder(controller.Controller):
'partner_purchase_order_name': params['value']['po_number'],
'partner_purchase_order_file': params['value']['po_file'],
'delivery_amt': params['value']['delivery_amount'],
+ 'estimated_arrival_days': params['value']['estimated_arrival_days'],
'shipping_cost_covered': 'customer',
'shipping_paid_by': 'customer',
'carrier_id': params['value']['carrier_id'],
diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py
new file mode 100644
index 00000000..e0a60c98
--- /dev/null
+++ b/indoteknik_api/controllers/api_v1/stock_picking.py
@@ -0,0 +1,81 @@
+from .. import controller
+from odoo import http
+from odoo.http import request
+
+
+class StockPicking(controller.Controller):
+ prefix = '/api/v1/'
+ PREFIX_PARTNER = prefix + 'partner/<partner_id>/'
+
+ @http.route(PREFIX_PARTNER + 'stock-picking', auth='public', method=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized(private=True, private_key='partner_id')
+ def get_partner_stock_picking(self, **kw):
+ get_params = self.get_request_params(kw, {
+ 'partner_id': ['number'],
+ 'q': [],
+ 'limit': ['default:0', 'number'],
+ 'offset': ['default:0', 'number']
+ })
+
+ if not get_params['valid']:
+ return self.response(code=400, description=get_params)
+
+ params = get_params['value']
+ partner_id = params['partner_id']
+ limit = params['limit']
+ offset = params['offset']
+
+ child_ids = request.env['res.partner'].browse(partner_id).get_child_ids()
+
+ picking_model = request.env['stock.picking']
+ default_domain = [('partner_id', 'in', child_ids), ('sale_id', '!=', False), ('origin', 'ilike', 'SO%'), ('state', '!=', 'cancel')]
+
+ domain = default_domain
+ if params['q']:
+ query_like = '%' + params['q'].replace(' ', '%') + '%'
+ domain += ['|', '|', ('name', 'ilike', query_like), ('sale_id.client_order_ref', 'ilike', query_like), ('delivery_tracking_no', 'ilike', query_like)]
+
+ stock_pickings = picking_model.search(domain, offset=offset, limit=limit, order='create_date desc')
+ res_pickings = []
+ for picking in stock_pickings:
+ manifests = picking.get_manifests()
+ res_pickings.append({
+ 'id': picking.id,
+ 'name': picking.name,
+ 'date': self.time_to_str(picking.create_date, '%d/%m/%Y'),
+ 'tracking_number': picking.delivery_tracking_no or '',
+ 'sale_order': {
+ 'id': picking.sale_id.id,
+ 'name': picking.sale_id.name,
+ 'client_order_ref': picking.sale_id.client_order_ref or ''
+ },
+ 'delivered': picking.waybill_id.delivered or picking.driver_arrival_date != False,
+ 'carrier_name': picking.carrier_id.name or '',
+ 'last_manifest': next(iter(manifests), None)
+ })
+
+ pending_count = picking_model.search_count(default_domain + [('driver_departure_date', '=', False), ('driver_arrival_date', '=', False)])
+ shipment_count = picking_model.search_count(default_domain + [('driver_departure_date', '!=', False), ('driver_arrival_date', '=', False)])
+ completed_count = picking_model.search_count(default_domain + [('driver_departure_date', '!=', False), ('driver_arrival_date', '!=', False)])
+
+ return self.response({
+ 'summary': {
+ 'pending_count': pending_count,
+ 'shipment_count': shipment_count,
+ 'completed_count': completed_count
+ },
+ 'picking_total': picking_model.search_count(default_domain),
+ 'pickings': res_pickings
+ })
+
+ @http.route(PREFIX_PARTNER + 'stock-picking/<id>/tracking', auth='public', method=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized(private=True, private_key='partner_id')
+ def get_partner_stock_picking_detail_tracking(self, **kw):
+ id = int(kw.get('id', 0))
+ picking_model = request.env['stock.picking']
+
+ picking = picking_model.browse(id)
+ if not picking:
+ return self.response(None)
+
+ return self.response(picking.get_tracking_detail())