From a6acc141629f358f885f62e395986131c1ec1909 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 27 Dec 2024 11:44:21 +0700 Subject: update merchant --- indoteknik_api/controllers/api_v1/lead.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index d5cc7c5c..6ca9d419 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -26,4 +26,29 @@ class Lead(controller.Controller): 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): + 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) \ No newline at end of file -- cgit v1.2.3 From efe91d5ed3170b1d8e2dc217a05261dfbd9687d5 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 27 Dec 2024 14:58:24 +0700 Subject: update mechant --- indoteknik_api/controllers/api_v1/lead.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index 6ca9d419..f0cfa1be 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -33,14 +33,26 @@ class Lead(controller.Controller): def create_merchant(self, **kw): params = self.get_request_params(kw, { "name": ["required"], - "contact_name": [], - "email_from": [], + "address": [], + "state": [], + "city": [], + "district": [], + "subDistrict": [], + "zip": [], + "bank_name": [], + "rekening_name": [], + "account_number": [], + "email_company": [], + "email_sales": [], + "email_finnance": [], "phone": [], + "mobile": [], + "file_dokumenKtpDirut ": [], + "file_kartuNama": [], "file_npwp": [], - "file_nib": [], - "file_tdp": [], - "file_siup": [], - "file_quotation": [], + "file_sppkp": [], + "file_suratPernyataan": [], + "file_fotoKantor": [], "description": [] }) -- cgit v1.2.3 From 7d5204a92422848f617af2d0e50d7069bf9f7824 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 30 Dec 2024 14:09:50 +0700 Subject: add form merchant --- indoteknik_api/controllers/api_v1/lead.py | 22 +++-- indoteknik_custom/__manifest__.py | 2 + indoteknik_custom/models/__init__.py | 2 + indoteknik_custom/models/res_partner.py | 76 ++++++++++++++- indoteknik_custom/models/user_form_merchant.py | 42 ++++++++ indoteknik_custom/models/user_merchant_request.py | 96 +++++++++++++++++++ indoteknik_custom/security/ir.model.access.csv | 4 + indoteknik_custom/views/res_partner.xml | 38 ++++++++ indoteknik_custom/views/user_form_merchant.xml | 77 +++++++++++++++ indoteknik_custom/views/user_merchant_request.xml | 112 ++++++++++++++++++++++ 10 files changed, 464 insertions(+), 7 deletions(-) create mode 100644 indoteknik_custom/models/user_form_merchant.py create mode 100644 indoteknik_custom/models/user_merchant_request.py create mode 100644 indoteknik_custom/views/user_form_merchant.xml create mode 100644 indoteknik_custom/views/user_merchant_request.xml diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index f0cfa1be..7a964b21 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -32,7 +32,7 @@ class Lead(controller.Controller): @controller.Controller.must_authorized() def create_merchant(self, **kw): params = self.get_request_params(kw, { - "name": ["required"], + "name_merchant": ["required"], "address": [], "state": [], "city": [], @@ -44,7 +44,7 @@ class Lead(controller.Controller): "account_number": [], "email_company": [], "email_sales": [], - "email_finnance": [], + "email_finance": [], "phone": [], "mobile": [], "file_dokumenKtpDirut ": [], @@ -53,14 +53,24 @@ class Lead(controller.Controller): "file_sppkp": [], "file_suratPernyataan": [], "file_fotoKantor": [], - "description": [] + "description": [], }) + filtered_params = {key: value for key, value in params['value'].items() if value} + lead = request.env['user.form.merchant'].create(filtered_params) + + partner_id = int(kw.get('partner_id')) + + partner = request.env['res.partner'].search([('id', '=', partner_id)], limit=1) if not params['valid']: return self.response(code=400, description=params) - # params['value']['user_id'] = 20 + main_partner = partner.get_main_parent() - # lead = request.env['crm.lead'].create(params['value']) + user_merchant_request = request.env['user.merchant.request'].create({ + 'user_id': partner.id, + 'merchant_id': lead.id, + 'user_company_id': main_partner.id + }) - return self.response(True) \ No newline at end of file + return self.response(True) diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index 89f62524..b0f29747 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -30,6 +30,8 @@ 'views/web_logging/user_activity_log.xml', 'views/web_logging/web_utm_source.xml', 'views/user_company_request.xml', + 'views/user_form_merchant.xml', + 'views/user_merchant_request.xml', 'views/vit_kelurahan.xml', 'views/vit_kecamatan.xml', 'views/vit_kota.xml', diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index ad6d75dd..25f56052 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -134,3 +134,5 @@ from . import find_page from . import approval_retur_picking from . import va_multi_approve from . import va_multi_reject +from . import user_form_merchant +from . import user_merchant_request diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index da4a6cb6..79962c2b 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -75,6 +75,30 @@ class ResPartner(models.Model): "Set its value to 0.00 to disable " "this feature", tracking=3) + # MERCHANT + name_merchant = fields.Char(string='Name') + address_merchant = fields.Char(string='Alamat') + state_merchant = fields.Many2one('res.country.state', string='State') + city_merchant = fields.Many2one('vit.kota', string='Kota') + district_merchant = fields.Many2one('vit.kecamatan', string='Kecamatan') + subDistrict_merchant = fields.Many2one('vit.kelurahan', string='Kelurahan') + zip_merchant = fields.Char(string='Kode Pos') + bank_name_merchant = fields.Char(string='Nama Bank') + rekening_name_merchant = fields.Char(string='Nama Rekening') + account_number_merchant = fields.Char(string='Nomor Rekening Bank') + email_company_merchant = fields.Char(string='Email Perusahaan') + email_sales_merchant = fields.Char(string='Email Sales') + email_finance_merchant = fields.Char(string='Email Finance') + phone_merchant = fields.Char(string='No. Telepon Perusahaan') + mobile_merchant = fields.Char(string='No. Handphone') + file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") + file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") + file_npwp = fields.Binary(string="NPWP", tracking=True, track_visibility="onchange") + file_sppkp = fields.Binary(string="SPPKP", tracking=True, track_visibility="onchange") + file_suratPernyataan = fields.Binary(string="Surat Pernyataan Nomor Rekening", tracking=True, track_visibility="onchange") + file_fotoKantor = fields.Binary(string="Foto Gudang / Kantor Bagian Depan", tracking=True, track_visibility="onchange") + description = fields.Text(string='Deskripsi') + @api.model def _default_payment_term(self): return self.env.ref('__export__.account_payment_term_26_484409e2').id @@ -136,6 +160,31 @@ class ResPartner(models.Model): vals['company_type_id'] = vals.get('company_type_id', self.company_type_id.id if self.company_type_id else None) + # Merchant + vals['name_merchant'] = vals.get('name_merchant', self.name_merchant) + vals['address_merchant'] = vals.get('address_merchant', self.address_merchant) + vals['state_merchant'] = vals.get('state_merchant', self.state_merchant) + vals['city_merchant'] = vals.get('city_merchant', self.city_merchant) + vals['district_merchant'] = vals.get('district_merchant', self.district_merchant) + vals['subDistrict_merchant'] = vals.get('subDistrict_merchant', self.subDistrict_merchant) + vals['zip_merchant'] = vals.get('zip_merchant', self.zip_merchant) + vals['bank_name_merchant'] = vals.get('bank_name_merchant', self.bank_name_merchant) + vals['rekening_name_merchant'] = vals.get('rekening_name_merchant', self.rekening_name_merchant) + vals['account_number_merchant'] = vals.get('account_number_merchant', self.account_number_merchant) + vals['email_company_merchant'] = vals.get('email_company_merchant', self.email_company_merchant) + vals['email_sales_merchant'] = vals.get('email_sales_merchant', self.email_sales_merchant) + vals['email_finance_merchant'] = vals.get('email_finance_merchant', self.email_finance_merchant) + vals['phone_merchant'] = vals.get('phone_merchant', self.phone_merchant) + vals['mobile_merchant'] = vals.get('mobile_merchant', self.mobile_merchant) + vals['file_dokumenKtpDirut'] = vals.get('file_dokumenKtpDirut', self.file_dokumenKtpDirut) + vals['file_kartuNama'] = vals.get('file_kartuNama', self.file_kartuNama) + vals['file_npwp'] = vals.get('file_npwp', self.file_npwp) + vals['file_sppkp'] = vals.get('file_sppkp', self.file_sppkp) + vals['file_suratPernyataan'] = vals.get('file_suratPernyataan', self.file_suratPernyataan) + vals['file_fotoKantor'] = vals.get('file_fotoKantor', self.file_fotoKantor) + vals['description'] = vals.get('description', self.description) + + # Simpan hanya field yang perlu di-update pada child vals_for_child = { 'customer_type': vals.get('customer_type'), @@ -144,7 +193,32 @@ class ResPartner(models.Model): 'sppkp': vals.get('sppkp'), 'alamat_lengkap_text': vals.get('alamat_lengkap_text'), 'industry_id': vals.get('industry_id'), - 'company_type_id': vals.get('company_type_id') + 'company_type_id': vals.get('company_type_id'), + + # Merchant + 'name_merchant': vals.get('name_merchant'), + 'address_merchant': vals.get('address_merchant'), + 'state_merchant': vals.get('state_merchant'), + 'city_merchant': vals.get('city_merchant'), + 'district_merchant': vals.get('district_merchant'), + 'subDistrict_merchant': vals.get('subDistrict_merchant'), + 'zip_merchant': vals.get('zip_merchant'), + 'bank_name_merchant': vals.get('bank_name_merchant'), + 'rekening_name_merchant': vals.get('rekening_name_merchant'), + 'account_number_merchant': vals.get('account_number_merchant'), + 'email_company_merchant': vals.get('email_company_merchant'), + 'email_sales_merchant': vals.get('email_sales_merchant'), + 'email_finance_merchant': vals.get('email_finance_merchant'), + 'phone_merchant': vals.get('phone_merchant'), + 'mobile_merchant': vals.get('mobile_merchant'), + 'file_dokumenKtpDirut': vals.get('file_dokumenKtpDirut'), + 'file_kartuNama': vals.get('file_kartuNama'), + 'file_npwp': vals.get('file_npwp'), + 'file_sppkp': vals.get('file_sppkp'), + 'file_suratPernyataan': vals.get('file_suratPernyataan'), + 'file_fotoKantor': vals.get('file_fotoKantor'), + 'description': vals.get('description'), + } # Lakukan update pada semua child secara rekursif diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py new file mode 100644 index 00000000..96568f6c --- /dev/null +++ b/indoteknik_custom/models/user_form_merchant.py @@ -0,0 +1,42 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError +from odoo.http import request + + +class UserFormMerchant(models.Model): + _name = 'user.form.merchant' + _inherit = ['mail.thread', 'mail.activity.mixin'] + name = fields.Char(string='Name', required=True) + name_merchant = fields.Char(string='Name') + address = fields.Char(string='Alamat') + state = fields.Many2one('res.country.state', string='State') + city = fields.Many2one('vit.kota', string='Kota') + district = fields.Many2one('vit.kecamatan', string='Kecamatan') + subDistrict = fields.Many2one('vit.kelurahan', string='Kelurahan') + zip = fields.Char(string='Kode Pos') + bank_name = fields.Char(string='Nama Bank') + rekening_name = fields.Char(string='Nama Rekening') + account_number = fields.Char(string='Nomor Rekening Bank') + email_company = fields.Char(string='Email Perusahaan') + email_sales = fields.Char(string='Email Sales') + email_finance = fields.Char(string='Email Finance') + phone = fields.Char(string='No. Telepon Perusahaan') + mobile = fields.Char(string='No. Handphone') + file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") + file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") + file_npwp = fields.Binary(string="NPWP", tracking=True, track_visibility="onchange") + file_sppkp = fields.Binary(string="SPPKP", tracking=True, track_visibility="onchange") + file_suratPernyataan = fields.Binary(string="Surat Pernyataan Nomor Rekening", tracking=True, track_visibility="onchange") + file_fotoKantor = fields.Binary(string="Foto Gudang / Kantor Bagian Depan", tracking=True, track_visibility="onchange") + description = fields.Text(string='Deskripsi') + + @api.depends('name', 'name_merchant') + def name_get(self): + result = [] + for record in self: + if record.name_merchant: + display_name = record.name_merchant + else: + display_name = "DETAIL FORM MERCHANT" + result.append((record.id, display_name)) + return result \ No newline at end of file diff --git a/indoteknik_custom/models/user_merchant_request.py b/indoteknik_custom/models/user_merchant_request.py new file mode 100644 index 00000000..b47f6d1d --- /dev/null +++ b/indoteknik_custom/models/user_merchant_request.py @@ -0,0 +1,96 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import UserError +from odoo.http import request + + +class RejectReasonWizardMerchant(models.TransientModel): + _name = 'reject.reason.wizard.merchant' + _description = 'Wizard for Reject Reason' + + request_id = fields.Many2one('user.merchant.request', string='Request') + reason_reject = fields.Text(string='Reason for Rejection', required=True) + + def confirm_reject(self): + merchant = self.request_id + if merchant: + merchant.write({'reason_reject': self.reason_reject}) + merchant.state_merchant = 'reject' + return {'type': 'ir.actions.act_window_close'} + + +class ConfirmApprovalWizardMerchant(models.TransientModel): + _name = 'confirm.approval.wizard.merchant' + _description = 'Wizard Konfirmasi Approval' + + merchant_id = fields.Many2one('user.merchant.request', string='Merchant', required=True) + + def confirm_approval(self): + merchant = self.merchant_id + if merchant.state_merchant == 'draft': + merchant.state_merchant = 'approved' + + +class UserMerchantRequest(models.Model): + _name = 'user.merchant.request' + _inherit = ['mail.thread', 'mail.activity.mixin'] + _rec_name = 'user_id' + + user_id = fields.Many2one('res.partner', string='User') + merchant_id = fields.Many2one('user.form.merchant', string='Form Merchant') + user_company_id = fields.Many2one('res.partner', string='Company') + state_merchant = fields.Selection([ + ('draft', 'Pengajuan Merchant'), + ('approved', 'Approved Merchant'), + ('reject', 'Rejected'), + ], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft') + reason_reject = fields.Char(string='Reaject Reason') + + def button_approve(self): + for merchant in self: + return { + 'type': 'ir.actions.act_window', + 'name': 'Konfirmasi Approve', + 'res_model': 'confirm.approval.wizard.merchant', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'default_merchant_id': merchant.id, + }} + + def button_reject(self): + return { + 'type': 'ir.actions.act_window', + 'name': _('Reject Reason'), + 'res_model': 'reject.reason.wizard.merchant', + 'view_mode': 'form', + 'target': 'new', + 'context': {'default_request_id': self.id}, + } + + def write(self, vals): + is_approve = True if self.state_merchant == 'approved' or vals.get('state_merchant') == 'approved' else False + if is_approve: + self.user_company_id.name_merchant = self.merchant_id.name_merchant + self.user_company_id.address_merchant = self.merchant_id.address + self.user_company_id.state_merchant = self.merchant_id.state + self.user_company_id.city_merchant = self.merchant_id.city + self.user_company_id.district_merchant = self.merchant_id.district + self.user_company_id.subDistrict_merchant = self.merchant_id.subDistrict + self.user_company_id.zip_merchant = self.merchant_id.zip + self.user_company_id.bank_name_merchant = self.merchant_id.bank_name + self.user_company_id.rekening_name_merchant = self.merchant_id.rekening_name + self.user_company_id.account_number_merchant = self.merchant_id.account_number + self.user_company_id.email_company_merchant = self.merchant_id.email_company + self.user_company_id.email_sales_merchant = self.merchant_id.email_sales + self.user_company_id.email_finance_merchant = self.merchant_id.email_finance + self.user_company_id.phone_merchant = self.merchant_id.phone + self.user_company_id.mobile_merchant = self.merchant_id.mobile + self.user_company_id.file_dokumenKtpDirut = self.merchant_id.file_dokumenKtpDirut + self.user_company_id.file_kartuNama = self.merchant_id.file_kartuNama + self.user_company_id.file_npwp = self.merchant_id.file_npwp + self.user_company_id.file_sppkp = self.merchant_id.file_sppkp + self.user_company_id.file_suratPernyataan = self.merchant_id.file_suratPernyataan + self.user_company_id.file_fotoKantor = self.merchant_id.file_fotoKantor + self.user_company_id.description = self.merchant_id.description + + return super(UserMerchantRequest, self).write(vals) \ No newline at end of file diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 2375df9d..7bf84d2c 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -148,3 +148,7 @@ access_sales_order_fulfillment_v2,access.sales.order.fulfillment.v2,model_sales_ access_v_move_outstanding,access.v.move.outstanding,model_v_move_outstanding,,1,1,1,1 access_va_multi_approve,access.va.multi.approve,model_va_multi_approve,,1,1,1,1 access_va_multi_reject,access.va.multi.reject,model_va_multi_reject,,1,1,1,1 +access_user_form_merchant,access.user.form.merchant,model_user_form_merchant,,1,1,1,1 +access_user_merchant_request,access.user.merchant.request,model_user_merchant_request,,1,1,1,1 +access_reject_reason_wizard_merchant,reject.reason.wizard.merchant,model_reject_reason_wizard_merchant,,1,1,1,0 +access_confirm_approval_wizard_merchant,confirm.approval.wizard.merchant,model_confirm_approval_wizard_merchant,,1,1,1,0 diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 7b13fef7..5fcc7de5 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -80,6 +80,44 @@ 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indoteknik_custom/views/user_form_merchant.xml b/indoteknik_custom/views/user_form_merchant.xml new file mode 100644 index 00000000..f4f91933 --- /dev/null +++ b/indoteknik_custom/views/user_form_merchant.xml @@ -0,0 +1,77 @@ + + + + user.form.merchant.tree + user.form.merchant + + + + + + + + + + + + + user.form.merchant.form + user.form.merchant + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + User Form Merchant + ir.actions.act_window + user.form.merchant + tree,form + + + + +
\ No newline at end of file diff --git a/indoteknik_custom/views/user_merchant_request.xml b/indoteknik_custom/views/user_merchant_request.xml new file mode 100644 index 00000000..c67daae4 --- /dev/null +++ b/indoteknik_custom/views/user_merchant_request.xml @@ -0,0 +1,112 @@ + + + + user.merchant.request.tree + user.merchant.request + + + + + + + + + + + + user.merchant.request.form + user.merchant.request + +
+
+
+ + + + + + + + +
+ +
+
+
+
+ + + + + + + reject.reason.wizard.merchant.form + reject.reason.wizard.merchant + +
+ + + +
+
+
+
+
+ + + Reject Reason + reject.reason.wizard.merchant + form + new + + + + + confirm.approval.wizard.merchant.form + confirm.approval.wizard.merchant + +
+ +

