From e4256fb981175c456c2033cde443f4f98d72747e Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 19 Mar 2025 16:39:18 +0700 Subject: webhook biteship --- indoteknik_api/controllers/api_v1/stock_picking.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 55e07152..ceb6b9d3 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -3,6 +3,7 @@ from odoo import http from odoo.http import request from pytz import timezone from datetime import datetime +import json class StockPicking(controller.Controller): @@ -138,13 +139,12 @@ class StockPicking(controller.Controller): 'name': picking_data.name }) - @http.route(prefix + 'webhook/biteship', type='json', auth='public', methods=['POST'], csrf=False) + @http.route(prefix + 'webhook/biteship', auth='public', methods=['POST'], csrf=False) def udpate_status_from_bitehsip(self, **kw): try: - if not request.jsonrequest: - return "ok" + data = kw # Ambil data JSON dari request - data = request.jsonrequest # Ambil data JSON dari request + print(data) event = data.get('event') # Handle Event Berdasarkan Jenisnya @@ -155,9 +155,9 @@ class StockPicking(controller.Controller): elif event == "order.waybill_id": self.process_order_waybill(data) - return {'success': True, 'message': f'Webhook {event} received'} + return self.response({'success': True}) except Exception as e: - return {'success': False, 'message': str(e)} + return self.response({'success': False, 'message': str(e)}) def process_order_status(self, data): picking_model = request.env['stock.picking'].sudo().search([('biteship_id', '=', data.get('order_id'))], limit=1) -- cgit v1.2.3 From ef00237c7b6b3aed4f6040d1f124199d3551561e Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Fri, 11 Apr 2025 14:50:53 +0700 Subject: expected delivery date manifest --- indoteknik_api/controllers/api_v1/stock_picking.py | 1 - 1 file changed, 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index ceb6b9d3..d0cc055d 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -102,7 +102,6 @@ class StockPicking(controller.Controller): picking = picking_model.browse(id) if not picking: return self.response(None) - hostori = picking.get_tracking_detail() return self.response(picking.get_tracking_detail()) @http.route(prefix + 'stock-picking//tracking', auth='public', method=['GET', 'OPTIONS']) -- cgit v1.2.3 From fb50d10576f2e5d16faba612dfd1565f7168f655 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 16 Apr 2025 14:33:31 +0700 Subject: FEEDBACK --- indoteknik_api/controllers/api_v1/product.py | 74 ++++++++++++++++++++-- indoteknik_api/controllers/api_v1/stock_picking.py | 16 +++-- 2 files changed, 78 insertions(+), 12 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py index a88c3368..260dd462 100644 --- a/indoteknik_api/controllers/api_v1/product.py +++ b/indoteknik_api/controllers/api_v1/product.py @@ -96,22 +96,25 @@ class Product(controller.Controller): }) @http.route(prefix + 'product_variant//stock', auth='public', methods=['GET', 'OPTIONS']) - @controller.Controller.must_authorized() + @controller.Controller.must_authorized() def get_product_template_stock_by_id(self, **kw): id = int(kw.get('id')) date_7_days_ago = datetime.now() - timedelta(days=7) - product = request.env['product.product'].search( - [('id', '=', id)], limit=1) + product_pruchase = request.env['purchase.pricelist'].search([ + ('product_id', '=', id), + ('is_winner', '=', True) + ]) product_sla = request.env['product.sla'].search( [('product_variant_id', '=', id)], limit=1) stock_vendor = request.env['stock.vendor'].search([ ('product_variant_id', '=', id), ('write_date', '>=', date_7_days_ago.strftime("%Y-%m-%d %H:%M:%S")) ], limit=1) + + product = product_pruchase.product_id qty_available = product.qty_free_bandengan - if qty_available < 1 : qty_available = 0 @@ -157,7 +160,68 @@ class Product(controller.Controller): 'sla_date': sla_date } - return self.response(data, headers=[('Cache-Control', 'max-age=600, private')]) + return self.response(data, headers=[('Cache-Control', 'max-age=600, private')]) + # def get_product_template_stock_by_id(self, **kw): + # id = int(kw.get('id')) + # date_7_days_ago = datetime.now() - timedelta(days=7) + # product = request.env['product.product'].search( + # [('id', '=', id)], limit=1) + # product_sla = request.env['product.sla'].search( + # [('product_variant_id', '=', id)], limit=1) + # stock_vendor = request.env['stock.vendor'].search([ + # ('product_variant_id', '=', id), + # ('write_date', '>=', date_7_days_ago.strftime("%Y-%m-%d %H:%M:%S")) + # ], limit=1) + + # qty_available = product.qty_free_bandengan + + + # if qty_available < 1 : + # qty_available = 0 + + # qty = 0 + # sla_date = '-' + + # # Qty Stock Vendor + # qty_vendor = stock_vendor.quantity + # qty_vendor -= int(qty_vendor * 0.1) + # qty_vendor = math.ceil(float(qty_vendor)) + # total_excell = qty_vendor + + # is_altama_product = product.x_manufacture.id in [10, 122, 89] + # if is_altama_product: + # try: + # # Qty Altama + # qty_altama = request.env['product.template'].get_stock_altama( + # product.default_code) + # qty_altama -= int(qty_altama * 0.1) + # qty_altama = math.ceil(float(qty_altama)) + # total_adem = qty_altama + + # if qty_available > 0: + # qty = qty_available + total_adem + total_excell + # sla_date = product_sla.sla or 1 + # elif qty_altama > 0 or qty_vendor > 0: + # qty = total_adem if qty_altama > 0 else total_excell + # sla_date = product_sla.sla + # else: + # sla_date = product_sla.sla + # except: + # print('error') + # else: + # if qty_available > 0: + # qty = qty_available + # sla_date = product_sla.sla or 'Indent' + # elif qty_vendor > 0: + # qty = total_excell + # sla_date = '2-4 Hari' + + # data = { + # 'qty': qty, + # 'sla_date': sla_date + # } + + # return self.response(data, headers=[('Cache-Control', 'max-age=600, private')]) @http.route(prefix + 'product_variant//qty_available', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py index 0a15d969..abd78f0e 100644 --- a/indoteknik_api/controllers/api_v1/stock_picking.py +++ b/indoteknik_api/controllers/api_v1/stock_picking.py @@ -160,21 +160,23 @@ class StockPicking(controller.Controller): def process_order_status(self, data): picking_model = request.env['stock.picking'].sudo().search([('biteship_id', '=', data.get('order_id'))], limit=1) - if data.get('status') == 'picked': - picking_model.write({'driver_departure_date': datetime.utcnow()}) - elif data.get('status') == 'delivered': - picking_model.write({'driver_arrival_date': datetime.utcnow()}) + if picking_model : + if data.get('status') == 'picked': + result = picking_model.write({'driver_departure_date': datetime.utcnow()}) + print(result) + elif data.get('status') == 'delivered': + picking_model.write({'driver_arrival_date': datetime.utcnow()}) def process_order_price(self, data): - picking_model = request.env['stock.picking'].sudo().search([('biteship_id', '=', data.get('order_id'))], limit=1) - order = request.env['sale.order'].sudo().search([('name', '=', picking_model.sale_id.name)], limit=1) + picking_model = request.env['stock.picking'].search([('biteship_id', '=', data.get('order_id'))], limit=1) + order = request.env['sale.order'].search([('name', '=', picking_model.sale_id.name)], limit=1) if order: order.write({ 'delivery_amt': data.get('price') }) def process_order_waybill(self, data): - picking_model = request.env['stock.picking'].sudo().search([('biteship_id', '=', data.get('order_id'))], limit=1) + picking_model = request.env['stock.picking'].search([('biteship_id', '=', data.get('order_id'))], limit=1) if picking_model: picking_model.write({ 'biteship_waybill_id': data.get('courier_waybill_id'), -- cgit v1.2.3 From a76389076431e63519835656eebdba4e4d0eda3a Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Mon, 21 Apr 2025 11:57:38 +0700 Subject: feedback renca --- indoteknik_api/controllers/api_v1/product.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py index 260dd462..7d5fc580 100644 --- a/indoteknik_api/controllers/api_v1/product.py +++ b/indoteknik_api/controllers/api_v1/product.py @@ -104,14 +104,24 @@ class Product(controller.Controller): ('product_id', '=', id), ('is_winner', '=', True) ]) - product_sla = request.env['product.sla'].search( - [('product_variant_id', '=', id)], limit=1) stock_vendor = request.env['stock.vendor'].search([ ('product_variant_id', '=', id), ('write_date', '>=', date_7_days_ago.strftime("%Y-%m-%d %H:%M:%S")) ], limit=1) product = product_pruchase.product_id + + vendor_sla = request.env['vendor.sla'].search([('id_vendor', '=', product_pruchase.vendor_id.id)], limit=1) + slatime = 15 + if vendor_sla: + if vendor_sla.unit == 'hari': + vendor_duration = vendor_sla.duration * 24 * 60 + else : + vendor_duration = vendor_sla.duration * 60 + + estimation_sla = (1 * 24 * 60) + vendor_duration + estimation_sla_days = estimation_sla / (24 * 60) + slatime = math.ceil(estimation_sla_days) qty_available = product.qty_free_bandengan @@ -119,7 +129,7 @@ class Product(controller.Controller): qty_available = 0 qty = 0 - sla_date = '-' + sla_date = f'{slatime} Hari' # Qty Stock Vendor qty_vendor = stock_vendor.quantity @@ -139,21 +149,21 @@ class Product(controller.Controller): if qty_available > 0: qty = qty_available + total_adem + total_excell - sla_date = product_sla.sla or 1 + sla_date = '1 Hari' elif qty_altama > 0 or qty_vendor > 0: qty = total_adem if qty_altama > 0 else total_excell - sla_date = product_sla.sla + sla_date = f'{slatime} Hari' else: - sla_date = product_sla.sla + sla_date = f'{slatime} Hari' except: print('error') else: if qty_available > 0: qty = qty_available - sla_date = product_sla.sla or 'Indent' + sla_date = f'{slatime} Hari' elif qty_vendor > 0: qty = total_excell - sla_date = '2-4 Hari' + sla_date = f'{slatime} Hari' data = { 'qty': qty, -- cgit v1.2.3 From d9d8b9f3afc0ad60ca1199b08ab6e2836663a0de Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Thu, 24 Apr 2025 13:54:06 +0700 Subject: fixing revisi renca --- indoteknik_api/controllers/api_v1/product.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py index 7d5fc580..7d6ebdb6 100644 --- a/indoteknik_api/controllers/api_v1/product.py +++ b/indoteknik_api/controllers/api_v1/product.py @@ -51,7 +51,7 @@ class Product(controller.Controller): additional_days = request.env['sale.order'].get_days_until_next_business_day(start_date) include_instant = True - if(len(products) != len(product_ids)): + if(len(products) == len(product_ids)): products_data_params = {product["id"] : product for product in product_data } all_fast_products = all( -- cgit v1.2.3 From 914705630f61f2e02f15ee24a479191e945a0f22 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Sat, 26 Apr 2025 08:39:32 +0700 Subject: handle bugs additional time when checkout > 15.00 --- indoteknik_api/controllers/api_v1/product.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py index 7d6ebdb6..bd969f67 100644 --- a/indoteknik_api/controllers/api_v1/product.py +++ b/indoteknik_api/controllers/api_v1/product.py @@ -2,6 +2,7 @@ from .. import controller from odoo import http from odoo.http import request, Response from datetime import datetime, timedelta +import pytz import ast import logging import math @@ -46,8 +47,9 @@ class Product(controller.Controller): ('product_id', 'in', product_ids), ('is_winner', '=', True) ]) - - start_date = datetime.today().date() + jakarta = pytz.timezone("Asia/Jakarta") + start_date = datetime.now(jakarta) + print(start_date.strftime('%H:%M')) additional_days = request.env['sale.order'].get_days_until_next_business_day(start_date) include_instant = True @@ -64,7 +66,7 @@ class Product(controller.Controller): 'include_instant': include_instant, 'sla_duration': 1, 'sla_additional_days': additional_days, - 'sla_total' : int(1) + int(additional_days), + 'sla_total' : int(additional_days), 'sla_unit': 'Hari' }) @@ -160,7 +162,7 @@ class Product(controller.Controller): else: if qty_available > 0: qty = qty_available - sla_date = f'{slatime} Hari' + sla_date = f'1 Hari' elif qty_vendor > 0: qty = total_excell sla_date = f'{slatime} Hari' -- cgit v1.2.3 From 509eb9406e6c48caf3e6366c3d8ac60643b71546 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Tue, 29 Apr 2025 09:09:05 +0700 Subject: fixing jam 15 --- indoteknik_api/controllers/api_v1/product.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py index bd969f67..0c26f064 100644 --- a/indoteknik_api/controllers/api_v1/product.py +++ b/indoteknik_api/controllers/api_v1/product.py @@ -66,7 +66,7 @@ class Product(controller.Controller): 'include_instant': include_instant, 'sla_duration': 1, 'sla_additional_days': additional_days, - 'sla_total' : int(additional_days), + 'sla_total' : 1 + int(additional_days), 'sla_unit': 'Hari' }) -- cgit v1.2.3 From c77d250353dbed0ba1ec5cd8abd940ba95a011fc Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 30 Apr 2025 13:55:26 +0700 Subject: handle 15am dan holidays --- indoteknik_api/controllers/api_v1/product.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py index 0c26f064..9566ed05 100644 --- a/indoteknik_api/controllers/api_v1/product.py +++ b/indoteknik_api/controllers/api_v1/product.py @@ -49,7 +49,9 @@ class Product(controller.Controller): ]) jakarta = pytz.timezone("Asia/Jakarta") start_date = datetime.now(jakarta) - print(start_date.strftime('%H:%M')) + additional_days_after_3pm = request.env['sale.order'].handling_order_after_3pm(start_date) + start_date += timedelta(days=additional_days_after_3pm) + additional_days = request.env['sale.order'].get_days_until_next_business_day(start_date) include_instant = True -- cgit v1.2.3 From 7897614cee8a347dfdd933df72db95859cb1a558 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Wed, 30 Apr 2025 16:43:38 +0700 Subject: fixing handle 15 pm, weekend, and holidays --- indoteknik_api/controllers/api_v1/product.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py index 9566ed05..ecd37cda 100644 --- a/indoteknik_api/controllers/api_v1/product.py +++ b/indoteknik_api/controllers/api_v1/product.py @@ -49,10 +49,9 @@ class Product(controller.Controller): ]) jakarta = pytz.timezone("Asia/Jakarta") start_date = datetime.now(jakarta) - additional_days_after_3pm = request.env['sale.order'].handling_order_after_3pm(start_date) - start_date += timedelta(days=additional_days_after_3pm) additional_days = request.env['sale.order'].get_days_until_next_business_day(start_date) + include_instant = True if(len(products) == len(product_ids)): @@ -67,8 +66,8 @@ class Product(controller.Controller): return self.response({ 'include_instant': include_instant, 'sla_duration': 1, - 'sla_additional_days': additional_days, - 'sla_total' : 1 + int(additional_days), + 'sla_additional_days': int(additional_days), + 'sla_total' : int(additional_days), 'sla_unit': 'Hari' }) -- cgit v1.2.3 From 847a025e889ae9dcfe9ff97c913c9310695fc2c5 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Fri, 16 May 2025 08:46:53 +0700 Subject: handle is 3 pm --- indoteknik_api/controllers/api_v1/product.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py index ecd37cda..e97a7ff8 100644 --- a/indoteknik_api/controllers/api_v1/product.py +++ b/indoteknik_api/controllers/api_v1/product.py @@ -50,7 +50,8 @@ class Product(controller.Controller): jakarta = pytz.timezone("Asia/Jakarta") start_date = datetime.now(jakarta) - additional_days = request.env['sale.order'].get_days_until_next_business_day(start_date) + offset, is3pm = request.env['sale.order'].get_days_until_next_business_day(start_date) + additional_days = offset include_instant = True -- cgit v1.2.3 From 48a2eae94b66f7bb8916dcd984bce17fbb36d45e Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Fri, 23 May 2025 09:44:34 +0700 Subject: (andri) add flag di API untuk mengetahui quotation SO dibuat dari website atau bukan --- indoteknik_api/controllers/api_v1/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 98b13cad..065dddbb 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -438,7 +438,7 @@ class SaleOrder(controller.Controller): if params['value']['type'] == 'sale_order': parameters['approval_status'] = 'pengajuan1' - sale_order = request.env['sale.order'].create([parameters]) + sale_order = request.env['sale.order'].with_context(from_website_checkout=True).create([parameters]) sale_order.onchange_partner_contact() user_id = params['value']['user_id'] -- cgit v1.2.3