summaryrefslogtreecommitdiff
path: root/indoteknik_api
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2025-08-13 09:48:41 +0700
committerit-fixcomart <it@fixcomart.co.id>2025-08-13 09:48:41 +0700
commit7644260c8b660c71aa1f9232cb50acea551798c2 (patch)
treebdbad5e360bd7d638b340c6d96d19dc8c7912d00 /indoteknik_api
parentd1e55b12466b6c93cc4a3e23dab59d3ce3795d45 (diff)
parenta2d087032e5b14901f4128c81b58143bcff4286f (diff)
<hafid> merging odoo-backup
Diffstat (limited to 'indoteknik_api')
-rw-r--r--indoteknik_api/controllers/api_v1/partner.py4
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py32
-rw-r--r--indoteknik_api/controllers/api_v1/stock_picking.py17
-rw-r--r--indoteknik_api/models/sale_order.py14
4 files changed, 50 insertions, 17 deletions
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py
index b8bd21be..14136ca3 100644
--- a/indoteknik_api/controllers/api_v1/partner.py
+++ b/indoteknik_api/controllers/api_v1/partner.py
@@ -150,7 +150,7 @@ class Partner(controller.Controller):
partner_params = self.get_request_params(request_data, {
'tax_name': ['alias:nama_wajib_pajak'],
- 'company_type_id': ['number'],
+ # 'company_type_id': ['number'],
'industry_id': ['number'],
'npwp': [],
'alamat_lengkap_text': [],
@@ -170,7 +170,7 @@ class Partner(controller.Controller):
if 'id_user' in request_data:
user_params = self.get_request_params(request_data, {
'id_user': ['required', 'number'],
- 'company_type_id': ['number'],
+ # 'company_type_id': ['number'],
'industry_id': ['number'],
'tax_name': ['alias:nama_wajib_pajak'],
'npwp': [],
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index fd460ea0..d199cd84 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -87,6 +87,8 @@ class SaleOrder(controller.Controller):
'amount_tax': sale.amount_tax,
'amount_total': sale.amount_total,
'expected_ready_to_ship': f"{sale.expected_ready_to_ship.day} {INDONESIAN_MONTHS[sale.expected_ready_to_ship.month]} {sale.expected_ready_to_ship.year}",
+ 'eta_date_start': f"{sale.eta_date_start.day} {INDONESIAN_MONTHS[sale.eta_date_start.month]} {sale.eta_date_start.year}",
+ 'eta_date_end': f"{sale.eta_date.day} {INDONESIAN_MONTHS[sale.eta_date.month]} {sale.eta_date.year}",
'product_name': product_name,
'product_not_in_id': product_not_in_id,
'details': [request.env['sale.order.line'].api_single_response(x, context='with_detail') for x in sale.order_line]
@@ -206,8 +208,8 @@ class SaleOrder(controller.Controller):
]
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 status == 'dikemas' and len(done_pickings) == 0:
filtered_orders.append(sale_order)
@@ -257,6 +259,25 @@ class SaleOrder(controller.Controller):
bulan = bulan_id[sale_order.expected_ready_to_ship.month - 1]
tahun = sale_order.expected_ready_to_ship.year
data['expected_ready_to_ship'] = f"{tanggal} {bulan} {tahun}"
+ if sale_order.eta_date_start:
+ bulan_id = [
+ "Januari", "Februari", "Maret", "April", "Mei", "Juni",
+ "Juli", "Agustus", "September", "Oktober", "November", "Desember"
+ ]
+ tanggal = sale_order.eta_date_start.day
+ bulan = bulan_id[sale_order.eta_date_start.month - 1]
+ tahun = sale_order.eta_date_start.year
+ data['eta_date_start'] = f"{tanggal} {bulan} {tahun}"
+
+ if sale_order.eta_date:
+ bulan_id = [
+ "Januari", "Februari", "Maret", "April", "Mei", "Juni",
+ "Juli", "Agustus", "September", "Oktober", "November", "Desember"
+ ]
+ tanggal = sale_order.eta_date.day
+ bulan = bulan_id[sale_order.eta_date.month - 1]
+ tahun = sale_order.eta_date.year
+ data['eta_date_end'] = f"{tanggal} {bulan} {tahun}"
return self.response(data)
@@ -424,8 +445,8 @@ class SaleOrder(controller.Controller):
return self.response('Unauthorized')
sale_order = request.env['sale.order'].sudo().search_read([('id', '=', id)], ['name'])
- pdf, type = request.env['ir.actions.report'].sudo().search([('report_name', '=', 'quotation_so_new')]).render_jasper([id], {})
- # pdf, type = request.env['ir.actions.report'].sudo().search([('report_name', '=', 'indoteknik_custom.report_saleorder_website')])._render_qweb_pdf([id])
+ # pdf, type = request.env['ir.actions.report'].sudo().search([('report_name', '=', 'quotation_so_new')]).render_jasper([id], {})
+ pdf, type = request.env['ir.actions.report'].sudo().search([('report_name', '=', 'indoteknik_custom.report_saleorder_website')])._render_qweb_pdf([id])
if pdf and len(sale_order) > 0:
return rest_api.response_attachment({
@@ -607,9 +628,6 @@ class SaleOrder(controller.Controller):
if is_flash_sale_item:
is_has_disc = True
_logger.info("Item is flash sale product - marked as discounted")
- elif discount_percent > 0 and not global_flash_sale:
- is_has_disc = True
- _logger.info(f"Item has discount {discount_percent}% - marked as discounted")
elif global_flash_sale:
_logger.info("Global flash sale active but item not eligible - not marked as discounted")
diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py
index 85b0fbba..762e17c5 100644
--- a/indoteknik_api/controllers/api_v1/stock_picking.py
+++ b/indoteknik_api/controllers/api_v1/stock_picking.py
@@ -125,28 +125,33 @@ class StockPicking(controller.Controller):
@http.route(prefix + 'stock-picking/<scanid>/documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
@controller.Controller.must_authorized()
def write_partner_stock_picking_documentation(self, **kw):
- scanid = int(kw.get('scanid', 0))
+ scanid = kw.get('scanid', '').strip()
sj_document = kw.get('sj_document', False)
paket_document = kw.get('paket_document', False)
- params = {'sj_documentation': sj_document,
- 'paket_documentation': paket_document,
- 'driver_arrival_date': datetime.utcnow(),
- }
+ params = {
+ 'sj_documentation': sj_document,
+ 'paket_documentation': paket_document,
+ 'driver_arrival_date': datetime.utcnow(),
+ }
- picking_data = request.env['stock.picking'].search([('id', '=', scanid)], limit=1)
+ picking_data = False
+ if scanid.isdigit() and int(scanid) < 2147483647:
+ picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=1)
if not picking_data:
picking_data = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=1)
if not picking_data:
return self.response(code=404, description='picking not found')
+
picking_data.write(params)
return self.response({
'name': picking_data.name
})
+
@http.route(prefix + 'webhook/biteship', type='json', auth='public', methods=['POST'], csrf=False)
def update_status_from_biteship(self, **kw):
_logger.info("Biteship Webhook: Request received at controller start (type='json').")
diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py
index 615dcdcb..9be03927 100644
--- a/indoteknik_api/models/sale_order.py
+++ b/indoteknik_api/models/sale_order.py
@@ -29,6 +29,9 @@ class SaleOrder(models.Model):
'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,
+ 'carrier_id': sale_order.carrier_id.id,
+ 'carrier_name': sale_order.carrier_id.name,
+ 'service_type': sale_order.shipping_option_id.name,
'pickings': []
}
for picking in sale_order.picking_ids:
@@ -47,6 +50,13 @@ class SaleOrder(models.Model):
'eta' : response['eta'],
'id': picking.id,
'name': picking.name,
+ 'products': [{
+ 'id': product.id,
+ 'name': product.name,
+ 'image': self.env['ir.attachment'].api_image('product.template', 'image_128', product.product_tmpl_id.id),
+ 'code': product.default_code or ''
+ } for product in picking.move_line_ids.product_id],
+ 'product_count': len(picking.move_line_ids)
# 'tracking_number': picking.delivery_tracking_no or '',
# 'delivered': picking.waybill_id.delivered or picking.driver_arrival_date != False or picking.sj_return_date != False,
})
@@ -67,8 +77,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'