summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/api_v1
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-09-24 09:03:52 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-09-24 09:03:52 +0700
commitcc4be72fc2f0d98f8bc2190ea5c404536bb3c56d (patch)
treea00f22741ba1ec63b59659834a9c6177b20db343 /indoteknik_api/controllers/api_v1
parent1f9d0136758531831ea6c7a90556c9a472ed8d40 (diff)
parent649f3037e4357dab42d1a8d799e5f2a2f1fd2e52 (diff)
Merge branch 'production' into unreserved_permission
# Conflicts: # indoteknik_custom/models/sale_order.py
Diffstat (limited to 'indoteknik_api/controllers/api_v1')
-rw-r--r--indoteknik_api/controllers/api_v1/cart.py2
-rw-r--r--indoteknik_api/controllers/api_v1/partner.py48
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py11
-rw-r--r--indoteknik_api/controllers/api_v1/user.py256
4 files changed, 299 insertions, 18 deletions
diff --git a/indoteknik_api/controllers/api_v1/cart.py b/indoteknik_api/controllers/api_v1/cart.py
index 6bbb812c..2a24b205 100644
--- a/indoteknik_api/controllers/api_v1/cart.py
+++ b/indoteknik_api/controllers/api_v1/cart.py
@@ -16,7 +16,7 @@ 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:
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py
index 69a2f861..663f4d7d 100644
--- a/indoteknik_api/controllers/api_v1/partner.py
+++ b/indoteknik_api/controllers/api_v1/partner.py
@@ -66,6 +66,7 @@ class Partner(controller.Controller):
'name': ['required'],
'email': ['required'],
'mobile': ['required'],
+ 'phone': [''],
'street': ['required'],
'city_id': ['required', 'number', 'alias:kota_id'],
'district_id': ['number', 'alias:kecamatan_id'],
@@ -95,6 +96,7 @@ class Partner(controller.Controller):
'name': ['required'],
'email': ['required'],
'mobile': ['required'],
+ 'phone': [''],
'street': ['required'],
'city_id': ['required', 'number', 'alias:kota_id'],
'district_id': ['number', 'alias:kecamatan_id'],
@@ -121,16 +123,30 @@ class Partner(controller.Controller):
'industry_id': ['number'],
'tax_name': ['alias:nama_wajib_pajak'],
'npwp': [],
+ 'alamat_lengkap_text': [],
+ 'street': [],
+ })
+ id_user = self.get_request_params(kw, {
+ 'id_user': ['number']
+ })
+ params_user = self.get_request_params(kw, {
+ 'company_type_id': ['number'],
+ 'industry_id': ['number'],
+ 'tax_name': ['alias:nama_wajib_pajak'],
+ 'npwp': [],
+ 'alamat_lengkap_text': [],
})
if not params['valid']:
return self.response(code=400, description=params)
-
+
partner = request.env[self._name].search([('id', '=', params['value']['id'])], limit=1)
+ user = request.env[self._name].search([('id', '=', id_user['value']['id_user'])], limit=1)
if not partner:
return self.response(code=404, description='User not found')
-
+
partner.write(params['value'])
+ user.write(params_user['value'])
return self.response({
'id': partner.id
@@ -164,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 e8d18366..e7664c79 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -388,6 +388,9 @@ class SaleOrder(controller.Controller):
if not params['valid']:
return self.response(code=400, description=params)
+ # Fetch partner details
+ sales_partner = request.env['res.partner'].browse(params['value']['partner_id'])
+
parameters = {
'warehouse_id': 8,
'carrier_id': 1,
@@ -415,9 +418,11 @@ class SaleOrder(controller.Controller):
'delivery_service_type': params['value']['delivery_service_type'],
'flash_sale': params['value']['flash_sale'],
'note_website': params['value']['note_website'],
- 'customer_type': 'nonpkp',
- 'npwp': '0',
- 'user_id': 3222 # User ID: Nadia Rauhadatul Firdaus
+ 'customer_type': sales_partner.customer_type if sales_partner else 'nonpkp', # Get Customer Type from partner
+ 'npwp': sales_partner.npwp or '0', # Get NPWP from partner
+ 'sppkp': sales_partner.sppkp, # Get SPPKP from partner
+ 'email': sales_partner.email, # Get Email from partner
+ 'user_id': 3222 # User ID: Nadia Rauhadatul Firdaus
}
sales_partner = request.env['res.partner'].browse(parameters['partner_id'])
diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py
index b9fd9f56..7166bd79 100644
--- a/indoteknik_api/controllers/api_v1/user.py
+++ b/indoteknik_api/controllers/api_v1/user.py
@@ -9,6 +9,8 @@ import string
import requests
import json
from difflib import SequenceMatcher
+import mimetypes
+import base64
class User(controller.Controller):
@@ -104,12 +106,28 @@ class User(controller.Controller):
name = kw.get('name')
email = kw.get('email')
password = kw.get('password')
- if not name or not email or not password:
- return self.response(code=400, description='email, name and password is required')
-
- company = kw.get('company', False)
phone = kw.get('phone')
+ # Form Data
+ npwp = kw.get('npwp')
+ npwp_document = kw.get('npwp_document', False)
+ npwp_filename = kw.get('npwp_filename', 'npwp_document')
+ sppkp = kw.get('sppkp', False)
+ sppkp_document = kw.get('sppkp_document', False)
+ sppkp_filename = kw.get('sppkp_filename', 'sppkp_document')
+ email_partner = kw.get('email_partner')
+ business_name = kw.get('business_name', False)
+ industry_id = int(kw.get('industry_id', '0') or 0)
+ company_type_id = int(kw.get('company_type_id', '0') or 0)
+ alamat_wajib_pajak = kw.get('alamat_wajib_pajak', False)
+ alamat_bisnis = kw.get('alamat_bisnis', False)
+ nama_wajib_pajak = kw.get('nama_wajib_pajak', False)
+ is_pkp = kw.get('is_pkp')
+ type_acc = kw.get('type_acc', False)
+
+ if not name or not email or not password:
+ return self.response(code=400, description='email, name, and password are required')
+
response = {
'register': False,
'reason': None
@@ -125,10 +143,11 @@ class User(controller.Controller):
return self.response(response)
+ # Create user data
user_data = {
'name': name,
'login': email,
- 'phone': phone,
+ 'mobile': phone,
'password': password,
'active': False,
'sel_groups_1_9_10': 9
@@ -136,27 +155,91 @@ class User(controller.Controller):
user = request.env['res.users'].create(user_data)
user.partner_id.email = email
+ user.partner_id.mobile = phone
- if company:
+ if type_acc == 'business':
parameter = [
('company_type', '=', 'company'),
- ('name', 'ilike', company)
+ ('name', 'ilike', business_name)
]
match_company = request.env['res.partner'].search(parameter, limit=1)
match_ratio = 0
if match_company:
- match_ratio = SequenceMatcher(None, match_company.name, company).ratio()
+ match_ratio = SequenceMatcher(None, match_company.name, business_name).ratio()
if match_ratio > 0.8:
+ # Create a user company request
request.env['user.company.request'].create({
'user_id': user.partner_id.id,
'user_company_id': match_company.id,
- 'user_input': company
+ 'user_input': business_name
})
else:
- new_company = request.env['res.partner'].create({
- 'name': company
+ if not nama_wajib_pajak and is_pkp == 'false':
+ nama_wajib_pajak = business_name
+
+ if not alamat_wajib_pajak and is_pkp == 'false':
+ alamat_wajib_pajak = alamat_bisnis
+
+ new_company_data = {
+ 'name': business_name if business_name else business_name,
+ 'company_type_id': company_type_id if company_type_id else False,
+ 'industry_id': industry_id,
+ 'customer_type': 'pkp' if is_pkp == 'true' else 'nonpkp',
+ 'npwp': npwp if is_pkp == 'true' else (npwp if npwp else '00.000.000.0-000.000'),
+ 'sppkp': sppkp if is_pkp == 'true' else (sppkp if sppkp else '-'),
+ 'nama_wajib_pajak': nama_wajib_pajak,
+ 'alamat_lengkap_text': alamat_wajib_pajak,
+ 'email': email_partner,
+ 'street': alamat_bisnis,
+ 'company_type': 'company',
+ 'user_id': 3222,
+ 'property_account_receivable_id': 395,
+ 'property_account_payable_id': 438,
+ 'active': False,
+ }
+ new_company = request.env['res.partner'].create(new_company_data)
+ request.env['user.company.request'].create({
+ 'user_id': user.partner_id.id,
+ 'user_company_id': new_company.id,
+ 'user_input': business_name
})
- user.parent_id = new_company.id
+
+ if npwp_document:
+ npwp_mimetype, _ = mimetypes.guess_type(npwp_filename)
+ npwp_mimetype = npwp_mimetype or 'application/octet-stream'
+ pdf_data = base64.b64decode(npwp_document)
+ npwp_attachment = request.env['ir.attachment'].create({
+ 'name': 'NPWP Document',
+ 'type': 'binary',
+ 'datas': base64.b64encode(pdf_data),
+ 'res_model': 'res.partner',
+ 'res_id': new_company.id,
+ 'mimetype': npwp_mimetype
+ })
+ new_company.message_post(body="NPWP Uploaded", attachment_ids=[npwp_attachment.id])
+
+ if sppkp_document:
+ sppkp_mimetype, _ = mimetypes.guess_type(sppkp_filename)
+ sppkp_mimetype = sppkp_mimetype or 'application/octet-stream'
+ pdf_data = base64.b64decode(sppkp_document)
+ sppkp_attachment = request.env['ir.attachment'].create({
+ 'name': 'SPPKP Document',
+ 'type': 'binary',
+ 'datas': base64.b64encode(pdf_data),
+ 'res_model': 'res.partner',
+ 'res_id': new_company.id,
+ 'mimetype': sppkp_mimetype
+ })
+ new_company.message_post(body="SPPKP Uploaded", attachment_ids=[sppkp_attachment.id])
+
+ if type_acc == 'individu':
+ user.partner_id.customer_type = 'nonpkp'
+ user.partner_id.npwp = '0.000.000.0-000.000'
+ user.partner_id.sppkp = '-'
+ user.partner_id.nama_wajib_pajak = name
+ user.partner_id.user_id = 3222
+ user.partner_id.property_account_receivable_id= 395
+ user.partner_id.property_account_payable_id = 438
user.send_activation_mail()
@@ -239,6 +322,14 @@ class User(controller.Controller):
'activation': True,
'user': self.response_with_token(user)
})
+ parameter = [
+ ('user_id', '=', user.partner_id.id)
+ ]
+ company_request = request.env['user.company.request'].search(parameter, limit=1)
+ if company_request:
+ user.parent_name = company_request.user_input
+ if company_request.is_approve == False:
+ user.send_company_request_mail()
return self.response(response)
@http.route(prefix + 'user/forgot-password', auth='public', methods=['POST'], csrf=False)
@@ -314,3 +405,144 @@ class User(controller.Controller):
x) for x in partners]
return self.response(address)
+
+ @http.route(prefix + 'user/<id>/switch', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
+ @controller.Controller.must_authorized()
+ def switch_account(self, **kw):
+ id = kw.get('id')
+ user = request.env['res.users'].search([('id', '=', id)], limit=1)
+
+ response = {
+ 'switch': False,
+ 'reason': None
+ }
+
+ # Form Data
+ npwp = kw.get('npwp')
+ npwp_document = kw.get('npwp_document', False)
+ npwp_filename = kw.get('npwp_filename', 'npwp_document')
+ sppkp = kw.get('sppkp', False)
+ sppkp_document = kw.get('sppkp_document', False)
+ sppkp_filename = kw.get('sppkp_filename', 'sppkp_document')
+ email_partner = kw.get('email_partner')
+ business_name = kw.get('business_name', False)
+ industry_id = int(kw.get('industry_id', '0') or 0)
+ company_type_id = int(kw.get('company_type_id', '0') or 0)
+ alamat_wajib_pajak = kw.get('alamat_wajib_pajak', False)
+ alamat_bisnis = kw.get('alamat_bisnis', False)
+ nama_wajib_pajak = kw.get('nama_wajib_pajak', False)
+ is_pkp = kw.get('is_pkp')
+ type_acc = kw.get('type_acc', False)
+
+
+ response = {
+ 'switch': False,
+ 'reason': None
+ }
+
+ if type_acc == 'business':
+ parameter = [
+ ('company_type', '=', 'company'),
+ ('name', 'ilike', business_name)
+ ]
+ match_company = request.env['res.partner'].search(parameter, limit=1)
+ match_ratio = 0
+ if match_company:
+ match_ratio = SequenceMatcher(None, match_company.name, business_name).ratio()
+ if match_ratio > 0.8:
+ # Create a user company request
+ request.env['user.company.request'].create({
+ 'user_id': user.partner_id.id,
+ 'user_company_id': match_company.id,
+ 'user_input': business_name
+ })
+ else:
+ if not nama_wajib_pajak and is_pkp == 'false':
+ nama_wajib_pajak = business_name
+
+ if not alamat_wajib_pajak and is_pkp == 'false':
+ alamat_wajib_pajak = alamat_bisnis
+
+ new_company_data = {
+ 'name': business_name if business_name else business_name,
+ 'company_type_id': company_type_id if company_type_id else False,
+ 'industry_id': industry_id,
+ 'customer_type': 'pkp' if is_pkp == 'true' else 'nonpkp',
+ 'npwp': npwp if is_pkp == 'true' else (npwp if npwp else '00.000.000.0-000.000'),
+ 'sppkp': sppkp if is_pkp == 'true' else (sppkp if sppkp else '-'),
+ 'nama_wajib_pajak': nama_wajib_pajak,
+ 'alamat_lengkap_text': alamat_wajib_pajak,
+ 'email': email_partner,
+ 'street': alamat_bisnis,
+ 'company_type': 'company',
+ 'user_id': 3222,
+ 'property_account_receivable_id': 395,
+ 'property_account_payable_id': 438,
+ 'active': False,
+ }
+ new_company = request.env['res.partner'].create(new_company_data)
+ request.env['user.company.request'].create({
+ 'user_id': user.partner_id.id,
+ 'user_company_id': new_company.id,
+ 'user_input': business_name
+ })
+ # user.partner_id.parent_id = new_company.id
+ # user.partner_id.customer_type = new_company.customer_type
+ # user.partner_id.npwp = new_company.npwp
+ # user.partner_id.sppkp = new_company.sppkp
+ # user.partner_id.nama_wajib_pajak = new_company.nama_wajib_pajak
+ # user.partner_id.alamat_lengkap_text = new_company.alamat_lengkap_text
+
+ if npwp_document:
+ npwp_mimetype, _ = mimetypes.guess_type(npwp_filename)
+ npwp_mimetype = npwp_mimetype or 'application/octet-stream'
+ pdf_data = base64.b64decode(npwp_document)
+ npwp_attachment = request.env['ir.attachment'].create({
+ 'name': 'NPWP Document',
+ 'type': 'binary',
+ 'datas': base64.b64encode(pdf_data),
+ 'res_model': 'res.partner',
+ 'res_id': new_company.id,
+ 'mimetype': npwp_mimetype
+ })
+ new_company.message_post(body="NPWP Uploaded", attachment_ids=[npwp_attachment.id])
+
+ if sppkp_document:
+ sppkp_mimetype, _ = mimetypes.guess_type(sppkp_filename)
+ sppkp_mimetype = sppkp_mimetype or 'application/octet-stream'
+ pdf_data = base64.b64decode(sppkp_document)
+ sppkp_attachment = request.env['ir.attachment'].create({
+ 'name': 'SPPKP Document',
+ 'type': 'binary',
+ 'datas': base64.b64encode(pdf_data),
+ 'res_model': 'res.partner',
+ 'res_id': new_company.id,
+ 'mimetype': sppkp_mimetype
+ })
+ new_company.message_post(body="SPPKP Uploaded", attachment_ids=[sppkp_attachment.id])
+
+ response['switch'] = 'Pending'
+ return self.response(response)
+
+ @http.route(prefix + 'user/<id>/switch_progres', auth='public', methods=['GET', 'OPTIONS'], csrf=False)
+ # @controller.Controller.must_authorized()
+ def switch_account_progres(self, **kw):
+ id = int(kw.get('id'))
+ user = request.env['res.users'].search([('id', '=', id)], limit=1)
+ response = {
+ 'status': ''
+ }
+ parameter = [
+ ('user_id', '=', id)
+ ]
+ new_company_request = request.env['user.company.request'].search(parameter, limit=1)
+ is_approve = ''
+ if new_company_request:
+ # Mengambil nilai is_approve
+ if new_company_request.is_approve == False:
+ response['status'] = 'pending'
+ else:
+ response['status'] = new_company_request.is_approve
+ else:
+ response['status'] = 'unknown'
+ return self.response(response) \ No newline at end of file