summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2025-05-23 09:22:27 +0700
committerit-fixcomart <it@fixcomart.co.id>2025-05-23 09:22:27 +0700
commitf6f59e660af6c4229ada54f7313d68867df1ba15 (patch)
tree9a27b4e0e6571c639ba173df5ae25a2e7014aefd /indoteknik_api/controllers
parent68378dd2fb8d61b282a672ca0f09033d15d82283 (diff)
parent558130bbf48c33ddfa6080450c80bc8801a570f0 (diff)
Merge branch 'CR/form-merchant' into odoo-backup
# Conflicts: # indoteknik_custom/models/sale_order.py # indoteknik_custom/views/sale_order.xml
Diffstat (limited to 'indoteknik_api/controllers')
-rw-r--r--indoteknik_api/controllers/api_v1/lead.py207
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py24
-rw-r--r--indoteknik_api/controllers/api_v1/user.py4
3 files changed, 233 insertions, 2 deletions
diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py
index d5cc7c5c..389f36b8 100644
--- a/indoteknik_api/controllers/api_v1/lead.py
+++ b/indoteknik_api/controllers/api_v1/lead.py
@@ -1,6 +1,9 @@
from .. import controller
from odoo import http
from odoo.http import request
+import base64
+import mimetypes
+import json
class Lead(controller.Controller):
@http.route('/api/v1/lead', auth='public', methods=['POST', 'OPTIONS'], csrf=False)
@@ -26,4 +29,206 @@ class Lead(controller.Controller):
lead = request.env['crm.lead'].create(params['value'])
- return self.response(True) \ No newline at end of file
+ return self.response(True)
+
+ @http.route('/api/v1/merchant/<id>', auth='public', methods=['POST', 'OPTIONS'], csrf=False)
+ @controller.Controller.must_authorized()
+ def create_merchant(self, **kw):
+ merchant_request = True if kw.get('merchant_request') == 'true' else False
+ params = self.get_request_params(kw, {
+ # informasi perusahaan
+ "name_merchant": [],
+ "pejabat_name": [],
+ "pic_merchant": [],
+ "pic_position": [],
+ "address": [],
+ "state": ['number'],
+ "city": ['number'],
+ "district": ['number'],
+ "subDistrict": ['number'],
+ "zip": [],
+ "bank_name": [],
+ "rekening_name": [],
+ "account_number": [],
+ "email_company": [],
+ "email_sales": [],
+ "email_finance": [],
+ "phone": [],
+ "mobile": [],
+ "bisnis_type": [],
+ "category_perusahaan": [],
+ "website": [],
+ "description": [],
+
+ # informasi vendor
+ "harga_tayang": [],
+ "merk_dagang": [],
+ "tempo_duration": [],
+ "kredit_limit": [],
+ "is_pengajuan_tempo": [],
+ "waktu_pengiriman": [],
+ "terhitung_sejak": [],
+
+ # Syarat Perdagangan
+ "is_kembali_barang": [],
+ "tempo_garansi": [],
+ "is_order_quantity": [],
+ "explain_garansi": [],
+ "custom_sertifikat_produk": [],
+
+ # # dokumen
+
+ "file_npwp": [],
+ "file_sppkp": [],
+ "file_dokumenKtpDirut ": [],
+ "file_kartuNama": [],
+ "file_suratPernyataan": [],
+ "file_fotoKantor": [],
+ # "file_dataProduk": [],
+ # "file_pricelist": [],
+ })
+ partner_id = int(kw.get('id'))
+ partner = request.env['res.partner'].search([('id', '=', partner_id)], limit=1)
+ main_partner = partner.get_main_parent()
+
+ if params['value']['is_pengajuan_tempo']:
+ if params['value']['is_pengajuan_tempo'] == 'ada':
+ params['value']['is_pengajuan_tempo'] = True
+ else:
+ params['value']['is_pengajuan_tempo'] = False
+
+ if params['value']['is_kembali_barang']:
+ if params['value']['is_kembali_barang'] == 'ya':
+ params['value']['is_kembali_barang'] = kw.get('textReturn')
+ else:
+ params['value']['is_kembali_barang'] = 'Tidak dapat direturn'
+
+ if kw.get('tenggat_waktu'):
+ if kw.get('tenggat_waktu') != 'custom':
+ params['value']['tenggat_waktu'] = kw.get('tenggat_waktu') + ' hari sejak data dikirimkan'
+ else:
+ params['value']['tenggat_waktu'] = kw.get('custom_tenggat_waktu')
+
+ if params['value']['is_order_quantity']:
+ if params['value']['is_order_quantity'] == 'ya':
+ params['value']['is_order_quantity'] = kw.get('minimum_pembelian')
+ else:
+ params['value']['is_order_quantity'] = 'Tidak ada minimum order quantity'
+
+ filtered_params = {key: value for key, value in params['value'].items() if kw.get(key) is not None}
+ form_merchant = request.env['user.form.merchant'].search([('partner_id', '=', main_partner.id)], limit=1)
+ lead = []
+ if form_merchant:
+ form_merchant.write(filtered_params)
+ else:
+ lead = request.env['user.form.merchant'].create(filtered_params)
+ lead.partner_id = main_partner.id
+
+ sertifikat = [
+ 'TKDN',
+ 'SNI',
+ 'K3L',
+ ]
+ sertifikat_ids = kw.get('sertifikat_produk')
+ sertifikat_input = kw.get('custom_sertifikat_produk')
+ dokumen_sertifikat = []
+
+ if sertifikat_ids:
+ dokumen_kirim_ids = list(map(int, sertifikat_ids.split(',')))
+ dokumen_sertifikat = [sertifikat[i] for i in dokumen_kirim_ids if 0 <= i < len(sertifikat)]
+ if sertifikat_input != 'false' and sertifikat_input:
+ input_items = [item.strip() for item in sertifikat_input.split(',')]
+ dokumen_sertifikat.extend(item for item in input_items if item and item not in dokumen_sertifikat)
+ form_merchant.sertifikat_produk = sertifikat_input
+ else:
+ # Jika sertifikat_input kosong, hapus elemen custom (yang tidak ada di daftar `sertifikat`)
+ dokumen_sertifikat = [item for item in dokumen_sertifikat if item in sertifikat]
+ if dokumen_sertifikat:
+ form_merchant.sertifikat_produk = ', '.join(dokumen_sertifikat)
+
+ category_ids = ''
+ category_produk_ids = kw.get('categoryProduk', False)
+ if category_produk_ids:
+ category_ids = list(map(int, category_produk_ids.split(',')))
+ valid_category_ids = request.env['product.public.category'].search([('id', 'in', category_ids)]).ids
+ form_merchant.category_produk_ids = [(6, 0, valid_category_ids)]
+
+ file_dokumen = kw.get('file_dokumen', False)
+ if file_dokumen:
+ form_dokumen = json.loads(file_dokumen)
+
+ for dokumen in form_dokumen:
+ if form_dokumen[dokumen]['details']:
+ mimetype, _ = mimetypes.guess_type(form_dokumen[dokumen]['details']['name'])
+ mimetype = mimetype or 'application/octet-stream'
+ data = base64.b64decode(form_dokumen[dokumen]['details']['format'])
+ sppkp_attachment = request.env['ir.attachment'].create({
+ 'name': form_dokumen[dokumen]['details']['name'],
+ 'type': 'binary',
+ 'datas': base64.b64encode(data),
+ 'res_model': 'user.form.merchant',
+ 'res_id': form_merchant.id,
+ 'mimetype': mimetype
+ })
+
+ if dokumen == 'file_npwp':
+ form_merchant.file_npwp = sppkp_attachment.id
+
+ elif dokumen == 'file_sppkp':
+ form_merchant.file_sppkp = sppkp_attachment.id
+
+ elif dokumen == 'file_dokumenKtpDirut':
+ form_merchant.file_dokumenKtpDirut = sppkp_attachment.id
+
+ elif dokumen == 'file_kartuNama':
+ form_merchant.file_kartuNama = sppkp_attachment.id
+
+ elif dokumen == 'file_suratPernyataan':
+ form_merchant.file_suratPernyataan = sppkp_attachment.id
+
+ elif dokumen == 'file_fotoKantor':
+ form_merchant.file_fotoKantor = sppkp_attachment.id
+
+ elif dokumen == 'file_dataProduk':
+ form_merchant.file_dataProduk = sppkp_attachment.id
+
+ elif dokumen == 'file_pricelist':
+ form_merchant.file_pricelist = sppkp_attachment.id
+ if not params['valid']:
+ return self.response(code=400, description=params)
+ if merchant_request:
+ user_merchant_request = request.env['user.merchant.request'].create({
+ 'user_id': partner.id,
+ 'merchant_id': form_merchant.id,
+ 'user_company_id': main_partner.id
+ })
+
+ return self.response(True)
+
+ @http.route('/api/v1/detail-merchant/<id>', auth='public', methods=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def get_partner_detail_merchant(self, **kw):
+ params = self.get_request_params(kw, {
+ 'id': ['required', 'number']
+ })
+ partner = request.env['res.partner'].search([('id', '=', params['value']['id'])], limit=1)
+ main_partner = partner.get_main_parent()
+ form_merchant = request.env['user.form.merchant'].search([('partner_id', '=', main_partner.id)],limit=1)
+ if not form_merchant:
+ return self.response(code=404, description='form merchant not found')
+ form_merchant = request.env['res.partner'].api_single_response_merchant(form_merchant)
+ return self.response(form_merchant)
+
+ @http.route('/api/v1/check-merchant/<id>', auth='public', methods=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def get_partner_form_merchant(self, **kw):
+ params = self.get_request_params(kw, {
+ 'id': ['required', 'number']
+ })
+ partner = request.env['res.partner'].search([('id', '=', params['value']['id'])], limit=1)
+ main_partner = partner.get_main_parent()
+ form_merchant = request.env['user.merchant.request'].search([('user_company_id', '=', main_partner.id)], limit=1)
+ if form_merchant:
+ return self.response(form_merchant.state_merchant)
+ else:
+ return self.response(code=404, description='form merchant not found') \ No newline at end of file
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index 98b13cad..d5208fb1 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -54,6 +54,20 @@ class SaleOrder(controller.Controller):
# sales = request.env['sale.order'].search_read([('name', '=', sale_number)], fields=['id', 'name', 'amount_total', 'state'])
sales = request.env['sale.order'].search(query, limit=1)
data = []
+ INDONESIAN_MONTHS = {
+ 1: 'Januari',
+ 2: 'Februari',
+ 3: 'Maret',
+ 4: 'April',
+ 5: 'Mei',
+ 6: 'Juni',
+ 7: 'Juli',
+ 8: 'Agustus',
+ 9: 'September',
+ 10: 'Oktober',
+ 11: 'November',
+ 12: 'Desember',
+ }
for sale in sales:
product_name = ''
product_not_in_id = 0
@@ -65,6 +79,7 @@ class SaleOrder(controller.Controller):
'id': sale.id,
'name': sale.name,
'date_order': self.time_to_str(sale.date_order, '%d/%m/%Y %H:%M:%S'),
+ '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}",
'state': sale.state,
'amount_untaxed': sale.amount_untaxed,
'amount_tax': sale.amount_tax,
@@ -142,6 +157,15 @@ class SaleOrder(controller.Controller):
sale_order = request.env['sale.order'].search(domain)
if sale_order:
data = request.env['sale.order'].api_v1_single_response(sale_order, context='with_detail')
+ if sale_order.expected_ready_to_ship:
+ bulan_id = [
+ "Januari", "Februari", "Maret", "April", "Mei", "Juni",
+ "Juli", "Agustus", "September", "Oktober", "November", "Desember"
+ ]
+ tanggal = sale_order.expected_ready_to_ship.day
+ 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}"
return self.response(data)
diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py
index b5b7e055..967bbcc9 100644
--- a/indoteknik_api/controllers/api_v1/user.py
+++ b/indoteknik_api/controllers/api_v1/user.py
@@ -60,7 +60,9 @@ class User(controller.Controller):
'user': self.response_with_token(user),
}
return self.response(data)
- except:
+ except Exception as e:
+ respon = str(e)
+ print(respon)
return self.response({
'is_auth': False,
'reason': 'NOT_FOUND'