Apakah Anda yakin ingin mengapprove merchant ini?

+
+
+
+
+
+
+ + + + + User Merchant Request + ir.actions.act_window + user.merchant.request + tree,form + + + +
\ No newline at end of file -- cgit v1.2.3 From b2b458d4a642271b98f23403c74eb7aad06cd71d Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 2 Jan 2025 08:52:13 +0700 Subject: update merchant --- indoteknik_api/controllers/api_v1/lead.py | 4 ++++ indoteknik_api/models/res_users.py | 1 + indoteknik_custom/models/res_partner.py | 8 ++++++++ indoteknik_custom/models/user_form_merchant.py | 4 ++++ indoteknik_custom/models/user_merchant_request.py | 4 ++++ indoteknik_custom/views/res_partner.xml | 16 ++++++++++------ indoteknik_custom/views/user_form_merchant.xml | 16 ++++++++++------ 7 files changed, 41 insertions(+), 12 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index 7a964b21..61a37dc6 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -33,6 +33,7 @@ class Lead(controller.Controller): def create_merchant(self, **kw): params = self.get_request_params(kw, { "name_merchant": ["required"], + "pic_merchant":[], "address": [], "state": [], "city": [], @@ -47,12 +48,15 @@ class Lead(controller.Controller): "email_finance": [], "phone": [], "mobile": [], + "harga_tayang": [], "file_dokumenKtpDirut ": [], "file_kartuNama": [], "file_npwp": [], "file_sppkp": [], "file_suratPernyataan": [], "file_fotoKantor": [], + "file_dataProduk": [], + "file_pricelist": [], "description": [], }) filtered_params = {key: value for key, value in params['value'].items() if value} diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index 77aeeef7..37441d7f 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -63,6 +63,7 @@ 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, + 'companyType': user.customer_type or 'nonpkp', 'longtitude': user.longtitude or None, 'latitude': user.latitude or None, 'address_map': user.address_map or None, diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 79962c2b..9e53dae1 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -77,6 +77,7 @@ class ResPartner(models.Model): # MERCHANT name_merchant = fields.Char(string='Name') + pic_merchant = fields.Char(string='PIC Merchant', required=True) address_merchant = fields.Char(string='Alamat') state_merchant = fields.Many2one('res.country.state', string='State') city_merchant = fields.Many2one('vit.kota', string='Kota') @@ -91,12 +92,15 @@ class ResPartner(models.Model): email_finance_merchant = fields.Char(string='Email Finance') phone_merchant = fields.Char(string='No. Telepon Perusahaan') mobile_merchant = fields.Char(string='No. Handphone') + harga_tayang = fields.Char(string='Harga Tayang (HET)') file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") file_npwp = fields.Binary(string="NPWP", tracking=True, track_visibility="onchange") file_sppkp = fields.Binary(string="SPPKP", tracking=True, track_visibility="onchange") file_suratPernyataan = fields.Binary(string="Surat Pernyataan Nomor Rekening", tracking=True, track_visibility="onchange") file_fotoKantor = fields.Binary(string="Foto Gudang / Kantor Bagian Depan", tracking=True, track_visibility="onchange") + file_dataProduk = fields.Binary(string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=True,track_visibility="onchange") + file_pricelist = fields.Binary(string="Pricelist", tracking=True, track_visibility="onchange") description = fields.Text(string='Deskripsi') @api.model @@ -162,6 +166,7 @@ class ResPartner(models.Model): # Merchant vals['name_merchant'] = vals.get('name_merchant', self.name_merchant) + vals['pic_merchant'] = vals.get('pic_merchant', self.pic_merchant) vals['address_merchant'] = vals.get('address_merchant', self.address_merchant) vals['state_merchant'] = vals.get('state_merchant', self.state_merchant) vals['city_merchant'] = vals.get('city_merchant', self.city_merchant) @@ -176,12 +181,15 @@ class ResPartner(models.Model): vals['email_finance_merchant'] = vals.get('email_finance_merchant', self.email_finance_merchant) vals['phone_merchant'] = vals.get('phone_merchant', self.phone_merchant) vals['mobile_merchant'] = vals.get('mobile_merchant', self.mobile_merchant) + vals['harga_tayang'] = vals.get('harga_tayang', self.harga_tayang) vals['file_dokumenKtpDirut'] = vals.get('file_dokumenKtpDirut', self.file_dokumenKtpDirut) vals['file_kartuNama'] = vals.get('file_kartuNama', self.file_kartuNama) vals['file_npwp'] = vals.get('file_npwp', self.file_npwp) vals['file_sppkp'] = vals.get('file_sppkp', self.file_sppkp) vals['file_suratPernyataan'] = vals.get('file_suratPernyataan', self.file_suratPernyataan) vals['file_fotoKantor'] = vals.get('file_fotoKantor', self.file_fotoKantor) + vals['file_dataProduk'] = vals.get('file_dataProduk', self.file_dataProduk) + vals['file_pricelist'] = vals.get('file_pricelist', self.file_pricelist) vals['description'] = vals.get('description', self.description) diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py index 96568f6c..31c85481 100644 --- a/indoteknik_custom/models/user_form_merchant.py +++ b/indoteknik_custom/models/user_form_merchant.py @@ -7,6 +7,7 @@ class UserFormMerchant(models.Model): _name = 'user.form.merchant' _inherit = ['mail.thread', 'mail.activity.mixin'] name = fields.Char(string='Name', required=True) + pic_merchant = fields.Char(string='PIC Merchant', required=True) name_merchant = fields.Char(string='Name') address = fields.Char(string='Alamat') state = fields.Many2one('res.country.state', string='State') @@ -22,12 +23,15 @@ class UserFormMerchant(models.Model): email_finance = fields.Char(string='Email Finance') phone = fields.Char(string='No. Telepon Perusahaan') mobile = fields.Char(string='No. Handphone') + harga_tayang = fields.Char(string='Harga Tayang (HET)') file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") file_npwp = fields.Binary(string="NPWP", tracking=True, track_visibility="onchange") file_sppkp = fields.Binary(string="SPPKP", tracking=True, track_visibility="onchange") file_suratPernyataan = fields.Binary(string="Surat Pernyataan Nomor Rekening", tracking=True, track_visibility="onchange") file_fotoKantor = fields.Binary(string="Foto Gudang / Kantor Bagian Depan", tracking=True, track_visibility="onchange") + file_dataProduk = fields.Binary(string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=True, track_visibility="onchange") + file_pricelist = fields.Binary(string="Pricelist", tracking=True, track_visibility="onchange") description = fields.Text(string='Deskripsi') @api.depends('name', 'name_merchant') diff --git a/indoteknik_custom/models/user_merchant_request.py b/indoteknik_custom/models/user_merchant_request.py index b47f6d1d..7f6c5f3c 100644 --- a/indoteknik_custom/models/user_merchant_request.py +++ b/indoteknik_custom/models/user_merchant_request.py @@ -71,6 +71,7 @@ class UserMerchantRequest(models.Model): is_approve = True if self.state_merchant == 'approved' or vals.get('state_merchant') == 'approved' else False if is_approve: self.user_company_id.name_merchant = self.merchant_id.name_merchant + self.user_company_id.pic_merchant = self.merchant_id.pic_merchant self.user_company_id.address_merchant = self.merchant_id.address self.user_company_id.state_merchant = self.merchant_id.state self.user_company_id.city_merchant = self.merchant_id.city @@ -85,12 +86,15 @@ class UserMerchantRequest(models.Model): self.user_company_id.email_finance_merchant = self.merchant_id.email_finance self.user_company_id.phone_merchant = self.merchant_id.phone self.user_company_id.mobile_merchant = self.merchant_id.mobile + self.user_company_id.harga_tayang = self.merchant_id.harga_tayang self.user_company_id.file_dokumenKtpDirut = self.merchant_id.file_dokumenKtpDirut self.user_company_id.file_kartuNama = self.merchant_id.file_kartuNama self.user_company_id.file_npwp = self.merchant_id.file_npwp self.user_company_id.file_sppkp = self.merchant_id.file_sppkp self.user_company_id.file_suratPernyataan = self.merchant_id.file_suratPernyataan self.user_company_id.file_fotoKantor = self.merchant_id.file_fotoKantor + self.user_company_id.file_dataProduk = self.merchant_id.file_dataProduk + self.user_company_id.file_pricelist = self.merchant_id.file_pricelist self.user_company_id.description = self.merchant_id.description return super(UserMerchantRequest, self).write(vals) \ No newline at end of file diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 5fcc7de5..d3ef2657 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -85,6 +85,7 @@ + @@ -98,12 +99,14 @@ - - - - - - + + + + + + + + @@ -111,6 +114,7 @@ + diff --git a/indoteknik_custom/views/user_form_merchant.xml b/indoteknik_custom/views/user_form_merchant.xml index f4f91933..c30f2756 100644 --- a/indoteknik_custom/views/user_form_merchant.xml +++ b/indoteknik_custom/views/user_form_merchant.xml @@ -23,6 +23,7 @@ + @@ -36,12 +37,14 @@ - - - - - - + + + + + + + + @@ -49,6 +52,7 @@ + -- cgit v1.2.3 From bd6db8fa22dd602cfaffe0a4b44cc2a794fa1975 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 2 Jan 2025 14:18:46 +0700 Subject: update merchant menu --- indoteknik_custom/models/user_form_merchant.py | 2 +- indoteknik_custom/views/user_company_request.xml | 19 ++++++++++++------- indoteknik_custom/views/user_form_merchant.xml | 5 +++-- indoteknik_custom/views/user_merchant_request.xml | 4 ++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py index 31c85481..18d82e25 100644 --- a/indoteknik_custom/models/user_form_merchant.py +++ b/indoteknik_custom/models/user_form_merchant.py @@ -6,7 +6,7 @@ from odoo.http import request class UserFormMerchant(models.Model): _name = 'user.form.merchant' _inherit = ['mail.thread', 'mail.activity.mixin'] - name = fields.Char(string='Name', required=True) + name = fields.Char(string='Name') pic_merchant = fields.Char(string='PIC Merchant', required=True) name_merchant = fields.Char(string='Name') address = fields.Char(string='Alamat') diff --git a/indoteknik_custom/views/user_company_request.xml b/indoteknik_custom/views/user_company_request.xml index 1c80e923..a4a9d842 100644 --- a/indoteknik_custom/views/user_company_request.xml +++ b/indoteknik_custom/views/user_company_request.xml @@ -54,12 +54,17 @@ user.company.request tree,form + + + - \ No newline at end of file diff --git a/indoteknik_custom/views/user_form_merchant.xml b/indoteknik_custom/views/user_form_merchant.xml index c30f2756..230b6425 100644 --- a/indoteknik_custom/views/user_form_merchant.xml +++ b/indoteknik_custom/views/user_form_merchant.xml @@ -70,11 +70,12 @@ tree,form + diff --git a/indoteknik_custom/views/user_merchant_request.xml b/indoteknik_custom/views/user_merchant_request.xml index c67daae4..e4f309fd 100644 --- a/indoteknik_custom/views/user_merchant_request.xml +++ b/indoteknik_custom/views/user_merchant_request.xml @@ -105,8 +105,8 @@ \ No newline at end of file -- cgit v1.2.3 From 7b3a5a327bcae3b70d2e0bead9921f069c574647 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 13 Jan 2025 15:52:22 +0700 Subject: update code --- indoteknik_custom/models/user_form_merchant.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py index 18d82e25..c8025aa9 100644 --- a/indoteknik_custom/models/user_form_merchant.py +++ b/indoteknik_custom/models/user_form_merchant.py @@ -6,9 +6,14 @@ from odoo.http import request class UserFormMerchant(models.Model): _name = 'user.form.merchant' _inherit = ['mail.thread', 'mail.activity.mixin'] + name = fields.Char(string='Name') - pic_merchant = fields.Char(string='PIC Merchant', required=True) + # informasi peruhaan name_merchant = fields.Char(string='Name') + pejabat_name = fields.Char(string='Pejabat Name') + pic_merchant = fields.Char(string='PIC Merchant') + pic_position = fields.Char(string='Jabatan PIC') + partner_id = fields.Many2one('res.partner', string='Company') address = fields.Char(string='Alamat') state = fields.Many2one('res.country.state', string='State') city = fields.Many2one('vit.kota', string='Kota') @@ -23,6 +28,9 @@ class UserFormMerchant(models.Model): email_finance = fields.Char(string='Email Finance') phone = fields.Char(string='No. Telepon Perusahaan') mobile = fields.Char(string='No. Handphone') + bisnis_type = fields.Char(string='Bisnis Type') + category_perusahaan = fields.Char(string='Kategory Perusahaan') + description = fields.Text(string='Deskripsi') harga_tayang = fields.Char(string='Harga Tayang (HET)') file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") @@ -32,7 +40,6 @@ class UserFormMerchant(models.Model): file_fotoKantor = fields.Binary(string="Foto Gudang / Kantor Bagian Depan", tracking=True, track_visibility="onchange") file_dataProduk = fields.Binary(string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=True, track_visibility="onchange") file_pricelist = fields.Binary(string="Pricelist", tracking=True, track_visibility="onchange") - description = fields.Text(string='Deskripsi') @api.depends('name', 'name_merchant') def name_get(self): -- cgit v1.2.3 From ef3ed689e8c8dc1de79e3744055fa12a97aefd35 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 13 Jan 2025 17:03:43 +0700 Subject: update merchant --- indoteknik_api/controllers/api_v1/lead.py | 41 ++++++++++++++++---------- indoteknik_custom/models/user_form_merchant.py | 21 ++++++++++++- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index 61a37dc6..5749f5e5 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -31,9 +31,13 @@ class Lead(controller.Controller): @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, { - "name_merchant": ["required"], - "pic_merchant":[], + # informasi perusahaan + "name_merchant": [], + "pejabat_name": [], + "pic_merchant": [], + "pic_position": [], "address": [], "state": [], "city": [], @@ -48,6 +52,11 @@ class Lead(controller.Controller): "email_finance": [], "phone": [], "mobile": [], + "bisnis_type": [], + "category_perusahaan": [], + "description": [], + + # informasi vendor "harga_tayang": [], "file_dokumenKtpDirut ": [], "file_kartuNama": [], @@ -57,24 +66,26 @@ class Lead(controller.Controller): "file_fotoKantor": [], "file_dataProduk": [], "file_pricelist": [], - "description": [], }) - filtered_params = {key: value for key, value in params['value'].items() if value} - lead = request.env['user.form.merchant'].create(filtered_params) - partner_id = int(kw.get('partner_id')) - partner = request.env['res.partner'].search([('id', '=', partner_id)], limit=1) + main_partner = partner.get_main_parent() + + filtered_params = {key: value for key, value in params['value'].items() if value} + form_merchant = request.env['user.form.merchant'].search([('partner_id', '=', main_partner.id)], limit=1) + if form_merchant: + form_merchant.write(filtered_params) + else: + lead = request.env['user.form.merchant'].create(filtered_params) + lead.partner_id = main_partner.id if not params['valid']: return self.response(code=400, description=params) - - main_partner = partner.get_main_parent() - - user_merchant_request = request.env['user.merchant.request'].create({ - 'user_id': partner.id, - 'merchant_id': lead.id, - 'user_company_id': main_partner.id - }) + if merchant_request: + user_merchant_request = request.env['user.merchant.request'].create({ + 'user_id': partner.id, + 'merchant_id': lead.id, + 'user_company_id': main_partner.id + }) return self.response(True) diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py index c8025aa9..07990f58 100644 --- a/indoteknik_custom/models/user_form_merchant.py +++ b/indoteknik_custom/models/user_form_merchant.py @@ -29,9 +29,28 @@ class UserFormMerchant(models.Model): phone = fields.Char(string='No. Telepon Perusahaan') mobile = fields.Char(string='No. Handphone') bisnis_type = fields.Char(string='Bisnis Type') - category_perusahaan = fields.Char(string='Kategory Perusahaan') + category_perusahaan = fields.Char(string='Kategori Perusahaan') description = fields.Text(string='Deskripsi') + + # imformasi Vendor harga_tayang = fields.Char(string='Harga Tayang (HET)') + category_produk = fields.Char(string='Kategori Produk') + merk_dagang = fields.Char(string='Merk Dagang') + is_pengajuan_tempo = fields.Boolean(string='Apakah anda memiliki Form Pengajuan Tempo?') + tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') + kredit_limit = fields.Char(string='Kredit Limit') + waktu_pengiriman = fields.Char(string='Waktu Pengiriman') + terhitung_sejak = fields.Char(string='Terhitung Sejak') + + + + # syarat dagang + is_kembali_barang = fields.Char(string='Syarat Pengembalian Barang') # tulis tidak bisa pengembalian + + + + + file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") file_npwp = fields.Binary(string="NPWP", tracking=True, track_visibility="onchange") -- cgit v1.2.3 From 932fd84a5eb71d62f2a138f3ddb9ab9c0ccb0385 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 15 Jan 2025 13:20:21 +0700 Subject: update merchant --- indoteknik_api/controllers/api_v1/lead.py | 76 ++++++++++- indoteknik_api/models/__init__.py | 1 + indoteknik_api/models/res_partner.py | 180 +++++++++++++++++++++++++ indoteknik_custom/models/user_form_merchant.py | 18 ++- 4 files changed, 269 insertions(+), 6 deletions(-) create mode 100644 indoteknik_api/models/res_partner.py diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index 5749f5e5..e8153fbf 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -28,10 +28,10 @@ class Lead(controller.Controller): return self.response(True) - @http.route('/api/v1/merchant', auth='public', methods=['POST', 'OPTIONS'], csrf=False) + @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 + merchant_request = True if kw.get('merchantRequest') == 'true' else False params = self.get_request_params(kw, { # informasi perusahaan "name_merchant": [], @@ -54,10 +54,28 @@ class Lead(controller.Controller): "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": [], + "sertifikat_produk": [], + "custom_sertifikat_produk": [], + "is_order_quantity": [], + "explain_garansi": [], + + + + "file_dokumenKtpDirut ": [], "file_kartuNama": [], "file_npwp": [], @@ -67,10 +85,42 @@ class Lead(controller.Controller): "file_dataProduk": [], "file_pricelist": [], }) - partner_id = int(kw.get('partner_id')) + 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 return' + + 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('customTenggatWaktu') + + if kw.get('tempo_garansi'): + if kw.get('tempo_garansi') == '1': + params['value']['tempo_garansi'] = '6 Bulan Garansi' + elif kw.get('tempoTaransi') == '2': + params['value']['tempo_garansi'] = '1 Tahun Garansi' + else: + params['value']['tempo_garansi'] = '2 Tahun Garansi' + + if params['value']['is_order_quantity']: + if params['value']['is_order_quantity'] == 'ya': + params['value']['is_order_quantity'] = kw.get('minimumPembelian') + else: + params['value']['is_order_quantity'] = 'Tidak ada minimum order quantity' + filtered_params = {key: value for key, value in params['value'].items() if value} form_merchant = request.env['user.form.merchant'].search([('partner_id', '=', main_partner.id)], limit=1) if form_merchant: @@ -78,7 +128,11 @@ class Lead(controller.Controller): else: lead = request.env['user.form.merchant'].create(filtered_params) lead.partner_id = main_partner.id - + category_ids = '' + category_produk_ids = kw.get('categoryProduk', False) + if category_produk_ids: + category_ids = list(map(int, category_produk_ids.split(','))) + form_merchant.category_produk_ids = [(6, 0, category_ids)] if not params['valid']: return self.response(code=400, description=params) if merchant_request: @@ -89,3 +143,17 @@ class Lead(controller.Controller): }) 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(form_merchant) + return self.response(form_merchant) diff --git a/indoteknik_api/models/__init__.py b/indoteknik_api/models/__init__.py index 892d2657..8c85938c 100644 --- a/indoteknik_api/models/__init__.py +++ b/indoteknik_api/models/__init__.py @@ -9,3 +9,4 @@ from . import sale_order from . import x_manufactures from . import website_content from . import coupon_program +from . import res_partner diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py new file mode 100644 index 00000000..5da79884 --- /dev/null +++ b/indoteknik_api/models/res_partner.py @@ -0,0 +1,180 @@ +from odoo import models +import json +import base64 + +class ResPartner(models.Model): + _inherit = 'res.partner' + + def api_single_response(self, form_merchant, with_detail=''): + config = self.env['ir.config_parameter'] + + partner = form_merchant.partner_id + + dokumen_kirim = [ + ['Surat Tanda Terima Barang (STTB)', '0'], + ['Good Receipt (GR)', '1'], + ['Surat Terima Barang (STB)', '2'], + ['Lembar Penerimaan Barang (LPB)', '3'] + ] + dokumen_pengiriman = [] + # if form_merchant.dokumen_pengiriman : + # form_merchant_dokumen_pengiriman = form_merchant.dokumen_pengiriman + # mapping_dokumen = {item[0]: item[1] for item in dokumen_kirim} + # dokumen_pengiriman_list = [dokumen.strip() for dokumen in form_merchant_dokumen_pengiriman.split(',')] + # dokumen_pengiriman = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_pengiriman_list] + data = { + 'name_merchant' : form_merchant.name_merchant, + 'pejabat_name' : form_merchant.pejabat_name, + 'pic_merchant' : form_merchant.pic_merchant, + 'pic_position' : form_merchant.pic_position, + 'address' : form_merchant.address, + 'state' : form_merchant.state.id, + 'city' : form_merchant.city.id, + 'district' : form_merchant.district.id, + 'subDistrict' : form_merchant.subDistrict.id, + 'zip' : form_merchant.zip, + 'bank_name' : form_merchant.bank_name, + 'rekening_name' : form_merchant.rekening_name, + 'account_number' : form_merchant.account_number, + 'email_company' : form_merchant.email_company, + 'email_sales' : form_merchant.email_sales, + 'email_finance' : form_merchant.email_finance, + 'phone' : form_merchant.phone, + 'mobile' : form_merchant.mobile, + 'bisnis_type' : form_merchant.bisnis_type, + 'category_perusahaan': form_merchant.category_perusahaan, + 'website' : form_merchant.website, + + # informasi Vendor + 'harga_tayang' : form_merchant.harga_tayang, + 'category_produk': ','.join([str(cat.id) for cat in form_merchant.category_produk_ids]) if form_merchant.category_produk_ids else '', + 'merk_dagang' : form_merchant.merk_dagang, + 'is_pengajuan_tempo' : 'ada' if form_merchant.is_pengajuan_tempo else 'tidak', + 'tempo_duration' : form_merchant.tempo_duration.id, + 'kredit_limit' : form_merchant.kredit_limit, + 'waktu_pengiriman' : form_merchant.waktu_pengiriman, + 'terhitung_sejak' : form_merchant.terhitung_sejak, + + + # syarat perdagangan + 'is_kembali_barang': 'ya' if form_merchant.is_kembali_barang else 'tidak', + 'text_return': form_merchant.is_kembali_barang, + 'tenggat_waktu': form_merchant.tenggat_waktu, + 'sertifikat_produk': form_merchant.sertifikat_produk, + 'custom_sertifikat_produk': '' if form_merchant.custom_sertifikat_produk == 'false' else form_merchant.custom_sertifikat_produk, + 'tempo_garansi': 1 if form_merchant.tempo_garansi == '6 Bulan Garansi' else 2 if form_merchant.tempo_garansi == '1 Tahun Garansi' else 3 , + 'explain_garansi': form_merchant.explain_garansi, + 'is_order_quantity': 'ya' if form_merchant.is_order_quantity else 'tidak', + 'minimum_pembelian': form_merchant.is_order_quantity, + # + # # Pengiriman + # 'PIC_tittle' : form_merchant.pic_tittle if form_merchant.pic_tittle else '', + # 'PIC_name' : form_merchant.pic_name if form_merchant.pic_name else '', + # 'street_pengiriman' : form_merchant.street_pengiriman if form_merchant.street_pengiriman else '', + # 'state_pengiriman' : form_merchant.state_id_pengiriman.id if form_merchant.state_id_pengiriman else '', + # 'city_pengiriman' : form_merchant.city_id_pengiriman.id if form_merchant.city_id_pengiriman else '', + # 'district_pengiriman': form_merchant.district_id_pengiriman.id if form_merchant.district_id_pengiriman else '', + # 'subDistrict_pengiriman': form_merchant.subDistrict_id_pengiriman.id if form_merchant.subDistrict_id_pengiriman else '', + # 'zip_pengiriman' : form_merchant.zip_pengiriman if form_merchant.zip_pengiriman else '', + # 'invoice_pic_tittle' : form_merchant.invoice_pic_tittle if form_merchant.invoice_pic_tittle else '', + # 'invoice_pic' : form_merchant.invoice_pic if form_merchant.invoice_pic else '', + # 'street_invoice' : form_merchant.street_invoice if form_merchant.street_invoice else '', + # 'state_invoice' : form_merchant.state_id_invoice.id if form_merchant.state_id_invoice else '', + # 'city_invoice' : form_merchant.city_id_invoice.id if form_merchant.city_id_invoice else '', + # 'district_invoice': form_merchant.district_id_invoice.id if form_merchant.district_id_invoice else '', + # 'subDistrict_invoice': form_merchant.subDistrict_id_invoice.id if form_merchant.subDistrict_id_invoice else '', + # 'zip_invoice': form_merchant.zip_invoice if form_merchant.zip_invoice else '', + # 'tukar_invoice_input' : form_merchant.tukar_invoice if form_merchant.tukar_invoice else '', + # 'tukar_invoice_input_pembayaran' : form_merchant.jadwal_bayar if form_merchant.jadwal_bayar else '', + # 'dokumen_pengiriman' : ','.join(dokumen_pengiriman) if dokumen_pengiriman else '', + # 'dokumen_pengiriman_input' : form_merchant.dokumen_pengiriman_input if form_merchant.dokumen_pengiriman_input else '', + # 'dokumen_kirim_input' : form_merchant.dokumen_kirim_input if form_merchant.dokumen_kirim_input else '', + # 'dokumen_pengiriman_invoice' : form_merchant.dokumen_invoice if form_merchant.dokumen_invoice else '', + # 'is_same_addrees': form_merchant.is_same_address if form_merchant.is_same_address else False, + # 'is_same_addrees_street': form_merchant.is_same_address_street if form_merchant.is_same_address_street else False, + # 'supplier_ids': [ + # { + # 'id': supplier.id, + # 'supplier': supplier.name_supplier, + # 'telepon': supplier.phone, + # 'pic': supplier.pic_name, + # 'credit_limit': supplier.credit_limit, + # 'durasi_tempo': supplier.tempo_duration + # } + # for supplier in form_merchant.supplier_ids + # ] if form_merchant.supplier_ids else '', + # # Dokumen + # 'dokumen_npwp': + # { + # 'name': form_merchant.dokumen_npwp.name, + # 'base64': form_merchant.dokumen_npwp.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_npwp.mimetype, + # } if form_merchant.dokumen_npwp else '', + # 'dokumen_sppkp': { + # 'name': form_merchant.dokumen_sppkp.name, + # 'base64': form_merchant.dokumen_sppkp.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_sppkp.mimetype, + # } if form_merchant.dokumen_sppkp else '', + # 'dokumen_nib': + # { + # 'name': form_merchant.dokumen_nib.name, + # 'base64': form_merchant.dokumen_nib.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_nib.mimetype, + # }if form_merchant.dokumen_nib else '', + # 'dokumen_siup': + # { + # 'name': form_merchant.dokumen_siup.name, + # 'base64': form_merchant.dokumen_siup.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_siup.mimetype, + # }if form_merchant.dokumen_siup else '', + # 'dokumen_tdp': + # { + # 'name': form_merchant.dokumen_tdp.name, + # 'base64': form_merchant.dokumen_tdp.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_tdp.mimetype, + # }if form_merchant.dokumen_tdp else '', + # 'dokumen_skdp': + # { + # 'name': form_merchant.dokumen_skdp.name, + # 'base64': form_merchant.dokumen_skdp.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_skdp.mimetype, + # }if form_merchant.dokumen_skdp else '', + # 'dokumen_skt': + # { + # 'name': form_merchant.dokumen_skt.name, + # 'base64': form_merchant.dokumen_skt.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_skt.mimetype, + # }if form_merchant.dokumen_skt else '', + # 'dokumen_akta_perubahan': { + # 'name': form_merchant.dokumen_akta_perubahan.name, + # 'base64': form_merchant.dokumen_akta_perubahan.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_akta_perubahan.mimetype, + # } if form_merchant.dokumen_akta_perubahan else '', + # 'dokumen_ktp_dirut': { + # 'name': form_merchant.dokumen_ktp_dirut.name, + # 'base64': form_merchant.dokumen_ktp_dirut.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_ktp_dirut.mimetype, + # } if form_merchant.dokumen_ktp_dirut else '', + # 'dokumen_akta_pendirian': { + # 'name': form_merchant.dokumen_akta_pendirian.name, + # 'base64': form_merchant.dokumen_akta_pendirian.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_akta_pendirian.mimetype, + # } if form_merchant.dokumen_akta_pendirian else '', + # 'dokumen_laporan_keuangan': { + # 'name': form_merchant.dokumen_laporan_keuangan.name, + # 'base64': form_merchant.dokumen_laporan_keuangan.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_laporan_keuangan.mimetype, + # } if form_merchant.dokumen_laporan_keuangan else '', + # 'dokumen_foto_kantor': { + # 'name': form_merchant.dokumen_foto_kantor.name, + # 'base64': form_merchant.dokumen_foto_kantor.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_foto_kantor.mimetype, + # } if form_merchant.dokumen_foto_kantor else '', + # 'dokumen_tempat_bekerja': { + # 'name': form_merchant.dokumen_tempat_bekerja.name, + # 'base64': form_merchant.dokumen_tempat_bekerja.datas.decode('utf-8'), + # 'format': form_merchant.dokumen_tempat_bekerja.mimetype, + # } if form_merchant.dokumen_tempat_bekerja else '', + } + + return data \ No newline at end of file diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py index 07990f58..83ed2eeb 100644 --- a/indoteknik_custom/models/user_form_merchant.py +++ b/indoteknik_custom/models/user_form_merchant.py @@ -29,12 +29,20 @@ class UserFormMerchant(models.Model): phone = fields.Char(string='No. Telepon Perusahaan') mobile = fields.Char(string='No. Handphone') bisnis_type = fields.Char(string='Bisnis Type') + website = fields.Char(string='Website') category_perusahaan = fields.Char(string='Kategori Perusahaan') description = fields.Text(string='Deskripsi') # imformasi Vendor harga_tayang = fields.Char(string='Harga Tayang (HET)') - category_produk = fields.Char(string='Kategori Produk') + category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', + domain=lambda self: self._get_default_category_domain()) + + @api.model + def _get_default_category_domain(self): + return [('parent_id', '=', False)] + + merk_dagang = fields.Char(string='Merk Dagang') is_pengajuan_tempo = fields.Boolean(string='Apakah anda memiliki Form Pengajuan Tempo?') tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') @@ -45,7 +53,13 @@ class UserFormMerchant(models.Model): # syarat dagang - is_kembali_barang = fields.Char(string='Syarat Pengembalian Barang') # tulis tidak bisa pengembalian + is_kembali_barang = fields.Char(string='Syarat Pengembalian Barang') + tenggat_waktu = fields.Char(string='Tenggat Waktu Perubahan Harga') + sertifikat_produk = fields.Char(string='Dokumen/Sertifikat yang Dimiliki Oleh Brand') + custom_sertifikat_produk = fields.Char(string='Dokumen/Sertifikat Lainnya') + tempo_garansi = fields.Char(string='Garansi') + explain_garansi = fields.Char(string='Garansi Yang Dimaksudkan') + is_order_quantity = fields.Char(string='Apakah Memiliki Minimum Order Quantity (MOQ)') -- cgit v1.2.3 From c7f6d959e0e7a2e8adc45cff515f2b5666f3e732 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 20 Jan 2025 11:56:25 +0700 Subject: update merchant --- indoteknik_api/controllers/api_v1/lead.py | 89 ++++++++++---- indoteknik_api/models/res_partner.py | 164 ++++++------------------- indoteknik_custom/models/user_form_merchant.py | 46 ++++--- indoteknik_custom/views/user_form_merchant.xml | 55 ++++++--- 4 files changed, 176 insertions(+), 178 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index e8153fbf..67856dad 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) @@ -70,20 +73,20 @@ class Lead(controller.Controller): "is_kembali_barang": [], "sertifikat_produk": [], "custom_sertifikat_produk": [], + "tempo_garansi": [], "is_order_quantity": [], "explain_garansi": [], - - - - "file_dokumenKtpDirut ": [], - "file_kartuNama": [], - "file_npwp": [], - "file_sppkp": [], - "file_suratPernyataan": [], - "file_fotoKantor": [], - "file_dataProduk": [], - "file_pricelist": [], + # # 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) @@ -105,22 +108,21 @@ class Lead(controller.Controller): 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('customTenggatWaktu') - - if kw.get('tempo_garansi'): - if kw.get('tempo_garansi') == '1': - params['value']['tempo_garansi'] = '6 Bulan Garansi' - elif kw.get('tempoTaransi') == '2': - params['value']['tempo_garansi'] = '1 Tahun Garansi' - else: - params['value']['tempo_garansi'] = '2 Tahun Garansi' + 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('minimumPembelian') + params['value']['is_order_quantity'] = kw.get('minimum_pembelian') else: params['value']['is_order_quantity'] = 'Tidak ada minimum order quantity' + dokumen_kirim = [ + 'TKDN', + 'SNI', + 'Surat Terima Barang (STB)', + 'Lembar Penerimaan Barang (LPB)' + ] + filtered_params = {key: value for key, value in params['value'].items() if value} form_merchant = request.env['user.form.merchant'].search([('partner_id', '=', main_partner.id)], limit=1) if form_merchant: @@ -132,7 +134,50 @@ class Lead(controller.Controller): category_produk_ids = kw.get('categoryProduk', False) if category_produk_ids: category_ids = list(map(int, category_produk_ids.split(','))) - form_merchant.category_produk_ids = [(6, 0, category_ids)] + 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: diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index 5da79884..a8ba785d 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -6,22 +6,6 @@ class ResPartner(models.Model): _inherit = 'res.partner' def api_single_response(self, form_merchant, with_detail=''): - config = self.env['ir.config_parameter'] - - partner = form_merchant.partner_id - - dokumen_kirim = [ - ['Surat Tanda Terima Barang (STTB)', '0'], - ['Good Receipt (GR)', '1'], - ['Surat Terima Barang (STB)', '2'], - ['Lembar Penerimaan Barang (LPB)', '3'] - ] - dokumen_pengiriman = [] - # if form_merchant.dokumen_pengiriman : - # form_merchant_dokumen_pengiriman = form_merchant.dokumen_pengiriman - # mapping_dokumen = {item[0]: item[1] for item in dokumen_kirim} - # dokumen_pengiriman_list = [dokumen.strip() for dokumen in form_merchant_dokumen_pengiriman.split(',')] - # dokumen_pengiriman = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_pengiriman_list] data = { 'name_merchant' : form_merchant.name_merchant, 'pejabat_name' : form_merchant.pejabat_name, @@ -62,119 +46,45 @@ class ResPartner(models.Model): 'tenggat_waktu': form_merchant.tenggat_waktu, 'sertifikat_produk': form_merchant.sertifikat_produk, 'custom_sertifikat_produk': '' if form_merchant.custom_sertifikat_produk == 'false' else form_merchant.custom_sertifikat_produk, - 'tempo_garansi': 1 if form_merchant.tempo_garansi == '6 Bulan Garansi' else 2 if form_merchant.tempo_garansi == '1 Tahun Garansi' else 3 , + 'tempo_garansi': form_merchant.tempo_garansi, 'explain_garansi': form_merchant.explain_garansi, - 'is_order_quantity': 'ya' if form_merchant.is_order_quantity else 'tidak', + 'is_order_quantity': 'ya' if form_merchant.is_order_quantity != 'Tidak ada minimum order quantity' else 'tidak', 'minimum_pembelian': form_merchant.is_order_quantity, - # - # # Pengiriman - # 'PIC_tittle' : form_merchant.pic_tittle if form_merchant.pic_tittle else '', - # 'PIC_name' : form_merchant.pic_name if form_merchant.pic_name else '', - # 'street_pengiriman' : form_merchant.street_pengiriman if form_merchant.street_pengiriman else '', - # 'state_pengiriman' : form_merchant.state_id_pengiriman.id if form_merchant.state_id_pengiriman else '', - # 'city_pengiriman' : form_merchant.city_id_pengiriman.id if form_merchant.city_id_pengiriman else '', - # 'district_pengiriman': form_merchant.district_id_pengiriman.id if form_merchant.district_id_pengiriman else '', - # 'subDistrict_pengiriman': form_merchant.subDistrict_id_pengiriman.id if form_merchant.subDistrict_id_pengiriman else '', - # 'zip_pengiriman' : form_merchant.zip_pengiriman if form_merchant.zip_pengiriman else '', - # 'invoice_pic_tittle' : form_merchant.invoice_pic_tittle if form_merchant.invoice_pic_tittle else '', - # 'invoice_pic' : form_merchant.invoice_pic if form_merchant.invoice_pic else '', - # 'street_invoice' : form_merchant.street_invoice if form_merchant.street_invoice else '', - # 'state_invoice' : form_merchant.state_id_invoice.id if form_merchant.state_id_invoice else '', - # 'city_invoice' : form_merchant.city_id_invoice.id if form_merchant.city_id_invoice else '', - # 'district_invoice': form_merchant.district_id_invoice.id if form_merchant.district_id_invoice else '', - # 'subDistrict_invoice': form_merchant.subDistrict_id_invoice.id if form_merchant.subDistrict_id_invoice else '', - # 'zip_invoice': form_merchant.zip_invoice if form_merchant.zip_invoice else '', - # 'tukar_invoice_input' : form_merchant.tukar_invoice if form_merchant.tukar_invoice else '', - # 'tukar_invoice_input_pembayaran' : form_merchant.jadwal_bayar if form_merchant.jadwal_bayar else '', - # 'dokumen_pengiriman' : ','.join(dokumen_pengiriman) if dokumen_pengiriman else '', - # 'dokumen_pengiriman_input' : form_merchant.dokumen_pengiriman_input if form_merchant.dokumen_pengiriman_input else '', - # 'dokumen_kirim_input' : form_merchant.dokumen_kirim_input if form_merchant.dokumen_kirim_input else '', - # 'dokumen_pengiriman_invoice' : form_merchant.dokumen_invoice if form_merchant.dokumen_invoice else '', - # 'is_same_addrees': form_merchant.is_same_address if form_merchant.is_same_address else False, - # 'is_same_addrees_street': form_merchant.is_same_address_street if form_merchant.is_same_address_street else False, - # 'supplier_ids': [ - # { - # 'id': supplier.id, - # 'supplier': supplier.name_supplier, - # 'telepon': supplier.phone, - # 'pic': supplier.pic_name, - # 'credit_limit': supplier.credit_limit, - # 'durasi_tempo': supplier.tempo_duration - # } - # for supplier in form_merchant.supplier_ids - # ] if form_merchant.supplier_ids else '', - # # Dokumen - # 'dokumen_npwp': - # { - # 'name': form_merchant.dokumen_npwp.name, - # 'base64': form_merchant.dokumen_npwp.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_npwp.mimetype, - # } if form_merchant.dokumen_npwp else '', - # 'dokumen_sppkp': { - # 'name': form_merchant.dokumen_sppkp.name, - # 'base64': form_merchant.dokumen_sppkp.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_sppkp.mimetype, - # } if form_merchant.dokumen_sppkp else '', - # 'dokumen_nib': - # { - # 'name': form_merchant.dokumen_nib.name, - # 'base64': form_merchant.dokumen_nib.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_nib.mimetype, - # }if form_merchant.dokumen_nib else '', - # 'dokumen_siup': - # { - # 'name': form_merchant.dokumen_siup.name, - # 'base64': form_merchant.dokumen_siup.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_siup.mimetype, - # }if form_merchant.dokumen_siup else '', - # 'dokumen_tdp': - # { - # 'name': form_merchant.dokumen_tdp.name, - # 'base64': form_merchant.dokumen_tdp.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_tdp.mimetype, - # }if form_merchant.dokumen_tdp else '', - # 'dokumen_skdp': - # { - # 'name': form_merchant.dokumen_skdp.name, - # 'base64': form_merchant.dokumen_skdp.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_skdp.mimetype, - # }if form_merchant.dokumen_skdp else '', - # 'dokumen_skt': - # { - # 'name': form_merchant.dokumen_skt.name, - # 'base64': form_merchant.dokumen_skt.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_skt.mimetype, - # }if form_merchant.dokumen_skt else '', - # 'dokumen_akta_perubahan': { - # 'name': form_merchant.dokumen_akta_perubahan.name, - # 'base64': form_merchant.dokumen_akta_perubahan.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_akta_perubahan.mimetype, - # } if form_merchant.dokumen_akta_perubahan else '', - # 'dokumen_ktp_dirut': { - # 'name': form_merchant.dokumen_ktp_dirut.name, - # 'base64': form_merchant.dokumen_ktp_dirut.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_ktp_dirut.mimetype, - # } if form_merchant.dokumen_ktp_dirut else '', - # 'dokumen_akta_pendirian': { - # 'name': form_merchant.dokumen_akta_pendirian.name, - # 'base64': form_merchant.dokumen_akta_pendirian.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_akta_pendirian.mimetype, - # } if form_merchant.dokumen_akta_pendirian else '', - # 'dokumen_laporan_keuangan': { - # 'name': form_merchant.dokumen_laporan_keuangan.name, - # 'base64': form_merchant.dokumen_laporan_keuangan.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_laporan_keuangan.mimetype, - # } if form_merchant.dokumen_laporan_keuangan else '', - # 'dokumen_foto_kantor': { - # 'name': form_merchant.dokumen_foto_kantor.name, - # 'base64': form_merchant.dokumen_foto_kantor.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_foto_kantor.mimetype, - # } if form_merchant.dokumen_foto_kantor else '', - # 'dokumen_tempat_bekerja': { - # 'name': form_merchant.dokumen_tempat_bekerja.name, - # 'base64': form_merchant.dokumen_tempat_bekerja.datas.decode('utf-8'), - # 'format': form_merchant.dokumen_tempat_bekerja.mimetype, - # } if form_merchant.dokumen_tempat_bekerja else '', + + #dokumen + 'file_npwp': + { + 'name': form_merchant.file_npwp.name, + } if form_merchant.file_npwp else '', + 'file_sppkp': { + 'name': form_merchant.file_sppkp.name, + } if form_merchant.file_sppkp else '', + 'file_dokumenKtpDirut': + { + 'name': form_merchant.file_dokumenKtpDirut.name, + }if form_merchant.file_dokumenKtpDirut else '', + 'file_kartuNama': + { + 'name': form_merchant.file_kartuNama.name, + }if form_merchant.file_kartuNama else '', + 'file_suratPernyataan': + { + 'name': form_merchant.file_suratPernyataan.name, + }if form_merchant.file_suratPernyataan else '', + 'file_fotoKantor': + { + 'name': form_merchant.file_fotoKantor.name + }if form_merchant.file_fotoKantor else '', + 'file_dataProduk': + { + 'name': form_merchant.file_dataProduk.name, + }if form_merchant.file_dataProduk else '', + 'file_pricelist': { + 'name': form_merchant.file_pricelist.name, + } if form_merchant.file_pricelist else '', + + + } return data \ No newline at end of file diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py index 83ed2eeb..dd143381 100644 --- a/indoteknik_custom/models/user_form_merchant.py +++ b/indoteknik_custom/models/user_form_merchant.py @@ -28,9 +28,19 @@ class UserFormMerchant(models.Model): email_finance = fields.Char(string='Email Finance') phone = fields.Char(string='No. Telepon Perusahaan') mobile = fields.Char(string='No. Handphone') - bisnis_type = fields.Char(string='Bisnis Type') + bisnis_type = fields.Selection([ + ('1', 'PT'), + ('2', 'CV'), + ('3', 'Perorangan'), + ]) website = fields.Char(string='Website') - category_perusahaan = fields.Char(string='Kategori Perusahaan') + category_perusahaan = fields.Selection([ + ('1', 'Principal (Pemegang merk/Produsen)'), + ('2', 'Sole Distributor (Distributor Tunggal)'), + ('3', 'Authorized Distributor (Distributor Resmi)'), + ('4', 'Importer (Pengimpor Barang)'), + ('5', 'Wholesaler (Pedagang Besar)'), + ]) description = fields.Text(string='Deskripsi') # imformasi Vendor @@ -48,7 +58,11 @@ class UserFormMerchant(models.Model): tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') kredit_limit = fields.Char(string='Kredit Limit') waktu_pengiriman = fields.Char(string='Waktu Pengiriman') - terhitung_sejak = fields.Char(string='Terhitung Sejak') + terhitung_sejak = fields.Selection([ + ('1', 'Terima PO'), + ('2', 'Barang Dikirimkan'), + ('3', 'Tukar Faktur'), + ]) @@ -57,22 +71,24 @@ class UserFormMerchant(models.Model): tenggat_waktu = fields.Char(string='Tenggat Waktu Perubahan Harga') sertifikat_produk = fields.Char(string='Dokumen/Sertifikat yang Dimiliki Oleh Brand') custom_sertifikat_produk = fields.Char(string='Dokumen/Sertifikat Lainnya') - tempo_garansi = fields.Char(string='Garansi') + tempo_garansi = fields.Selection([ + ('1', '6 Bulan Garansi'), + ('2', '1 Tahun Garansi'), + ('3', '2 Tahun Garansi'), + ]) explain_garansi = fields.Char(string='Garansi Yang Dimaksudkan') is_order_quantity = fields.Char(string='Apakah Memiliki Minimum Order Quantity (MOQ)') - - - - file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") - file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") - file_npwp = fields.Binary(string="NPWP", tracking=True, track_visibility="onchange") - file_sppkp = fields.Binary(string="SPPKP", tracking=True, track_visibility="onchange") - file_suratPernyataan = fields.Binary(string="Surat Pernyataan Nomor Rekening", tracking=True, track_visibility="onchange") - file_fotoKantor = fields.Binary(string="Foto Gudang / Kantor Bagian Depan", tracking=True, track_visibility="onchange") - file_dataProduk = fields.Binary(string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=True, track_visibility="onchange") - file_pricelist = fields.Binary(string="Pricelist", tracking=True, track_visibility="onchange") + # dokumen + file_npwp = fields.Many2one('ir.attachment', string="NPWP Perusahaan", tracking=3) + file_sppkp = fields.Many2one('ir.attachment', string="SPPKP Perusahaan", tracking=3) + file_dokumenKtpDirut = fields.Many2one('ir.attachment', string="KTP Dirut/Direktur", tracking=3) + file_kartuNama = fields.Many2one('ir.attachment', string="Kartu Nama", tracking=3) + file_suratPernyataan = fields.Many2one('ir.attachment', string="Surat Pernyataan Nomor Rekening", tracking=3) + file_fotoKantor = fields.Many2one('ir.attachment', string="Foto Gudang / Kantor Bagian Depan", tracking=3) + file_dataProduk = fields.Many2one('ir.attachment', string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=3) + file_pricelist = fields.Many2one('ir.attachment', string="Pricelist", tracking=3) @api.depends('name', 'name_merchant') def name_get(self): diff --git a/indoteknik_custom/views/user_form_merchant.xml b/indoteknik_custom/views/user_form_merchant.xml index 230b6425..cbb7c756 100644 --- a/indoteknik_custom/views/user_form_merchant.xml +++ b/indoteknik_custom/views/user_form_merchant.xml @@ -21,38 +21,65 @@
- + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - + -- cgit v1.2.3 From ff20b62d6932c6be4ffb56f63f3c05be3aa72c06 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 21 Jan 2025 13:43:29 +0700 Subject: update merchant --- indoteknik_api/controllers/api_v1/lead.py | 50 +++++++++++++++-------- indoteknik_api/models/res_partner.py | 17 ++++++-- indoteknik_custom/models/res_partner.py | 17 ++++++++ indoteknik_custom/models/user_form_merchant.py | 2 +- indoteknik_custom/models/user_merchant_request.py | 1 + indoteknik_custom/views/user_form_merchant.xml | 4 +- 6 files changed, 68 insertions(+), 23 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index 67856dad..7ff8a8e9 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -34,7 +34,7 @@ class Lead(controller.Controller): @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('merchantRequest') == 'true' else False + merchant_request = True if kw.get('merchant_request') == 'true' else False params = self.get_request_params(kw, { # informasi perusahaan "name_merchant": [], @@ -42,10 +42,10 @@ class Lead(controller.Controller): "pic_merchant": [], "pic_position": [], "address": [], - "state": [], - "city": [], - "district": [], - "subDistrict": [], + "state": ['number'], + "city": ['number'], + "district": ['number'], + "subDistrict": ['number'], "zip": [], "bank_name": [], "rekening_name": [], @@ -71,11 +71,10 @@ class Lead(controller.Controller): # Syarat Perdagangan "is_kembali_barang": [], - "sertifikat_produk": [], - "custom_sertifikat_produk": [], "tempo_garansi": [], "is_order_quantity": [], "explain_garansi": [], + "custom_sertifikat_produk": [], # # dokumen # @@ -102,7 +101,7 @@ class Lead(controller.Controller): if params['value']['is_kembali_barang'] == 'ya': params['value']['is_kembali_barang'] = kw.get('textReturn') else: - params['value']['is_kembali_barang'] = 'Tidak dapat return' + params['value']['is_kembali_barang'] = 'Tidak dapat direturn' if kw.get('tenggat_waktu'): if kw.get('tenggat_waktu') != 'custom': @@ -116,20 +115,37 @@ class Lead(controller.Controller): else: params['value']['is_order_quantity'] = 'Tidak ada minimum order quantity' - dokumen_kirim = [ - 'TKDN', - 'SNI', - 'Surat Terima Barang (STB)', - 'Lembar Penerimaan Barang (LPB)' - ] - - filtered_params = {key: value for key, value in params['value'].items() if value} + 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: @@ -183,7 +199,7 @@ class Lead(controller.Controller): if merchant_request: user_merchant_request = request.env['user.merchant.request'].create({ 'user_id': partner.id, - 'merchant_id': lead.id, + 'merchant_id': form_merchant.id, 'user_company_id': main_partner.id }) diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index a8ba785d..c313ffee 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -6,6 +6,17 @@ class ResPartner(models.Model): _inherit = 'res.partner' def api_single_response(self, form_merchant, with_detail=''): + sertifikat = [ + ['TKDN', '0'], + ['SNI', '1'], + ['K3L', '2'], + ] + dokumen_sertifikat = [] + if form_merchant.sertifikat_produk: + form_merchant_dokumen_sertifikat = form_merchant.sertifikat_produk + mapping_dokumen = {item[0]: item[1] for item in sertifikat} + dokumen_pengiriman_list = [dokumen.strip() for dokumen in form_merchant_dokumen_sertifikat.split(',')] + dokumen_sertifikat = [mapping_dokumen.get(dokumen, '3') for dokumen in dokumen_pengiriman_list] data = { 'name_merchant' : form_merchant.name_merchant, 'pejabat_name' : form_merchant.pejabat_name, @@ -41,10 +52,10 @@ class ResPartner(models.Model): # syarat perdagangan - 'is_kembali_barang': 'ya' if form_merchant.is_kembali_barang else 'tidak', - 'text_return': form_merchant.is_kembali_barang, + 'is_kembali_barang': 'tidak' if form_merchant.is_kembali_barang == 'Tidak dapat direturn' else 'ya', + 'text_return': form_merchant.is_kembali_barang if form_merchant.is_kembali_barang != 'Tidak dapat direturn' else '', 'tenggat_waktu': form_merchant.tenggat_waktu, - 'sertifikat_produk': form_merchant.sertifikat_produk, + 'sertifikat_produk': ','.join(dokumen_sertifikat) if dokumen_sertifikat else '', 'custom_sertifikat_produk': '' if form_merchant.custom_sertifikat_produk == 'false' else form_merchant.custom_sertifikat_produk, 'tempo_garansi': form_merchant.tempo_garansi, 'explain_garansi': form_merchant.explain_garansi, diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 9e53dae1..d7bd260f 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -76,8 +76,11 @@ class ResPartner(models.Model): "this feature", tracking=3) # MERCHANT + # informasi perusahaan name_merchant = fields.Char(string='Name') + pejabat_name = fields.Char(string='Pejabat Name') pic_merchant = fields.Char(string='PIC Merchant', required=True) + pic_position = fields.Char(string='Jabatan PIC') address_merchant = fields.Char(string='Alamat') state_merchant = fields.Many2one('res.country.state', string='State') city_merchant = fields.Many2one('vit.kota', string='Kota') @@ -92,6 +95,20 @@ class ResPartner(models.Model): email_finance_merchant = fields.Char(string='Email Finance') phone_merchant = fields.Char(string='No. Telepon Perusahaan') mobile_merchant = fields.Char(string='No. Handphone') + bisnis_type = fields.Selection([ + ('1', 'PT'), + ('2', 'CV'), + ('3', 'Perorangan'), + ]) + website_merchant = fields.Char(string='Website') + category_perusahaan = fields.Selection([ + ('1', 'Principal (Pemegang merk/Produsen)'), + ('2', 'Sole Distributor (Distributor Tunggal)'), + ('3', 'Authorized Distributor (Distributor Resmi)'), + ('4', 'Importer (Pengimpor Barang)'), + ('5', 'Wholesaler (Pedagang Besar)'), + ]) + harga_tayang = fields.Char(string='Harga Tayang (HET)') file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py index dd143381..6d881621 100644 --- a/indoteknik_custom/models/user_form_merchant.py +++ b/indoteknik_custom/models/user_form_merchant.py @@ -8,7 +8,7 @@ class UserFormMerchant(models.Model): _inherit = ['mail.thread', 'mail.activity.mixin'] name = fields.Char(string='Name') - # informasi peruhaan + # informasi peruhsaan name_merchant = fields.Char(string='Name') pejabat_name = fields.Char(string='Pejabat Name') pic_merchant = fields.Char(string='PIC Merchant') diff --git a/indoteknik_custom/models/user_merchant_request.py b/indoteknik_custom/models/user_merchant_request.py index 7f6c5f3c..a373a771 100644 --- a/indoteknik_custom/models/user_merchant_request.py +++ b/indoteknik_custom/models/user_merchant_request.py @@ -70,6 +70,7 @@ class UserMerchantRequest(models.Model): def write(self, vals): is_approve = True if self.state_merchant == 'approved' or vals.get('state_merchant') == 'approved' else False if is_approve: + # Informasi Perusahaan self.user_company_id.name_merchant = self.merchant_id.name_merchant self.user_company_id.pic_merchant = self.merchant_id.pic_merchant self.user_company_id.address_merchant = self.merchant_id.address diff --git a/indoteknik_custom/views/user_form_merchant.xml b/indoteknik_custom/views/user_form_merchant.xml index cbb7c756..cd3f1de3 100644 --- a/indoteknik_custom/views/user_form_merchant.xml +++ b/indoteknik_custom/views/user_form_merchant.xml @@ -63,7 +63,7 @@ - + @@ -82,7 +82,7 @@ - + -- cgit v1.2.3 From 6809954d3029c98766d323eda40e6bd1fda8be0a Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 21 Jan 2025 16:34:18 +0700 Subject: update merchant contact --- indoteknik_custom/models/res_partner.py | 110 +++++++++++++++++++--- indoteknik_custom/models/user_form_merchant.py | 4 - indoteknik_custom/models/user_merchant_request.py | 28 +++++- indoteknik_custom/views/res_partner.xml | 2 +- 4 files changed, 123 insertions(+), 21 deletions(-) diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 8a420048..7852682f 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -182,20 +182,52 @@ class ResPartner(models.Model): ('4', 'Importer (Pengimpor Barang)'), ('5', 'Wholesaler (Pedagang Besar)'), ]) - + # Informasi Vendor harga_tayang = fields.Char(string='Harga Tayang (HET)') - file_dokumenKtpDirut = fields.Binary(string="KTP Dirut/Direktur", tracking=True, track_visibility="onchange") - file_kartuNama = fields.Binary(string="Kartu Nama", tracking=True, track_visibility="onchange") - file_npwp = fields.Binary(string="NPWP", tracking=True, track_visibility="onchange") - file_sppkp = fields.Binary(string="SPPKP", tracking=True, track_visibility="onchange") - file_suratPernyataan = fields.Binary(string="Surat Pernyataan Nomor Rekening", tracking=True, - track_visibility="onchange") - file_fotoKantor = fields.Binary(string="Foto Gudang / Kantor Bagian Depan", tracking=True, - track_visibility="onchange") - file_dataProduk = fields.Binary(string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=True, - track_visibility="onchange") - file_pricelist = fields.Binary(string="Pricelist", tracking=True, track_visibility="onchange") - description = fields.Text(string='Deskripsi') + category_produk_ids_merchant = fields.Many2many( + 'product.public.category', + string='Kategori Produk Merchant', + domain=lambda self: self._get_default_category_domain(), + relation='res_partner_category_produk_ids_merchant_rel' # Nama tabel relasi berbeda + ) + + @api.model + def _get_default_category_domain(self): + return [('parent_id', '=', False)] + + merk_dagang = fields.Char(string='Merk Dagang') + is_pengajuan_tempo = fields.Boolean(string='Apakah anda memiliki Form Pengajuan Tempo?') + tempo_duration_merchant = fields.Many2one('account.payment.term', string='Durasi Tempo') + kredit_limit = fields.Char(string='Kredit Limit') + waktu_pengiriman = fields.Char(string='Waktu Pengiriman') + terhitung_sejak = fields.Selection([ + ('1', 'Terima PO'), + ('2', 'Barang Dikirimkan'), + ('3', 'Tukar Faktur'), + ]) + + # syarat dagang + is_kembali_barang = fields.Char(string='Syarat Pengembalian Barang') + tenggat_waktu = fields.Char(string='Tenggat Waktu Perubahan Harga') + sertifikat_produk = fields.Char(string='Dokumen/Sertifikat yang Dimiliki Oleh Brand') + custom_sertifikat_produk = fields.Char(string='Dokumen/Sertifikat Lainnya') + tempo_garansi = fields.Selection([ + ('1', '6 Bulan Garansi'), + ('2', '1 Tahun Garansi'), + ('3', '2 Tahun Garansi'), + ]) + explain_garansi = fields.Char(string='Garansi Yang Dimaksudkan') + is_order_quantity = fields.Char(string='Apakah Memiliki Minimum Order Quantity (MOQ)') + + # dokumen + file_npwp = fields.Many2one('ir.attachment', string="NPWP Perusahaan", tracking=3) + file_sppkp = fields.Many2one('ir.attachment', string="SPPKP Perusahaan", tracking=3) + file_dokumenKtpDirut = fields.Many2one('ir.attachment', string="KTP Dirut/Direktur", tracking=3) + file_kartuNama = fields.Many2one('ir.attachment', string="Kartu Nama", tracking=3) + file_suratPernyataan = fields.Many2one('ir.attachment', string="Surat Pernyataan Nomor Rekening", tracking=3) + file_fotoKantor = fields.Many2one('ir.attachment', string="Foto Gudang / Kantor Bagian Depan", tracking=3) + file_dataProduk = fields.Many2one('ir.attachment', string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=3) + file_pricelist = fields.Many2one('ir.attachment', string="Pricelist", tracking=3) @api.model def _default_payment_term(self): @@ -323,9 +355,12 @@ class ResPartner(models.Model): vals['dokumen_foto_kantor'] = vals.get('dokumen_foto_kantor', self.dokumen_foto_kantor) vals['dokumen_tempat_bekerja'] = vals.get('dokumen_tempat_bekerja', self.dokumen_tempat_bekerja) - # Merchant + # MERCHANT + # Informasi Perusahaan vals['name_merchant'] = vals.get('name_merchant', self.name_merchant) + vals['pejabat_name'] = vals.get('pejabat_name', self.pejabat_name) vals['pic_merchant'] = vals.get('pic_merchant', self.pic_merchant) + vals['pic_position'] = vals.get('pic_position', self.pic_position) vals['address_merchant'] = vals.get('address_merchant', self.address_merchant) vals['state_merchant'] = vals.get('state_merchant', self.state_merchant) vals['city_merchant'] = vals.get('city_merchant', self.city_merchant) @@ -340,7 +375,30 @@ class ResPartner(models.Model): vals['email_finance_merchant'] = vals.get('email_finance_merchant', self.email_finance_merchant) vals['phone_merchant'] = vals.get('phone_merchant', self.phone_merchant) vals['mobile_merchant'] = vals.get('mobile_merchant', self.mobile_merchant) + vals['bisnis_type'] = vals.get('bisnis_type', self.bisnis_type) + vals['website_merchant'] = vals.get('website_merchant', self.website_merchant) + vals['category_perusahaan'] = vals.get('category_perusahaan', self.category_perusahaan) + + # Informasi Vendor vals['harga_tayang'] = vals.get('harga_tayang', self.harga_tayang) + vals['category_produk_ids_merchant'] = vals.get('category_produk_ids_merchant', self.category_produk_ids_merchant) + vals['merk_dagang'] = vals.get('merk_dagang', self.merk_dagang) + vals['is_pengajuan_tempo'] = vals.get('is_pengajuan_tempo', self.is_pengajuan_tempo) + vals['tempo_duration_merchant'] = vals.get('tempo_duration_merchant', self.tempo_duration_merchant) + vals['kredit_limit'] = vals.get('kredit_limit', self.kredit_limit) + vals['waktu_pengiriman'] = vals.get('waktu_pengiriman', self.waktu_pengiriman) + vals['terhitung_sejak'] = vals.get('terhitung_sejak', self.terhitung_sejak) + + # Syarat Dagang + vals['is_kembali_barang'] = vals.get('is_kembali_barang', self.is_kembali_barang) + vals['tenggat_waktu'] = vals.get('tenggat_waktu', self.tenggat_waktu) + vals['sertifikat_produk'] = vals.get('sertifikat_produk', self.sertifikat_produk) + vals['custom_sertifikat_produk'] = vals.get('custom_sertifikat_produk', self.custom_sertifikat_produk) + vals['tempo_garansi'] = vals.get('tempo_garansi', self.tempo_garansi) + vals['explain_garansi'] = vals.get('explain_garansi', self.explain_garansi) + vals['is_order_quantity'] = vals.get('is_order_quantity', self.is_order_quantity) + + # Dokumen vals['file_dokumenKtpDirut'] = vals.get('file_dokumenKtpDirut', self.file_dokumenKtpDirut) vals['file_kartuNama'] = vals.get('file_kartuNama', self.file_kartuNama) vals['file_npwp'] = vals.get('file_npwp', self.file_npwp) @@ -423,6 +481,9 @@ class ResPartner(models.Model): # Merchant 'name_merchant': vals.get('name_merchant'), + 'pejabat_name': vals.get('pejabat_name'), + 'pic_merchant': vals.get('pic_merchant'), + 'pic_position': vals.get('pic_position'), 'address_merchant': vals.get('address_merchant'), 'state_merchant': vals.get('state_merchant'), 'city_merchant': vals.get('city_merchant'), @@ -437,12 +498,33 @@ class ResPartner(models.Model): 'email_finance_merchant': vals.get('email_finance_merchant'), 'phone_merchant': vals.get('phone_merchant'), 'mobile_merchant': vals.get('mobile_merchant'), + 'bisnis_type': vals.get('bisnis_type'), + 'website_merchant': vals.get('website_merchant'), + 'category_perusahaan': vals.get('category_perusahaan'), + 'harga_tayang': vals.get('harga_tayang'), + 'category_produk_ids_merchant': vals.get('category_produk_ids_merchant'), + 'merk_dagang': vals.get('merk_dagang'), + 'is_pengajuan_tempo': vals.get('is_pengajuan_tempo'), + 'tempo_duration_merchant': vals.get('tempo_duration_merchant'), + 'kredit_limit': vals.get('kredit_limit'), + 'waktu_pengiriman': vals.get('waktu_pengiriman'), + 'terhitung_sejak': vals.get('terhitung_sejak'), + 'is_kembali_barang': vals.get('is_kembali_barang'), + 'tenggat_waktu': vals.get('tenggat_waktu'), + 'sertifikat_produk': vals.get('sertifikat_produk'), + 'custom_sertifikat_produk': vals.get('custom_sertifikat_produk'), + 'tempo_garansi': vals.get('tempo_garansi'), + 'explain_garansi': vals.get('explain_garansi'), + 'is_order_quantity': vals.get('is_order_quantity'), + 'file_dokumenKtpDirut': vals.get('file_dokumenKtpDirut'), 'file_kartuNama': vals.get('file_kartuNama'), 'file_npwp': vals.get('file_npwp'), 'file_sppkp': vals.get('file_sppkp'), 'file_suratPernyataan': vals.get('file_suratPernyataan'), 'file_fotoKantor': vals.get('file_fotoKantor'), + 'file_dataProduk': vals.get('file_dataProduk'), + 'file_pricelist': vals.get('file_pricelist'), 'description': vals.get('description'), } diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py index 6d881621..a804e93f 100644 --- a/indoteknik_custom/models/user_form_merchant.py +++ b/indoteknik_custom/models/user_form_merchant.py @@ -52,7 +52,6 @@ class UserFormMerchant(models.Model): def _get_default_category_domain(self): return [('parent_id', '=', False)] - merk_dagang = fields.Char(string='Merk Dagang') is_pengajuan_tempo = fields.Boolean(string='Apakah anda memiliki Form Pengajuan Tempo?') tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') @@ -64,8 +63,6 @@ class UserFormMerchant(models.Model): ('3', 'Tukar Faktur'), ]) - - # syarat dagang is_kembali_barang = fields.Char(string='Syarat Pengembalian Barang') tenggat_waktu = fields.Char(string='Tenggat Waktu Perubahan Harga') @@ -79,7 +76,6 @@ class UserFormMerchant(models.Model): explain_garansi = fields.Char(string='Garansi Yang Dimaksudkan') is_order_quantity = fields.Char(string='Apakah Memiliki Minimum Order Quantity (MOQ)') - # dokumen file_npwp = fields.Many2one('ir.attachment', string="NPWP Perusahaan", tracking=3) file_sppkp = fields.Many2one('ir.attachment', string="SPPKP Perusahaan", tracking=3) diff --git a/indoteknik_custom/models/user_merchant_request.py b/indoteknik_custom/models/user_merchant_request.py index a373a771..dd571cdc 100644 --- a/indoteknik_custom/models/user_merchant_request.py +++ b/indoteknik_custom/models/user_merchant_request.py @@ -72,7 +72,9 @@ class UserMerchantRequest(models.Model): if is_approve: # Informasi Perusahaan self.user_company_id.name_merchant = self.merchant_id.name_merchant + self.user_company_id.pejabat_name = self.merchant_id.pejabat_name self.user_company_id.pic_merchant = self.merchant_id.pic_merchant + self.user_company_id.pic_position = self.merchant_id.pic_position self.user_company_id.address_merchant = self.merchant_id.address self.user_company_id.state_merchant = self.merchant_id.state self.user_company_id.city_merchant = self.merchant_id.city @@ -87,11 +89,33 @@ class UserMerchantRequest(models.Model): self.user_company_id.email_finance_merchant = self.merchant_id.email_finance self.user_company_id.phone_merchant = self.merchant_id.phone self.user_company_id.mobile_merchant = self.merchant_id.mobile + self.user_company_id.bisnis_type = self.merchant_id.bisnis_type + self.user_company_id.website_merchant = self.merchant_id.website + self.user_company_id.category_perusahaan = self.merchant_id.category_perusahaan + + # Informasi Vendor self.user_company_id.harga_tayang = self.merchant_id.harga_tayang - self.user_company_id.file_dokumenKtpDirut = self.merchant_id.file_dokumenKtpDirut - self.user_company_id.file_kartuNama = self.merchant_id.file_kartuNama + self.user_company_id.category_produk_ids_merchant = self.merchant_id.category_produk_ids + self.user_company_id.merk_dagang = self.merchant_id.merk_dagang + self.user_company_id.is_pengajuan_tempo = self.merchant_id.is_pengajuan_tempo + self.user_company_id.tempo_duration_merchant = self.merchant_id.tempo_duration + self.user_company_id.kredit_limit = self.merchant_id.kredit_limit + self.user_company_id.waktu_pengiriman = self.merchant_id.waktu_pengiriman + self.user_company_id.terhitung_sejak = self.merchant_id.terhitung_sejak + + # Syarat Perdagangan + self.user_company_id.is_kembali_barang = self.merchant_id.is_kembali_barang + self.user_company_id.tenggat_waktu = self.merchant_id.tenggat_waktu + self.user_company_id.sertifikat_produk = self.merchant_id.sertifikat_produk + self.user_company_id.tempo_garansi = self.merchant_id.tempo_garansi + self.user_company_id.explain_garansi = self.merchant_id.explain_garansi + self.user_company_id.is_order_quantity = self.merchant_id.is_order_quantity + + # Dokumen self.user_company_id.file_npwp = self.merchant_id.file_npwp self.user_company_id.file_sppkp = self.merchant_id.file_sppkp + self.user_company_id.file_dokumenKtpDirut = self.merchant_id.file_dokumenKtpDirut + self.user_company_id.file_kartuNama = self.merchant_id.file_kartuNama self.user_company_id.file_suratPernyataan = self.merchant_id.file_suratPernyataan self.user_company_id.file_fotoKantor = self.merchant_id.file_fotoKantor self.user_company_id.file_dataProduk = self.merchant_id.file_dataProduk diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 863b8514..1f497f7a 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -224,7 +224,7 @@ - + -- cgit v1.2.3 From 992619cde1b7d19ce29db2cd314e8b62c8bec978 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 22 Jan 2025 13:16:27 +0700 Subject: update tampilan merchant --- indoteknik_custom/views/res_partner.xml | 46 ++++++++++++++++++-------- indoteknik_custom/views/user_form_merchant.xml | 14 ++++---- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 1f497f7a..19d4b940 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -190,40 +190,58 @@ - + + + - - + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - diff --git a/indoteknik_custom/views/user_form_merchant.xml b/indoteknik_custom/views/user_form_merchant.xml index cd3f1de3..ae5a0f9f 100644 --- a/indoteknik_custom/views/user_form_merchant.xml +++ b/indoteknik_custom/views/user_form_merchant.xml @@ -98,12 +98,12 @@ - + + + + + + + \ No newline at end of file -- cgit v1.2.3 From a571531bd8626f9bee25e89c62bbd9268ed30597 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 22 Jan 2025 16:32:48 +0700 Subject: add checj progres merchant --- indoteknik_api/controllers/api_v1/lead.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index f2793838..e81a2781 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -218,3 +218,17 @@ class Lead(controller.Controller): 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') \ No newline at end of file -- cgit v1.2.3 From 5ed0f18e6cdac093a8450de6d836ff179f9e1cf9 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 16 May 2025 08:45:39 +0700 Subject: no message --- indoteknik_api/controllers/api_v1/lead.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index e81a2781..389f36b8 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -77,13 +77,13 @@ class Lead(controller.Controller): "custom_sertifikat_produk": [], # # dokumen - # - # "file_npwp": [], - # "file_sppkp": [], - # "file_dokumenKtpDirut ": [], - # "file_kartuNama": [], - # "file_suratPernyataan": [], - # "file_fotoKantor": [], + + "file_npwp": [], + "file_sppkp": [], + "file_dokumenKtpDirut ": [], + "file_kartuNama": [], + "file_suratPernyataan": [], + "file_fotoKantor": [], # "file_dataProduk": [], # "file_pricelist": [], }) -- cgit v1.2.3 From 558130bbf48c33ddfa6080450c80bc8801a570f0 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 22 May 2025 15:34:03 +0700 Subject: form-merchant & quotation tampilan --- indoteknik_api/controllers/api_v1/sale_order.py | 24 ++++++++++++++ indoteknik_api/controllers/api_v1/user.py | 4 ++- indoteknik_custom/models/sale_order.py | 43 ++++++++++++++++++++++++- indoteknik_custom/views/sale_order.xml | 1 + 4 files changed, 70 insertions(+), 2 deletions(-) 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' diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 0d4fc6c3..6ccb6fde 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -303,6 +303,12 @@ class SaleOrder(models.Model): ('approve', 'Approve') ], tracking=True, string='State Cancel', copy=False) + ready_to_ship_status_detail = fields.Char( + string='Status Shipping Detail', + compute='_compute_ready_to_ship_status_detail' + ) + + def _compute_total_margin_excl_third_party(self): for order in self: if order.amount_untaxed == 0: @@ -1939,4 +1945,39 @@ class SaleOrder(models.Model): self._validate_delivery_amt() if any(field in vals for field in ["order_line", "client_order_ref"]): self._calculate_etrts_date() - return res \ No newline at end of file + return res + + # @api.depends('commitment_date') + def _compute_ready_to_ship_status_detail(self): + for order in self: + eta = order.commitment_date + + match_lines = self.env['purchase.order.sales.match'].search([ + ('sale_id', '=', order.id) + ]) + + if match_lines: + for match in match_lines: + po = match.purchase_order_id + product = match.product_id + + po_line = self.env['purchase.order.line'].search([ + ('order_id', '=', po.id), + ('product_id', '=', product.id) + ], limit=1) + + stock_move = self.env['stock.move'].search([ + ('purchase_line_id', '=', po_line.id) + ], limit=1) + picking_in = stock_move.picking_id + + result_date = picking_in.date_done if picking_in else None + if result_date: + status = "Early" if result_date < eta else "Delay" + result_date_str = result_date.strftime('%m/%d/%Y') + eta_str = eta.strftime('%m/%d/%Y') + order.ready_to_ship_status_detail = f"Expected: {eta_str} | Realtime: {result_date_str} | {status}" + else: + order.ready_to_ship_status_detail = "On Track" + else: + order.ready_to_ship_status_detail = 'On Track' \ No newline at end of file diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index e0085eeb..5af3f4a2 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -102,6 +102,7 @@ + -- cgit v1.2.3 From 46e4c80e1b530274c01cca5603f3e1be873820f6 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Fri, 23 May 2025 09:21:45 +0700 Subject: bf cant create invoice cause of custom method action assign wrong implement --- indoteknik_custom/models/stock_picking.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 3135f41c..504338b0 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -1013,15 +1013,15 @@ class StockPicking(models.Model): self.sale_id.date_doc_kirim = self.date_doc_kirim def action_assign(self): - if self.sale_id.hold_outgoing and self.location_id.id == 57 and self.location_dest_id.id == 60: - print(1) - else: - res = super(StockPicking, self).action_assign() + res = super(StockPicking, self).action_assign() + for move in self: + # if not move.sale_id.hold_outgoing and move.location_id.id != 57 and move.location_dest_id.id != 60: + # TODO cant skip hold outgoing cause of not singleton method current_time = datetime.datetime.utcnow() - self.real_shipping_id = self.sale_id.real_shipping_id - self.date_availability = current_time + move.real_shipping_id = move.sale_id.real_shipping_id + move.date_availability = current_time # self.check_state_reserve() - return res + return res def ask_approval(self): if self.env.user.is_accounting: -- cgit v1.2.3 From 4fc520a9b0d1e2e809033b35562fd80fffad472d Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Fri, 23 May 2025 09:37:45 +0700 Subject: Revert "bf cant create invoice cause of custom method action assign wrong implement" This reverts commit 46e4c80e1b530274c01cca5603f3e1be873820f6. --- indoteknik_custom/models/stock_picking.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 504338b0..3135f41c 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -1013,15 +1013,15 @@ class StockPicking(models.Model): self.sale_id.date_doc_kirim = self.date_doc_kirim def action_assign(self): - res = super(StockPicking, self).action_assign() - for move in self: - # if not move.sale_id.hold_outgoing and move.location_id.id != 57 and move.location_dest_id.id != 60: - # TODO cant skip hold outgoing cause of not singleton method + if self.sale_id.hold_outgoing and self.location_id.id == 57 and self.location_dest_id.id == 60: + print(1) + else: + res = super(StockPicking, self).action_assign() current_time = datetime.datetime.utcnow() - move.real_shipping_id = move.sale_id.real_shipping_id - move.date_availability = current_time + self.real_shipping_id = self.sale_id.real_shipping_id + self.date_availability = current_time # self.check_state_reserve() - return res + return res def ask_approval(self): if self.env.user.is_accounting: -- cgit v1.2.3 From dbf09bbf792809e84d2d0330a992e42b3a5c6994 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Fri, 23 May 2025 09:38:02 +0700 Subject: Revert "Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into odoo-backup" This reverts commit 43313db30da73b87843425c01c723f66ee982886, reversing changes made to f6f59e660af6c4229ada54f7313d68867df1ba15. --- indoteknik_custom/models/automatic_purchase.py | 45 ++++++--------------- indoteknik_custom/models/product_template.py | 6 +-- .../models/sale_advance_payment_inv.py | 1 - indoteknik_custom/models/sale_order.py | 46 +++++----------------- indoteknik_custom/models/stock_picking.py | 3 +- indoteknik_custom/views/sale_order.xml | 15 ++++--- indoteknik_custom/views/stock_picking.xml | 1 - .../views/user_pengajuan_tempo_request.xml | 2 +- 8 files changed, 34 insertions(+), 85 deletions(-) diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py index ff10b814..b66121e1 100644 --- a/indoteknik_custom/models/automatic_purchase.py +++ b/indoteknik_custom/models/automatic_purchase.py @@ -696,42 +696,21 @@ class SaleNotInMatchPO(models.Model): purchase_tax_id = fields.Many2one('account.tax', string='Purchase Tax') note_procurement = fields.Many2one(string='Note Procurement') - # 1. yang bug - # def init(self): - # tools.drop_view_if_exists(self.env.cr, self._table) - # self.env.cr.execute(""" - # CREATE OR REPLACE VIEW %s AS( - # select apsm.id, apsm.automatic_purchase_id, apsm.automatic_purchase_line_id, apsm.sale_id, apsm.sale_line_id, - # apsm.picking_id, apsm.move_id, apsm.partner_id, - # apsm.partner_invoice_id, apsm.salesperson_id, apsm.product_id, apsm.qty_so, apsm.qty_po, apsm.create_uid, - # apsm.create_date, apsm.write_uid, apsm.write_date, apsm.purchase_price, - # apsm.purchase_tax_id, apsm.note_procurement - # from automatic_purchase_sales_match apsm - # where apsm.sale_line_id not in ( - # select distinct coalesce(posm.sale_line_id,0) - # from purchase_order_sales_match posm - # join purchase_order po on po.id = posm.purchase_order_id - # where po.state not in ('cancel') - # ) - # ) - # """ % self._table) - def init(self): tools.drop_view_if_exists(self.env.cr, self._table) self.env.cr.execute(""" CREATE OR REPLACE VIEW %s AS( - SELECT apsm.id, apsm.automatic_purchase_id, apsm.automatic_purchase_line_id, - apsm.sale_id, apsm.sale_line_id, apsm.picking_id, apsm.move_id, - apsm.partner_id, apsm.partner_invoice_id, apsm.salesperson_id, - apsm.product_id, apsm.qty_so, apsm.qty_po, apsm.create_uid, - apsm.create_date, apsm.write_uid, apsm.write_date, apsm.purchase_price, - apsm.purchase_tax_id, apsm.note_procurement - FROM automatic_purchase_sales_match apsm - WHERE apsm.sale_line_id NOT IN ( - SELECT posm.sale_line_id - FROM purchase_order_sales_match posm - JOIN purchase_order po ON po.id = posm.purchase_order_id - WHERE po.state NOT IN ('cancel') + select apsm.id, apsm.automatic_purchase_id, apsm.automatic_purchase_line_id, apsm.sale_id, apsm.sale_line_id, + apsm.picking_id, apsm.move_id, apsm.partner_id, + apsm.partner_invoice_id, apsm.salesperson_id, apsm.product_id, apsm.qty_so, apsm.qty_po, apsm.create_uid, + apsm.create_date, apsm.write_uid, apsm.write_date, apsm.purchase_price, + apsm.purchase_tax_id, apsm.note_procurement + from automatic_purchase_sales_match apsm + where apsm.sale_line_id not in ( + select distinct coalesce(posm.sale_line_id,0) + from purchase_order_sales_match posm + join purchase_order po on po.id = posm.purchase_order_id + where po.state not in ('cancel') ) ) - """ % self._table) \ No newline at end of file + """ % self._table) diff --git a/indoteknik_custom/models/product_template.py b/indoteknik_custom/models/product_template.py index 89392033..17805c6c 100755 --- a/indoteknik_custom/models/product_template.py +++ b/indoteknik_custom/models/product_template.py @@ -870,9 +870,9 @@ class ProductTemplate(models.Model): record.message_post(body=f"Updated:
    {''.join(changes)}
") # log changes to product variants - # variant_message = f"Updated:
    {''.join(changes)}
" - # for variant in record.product_variant_ids: - # variant.message_post(body=variant_message) + variant_message = f"Updated:
    {''.join(changes)}
" + for variant in record.product_variant_ids: + variant.message_post(body=variant_message) # simpan data lama dan log perubahan field def write(self, vals): diff --git a/indoteknik_custom/models/sale_advance_payment_inv.py b/indoteknik_custom/models/sale_advance_payment_inv.py index 48b753cc..bea9a900 100644 --- a/indoteknik_custom/models/sale_advance_payment_inv.py +++ b/indoteknik_custom/models/sale_advance_payment_inv.py @@ -197,7 +197,6 @@ class SaleAdvancePaymentInv(models.TransientModel): # if final: # moves.sudo().filtered(lambda m: m.amount_total < 0).action_switch_invoice_into_refund_credit_note() # for move in moves: - # move.message_post_with_view('mail.message_origin_link', # values={'self': move, 'origin': move.line_ids.mapped('sale_line_ids.order_id')}, # subtype_id=self.env.ref('mail.mt_note').id diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index db0e1227..6028a1d0 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -332,9 +332,9 @@ class SaleOrder(models.Model): ('approve', 'Approve') ], tracking=True, string='State Cancel', copy=False) date_hold = fields.Datetime(string='Date Hold', tracking=True, readonly=True, help='Waktu ketika SO di Hold' - ) + ) date_unhold = fields.Datetime(string='Date Unhold', tracking=True, readonly=True, help='Waktu ketika SO di Unhold' - ) + ) ready_to_ship_status_detail = fields.Char( string='Status Shipping Detail', @@ -379,7 +379,7 @@ class SaleOrder(models.Model): } } - def hold_unhold_qty_outgoing_so(self): + def hold_unhold_qty_outgoing_so(self): if self.hold_outgoing == True: self.hold_outgoing = False self.date_unhold = fields.Datetime.now() @@ -393,6 +393,7 @@ class SaleOrder(models.Model): picking.do_unreserve() self.hold_outgoing = True self.date_hold = fields.Datetime.now() + def _validate_uniform_taxes(self): for order in self: @@ -410,8 +411,8 @@ class SaleOrder(models.Model): # if rec.fee_third_party == 0 and rec.total_margin_excl_third_party != rec.total_percent_margin: # # Gunakan direct SQL atau flag context untuk menghindari rekursi # self.env.cr.execute(""" - # UPDATE sale_order - # SET total_margin_excl_third_party = %s + # UPDATE sale_order + # SET total_margin_excl_third_party = %s # WHERE id = %s # """, (rec.total_percent_margin, rec.id)) # self.invalidate_cache() @@ -1231,12 +1232,10 @@ class SaleOrder(models.Model): for order in self: for line in order.order_line: if 'bom-it' in line.name.lower() or 'bom' in line.product_id.default_code.lower() if line.product_id.default_code else False: - search_bom = self.env['mrp.production'].search( - [('product_id', '=', line.product_id.id), ('sale_order', '=', order.id), - ('state', '!=', 'cancel')], - order='name desc') + search_bom = self.env['mrp.production'].search([('product_id', '=', line.product_id.id), ('sale_order', '=', order.id), ('state', '!=', 'cancel')], + order='name desc') if search_bom: - confirmed_bom = search_bom.filtered(lambda x: x.state == 'confirmed' or x.state == 'done') + confirmed_bom = search_bom.filtered(lambda x: x.state == 'confirmed' or x.state == 'done') if not confirmed_bom: raise UserError( "Product BOM belum dikonfirmasi di Manufacturing Orders. Silakan hubungi MD.") @@ -1534,7 +1533,7 @@ class SaleOrder(models.Model): if not order.real_shipping_id: UserError('Real Delivery Address harus di isi') - + if not self.env.context.get('due_approve', []): if order.validate_partner_invoice_due(): return self._create_notification_action('Notification', @@ -2016,7 +2015,6 @@ class SaleOrder(models.Model): <<<<<<< HEAD self._calculate_etrts_date() return res -<<<<<<< HEAD ======= self._calculate_etrts_date() return res @@ -2056,27 +2054,3 @@ class SaleOrder(models.Model): else: order.ready_to_ship_status_detail = 'On Track' >>>>>>> CR/form-merchant -======= - - def write(self, vals): - # Cek apakah payment_term_id diubah dan SO sedang dalam approval - if 'payment_term_id' in vals and any( - order.approval_status in ['pengajuan1', 'pengajuan2', 'approved'] for order in self): - raise UserError( - "Payment Term tidak dapat diubah karena Sales Order sedang dalam proses approval atau sudah diapprove.") - - if 'payment_term_id' in vals: - for order in self: - partner = order.partner_id.parent_id or order.partner_id - customer_payment_term = partner.property_payment_term_id - - # Jika payment term yang diinput berbeda dengan payment term customer - if vals['payment_term_id'] != customer_payment_term.id: - raise UserError( - f"Payment Term berbeda pada Master Data Customer. " - f"Harap ganti ke '{customer_payment_term.name}' " - f"sesuai dengan payment term yang terdaftar pada customer." - ) - - return super(SaleOrder, self).write(vals) ->>>>>>> 46e4c80e1b530274c01cca5603f3e1be873820f6 diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 3135f41c..0071bb1a 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -288,7 +288,7 @@ class StockPicking(models.Model): self.ensure_one() if not self.name or not self.origin: return False - return f"{self.name}, {self.origin}" + return f"{self.name} {self.origin}" def _download_pod_photo(self, url): """Mengunduh foto POD dari URL""" @@ -584,7 +584,6 @@ class StockPicking(models.Model): self.lalamove_phone = phone self.lalamove_status = pod.get("status") self.lalamove_delivered_at = delivered_at_dt - self.driver_arrival_date = delivered_at_dt return data raise UserError("No delivered data found in Lalamove response.") diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index 2191acf4..92d13fa7 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -96,11 +96,11 @@ 1
- - - - - + + + + + <<<<<<< HEAD @@ -316,9 +316,8 @@ - {'readonly': ['|', ('approval_status', 'in', ['pengajuan1', 'pengajuan2', 'approved']), - ('state', 'not in', - ['cancel', 'draft'])]} + {'readonly': [('approval_status', '=', 'approved'), ('state', 'not in', + ['cancel', 'draft'])]} diff --git a/indoteknik_custom/views/stock_picking.xml b/indoteknik_custom/views/stock_picking.xml index 02959d69..ae77ab9a 100644 --- a/indoteknik_custom/views/stock_picking.xml +++ b/indoteknik_custom/views/stock_picking.xml @@ -19,7 +19,6 @@ - diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 898d5b2a..339ce8db 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -426,7 +426,7 @@ -- cgit v1.2.3 From f66710c029d678ecf580808b5aee3821c90d9598 Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Fri, 23 May 2025 09:38:49 +0700 Subject: Revert "Merge branch 'CR/form-merchant' into odoo-backup" This reverts commit f6f59e660af6c4229ada54f7313d68867df1ba15, reversing changes made to 68378dd2fb8d61b282a672ca0f09033d15d82283. --- indoteknik_api/controllers/api_v1/lead.py | 207 +--------------------- indoteknik_api/controllers/api_v1/sale_order.py | 24 --- indoteknik_api/controllers/api_v1/user.py | 4 +- indoteknik_api/models/res_partner.py | 95 ---------- indoteknik_custom/__manifest__.py | 2 - indoteknik_custom/models/__init__.py | 2 - indoteknik_custom/models/res_partner.py | 184 +------------------ indoteknik_custom/models/sale_order.py | 46 ----- indoteknik_custom/models/user_form_merchant.py | 98 ---------- indoteknik_custom/models/user_merchant_request.py | 125 ------------- indoteknik_custom/security/ir.model.access.csv | 4 - indoteknik_custom/views/res_partner.xml | 60 ------- indoteknik_custom/views/sale_order.xml | 13 -- indoteknik_custom/views/user_form_merchant.xml | 109 ------------ indoteknik_custom/views/user_merchant_request.xml | 112 ------------ 15 files changed, 3 insertions(+), 1082 deletions(-) delete mode 100644 indoteknik_custom/models/user_form_merchant.py delete mode 100644 indoteknik_custom/models/user_merchant_request.py delete mode 100644 indoteknik_custom/views/user_form_merchant.xml delete mode 100644 indoteknik_custom/views/user_merchant_request.xml diff --git a/indoteknik_api/controllers/api_v1/lead.py b/indoteknik_api/controllers/api_v1/lead.py index 389f36b8..d5cc7c5c 100644 --- a/indoteknik_api/controllers/api_v1/lead.py +++ b/indoteknik_api/controllers/api_v1/lead.py @@ -1,9 +1,6 @@ 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) @@ -29,206 +26,4 @@ class Lead(controller.Controller): 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') \ No newline at end of file + return self.response(True) \ 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 d5208fb1..98b13cad 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -54,20 +54,6 @@ 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 @@ -79,7 +65,6 @@ 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, @@ -157,15 +142,6 @@ 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 967bbcc9..b5b7e055 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -60,9 +60,7 @@ class User(controller.Controller): 'user': self.response_with_token(user), } return self.response(data) - except Exception as e: - respon = str(e) - print(respon) + except: return self.response({ 'is_auth': False, 'reason': 'NOT_FOUND' diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index 2cebab83..3a98f3bc 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -175,99 +175,4 @@ class ResPartner(models.Model): } if pengajuan_tempo.dokumen_tempat_bekerja else '', } - return data - - def api_single_response_merchant(self, form_merchant, with_detail=''): - sertifikat = [ - ['TKDN', '0'], - ['SNI', '1'], - ['K3L', '2'], - ] - dokumen_sertifikat = [] - if form_merchant.sertifikat_produk: - form_merchant_dokumen_sertifikat = form_merchant.sertifikat_produk - mapping_dokumen = {item[0]: item[1] for item in sertifikat} - dokumen_pengiriman_list = [dokumen.strip() for dokumen in form_merchant_dokumen_sertifikat.split(',')] - dokumen_sertifikat = [mapping_dokumen.get(dokumen, '3') for dokumen in dokumen_pengiriman_list] - data = { - 'name_merchant' : form_merchant.name_merchant, - 'pejabat_name' : form_merchant.pejabat_name, - 'pic_merchant' : form_merchant.pic_merchant, - 'pic_position' : form_merchant.pic_position, - 'address' : form_merchant.address, - 'state' : form_merchant.state.id, - 'city' : form_merchant.city.id, - 'district' : form_merchant.district.id, - 'subDistrict' : form_merchant.subDistrict.id, - 'zip' : form_merchant.zip, - 'bank_name' : form_merchant.bank_name, - 'rekening_name' : form_merchant.rekening_name, - 'account_number' : form_merchant.account_number, - 'email_company' : form_merchant.email_company, - 'email_sales' : form_merchant.email_sales, - 'email_finance' : form_merchant.email_finance, - 'phone' : form_merchant.phone, - 'mobile' : form_merchant.mobile, - 'bisnis_type' : form_merchant.bisnis_type, - 'category_perusahaan': form_merchant.category_perusahaan, - 'website' : form_merchant.website, - - # informasi Vendor - 'harga_tayang' : form_merchant.harga_tayang, - 'category_produk': ','.join([str(cat.id) for cat in form_merchant.category_produk_ids]) if form_merchant.category_produk_ids else '', - 'merk_dagang' : form_merchant.merk_dagang, - 'is_pengajuan_tempo' : 'ada' if form_merchant.is_pengajuan_tempo else 'tidak', - 'tempo_duration' : form_merchant.tempo_duration.id, - 'kredit_limit' : form_merchant.kredit_limit, - 'waktu_pengiriman' : form_merchant.waktu_pengiriman, - 'terhitung_sejak' : form_merchant.terhitung_sejak, - - - # syarat perdagangan - 'is_kembali_barang': 'tidak' if form_merchant.is_kembali_barang == 'Tidak dapat direturn' else 'ya', - 'text_return': form_merchant.is_kembali_barang if form_merchant.is_kembali_barang != 'Tidak dapat direturn' else '', - 'tenggat_waktu': form_merchant.tenggat_waktu, - 'sertifikat_produk': ','.join(dokumen_sertifikat) if dokumen_sertifikat else '', - 'custom_sertifikat_produk': '' if form_merchant.custom_sertifikat_produk == 'false' else form_merchant.custom_sertifikat_produk, - 'tempo_garansi': form_merchant.tempo_garansi, - 'explain_garansi': form_merchant.explain_garansi, - 'is_order_quantity': 'ya' if form_merchant.is_order_quantity != 'Tidak ada minimum order quantity' else 'tidak', - 'minimum_pembelian': form_merchant.is_order_quantity, - - #dokumen - 'file_npwp': - { - 'name': form_merchant.file_npwp.name, - } if form_merchant.file_npwp else '', - 'file_sppkp': { - 'name': form_merchant.file_sppkp.name, - } if form_merchant.file_sppkp else '', - 'file_dokumenKtpDirut': - { - 'name': form_merchant.file_dokumenKtpDirut.name, - }if form_merchant.file_dokumenKtpDirut else '', - 'file_kartuNama': - { - 'name': form_merchant.file_kartuNama.name, - }if form_merchant.file_kartuNama else '', - 'file_suratPernyataan': - { - 'name': form_merchant.file_suratPernyataan.name, - }if form_merchant.file_suratPernyataan else '', - 'file_fotoKantor': - { - 'name': form_merchant.file_fotoKantor.name - }if form_merchant.file_fotoKantor else '', - 'file_dataProduk': - { - 'name': form_merchant.file_dataProduk.name, - }if form_merchant.file_dataProduk else '', - 'file_pricelist': { - 'name': form_merchant.file_pricelist.name, - } if form_merchant.file_pricelist else '', - - - - } - return data \ No newline at end of file diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index d93db041..9fe3dcdb 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -31,8 +31,6 @@ 'views/web_logging/web_utm_source.xml', 'views/user_company_request.xml', 'views/user_pengajuan_tempo_request.xml', - 'views/user_form_merchant.xml', - 'views/user_merchant_request.xml', 'views/vit_kelurahan.xml', 'views/vit_kecamatan.xml', 'views/vit_kota.xml', diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index e17f68d1..08fa9803 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -144,8 +144,6 @@ from . import stock_immediate_transfer from . import coretax_fatur from . import public_holiday from . import ir_actions_report -from . import user_form_merchant -from . import user_merchant_request from . import barcoding_product from . import sales_order_koli from . import stock_backorder_confirmation diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index ff07c94c..191a44c9 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -161,86 +161,6 @@ class ResPartner(models.Model): "this feature", tracking=3) telegram_id = fields.Char(string="Telegram") - # MERCHANT - # informasi perusahaan - name_merchant = fields.Char(string='Name') - pejabat_name = fields.Char(string='Pejabat Name') - pic_merchant = fields.Char(string='PIC Merchant', required=True) - pic_position = fields.Char(string='Jabatan PIC') - address_merchant = fields.Char(string='Alamat') - state_merchant = fields.Many2one('res.country.state', string='State') - city_merchant = fields.Many2one('vit.kota', string='Kota') - district_merchant = fields.Many2one('vit.kecamatan', string='Kecamatan') - subDistrict_merchant = fields.Many2one('vit.kelurahan', string='Kelurahan') - zip_merchant = fields.Char(string='Kode Pos') - bank_name_merchant = fields.Char(string='Nama Bank') - rekening_name_merchant = fields.Char(string='Nama Rekening') - account_number_merchant = fields.Char(string='Nomor Rekening Bank') - email_company_merchant = fields.Char(string='Email Perusahaan') - email_sales_merchant = fields.Char(string='Email Sales') - email_finance_merchant = fields.Char(string='Email Finance') - phone_merchant = fields.Char(string='No. Telepon Perusahaan') - mobile_merchant = fields.Char(string='No. Handphone') - bisnis_type = fields.Selection([ - ('1', 'PT'), - ('2', 'CV'), - ('3', 'Perorangan'), - ]) - website_merchant = fields.Char(string='Website') - category_perusahaan = fields.Selection([ - ('1', 'Principal (Pemegang merk/Produsen)'), - ('2', 'Sole Distributor (Distributor Tunggal)'), - ('3', 'Authorized Distributor (Distributor Resmi)'), - ('4', 'Importer (Pengimpor Barang)'), - ('5', 'Wholesaler (Pedagang Besar)'), - ]) - # Informasi Vendor - harga_tayang = fields.Char(string='Harga Tayang (HET)') - category_produk_ids_merchant = fields.Many2many( - 'product.public.category', - string='Kategori Produk Merchant', - domain=lambda self: self._get_default_category_domain(), - relation='res_partner_category_produk_ids_merchant_rel' # Nama tabel relasi berbeda - ) - - @api.model - def _get_default_category_domain(self): - return [('parent_id', '=', False)] - - merk_dagang = fields.Char(string='Merk Dagang') - is_pengajuan_tempo = fields.Boolean(string='Apakah anda memiliki Form Pengajuan Tempo?') - tempo_duration_merchant = fields.Many2one('account.payment.term', string='Durasi Tempo') - kredit_limit = fields.Char(string='Kredit Limit') - waktu_pengiriman = fields.Char(string='Waktu Pengiriman') - terhitung_sejak = fields.Selection([ - ('1', 'Terima PO'), - ('2', 'Barang Dikirimkan'), - ('3', 'Tukar Faktur'), - ]) - - # syarat dagang - is_kembali_barang = fields.Char(string='Syarat Pengembalian Barang') - tenggat_waktu = fields.Char(string='Tenggat Waktu Perubahan Harga') - sertifikat_produk = fields.Char(string='Dokumen/Sertifikat yang Dimiliki Oleh Brand') - custom_sertifikat_produk = fields.Char(string='Dokumen/Sertifikat Lainnya') - tempo_garansi = fields.Selection([ - ('1', '6 Bulan Garansi'), - ('2', '1 Tahun Garansi'), - ('3', '2 Tahun Garansi'), - ]) - explain_garansi = fields.Char(string='Garansi Yang Dimaksudkan') - is_order_quantity = fields.Char(string='Apakah Memiliki Minimum Order Quantity (MOQ)') - - # dokumen - file_npwp = fields.Many2one('ir.attachment', string="NPWP Perusahaan", tracking=3) - file_sppkp = fields.Many2one('ir.attachment', string="SPPKP Perusahaan", tracking=3) - file_dokumenKtpDirut = fields.Many2one('ir.attachment', string="KTP Dirut/Direktur", tracking=3) - file_kartuNama = fields.Many2one('ir.attachment', string="Kartu Nama", tracking=3) - file_suratPernyataan = fields.Many2one('ir.attachment', string="Surat Pernyataan Nomor Rekening", tracking=3) - file_fotoKantor = fields.Many2one('ir.attachment', string="Foto Gudang / Kantor Bagian Depan", tracking=3) - file_dataProduk = fields.Many2one('ir.attachment', string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=3) - file_pricelist = fields.Many2one('ir.attachment', string="Pricelist", tracking=3) - @api.model def _default_payment_term(self): return self.env.ref('__export__.account_payment_term_26_484409e2').id @@ -409,60 +329,6 @@ class ResPartner(models.Model): vals['dokumen_foto_kantor'] = vals.get('dokumen_foto_kantor', self.dokumen_foto_kantor) vals['dokumen_tempat_bekerja'] = vals.get('dokumen_tempat_bekerja', self.dokumen_tempat_bekerja) - # MERCHANT - # Informasi Perusahaan - vals['name_merchant'] = vals.get('name_merchant', self.name_merchant) - vals['pejabat_name'] = vals.get('pejabat_name', self.pejabat_name) - vals['pic_merchant'] = vals.get('pic_merchant', self.pic_merchant) - vals['pic_position'] = vals.get('pic_position', self.pic_position) - vals['address_merchant'] = vals.get('address_merchant', self.address_merchant) - vals['state_merchant'] = vals.get('state_merchant', self.state_merchant) - vals['city_merchant'] = vals.get('city_merchant', self.city_merchant) - vals['district_merchant'] = vals.get('district_merchant', self.district_merchant) - vals['subDistrict_merchant'] = vals.get('subDistrict_merchant', self.subDistrict_merchant) - vals['zip_merchant'] = vals.get('zip_merchant', self.zip_merchant) - vals['bank_name_merchant'] = vals.get('bank_name_merchant', self.bank_name_merchant) - vals['rekening_name_merchant'] = vals.get('rekening_name_merchant', self.rekening_name_merchant) - vals['account_number_merchant'] = vals.get('account_number_merchant', self.account_number_merchant) - vals['email_company_merchant'] = vals.get('email_company_merchant', self.email_company_merchant) - vals['email_sales_merchant'] = vals.get('email_sales_merchant', self.email_sales_merchant) - vals['email_finance_merchant'] = vals.get('email_finance_merchant', self.email_finance_merchant) - vals['phone_merchant'] = vals.get('phone_merchant', self.phone_merchant) - vals['mobile_merchant'] = vals.get('mobile_merchant', self.mobile_merchant) - vals['bisnis_type'] = vals.get('bisnis_type', self.bisnis_type) - vals['website_merchant'] = vals.get('website_merchant', self.website_merchant) - vals['category_perusahaan'] = vals.get('category_perusahaan', self.category_perusahaan) - - # Informasi Vendor - vals['harga_tayang'] = vals.get('harga_tayang', self.harga_tayang) - vals['category_produk_ids_merchant'] = vals.get('category_produk_ids_merchant', self.category_produk_ids_merchant) - vals['merk_dagang'] = vals.get('merk_dagang', self.merk_dagang) - vals['is_pengajuan_tempo'] = vals.get('is_pengajuan_tempo', self.is_pengajuan_tempo) - vals['tempo_duration_merchant'] = vals.get('tempo_duration_merchant', self.tempo_duration_merchant) - vals['kredit_limit'] = vals.get('kredit_limit', self.kredit_limit) - vals['waktu_pengiriman'] = vals.get('waktu_pengiriman', self.waktu_pengiriman) - vals['terhitung_sejak'] = vals.get('terhitung_sejak', self.terhitung_sejak) - - # Syarat Dagang - vals['is_kembali_barang'] = vals.get('is_kembali_barang', self.is_kembali_barang) - vals['tenggat_waktu'] = vals.get('tenggat_waktu', self.tenggat_waktu) - vals['sertifikat_produk'] = vals.get('sertifikat_produk', self.sertifikat_produk) - vals['custom_sertifikat_produk'] = vals.get('custom_sertifikat_produk', self.custom_sertifikat_produk) - vals['tempo_garansi'] = vals.get('tempo_garansi', self.tempo_garansi) - vals['explain_garansi'] = vals.get('explain_garansi', self.explain_garansi) - vals['is_order_quantity'] = vals.get('is_order_quantity', self.is_order_quantity) - - # Dokumen - vals['file_dokumenKtpDirut'] = vals.get('file_dokumenKtpDirut', self.file_dokumenKtpDirut) - vals['file_kartuNama'] = vals.get('file_kartuNama', self.file_kartuNama) - vals['file_npwp'] = vals.get('file_npwp', self.file_npwp) - vals['file_sppkp'] = vals.get('file_sppkp', self.file_sppkp) - vals['file_suratPernyataan'] = vals.get('file_suratPernyataan', self.file_suratPernyataan) - vals['file_fotoKantor'] = vals.get('file_fotoKantor', self.file_fotoKantor) - vals['file_dataProduk'] = vals.get('file_dataProduk', self.file_dataProduk) - vals['file_pricelist'] = vals.get('file_pricelist', self.file_pricelist) - vals['description'] = vals.get('description', self.description) - # Simpan hanya field yang perlu di-update pada child vals_for_child = { 'customer_type': vals.get('customer_type'), @@ -534,55 +400,7 @@ class ResPartner(models.Model): 'dokumen_tempat_bekerja': vals.get('dokumen_tempat_bekerja'), # internal_notes - 'comment': vals.get('comment'), - - # Merchant - 'name_merchant': vals.get('name_merchant'), - 'pejabat_name': vals.get('pejabat_name'), - 'pic_merchant': vals.get('pic_merchant'), - 'pic_position': vals.get('pic_position'), - 'address_merchant': vals.get('address_merchant'), - 'state_merchant': vals.get('state_merchant'), - 'city_merchant': vals.get('city_merchant'), - 'district_merchant': vals.get('district_merchant'), - 'subDistrict_merchant': vals.get('subDistrict_merchant'), - 'zip_merchant': vals.get('zip_merchant'), - 'bank_name_merchant': vals.get('bank_name_merchant'), - 'rekening_name_merchant': vals.get('rekening_name_merchant'), - 'account_number_merchant': vals.get('account_number_merchant'), - 'email_company_merchant': vals.get('email_company_merchant'), - 'email_sales_merchant': vals.get('email_sales_merchant'), - 'email_finance_merchant': vals.get('email_finance_merchant'), - 'phone_merchant': vals.get('phone_merchant'), - 'mobile_merchant': vals.get('mobile_merchant'), - 'bisnis_type': vals.get('bisnis_type'), - 'website_merchant': vals.get('website_merchant'), - 'category_perusahaan': vals.get('category_perusahaan'), - 'harga_tayang': vals.get('harga_tayang'), - 'category_produk_ids_merchant': vals.get('category_produk_ids_merchant'), - 'merk_dagang': vals.get('merk_dagang'), - 'is_pengajuan_tempo': vals.get('is_pengajuan_tempo'), - 'tempo_duration_merchant': vals.get('tempo_duration_merchant'), - 'kredit_limit': vals.get('kredit_limit'), - 'waktu_pengiriman': vals.get('waktu_pengiriman'), - 'terhitung_sejak': vals.get('terhitung_sejak'), - 'is_kembali_barang': vals.get('is_kembali_barang'), - 'tenggat_waktu': vals.get('tenggat_waktu'), - 'sertifikat_produk': vals.get('sertifikat_produk'), - 'custom_sertifikat_produk': vals.get('custom_sertifikat_produk'), - 'tempo_garansi': vals.get('tempo_garansi'), - 'explain_garansi': vals.get('explain_garansi'), - 'is_order_quantity': vals.get('is_order_quantity'), - - 'file_dokumenKtpDirut': vals.get('file_dokumenKtpDirut'), - 'file_kartuNama': vals.get('file_kartuNama'), - 'file_npwp': vals.get('file_npwp'), - 'file_sppkp': vals.get('file_sppkp'), - 'file_suratPernyataan': vals.get('file_suratPernyataan'), - 'file_fotoKantor': vals.get('file_fotoKantor'), - 'file_dataProduk': vals.get('file_dataProduk'), - 'file_pricelist': vals.get('file_pricelist'), - 'description': vals.get('description'), + 'comment': vals.get('comment') } # Lakukan update pada semua child secara rekursif diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 6028a1d0..bdf8f1eb 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -336,12 +336,6 @@ class SaleOrder(models.Model): date_unhold = fields.Datetime(string='Date Unhold', tracking=True, readonly=True, help='Waktu ketika SO di Unhold' ) - ready_to_ship_status_detail = fields.Char( - string='Status Shipping Detail', - compute='_compute_ready_to_ship_status_detail' - ) - - def _compute_total_margin_excl_third_party(self): for order in self: if order.amount_untaxed == 0: @@ -2012,45 +2006,5 @@ class SaleOrder(models.Model): if any(fields in vals for fields in ['delivery_amt', 'carrier_id', 'shipping_cost_covered']): self._validate_delivery_amt() if any(field in vals for field in ["order_line", "client_order_ref"]): -<<<<<<< HEAD self._calculate_etrts_date() return res -======= - self._calculate_etrts_date() - return res - - # @api.depends('commitment_date') - def _compute_ready_to_ship_status_detail(self): - for order in self: - eta = order.commitment_date - - match_lines = self.env['purchase.order.sales.match'].search([ - ('sale_id', '=', order.id) - ]) - - if match_lines: - for match in match_lines: - po = match.purchase_order_id - product = match.product_id - - po_line = self.env['purchase.order.line'].search([ - ('order_id', '=', po.id), - ('product_id', '=', product.id) - ], limit=1) - - stock_move = self.env['stock.move'].search([ - ('purchase_line_id', '=', po_line.id) - ], limit=1) - picking_in = stock_move.picking_id - - result_date = picking_in.date_done if picking_in else None - if result_date: - status = "Early" if result_date < eta else "Delay" - result_date_str = result_date.strftime('%m/%d/%Y') - eta_str = eta.strftime('%m/%d/%Y') - order.ready_to_ship_status_detail = f"Expected: {eta_str} | Realtime: {result_date_str} | {status}" - else: - order.ready_to_ship_status_detail = "On Track" - else: - order.ready_to_ship_status_detail = 'On Track' ->>>>>>> CR/form-merchant diff --git a/indoteknik_custom/models/user_form_merchant.py b/indoteknik_custom/models/user_form_merchant.py deleted file mode 100644 index a804e93f..00000000 --- a/indoteknik_custom/models/user_form_merchant.py +++ /dev/null @@ -1,98 +0,0 @@ -from odoo import models, fields, api -from odoo.exceptions import UserError -from odoo.http import request - - -class UserFormMerchant(models.Model): - _name = 'user.form.merchant' - _inherit = ['mail.thread', 'mail.activity.mixin'] - - name = fields.Char(string='Name') - # informasi peruhsaan - name_merchant = fields.Char(string='Name') - pejabat_name = fields.Char(string='Pejabat Name') - pic_merchant = fields.Char(string='PIC Merchant') - pic_position = fields.Char(string='Jabatan PIC') - partner_id = fields.Many2one('res.partner', string='Company') - address = fields.Char(string='Alamat') - state = fields.Many2one('res.country.state', string='State') - city = fields.Many2one('vit.kota', string='Kota') - district = fields.Many2one('vit.kecamatan', string='Kecamatan') - subDistrict = fields.Many2one('vit.kelurahan', string='Kelurahan') - zip = fields.Char(string='Kode Pos') - bank_name = fields.Char(string='Nama Bank') - rekening_name = fields.Char(string='Nama Rekening') - account_number = fields.Char(string='Nomor Rekening Bank') - email_company = fields.Char(string='Email Perusahaan') - email_sales = fields.Char(string='Email Sales') - email_finance = fields.Char(string='Email Finance') - phone = fields.Char(string='No. Telepon Perusahaan') - mobile = fields.Char(string='No. Handphone') - bisnis_type = fields.Selection([ - ('1', 'PT'), - ('2', 'CV'), - ('3', 'Perorangan'), - ]) - website = fields.Char(string='Website') - category_perusahaan = fields.Selection([ - ('1', 'Principal (Pemegang merk/Produsen)'), - ('2', 'Sole Distributor (Distributor Tunggal)'), - ('3', 'Authorized Distributor (Distributor Resmi)'), - ('4', 'Importer (Pengimpor Barang)'), - ('5', 'Wholesaler (Pedagang Besar)'), - ]) - description = fields.Text(string='Deskripsi') - - # imformasi Vendor - harga_tayang = fields.Char(string='Harga Tayang (HET)') - category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', - domain=lambda self: self._get_default_category_domain()) - - @api.model - def _get_default_category_domain(self): - return [('parent_id', '=', False)] - - merk_dagang = fields.Char(string='Merk Dagang') - is_pengajuan_tempo = fields.Boolean(string='Apakah anda memiliki Form Pengajuan Tempo?') - tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') - kredit_limit = fields.Char(string='Kredit Limit') - waktu_pengiriman = fields.Char(string='Waktu Pengiriman') - terhitung_sejak = fields.Selection([ - ('1', 'Terima PO'), - ('2', 'Barang Dikirimkan'), - ('3', 'Tukar Faktur'), - ]) - - # syarat dagang - is_kembali_barang = fields.Char(string='Syarat Pengembalian Barang') - tenggat_waktu = fields.Char(string='Tenggat Waktu Perubahan Harga') - sertifikat_produk = fields.Char(string='Dokumen/Sertifikat yang Dimiliki Oleh Brand') - custom_sertifikat_produk = fields.Char(string='Dokumen/Sertifikat Lainnya') - tempo_garansi = fields.Selection([ - ('1', '6 Bulan Garansi'), - ('2', '1 Tahun Garansi'), - ('3', '2 Tahun Garansi'), - ]) - explain_garansi = fields.Char(string='Garansi Yang Dimaksudkan') - is_order_quantity = fields.Char(string='Apakah Memiliki Minimum Order Quantity (MOQ)') - - # dokumen - file_npwp = fields.Many2one('ir.attachment', string="NPWP Perusahaan", tracking=3) - file_sppkp = fields.Many2one('ir.attachment', string="SPPKP Perusahaan", tracking=3) - file_dokumenKtpDirut = fields.Many2one('ir.attachment', string="KTP Dirut/Direktur", tracking=3) - file_kartuNama = fields.Many2one('ir.attachment', string="Kartu Nama", tracking=3) - file_suratPernyataan = fields.Many2one('ir.attachment', string="Surat Pernyataan Nomor Rekening", tracking=3) - file_fotoKantor = fields.Many2one('ir.attachment', string="Foto Gudang / Kantor Bagian Depan", tracking=3) - file_dataProduk = fields.Many2one('ir.attachment', string="Data Produk (Item Name, Gambar, Deskripsi)", tracking=3) - file_pricelist = fields.Many2one('ir.attachment', string="Pricelist", tracking=3) - - @api.depends('name', 'name_merchant') - def name_get(self): - result = [] - for record in self: - if record.name_merchant: - display_name = record.name_merchant - else: - display_name = "DETAIL FORM MERCHANT" - result.append((record.id, display_name)) - return result \ No newline at end of file diff --git a/indoteknik_custom/models/user_merchant_request.py b/indoteknik_custom/models/user_merchant_request.py deleted file mode 100644 index dd571cdc..00000000 --- a/indoteknik_custom/models/user_merchant_request.py +++ /dev/null @@ -1,125 +0,0 @@ -from odoo import models, fields, api, _ -from odoo.exceptions import UserError -from odoo.http import request - - -class RejectReasonWizardMerchant(models.TransientModel): - _name = 'reject.reason.wizard.merchant' - _description = 'Wizard for Reject Reason' - - request_id = fields.Many2one('user.merchant.request', string='Request') - reason_reject = fields.Text(string='Reason for Rejection', required=True) - - def confirm_reject(self): - merchant = self.request_id - if merchant: - merchant.write({'reason_reject': self.reason_reject}) - merchant.state_merchant = 'reject' - return {'type': 'ir.actions.act_window_close'} - - -class ConfirmApprovalWizardMerchant(models.TransientModel): - _name = 'confirm.approval.wizard.merchant' - _description = 'Wizard Konfirmasi Approval' - - merchant_id = fields.Many2one('user.merchant.request', string='Merchant', required=True) - - def confirm_approval(self): - merchant = self.merchant_id - if merchant.state_merchant == 'draft': - merchant.state_merchant = 'approved' - - -class UserMerchantRequest(models.Model): - _name = 'user.merchant.request' - _inherit = ['mail.thread', 'mail.activity.mixin'] - _rec_name = 'user_id' - - user_id = fields.Many2one('res.partner', string='User') - merchant_id = fields.Many2one('user.form.merchant', string='Form Merchant') - user_company_id = fields.Many2one('res.partner', string='Company') - state_merchant = fields.Selection([ - ('draft', 'Pengajuan Merchant'), - ('approved', 'Approved Merchant'), - ('reject', 'Rejected'), - ], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft') - reason_reject = fields.Char(string='Reaject Reason') - - def button_approve(self): - for merchant in self: - return { - 'type': 'ir.actions.act_window', - 'name': 'Konfirmasi Approve', - 'res_model': 'confirm.approval.wizard.merchant', - 'view_mode': 'form', - 'target': 'new', - 'context': { - 'default_merchant_id': merchant.id, - }} - - def button_reject(self): - return { - 'type': 'ir.actions.act_window', - 'name': _('Reject Reason'), - 'res_model': 'reject.reason.wizard.merchant', - 'view_mode': 'form', - 'target': 'new', - 'context': {'default_request_id': self.id}, - } - - def write(self, vals): - is_approve = True if self.state_merchant == 'approved' or vals.get('state_merchant') == 'approved' else False - if is_approve: - # Informasi Perusahaan - self.user_company_id.name_merchant = self.merchant_id.name_merchant - self.user_company_id.pejabat_name = self.merchant_id.pejabat_name - self.user_company_id.pic_merchant = self.merchant_id.pic_merchant - self.user_company_id.pic_position = self.merchant_id.pic_position - self.user_company_id.address_merchant = self.merchant_id.address - self.user_company_id.state_merchant = self.merchant_id.state - self.user_company_id.city_merchant = self.merchant_id.city - self.user_company_id.district_merchant = self.merchant_id.district - self.user_company_id.subDistrict_merchant = self.merchant_id.subDistrict - self.user_company_id.zip_merchant = self.merchant_id.zip - self.user_company_id.bank_name_merchant = self.merchant_id.bank_name - self.user_company_id.rekening_name_merchant = self.merchant_id.rekening_name - self.user_company_id.account_number_merchant = self.merchant_id.account_number - self.user_company_id.email_company_merchant = self.merchant_id.email_company - self.user_company_id.email_sales_merchant = self.merchant_id.email_sales - self.user_company_id.email_finance_merchant = self.merchant_id.email_finance - self.user_company_id.phone_merchant = self.merchant_id.phone - self.user_company_id.mobile_merchant = self.merchant_id.mobile - self.user_company_id.bisnis_type = self.merchant_id.bisnis_type - self.user_company_id.website_merchant = self.merchant_id.website - self.user_company_id.category_perusahaan = self.merchant_id.category_perusahaan - - # Informasi Vendor - self.user_company_id.harga_tayang = self.merchant_id.harga_tayang - self.user_company_id.category_produk_ids_merchant = self.merchant_id.category_produk_ids - self.user_company_id.merk_dagang = self.merchant_id.merk_dagang - self.user_company_id.is_pengajuan_tempo = self.merchant_id.is_pengajuan_tempo - self.user_company_id.tempo_duration_merchant = self.merchant_id.tempo_duration - self.user_company_id.kredit_limit = self.merchant_id.kredit_limit - self.user_company_id.waktu_pengiriman = self.merchant_id.waktu_pengiriman - self.user_company_id.terhitung_sejak = self.merchant_id.terhitung_sejak - - # Syarat Perdagangan - self.user_company_id.is_kembali_barang = self.merchant_id.is_kembali_barang - self.user_company_id.tenggat_waktu = self.merchant_id.tenggat_waktu - self.user_company_id.sertifikat_produk = self.merchant_id.sertifikat_produk - self.user_company_id.tempo_garansi = self.merchant_id.tempo_garansi - self.user_company_id.explain_garansi = self.merchant_id.explain_garansi - self.user_company_id.is_order_quantity = self.merchant_id.is_order_quantity - - # Dokumen - self.user_company_id.file_npwp = self.merchant_id.file_npwp - self.user_company_id.file_sppkp = self.merchant_id.file_sppkp - self.user_company_id.file_dokumenKtpDirut = self.merchant_id.file_dokumenKtpDirut - self.user_company_id.file_kartuNama = self.merchant_id.file_kartuNama - self.user_company_id.file_suratPernyataan = self.merchant_id.file_suratPernyataan - self.user_company_id.file_fotoKantor = self.merchant_id.file_fotoKantor - self.user_company_id.file_dataProduk = self.merchant_id.file_dataProduk - self.user_company_id.file_pricelist = self.merchant_id.file_pricelist - self.user_company_id.description = self.merchant_id.description - - return super(UserMerchantRequest, self).write(vals) \ No newline at end of file diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 28fc760d..601f04c5 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -169,10 +169,6 @@ access_User_pengajuan_tempo_line,access.user.pengajuan.tempo.line,model_user_pen access_user_pengajuan_tempo,access.user.pengajuan.tempo,model_user_pengajuan_tempo,,1,1,1,1 access_reject_reason_wizard,reject.reason.wizard,model_reject_reason_wizard,,1,1,1,0 access_confirm_approval_wizard,confirm.approval.wizard,model_confirm_approval_wizard,,1,1,1,0 -access_user_form_merchant,access.user.form.merchant,model_user_form_merchant,,1,1,1,1 -access_user_merchant_request,access.user.merchant.request,model_user_merchant_request,,1,1,1,1 -access_reject_reason_wizard_merchant,reject.reason.wizard.merchant,model_reject_reason_wizard_merchant,,1,1,1,0 -access_confirm_approval_wizard_merchant,confirm.approval.wizard.merchant,model_confirm_approval_wizard_merchant,,1,1,1,0 access_hr_public_holiday,confirm.hr.public.holiday,model_hr_public_holiday,,1,1,1,0 access_barcode_product,access.barcode.product,model_barcode_product,,1,1,1,1 access_barcoding_product,access.barcoding.product,model_barcoding_product,,1,1,1,1 diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 5160523f..cb9fa3ac 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -190,66 +190,6 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index 92d13fa7..a599a7b8 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -103,7 +103,6 @@ -<<<<<<< HEAD @@ -113,18 +112,6 @@ -======= - - - - - - - - - - ->>>>>>> CR/form-merchant diff --git a/indoteknik_custom/views/user_form_merchant.xml b/indoteknik_custom/views/user_form_merchant.xml deleted file mode 100644 index ae5a0f9f..00000000 --- a/indoteknik_custom/views/user_form_merchant.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - user.form.merchant.tree - user.form.merchant - - - - - - - - - - - - - user.form.merchant.form - user.form.merchant - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - User Form Merchant - ir.actions.act_window - user.form.merchant - tree,form - - - - - - - - - - - - \ No newline at end of file diff --git a/indoteknik_custom/views/user_merchant_request.xml b/indoteknik_custom/views/user_merchant_request.xml deleted file mode 100644 index e4f309fd..00000000 --- a/indoteknik_custom/views/user_merchant_request.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - user.merchant.request.tree - user.merchant.request - - - - - - - - - - - - user.merchant.request.form - user.merchant.request - -
-
-
- - - - - - - - -
- -
-
-
-
- - - - - - - reject.reason.wizard.merchant.form - reject.reason.wizard.merchant - -
- - - -
-
-
-
-
- - - Reject Reason - reject.reason.wizard.merchant - form - new - - - - - confirm.approval.wizard.merchant.form - confirm.approval.wizard.merchant - -
- -

