summaryrefslogtreecommitdiff
path: root/indoteknik_api
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-12-04 11:24:24 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-12-04 11:24:24 +0700
commit1094670e6fc35e5150b612b32e1f497b36c022b3 (patch)
tree4482491680db1554c28fb380480ada5282fac8f0 /indoteknik_api
parentc631620706a24426faea6b43c2a0602eebf9a5e4 (diff)
parentdbe24b9cd600c7b5a9d0587f80a782ed93c9a761 (diff)
Merge branch 'production' into iman/telegram
# Conflicts: # indoteknik_custom/models/__init__.py # indoteknik_custom/models/stock_picking.py
Diffstat (limited to 'indoteknik_api')
-rw-r--r--indoteknik_api/controllers/api_v1/cart.py21
-rw-r--r--indoteknik_api/controllers/api_v1/partner.py6
-rw-r--r--indoteknik_api/controllers/api_v1/product.py16
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py10
-rw-r--r--indoteknik_api/controllers/api_v1/stock_picking.py36
-rw-r--r--indoteknik_api/controllers/api_v1/user.py4
-rw-r--r--indoteknik_api/models/product_product.py5
-rw-r--r--indoteknik_api/models/product_template.py6
-rw-r--r--indoteknik_api/models/res_users.py11
-rw-r--r--indoteknik_api/models/sale_order.py10
10 files changed, 108 insertions, 17 deletions
diff --git a/indoteknik_api/controllers/api_v1/cart.py b/indoteknik_api/controllers/api_v1/cart.py
index 2a24b205..7a40b1e2 100644
--- a/indoteknik_api/controllers/api_v1/cart.py
+++ b/indoteknik_api/controllers/api_v1/cart.py
@@ -46,8 +46,25 @@ class Cart(controller.Controller):
def get_cart_count_by_user_id(self, user_id, **kw):
user_id = int(user_id)
query = [('user_id', '=', user_id)]
- carts = request.env['website.user.cart'].search_count(query)
- return self.response(carts)
+ carts = request.env['website.user.cart'].search(query)
+ products_active = []
+ 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_active.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_active.append(programs)
+ return self.response(len(products_active))
@http.route(PREFIX_USER + 'cart/create-or-update', auth='public', methods=['POST', 'OPTIONS'], csrf=False)
@controller.Controller.must_authorized(private=True, private_key='user_id')
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py
index a7925a02..bbca471b 100644
--- a/indoteknik_api/controllers/api_v1/partner.py
+++ b/indoteknik_api/controllers/api_v1/partner.py
@@ -74,6 +74,9 @@ class Partner(controller.Controller):
'district_id': ['number', 'alias:kecamatan_id'],
'sub_district_id': ['number', 'alias:kelurahan_id', 'exclude_if_null'],
'zip': ['required'],
+ 'longtitude': [],
+ 'latitude': [],
+ 'address_map': [],
'alamat_lengkap_text': []
})
@@ -105,6 +108,9 @@ class Partner(controller.Controller):
'city_id': ['required', 'number', 'alias:kota_id'],
'district_id': ['number', 'alias:kecamatan_id'],
'sub_district_id': ['number', 'alias:kelurahan_id', 'exclude_if_null'],
+ 'longtitude': [],
+ 'latitude': [],
+ 'address_map': [],
'zip': ['required']
})
diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py
index e779e623..32362582 100644
--- a/indoteknik_api/controllers/api_v1/product.py
+++ b/indoteknik_api/controllers/api_v1/product.py
@@ -74,7 +74,6 @@ class Product(controller.Controller):
if qty_available > 0:
qty = qty_available + total_adem + total_excell
- sla_date = '1 Hari'
elif qty_altama > 0 or qty_vendor > 0:
qty = total_adem if qty_altama > 0 else total_excell
sla_date = '2-4 Hari'
@@ -97,6 +96,21 @@ class Product(controller.Controller):
return self.response(data, headers=[('Cache-Control', 'max-age=600, private')])
+ @http.route(prefix + 'product_variant/<id>/qty_available', auth='public', methods=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def get_product_variant_stock_available_by_id(self, **kw):
+ id = int(kw.get('id'))
+ product = request.env['product.product'].search(
+ [('id', '=', id)], limit=1)
+
+ qty_available = product.qty_free_bandengan
+
+ data = {
+ 'qty': qty_available,
+ }
+
+ return self.response(data, headers=[('Cache-Control', 'max-age=600, private')])
+
@http.route(prefix + 'product/template/price/<id>', auth='public', methods=['GET', 'OPTIONS'])
def get_product_template_price_by_id(self, **kw):
if not self.authenticate():
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index e7664c79..8b95ade8 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -150,7 +150,8 @@ class SaleOrder(controller.Controller):
def partner_checkout_sale_order_by_id(self, **kw):
params = self.get_request_params(kw, {
'partner_id': ['number'],
- 'id': ['number']
+ 'id': ['number'],
+ 'status': ['boolean']
})
if not params['valid']:
return self.response(code=400, description=params)
@@ -163,6 +164,9 @@ class SaleOrder(controller.Controller):
data = {}
sale_order = request.env['sale.order'].search(domain)
if sale_order:
+ if 'status' in params['value']:
+ sale_order.is_continue_transaction = params['value']['status']
+
if sale_order._requires_approval_margin_leader():
sale_order.approval_status = 'pengajuan2'
elif sale_order._requires_approval_margin_manager():
@@ -446,7 +450,8 @@ class SaleOrder(controller.Controller):
'company_id': 1,
'order_id': sale_order.id,
'product_id': cart['id'],
- 'product_uom_qty': cart['quantity']
+ 'product_uom_qty': cart['quantity'],
+ 'product_available_quantity': cart['available_quantity']
})
order_line.product_id_change()
order_line.onchange_vendor_id()
@@ -463,6 +468,7 @@ class SaleOrder(controller.Controller):
if len(promotions) > 0:
sale_order.apply_promotion_program()
+ sale_order.add_free_product(promotions)
voucher_code = params['value']['voucher']
voucher = request.env['voucher'].search([('code', '=', voucher_code),('apply_type', 'in', ['all', 'brand'])], limit=1)
diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py
index 8b941c16..110cde8a 100644
--- a/indoteknik_api/controllers/api_v1/stock_picking.py
+++ b/indoteknik_api/controllers/api_v1/stock_picking.py
@@ -1,6 +1,8 @@
from .. import controller
from odoo import http
from odoo.http import request
+from pytz import timezone
+from datetime import datetime
class StockPicking(controller.Controller):
@@ -30,7 +32,9 @@ class StockPicking(controller.Controller):
pending_domain = [('driver_departure_date', '=', False), ('driver_arrival_date', '=', False)]
shipment_domain = [('driver_departure_date', '!=', False), ('driver_arrival_date', '=', False)]
- completed_domain = [('driver_departure_date', '!=', False), ('driver_arrival_date', '!=', False)]
+ shipment_domain2 = [('driver_departure_date', '!=', False), ('sj_return_date', '=', False)]
+ completed_domain = [('driver_departure_date', '!=', False),'|', ('driver_arrival_date', '!=', False), ('sj_return_date', '!=', False)]
+ completed_domain2 = [('driver_departure_date', '!=', False), ('sj_return_date', '!=', False)]
picking_model = request.env['stock.picking']
domain = [
@@ -72,7 +76,7 @@ class StockPicking(controller.Controller):
'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,
+ 'delivered': picking.waybill_id.delivered or picking.driver_arrival_date != False or picking.sj_return_date != False,
'status': picking.shipping_status,
'carrier_name': picking.carrier_id.name or '',
'last_manifest': next(iter(manifests), None)
@@ -81,8 +85,8 @@ class StockPicking(controller.Controller):
return self.response({
'summary': {
'pending_count': picking_model.search_count(default_domain + pending_domain),
- 'shipment_count': picking_model.search_count(default_domain + shipment_domain),
- 'completed_count': picking_model.search_count(default_domain + completed_domain)
+ 'shipment_count': picking_model.search_count(default_domain + shipment_domain + shipment_domain2),
+ 'completed_count': picking_model.search_count(default_domain + completed_domain )
},
'picking_total': picking_model.search_count(domain),
'pickings': res_pickings
@@ -110,4 +114,26 @@ class StockPicking(controller.Controller):
if not picking:
return self.response(None)
- return self.response(picking.get_tracking_detail()) \ No newline at end of file
+ return self.response(picking.get_tracking_detail())
+
+ @http.route(prefix + 'stock-picking/<picking_code>/documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
+ @controller.Controller.must_authorized()
+ def write_partner_stock_picking_documentation(self, **kw):
+ picking_code = int(kw.get('picking_code', 0))
+ 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(),
+ }
+
+ picking_data = request.env['stock.picking'].search([('picking_code', '=', picking_code)], 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
+ }) \ No newline at end of file
diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py
index c7bfe91a..3be874fa 100644
--- a/indoteknik_api/controllers/api_v1/user.py
+++ b/indoteknik_api/controllers/api_v1/user.py
@@ -95,7 +95,7 @@ class User(controller.Controller):
user = request.env['res.users'].create(user_data)
user.partner_id.email = email
user.partner_id.customer_type = 'nonpkp'
- user.partner_id.npwp = '0.000.000.0-000.000'
+ user.partner_id.npwp = '00.000.000.0-000.000'
user.partner_id.sppkp = '-'
user.partner_id.nama_wajib_pajak = user.name
user.partner_id.user_id = 3222
@@ -248,7 +248,7 @@ class User(controller.Controller):
if type_acc == 'individu':
user.partner_id.customer_type = 'nonpkp'
- user.partner_id.npwp = '0.000.000.0-000.000'
+ user.partner_id.npwp = '00.000.000.0-000.000'
user.partner_id.sppkp = '-'
user.partner_id.nama_wajib_pajak = name
user.partner_id.user_id = 3222
diff --git a/indoteknik_api/models/product_product.py b/indoteknik_api/models/product_product.py
index 386ddb6a..f8869c7d 100644
--- a/indoteknik_api/models/product_product.py
+++ b/indoteknik_api/models/product_product.py
@@ -61,8 +61,9 @@ class ProductProduct(models.Model):
price_for = self.env.context.get('price_for', 'odoo')
pricelist = pricelist or self.env.context.get('user_pricelist')
default_price_tier = '1_v2'
-
- price_tier = pricelist.get_tier_level()
+ price_tier = []
+ if pricelist:
+ price_tier = pricelist.get_tier_level()
price_tier = price_tier if price_tier else default_price_tier
pricelist = self._get_pricelist_tier(price_tier)
diff --git a/indoteknik_api/models/product_template.py b/indoteknik_api/models/product_template.py
index 75899624..e46e44d3 100644
--- a/indoteknik_api/models/product_template.py
+++ b/indoteknik_api/models/product_template.py
@@ -7,6 +7,11 @@ class ProductTemplate(models.Model):
def api_single_response(self, product_template, with_detail=''):
product_pricelist_default_discount_id = self.env['ir.config_parameter'].get_param('product.pricelist.default_discount_id')
product_pricelist_default_discount_id = int(product_pricelist_default_discount_id)
+ voucher = self.get_voucher_pastihemat(product_template.x_manufacture.id)
+ newVoucherPastiHemat = {"min_purchase": voucher.min_purchase_amount or 0,
+ "discount_type": voucher.discount_type or '',
+ "discount_amount": voucher.discount_amount or 0,
+ "max_discount": voucher.max_discount_amount or 0,}
data = {
'id': product_template.id,
'image': self.env['ir.attachment'].api_image('product.template', 'image_128', product_template.id),
@@ -18,6 +23,7 @@ class ProductTemplate(models.Model):
'weight': product_template.weight,
'manufacture': self.api_manufacture(product_template),
'categories': self.api_categories(product_template),
+ "newVoucherPastiHemat": newVoucherPastiHemat
}
if with_detail != '':
diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py
index 534898e1..52a044dc 100644
--- a/indoteknik_api/models/res_users.py
+++ b/indoteknik_api/models/res_users.py
@@ -14,6 +14,9 @@ class ResUsers(models.Model):
'manager': 2,
'director': 3
}
+ partner_tempo = False
+ if main_partner:
+ partner_tempo = main_partner.get_check_tempo_partner()
data = {
'id': res_user.id,
@@ -32,7 +35,8 @@ class ResUsers(models.Model):
'feature': {
'so_approval': main_partner.use_so_approval,
'only_ready_stock': main_partner.use_only_ready_stock
- }
+ },
+ 'partner_tempo': partner_tempo
}
return data
@@ -48,7 +52,7 @@ class ResUsers(models.Model):
'street': user.street or '',
'street2': user.street2 or '',
'city': None,
- 'state_id': None,
+ 'state_id': 0,
'district': None,
'sub_district': None,
'zip': user.zip or '',
@@ -59,6 +63,9 @@ class ResUsers(models.Model):
'rajaongkir_city_id': user.kecamatan_id.rajaongkir_id or 0,
'alamat_wajib_pajak': user.alamat_lengkap_text or None,
'alamat_bisnis': user.street or None,
+ 'longtitude': user.longtitude or None,
+ 'latitude': user.latitude or None,
+ 'address_map': user.address_map or None,
}
if user.state_id:
diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py
index 725dbb4b..727379c5 100644
--- a/indoteknik_api/models/sale_order.py
+++ b/indoteknik_api/models/sale_order.py
@@ -33,12 +33,14 @@ class SaleOrder(models.Model):
'id': picking.id,
'name': picking.name,
'tracking_number': picking.delivery_tracking_no or '',
- 'delivered': picking.waybill_id.delivered or picking.driver_arrival_date != False,
+ 'delivered': picking.waybill_id.delivered or picking.driver_arrival_date != False or picking.sj_return_date != False,
})
if sale_order.state == 'cancel':
data['status'] = 'cancel'
if sale_order.state in ['draft', 'sent']:
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':
@@ -84,6 +86,12 @@ class SaleOrder(models.Model):
'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)
for invoice in sale_order.invoice_ids:
if invoice.state == 'posted':