summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-09-20 15:06:17 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-09-20 15:06:17 +0700
commit79bf9729d10c8fb37ef9071ab6df2b6644ddea49 (patch)
tree6226da5e38ad44673a1bb5d7d4e2b0fd5df1fada /indoteknik_api/controllers
parenteb7661705303a64c97e84061b53d48d5c46f6293 (diff)
parentd2bb21ae878db2a3b77dbb3341046c9d12ba1de5 (diff)
Merge branch 'production' into iman/new-register
# Conflicts: # indoteknik_custom/models/res_users.py
Diffstat (limited to 'indoteknik_api/controllers')
-rw-r--r--indoteknik_api/controllers/api_v1/cart.py22
-rw-r--r--indoteknik_api/controllers/api_v1/category_management.py3
-rw-r--r--indoteknik_api/controllers/api_v1/partner.py28
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py84
-rw-r--r--indoteknik_api/controllers/api_v1/stock_picking.py12
-rw-r--r--indoteknik_api/controllers/api_v1/voucher.py2
6 files changed, 140 insertions, 11 deletions
diff --git a/indoteknik_api/controllers/api_v1/cart.py b/indoteknik_api/controllers/api_v1/cart.py
index f472a9b0..2a24b205 100644
--- a/indoteknik_api/controllers/api_v1/cart.py
+++ b/indoteknik_api/controllers/api_v1/cart.py
@@ -16,10 +16,28 @@ class Cart(controller.Controller):
offset = int(kw.get('offset', 0))
query = [('user_id', '=', user_id)]
carts = user_cart.search(query, limit=limit, offset=offset, order='create_date desc')
- carts.write({'source': 'add_to_cart'})
+ # carts.write({'source': 'add_to_cart'})
+ products = []
+ products_inactive = []
+ for cart in carts:
+ if cart.product_id:
+ price = cart.product_id._v2_get_website_price_include_tax()
+ if cart.product_id.active and price > 0:
+ product = cart.with_context(price_for="web").get_products()
+ for product_active in product:
+ products.append(product_active)
+ else:
+ product_inactives = cart.with_context(price_for="web").get_products()
+ for inactives in product_inactives:
+ products_inactive.append(inactives)
+ else:
+ program = cart.with_context(price_for="web").get_products()
+ for programs in program:
+ products.append(programs)
data = {
'product_total': user_cart.search_count(query),
- 'products': carts.with_context(price_for="web").get_products()
+ 'products': products,
+ 'products_inactive': products_inactive
}
return self.response(data)
diff --git a/indoteknik_api/controllers/api_v1/category_management.py b/indoteknik_api/controllers/api_v1/category_management.py
index 836f4493..c0ecc6b9 100644
--- a/indoteknik_api/controllers/api_v1/category_management.py
+++ b/indoteknik_api/controllers/api_v1/category_management.py
@@ -2,6 +2,7 @@ from odoo import http
from odoo.http import request
from .. import controller
+
class CategoryManagement(controller.Controller):
prefix = '/api/v1/'
@@ -42,5 +43,3 @@ class CategoryManagement(controller.Controller):
'categories': category_id2_data,
})
return self.response(data, headers=[('Cache-Control', 'max-age=3600, public')])
-
-
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py
index 3cc6b193..663f4d7d 100644
--- a/indoteknik_api/controllers/api_v1/partner.py
+++ b/indoteknik_api/controllers/api_v1/partner.py
@@ -180,4 +180,32 @@ class Partner(controller.Controller):
})
return self.response(data)
+
+ @http.route(prefix + 'check/<partner_id>/tempo', auth='public', methods=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def get_check_tempo_partner(self, **kw):
+ partner_id = int(kw.get('partner_id'))
+
+ partner = request.env['res.partner'].search([('id', '=', partner_id)], limit=1)
+ if not partner:
+ return self.response(code=404, description='Partner not found')
+
+ partner = partner.parent_id or partner
+
+ if any(line.days == 0 for line in partner.property_payment_term_id.line_ids):
+ return self.response(code=402, description='Partner not tempo')
+
+ result_tempo = sum(m.amount_total_signed for m in request.env['account.move'].search([('partner_id', '=', partner.id), ('payment_state', '=', 'not_paid'), ('state', '=', 'posted')]))
+
+ remaining_limit = partner.blocking_stage - result_tempo if partner.active_limit else None
+
+ data = {
+ 'name': partner.name,
+ 'amount_due': result_tempo,
+ 'remaining_limit': remaining_limit
+ }
+
+ return self.response(data)
+
+
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index 7edd71f6..e7664c79 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -342,11 +342,21 @@ class SaleOrder(controller.Controller):
@http.route(prefix + 'user/<user_id>/sale_order/checkout', auth='public', method=['GET', 'OPTIONS'], csrf=False)
@controller.Controller.must_authorized(private=True, private_key='user_id')
def get_user_checkout_so(self, user_id, **kw):
- cart = request.env['website.user.cart']
+ m_voucher = request.env['voucher']
+ m_cart = request.env['website.user.cart']
+
voucher_code = kw.get('voucher')
+ voucher_shipping_code = kw.get('voucher_shipping')
source = kw.get('source')
- voucher = request.env['voucher'].search([('code', '=', voucher_code)], limit=1)
- result = cart.with_context(price_for="web").get_user_checkout(user_id, voucher, source)
+
+ voucher = m_voucher.search([('code', '=', voucher_code), ('apply_type', 'in', ['all', 'brand'])], limit=1)
+ voucher_shipping = m_voucher.search([('code', '=', voucher_shipping_code), ('apply_type', '=', 'shipping')], limit=1)
+ result = m_cart.with_context(price_for="web").get_user_checkout(
+ user_id,
+ voucher=voucher,
+ voucher_shipping=voucher_shipping,
+ source=source
+ )
return self.response(result)
@http.route(PREFIX_PARTNER + 'sale_order/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False)
@@ -400,7 +410,7 @@ class SaleOrder(controller.Controller):
'real_invoice_id': params['value']['partner_invoice_id'],
'partner_purchase_order_name': params['value']['po_number'],
'partner_purchase_order_file': params['value']['po_file'],
- 'delivery_amt': params['value']['delivery_amount'],
+ 'delivery_amt': params['value']['delivery_amount'] * 1.10,
'estimated_arrival_days': params['value']['estimated_arrival_days'],
'shipping_cost_covered': 'customer',
'shipping_paid_by': 'customer',
@@ -455,11 +465,16 @@ class SaleOrder(controller.Controller):
sale_order.apply_promotion_program()
voucher_code = params['value']['voucher']
- voucher = request.env['voucher'].search([('code', '=', voucher_code)])
+ voucher = request.env['voucher'].search([('code', '=', voucher_code),('apply_type', 'in', ['all', 'brand'])], limit=1)
+ voucher_shipping = request.env['voucher'].search([('code', '=', voucher_code),('apply_type', 'in', ['shipping'])], limit=1)
if voucher and len(promotions) == 0:
sale_order.voucher_id = voucher.id
sale_order.apply_voucher()
+ if voucher_shipping and len(promotions) == 0:
+ sale_order.voucher_shipping_id = voucher_shipping.id
+ sale_order.apply_voucher_shipping()
+
cart_ids = [x['cart_id'] for x in carts]
if sale_order._requires_approval_margin_leader(): #jika ada error tambahkan kondisi if params['value']['type'] == 'sale_order':
sale_order.approval_status = 'pengajuan2'
@@ -621,4 +636,61 @@ class SaleOrder(controller.Controller):
}
return self.response(data)
- \ No newline at end of file
+
+ @http.route(prefix + 'tracking_order', auth='public', method=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def tracking_get_sale_order_detail(self, **kw):
+ # Extract 'so' and 'email' parameters from query parameters
+ so = kw.get('so')
+ email_user = kw.get('email')
+
+ if not email_user or not so:
+ return self.response({
+ 'code': 400,
+ 'so': so,
+ 'email': email_user,
+ 'description': "Email and Sale Order number are required."
+ })
+
+ # Search for the sale order by the name (so)
+ sale_order = request.env['sale.order'].search([('name', '=', so)], limit=1)
+ if not sale_order:
+ return self.response({
+ 'code': 404,
+ 'so': so,
+ 'email': email_user,
+ 'description': "Sale Order not found."
+ })
+
+ # Get the partner associated with the sale order
+ partner = sale_order.partner_id
+ company_id = partner.company_id.id
+
+ # Search for all partners within the same company
+ partners_in_company = request.env['res.partner'].search([('company_id', '=', company_id)])
+
+ # Check if the email matches any partner's email in the same company
+ email_match = partners_in_company.filtered(lambda p: p.email == email_user)
+ if not email_match:
+ return self.response({
+ 'code': 403,
+ 'so': so,
+ 'email': email_user,
+ 'description': "Email does not match any partner in the same company as the Sale Order."
+ })
+
+ # Check for partner child ids if needed
+ partner_child_ids = self.get_partner_child_ids(partner.id)
+ if sale_order.partner_id.id not in partner_child_ids:
+ return self.response({
+ 'code': 403,
+ 'so': so,
+ 'email': email_user,
+ 'description': "Unauthorized access to Sale Order details."
+ })
+
+ # Prepare the response data
+ data = request.env['sale.order'].api_v1_single_response(sale_order, context='with_detail')
+
+ return self.response(data)
+
diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py
index 5e919b31..8b941c16 100644
--- a/indoteknik_api/controllers/api_v1/stock_picking.py
+++ b/indoteknik_api/controllers/api_v1/stock_picking.py
@@ -99,3 +99,15 @@ class StockPicking(controller.Controller):
return self.response(None)
return self.response(picking.get_tracking_detail())
+
+ @http.route(prefix + 'stock-picking/<id>/tracking', auth='public', method=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def get_partner_stock_picking_detail_tracking_iman(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()) \ No newline at end of file
diff --git a/indoteknik_api/controllers/api_v1/voucher.py b/indoteknik_api/controllers/api_v1/voucher.py
index cd5dff20..910488d1 100644
--- a/indoteknik_api/controllers/api_v1/voucher.py
+++ b/indoteknik_api/controllers/api_v1/voucher.py
@@ -28,7 +28,7 @@ class Voucher(controller.Controller):
domain = []
if code:
visibility.append('private')
- domain += [('code', '=', code)]
+ domain += [('code', 'ilike', code)]
user_pricelist = request.env.context.get('user_pricelist')
if user_pricelist:
domain += [('excl_pricelist_ids', 'not in', [user_pricelist.id])]