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) @controller.Controller.must_authorized() def create_lead(self, **kw): params = self.get_request_params(kw, { "name": ["required"], "contact_name": [], "email_from": [], "phone": [], "file_npwp": [], "file_nib": [], "file_tdp": [], "file_siup": [], "file_quotation": [], "description": [] }) if not params['valid']: return self.response(code=400, description=params) params['value']['user_id'] = 20 lead = request.env['crm.lead'].create(params['value']) return self.response(True) @http.route('/api/v1/merchant/', 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/', 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/', 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')