Apakah Anda yakin ingin mengapprove merchant ini?

-
-
-
-
-
-
- - - - - User Merchant Request - ir.actions.act_window - user.merchant.request - tree,form - - - -
\ No newline at end of file -- cgit v1.2.3 From d27999cacee59a115ae3c6c46542c2e20cfe176b Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Fri, 23 May 2025 09:42:03 +0700 Subject: bf cant create invoice dp cause of custom method action assign stock picking --- indoteknik_custom/models/stock_picking.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 0071bb1a..0fcb7ca1 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -1012,15 +1012,15 @@ class StockPicking(models.Model): self.sale_id.date_doc_kirim = self.date_doc_kirim def action_assign(self): - if self.sale_id.hold_outgoing and self.location_id.id == 57 and self.location_dest_id.id == 60: - print(1) - else: - res = super(StockPicking, self).action_assign() + res = super(StockPicking, self).action_assign() + for move in self: + # if not move.sale_id.hold_outgoing and move.location_id.id != 57 and move.location_dest_id.id != 60: + # TODO cant skip hold outgoing cause of not singleton method current_time = datetime.datetime.utcnow() - self.real_shipping_id = self.sale_id.real_shipping_id - self.date_availability = current_time + move.real_shipping_id = move.sale_id.real_shipping_id + move.date_availability = current_time # self.check_state_reserve() - return res + return res def ask_approval(self): if self.env.user.is_accounting: -- cgit v1.2.3