From 907db76e2edfa56186c188e319fdd4bc59383769 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 25 Oct 2024 14:01:57 +0700 Subject: add pengajuan tempo --- indoteknik_custom/models/pengajuan_tempo.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 indoteknik_custom/models/pengajuan_tempo.py diff --git a/indoteknik_custom/models/pengajuan_tempo.py b/indoteknik_custom/models/pengajuan_tempo.py new file mode 100644 index 00000000..908843c7 --- /dev/null +++ b/indoteknik_custom/models/pengajuan_tempo.py @@ -0,0 +1,11 @@ +from odoo import models, fields +from datetime import datetime, timedelta + + +class PengajuanTempo(models.Model): + _inherit = "pengajuan.tempo" + + name = fields.Char(string="Nama Perusahaan") + street = fields.Char(string="Alamat Perusahaan") + site_id = fields.Many2one('res.partner.site', string='Site') + mobile = fields.Char(string="No. Telfon Perusahaan") -- cgit v1.2.3 From 4588b8df03628821dce6eb6029ac4bcd5065aba8 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Sat, 26 Oct 2024 14:01:20 +0700 Subject: add pengajuan tempo --- indoteknik_custom/models/res_partner.py | 127 +++++++++++++++++++------ indoteknik_custom/security/ir.model.access.csv | 1 + indoteknik_custom/views/res_partner.xml | 73 ++++++++++++++ 3 files changed, 173 insertions(+), 28 deletions(-) diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 25db16d0..bf7c45ad 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -2,14 +2,88 @@ from odoo import models, fields, api from odoo.exceptions import UserError, ValidationError from datetime import datetime + class GroupPartner(models.Model): _name = 'group.partner' name = fields.Char(string='Name') +class PengajuanTempoSupplier(models.Model): + _name = 'pengajuan.tempo.supplier' + + # Fields untuk tabel supplier + name_supplier = fields.Char(string="Nama Supplier") + pic_name = fields.Char(string="PIC") + phone = fields.Char(string="Telepon") + tempo_duration = fields.Char(string="Durasi Tempo") + credit_limit = fields.Char(string="Credit Limit") + pengajuan_tempo_id = fields.Many2one('new.pengajuan.tempo', string="Pengajuan Tempo", ondelete='cascade') + +class NewPengajuanTempo(models.Model): + _name = 'new.pengajuan.tempo' + _inherit = 'pengajuan.tempo.supplier' + + # informasi perusahaan + name_tempo = fields.Char(string="Nama Perusahaan") + industry_id_tempo = fields.Many2one('res.partner.industry', 'Customer Industry', readonly=True) + street_tempo = fields.Char(string="Alamat Perusahaan") + state_id_tempo = fields.Many2one('res.country.state', string='State') + city_id_tempo = fields.Many2one('vit.kota', string='City') + zip_tempo = fields.Char(string="Zip") + mobile_tempo = fields.Char(string="No. Telfon Perusahaan") + bank_name_tempo = fields.Char(string="Nama Bank") + account_name_tempo = fields.Char(string="Nama Rekening") + account_number_tempo = fields.Char(string="Nomor Rekening Bank") + website_tempo = fields.Char(string='Website') + estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') + tempo_duration = fields.Char(string='Durasi Tempo') + tempo_limit = fields.Char(string='Limit Tempo') + 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)] + + # Kontak Perusahaan + direktur_name = fields.Char(string='Nama Lengkap Direktur') + direktur_mobile = fields.Char(string='No. Telpon Direktur') + direktur_email = fields.Char(string='Email Direktur') + purchasing_name = fields.Char(string='Nama Purchasing') + purchasing_mobile = fields.Char(string='No. Telpon Purchasing') + purchasing_email = fields.Char(string='Email Purchasing') + finance_name = fields.Char(string='Nama Finance') + finance_mobile = fields.Char(string='No. Telpon Finance') + finance_email = fields.Char(string='Email Finance') + + # Pengiriman + pic_name = fields.Char(string='Nama PIC Penerimaan Barang') + street_pengiriman = fields.Char(string="Alamat Perusahaan") + state_id_pengiriman = fields.Many2one('res.country.state', string='State') + city_id_pengiriman = fields.Many2one('vit.kota', string='City') + zip_pengiriman = fields.Char(string="Zip") + invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice') + street_invoice = fields.Char(string="Alamat Perusahaan") + country_id_invoice = fields.Many2one('res.country', string='Country') + state_id_invoice = fields.Many2one('res.country.state', string='State') + city_id_invoice = fields.Many2one('vit.kota', string='City') + tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') + jadwal_bayar = fields.Char(string='Jadwal Pembayaran') + dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') + dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') + + # Referensi + # supplier_ids = fields.One2many('pengajuan.tempo.supplier',) + # category_id = fields.Many2one('product.public.category', string='Category Level 1') + supplier_ids = fields.One2many('pengajuan.tempo.supplier', 'pengajuan_tempo_id', string="Suppliers") + + + class ResPartner(models.Model): - _inherit = 'res.partner' + _name = 'res.partner' + _inherit = ['res.partner', 'new.pengajuan.tempo'] + # Relasi ke web.pengajuan.tempo + pengajuan_tempo_id = fields.Many2one('web.pengajuan.tempo', string="Pengajuan Tempo") reference_number = fields.Char(string="Reference Number") company_type_id = fields.Many2one('res.partner.company_type', string='Company Type') custom_pricelist_id = fields.Many2one('product.pricelist', string='Price Matrix') @@ -25,7 +99,7 @@ class ResPartner(models.Model): digital_invoice_tax = fields.Boolean(string="Digital Invoice & Faktur Pajak") is_potential = fields.Boolean(string='Potential') pakta_integritas = fields.Boolean(string='Pakta Integritas') - + use_so_approval = fields.Boolean(string='Use SO Approval') use_only_ready_stock = fields.Boolean(string='Use Only Ready Stock') web_role = fields.Selection([ @@ -66,23 +140,22 @@ class ResPartner(models.Model): if partner.company_type == 'person' and not partner.parent_id: partner.alamat_lengkap_text = partner.street # if partner.company_type == 'person' and partner.parent_id: - # partner.alamat_lengkap_text = partner.parent_id.alamat_lengkap_text - + # partner.alamat_lengkap_text = partner.parent_id.alamat_lengkap_text - alamat_lengkap_text = fields.Text(string="Alamat Lengkap", required=False , tracking=3) + alamat_lengkap_text = fields.Text(string="Alamat Lengkap", required=False, tracking=3) def write(self, vals): res = super(ResPartner, self).write(vals) - # - # # if 'property_payment_term_id' in vals: - # # if not self.env.user.is_accounting and vals['property_payment_term_id'] != 26: - # # raise UserError('Hanya Finance Accounting yang dapat merubah payment term') - # - # # group_id = self.env.ref('indoteknik_custom.group_role_merchandiser').id - # # users_in_group = self.env['res.users'].search([('groups_id', 'in', [group_id])]) - # # if self.env.user.id not in users_in_group.mapped('id'): - # # raise UserError('You name it') - # + # + # # if 'property_payment_term_id' in vals: + # # if not self.env.user.is_accounting and vals['property_payment_term_id'] != 26: + # # raise UserError('Hanya Finance Accounting yang dapat merubah payment term') + # + # # group_id = self.env.ref('indoteknik_custom.group_role_merchandiser').id + # # users_in_group = self.env['res.users'].search([('groups_id', 'in', [group_id])]) + # # if self.env.user.id not in users_in_group.mapped('id'): + # # raise UserError('You name it') + # return res def write(self, vals): @@ -139,7 +212,8 @@ class ResPartner(models.Model): # res = super(ResPartner, self).write(vals) # return res - @api.depends('company_type', 'parent_id', 'npwp', 'sppkp', 'nama_wajib_pajak','alamat_lengkap_text', 'industry_id', 'company_type_id') + @api.depends('company_type', 'parent_id', 'npwp', 'sppkp', 'nama_wajib_pajak', 'alamat_lengkap_text', 'industry_id', + 'company_type_id') def _related_fields(self): for partner in self: if partner.company_type == 'person' and partner.parent_id: @@ -156,7 +230,7 @@ class ResPartner(models.Model): for rec in self: rec.user_payment_terms_sales = self.env.user.id rec.date_payment_terms_sales = datetime.utcnow() - + @api.constrains('property_supplier_payment_term_id') def updated_by_payment_term(self): for rec in self: @@ -175,15 +249,15 @@ class ResPartner(models.Model): rec.state_id = site.state_id rec.country_id = site.country_id rec.zip = site.zip - + def get_main_parent(self): partner = self - + while partner.parent_id: partner = partner.parent_id - + return partner - + def _compute_main_parent_id(self): for partner in self: partner.main_parent_id = partner.get_main_parent() @@ -195,14 +269,14 @@ class ResPartner(models.Model): partner_child_ids += [x['id'] for x in partner.parent_id.child_ids] partner_child_ids += [partner.parent_id.id] return partner_child_ids - + def get_approve_partner_ids(self, type=False): parent = self.parent_id or self partners = self.search([('parent_id', '=', parent.id), ('web_role', '!=', False)]) - + if type == 'email_comma_sep': return ",".join([x.email for x in partners]) - + return partners @api.constrains('kota_id') @@ -213,11 +287,8 @@ class ResPartner(models.Model): def unlink(self): if self._name == 'res.partner': raise UserError('Maaf anda tidak bisa delete contact') - + @api.onchange('customer_type') def _onchange_customer_type(self): if self.customer_type == 'nonpkp': self.npwp = '00.000.000.0-000.000' - - - diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 553047e6..398a3067 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -143,3 +143,4 @@ access_vendor_approval_line,access.vendor.approval.line,model_vendor_approval_li access_vit_kota,access.vit.kota,model_vit_kota,,1,1,1,1 access_v_brand_product_category,access.v.brand.product.category,model_v_brand_product_category,,1,1,1,1 access_web_find_page,access.web.find.page,model_web_find_page,,1,1,1,1 +access_pengajuan_tempo_supplier,access_pengajuan_tempo_supplier,model_pengajuan_tempo_supplier,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 6d02a86b..278f6d44 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -71,6 +71,79 @@ 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From d8c12d085edbd81d974555780b16421c7b155f7f Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 31 Oct 2024 13:49:23 +0700 Subject: update pengajuan tempo final --- indoteknik_api/controllers/api_v1/partner.py | 225 ++++++++++++++++++++- indoteknik_custom/__manifest__.py | 2 + indoteknik_custom/models/__init__.py | 3 + indoteknik_custom/models/pengajuan_tempo.py | 11 - indoteknik_custom/models/res_partner.py | 103 +++++++--- indoteknik_custom/models/user_pengajuan_tempo.py | 148 ++++++++++++++ .../models/user_pengajuan_tempo_line.py | 14 ++ .../models/user_pengajuan_tempo_request.py | 184 +++++++++++++++++ indoteknik_custom/security/ir.model.access.csv | 4 +- indoteknik_custom/views/res_partner.xml | 129 +++++++----- indoteknik_custom/views/user_pengajuan_tempo.xml | 129 ++++++++++++ .../views/user_pengajuan_tempo_line.xml | 42 ++++ .../views/user_pengajuan_tempo_request.xml | 67 ++++++ 13 files changed, 966 insertions(+), 95 deletions(-) delete mode 100644 indoteknik_custom/models/pengajuan_tempo.py create mode 100644 indoteknik_custom/models/user_pengajuan_tempo.py create mode 100644 indoteknik_custom/models/user_pengajuan_tempo_line.py create mode 100644 indoteknik_custom/models/user_pengajuan_tempo_request.py create mode 100644 indoteknik_custom/views/user_pengajuan_tempo.xml create mode 100644 indoteknik_custom/views/user_pengajuan_tempo_line.xml create mode 100644 indoteknik_custom/views/user_pengajuan_tempo_request.xml diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index a7925a02..27ba186f 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -2,6 +2,9 @@ from .. import controller from odoo import http from odoo.http import request +import json +import base64 +import mimetypes class Partner(controller.Controller): _name = 'res.partner' @@ -226,8 +229,228 @@ class Partner(controller.Controller): 'amount_due': result_tempo, 'remaining_limit': remaining_limit } - + return self.response(data) + @http.route(prefix + 'partner/pengajuan_tempo', auth='public', methods=['POST'], csrf=False) + @controller.Controller.must_authorized() + def write_pengajuan_tempo(self, **kw): + user_id = int(kw.get('user_id')) + user = request.env['res.users'].search([('id', '=', user_id)], limit=1) + company_name = kw.get('name') + partner_id = request.env['res.partner'].search([('name', 'like', company_name)], limit=1) + + params = self.get_request_params(kw, { + + # informasi perusahaan + # 'name': ['required', 'alias:name_tempo'], + 'industry_id': ['required', 'alias:industry_id_tempo'], + 'street': ['required', 'alias:street_tempo'], + 'state': ['required', 'alias:state_id_tempo'], + 'city': ['required', 'alias:city_id_tempo'], + 'zip': ['required', 'alias:zip_tempo'], + 'mobile': ['required', 'alias:mobile_tempo'], + 'bankName': ['required', 'alias:bank_name_tempo'], + 'accountName': ['required', 'alias:account_name_tempo'], + 'accountNumber': ['required', 'alias:account_number_tempo'], + 'website': ['alias:website_tempo'], + 'estimasi': ['required', 'alias:estimasi_tempo'], + 'tempoDuration': ['required', 'alias:tempo_duration'], + 'tempoLimit': ['required', 'alias:tempo_limit'], + + # informasi perusahaan + 'direkturName': ['required', 'alias:direktur_name'], + 'direkturMobile': ['required', 'alias:direktur_mobile'], + 'direkturEmail': ['required', 'alias:direktur_email'], + 'purchasingName': ['required', 'alias:purchasing_name'], + 'purchasingMobile': ['required', 'alias:purchasing_mobile'], + 'purchasingEmail': ['required', 'alias:purchasing_email'], + 'financeName': ['required', 'alias:finance_name'], + 'financeMobile': ['required', 'alias:finance_mobile'], + 'financeEmail': ['required', 'alias:finance_email'], + + # Pengiriman + 'PICName': ['required', 'alias:pic_name'], + 'streetPengiriman': ['required', 'alias:street_pengiriman'], + 'statePengiriman': ['required', 'alias:state_id_pengiriman'], + 'cityPengiriman': ['required', 'alias:city_id_pengiriman'], + 'zipPengiriman': ['required', 'alias:zip_pengiriman'], + 'invoicePic': ['required', 'alias:invoice_pic'], + 'streetInvoice': ['required', 'alias:street_invoice'], + 'stateInvoice': ['required', 'alias:state_id_invoice'], + 'cityInvoice': ['required', 'alias:city_id_invoice'], + }) + if not params['valid']: + return self.response(code=400, description=params) + pengajuan_tempo = request.env['user.pengajuan.tempo'].create([params['value']]) + + if partner_id: + pengajuan_tempo.name_tempo = partner_id + + form_supplier_data = kw.get('formSupplier') + + if form_supplier_data: + try: + form_supplier_data = json.loads(form_supplier_data) + + for item in form_supplier_data: + supplier_name = item.get("supplier") + pic_name = item.get("pic") + phone = item.get("telepon") + tempo_duration = item.get("durasiTempo") + credit_limit = item.get("creditLimit") + + new_data = { + 'name_supplier': supplier_name, + 'pengajuan_tempo_id': pengajuan_tempo.id, + 'pengajuan_tempo_partner': False, + 'pic_name': pic_name, + 'phone': phone, + 'tempo_duration': tempo_duration, + 'credit_limit': credit_limit, + } + new_supplier_data = request.env['user.pengajuan.tempo.line'].create(new_data) + + except json.JSONDecodeError: + return http.Response(status=400, json_body={'error': 'Invalid JSON format for formSupplier'}) + category_produk_ids = kw.get('categoryProduk') + category_ids = list(map(int, category_produk_ids.split(','))) + + pengajuan_tempo.category_produk_ids = [(6, 0, category_ids)] + every_weekday = True if kw.get('everyWeekday') == "true" else False + every_weekday_input = kw.get('everyWeekdayInput') + every_week = True if kw.get('everyWeek') == 'true' else False + every_week_input = kw.get('everyWeekInput') + tukar_invoice = True if kw.get('tukarInvoice') == 'true' else False + tukar_invoice_input = kw.get('tukarInvoiceInput') + jadwal_tukar_invoice = "" + if every_weekday: + jadwal_tukar_invoice += f"setiap hari {every_weekday_input}" + if every_week: + jadwal_tukar_invoice += f", setiap {every_week_input}" + if tukar_invoice or tukar_invoice_input: + jadwal_tukar_invoice += f", {tukar_invoice_input}" + + pengajuan_tempo.tukar_invoice = jadwal_tukar_invoice + + every_weekday_pembayaran = True if kw.get('everyWeekdayPembayaran') == 'true' else False + every_weekday_input_pembayaran = kw.get('everyWeekdayInputPembayaran') + every_week_pembayaran = True if kw.get('everyWeekPembayaran') == 'true' else False + every_week_input_pembayaran = kw.get('everyWeekInputPembayaran') + tukar_invoice_pembayaran = True if kw.get('tukarInvoicePembayaran') == 'true' else False + tukar_invoice_input_pembayaran = kw.get('tukarInvoiceInputPembayaran') + jadwal_tukar_invoice_pembayaran = "" + if every_weekday_pembayaran: + jadwal_tukar_invoice_pembayaran += f"setiap hari {every_weekday_input_pembayaran}" + if every_week_pembayaran: + jadwal_tukar_invoice_pembayaran += f", setiap {every_week_input_pembayaran}" + if tukar_invoice_pembayaran or tukar_invoice_input_pembayaran: + jadwal_tukar_invoice_pembayaran += f", {tukar_invoice_input_pembayaran}" + + pengajuan_tempo.jadwal_bayar = jadwal_tukar_invoice_pembayaran + + dokumen_kirim = [ + 'Surat Tanda Terima Barang (STTB)', + 'Good Receipt (GR)', + 'Surat Terima Barang (STB)', + 'Lembar Penerimaan Barang (LPB)' + ] + + dokumen_kirim_barang_ids = kw.get('dokumenPengiriman') + dokumen_kirim_barang_input = kw.get('dokumenPengirimanInput', '') + dokumen_kirim_barang = [] + + if dokumen_kirim_barang_ids: + dokumen_kirim_ids = list(map(int, dokumen_kirim_barang_ids.split(','))) + dokumen_kirim_barang = [dokumen_kirim[i] for i in dokumen_kirim_ids if 0 <= i < len(dokumen_kirim)] + + if dokumen_kirim_barang_input: + input_items = [item.strip() for item in dokumen_kirim_barang_input.split(',')] + dokumen_kirim_barang.extend(item for item in input_items if item and item not in dokumen_kirim_barang) + + pengajuan_tempo.dokumen_pengiriman = ', '.join(dokumen_kirim_barang) + + dokumen = [ + 'Invoice Pembelian', + 'Surat Jalan', + 'Berita Acara Serah Terima (BAST)', + 'Faktur Pajak', + 'Good Receipt (GR)' + ] + + dokumen_invoice_ids = kw.get('dokumenPengirimanInvoice') + dokumen_invoice_input = kw.get('dokumenPengirimanInvoiceInput', '') + dokumen_invoice = "" + + if dokumen_kirim_barang_ids: + dokumen_ids = list(map(int, dokumen_invoice_ids.split(','))) + dokumen_invoice = [dokumen[i] for i in dokumen_ids if 0 <= i < len(dokumen)] + if dokumen_invoice_input: + input_items = [item.strip() for item in dokumen_invoice_input.split(',')] + dokumen_invoice.extend(item for item in input_items if item and item not in dokumen_invoice) + + pengajuan_tempo.dokumen_invoice = ', '.join(dokumen_invoice) + + form_dokumen_data = kw.get('formDocs') + if form_dokumen_data: + try: + form_dokumen = json.loads(form_dokumen_data) + + for dokumen in form_dokumen: + if dokumen['details']['base64'] != '': + mimetype, _ = mimetypes.guess_type(dokumen['details']['name']) + mimetype = mimetype or 'application/octet-stream' + data = base64.b64decode(dokumen['details']['base64']) + sppkp_attachment = request.env['ir.attachment'].create({ + 'name': dokumen['details']['name'], + 'type': 'binary', + 'datas': base64.b64encode(data), + 'res_model': 'user.pengajuan.tempo', + 'res_id': pengajuan_tempo.id, + 'mimetype': mimetype + }) + + if dokumen['documentName'] == 'dokumenNib' and dokumen['details']['base64'] != '': + pengajuan_tempo.dokumen_nib = [(4, sppkp_attachment.id)] + + elif dokumen['documentName'] == 'dokumenNpwp' and dokumen['details']['base64'] != '': + pengajuan_tempo.dokumen_npwp = [(4, sppkp_attachment.id)] + + elif dokumen['documentName'] == 'dokumenSppkp' and dokumen['details']['base64'] != '': + pengajuan_tempo.dokumen_sppkp = [(4, sppkp_attachment.id)] + + elif dokumen['documentName'] == 'dokumenAktaPerubahan' and dokumen['details']['base64'] != '': + pengajuan_tempo.dokumen_akta_perubahan = [(4, sppkp_attachment.id)] + + elif dokumen['documentName'] == 'dokumenKtpDirut' and dokumen['details']['base64'] != '': + pengajuan_tempo.dokumen_ktp_dirut = [(4, sppkp_attachment.id)] + + elif dokumen['documentName'] == 'dokumenAktaPendirian' and dokumen['details']['base64'] != '': + pengajuan_tempo.dokumen_akta_pendirian = [(4, sppkp_attachment.id)] + + elif dokumen['documentName'] == 'dokumenLaporanKeuangan' and dokumen['details']['base64'] != '': + pengajuan_tempo.dokumen_laporan_keuangan = [(4, sppkp_attachment.id)] + + elif dokumen['documentName'] == 'dokumenFotoKantor' and dokumen['details']['base64'] != '': + pengajuan_tempo.dokumen_foto_kantor = [(4, sppkp_attachment.id)] + + else: + pengajuan_tempo.dokumen_tempat_bekerja = [(4, sppkp_attachment.id)] + + formatted_text = ''.join([' ' + char if char.isupper() and i != 0 else char for i, char in enumerate(dokumen['documentName'])]) + teks = formatted_text.strip().title() + pengajuan_tempo.message_post(body=teks, attachment_ids=[sppkp_attachment.id]) + + except json.JSONDecodeError: + return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) + + tempo_request = request.env['user.pengajuan.tempo.request'].create({ + 'user_id': user.partner_id.id, + 'pengajuan_tempo_id': pengajuan_tempo.id, + 'user_input': partner_id.name + }) + return self.response({ + 'id': user_id, + }) diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index c8a658b5..2ec5e720 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -30,6 +30,7 @@ 'views/web_logging/user_activity_log.xml', 'views/web_logging/web_utm_source.xml', 'views/user_company_request.xml', + 'views/user_pengajuan_tempo_request.xml', 'views/vit_kelurahan.xml', 'views/vit_kecamatan.xml', 'views/vit_kota.xml', @@ -145,6 +146,7 @@ 'views/approval_unreserve.xml', 'views/vendor_approval.xml', 'views/find_page.xml', + 'views/user_pengajuan_tempo.xml', 'report/report.xml', 'report/report_banner_banner.xml', 'report/report_banner_banner2.xml', diff --git a/indoteknik_custom/models/__init__.py b/indoteknik_custom/models/__init__.py index e62fbb4a..a2a445bc 100755 --- a/indoteknik_custom/models/__init__.py +++ b/indoteknik_custom/models/__init__.py @@ -34,6 +34,7 @@ from . import stock_picking_type from . import stock_picking from . import stock_vendor from . import user_company_request +from . import user_pengajuan_tempo_request from . import users from . import website_brand_homepage from . import website_categories_homepage @@ -131,3 +132,5 @@ from . import approval_unreserve from . import vendor_approval from . import partner from . import find_page +from . import user_pengajuan_tempo_line +from . import user_pengajuan_tempo \ No newline at end of file diff --git a/indoteknik_custom/models/pengajuan_tempo.py b/indoteknik_custom/models/pengajuan_tempo.py deleted file mode 100644 index 908843c7..00000000 --- a/indoteknik_custom/models/pengajuan_tempo.py +++ /dev/null @@ -1,11 +0,0 @@ -from odoo import models, fields -from datetime import datetime, timedelta - - -class PengajuanTempo(models.Model): - _inherit = "pengajuan.tempo" - - name = fields.Char(string="Nama Perusahaan") - street = fields.Char(string="Alamat Perusahaan") - site_id = fields.Many2one('res.partner.site', string='Site') - mobile = fields.Char(string="No. Telfon Perusahaan") diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index bf7c45ad..c2b54dd9 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -8,23 +8,74 @@ class GroupPartner(models.Model): name = fields.Char(string='Name') -class PengajuanTempoSupplier(models.Model): - _name = 'pengajuan.tempo.supplier' - # Fields untuk tabel supplier - name_supplier = fields.Char(string="Nama Supplier") - pic_name = fields.Char(string="PIC") - phone = fields.Char(string="Telepon") - tempo_duration = fields.Char(string="Durasi Tempo") - credit_limit = fields.Char(string="Credit Limit") - pengajuan_tempo_id = fields.Many2one('new.pengajuan.tempo', string="Pengajuan Tempo", ondelete='cascade') +# class NewPengajuanTempo(models.Model): +# _name = 'new.pengajuan.tempo' +# +# # Referensi +# supplier_ids = fields.One2many('pengajuan.tempo.line', 'pengajuan_tempo_id', string="Suppliers") +# +# # informasi perusahaan +# name_tempo = fields.Char(string="Nama Perusahaan") +# industry_id_tempo = fields.Many2one('res.partner.industry', 'Customer Industry', readonly=True) +# street_tempo = fields.Char(string="Alamat Perusahaan") +# state_id_tempo = fields.Many2one('res.country.state', string='State') +# city_id_tempo = fields.Many2one('vit.kota', string='City') +# zip_tempo = fields.Char(string="Zip") +# mobile_tempo = fields.Char(string="No. Telfon Perusahaan") +# bank_name_tempo = fields.Char(string="Nama Bank") +# account_name_tempo = fields.Char(string="Nama Rekening") +# account_number_tempo = fields.Char(string="Nomor Rekening Bank") +# website_tempo = fields.Char(string='Website') +# estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') +# tempo_duration = fields.Char(string='Durasi Tempo') +# tempo_limit = fields.Char(string='Limit Tempo') +# 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)] +# +# # Kontak Perusahaan +# direktur_name = fields.Char(string='Nama Lengkap Direktur') +# direktur_mobile = fields.Char(string='No. Telpon Direktur') +# direktur_email = fields.Char(string='Email Direktur') +# purchasing_name = fields.Char(string='Nama Purchasing') +# purchasing_mobile = fields.Char(string='No. Telpon Purchasing') +# purchasing_email = fields.Char(string='Email Purchasing') +# finance_name = fields.Char(string='Nama Finance') +# finance_mobile = fields.Char(string='No. Telpon Finance') +# finance_email = fields.Char(string='Email Finance') +# +# # Pengiriman +# pic_name = fields.Char(string='Nama PIC Penerimaan Barang') +# street_pengiriman = fields.Char(string="Alamat Perusahaan") +# state_id_pengiriman = fields.Many2one('res.country.state', string='State') +# city_id_pengiriman = fields.Many2one('vit.kota', string='City') +# zip_pengiriman = fields.Char(string="Zip") +# invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice') +# street_invoice = fields.Char(string="Alamat Perusahaan") +# country_id_invoice = fields.Many2one('res.country', string='Country') +# state_id_invoice = fields.Many2one('res.country.state', string='State') +# city_id_invoice = fields.Many2one('vit.kota', string='City') +# tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') +# jadwal_bayar = fields.Char(string='Jadwal Pembayaran') +# dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') +# dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') -class NewPengajuanTempo(models.Model): - _name = 'new.pengajuan.tempo' - _inherit = 'pengajuan.tempo.supplier' + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + # Referensi + supplier_ids = fields.One2many('user.pengajuan.tempo.line', 'pengajuan_tempo_partner', string="Suppliers") # informasi perusahaan - name_tempo = fields.Char(string="Nama Perusahaan") + name_tempo = fields.Many2one( + 'res.partner', string='Nama Perusahaan', + tracking=True, # Menambahkan tracking=True + ) industry_id_tempo = fields.Many2one('res.partner.industry', 'Customer Industry', readonly=True) street_tempo = fields.Char(string="Alamat Perusahaan") state_id_tempo = fields.Many2one('res.country.state', string='State') @@ -38,7 +89,8 @@ class NewPengajuanTempo(models.Model): estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') tempo_duration = fields.Char(string='Durasi Tempo') tempo_limit = fields.Char(string='Limit Tempo') - category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', domain=lambda self: self._get_default_category_domain()) + 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): @@ -63,7 +115,6 @@ class NewPengajuanTempo(models.Model): zip_pengiriman = fields.Char(string="Zip") invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice') street_invoice = fields.Char(string="Alamat Perusahaan") - country_id_invoice = fields.Many2one('res.country', string='Country') state_id_invoice = fields.Many2one('res.country.state', string='State') city_id_invoice = fields.Many2one('vit.kota', string='City') tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') @@ -71,19 +122,17 @@ class NewPengajuanTempo(models.Model): dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') - # Referensi - # supplier_ids = fields.One2many('pengajuan.tempo.supplier',) - # category_id = fields.Many2one('product.public.category', string='Category Level 1') - supplier_ids = fields.One2many('pengajuan.tempo.supplier', 'pengajuan_tempo_id', string="Suppliers") - - - -class ResPartner(models.Model): - _name = 'res.partner' - _inherit = ['res.partner', 'new.pengajuan.tempo'] + # Dokumen + dokumen_nib = fields.Many2one('ir.attachment', string="NIB (SIUP/TDP/SKDP)", tracking=3, readonly=True,) + dokumen_npwp = fields.Many2one('ir.attachment', string="NPWP Perusahaan", tracking=3, readonly=True) + dokumen_sppkp = fields.Many2one('ir.attachment', string="SPPKP Perusahaan", tracking=3, readonly=True) + dokumen_akta_perubahan = fields.Many2one('ir.attachment', string="Akta Perubahan", tracking=3, readonly=True) + dokumen_ktp_dirut = fields.Many2one('ir.attachment', string="KTP Dirut/Direktur", tracking=3, readonly=True) + dokumen_akta_pendirian = fields.Many2one('ir.attachment', string="Akta Pendirian", tracking=3, readonly=True) + dokumen_laporan_keuangan = fields.Many2one('ir.attachment', string="Laporan Keuangan", tracking=3, readonly=True) + dokumen_foto_kantor = fields.Many2one('ir.attachment', string=" Foto Kantor (Tampak Depan)", tracking=3, readonly=True) + dokumen_tempat_bekerja = fields.Many2one('ir.attachment', string="Tempat Bekerja", tracking=3, readonly=True) - # Relasi ke web.pengajuan.tempo - pengajuan_tempo_id = fields.Many2one('web.pengajuan.tempo', string="Pengajuan Tempo") reference_number = fields.Char(string="Reference Number") company_type_id = fields.Many2one('res.partner.company_type', string='Company Type') custom_pricelist_id = fields.Many2one('product.pricelist', string='Price Matrix') diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py new file mode 100644 index 00000000..42380fe9 --- /dev/null +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -0,0 +1,148 @@ +from odoo import models, fields, api +from datetime import datetime, timedelta + + +# class IrAttachment(models.Model): +# _inherit = 'ir.attachment' +# +# @api.model +# def create(self, vals): +# attachment = super(IrAttachment, self).create(vals) +# if attachment: +# base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') +# attachment.url = f"/web/content/{attachment.id}" +# return attachment + + +class UserPengajuanTempo(models.Model): + _name = 'user.pengajuan.tempo' + _inherit = ['mail.thread', 'mail.activity.mixin'] + partner_id = fields.Char() + + # informasi perusahaan + # name_tempo = fields.Many2one( + # 'res.partner', string='Nama Perusahaan', + # readonly=True, required=True, + # states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}, + # domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", + # tracking=True, # Menambahkan tracking=True + # ) + name_tempo = fields.Many2one( + 'res.partner', string='Nama Perusahaan', + tracking=True, # Menambahkan tracking=True + ) + industry_id_tempo = fields.Many2one('res.partner.industry', 'Customer Industry', readonly=True) + street_tempo = fields.Char(string="Alamat Perusahaan") + state_id_tempo = fields.Many2one('res.country.state', string='State') + city_id_tempo = fields.Many2one('vit.kota', string='City') + zip_tempo = fields.Char(string="Zip") + mobile_tempo = fields.Char(string="No. Telfon Perusahaan") + bank_name_tempo = fields.Char(string="Nama Bank") + account_name_tempo = fields.Char(string="Nama Rekening") + account_number_tempo = fields.Char(string="Nomor Rekening Bank") + website_tempo = fields.Char(string='Website') + estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') + tempo_duration = fields.Char(string='Durasi Tempo') + tempo_limit = fields.Char(string='Limit Tempo') + 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)] + + # Kontak Perusahaan + direktur_name = fields.Char(string='Nama Lengkap Direktur') + direktur_mobile = fields.Char(string='No. Telpon Direktur') + direktur_email = fields.Char(string='Email Direktur') + purchasing_name = fields.Char(string='Nama Purchasing') + purchasing_mobile = fields.Char(string='No. Telpon Purchasing') + purchasing_email = fields.Char(string='Email Purchasing') + finance_name = fields.Char(string='Nama Finance') + finance_mobile = fields.Char(string='No. Telpon Finance') + finance_email = fields.Char(string='Email Finance') + + # Pengiriman + pic_name = fields.Char(string='Nama PIC Penerimaan Barang') + street_pengiriman = fields.Char(string="Alamat Perusahaan") + state_id_pengiriman = fields.Many2one('res.country.state', string='State') + city_id_pengiriman = fields.Many2one('vit.kota', string='City') + zip_pengiriman = fields.Char(string="Zip") + invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice') + street_invoice = fields.Char(string="Alamat Perusahaan") + state_id_invoice = fields.Many2one('res.country.state', string='State') + city_id_invoice = fields.Many2one('vit.kota', string='City') + tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') + jadwal_bayar = fields.Char(string='Jadwal Pembayaran') + dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') + dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') + + # Referensi + supplier_ids = fields.One2many('user.pengajuan.tempo.line', 'pengajuan_tempo_id', string="Suppliers") + + #Dokumen + dokumen_nib = fields.Many2many('ir.attachment', 'pengajuan_dokumen_nib_rel', string="NIB (SIUP/TDP/SKDP)", tracking=3, track_visibility="onchange") + dokumen_npwp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_npwp_rel', string="NPWP Perusahaan", tracking=3) + dokumen_sppkp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_sppkp_rel', string="SPPKP Perusahaan", tracking=3) + dokumen_akta_perubahan = fields.Many2many('ir.attachment', 'pengajuan_dokumen_akta_perubahan_rel', + string="Akta Perubahan", tracking=3) + dokumen_ktp_dirut = fields.Many2many('ir.attachment', 'pengajuan_dokumen_ktp_dirut_rel', + string="KTP Dirut/Direktur", tracking=3) + dokumen_akta_pendirian = fields.Many2many('ir.attachment', 'pengajuan_dokumen_angkta_pendirian_rel', + string="Akta Pendirian", tracking=3) + dokumen_laporan_keuangan = fields.Many2many('ir.attachment', 'pengajuan_dokumen_laporan_keuangan_rel', + string="Laporan Keuangan", tracking=3) + dokumen_foto_kantor = fields.Many2many('ir.attachment', 'pengajuan_dokumen_foto_kantor_rel', + string=" Foto Kantor (Tampak Depan)", tracking=3) + dokumen_tempat_bekerja = fields.Many2many('ir.attachment', 'pengajuan_dokumen_tempat_bekerja_rel', + string="Tempat Bekerja", tracking=3) + # + # def _compute_attachment_url(self): + # if self.id: + # return { + # 'type': 'ir.actions.act_url', + # 'url': 'http://localhost:8069/web/content/' % (self.id), + # 'target': 'user', + # } + # base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + # for record in self: + # # Buat URL list untuk attachment yang ada di dokumen_nib + # record.attachment_urls = [(attachment.id, f"{base_url}/web/content/{attachment.id}") for attachment in + # record.dokumen_nib] + # + # @api.model + # def create(self, vals): + # # Tangani pembuatan baru + # record = super(userPengajuanTempo, self).create(vals) + # if vals.get('dokumen_nib'): + # attachment_names = ', '.join(self.env['ir.attachment'].browse(vals['dokumen_nib'][0][2]).mapped('name')) + # record.message_post(body=f"Files added to NIB: {attachment_names}") + # return record + # + # def write(self, vals): + # # Ambil attachment sebelumnya + # for record in self: + # previous_files = record.dokumen_nib + # res = super(userPengajuanTempo, record).write(vals) + # + # if 'dokumen_nib' in vals: + # new_files = record.dokumen_nib + # + # # Periksa perbedaan antara file lama dan file baru + # added_files = new_files - previous_files + # removed_files = previous_files - new_files + # + # # Buat pesan log berdasarkan perubahan + # messages = [] + # if added_files: + # added_names = ', '.join(added_files.mapped('name')) + # messages.append(f"Files added to NIB: {added_names}") + # if removed_files: + # removed_names = ', '.join(removed_files.mapped('name')) + # messages.append(f"Files removed from NIB: {removed_names}") + # + # # Post pesan ke log note jika ada perubahan + # if messages: + # record.message_post(body="
".join(messages)) + # + # return res + diff --git a/indoteknik_custom/models/user_pengajuan_tempo_line.py b/indoteknik_custom/models/user_pengajuan_tempo_line.py new file mode 100644 index 00000000..7571bd41 --- /dev/null +++ b/indoteknik_custom/models/user_pengajuan_tempo_line.py @@ -0,0 +1,14 @@ +from odoo import models, fields + + +class PengajuanTempoLine(models.Model): + _name = 'user.pengajuan.tempo.line' + + # Fields untuk tabel supplier + name_supplier = fields.Char(string="Nama Supplier") + pengajuan_tempo_id = fields.Many2one('user.pengajuan.tempo', string='Tempo Reference', required=True, ondelete='cascade') + pengajuan_tempo_partner = fields.Many2one('res.partner', string='Tempo Reference', ondelete='cascade') + pic_name = fields.Char(string="PIC") + phone = fields.Char(string="Telepon") + tempo_duration = fields.Char(string="Durasi Tempo") + credit_limit = fields.Char(string="Credit Limit") \ No newline at end of file diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py new file mode 100644 index 00000000..6c04ab7c --- /dev/null +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -0,0 +1,184 @@ +from odoo import models, fields, api +from odoo.exceptions import UserError +from odoo.http import request + +class UserPengajuanTempoRequest(models.Model): + _name = 'user.pengajuan.tempo.request' + _rec_name = 'user_id' + + user_id = fields.Many2one('res.partner', string='User') + user_company_id = fields.Many2one('res.partner', string='Company') + user_input = fields.Char(string='User Input') + is_approve = fields.Selection([ + ('approved', 'Approve'), + ('rejected', 'Reject'), + ], string='Approval') + similar_company_ids = fields.Many2many('res.partner', compute="_compute_similar_companies", string="Similar Companies") + pengajuan_tempo_id = fields.Many2one('user.pengajuan.tempo', string='Form Tempo') + + @api.depends('user_input') + def _compute_similar_companies(self): + for record in self: + if record.user_input: + record.similar_company_ids = [(6, 0, self.get_similar_companies(record.user_input))] + else: + record.similar_company_ids = [(6, 0, [])] + + # def get_similar_companies(self, user_input): + # query = """ + # SELECT id + # FROM res_partner + # WHERE levenshtein(name::text, %s) < 3 + # ORDER BY levenshtein(name::text, %s) ASC + # """ + # self.env.cr.execute(query, (user_input, user_input)) + # return [row[0] for row in self.env.cr.fetchall()] + + def get_similar_companies(self, user_input): + query = """ + SELECT id + FROM res_partner + WHERE (name ILIKE %s OR levenshtein(name::text, %s) < 3) + AND active = TRUE AND is_company = TRUE + ORDER BY levenshtein(name::text, %s) ASC + """ + # Menggunakan '%' untuk mencocokkan nama perusahaan sebagian + self.env.cr.execute(query, ('%' + user_input + '%', user_input, user_input)) + company_ids = [row[0] for row in self.env.cr.fetchall()] + return company_ids + + internal_input = fields.Char(string='Internal Input') + company_type = fields.Char(string='Company Type', compute='_compute_company_type') + + @api.depends('user_company_id.customer_type') + def _compute_company_type(self): + for record in self: + if record.user_company_id.customer_type == 'nonpkp': + record.company_type = 'Non PKP' + elif record.user_company_id.customer_type == 'pkp': + record.company_type = 'PKP' + else: + record.company_type = 'company type belum di set' + + def write(self, vals): + user = self.get_user_by_email(self.user_id.email) + user.parent_name = self.user_input + is_approve = vals.get('is_approve') + is_internal_input = vals.get('internal_input') + company_id = '' + if not self.user_company_id: + company_id = request.env['res.partner'].search([('id', '=', vals.get('user_company_id'))], limit=1) + if self.is_approve and is_approve: + raise UserError('Tidak dapat mengubah approval yang sudah diisi') + + if is_internal_input: + if self.user_company_id.nama_wajib_pajak == self.user_company_id.name: + self.user_company_id.nama_wajib_pajak = is_internal_input + self.user_company_id.name = is_internal_input + + if not self.is_approve and is_approve: + if is_approve == 'approved': + self.pengajuan_tempo_id.partner_id = self.user_id.id + # informasi perusahaan + company_id.name_tempo = self.pengajuan_tempo_id.name_tempo + company_id.industry_id_tempo = self.pengajuan_tempo_id.industry_id_tempo + company_id.street_tempo = self.pengajuan_tempo_id.street_tempo + company_id.state_id_tempo = self.pengajuan_tempo_id.state_id_tempo + company_id.city_id_tempo = self.pengajuan_tempo_id.city_id_tempo + company_id.zip_tempo = self.pengajuan_tempo_id.zip_tempo + company_id.mobile_tempo = self.pengajuan_tempo_id.mobile_tempo + company_id.bank_name_tempo = self.pengajuan_tempo_id.bank_name_tempo + company_id.account_name_tempo = self.pengajuan_tempo_id.account_name_tempo + company_id.account_number_tempo = self.pengajuan_tempo_id.account_number_tempo + company_id.website_tempo = self.pengajuan_tempo_id.website_tempo + company_id.estimasi_tempo = self.pengajuan_tempo_id.estimasi_tempo + company_id.tempo_duration = self.pengajuan_tempo_id.tempo_duration + company_id.tempo_limit = self.pengajuan_tempo_id.tempo_limit + company_id.category_produk_ids = self.pengajuan_tempo_id.category_produk_ids + + # Kontak Perusahaan + company_id.direktur_name = self.pengajuan_tempo_id.direktur_name + company_id.direktur_mobile = self.pengajuan_tempo_id.direktur_mobile + company_id.direktur_email = self.pengajuan_tempo_id.direktur_email + company_id.purchasing_name = self.pengajuan_tempo_id.purchasing_name + company_id.purchasing_mobile = self.pengajuan_tempo_id.purchasing_mobile + company_id.purchasing_email = self.pengajuan_tempo_id.purchasing_email + company_id.finance_name = self.pengajuan_tempo_id.finance_name + company_id.finance_mobile = self.pengajuan_tempo_id.finance_mobile + company_id.finance_email = self.pengajuan_tempo_id.finance_email + + # Pengiriman + company_id.pic_name = self.pengajuan_tempo_id.pic_name + company_id.street_pengiriman = self.pengajuan_tempo_id.street_pengiriman + company_id.state_id_pengiriman = self.pengajuan_tempo_id.state_id_pengiriman + company_id.city_id_pengiriman = self.pengajuan_tempo_id.city_id_pengiriman + company_id.zip_pengiriman = self.pengajuan_tempo_id.zip_pengiriman + company_id.invoice_pic = self.pengajuan_tempo_id.invoice_pic + company_id.street_invoice = self.pengajuan_tempo_id.street_invoice + company_id.state_id_invoice = self.pengajuan_tempo_id.state_id_invoice + company_id.city_id_invoice = self.pengajuan_tempo_id.city_id_invoice + company_id.tukar_invoice = self.pengajuan_tempo_id.tukar_invoice + company_id.jadwal_bayar = self.pengajuan_tempo_id.jadwal_bayar + company_id.dokumen_pengiriman = self.pengajuan_tempo_id.dokumen_pengiriman + company_id.dokumen_invoice = self.pengajuan_tempo_id.dokumen_invoice + + # Referensi + company_id.supplier_ids = self.pengajuan_tempo_id.supplier_ids + + # Dokumen + company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib + if company_id.dokumen_nib: + company_id.message_post(body='Dokumen NIB', attachment_ids=[company_id.dokumen_nib.id]) + + company_id.dokumen_npwp = self.pengajuan_tempo_id.dokumen_npwp + if company_id.dokumen_npwp: + company_id.message_post(body='Dokumen NPWP', attachment_ids=[company_id.dokumen_npwp.id]) + + company_id.dokumen_sppkp = self.pengajuan_tempo_id.dokumen_sppkp + if company_id.dokumen_sppkp: + company_id.message_post(body='Dokumen SPPKP', attachment_ids=[company_id.dokumen_sppkp.id]) + + company_id.dokumen_akta_perubahan = self.pengajuan_tempo_id.dokumen_akta_perubahan + if company_id.dokumen_akta_perubahan: + company_id.message_post(body='Dokumen Akta Perubahan', + attachment_ids=[company_id.dokumen_akta_perubahan.id]) + + company_id.dokumen_ktp_dirut = self.pengajuan_tempo_id.dokumen_ktp_dirut + if company_id.dokumen_ktp_dirut: + company_id.message_post(body='Dokumen Ktp Dirut', + attachment_ids=[company_id.dokumen_ktp_dirut.id]) + + company_id.dokumen_akta_pendirian = self.pengajuan_tempo_id.dokumen_akta_pendirian + if company_id.dokumen_akta_pendirian: + company_id.message_post(body='Dokumen Akta Pendirian', + attachment_ids=[company_id.dokumen_akta_pendirian.id]) + + company_id.dokumen_laporan_keuangan = self.pengajuan_tempo_id.dokumen_laporan_keuangan + if company_id.dokumen_laporan_keuangan: + company_id.message_post(body='Dokumen Laporan Keuangan', + attachment_ids=[company_id.dokumen_laporan_keuangan.id]) + + company_id.dokumen_foto_kantor = self.pengajuan_tempo_id.dokumen_foto_kantor + if company_id.dokumen_foto_kantor: + company_id.message_post(body='Dokumen Foto Kantor', + attachment_ids=[company_id.dokumen_foto_kantor.id]) + + company_id.dokumen_tempat_bekerja = self.pengajuan_tempo_id.dokumen_tempat_bekerja + if company_id.dokumen_tempat_bekerja: + company_id.message_post(body='Dokumen Tempat Bekerja', + attachment_ids=[company_id.dokumen_tempat_bekerja.id]) + # self.user_company_id.active = True + # user.send_company_request_approve_mail() + else: + new_company = self.env['res.partner'].create({ + 'name': self.user_input + }) + # self.user_id.parent_id = new_company.id + # user.send_company_request_reject_mail() + return super(UserPengajuanTempoRequest, self).write(vals) + + def get_user_by_email(self, email): + return request.env['res.users'].search([ + ('login', '=', email), + ('active', 'in', [True, False]) + ]) \ 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 398a3067..1369a03a 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -44,6 +44,7 @@ access_wati_notification,access.wati.notification,model_wati_notification,,1,1,1 access_wati_api,access.wati.api,model_wati_api,,1,1,1,1 access_wati_contact,access.wati.contact,model_wati_contact,,1,1,1,1 access_user_company_request,access.user.company.request,model_user_company_request,,1,1,1,1 +access_user_pengajuan_tempo_request,access.user.pengajuan.tempo.request,model_user_pengajuan_tempo_request,,1,1,1,1 access_res_partner_company_type,access.res.partner.company_type,model_res_partner_company_type,,1,1,1,1 access_uangmuka_penjualan,access.uangmuka.penjualan,model_uangmuka_penjualan,,1,1,1,1 access_uangmuka_pembelian,access.uangmuka.pembelian,model_uangmuka_pembelian,,1,1,1,1 @@ -143,4 +144,5 @@ access_vendor_approval_line,access.vendor.approval.line,model_vendor_approval_li access_vit_kota,access.vit.kota,model_vit_kota,,1,1,1,1 access_v_brand_product_category,access.v.brand.product.category,model_v_brand_product_category,,1,1,1,1 access_web_find_page,access.web.find.page,model_web_find_page,,1,1,1,1 -access_pengajuan_tempo_supplier,access_pengajuan_tempo_supplier,model_pengajuan_tempo_supplier,base.group_user,1,1,1,1 \ No newline at end of file +access_User_pengajuan_tempo_line,access.user.pengajuan.tempo.line,model_user_pengajuan_tempo_line,,1,1,1,1 +access_user_pengajuan_tempo,access.user.pengajuan.tempo,model_user_pengajuan_tempo,,1,1,1,1 \ No newline at end of file diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 278f6d44..cc6b2357 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -73,16 +73,17 @@ - - - + + + + - - - - - - + + + + + + @@ -91,56 +92,74 @@ - - + + + + + + - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indoteknik_custom/views/user_pengajuan_tempo.xml b/indoteknik_custom/views/user_pengajuan_tempo.xml new file mode 100644 index 00000000..9874d79d --- /dev/null +++ b/indoteknik_custom/views/user_pengajuan_tempo.xml @@ -0,0 +1,129 @@ + + + + user.pengajuan.tempo.form + user.pengajuan.tempo + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + + user.pengajuan.tempo.tree + user.pengajuan.tempo + + + + + + + + + + + + + Pengajuan Tempo + user.pengajuan.tempo + tree,form + + + + + +
diff --git a/indoteknik_custom/views/user_pengajuan_tempo_line.xml b/indoteknik_custom/views/user_pengajuan_tempo_line.xml new file mode 100644 index 00000000..60b510bc --- /dev/null +++ b/indoteknik_custom/views/user_pengajuan_tempo_line.xml @@ -0,0 +1,42 @@ + + + user_pengajuan.tempo.line.tree + user_pengajuan.tempo.line + + + + + + + + + + + + + pengajuan.tempo.line.form + pengajuan.tempo.line + +
+ + + + + + + +
+
+
+ + + + Pengajuan Tempo Lines + pengajuan.tempo.line + tree,form + + + + + +
diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml new file mode 100644 index 00000000..19d00d44 --- /dev/null +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -0,0 +1,67 @@ + + + + user.pengajuan.tempo.request.tree + user.pengajuan.tempo.request + + + + + + + + + + + + + + + + user.pengajuan.tempo.request.form + user.pengajuan.tempo.request + +
+ + + + + + + + + + + + + + +
+
+
+ + + User Pengajuan Tempo Request + ir.actions.act_window + user.pengajuan.tempo.request + tree,form + + + +
\ No newline at end of file -- cgit v1.2.3 From 414ced359c181c612b302376cb740c7f5c02075f Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 31 Oct 2024 16:06:40 +0700 Subject: update pengajuan tempo fix suplier ids --- indoteknik_api/controllers/api_v1/partner.py | 7 +- indoteknik_custom/models/res_partner.py | 174 +++++++++++++-------- indoteknik_custom/models/user_pengajuan_tempo.py | 2 +- .../models/user_pengajuan_tempo_line.py | 2 - 4 files changed, 113 insertions(+), 72 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 1d7c682d..2ddd4437 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -301,6 +301,7 @@ class Partner(controller.Controller): try: form_supplier_data = json.loads(form_supplier_data) + supplier_ids_to_add = [] for item in form_supplier_data: supplier_name = item.get("supplier") pic_name = item.get("pic") @@ -310,8 +311,6 @@ class Partner(controller.Controller): new_data = { 'name_supplier': supplier_name, - 'pengajuan_tempo_id': pengajuan_tempo.id, - 'pengajuan_tempo_partner': False, 'pic_name': pic_name, 'phone': phone, 'tempo_duration': tempo_duration, @@ -319,6 +318,10 @@ class Partner(controller.Controller): } new_supplier_data = request.env['user.pengajuan.tempo.line'].create(new_data) + supplier_ids_to_add.append(new_supplier_data.id) + + pengajuan_tempo.write({'supplier_ids': [(4, supplier_id, 0) for supplier_id in supplier_ids_to_add]}) + except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formSupplier'}) category_produk_ids = kw.get('categoryProduk') diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 017c7c96..ec027ec1 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -8,74 +8,14 @@ class GroupPartner(models.Model): name = fields.Char(string='Name') - -# class NewPengajuanTempo(models.Model): -# _name = 'new.pengajuan.tempo' -# -# # Referensi -# supplier_ids = fields.One2many('pengajuan.tempo.line', 'pengajuan_tempo_id', string="Suppliers") -# -# # informasi perusahaan -# name_tempo = fields.Char(string="Nama Perusahaan") -# industry_id_tempo = fields.Many2one('res.partner.industry', 'Customer Industry', readonly=True) -# street_tempo = fields.Char(string="Alamat Perusahaan") -# state_id_tempo = fields.Many2one('res.country.state', string='State') -# city_id_tempo = fields.Many2one('vit.kota', string='City') -# zip_tempo = fields.Char(string="Zip") -# mobile_tempo = fields.Char(string="No. Telfon Perusahaan") -# bank_name_tempo = fields.Char(string="Nama Bank") -# account_name_tempo = fields.Char(string="Nama Rekening") -# account_number_tempo = fields.Char(string="Nomor Rekening Bank") -# website_tempo = fields.Char(string='Website') -# estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') -# tempo_duration = fields.Char(string='Durasi Tempo') -# tempo_limit = fields.Char(string='Limit Tempo') -# 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)] -# -# # Kontak Perusahaan -# direktur_name = fields.Char(string='Nama Lengkap Direktur') -# direktur_mobile = fields.Char(string='No. Telpon Direktur') -# direktur_email = fields.Char(string='Email Direktur') -# purchasing_name = fields.Char(string='Nama Purchasing') -# purchasing_mobile = fields.Char(string='No. Telpon Purchasing') -# purchasing_email = fields.Char(string='Email Purchasing') -# finance_name = fields.Char(string='Nama Finance') -# finance_mobile = fields.Char(string='No. Telpon Finance') -# finance_email = fields.Char(string='Email Finance') -# -# # Pengiriman -# pic_name = fields.Char(string='Nama PIC Penerimaan Barang') -# street_pengiriman = fields.Char(string="Alamat Perusahaan") -# state_id_pengiriman = fields.Many2one('res.country.state', string='State') -# city_id_pengiriman = fields.Many2one('vit.kota', string='City') -# zip_pengiriman = fields.Char(string="Zip") -# invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice') -# street_invoice = fields.Char(string="Alamat Perusahaan") -# country_id_invoice = fields.Many2one('res.country', string='Country') -# state_id_invoice = fields.Many2one('res.country.state', string='State') -# city_id_invoice = fields.Many2one('vit.kota', string='City') -# tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') -# jadwal_bayar = fields.Char(string='Jadwal Pembayaran') -# dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') -# dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') - - - class ResPartner(models.Model): _inherit = 'res.partner' # Referensi - supplier_ids = fields.One2many('user.pengajuan.tempo.line', 'pengajuan_tempo_partner', string="Suppliers") + supplier_ids = fields.Many2many('user.pengajuan.tempo.line', string="Suppliers") # informasi perusahaan - name_tempo = fields.Many2one( - 'res.partner', string='Nama Perusahaan', - tracking=True, # Menambahkan tracking=True - ) + name_tempo = fields.Many2one('res.partner', string='Nama Perusahaan',tracking=True) industry_id_tempo = fields.Many2one('res.partner.industry', 'Customer Industry', readonly=True) street_tempo = fields.Char(string="Alamat Perusahaan") state_id_tempo = fields.Many2one('res.country.state', string='State') @@ -89,8 +29,7 @@ class ResPartner(models.Model): estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') tempo_duration = fields.Char(string='Durasi Tempo') tempo_limit = fields.Char(string='Limit Tempo') - category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', - domain=lambda self: self._get_default_category_domain()) + 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): @@ -235,8 +174,63 @@ class ResPartner(models.Model): vals['sppkp'] = vals.get('sppkp', self.sppkp) vals['alamat_lengkap_text'] = vals.get('alamat_lengkap_text', self.alamat_lengkap_text) vals['industry_id'] = vals.get('industry_id', self.industry_id.id if self.industry_id else None) - vals['company_type_id'] = vals.get('company_type_id', - self.company_type_id.id if self.company_type_id else None) + vals['company_type_id'] = vals.get('company_type_id', self.company_type_id.id if self.company_type_id else None) + + # Referensi + vals['supplier_ids'] = vals.get('supplier_ids', self.supplier_ids) + + # informasi perusahaan + vals['name_tempo'] = vals.get('name_tempo', self.name_tempo) + vals['industry_id_tempo'] = vals.get('industry_id_tempo', self.industry_id_tempo) + vals['street_tempo'] = vals.get('street_tempo', self.street_tempo) + vals['state_id_tempo'] = vals.get('state_id_tempo', self.state_id_tempo) + vals['city_id_tempo'] = vals.get('city_id_tempo', self.city_id_tempo) + vals['zip_tempo'] = vals.get('zip_tempo', self.zip_tempo) + vals['bank_name_tempo'] = vals.get('bank_name_tempo', self.bank_name_tempo) + vals['account_name_tempo'] = vals.get('account_name_tempo', self.account_name_tempo) + vals['account_number_tempo'] = vals.get('account_number_tempo', self.account_number_tempo) + vals['website_tempo'] = vals.get('website_tempo', self.website_tempo) + vals['estimasi_tempo'] = vals.get('estimasi_tempo', self.estimasi_tempo) + vals['tempo_duration'] = vals.get('tempo_duration', self.tempo_duration) + vals['tempo_limit'] = vals.get('tempo_limit', self.tempo_limit) + vals['category_produk_ids'] = vals.get('category_produk_ids', self.category_produk_ids) + + # Kontak Perusahaan + vals['direktur_name'] = vals.get('direktur_name', self.direktur_name) + vals['direktur_mobile'] = vals.get('direktur_mobile', self.direktur_mobile) + vals['direktur_email'] = vals.get('direktur_email', self.direktur_email) + vals['purchasing_name'] = vals.get('purchasing_name', self.purchasing_name) + vals['purchasing_mobile'] = vals.get('purchasing_mobile', self.purchasing_mobile) + vals['purchasing_email'] = vals.get('purchasing_email', self.purchasing_email) + vals['finance_name'] = vals.get('finance_name', self.finance_name) + vals['finance_mobile'] = vals.get('finance_mobile', self.finance_mobile) + vals['finance_email'] = vals.get('finance_email', self.finance_email) + + # Pengiriman + vals['pic_name'] = vals.get('pic_name', self.pic_name) + vals['street_pengiriman'] = vals.get('street_pengiriman', self.street_pengiriman) + vals['state_id_pengiriman'] = vals.get('state_id_pengiriman', self.state_id_pengiriman) + vals['city_id_pengiriman'] = vals.get('city_id_pengiriman', self.city_id_pengiriman) + vals['zip_pengiriman'] = vals.get('zip_pengiriman', self.zip_pengiriman) + vals['invoice_pic'] = vals.get('invoice_pic', self.invoice_pic) + vals['street_invoice'] = vals.get('street_invoice', self.street_invoice) + vals['state_id_invoice'] = vals.get('state_id_invoice', self.state_id_invoice) + vals['city_id_invoice'] = vals.get('city_id_invoice', self.city_id_invoice) + vals['tukar_invoice'] = vals.get('tukar_invoice', self.tukar_invoice) + vals['jadwal_bayar'] = vals.get('jadwal_bayar', self.jadwal_bayar) + vals['dokumen_pengiriman'] = vals.get('dokumen_pengiriman', self.dokumen_pengiriman) + vals['dokumen_invoice'] = vals.get('dokumen_invoice', self.dokumen_invoice) + + # Dokumen + vals['dokumen_nib'] = vals.get('dokumen_nib', self.dokumen_nib) + vals['dokumen_npwp'] = vals.get('dokumen_npwp', self.dokumen_npwp) + vals['dokumen_sppkp'] = vals.get('dokumen_sppkp', self.dokumen_sppkp) + vals['dokumen_akta_perubahan'] = vals.get('dokumen_akta_perubahan', self.dokumen_akta_perubahan) + vals['dokumen_ktp_dirut'] = vals.get('dokumen_ktp_dirut', self.dokumen_ktp_dirut) + vals['dokumen_akta_pendirian'] = vals.get('dokumen_akta_pendirian', self.dokumen_akta_pendirian) + vals['dokumen_laporan_keuangan'] = vals.get('dokumen_laporan_keuangan', self.dokumen_laporan_keuangan) + 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) # Simpan hanya field yang perlu di-update pada child vals_for_child = { @@ -246,7 +240,53 @@ 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'), + 'supplier_ids': vals.get('supplier_ids'), + 'name_tempo': vals.get('name_tempo'), + 'industry_id_tempo': vals.get('industry_id_tempo'), + 'street_tempo': vals.get('street_tempo'), + 'state_id_tempo': vals.get('state_id_tempo'), + 'city_id_tempo': vals.get('city_id_tempo'), + 'zip_tempo': vals.get('zip_tempo'), + 'bank_name_tempo': vals.get('bank_name_tempo'), + 'account_name_tempo': vals.get('account_name_tempo'), + 'account_number_tempo': vals.get('account_number_tempo'), + 'website_tempo': vals.get('website_tempo'), + 'estimasi_tempo': vals.get('estimasi_tempo'), + 'tempo_duration': vals.get('tempo_duration'), + 'tempo_limit': vals.get('tempo_limit'), + 'category_produk_ids': vals.get('category_produk_ids'), + 'direktur_name': vals.get('direktur_name'), + 'direktur_mobile': vals.get('direktur_mobile'), + 'direktur_email': vals.get('direktur_email'), + 'purchasing_name': vals.get('purchasing_name'), + 'purchasing_mobile': vals.get('purchasing_mobile'), + 'purchasing_email': vals.get('purchasing_email'), + 'finance_name': vals.get('finance_name'), + 'finance_mobile': vals.get('finance_mobile'), + 'finance_email': vals.get('finance_email'), + 'pic_name': vals.get('pic_name'), + 'street_pengiriman': vals.get('street_pengiriman'), + 'state_id_pengiriman': vals.get('state_id_pengiriman'), + 'city_id_pengiriman': vals.get('city_id_pengiriman'), + 'zip_pengiriman': vals.get('zip_pengiriman'), + 'invoice_pic': vals.get('invoice_pic'), + 'street_invoice': vals.get('street_invoice'), + 'state_id_invoice': vals.get('state_id_invoice'), + 'city_id_invoice': vals.get('city_id_invoice'), + 'tukar_invoice': vals.get('tukar_invoice'), + 'jadwal_bayar': vals.get('jadwal_bayar'), + 'dokumen_pengiriman': vals.get('dokumen_pengiriman'), + 'dokumen_invoice': vals.get('dokumen_invoice'), + 'dokumen_nib': vals.get('dokumen_nib'), + 'dokumen_npwp': vals.get('dokumen_npwp'), + 'dokumen_sppkp': vals.get('dokumen_sppkp'), + 'dokumen_akta_perubahan': vals.get('dokumen_akta_perubahan'), + 'dokumen_ktp_dirut': vals.get('dokumen_ktp_dirut'), + 'dokumen_akta_pendirian': vals.get('dokumen_akta_pendirian'), + 'dokumen_laporan_keuangan': vals.get('dokumen_laporan_keuangan'), + 'dokumen_foto_kantor': vals.get('dokumen_foto_kantor'), + 'dokumen_tempat_bekerja': vals.get('dokumen_tempat_bekerja'), } # Lakukan update pada semua child secara rekursif diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index 42380fe9..47e99dbf 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -77,7 +77,7 @@ class UserPengajuanTempo(models.Model): dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') # Referensi - supplier_ids = fields.One2many('user.pengajuan.tempo.line', 'pengajuan_tempo_id', string="Suppliers") + supplier_ids = fields.Many2many('user.pengajuan.tempo.line', string="Suppliers") #Dokumen dokumen_nib = fields.Many2many('ir.attachment', 'pengajuan_dokumen_nib_rel', string="NIB (SIUP/TDP/SKDP)", tracking=3, track_visibility="onchange") diff --git a/indoteknik_custom/models/user_pengajuan_tempo_line.py b/indoteknik_custom/models/user_pengajuan_tempo_line.py index 7571bd41..db519ed6 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_line.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_line.py @@ -6,8 +6,6 @@ class PengajuanTempoLine(models.Model): # Fields untuk tabel supplier name_supplier = fields.Char(string="Nama Supplier") - pengajuan_tempo_id = fields.Many2one('user.pengajuan.tempo', string='Tempo Reference', required=True, ondelete='cascade') - pengajuan_tempo_partner = fields.Many2one('res.partner', string='Tempo Reference', ondelete='cascade') pic_name = fields.Char(string="PIC") phone = fields.Char(string="Telepon") tempo_duration = fields.Char(string="Durasi Tempo") -- cgit v1.2.3 From be2bc04768f9f423c66a612f4f183d20e70a3145 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 1 Nov 2024 13:50:41 +0700 Subject: update pengajuan tempo api --- indoteknik_api/controllers/api_v1/partner.py | 103 +++++++++++++++------------ 1 file changed, 59 insertions(+), 44 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 2ddd4437..921afac9 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -242,60 +242,72 @@ class Partner(controller.Controller): @controller.Controller.must_authorized() def write_pengajuan_tempo(self, **kw): user_id = int(kw.get('user_id')) + id = int(kw.get('id')) + tempo_request = kw.get('tempo_request',False) + pengajuan_tempo = request.env['user.pengajuan.tempo'].search([('id', '=', id)], limit=1) user = request.env['res.users'].search([('id', '=', user_id)], limit=1) - company_name = kw.get('name') + company_name = kw.get('name', pengajuan_tempo.name_tempo.name) partner_id = request.env['res.partner'].search([('name', 'like', company_name)], limit=1) params = self.get_request_params(kw, { # informasi perusahaan # 'name': ['required', 'alias:name_tempo'], - 'industry_id': ['required', 'alias:industry_id_tempo'], - 'street': ['required', 'alias:street_tempo'], - 'state': ['required', 'alias:state_id_tempo'], - 'city': ['required', 'alias:city_id_tempo'], - 'zip': ['required', 'alias:zip_tempo'], - 'mobile': ['required', 'alias:mobile_tempo'], - 'bankName': ['required', 'alias:bank_name_tempo'], - 'accountName': ['required', 'alias:account_name_tempo'], - 'accountNumber': ['required', 'alias:account_number_tempo'], + 'industry_id': ['alias:industry_id_tempo'], + 'street': ['alias:street_tempo'], + 'state': ['alias:state_id_tempo'], + 'city': ['alias:city_id_tempo'], + 'zip': ['alias:zip_tempo'], + 'mobile': ['alias:mobile_tempo'], + 'bankName': ['alias:bank_name_tempo'], + 'accountName': ['alias:account_name_tempo'], + 'accountNumber': ['alias:account_number_tempo'], 'website': ['alias:website_tempo'], - 'estimasi': ['required', 'alias:estimasi_tempo'], - 'tempoDuration': ['required', 'alias:tempo_duration'], - 'tempoLimit': ['required', 'alias:tempo_limit'], + 'estimasi': ['alias:estimasi_tempo'], + 'tempoDuration': ['alias:tempo_duration'], + 'tempoLimit': ['alias:tempo_limit'], # informasi perusahaan - 'direkturName': ['required', 'alias:direktur_name'], - 'direkturMobile': ['required', 'alias:direktur_mobile'], - 'direkturEmail': ['required', 'alias:direktur_email'], - 'purchasingName': ['required', 'alias:purchasing_name'], - 'purchasingMobile': ['required', 'alias:purchasing_mobile'], - 'purchasingEmail': ['required', 'alias:purchasing_email'], - 'financeName': ['required', 'alias:finance_name'], - 'financeMobile': ['required', 'alias:finance_mobile'], - 'financeEmail': ['required', 'alias:finance_email'], + 'direkturName': ['alias:direktur_name'], + 'direkturMobile': ['alias:direktur_mobile'], + 'direkturEmail': ['alias:direktur_email'], + 'purchasingName': ['alias:purchasing_name'], + 'purchasingMobile': ['alias:purchasing_mobile'], + 'purchasingEmail': ['alias:purchasing_email'], + 'financeName': ['alias:finance_name'], + 'financeMobile': ['alias:finance_mobile'], + 'financeEmail': ['alias:finance_email'], # Pengiriman - 'PICName': ['required', 'alias:pic_name'], - 'streetPengiriman': ['required', 'alias:street_pengiriman'], - 'statePengiriman': ['required', 'alias:state_id_pengiriman'], - 'cityPengiriman': ['required', 'alias:city_id_pengiriman'], - 'zipPengiriman': ['required', 'alias:zip_pengiriman'], - 'invoicePic': ['required', 'alias:invoice_pic'], - 'streetInvoice': ['required', 'alias:street_invoice'], - 'stateInvoice': ['required', 'alias:state_id_invoice'], - 'cityInvoice': ['required', 'alias:city_id_invoice'], + 'PICName': ['alias:pic_name'], + 'streetPengiriman': ['alias:street_pengiriman'], + 'statePengiriman': ['alias:state_id_pengiriman'], + 'cityPengiriman': ['alias:city_id_pengiriman'], + 'zipPengiriman': ['alias:zip_pengiriman'], + 'invoicePic': ['alias:invoice_pic'], + 'streetInvoice': ['alias:street_invoice'], + 'stateInvoice': ['alias:state_id_invoice'], + 'cityInvoice': ['alias:city_id_invoice'], }) if not params['valid']: return self.response(code=400, description=params) - pengajuan_tempo = request.env['user.pengajuan.tempo'].create([params['value']]) + # Filter data baru yang dikirim (non-kosong) + new_data = {key: value for key, value in params['value'].items() if value} + + if pengajuan_tempo: + # Jika pengajuan_tempo sudah ada, hanya write data baru yang non-kosong + pengajuan_tempo.write(new_data) + else: + # Jika belum ada, buat record baru + pengajuan_tempo = request.env['user.pengajuan.tempo'].create(new_data) + pengajuan_tempo.partner_id = user_id if partner_id: pengajuan_tempo.name_tempo = partner_id - form_supplier_data = kw.get('formSupplier') + form_supplier_data = kw.get('formSupplier', False) if form_supplier_data: try: @@ -324,10 +336,12 @@ class Partner(controller.Controller): except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formSupplier'}) - category_produk_ids = kw.get('categoryProduk') - category_ids = list(map(int, category_produk_ids.split(','))) + category_produk_ids = kw.get('categoryProduk', False) + category_ids = '' + if category_produk_ids: + category_ids = list(map(int, category_produk_ids.split(','))) + pengajuan_tempo.category_produk_ids = [(6, 0, category_ids)] - pengajuan_tempo.category_produk_ids = [(6, 0, category_ids)] every_weekday = True if kw.get('everyWeekday') == "true" else False every_weekday_input = kw.get('everyWeekdayInput') every_week = True if kw.get('everyWeek') == 'true' else False @@ -402,7 +416,7 @@ class Partner(controller.Controller): pengajuan_tempo.dokumen_invoice = ', '.join(dokumen_invoice) - form_dokumen_data = kw.get('formDocs') + form_dokumen_data = kw.get('formDocs', False) if form_dokumen_data: try: form_dokumen = json.loads(form_dokumen_data) @@ -454,12 +468,13 @@ class Partner(controller.Controller): except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) - - tempo_request = request.env['user.pengajuan.tempo.request'].create({ - 'user_id': user.partner_id.id, - 'pengajuan_tempo_id': pengajuan_tempo.id, - 'user_input': partner_id.name - }) + if tempo_request: + tempo_request = request.env['user.pengajuan.tempo.request'].create({ + 'user_id': user.partner_id.id, + 'pengajuan_tempo_id': pengajuan_tempo.id, + 'user_input': partner_id.name + }) return self.response({ - 'id': user_id, + 'id': pengajuan_tempo.id, + 'user_id': user_id, }) -- cgit v1.2.3 From 28227477f85b590b642f2d516d094f1f1c59f37f Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 14 Nov 2024 10:01:38 +0700 Subject: add data --- indoteknik_api/controllers/api_v1/partner.py | 1 + 1 file changed, 1 insertion(+) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 921afac9..e5f8d71c 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -232,6 +232,7 @@ class Partner(controller.Controller): data = { 'name': partner.name, + 'payment_term': partner.property_payment_term_id.name, 'amount_due': result_tempo, 'remaining_limit': remaining_limit } -- cgit v1.2.3 From dbbca494e13edce7ec6947b7bca6559b93c289f4 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 15 Nov 2024 14:20:46 +0700 Subject: pengajuan tempo api change --- indoteknik_api/models/account_move.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indoteknik_api/models/account_move.py b/indoteknik_api/models/account_move.py index 23a7076c..0855da2f 100644 --- a/indoteknik_api/models/account_move.py +++ b/indoteknik_api/models/account_move.py @@ -21,6 +21,8 @@ class AccountMove(models.Model): 'amount_residual': amount_residual, 'invoice_date': account_move.invoice_date.strftime('%d/%m/%Y') or '', 'efaktur': True if account_move.efaktur_document else False, + 'invoice_date_due': account_move.invoice_date_due.strftime('%d/%m/%Y') or '-', + 'sales_order': account_move.invoice_origin, } if isinstance(object, datetime.date): data['invoice_date'] = account_move.invoice_date.strftime('%d/%m/%Y') @@ -35,7 +37,6 @@ class AccountMove(models.Model): 'sales': account_move.invoice_user_id.name, 'amount_total': account_move.amount_total, 'amount_residual': amount_residual, - 'invoice_date_due': account_move.invoice_date_due.strftime('%d/%m/%Y') or '', 'customer': res_users.api_address_response(account_move.partner_id), 'products': [], } -- cgit v1.2.3 From 528a737f696b371faa4ede6e5044c84ad3e4785e Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Sat, 16 Nov 2024 09:15:42 +0700 Subject: ppn 12% --- indoteknik_custom/models/logbook_bill.py | 2 +- indoteknik_custom/models/purchase_pricelist.py | 4 ++-- indoteknik_custom/models/sale_order.py | 10 +++++----- indoteknik_custom/models/sale_order_line.py | 6 +++--- indoteknik_custom/models/stock_move.py | 2 +- indoteknik_custom/models/website_user_cart.py | 6 +++--- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/indoteknik_custom/models/logbook_bill.py b/indoteknik_custom/models/logbook_bill.py index bb956092..3c33aeb7 100644 --- a/indoteknik_custom/models/logbook_bill.py +++ b/indoteknik_custom/models/logbook_bill.py @@ -22,7 +22,7 @@ class LogbookBill(models.TransientModel): ('product_id', '=', line.product_id.id), ], order='id desc', limit=1) total += line.quantity_done * po.price_unit - total_with_tax = total * 1.11 + total_with_tax = total * 1.12 return total_with_tax diff --git a/indoteknik_custom/models/purchase_pricelist.py b/indoteknik_custom/models/purchase_pricelist.py index e5b35d7f..c543070a 100755 --- a/indoteknik_custom/models/purchase_pricelist.py +++ b/indoteknik_custom/models/purchase_pricelist.py @@ -48,9 +48,9 @@ class PurchasePricelist(models.Model): def _constrains_include_price(self): price, taxes = self._get_valid_price() - # When have tax is excluded or empty tax, then multiply by 1.11 + # When have tax is excluded or empty tax, then multiply by 1.12 if (taxes and not taxes.price_include) or not taxes: - price *= 1.11 + price *= 1.12 self.include_price = price diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 80e111a8..756c69cf 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -1170,7 +1170,7 @@ class SaleOrder(models.Model): line_voucher = used_discount * line_contribution line_voucher_item = line_voucher / line.product_uom_qty - line_price_unit = line.price_unit / 1.11 if any(tax.id == 23 for tax in line.tax_id) else line.price_unit + line_price_unit = line.price_unit / 1.12 if any(tax.id == 23 for tax in line.tax_id) else line.price_unit line_discount_item = line_price_unit * line.discount / 100 + line_voucher_item line_voucher_item = line_discount_item / line_price_unit * 100 @@ -1283,13 +1283,13 @@ class SaleOrder(models.Model): if last_so and rec_purchase_price != last_so.purchase_price: rec_taxes = self.env['account.tax'].search([('id', '=', rec_taxes_id)], limit=1) if rec_taxes.price_include: - selling_price = (rec_purchase_price / 1.11) / (1 - (last_so.item_percent_margin_without_deduction / 100)) + selling_price = (rec_purchase_price / 1.12) / (1 - (last_so.item_percent_margin_without_deduction / 100)) else: selling_price = rec_purchase_price / (1 - (last_so.item_percent_margin_without_deduction / 100)) tax_id = last_so.tax_id for tax in tax_id: if tax.price_include: - selling_price = selling_price + (selling_price*11/100) + selling_price = selling_price + (selling_price*12/100) else: selling_price = selling_price discount = 0 @@ -1305,13 +1305,13 @@ class SaleOrder(models.Model): elif last_so and rec_vendor_id == order_line.vendor_id.id and rec_purchase_price != last_so.purchase_price: rec_taxes = self.env['account.tax'].search([('id', '=', rec_taxes_id)], limit=1) if rec_taxes.price_include: - selling_price = (rec_purchase_price / 1.11) / (1 - (last_so.item_percent_margin_without_deduction / 100)) + selling_price = (rec_purchase_price / 1.12) / (1 - (last_so.item_percent_margin_without_deduction / 100)) else: selling_price = rec_purchase_price / (1 - (last_so.item_percent_margin_without_deduction / 100)) tax_id = last_so.tax_id for tax in tax_id: if tax.price_include: - selling_price = selling_price + (selling_price*11/100) + selling_price = selling_price + (selling_price*12/100) else: selling_price = selling_price discount = 0 diff --git a/indoteknik_custom/models/sale_order_line.py b/indoteknik_custom/models/sale_order_line.py index 04fafa69..c5fd9222 100644 --- a/indoteknik_custom/models/sale_order_line.py +++ b/indoteknik_custom/models/sale_order_line.py @@ -96,7 +96,7 @@ class SaleOrderLine(models.Model): purchase_price = line.purchase_price if line.purchase_tax_id.price_include: - purchase_price = line.purchase_price / 1.11 + purchase_price = line.purchase_price / 1.12 purchase_price = purchase_price * line.product_uom_qty margin_per_item = sales_price - purchase_price @@ -124,7 +124,7 @@ class SaleOrderLine(models.Model): purchase_price = line.purchase_price if line.purchase_tax_id.price_include: - purchase_price = line.purchase_price / 1.11 + purchase_price = line.purchase_price / 1.12 purchase_price = purchase_price * line.product_uom_qty margin_per_item = sales_price - purchase_price @@ -175,7 +175,7 @@ class SaleOrderLine(models.Model): # # tax_id = last_so.tax_id # if rec_vendor_id == self.vendor_id and rec_purchase_price != last_so.purchase_price: # if rec_taxes.price_include: - # selling_price = (rec_purchase_price/1.11) / (1-(last_so.line_item_margin / 100)) + # selling_price = (rec_purchase_price/1.12) / (1-(last_so.line_item_margin / 100)) # else: # selling_price = rec_purchase_price / (1-(last_so.line_item_margin / 100)) # tax_id = last_so.tax_id diff --git a/indoteknik_custom/models/stock_move.py b/indoteknik_custom/models/stock_move.py index ac2e3cc0..0b7734fb 100644 --- a/indoteknik_custom/models/stock_move.py +++ b/indoteknik_custom/models/stock_move.py @@ -91,7 +91,7 @@ class StockMove(models.Model): # 440 is static id for "PPN Keluaran" on account.account model debit_account_id = self.picking_id.account_id.id if self.picking_id.account_id.id else 538 - tax = cost * (11 / 100) + tax = cost * (12 / 100) move_lines = self._prepare_account_move_line(qty, cost, credit_account_id, debit_account_id, description) move_lines += self._prepare_account_move_line(qty, tax, 440, debit_account_id, description) diff --git a/indoteknik_custom/models/website_user_cart.py b/indoteknik_custom/models/website_user_cart.py index 494f32f3..a0c3e393 100644 --- a/indoteknik_custom/models/website_user_cart.py +++ b/indoteknik_custom/models/website_user_cart.py @@ -163,7 +163,7 @@ class WebsiteUserCart(models.Model): voucher_shipping_info = voucher_shipping.apply(order_line) discount_voucher_shipping = voucher_shipping_info['discount']['all'] - tax = round(subtotal * 0.11) + tax = round(subtotal * 0.12) grand_total = subtotal + tax total_weight = sum(x['weight'] * x['quantity'] for x in products) total_weight = round(total_weight, 2) @@ -240,7 +240,7 @@ class WebsiteUserCart(models.Model): total_voucher += voucher_product if total_discount > 0: - ppn = total_discount * 0.11 + ppn = total_discount * 0.12 return { 'total_discount': self.format_currency(total_discount), 'total_voucher': self.format_currency(total_voucher), @@ -352,7 +352,7 @@ class WebsiteUserCart(models.Model): discounted_price = fixed_price - (fixed_price * discount / 100) - final_price = discounted_price / 1.11 + final_price = discounted_price / 1.12 return { 'price': final_price, -- cgit v1.2.3 From 755e36e6fed87f787c2a0d31f4318a6eae97e55c Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 18 Nov 2024 13:42:09 +0700 Subject: add pengajuan tempo sales order id --- indoteknik_api/models/account_move.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indoteknik_api/models/account_move.py b/indoteknik_api/models/account_move.py index 0855da2f..645c157a 100644 --- a/indoteknik_api/models/account_move.py +++ b/indoteknik_api/models/account_move.py @@ -7,6 +7,7 @@ class AccountMove(models.Model): def api_v1_single_response(self, account_move, context=False): sale_order = self.env['sale.order'].search([('name', '=', account_move.invoice_origin), ('state', '=', 'done')], limit=1) + sale_order_v2 = self.env['sale.order'].search([('name', '=', account_move.invoice_origin)],limit=1) amount_residual = account_move.amount_residual if sale_order.payment_status == 'settlement' or sale_order.payment_status == 'capture': amount_residual = 0 @@ -23,6 +24,7 @@ class AccountMove(models.Model): 'efaktur': True if account_move.efaktur_document else False, 'invoice_date_due': account_move.invoice_date_due.strftime('%d/%m/%Y') or '-', 'sales_order': account_move.invoice_origin, + 'sales_order_id': sale_order_v2.id, } if isinstance(object, datetime.date): data['invoice_date'] = account_move.invoice_date.strftime('%d/%m/%Y') -- cgit v1.2.3 From 5667449f58ecdf5803a28944e503ae1611cc8416 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Sat, 23 Nov 2024 11:56:24 +0700 Subject: update tempo --- indoteknik_api/controllers/api_v1/partner.py | 33 ++++++++++-- indoteknik_api/models/__init__.py | 1 + indoteknik_api/models/res_partner.py | 68 ++++++++++++++++++++++++ indoteknik_custom/models/user_pengajuan_tempo.py | 2 +- 4 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 indoteknik_api/models/res_partner.py diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index e5f8d71c..9325d9aa 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -211,6 +211,32 @@ class Partner(controller.Controller): }) return self.response(data) + + @http.route(prefix + 'partner/payment_term', auth='public', methods=['GET', 'OPTIONS']) + @controller.Controller.must_authorized() + def get_partner_payment_term(self): + partner_industry = request.env['account.payment.term'].search([]) + data = [] + for industry in partner_industry: + if 'tempo' in industry.name.lower(): + data.append({ + 'id': industry.id, + 'name': industry.name + }) + + return self.response(data) + + @http.route(prefix + 'partner/detail-tempo/', auth='public', methods=['GET', 'OPTIONS']) + @controller.Controller.must_authorized() + def get_partner_detail_tempo(self, **kw): + params = self.get_request_params(kw, { + 'id': ['required', 'number'] + }) + pengajuan_tempo = request.env['user.pengajuan.tempo'].search([('name_tempo', '=', params['value']['id'])], limit=1) + if not pengajuan_tempo: + return self.response(code=404, description='pengajuan tempo not found') + pengajuan_tempo = request.env['res.partner'].api_single_response(pengajuan_tempo) + return self.response(pengajuan_tempo) @http.route(prefix + 'check//tempo', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() @@ -244,8 +270,9 @@ class Partner(controller.Controller): def write_pengajuan_tempo(self, **kw): user_id = int(kw.get('user_id')) id = int(kw.get('id')) + section = kw.get('section') tempo_request = kw.get('tempo_request',False) - pengajuan_tempo = request.env['user.pengajuan.tempo'].search([('id', '=', id)], limit=1) + pengajuan_tempo = request.env['user.pengajuan.tempo'].search([('name_tempo', '=', user_id)], limit=1) user = request.env['res.users'].search([('id', '=', user_id)], limit=1) company_name = kw.get('name', pengajuan_tempo.name_tempo.name) partner_id = request.env['res.partner'].search([('name', 'like', company_name)], limit=1) @@ -254,7 +281,7 @@ class Partner(controller.Controller): # informasi perusahaan # 'name': ['required', 'alias:name_tempo'], - 'industry_id': ['alias:industry_id_tempo'], + 'industryId': ['alias:industry_id_tempo'], 'street': ['alias:street_tempo'], 'state': ['alias:state_id_tempo'], 'city': ['alias:city_id_tempo'], @@ -469,7 +496,7 @@ class Partner(controller.Controller): except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) - if tempo_request: + if 'konfirmasi' in section.lower(): tempo_request = request.env['user.pengajuan.tempo.request'].create({ 'user_id': user.partner_id.id, 'pengajuan_tempo_id': pengajuan_tempo.id, 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..8ea8d301 --- /dev/null +++ b/indoteknik_api/models/res_partner.py @@ -0,0 +1,68 @@ +from odoo import models + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + def api_single_response(self, res_partner, with_detail=''): + config = self.env['ir.config_parameter'] + + partner = res_partner.partner_id + data = { + 'name' : res_partner.name_tempo.name, + 'industry_id' : res_partner.industry_id_tempo.id, + 'street' : res_partner.street_tempo, + 'state' : res_partner.state_id_tempo.id, + 'city' : res_partner.city_id_tempo.id, + 'zip' : res_partner.zip_tempo, + 'mobile' : res_partner.mobile_tempo, + 'bank_name' : res_partner.bank_name_tempo, + 'account_name' : res_partner.account_name_tempo, + 'account_number' : res_partner.account_number_tempo, + 'website' : res_partner.website_tempo if res_partner.website_tempo else '', + 'estimasi' : res_partner.estimasi_tempo, + 'tempo_duration' : res_partner.tempo_duration.id, + 'tempo_limit' : res_partner.tempo_limit, + 'category_produk': ','.join([str(cat.id) for cat in res_partner.category_produk_ids]) if res_partner.category_produk_ids else '', + + # Kontak Perusahaan + 'direktur_name' : res_partner.direktur_name if res_partner.direktur_name else '', + 'direktur_mobile' : res_partner.direktur_mobile if res_partner.direktur_mobile else '', + 'direktur_email' : res_partner.direktur_email if res_partner.direktur_email else '', + 'purchasing_name' : res_partner.purchasing_name if res_partner.purchasing_name else '', + 'purchasing_mobile' : res_partner.purchasing_mobile if res_partner.purchasing_mobile else '', + 'purchasing_email' : res_partner.purchasing_email if res_partner.purchasing_email else '', + 'finance_name' : res_partner.finance_name if res_partner.finance_name else '', + 'finance_mobile' : res_partner.finance_mobile if res_partner.finance_mobile else '', + 'finance_email' : res_partner.finance_email if res_partner.finance_email else '', + + # Pengiriman + 'PIC_name' : res_partner.pic_name if res_partner.pic_name else '', + 'street_pengiriman' : res_partner.street_pengiriman if res_partner.street_pengiriman else '', + 'state_id_pengiriman' : res_partner.state_id_pengiriman.id if res_partner.state_id_pengiriman else '', + 'city_id_pengiriman' : res_partner.city_id_pengiriman.id if res_partner.city_id_pengiriman else '', + 'zip_pengiriman' : res_partner.zip_pengiriman if res_partner.zip_pengiriman else '', + 'invoice_pic' : res_partner.invoice_pic if res_partner.invoice_pic else '', + 'street_invoice' : res_partner.street_invoice if res_partner.street_invoice else '', + 'state_id_invoice' : res_partner.state_id_invoice.id if res_partner.state_id_invoice else '', + 'city_id_invoice' : res_partner.city_id_invoice.id if res_partner.city_id_invoice else '', + 'tukar_invoice' : res_partner.tukar_invoice if res_partner.tukar_invoice else '', + 'jadwal_bayar' : res_partner.jadwal_bayar if res_partner.jadwal_bayar else '', + 'dokumen_pengiriman' : res_partner.dokumen_pengiriman if res_partner.dokumen_pengiriman else '', + 'dokumen_invoice' : res_partner.dokumen_invoice if res_partner.dokumen_invoice else '', + + 'supplier_ids': res_partner.supplier_ids if res_partner.supplier_ids else '', + + # Dokumen + 'dokumen_nib': res_partner.dokumen_nib if res_partner.dokumen_nib else '', + 'dokumen_npwp': res_partner.dokumen_npwp if res_partner.dokumen_npwp else '', + 'dokumen_sppkp': res_partner.dokumen_sppkp if res_partner.dokumen_sppkp else '', + 'dokumen_akta_perubahan': res_partner.dokumen_akta_perubahan if res_partner.dokumen_akta_perubahan else '', + 'dokumen_ktp_dirut': res_partner.dokumen_ktp_dirut if res_partner.dokumen_ktp_dirut else '', + 'dokumen_akta_pendirian': res_partner.dokumen_akta_pendirian if res_partner.dokumen_akta_pendirian else '', + 'dokumen_laporan_keuangan': res_partner.dokumen_laporan_keuangan if res_partner.dokumen_laporan_keuangan else '', + 'dokumen_foto_kantor': res_partner.dokumen_foto_kantor if res_partner.dokumen_foto_kantor else '', + 'dokumen_tempat_bekerja': res_partner.dokumen_tempat_bekerja if res_partner.dokumen_tempat_bekerja else '', + } + + return data \ No newline at end of file diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index 47e99dbf..763f302e 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -42,7 +42,7 @@ class UserPengajuanTempo(models.Model): account_number_tempo = fields.Char(string="Nomor Rekening Bank") website_tempo = fields.Char(string='Website') estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') - tempo_duration = fields.Char(string='Durasi Tempo') + tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') tempo_limit = fields.Char(string='Limit Tempo') category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', domain=lambda self: self._get_default_category_domain()) -- cgit v1.2.3 From c78bd0f71238b85752b9f97e8e687a197f544b53 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 25 Nov 2024 10:04:44 +0700 Subject: update pengajuan tempo --- indoteknik_api/controllers/api_v1/partner.py | 18 +++++++++--------- indoteknik_api/models/res_partner.py | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 9325d9aa..5534eb9b 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -383,8 +383,8 @@ class Partner(controller.Controller): jadwal_tukar_invoice += f", setiap {every_week_input}" if tukar_invoice or tukar_invoice_input: jadwal_tukar_invoice += f", {tukar_invoice_input}" - - pengajuan_tempo.tukar_invoice = jadwal_tukar_invoice + if jadwal_tukar_invoice: + pengajuan_tempo.tukar_invoice = jadwal_tukar_invoice every_weekday_pembayaran = True if kw.get('everyWeekdayPembayaran') == 'true' else False every_weekday_input_pembayaran = kw.get('everyWeekdayInputPembayaran') @@ -399,8 +399,8 @@ class Partner(controller.Controller): jadwal_tukar_invoice_pembayaran += f", setiap {every_week_input_pembayaran}" if tukar_invoice_pembayaran or tukar_invoice_input_pembayaran: jadwal_tukar_invoice_pembayaran += f", {tukar_invoice_input_pembayaran}" - - pengajuan_tempo.jadwal_bayar = jadwal_tukar_invoice_pembayaran + if jadwal_tukar_invoice_pembayaran: + pengajuan_tempo.jadwal_bayar = jadwal_tukar_invoice_pembayaran dokumen_kirim = [ 'Surat Tanda Terima Barang (STTB)', @@ -420,8 +420,8 @@ class Partner(controller.Controller): if dokumen_kirim_barang_input: input_items = [item.strip() for item in dokumen_kirim_barang_input.split(',')] dokumen_kirim_barang.extend(item for item in input_items if item and item not in dokumen_kirim_barang) - - pengajuan_tempo.dokumen_pengiriman = ', '.join(dokumen_kirim_barang) + if dokumen_kirim_barang: + pengajuan_tempo.dokumen_pengiriman = ', '.join(dokumen_kirim_barang) dokumen = [ 'Invoice Pembelian', @@ -435,14 +435,14 @@ class Partner(controller.Controller): dokumen_invoice_input = kw.get('dokumenPengirimanInvoiceInput', '') dokumen_invoice = "" - if dokumen_kirim_barang_ids: + if dokumen_invoice_ids: dokumen_ids = list(map(int, dokumen_invoice_ids.split(','))) dokumen_invoice = [dokumen[i] for i in dokumen_ids if 0 <= i < len(dokumen)] if dokumen_invoice_input: input_items = [item.strip() for item in dokumen_invoice_input.split(',')] dokumen_invoice.extend(item for item in input_items if item and item not in dokumen_invoice) - - pengajuan_tempo.dokumen_invoice = ', '.join(dokumen_invoice) + if dokumen_invoice: + pengajuan_tempo.dokumen_invoice = ', '.join(dokumen_invoice) form_dokumen_data = kw.get('formDocs', False) if form_dokumen_data: diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index 8ea8d301..32d66d69 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -49,7 +49,7 @@ class ResPartner(models.Model): 'tukar_invoice' : res_partner.tukar_invoice if res_partner.tukar_invoice else '', 'jadwal_bayar' : res_partner.jadwal_bayar if res_partner.jadwal_bayar else '', 'dokumen_pengiriman' : res_partner.dokumen_pengiriman if res_partner.dokumen_pengiriman else '', - 'dokumen_invoice' : res_partner.dokumen_invoice if res_partner.dokumen_invoice else '', + 'dokumen_pengiriman_invoice' : res_partner.dokumen_invoice if res_partner.dokumen_invoice else '', 'supplier_ids': res_partner.supplier_ids if res_partner.supplier_ids else '', -- cgit v1.2.3 From ad01e57b8f321f1c9f2830a98fa91d25e2c848d7 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 25 Nov 2024 17:04:20 +0700 Subject: update api pengajuan tempo --- indoteknik_api/controllers/api_v1/partner.py | 3 +- indoteknik_api/models/res_partner.py | 65 ++++++++++++++++++++++------ 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 5534eb9b..dccda601 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -270,7 +270,6 @@ class Partner(controller.Controller): def write_pengajuan_tempo(self, **kw): user_id = int(kw.get('user_id')) id = int(kw.get('id')) - section = kw.get('section') tempo_request = kw.get('tempo_request',False) pengajuan_tempo = request.env['user.pengajuan.tempo'].search([('name_tempo', '=', user_id)], limit=1) user = request.env['res.users'].search([('id', '=', user_id)], limit=1) @@ -496,7 +495,7 @@ class Partner(controller.Controller): except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) - if 'konfirmasi' in section.lower(): + if tempo_request: tempo_request = request.env['user.pengajuan.tempo.request'].create({ 'user_id': user.partner_id.id, 'pengajuan_tempo_id': pengajuan_tempo.id, diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index 32d66d69..4099a094 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -1,5 +1,5 @@ from odoo import models - +import json class ResPartner(models.Model): _inherit = 'res.partner' @@ -8,6 +8,35 @@ class ResPartner(models.Model): config = self.env['ir.config_parameter'] partner = res_partner.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 res_partner.dokumen_pengiriman : + res_partner_dokumen_pengiriman = res_partner.dokumen_pengiriman + mapping_dokumen = {item[0]: item[1] for item in dokumen_kirim} + dokumen_pengiriman_list = [dokumen.strip() for dokumen in res_partner_dokumen_pengiriman.split(',')] + dokumen_pengiriman = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_pengiriman_list] + + dokumen = [ + ['Invoice Pembelian','0'], + ['Surat Jalan','1'], + ['Berita Acara Serah Terima (BAST)','2'], + ['Faktur Pajak','3'], + ['Good Receipt (GR)','4'] + ] + dokumen_invoice = [] + if res_partner.dokumen_invoice: + res_partner_dokumen_invoice = res_partner.dokumen_invoice + mapping_dokumen = {item[0]: item[1] for item in dokumen} + dokumen_invoice_list = [dokumen.strip() for dokumen in res_partner_dokumen_invoice.split(',')] + dokumen_invoice = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_invoice_list] + + data = { 'name' : res_partner.name_tempo.name, 'industry_id' : res_partner.industry_id_tempo.id, @@ -48,21 +77,31 @@ class ResPartner(models.Model): 'city_id_invoice' : res_partner.city_id_invoice.id if res_partner.city_id_invoice else '', 'tukar_invoice' : res_partner.tukar_invoice if res_partner.tukar_invoice else '', 'jadwal_bayar' : res_partner.jadwal_bayar if res_partner.jadwal_bayar else '', - 'dokumen_pengiriman' : res_partner.dokumen_pengiriman if res_partner.dokumen_pengiriman else '', - 'dokumen_pengiriman_invoice' : res_partner.dokumen_invoice if res_partner.dokumen_invoice else '', + 'dokumen_pengiriman' : ','.join(dokumen_pengiriman) if dokumen_pengiriman else '', + 'dokumen_pengiriman_invoice' : ','.join(dokumen_invoice) if dokumen_invoice else '', - 'supplier_ids': res_partner.supplier_ids if res_partner.supplier_ids else '', + '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 res_partner.supplier_ids + ] if res_partner.supplier_ids else '' # Dokumen - 'dokumen_nib': res_partner.dokumen_nib if res_partner.dokumen_nib else '', - 'dokumen_npwp': res_partner.dokumen_npwp if res_partner.dokumen_npwp else '', - 'dokumen_sppkp': res_partner.dokumen_sppkp if res_partner.dokumen_sppkp else '', - 'dokumen_akta_perubahan': res_partner.dokumen_akta_perubahan if res_partner.dokumen_akta_perubahan else '', - 'dokumen_ktp_dirut': res_partner.dokumen_ktp_dirut if res_partner.dokumen_ktp_dirut else '', - 'dokumen_akta_pendirian': res_partner.dokumen_akta_pendirian if res_partner.dokumen_akta_pendirian else '', - 'dokumen_laporan_keuangan': res_partner.dokumen_laporan_keuangan if res_partner.dokumen_laporan_keuangan else '', - 'dokumen_foto_kantor': res_partner.dokumen_foto_kantor if res_partner.dokumen_foto_kantor else '', - 'dokumen_tempat_bekerja': res_partner.dokumen_tempat_bekerja if res_partner.dokumen_tempat_bekerja else '', + # 'dokumen_nib': res_partner.dokumen_nib if res_partner.dokumen_nib else '', + # 'dokumen_npwp': res_partner.dokumen_npwp if res_partner.dokumen_npwp else '', + # 'dokumen_sppkp': res_partner.dokumen_sppkp if res_partner.dokumen_sppkp else '', + # 'dokumen_akta_perubahan': res_partner.dokumen_akta_perubahan if res_partner.dokumen_akta_perubahan else '', + # 'dokumen_ktp_dirut': res_partner.dokumen_ktp_dirut if res_partner.dokumen_ktp_dirut else '', + # 'dokumen_akta_pendirian': res_partner.dokumen_akta_pendirian if res_partner.dokumen_akta_pendirian else '', + # 'dokumen_laporan_keuangan': res_partner.dokumen_laporan_keuangan if res_partner.dokumen_laporan_keuangan else '', + # 'dokumen_foto_kantor': res_partner.dokumen_foto_kantor if res_partner.dokumen_foto_kantor else '', + # 'dokumen_tempat_bekerja': res_partner.dokumen_tempat_bekerja if res_partner.dokumen_tempat_bekerja else '', } return data \ No newline at end of file -- cgit v1.2.3 From c5d2edf1a1e905d270e5cd1e5b6ed0cb5fa0bba1 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 26 Nov 2024 08:59:14 +0700 Subject: uptade pengajuan tempo --- indoteknik_api/controllers/api_v1/partner.py | 2 ++ indoteknik_api/models/res_partner.py | 3 ++- indoteknik_custom/models/user_pengajuan_tempo.py | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index dccda601..2ff17ffe 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -315,6 +315,8 @@ class Partner(controller.Controller): 'streetInvoice': ['alias:street_invoice'], 'stateInvoice': ['alias:state_id_invoice'], 'cityInvoice': ['alias:city_id_invoice'], + 'isSameAddrees':['alias:is_same_address'], + 'isSameAddreesStreet': ['alias:is_same_address_street'], }) if not params['valid']: diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index 4099a094..9b9f87d4 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -79,7 +79,8 @@ class ResPartner(models.Model): 'jadwal_bayar' : res_partner.jadwal_bayar if res_partner.jadwal_bayar else '', 'dokumen_pengiriman' : ','.join(dokumen_pengiriman) if dokumen_pengiriman else '', 'dokumen_pengiriman_invoice' : ','.join(dokumen_invoice) if dokumen_invoice else '', - + 'is_same_address': res_partner.is_same_address if res_partner.is_same_address else False, + 'res_partner.is_same_address': res_partner.is_same_address_street if res_partner.is_same_address_street else False, 'supplier_ids': [ { 'id': supplier.id, diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index 763f302e..d8a6d106 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -75,6 +75,8 @@ class UserPengajuanTempo(models.Model): jadwal_bayar = fields.Char(string='Jadwal Pembayaran') dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') + is_same_address = fields.Boolean(string="Same Address pengiriman invoicr dan alamat pengiriman barang") + is_same_address_street = fields.Boolean(string="Same Address pengiriman barang dan alamat bisnis") # Referensi supplier_ids = fields.Many2many('user.pengajuan.tempo.line', string="Suppliers") -- cgit v1.2.3 From bf3e780400a8f26ae6284e78372d05f999fac021 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 26 Nov 2024 16:09:02 +0700 Subject: CR company request --- indoteknik_custom/models/user_company_request.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/indoteknik_custom/models/user_company_request.py b/indoteknik_custom/models/user_company_request.py index dd9a35c1..4aa2683a 100644 --- a/indoteknik_custom/models/user_company_request.py +++ b/indoteknik_custom/models/user_company_request.py @@ -64,6 +64,7 @@ class UserCompanyRequest(models.Model): user.parent_name = self.user_input is_approve = vals.get('is_approve') is_internal_input = vals.get('internal_input') + is_company_id = vals.get('user_company_id') if self.is_approve and is_approve: raise UserError('Tidak dapat mengubah approval yang sudah diisi') @@ -71,10 +72,21 @@ class UserCompanyRequest(models.Model): if self.user_company_id.nama_wajib_pajak == self.user_company_id.name: self.user_company_id.nama_wajib_pajak = is_internal_input self.user_company_id.name = is_internal_input + if is_company_id: + self.user_company_id.customer_type = is_company_id.customer_type + self.user_company_id.npwp = is_company_id.npwp + self.user_company_id.sppkp = is_company_id.sppkp + self.user_company_id.nama_wajib_pajak = is_company_id.nama_wajib_pajak + self.user_company_id.alamat_lengkap_text = is_company_id.alamat_lengkap_text + self.user_company_id.industry_id.id = is_company_id.industry_id.id + self.user_company_id.company_type_id.id = is_company_id.company_type_id.id + self.user_company_id.user_id = is_company_id.user_id + self.user_company_id.property_account_receivable_id = is_company_id.property_account_receivable_id + self.user_company_id.property_account_payable_id = is_company_id.property_account_payable_id if not self.is_approve and is_approve: if is_approve == 'approved': - self.user_id.parent_id = vals.get('user_company_id') if vals.get('user_company_id') else self.user_company_id.id + self.user_id.parent_id = is_company_id if is_company_id else self.user_company_id.id self.user_id.customer_type = self.user_company_id.customer_type self.user_id.npwp = self.user_company_id.npwp self.user_id.sppkp = self.user_company_id.sppkp -- cgit v1.2.3 From 07aef813e0b6dc413fdf08ac56b9d0ffed24fc68 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 28 Nov 2024 16:53:36 +0700 Subject: update code --- indoteknik_custom/models/user_company_request.py | 46 +++++++++++++----------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/indoteknik_custom/models/user_company_request.py b/indoteknik_custom/models/user_company_request.py index 4aa2683a..ea5ca09e 100644 --- a/indoteknik_custom/models/user_company_request.py +++ b/indoteknik_custom/models/user_company_request.py @@ -72,31 +72,35 @@ class UserCompanyRequest(models.Model): if self.user_company_id.nama_wajib_pajak == self.user_company_id.name: self.user_company_id.nama_wajib_pajak = is_internal_input self.user_company_id.name = is_internal_input + user_company_id = [] if is_company_id: - self.user_company_id.customer_type = is_company_id.customer_type - self.user_company_id.npwp = is_company_id.npwp - self.user_company_id.sppkp = is_company_id.sppkp - self.user_company_id.nama_wajib_pajak = is_company_id.nama_wajib_pajak - self.user_company_id.alamat_lengkap_text = is_company_id.alamat_lengkap_text - self.user_company_id.industry_id.id = is_company_id.industry_id.id - self.user_company_id.company_type_id.id = is_company_id.company_type_id.id - self.user_company_id.user_id = is_company_id.user_id - self.user_company_id.property_account_receivable_id = is_company_id.property_account_receivable_id - self.user_company_id.property_account_payable_id = is_company_id.property_account_payable_id + user_company_id = request.env['res.partner'].search([('id', '=', is_company_id)], limit=1) + # self.user_company_id.customer_type = self.similar_company_ids.customer_type + # self.user_company_id.npwp = self.similar_company_ids.npwp + # self.user_company_id.sppkp = self.similar_company_ids.sppkp + # self.user_company_id.nama_wajib_pajak = self.similar_company_ids.nama_wajib_pajak + # self.user_company_id.alamat_lengkap_text = self.similar_company_ids.alamat_lengkap_text + # self.user_company_id.industry_id = self.similar_company_ids.industry_id + # self.user_company_id.company_type_id = self.similar_company_ids.company_type_id + # self.user_company_id.user_id = self.similar_company_ids.user_id + # self.user_company_id.property_account_receivable_id = self.similar_company_ids.property_account_receivable_id + # self.user_company_id.property_account_payable_id = self.similar_company_ids.property_account_payable_id if not self.is_approve and is_approve: if is_approve == 'approved': - self.user_id.parent_id = is_company_id if is_company_id else self.user_company_id.id - self.user_id.customer_type = self.user_company_id.customer_type - self.user_id.npwp = self.user_company_id.npwp - self.user_id.sppkp = self.user_company_id.sppkp - self.user_id.nama_wajib_pajak = self.user_company_id.nama_wajib_pajak - self.user_id.alamat_lengkap_text = self.user_company_id.alamat_lengkap_text - self.user_id.industry_id = self.user_company_id.industry_id.id - self.user_id.company_type_id = self.user_company_id.company_type_id.id - self.user_id.user_id = self.user_company_id.user_id - self.user_id.property_account_receivable_id = self.user_company_id.property_account_receivable_id - self.user_id.property_account_payable_id = self.user_company_id.property_account_payable_id + self.user_id.parent_id = user_company_id.id if user_company_id.id else self.user_company_id.id + self.user_id.customer_type = user_company_id.customer_type + self.user_id.npwp = user_company_id.npwp + self.user_id.sppkp = user_company_id.sppkp + self.user_id.nama_wajib_pajak = user_company_id.nama_wajib_pajak + self.user_id.alamat_lengkap_text = user_company_id.alamat_lengkap_text + self.user_id.industry_id = user_company_id.industry_id.id + self.user_id.company_type_id = user_company_id.company_type_id.id + self.user_id.user_id = user_company_id.user_id + self.user_id.property_account_receivable_id = user_company_id.property_account_receivable_id + self.user_id.property_account_payable_id = user_company_id.property_account_payable_id + self.user_id.property_payment_term_id = user_company_id.property_payment_term_id + self.user_id.property_supplier_payment_term_id = user_company_id.property_supplier_payment_term_id self.user_company_id.active = True user.send_company_request_approve_mail() else: -- cgit v1.2.3 From e3724de1677288345db05b9934f5197d11c1a713 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 29 Nov 2024 11:27:56 +0700 Subject: pengajuan tempo --- .../models/user_pengajuan_tempo_request.py | 57 ---------------------- .../views/user_pengajuan_tempo_request.xml | 9 ---- 2 files changed, 66 deletions(-) diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index 6c04ab7c..438d48cc 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -7,75 +7,18 @@ class UserPengajuanTempoRequest(models.Model): _rec_name = 'user_id' user_id = fields.Many2one('res.partner', string='User') - user_company_id = fields.Many2one('res.partner', string='Company') - user_input = fields.Char(string='User Input') is_approve = fields.Selection([ ('approved', 'Approve'), ('rejected', 'Reject'), ], string='Approval') - similar_company_ids = fields.Many2many('res.partner', compute="_compute_similar_companies", string="Similar Companies") pengajuan_tempo_id = fields.Many2one('user.pengajuan.tempo', string='Form Tempo') - - @api.depends('user_input') - def _compute_similar_companies(self): - for record in self: - if record.user_input: - record.similar_company_ids = [(6, 0, self.get_similar_companies(record.user_input))] - else: - record.similar_company_ids = [(6, 0, [])] - - # def get_similar_companies(self, user_input): - # query = """ - # SELECT id - # FROM res_partner - # WHERE levenshtein(name::text, %s) < 3 - # ORDER BY levenshtein(name::text, %s) ASC - # """ - # self.env.cr.execute(query, (user_input, user_input)) - # return [row[0] for row in self.env.cr.fetchall()] - - def get_similar_companies(self, user_input): - query = """ - SELECT id - FROM res_partner - WHERE (name ILIKE %s OR levenshtein(name::text, %s) < 3) - AND active = TRUE AND is_company = TRUE - ORDER BY levenshtein(name::text, %s) ASC - """ - # Menggunakan '%' untuk mencocokkan nama perusahaan sebagian - self.env.cr.execute(query, ('%' + user_input + '%', user_input, user_input)) - company_ids = [row[0] for row in self.env.cr.fetchall()] - return company_ids - - internal_input = fields.Char(string='Internal Input') - company_type = fields.Char(string='Company Type', compute='_compute_company_type') - - @api.depends('user_company_id.customer_type') - def _compute_company_type(self): - for record in self: - if record.user_company_id.customer_type == 'nonpkp': - record.company_type = 'Non PKP' - elif record.user_company_id.customer_type == 'pkp': - record.company_type = 'PKP' - else: - record.company_type = 'company type belum di set' - def write(self, vals): user = self.get_user_by_email(self.user_id.email) - user.parent_name = self.user_input is_approve = vals.get('is_approve') - is_internal_input = vals.get('internal_input') company_id = '' - if not self.user_company_id: - company_id = request.env['res.partner'].search([('id', '=', vals.get('user_company_id'))], limit=1) if self.is_approve and is_approve: raise UserError('Tidak dapat mengubah approval yang sudah diisi') - if is_internal_input: - if self.user_company_id.nama_wajib_pajak == self.user_company_id.name: - self.user_company_id.nama_wajib_pajak = is_internal_input - self.user_company_id.name = is_internal_input - if not self.is_approve and is_approve: if is_approve == 'approved': self.pengajuan_tempo_id.partner_id = self.user_id.id diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 19d00d44..3b08799c 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -7,16 +7,12 @@ - - - - @@ -32,17 +28,12 @@ - - - - - -- cgit v1.2.3 From 07c14fedc459106189d040e7724e6d7f81051658 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 29 Nov 2024 13:00:05 +0700 Subject: update pengajuan tempo --- indoteknik_api/controllers/api_v1/partner.py | 1 - 1 file changed, 1 deletion(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 2ff17ffe..088f6f5b 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -501,7 +501,6 @@ class Partner(controller.Controller): tempo_request = request.env['user.pengajuan.tempo.request'].create({ 'user_id': user.partner_id.id, 'pengajuan_tempo_id': pengajuan_tempo.id, - 'user_input': partner_id.name }) return self.response({ 'id': pengajuan_tempo.id, -- cgit v1.2.3 From 6fbfe31167e6eb66d4995374dadb14774026e8c7 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 2 Dec 2024 09:31:13 +0700 Subject: pengajuan tempo update --- indoteknik_api/controllers/api_v1/partner.py | 34 ++- indoteknik_api/controllers/api_v1/user.py | 16 +- indoteknik_api/models/res_users.py | 15 +- indoteknik_custom/models/res_partner.py | 7 +- indoteknik_custom/models/res_users.py | 5 + indoteknik_custom/models/solr/apache_solr.py | 2 +- indoteknik_custom/models/user_pengajuan_tempo.py | 15 ++ .../models/user_pengajuan_tempo_request.py | 261 +++++++++++++-------- indoteknik_custom/views/res_users.xml | 2 + indoteknik_custom/views/user_pengajuan_tempo.xml | 205 ++++++++++++++++ .../views/user_pengajuan_tempo_request.xml | 30 ++- 11 files changed, 460 insertions(+), 132 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 088f6f5b..19c73aec 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -265,16 +265,29 @@ class Partner(controller.Controller): return self.response(data) + @http.route(prefix + 'check//tempo_progress', auth='public', methods=['GET', 'OPTIONS']) + @controller.Controller.must_authorized() + def get_check_tempo_partner_progres(self, **kw): + partner_id = int(kw.get('partner_id')) + partner = request.env['res.partner'].search([('id', '=', partner_id)], limit=1) + pengajuan_tempo = request.env['user.pengajuan.tempo'].search([('name_tempo', '=', partner.id)], limit=1) + if not pengajuan_tempo: + return self.response(code=404, description='Partner not found') + + data = True if pengajuan_tempo.id else False + return self.response(data) + @http.route(prefix + 'partner/pengajuan_tempo', auth='public', methods=['POST'], csrf=False) @controller.Controller.must_authorized() def write_pengajuan_tempo(self, **kw): + id = int(kw.get('partner_id')) user_id = int(kw.get('user_id')) - id = int(kw.get('id')) - tempo_request = kw.get('tempo_request',False) + tempo_request = True if kw.get('tempo_request') == 'true' else False pengajuan_tempo = request.env['user.pengajuan.tempo'].search([('name_tempo', '=', user_id)], limit=1) - user = request.env['res.users'].search([('id', '=', user_id)], limit=1) + user = request.env['res.partner'].search([('id', '=', id)], limit=1) company_name = kw.get('name', pengajuan_tempo.name_tempo.name) partner_id = request.env['res.partner'].search([('name', 'like', company_name)], limit=1) + user_account = self.get_user_by_email(user.user_id.email) params = self.get_request_params(kw, { @@ -499,10 +512,23 @@ class Partner(controller.Controller): return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) if tempo_request: tempo_request = request.env['user.pengajuan.tempo.request'].create({ - 'user_id': user.partner_id.id, + 'user_id': user.id, 'pengajuan_tempo_id': pengajuan_tempo.id, + 'user_company_id': partner_id.id, + 'tempo_duration': pengajuan_tempo.tempo_duration.id, + 'tempo_limit': pengajuan_tempo.tempo_limit, }) + pengajuan_tempo.user_id = user_account.id + template = pengajuan_tempo.env.ref('indoteknik_custom.mail_template_user_cart_reminder_to_checkout') + template.send_mail(pengajuan_tempo.id, force_send=True) + # user_account.send_activation_mail() return self.response({ 'id': pengajuan_tempo.id, 'user_id': user_id, }) + + def get_user_by_email(self, email): + return request.env['res.users'].search([ + ('login', '=', email), + ('active', 'in', [True, False]) + ]) \ No newline at end of file diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index 3be874fa..f83937ea 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -179,7 +179,7 @@ class User(controller.Controller): if result: match_company_name = result[0] - match_company_id = result[2] + match_company_id = result[1] # Create a user company request request.env['user.company.request'].create({ @@ -403,6 +403,20 @@ class User(controller.Controller): 'user': self.response_with_token(user) }) + @http.route(prefix + 'user//after_request_tempo', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) + @controller.Controller.must_authorized() + def update_user_tempo(self, **kw): + id = kw.get('id') + + user = request.env['res.users'].search([('id', '=', id)], limit=1) + if not user: + return self.response(code=404, description='User not found') + + + return self.response({ + 'user': self.response_with_token(user, payment_tempo='Review') + }) + @http.route(prefix + 'user//address', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() def get_user_address_by_id(self, **kw): diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index 52a044dc..40933957 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -1,10 +1,10 @@ from odoo import models - +from odoo.http import request class ResUsers(models.Model): _inherit = 'res.users' - def api_single_response(self, res_user, with_detail=''): + def api_single_response(self, res_user, with_detail='', payment_tempo= ''): config = self.env['ir.config_parameter'] partner = res_user.partner_id @@ -14,9 +14,13 @@ class ResUsers(models.Model): 'manager': 2, 'director': 3 } - partner_tempo = False + partner_tempo = '' + is_tempo_request = request.env['user.pengajuan.tempo.request'].search([('name_tempo', '=', partner.id)], limit=1) + tempo_progres = 'review' if is_tempo_request else '' if main_partner: - partner_tempo = main_partner.get_check_tempo_partner() + partner_tempo = main_partner.get_check_payment_term() + if payment_tempo: + tempo_progres = payment_tempo data = { 'id': res_user.id, @@ -36,7 +40,8 @@ class ResUsers(models.Model): 'so_approval': main_partner.use_so_approval, 'only_ready_stock': main_partner.use_only_ready_stock }, - 'partner_tempo': partner_tempo + 'partner_tempo': partner_tempo, + 'tempo_progres': tempo_progres } return data diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index f01ea481..b21b1965 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -406,13 +406,10 @@ class ResPartner(models.Model): if self.customer_type == 'nonpkp': self.npwp = '00.000.000.0-000.000' - def get_check_tempo_partner(self): + def get_check_payment_term(self): self.ensure_one() partner = self.parent_id or self - if not partner.property_payment_term_id or 'Tempo' not in partner.property_payment_term_id.name: - return False - else: - return True + return partner.property_payment_term_id.name if partner.property_payment_term_id.id else 'Cash Before Delivery (C.B.D)' diff --git a/indoteknik_custom/models/res_users.py b/indoteknik_custom/models/res_users.py index 5e16aad1..fb9e8bfb 100755 --- a/indoteknik_custom/models/res_users.py +++ b/indoteknik_custom/models/res_users.py @@ -46,6 +46,11 @@ class ResUsers(models.Model): for user in self: template.send_mail(user.id, force_send=True) + def send_company_request_tempo_review(self): + template = self.env.ref('indoteknik_custom.mail_template_res_user_company_tempo_review') + for user in self: + template.send_mail(user.id, force_send=True) + def get_activation_token_url(self): base_url = self.env['ir.config_parameter'].get_param('site.base.url') return f'{base_url}/register?activation=token&token={self.activation_token}' diff --git a/indoteknik_custom/models/solr/apache_solr.py b/indoteknik_custom/models/solr/apache_solr.py index 6560c9b5..d111c1c1 100644 --- a/indoteknik_custom/models/solr/apache_solr.py +++ b/indoteknik_custom/models/solr/apache_solr.py @@ -22,7 +22,7 @@ class ApacheSolr(models.Model): url = '' if env == 'development': - url = 'http://192.168.23.5:8983/solr/' + url = 'http://localhost:8983/solr/' elif env == 'production': url = 'http://34.101.189.218:8983/solr/' diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index d8a6d106..006bbb55 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -18,6 +18,9 @@ class UserPengajuanTempo(models.Model): _name = 'user.pengajuan.tempo' _inherit = ['mail.thread', 'mail.activity.mixin'] partner_id = fields.Char() + _description = 'User Pengajuan Tempo' + + name = fields.Char(string='Name', required=True) # informasi perusahaan # name_tempo = fields.Many2one( @@ -31,6 +34,7 @@ class UserPengajuanTempo(models.Model): 'res.partner', string='Nama Perusahaan', tracking=True, # Menambahkan tracking=True ) + user_id = fields.Many2one('res.users', string='User') industry_id_tempo = fields.Many2one('res.partner.industry', 'Customer Industry', readonly=True) street_tempo = fields.Char(string="Alamat Perusahaan") state_id_tempo = fields.Many2one('res.country.state', string='State') @@ -97,6 +101,17 @@ class UserPengajuanTempo(models.Model): string=" Foto Kantor (Tampak Depan)", tracking=3) dokumen_tempat_bekerja = fields.Many2many('ir.attachment', 'pengajuan_dokumen_tempat_bekerja_rel', string="Tempat Bekerja", tracking=3) + + @api.depends('name', 'name_tempo') + def name_get(self): + result = [] + for record in self: + if record.name_tempo: + display_name = f"DETAIL FORM TEMPO - {record.name_tempo.name}" + else: + display_name = "DETAIL FORM TEMPO" + result.append((record.id, display_name)) + return result # # def _compute_attachment_url(self): # if self.id: diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index 438d48cc..b7526238 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -4,118 +4,171 @@ from odoo.http import request class UserPengajuanTempoRequest(models.Model): _name = 'user.pengajuan.tempo.request' + _inherit = ['mail.thread', 'mail.activity.mixin'] _rec_name = 'user_id' user_id = fields.Many2one('res.partner', string='User') - is_approve = fields.Selection([ - ('approved', 'Approve'), - ('rejected', 'Reject'), - ], string='Approval') + user_company_id = fields.Many2one('res.partner', string='Company') pengajuan_tempo_id = fields.Many2one('user.pengajuan.tempo', string='Form Tempo') + tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') + tempo_limit = fields.Char(string='Limit Tempo') + state_tempo = fields.Selection([ + ('draft', 'Pengajuan Tempo'), + ('approval_sales', 'Approved by Sales Manager'), + ('approval_finance', 'Approved by Finance'), + ('approval_director', 'Approved by Director'), + ], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft') + + @api.onchange('tempo_duration') + def _tempo_duration_change(self): + for tempo in self: + if tempo.env.user.id not in (7, 377): + raise UserError("Durasi tempo hanya bisa di ubah oleh Sales Manager atau Direktur") + + @api.onchange('tempo_limit') + def _tempo_limit_change(self): + for tempo in self: + if tempo.env.user.id not in (7, 377): + raise UserError("Limit tempo hanya bisa di ubah oleh Sales Manager atau Direktur") + + def button_approve(self): + for tempo in self: + if tempo.state_tempo == 'draft': + if tempo.env.user.id in (688, 28, 7): + raise UserError("Pengajuan tempo harus di approve oleh sales manager terlebih dahulu") + else: + # if tempo.env.user.id != 377: + if tempo.env.user.id != 25: + raise UserError("Pengajuan tempo hanya bisa di approve oleh sales manager") + else: + tempo.state_tempo = 'approval_sales' + + elif tempo.state_tempo == 'approval_sales': + if tempo.env.user.id == 7: + raise UserError("Pengajuan tempo harus di approve oleh Finence terlebih dahulu") + else: + # if tempo.env.user.id not in (688, 28): + if tempo.env.user.id not in (101): + raise UserError("Pengajuan tempo hanya bisa di approve oleh Finence") + else: + tempo.state_tempo = 'approval_finance' + + elif tempo.state_tempo == 'approval_finance': + # if tempo.env.user.id != 7: + if tempo.env.user.id != 12182: + raise UserError("Pengajuan tempo hanya bisa di approve oleh Direktur") + else: + tempo.state_tempo = 'approval_director' + + + + res = super(UserPengajuanTempoRequest, self).button_approve() + return res + def write(self, vals): user = self.get_user_by_email(self.user_id.email) - is_approve = vals.get('is_approve') - company_id = '' - if self.is_approve and is_approve: - raise UserError('Tidak dapat mengubah approval yang sudah diisi') - - if not self.is_approve and is_approve: - if is_approve == 'approved': - self.pengajuan_tempo_id.partner_id = self.user_id.id - # informasi perusahaan - company_id.name_tempo = self.pengajuan_tempo_id.name_tempo - company_id.industry_id_tempo = self.pengajuan_tempo_id.industry_id_tempo - company_id.street_tempo = self.pengajuan_tempo_id.street_tempo - company_id.state_id_tempo = self.pengajuan_tempo_id.state_id_tempo - company_id.city_id_tempo = self.pengajuan_tempo_id.city_id_tempo - company_id.zip_tempo = self.pengajuan_tempo_id.zip_tempo - company_id.mobile_tempo = self.pengajuan_tempo_id.mobile_tempo - company_id.bank_name_tempo = self.pengajuan_tempo_id.bank_name_tempo - company_id.account_name_tempo = self.pengajuan_tempo_id.account_name_tempo - company_id.account_number_tempo = self.pengajuan_tempo_id.account_number_tempo - company_id.website_tempo = self.pengajuan_tempo_id.website_tempo - company_id.estimasi_tempo = self.pengajuan_tempo_id.estimasi_tempo - company_id.tempo_duration = self.pengajuan_tempo_id.tempo_duration - company_id.tempo_limit = self.pengajuan_tempo_id.tempo_limit - company_id.category_produk_ids = self.pengajuan_tempo_id.category_produk_ids - - # Kontak Perusahaan - company_id.direktur_name = self.pengajuan_tempo_id.direktur_name - company_id.direktur_mobile = self.pengajuan_tempo_id.direktur_mobile - company_id.direktur_email = self.pengajuan_tempo_id.direktur_email - company_id.purchasing_name = self.pengajuan_tempo_id.purchasing_name - company_id.purchasing_mobile = self.pengajuan_tempo_id.purchasing_mobile - company_id.purchasing_email = self.pengajuan_tempo_id.purchasing_email - company_id.finance_name = self.pengajuan_tempo_id.finance_name - company_id.finance_mobile = self.pengajuan_tempo_id.finance_mobile - company_id.finance_email = self.pengajuan_tempo_id.finance_email - - # Pengiriman - company_id.pic_name = self.pengajuan_tempo_id.pic_name - company_id.street_pengiriman = self.pengajuan_tempo_id.street_pengiriman - company_id.state_id_pengiriman = self.pengajuan_tempo_id.state_id_pengiriman - company_id.city_id_pengiriman = self.pengajuan_tempo_id.city_id_pengiriman - company_id.zip_pengiriman = self.pengajuan_tempo_id.zip_pengiriman - company_id.invoice_pic = self.pengajuan_tempo_id.invoice_pic - company_id.street_invoice = self.pengajuan_tempo_id.street_invoice - company_id.state_id_invoice = self.pengajuan_tempo_id.state_id_invoice - company_id.city_id_invoice = self.pengajuan_tempo_id.city_id_invoice - company_id.tukar_invoice = self.pengajuan_tempo_id.tukar_invoice - company_id.jadwal_bayar = self.pengajuan_tempo_id.jadwal_bayar - company_id.dokumen_pengiriman = self.pengajuan_tempo_id.dokumen_pengiriman - company_id.dokumen_invoice = self.pengajuan_tempo_id.dokumen_invoice - - # Referensi - company_id.supplier_ids = self.pengajuan_tempo_id.supplier_ids - - # Dokumen - company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib - if company_id.dokumen_nib: - company_id.message_post(body='Dokumen NIB', attachment_ids=[company_id.dokumen_nib.id]) - - company_id.dokumen_npwp = self.pengajuan_tempo_id.dokumen_npwp - if company_id.dokumen_npwp: - company_id.message_post(body='Dokumen NPWP', attachment_ids=[company_id.dokumen_npwp.id]) - - company_id.dokumen_sppkp = self.pengajuan_tempo_id.dokumen_sppkp - if company_id.dokumen_sppkp: - company_id.message_post(body='Dokumen SPPKP', attachment_ids=[company_id.dokumen_sppkp.id]) - - company_id.dokumen_akta_perubahan = self.pengajuan_tempo_id.dokumen_akta_perubahan - if company_id.dokumen_akta_perubahan: - company_id.message_post(body='Dokumen Akta Perubahan', - attachment_ids=[company_id.dokumen_akta_perubahan.id]) - - company_id.dokumen_ktp_dirut = self.pengajuan_tempo_id.dokumen_ktp_dirut - if company_id.dokumen_ktp_dirut: - company_id.message_post(body='Dokumen Ktp Dirut', - attachment_ids=[company_id.dokumen_ktp_dirut.id]) - - company_id.dokumen_akta_pendirian = self.pengajuan_tempo_id.dokumen_akta_pendirian - if company_id.dokumen_akta_pendirian: - company_id.message_post(body='Dokumen Akta Pendirian', - attachment_ids=[company_id.dokumen_akta_pendirian.id]) - - company_id.dokumen_laporan_keuangan = self.pengajuan_tempo_id.dokumen_laporan_keuangan - if company_id.dokumen_laporan_keuangan: - company_id.message_post(body='Dokumen Laporan Keuangan', - attachment_ids=[company_id.dokumen_laporan_keuangan.id]) - - company_id.dokumen_foto_kantor = self.pengajuan_tempo_id.dokumen_foto_kantor - if company_id.dokumen_foto_kantor: - company_id.message_post(body='Dokumen Foto Kantor', - attachment_ids=[company_id.dokumen_foto_kantor.id]) - - company_id.dokumen_tempat_bekerja = self.pengajuan_tempo_id.dokumen_tempat_bekerja - if company_id.dokumen_tempat_bekerja: - company_id.message_post(body='Dokumen Tempat Bekerja', - attachment_ids=[company_id.dokumen_tempat_bekerja.id]) + is_approve = True if self.state_tempo == 'approval_director' else False + # if self.is_approve and is_approve: + # raise UserError('Tidak dapat mengubah approval yang sudah diisi') + + if is_approve: + self.pengajuan_tempo_id.partner_id = self.user_id.id + # informasi perusahaan + self.user_company_id.name_tempo = self.pengajuan_tempo_id.name_tempo + self.user_company_id.industry_id_tempo = self.pengajuan_tempo_id.industry_id_tempo + self.user_company_id.street_tempo = self.pengajuan_tempo_id.street_tempo + self.user_company_id.state_id_tempo = self.pengajuan_tempo_id.state_id_tempo + self.user_company_id.city_id_tempo = self.pengajuan_tempo_id.city_id_tempo + self.user_company_id.zip_tempo = self.pengajuan_tempo_id.zip_tempo + self.user_company_id.mobile_tempo = self.pengajuan_tempo_id.mobile_tempo + self.user_company_id.bank_name_tempo = self.pengajuan_tempo_id.bank_name_tempo + self.user_company_id.account_name_tempo = self.pengajuan_tempo_id.account_name_tempo + self.user_company_id.account_number_tempo = self.pengajuan_tempo_id.account_number_tempo + self.user_company_id.website_tempo = self.pengajuan_tempo_id.website_tempo + self.user_company_id.estimasi_tempo = self.pengajuan_tempo_id.estimasi_tempo + self.user_company_id.tempo_duration = vals.get('tempo_duration') if vals.get('tempo_duration') else self.pengajuan_tempo_id.tempo_duration + self.user_company_id.tempo_limit = vals.get('tempo_limit') if vals.get('tempo_limit') else self.pengajuan_tempo_id.tempo_limit + self.user_company_id.category_produk_ids = self.pengajuan_tempo_id.category_produk_ids + + # Kontak Perusahaan + self.user_company_id.direktur_name = self.pengajuan_tempo_id.direktur_name + self.user_company_id.direktur_mobile = self.pengajuan_tempo_id.direktur_mobile + self.user_company_id.direktur_email = self.pengajuan_tempo_id.direktur_email + self.user_company_id.purchasing_name = self.pengajuan_tempo_id.purchasing_name + self.user_company_id.purchasing_mobile = self.pengajuan_tempo_id.purchasing_mobile + self.user_company_id.purchasing_email = self.pengajuan_tempo_id.purchasing_email + self.user_company_id.finance_name = self.pengajuan_tempo_id.finance_name + self.user_company_id.finance_mobile = self.pengajuan_tempo_id.finance_mobile + self.user_company_id.finance_email = self.pengajuan_tempo_id.finance_email + + # Pengiriman + self.user_company_id.pic_name = self.pengajuan_tempo_id.pic_name + self.user_company_id.street_pengiriman = self.pengajuan_tempo_id.street_pengiriman + self.user_company_id.state_id_pengiriman = self.pengajuan_tempo_id.state_id_pengiriman + self.user_company_id.city_id_pengiriman = self.pengajuan_tempo_id.city_id_pengiriman + self.user_company_id.zip_pengiriman = self.pengajuan_tempo_id.zip_pengiriman + self.user_company_id.invoice_pic = self.pengajuan_tempo_id.invoice_pic + self.user_company_id.street_invoice = self.pengajuan_tempo_id.street_invoice + self.user_company_id.state_id_invoice = self.pengajuan_tempo_id.state_id_invoice + self.user_company_id.city_id_invoice = self.pengajuan_tempo_id.city_id_invoice + self.user_company_id.tukar_invoice = self.pengajuan_tempo_id.tukar_invoice + self.user_company_id.jadwal_bayar = self.pengajuan_tempo_id.jadwal_bayar + self.user_company_id.dokumen_pengiriman = self.pengajuan_tempo_id.dokumen_pengiriman + self.user_company_id.dokumen_invoice = self.pengajuan_tempo_id.dokumen_invoice + + # Referensi + self.user_company_id.supplier_ids = self.pengajuan_tempo_id.supplier_ids + + # Dokumen + self.user_company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib + if self.user_company_id.dokumen_nib: + self.user_company_id.message_post(body='Dokumen NIB', attachment_ids=[self.user_company_id.dokumen_nib.id]) + + self.user_company_id.dokumen_npwp = self.pengajuan_tempo_id.dokumen_npwp + if self.user_company_id.dokumen_npwp: + self.user_company_id.message_post(body='Dokumen NPWP', attachment_ids=[self.user_company_id.dokumen_npwp.id]) + + self.user_company_id.dokumen_sppkp = self.pengajuan_tempo_id.dokumen_sppkp + if self.user_company_id.dokumen_sppkp: + self.user_company_id.message_post(body='Dokumen SPPKP', attachment_ids=[self.user_company_id.dokumen_sppkp.id]) + + self.user_company_id.dokumen_akta_perubahan = self.pengajuan_tempo_id.dokumen_akta_perubahan + if self.user_company_id.dokumen_akta_perubahan: + self.user_company_id.message_post(body='Dokumen Akta Perubahan', + attachment_ids=[self.user_company_id.dokumen_akta_perubahan.id]) + + self.user_company_id.dokumen_ktp_dirut = self.pengajuan_tempo_id.dokumen_ktp_dirut + if self.user_company_id.dokumen_ktp_dirut: + self.user_company_id.message_post(body='Dokumen Ktp Dirut', + attachment_ids=[self.user_company_id.dokumen_ktp_dirut.id]) + + self.user_company_id.dokumen_akta_pendirian = self.pengajuan_tempo_id.dokumen_akta_pendirian + if self.user_company_id.dokumen_akta_pendirian: + self.user_company_id.message_post(body='Dokumen Akta Pendirian', + attachment_ids=[self.user_company_id.dokumen_akta_pendirian.id]) + + self.user_company_id.dokumen_laporan_keuangan = self.pengajuan_tempo_id.dokumen_laporan_keuangan + if self.user_company_id.dokumen_laporan_keuangan: + self.user_company_id.message_post(body='Dokumen Laporan Keuangan', + attachment_ids=[self.user_company_id.dokumen_laporan_keuangan.id]) + + self.user_company_id.dokumen_foto_kantor = self.pengajuan_tempo_id.dokumen_foto_kantor + if self.user_company_id.dokumen_foto_kantor: + self.user_company_id.message_post(body='Dokumen Foto Kantor', + attachment_ids=[self.user_company_id.dokumen_foto_kantor.id]) + + self.user_company_id.dokumen_tempat_bekerja = self.pengajuan_tempo_id.dokumen_tempat_bekerja + if self.user_company_id.dokumen_tempat_bekerja: + self.user_company_id.message_post(body='Dokumen Tempat Bekerja', + attachment_ids=[self.user_company_id.dokumen_tempat_bekerja.id]) # self.user_company_id.active = True # user.send_company_request_approve_mail() - else: - new_company = self.env['res.partner'].create({ - 'name': self.user_input - }) + self.user_company_id.property_payment_term_id = self.pengajuan_tempo_id.tempo_duration.id + self.user_company_id.active_limit = True + self.user_company_id.warning_stage = self.pengajuan_tempo_id.tempo_limit - (int(self.pengajuan_tempo_id.tempo_limit)/2) + self.user_company_id.blocking_stage = self.pengajuan_tempo_id.tempo_limit + template = self.env.ref('indoteknik_custom.mail_template_user_cart_reminder_to_checkout') + template.send_mail(latest_cart.id, force_send=True) # self.user_id.parent_id = new_company.id # user.send_company_request_reject_mail() return super(UserPengajuanTempoRequest, self).write(vals) diff --git a/indoteknik_custom/views/res_users.xml b/indoteknik_custom/views/res_users.xml index 39b9d43e..d7a6b2dd 100644 --- a/indoteknik_custom/views/res_users.xml +++ b/indoteknik_custom/views/res_users.xml @@ -254,5 +254,7 @@ + + \ No newline at end of file diff --git a/indoteknik_custom/views/user_pengajuan_tempo.xml b/indoteknik_custom/views/user_pengajuan_tempo.xml index 9874d79d..5b8ed293 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo.xml @@ -116,6 +116,211 @@ + + Users: Company Request Tempo Review + + Permohonan Tempo Anda Sedang Ditinjau + "Indoteknik.com" <noreply@indoteknik.com> + noreply@indoteknik.com + ${object.user_id.login | safe} + + + +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + +
Hai. ${object.name_tempo.name},
Terima kasih atas kepercayaan Anda memilih indoteknik.com. Kami telah menerima permohonan pemayaran tempo Anda.
Saat ini, tim kami sedang melakukan peninjauan terhadap permohonan Anda. Proses peninjauan ini membutuhkan waktu.
Kami akan informasikan kembali mengenai hasil peninjauan pembayaran tempo anda melalui email ini.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
+ Indoteknik +
+
+
+
+
+
+
+ + + Users: Company Tempo Reject + + Mohon Maaf Pengajuan Tempo anda kami Tolak + "Indoteknik.com" <noreply@indoteknik.com> + noreply@indoteknik.com + ${object.user_id.login | safe} + + + +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + +
Hai. ${object.name_tempo.name},
Kami sampaikan dengan sangat menyesal bahwa pengajuan permohonan tempo pembayaran Anda yang diajukan pada tanggal ${format_date(object.create_date, 'dd MMMM yyyy')} tidak dapat kami setujui.
Keputusan ini telah kami pertimbangkan secara matang berdasarkan beberapa faktor, termasuk [alasan penolakan, misal: riwayat pembayaran, profil kredit, atau kebijakan perusahaan].
Kami memahami bahwa hal ini mungkin mengecewakan. Namun, kami berharap Anda dapat memahami kebijakan perusahaan kami.
Terima kasih atas pengertiannya.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
+ Indoteknik +
+
+
+
+
+
+
+ + + Users: Company Tempo Approved + + Pengajuan Tempo kamu di Indoteknik.com Telah Disetujui! + "Indoteknik.com" <noreply@indoteknik.com> + noreply@indoteknik.com + ${object.user_id.login | safe} + + + +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Hai. ${object.name_tempo.name},
Kabar baik! Kami dengan senang hati menginformasikan bahwa pengajuan tempo pembayaran kamui di Indoteknik.com telah disetujui dengan detail sebagai berikut.
Limit Pembayaran Tempo : Rp ${object.format_currency(object.tempo_limit)}
Durasi Pembayaran Tempo : ${object.tempo_duration.name}
Kamu dapat melakukan pembayaran sesuai dengan jangka waktu yang telah disepakati. Detail lengkap mengenai transaksi kamu, termasuk tanggal jatuh tempo & Pengajuan Kenaikan Limit Tempo, dapat kamu lihat di akun Profile Indoteknik.com.
Terima kasih atas kepercayaan kamu kepada Indoteknik.com.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
+ Indoteknik +
+
+
+
+
+
+
+ Pengajuan Tempo diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 3b08799c..4a8243da 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -7,12 +7,6 @@ - @@ -23,17 +17,29 @@ user.pengajuan.tempo.request
+
+
- + + -- cgit v1.2.3 From cf6581d8a9ddfd5a7e3c1c2d7aa5aab8b96f4813 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 3 Dec 2024 13:22:55 +0700 Subject: pengajuan tempo --- indoteknik_api/controllers/api_v1/user.py | 2 +- indoteknik_api/models/res_users.py | 4 +- indoteknik_custom/models/user_pengajuan_tempo.py | 2 + .../models/user_pengajuan_tempo_request.py | 156 +++++++++--- indoteknik_custom/security/ir.model.access.csv | 4 +- indoteknik_custom/views/user_pengajuan_tempo.xml | 71 +++--- .../views/user_pengajuan_tempo_request.xml | 261 ++++++++++++++++++++- 7 files changed, 419 insertions(+), 81 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index f83937ea..51dae0a2 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -179,7 +179,7 @@ class User(controller.Controller): if result: match_company_name = result[0] - match_company_id = result[1] + match_company_id = result[2] # Create a user company request request.env['user.company.request'].create({ diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index 40933957..15aaa5a7 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -15,8 +15,8 @@ class ResUsers(models.Model): 'director': 3 } partner_tempo = '' - is_tempo_request = request.env['user.pengajuan.tempo.request'].search([('name_tempo', '=', partner.id)], limit=1) - tempo_progres = 'review' if is_tempo_request else '' + is_tempo_request = request.env['user.pengajuan.tempo.request'].search([('user_company_id', '=', main_partner.id)], limit=1) + tempo_progres = 'review' if is_tempo_request.state_tempo in ('draft','approval_sales','approval_finance') else '' if main_partner: partner_tempo = main_partner.get_check_payment_term() if payment_tempo: diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index 006bbb55..b527fa4c 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -112,6 +112,8 @@ class UserPengajuanTempo(models.Model): display_name = "DETAIL FORM TEMPO" result.append((record.id, display_name)) return result + + # # def _compute_attachment_url(self): # if self.id: diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index b7526238..2d4875fb 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -1,7 +1,43 @@ -from odoo import models, fields, api +from odoo import models, fields, api, _ from odoo.exceptions import UserError from odoo.http import request +class RejectReasonWizard(models.TransientModel): + _name = 'reject.reason.wizard' + _description = 'Wizard for Reject Reason' + + request_id = fields.Many2one('user.pengajuan.tempo.request', string='Request') + reason_reject = fields.Text(string='Reason for Rejection', required=True) + + def confirm_reject(self): + tempo = self.request_id + if tempo: + tempo.write({'reason_reject': self.reason_reject}) + tempo.state_tempo = 'reject' + template = self.env.ref('indoteknik_custom.mail_template_res_user_company_tempo_reject') + template.send_mail(tempo.id, force_send=True) + return {'type': 'ir.actions.act_window_close'} +class ConfirmApprovalWizard(models.TransientModel): + _name = 'confirm.approval.wizard' + _description = 'Wizard Konfirmasi Approval' + + tempo_id = fields.Many2one('user.pengajuan.tempo.request', string='Tempo', required=True) + + def confirm_approval(self): + tempo = self.tempo_id + if tempo.state_tempo == 'draft': + tempo.state_tempo = 'approval_sales' + template = self.env.ref('indoteknik_custom.mail_template_res_user_company_tempo_approved_by_sales') + template.send_mail(tempo.id, force_send=True) + elif tempo.state_tempo == 'approval_sales': + tempo.state_tempo = 'approval_finance' + template = self.env.ref('indoteknik_custom.mail_template_res_user_company_tempo_to_aprove_director') + template.send_mail(tempo.id, force_send=True) + elif tempo.state_tempo == 'approval_finance': + tempo.state_tempo = 'approval_director' + + + class UserPengajuanTempoRequest(models.Model): _name = 'user.pengajuan.tempo.request' _inherit = ['mail.thread', 'mail.activity.mixin'] @@ -10,26 +46,28 @@ class UserPengajuanTempoRequest(models.Model): user_id = fields.Many2one('res.partner', string='User') user_company_id = fields.Many2one('res.partner', string='Company') pengajuan_tempo_id = fields.Many2one('user.pengajuan.tempo', string='Form Tempo') - tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') - tempo_limit = fields.Char(string='Limit Tempo') + tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo', tracking=3, ) + tempo_limit = fields.Char(string='Limit Tempo', tracking=3) state_tempo = fields.Selection([ ('draft', 'Pengajuan Tempo'), ('approval_sales', 'Approved by Sales Manager'), ('approval_finance', 'Approved by Finance'), ('approval_director', 'Approved by Director'), + ('reject', 'Rejected'), ], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft') + reason_reject = fields.Char(string='Limit Tempo') @api.onchange('tempo_duration') - def _tempo_duration_change(self): + def _tempo_duration_change(self, vals): for tempo in self: if tempo.env.user.id not in (7, 377): raise UserError("Durasi tempo hanya bisa di ubah oleh Sales Manager atau Direktur") @api.onchange('tempo_limit') - def _tempo_limit_change(self): + def _onchange_tempo_limit(self): for tempo in self: - if tempo.env.user.id not in (7, 377): - raise UserError("Limit tempo hanya bisa di ubah oleh Sales Manager atau Direktur") + if tempo.env.user.id not in (7, 377, 12182): + raise UserError("Limit tempo hanya bisa diubah oleh Sales Manager atau Direktur") def button_approve(self): for tempo in self: @@ -38,39 +76,84 @@ class UserPengajuanTempoRequest(models.Model): raise UserError("Pengajuan tempo harus di approve oleh sales manager terlebih dahulu") else: # if tempo.env.user.id != 377: - if tempo.env.user.id != 25: + if tempo.env.user.id != 12182: raise UserError("Pengajuan tempo hanya bisa di approve oleh sales manager") else: - tempo.state_tempo = 'approval_sales' + return { + 'type': 'ir.actions.act_window', + 'name': 'Konfirmasi Approve', + 'res_model': 'confirm.approval.wizard', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'default_tempo_id': tempo.id, + }, + } elif tempo.state_tempo == 'approval_sales': if tempo.env.user.id == 7: raise UserError("Pengajuan tempo harus di approve oleh Finence terlebih dahulu") else: # if tempo.env.user.id not in (688, 28): - if tempo.env.user.id not in (101): + if tempo.env.user.id not in (101,288,28,12182): raise UserError("Pengajuan tempo hanya bisa di approve oleh Finence") else: - tempo.state_tempo = 'approval_finance' + return { + 'type': 'ir.actions.act_window', + 'name': 'Konfirmasi Approve', + 'res_model': 'confirm.approval.wizard', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'default_tempo_id': tempo.id, + }, + } elif tempo.state_tempo == 'approval_finance': # if tempo.env.user.id != 7: if tempo.env.user.id != 12182: raise UserError("Pengajuan tempo hanya bisa di approve oleh Direktur") else: - tempo.state_tempo = 'approval_director' - + return { + 'type': 'ir.actions.act_window', + 'name': 'Konfirmasi Approve', + 'res_model': 'confirm.approval.wizard', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'default_tempo_id': tempo.id, + }, + } - - res = super(UserPengajuanTempoRequest, self).button_approve() - return res + def button_reject(self): + return { + 'type': 'ir.actions.act_window', + 'name': _('Reject Reason'), + 'res_model': 'reject.reason.wizard', + 'view_mode': 'form', + 'target': 'new', + 'context': {'default_request_id': self.id}, + } def write(self, vals): - user = self.get_user_by_email(self.user_id.email) - is_approve = True if self.state_tempo == 'approval_director' else False + is_approve = True if self.state_tempo == 'approval_director' or vals.get('state_tempo') == 'approval_director' else False # if self.is_approve and is_approve: # raise UserError('Tidak dapat mengubah approval yang sudah diisi') + limit_tempo = '' + if vals.get('tempo_limit'): + limit_tempo = vals.get('tempo_limit') + elif self.tempo_limit: + limit_tempo = self.tempo_limit + else: + limit_tempo = self.pengajuan_tempo_id.tempo_limit + tempo_duration = '' + if vals.get('tempo_duration'): + tempo_duration = vals.get('tempo_duration') + elif self.tempo_duration: + tempo_duration = self.tempo_duration + else: + tempo_duration = self.pengajuan_tempo_id.tempo_duration if is_approve: self.pengajuan_tempo_id.partner_id = self.user_id.id # informasi perusahaan @@ -86,8 +169,8 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.account_number_tempo = self.pengajuan_tempo_id.account_number_tempo self.user_company_id.website_tempo = self.pengajuan_tempo_id.website_tempo self.user_company_id.estimasi_tempo = self.pengajuan_tempo_id.estimasi_tempo - self.user_company_id.tempo_duration = vals.get('tempo_duration') if vals.get('tempo_duration') else self.pengajuan_tempo_id.tempo_duration - self.user_company_id.tempo_limit = vals.get('tempo_limit') if vals.get('tempo_limit') else self.pengajuan_tempo_id.tempo_limit + self.user_company_id.tempo_duration = tempo_duration + self.user_company_id.tempo_limit = limit_tempo self.user_company_id.category_produk_ids = self.pengajuan_tempo_id.category_produk_ids # Kontak Perusahaan @@ -120,44 +203,44 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.supplier_ids = self.pengajuan_tempo_id.supplier_ids # Dokumen - self.user_company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib + self.user_company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib[0] if self.user_company_id.dokumen_nib: self.user_company_id.message_post(body='Dokumen NIB', attachment_ids=[self.user_company_id.dokumen_nib.id]) - self.user_company_id.dokumen_npwp = self.pengajuan_tempo_id.dokumen_npwp + self.user_company_id.dokumen_npwp = self.pengajuan_tempo_id.dokumen_npwp[0] if self.user_company_id.dokumen_npwp: self.user_company_id.message_post(body='Dokumen NPWP', attachment_ids=[self.user_company_id.dokumen_npwp.id]) - self.user_company_id.dokumen_sppkp = self.pengajuan_tempo_id.dokumen_sppkp + self.user_company_id.dokumen_sppkp = self.pengajuan_tempo_id.dokumen_sppkp[0] if self.user_company_id.dokumen_sppkp: self.user_company_id.message_post(body='Dokumen SPPKP', attachment_ids=[self.user_company_id.dokumen_sppkp.id]) - self.user_company_id.dokumen_akta_perubahan = self.pengajuan_tempo_id.dokumen_akta_perubahan + self.user_company_id.dokumen_akta_perubahan = self.pengajuan_tempo_id.dokumen_akta_perubahan[0] if self.pengajuan_tempo_id.dokumen_akta_perubahan else [] if self.user_company_id.dokumen_akta_perubahan: self.user_company_id.message_post(body='Dokumen Akta Perubahan', attachment_ids=[self.user_company_id.dokumen_akta_perubahan.id]) - self.user_company_id.dokumen_ktp_dirut = self.pengajuan_tempo_id.dokumen_ktp_dirut + self.user_company_id.dokumen_ktp_dirut = self.pengajuan_tempo_id.dokumen_ktp_dirut[0] if self.pengajuan_tempo_id.dokumen_ktp_dirut else [] if self.user_company_id.dokumen_ktp_dirut: self.user_company_id.message_post(body='Dokumen Ktp Dirut', attachment_ids=[self.user_company_id.dokumen_ktp_dirut.id]) - self.user_company_id.dokumen_akta_pendirian = self.pengajuan_tempo_id.dokumen_akta_pendirian + self.user_company_id.dokumen_akta_pendirian = self.pengajuan_tempo_id.dokumen_akta_pendirian[0] if self.pengajuan_tempo_id.dokumen_akta_pendirian else [] if self.user_company_id.dokumen_akta_pendirian: self.user_company_id.message_post(body='Dokumen Akta Pendirian', attachment_ids=[self.user_company_id.dokumen_akta_pendirian.id]) - self.user_company_id.dokumen_laporan_keuangan = self.pengajuan_tempo_id.dokumen_laporan_keuangan + self.user_company_id.dokumen_laporan_keuangan = self.pengajuan_tempo_id.dokumen_laporan_keuangan[0] if self.pengajuan_tempo_id.dokumen_laporan_keuangan else [] if self.user_company_id.dokumen_laporan_keuangan: self.user_company_id.message_post(body='Dokumen Laporan Keuangan', attachment_ids=[self.user_company_id.dokumen_laporan_keuangan.id]) - self.user_company_id.dokumen_foto_kantor = self.pengajuan_tempo_id.dokumen_foto_kantor + self.user_company_id.dokumen_foto_kantor = self.pengajuan_tempo_id.dokumen_foto_kantor[0] if self.pengajuan_tempo_id.dokumen_foto_kantor else [] if self.user_company_id.dokumen_foto_kantor: self.user_company_id.message_post(body='Dokumen Foto Kantor', attachment_ids=[self.user_company_id.dokumen_foto_kantor.id]) - self.user_company_id.dokumen_tempat_bekerja = self.pengajuan_tempo_id.dokumen_tempat_bekerja + self.user_company_id.dokumen_tempat_bekerja = self.pengajuan_tempo_id.dokumen_tempat_bekerja[0] if self.pengajuan_tempo_id.dokumen_tempat_bekerja else [] if self.user_company_id.dokumen_tempat_bekerja: self.user_company_id.message_post(body='Dokumen Tempat Bekerja', attachment_ids=[self.user_company_id.dokumen_tempat_bekerja.id]) @@ -165,10 +248,13 @@ class UserPengajuanTempoRequest(models.Model): # user.send_company_request_approve_mail() self.user_company_id.property_payment_term_id = self.pengajuan_tempo_id.tempo_duration.id self.user_company_id.active_limit = True - self.user_company_id.warning_stage = self.pengajuan_tempo_id.tempo_limit - (int(self.pengajuan_tempo_id.tempo_limit)/2) + self.user_company_id.warning_stage = float(self.pengajuan_tempo_id.tempo_limit) - (float(self.pengajuan_tempo_id.tempo_limit)/2) self.user_company_id.blocking_stage = self.pengajuan_tempo_id.tempo_limit - template = self.env.ref('indoteknik_custom.mail_template_user_cart_reminder_to_checkout') - template.send_mail(latest_cart.id, force_send=True) + # template = self.env.ref('indoteknik_custom.mail_template_res_user_company_tempo_approved') + # tempo = self.pengajuan_tempo_id + # template.send_mail(tempo.id, force_send=True) + template = self.env.ref('indoteknik_custom.mail_template_res_user_company_tempo_approved') + template.send_mail(self.id, force_send=True) # self.user_id.parent_id = new_company.id # user.send_company_request_reject_mail() return super(UserPengajuanTempoRequest, self).write(vals) @@ -177,4 +263,8 @@ class UserPengajuanTempoRequest(models.Model): return request.env['res.users'].search([ ('login', '=', email), ('active', 'in', [True, False]) - ]) \ No newline at end of file + ]) + + def format_currency(self, number): + number = int(number) + return "{:,}".format(number).replace(',', '.') \ 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 baf50c5c..e55bd2d9 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -150,4 +150,6 @@ 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_pengajuan_tempo_line,access.user.pengajuan.tempo.line,model_user_pengajuan_tempo_line,,1,1,1,1 -access_user_pengajuan_tempo,access.user.pengajuan.tempo,model_user_pengajuan_tempo,,1,1,1,1 \ No newline at end of file +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 diff --git a/indoteknik_custom/views/user_pengajuan_tempo.xml b/indoteknik_custom/views/user_pengajuan_tempo.xml index 5b8ed293..30d75fe8 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo.xml @@ -96,8 +96,8 @@
- -
+ +
@@ -121,7 +121,7 @@ Permohonan Tempo Anda Sedang Ditinjau "Indoteknik.com" <noreply@indoteknik.com> - noreply@indoteknik.com + sales@indoteknik.com ${object.user_id.login | safe} @@ -152,7 +152,7 @@
- + @@ -162,8 +162,8 @@ - @@ -183,13 +183,14 @@ - - Users: Company Tempo Reject + + Users: Company New Tempo To Sales - Mohon Maaf Pengajuan Tempo anda kami Tolak + Pengajuan Tempo Harus di Periksa! "Indoteknik.com" <noreply@indoteknik.com> - noreply@indoteknik.com - ${object.user_id.login | safe} + sales@indoteknik.com + + sapiabon768@gmail.com
Hai. ${object.name_tempo.name},
Terima kasih atas kepercayaan Anda memilih indoteknik.com. Kami telah menerima permohonan pemayaran tempo Anda.
Terima kasih atas kepercayaan Anda memilih indoteknik.com. Kami telah menerima permohonan pembayaran tempo Anda.
Saat ini, tim kami sedang melakukan peninjauan terhadap permohonan Anda. Proses peninjauan ini membutuhkan waktu.
Kami akan informasikan kembali mengenai hasil peninjauan pembayaran tempo anda melalui email ini.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
- Indoteknik + + Indoteknik
@@ -217,21 +218,20 @@
- + - - - - - + - + + + + - @@ -250,14 +250,14 @@
Hai. ${object.name_tempo.name},
Halo Manager Tim Sales, Novita Mayasari.
Kami sampaikan dengan sangat menyesal bahwa pengajuan permohonan tempo pembayaran Anda yang diajukan pada tanggal ${format_date(object.create_date, 'dd MMMM yyyy')} tidak dapat kami setujui.
Keputusan ini telah kami pertimbangkan secara matang berdasarkan beberapa faktor, termasuk [alasan penolakan, misal: riwayat pembayaran, profil kredit, atau kebijakan perusahaan].
Kami memahami bahwa hal ini mungkin mengecewakan. Namun, kami berharap Anda dapat memahami kebijakan perusahaan kami.
Kami sampaikan informasi bahwa saat ini terdapat pengajuan Pembayaran Tempo dari ${object.name_tempo.name} melalui website Indoteknik.com.
Terima kasih atas pengertiannya.
Mohon dapat segera melakukan pengecekan dan evaluasi terhadap data perusahaan yang telah dilampirkan tersebut agar proses pengajuan dapat diproses lebih lanjut.
Terima kasih atas perhatian dan kerjasamanya.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
- Indoteknik + + Indoteknik
- - - Users: Company Tempo Approved - - Pengajuan Tempo kamu di Indoteknik.com Telah Disetujui! + + Users: Company Tempo Approved By Sales + + Pengajuan Tempo Harus di Periksa! "Indoteknik.com" <noreply@indoteknik.com> - noreply@indoteknik.com - ${object.user_id.login | safe} + sales@indoteknik.com + + sapiabon768@gmail.com + + - + -- cgit v1.2.3 From 02eacd54387953f42a884a22544e2f7c94081536 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 9 Dec 2024 15:04:12 +0700 Subject: update pengajuan tempo --- indoteknik_api/controllers/api_v1/partner.py | 21 +- indoteknik_custom/models/res_partner.py | 5 +- indoteknik_custom/models/user_pengajuan_tempo.py | 53 ----- .../models/user_pengajuan_tempo_request.py | 244 ++++++++++++++++++++- .../views/user_pengajuan_tempo_request.xml | 162 +++++++++++--- 5 files changed, 383 insertions(+), 102 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index d8464add..fcf7e4db 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -428,6 +428,15 @@ class Partner(controller.Controller): dokumen_invoice = kw.get('dokumenPengirimanInvoice', '') if dokumen_invoice: pengajuan_tempo.dokumen_invoice = dokumen_invoice + user_tempo_request = [] + if tempo_request: + user_tempo_request = request.env['user.pengajuan.tempo.request'].create({ + 'user_id': user.id, + 'pengajuan_tempo_id': pengajuan_tempo.id, + 'user_company_id': partner_id.id, + 'tempo_duration': pengajuan_tempo.tempo_duration.id, + 'tempo_limit': pengajuan_tempo.tempo_limit, + }) form_dokumen_data = kw.get('formDocs', False) if form_dokumen_data: @@ -479,18 +488,14 @@ class Partner(controller.Controller): enumerate(dokumen['documentName'])]) teks = formatted_text.strip().title() pengajuan_tempo.message_post(body=teks, attachment_ids=[sppkp_attachment.id]) + if tempo_request: + user_tempo_request.message_post(body=teks, attachment_ids=[sppkp_attachment.id]) except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) - if tempo_request: - tempo_request = request.env['user.pengajuan.tempo.request'].create({ - 'user_id': user.id, - 'pengajuan_tempo_id': pengajuan_tempo.id, - 'user_company_id': partner_id.id, - 'tempo_duration': pengajuan_tempo.tempo_duration.id, - 'tempo_limit': pengajuan_tempo.tempo_limit, - }) + + pengajuan_tempo.user_id = user_account.id template = pengajuan_tempo.env.ref('indoteknik_custom.mail_template_res_user_company_request_tempo_review') template.send_mail(pengajuan_tempo.id, force_send=True) diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index d2395dc5..835ac65d 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -36,7 +36,7 @@ class ResPartner(models.Model): account_number_tempo = fields.Char(string="Nomor Rekening Bank") website_tempo = fields.Char(string='Website') estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') - tempo_duration = fields.Char(string='Durasi Tempo') + tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') tempo_limit = fields.Char(string='Limit Tempo') category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', domain=lambda self: self._get_default_category_domain()) @@ -309,6 +309,9 @@ class ResPartner(models.Model): 'dokumen_laporan_keuangan': vals.get('dokumen_laporan_keuangan'), 'dokumen_foto_kantor': vals.get('dokumen_foto_kantor'), 'dokumen_tempat_bekerja': vals.get('dokumen_tempat_bekerja'), + + # internal_notes + 'comment': vals.get('comment') } # Lakukan update pada semua child secara rekursif diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index 046c4cc7..b347e75e 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -118,56 +118,3 @@ class UserPengajuanTempo(models.Model): display_name = "DETAIL FORM TEMPO" result.append((record.id, display_name)) return result - - - # - # def _compute_attachment_url(self): - # if self.id: - # return { - # 'type': 'ir.actions.act_url', - # 'url': 'http://localhost:8069/web/content/' % (self.id), - # 'target': 'user', - # } - # base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') - # for record in self: - # # Buat URL list untuk attachment yang ada di dokumen_nib - # record.attachment_urls = [(attachment.id, f"{base_url}/web/content/{attachment.id}") for attachment in - # record.dokumen_nib] - # - # @api.model - # def create(self, vals): - # # Tangani pembuatan baru - # record = super(userPengajuanTempo, self).create(vals) - # if vals.get('dokumen_nib'): - # attachment_names = ', '.join(self.env['ir.attachment'].browse(vals['dokumen_nib'][0][2]).mapped('name')) - # record.message_post(body=f"Files added to NIB: {attachment_names}") - # return record - # - # def write(self, vals): - # # Ambil attachment sebelumnya - # for record in self: - # previous_files = record.dokumen_nib - # res = super(userPengajuanTempo, record).write(vals) - # - # if 'dokumen_nib' in vals: - # new_files = record.dokumen_nib - # - # # Periksa perbedaan antara file lama dan file baru - # added_files = new_files - previous_files - # removed_files = previous_files - new_files - # - # # Buat pesan log berdasarkan perubahan - # messages = [] - # if added_files: - # added_names = ', '.join(added_files.mapped('name')) - # messages.append(f"Files added to NIB: {added_names}") - # if removed_files: - # removed_names = ', '.join(removed_files.mapped('name')) - # messages.append(f"Files removed from NIB: {removed_names}") - # - # # Post pesan ke log note jika ada perubahan - # if messages: - # record.message_post(body="
".join(messages)) - # - # return res - diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index 74eda31f..832c21af 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -57,6 +57,225 @@ class UserPengajuanTempoRequest(models.Model): ], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft') reason_reject = fields.Char(string='Limit Tempo') + # informasi perusahaan + name_tempo = fields.Many2one('res.partner', string='Nama Perusahaan', related='pengajuan_tempo_id.name_tempo', store=True, tracking=True, readonly=False) + industry_id_tempo = fields.Many2one('res.partner.industry', 'Customer Industry', related='pengajuan_tempo_id.industry_id_tempo',store=True, tracking=True, readonly=False) + street_tempo = fields.Char(string="Alamat Perusahaan", related='pengajuan_tempo_id.street_tempo', store=True, tracking=True, readonly=False) + state_id_tempo = fields.Many2one('res.country.state', string='State', related='pengajuan_tempo_id.state_id_tempo', store=True, tracking=True, readonly=False) + city_id_tempo = fields.Many2one('vit.kota', string='City', related='pengajuan_tempo_id.city_id_tempo', store=True, tracking=True, readonly=False) + zip_tempo = fields.Char(string="Zip", related='pengajuan_tempo_id.zip_tempo', store=True, tracking=True, readonly=False) + mobile_tempo = fields.Char(string="No. Telfon Perusahaan", related='pengajuan_tempo_id.mobile_tempo', store=True, tracking=True, readonly=False) + bank_name_tempo = fields.Char(string="Nama Bank", related='pengajuan_tempo_id.bank_name_tempo', store=True, tracking=True, readonly=False) + account_name_tempo = fields.Char(string="Nama Rekening", related='pengajuan_tempo_id.account_name_tempo', store=True, tracking=True, readonly=False) + account_number_tempo = fields.Char(string="Nomor Rekening Bank", related='pengajuan_tempo_id.account_number_tempo', store=True, tracking=True, readonly=False) + website_tempo = fields.Char(string='Website', related='pengajuan_tempo_id.website_tempo', store=True, tracking=True, readonly=False) + estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun', related='pengajuan_tempo_id.estimasi_tempo', store=True, tracking=True, readonly=False) + tempo_duration_origin = fields.Many2one('account.payment.term', string='Durasi Tempo', related='pengajuan_tempo_id.tempo_duration', store=True, tracking=True, readonly=False) + tempo_limit_origin = fields.Char(string='Limit Tempo', related='pengajuan_tempo_id.tempo_limit' , store=True, tracking=True, readonly=False) + category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', related='pengajuan_tempo_id.category_produk_ids', readonly=False) + + # Kontak Perusahaan + direktur_name = fields.Char(string='Nama Lengkap Direktur', related='pengajuan_tempo_id.direktur_name', store=True, readonly=False) + direktur_mobile = fields.Char(string='No. Telpon Direktur', related='pengajuan_tempo_id.direktur_mobile', store=True, readonly=False) + direktur_email = fields.Char(string='Email Direktur', related='pengajuan_tempo_id.direktur_email', store=True, readonly=False) + purchasing_name = fields.Char(string='Nama Purchasing', related='pengajuan_tempo_id.purchasing_name', store=True, readonly=False) + purchasing_mobile = fields.Char(string='No. Telpon Purchasing', related='pengajuan_tempo_id.purchasing_mobile', store=True, readonly=False) + purchasing_email = fields.Char(string='Email Purchasing', related='pengajuan_tempo_id.purchasing_email', store=True, readonly=False) + finance_name = fields.Char(string='Nama Finance', related='pengajuan_tempo_id.finance_name', store=True, readonly=False) + finance_mobile = fields.Char(string='No. Telpon Finance', related='pengajuan_tempo_id.finance_mobile', store=True, readonly=False) + finance_email = fields.Char(string='Email Finance', related='pengajuan_tempo_id.finance_email', store=True, readonly=False) + + # Pengiriman + pic_tittle = fields.Char(string='Tittle PIC Penerimaan Barang', related='pengajuan_tempo_id.pic_tittle', store=True, readonly=False) + pic_name = fields.Char(string='Nama PIC Penerimaan Barang', related='pengajuan_tempo_id.pic_name', store=True, readonly=False) + street_pengiriman = fields.Char(string="Alamat Perusahaan", related='pengajuan_tempo_id.street_pengiriman', store=True, readonly=False) + state_id_pengiriman = fields.Many2one('res.country.state', string='State', related='pengajuan_tempo_id.state_id_pengiriman', store=True, readonly=False) + city_id_pengiriman = fields.Many2one('vit.kota', string='City', related='pengajuan_tempo_id.city_id_pengiriman', store=True, readonly=False) + zip_pengiriman = fields.Char(string="Zip", related='pengajuan_tempo_id.zip_pengiriman', store=True, readonly=False) + invoice_pic_tittle = fields.Char(string='Tittle PIC Penerimaan Invoice', related='pengajuan_tempo_id.invoice_pic_tittle', store=True, readonly=False) + invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice', related='pengajuan_tempo_id.invoice_pic', store=True, readonly=False) + street_invoice = fields.Char(string="Alamat Perusahaan", related='pengajuan_tempo_id.street_invoice', store=True, readonly=False) + state_id_invoice = fields.Many2one('res.country.state', string='State', related='pengajuan_tempo_id.state_id_invoice', store=True, readonly=False) + city_id_invoice = fields.Many2one('vit.kota', string='City', related='pengajuan_tempo_id.city_id_invoice', store=True, readonly=False) + tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice', related='pengajuan_tempo_id.tukar_invoice', store=True, readonly=False) + jadwal_bayar = fields.Char(string='Jadwal Pembayaran', related='pengajuan_tempo_id.jadwal_bayar', store=True, readonly=False) + dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang', related='pengajuan_tempo_id.dokumen_pengiriman', store=True, readonly=False) + dokumen_pengiriman_input = fields.Char(string='Dokumen saat Pengiriman Barang input', related='pengajuan_tempo_id.dokumen_pengiriman_input', store=True, readonly=False) + dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice', related='pengajuan_tempo_id.dokumen_invoice', store=True, readonly=False) + is_same_address = fields.Boolean(string="Same Address pengiriman invoicr dan alamat pengiriman barang", related='pengajuan_tempo_id.is_same_address', store=True, readonly=False) + is_same_address_street = fields.Boolean(string="Same Address pengiriman barang dan alamat bisnis", related='pengajuan_tempo_id.is_same_address_street', store=True, readonly=False) + + #Referensi + supplier_ids = fields.Many2many('user.pengajuan.tempo.line',related='pengajuan_tempo_id.supplier_ids', string="Suppliers", readonly=False) + + # Dokumen + dokumen_nib = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_nib_rel', + string="NIB (SIUP/TDP/SKDP)", + related='pengajuan_tempo_id.dokumen_nib', + readonly=False, + tracking=3, + track_visibility="onchange" + ) + + dokumen_npwp = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_npwp_rel', + string="NPWP Perusahaan", + related='pengajuan_tempo_id.dokumen_npwp', + readonly=False, + tracking=3 + ) + + dokumen_sppkp = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_sppkp_rel', + string="SPPKP Perusahaan", + related='pengajuan_tempo_id.dokumen_sppkp', + readonly=False, + tracking=3 + ) + + dokumen_akta_perubahan = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_akta_perubahan_rel', + string="Akta Perubahan", + related='pengajuan_tempo_id.dokumen_akta_perubahan', + readonly=False, + tracking=3 + ) + + dokumen_ktp_dirut = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_ktp_dirut_rel', + string="KTP Dirut/Direktur", + related='pengajuan_tempo_id.dokumen_ktp_dirut', + readonly=False, + tracking=3 + ) + + dokumen_akta_pendirian = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_angkta_pendirian_rel', + string="Akta Pendirian", + related='pengajuan_tempo_id.dokumen_akta_pendirian', + readonly=False, + tracking=3 + ) + + dokumen_laporan_keuangan = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_laporan_keuangan_rel', + string="Laporan Keuangan", + related='pengajuan_tempo_id.dokumen_laporan_keuangan', + readonly=False, + tracking=3 + ) + + dokumen_foto_kantor = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_foto_kantor_rel', + string="Foto Kantor (Tampak Depan)", + related='pengajuan_tempo_id.dokumen_foto_kantor', + readonly=False, + tracking=3 + ) + + dokumen_tempat_bekerja = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_tempat_bekerja_rel', + string="Tempat Bekerja", + related='pengajuan_tempo_id.dokumen_tempat_bekerja', + readonly=False, + tracking=3 + ) + + @api.onchange('name_tempo', 'industry_id_tempo', 'street_tempo', 'state_id_tempo', 'city_id_tempo', 'zip_tempo', + 'mobile_tempo', 'bank_name_tempo', 'account_name_tempo', 'account_number_tempo', 'website_tempo', + 'estimasi_tempo', 'tempo_duration_origin', 'tempo_limit_origin', 'category_produk_ids') + def _onchange_related_fields(self): + if self.pengajuan_tempo_id: + # Perbarui nilai di pengajuan_tempo_id + self.pengajuan_tempo_id.name_tempo = self.name_tempo + self.pengajuan_tempo_id.industry_id_tempo = self.industry_id_tempo + self.pengajuan_tempo_id.street_tempo = self.street_tempo + self.pengajuan_tempo_id.state_id_tempo = self.state_id_tempo + self.pengajuan_tempo_id.city_id_tempo = self.city_id_tempo + self.pengajuan_tempo_id.zip_tempo = self.zip_tempo + self.pengajuan_tempo_id.mobile_tempo = self.mobile_tempo + self.pengajuan_tempo_id.bank_name_tempo = self.bank_name_tempo + self.pengajuan_tempo_id.account_name_tempo = self.account_name_tempo + self.pengajuan_tempo_id.account_number_tempo = self.account_number_tempo + self.pengajuan_tempo_id.website_tempo = self.website_tempo + self.pengajuan_tempo_id.estimasi_tempo = self.estimasi_tempo + self.pengajuan_tempo_id.tempo_duration = self.tempo_duration_origin + self.pengajuan_tempo_id.tempo_limit = self.tempo_limit_origin + self.pengajuan_tempo_id.category_produk_ids = self.category_produk_ids + + @api.onchange('direktur_name', 'direktur_mobile', 'direktur_email', 'purchasing_name', 'purchasing_mobile', + 'purchasing_email', 'finance_name', 'finance_mobile', 'finance_email') + def _onchange_related_fields_kontak(self): + if self.pengajuan_tempo_id: + # Perbarui nilai di pengajuan_tempo_id + self.pengajuan_tempo_id.direktur_name = self.direktur_name + self.pengajuan_tempo_id.direktur_mobile = self.direktur_mobile + self.pengajuan_tempo_id.direktur_email = self.direktur_email + self.pengajuan_tempo_id.purchasing_name = self.purchasing_name + self.pengajuan_tempo_id.purchasing_mobile = self.purchasing_mobile + self.pengajuan_tempo_id.purchasing_email = self.purchasing_email + self.pengajuan_tempo_id.finance_name = self.finance_name + self.pengajuan_tempo_id.finance_mobile = self.finance_mobile + self.pengajuan_tempo_id.finance_email = self.finance_email + + @api.onchange('pic_tittle', 'pic_name', 'street_pengiriman', 'state_id_pengiriman', 'city_id_pengiriman', + 'zip_pengiriman', + 'invoice_pic_tittle', 'invoice_pic', 'street_invoice', 'state_id_invoice', 'city_id_invoice', + 'tukar_invoice', 'jadwal_bayar', 'dokumen_pengiriman', 'dokumen_pengiriman_input', 'dokumen_invoice', + 'is_same_address', 'is_same_address_street') + def _onchange_related_fields_pengiriman(self): + if self.pengajuan_tempo_id: + # Perbarui nilai di pengajuan_tempo_id + self.pengajuan_tempo_id.pic_tittle = self.pic_tittle + self.pengajuan_tempo_id.pic_name = self.pic_name + self.pengajuan_tempo_id.street_pengiriman = self.street_pengiriman + self.pengajuan_tempo_id.state_id_pengiriman = self.state_id_pengiriman + self.pengajuan_tempo_id.city_id_pengiriman = self.city_id_pengiriman + self.pengajuan_tempo_id.zip_pengiriman = self.zip_pengiriman + self.pengajuan_tempo_id.invoice_pic_tittle = self.invoice_pic_tittle + self.pengajuan_tempo_id.invoice_pic = self.invoice_pic + self.pengajuan_tempo_id.street_invoice = self.street_invoice + self.pengajuan_tempo_id.state_id_invoice = self.state_id_invoice + self.pengajuan_tempo_id.city_id_invoice = self.city_id_invoice + self.pengajuan_tempo_id.tukar_invoice = self.tukar_invoice + self.pengajuan_tempo_id.jadwal_bayar = self.jadwal_bayar + self.pengajuan_tempo_id.dokumen_pengiriman = self.dokumen_pengiriman + self.pengajuan_tempo_id.dokumen_pengiriman_input = self.dokumen_pengiriman_input + self.pengajuan_tempo_id.dokumen_invoice = self.dokumen_invoice + self.pengajuan_tempo_id.is_same_address = self.is_same_address + self.pengajuan_tempo_id.is_same_address_street = self.is_same_address_street + + @api.onchange('supplier_ids') + def _onchange_supplier_ids(self): + if self.pengajuan_tempo_id: + self.pengajuan_tempo_id.supplier_ids = self.supplier_ids + + @api.onchange('dokumen_nib', 'dokumen_npwp', 'dokumen_sppkp', 'dokumen_akta_perubahan', + 'dokumen_ktp_dirut', 'dokumen_akta_pendirian', 'dokumen_laporan_keuangan', + 'dokumen_foto_kantor', 'dokumen_tempat_bekerja') + def _onchange_related_fields_dokumen(self): + if self.pengajuan_tempo_id: + # Perbarui nilai di pengajuan_tempo_id + self.pengajuan_tempo_id.dokumen_nib = self.dokumen_nib + self.pengajuan_tempo_id.dokumen_npwp = self.dokumen_npwp + self.pengajuan_tempo_id.dokumen_sppkp = self.dokumen_sppkp + self.pengajuan_tempo_id.dokumen_akta_perubahan = self.dokumen_akta_perubahan + self.pengajuan_tempo_id.dokumen_ktp_dirut = self.dokumen_ktp_dirut + self.pengajuan_tempo_id.dokumen_akta_pendirian = self.dokumen_akta_pendirian + self.pengajuan_tempo_id.dokumen_laporan_keuangan = self.dokumen_laporan_keuangan + self.pengajuan_tempo_id.dokumen_foto_kantor = self.dokumen_foto_kantor + self.pengajuan_tempo_id.dokumen_tempat_bekerja = self.dokumen_tempat_bekerja + @api.onchange('tempo_duration') def _tempo_duration_change(self, vals): for tempo in self: @@ -71,6 +290,8 @@ class UserPengajuanTempoRequest(models.Model): def button_approve(self): for tempo in self: + if not self.tempo_limit: + raise UserError("Limit Tempo harus di isi terlebih dahulu") if tempo.state_tempo == 'draft': if tempo.env.user.id in (688, 28, 7): raise UserError("Pengajuan tempo harus di approve oleh sales manager terlebih dahulu") @@ -169,7 +390,7 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.account_number_tempo = self.pengajuan_tempo_id.account_number_tempo self.user_company_id.website_tempo = self.pengajuan_tempo_id.website_tempo self.user_company_id.estimasi_tempo = self.pengajuan_tempo_id.estimasi_tempo - self.user_company_id.tempo_duration = tempo_duration + self.user_company_id.tempo_duration = tempo_duration.id self.user_company_id.tempo_limit = limit_tempo self.user_company_id.category_produk_ids = self.pengajuan_tempo_id.category_produk_ids @@ -188,18 +409,21 @@ class UserPengajuanTempoRequest(models.Model): contacts_data = [ { "type": "contact", + 'title': 6 if self.pengajuan_tempo_id.direktur_tittle == 'Bpk' else 7, "name": self.pengajuan_tempo_id.direktur_name, "email": self.pengajuan_tempo_id.direktur_email, "phone": self.pengajuan_tempo_id.direktur_mobile, }, { "type": "contact", + 'title': 6 if self.pengajuan_tempo_id.purchasing_tittle == 'Bpk' else 7, "name": self.pengajuan_tempo_id.purchasing_name, "email": self.pengajuan_tempo_id.purchasing_email, "phone": self.pengajuan_tempo_id.purchasing_mobile, }, { "type": "contact", + 'title': 6 if self.pengajuan_tempo_id.finance_tittle == 'Bpk' else 7, "name": self.pengajuan_tempo_id.finance_name, "email": self.pengajuan_tempo_id.finance_email, "phone": self.pengajuan_tempo_id.finance_mobile, @@ -209,7 +433,7 @@ class UserPengajuanTempoRequest(models.Model): "name": self.pengajuan_tempo_id.pic_name, "street": self.pengajuan_tempo_id.street_pengiriman, "state_id": self.pengajuan_tempo_id.state_id_pengiriman.id, - "city_id": self.pengajuan_tempo_id.city_id_pengiriman.id, + "city": self.pengajuan_tempo_id.city_id_pengiriman.id, "zip": self.pengajuan_tempo_id.zip_pengiriman, }, { @@ -217,7 +441,7 @@ class UserPengajuanTempoRequest(models.Model): "name": self.pengajuan_tempo_id.invoice_pic, "street": self.pengajuan_tempo_id.street_invoice, "state_id": self.pengajuan_tempo_id.state_id_invoice.id, - "city_id": self.pengajuan_tempo_id.city_id_invoice.id, + "city": self.pengajuan_tempo_id.city_id_invoice.id, }, ] @@ -293,8 +517,18 @@ class UserPengajuanTempoRequest(models.Model): # user.send_company_request_approve_mail() self.user_company_id.property_payment_term_id = self.pengajuan_tempo_id.tempo_duration.id self.user_company_id.active_limit = True - self.user_company_id.warning_stage = float(self.pengajuan_tempo_id.tempo_limit) - (float(self.pengajuan_tempo_id.tempo_limit)/2) - self.user_company_id.blocking_stage = self.pengajuan_tempo_id.tempo_limit + self.user_company_id.warning_stage = float(limit_tempo) - (float(limit_tempo)/2) + self.user_company_id.blocking_stage = limit_tempo + + # Internal Notes + comment = [] + if self.pengajuan_tempo_id.tukar_invoice: + comment.append(f"Jadwal Tukar Invoice: {self.pengajuan_tempo_id.tukar_invoice}") + if self.pengajuan_tempo_id.jadwal_bayar: + comment.append(f"Jadwal Pembayaran: {self.pengajuan_tempo_id.jadwal_bayar}") + self.user_company_id.comment = "\n".join(comment) + + # template = self.env.ref('indoteknik_custom.mail_template_res_user_company_tempo_approved') # tempo = self.pengajuan_tempo_id # template.send_mail(tempo.id, force_send=True) diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 2a3fc745..0e6b6c71 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -8,47 +8,139 @@ + - user.pengajuan.tempo.request.form - user.pengajuan.tempo.request - -
-
-
- + user.pengajuan.tempo.request.form + user.pengajuan.tempo.request + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + - - -
- -
- -
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + @@ -192,9 +284,9 @@
- + - + -- cgit v1.2.3 From 0391f0df5d30cd81b4281c3d5082bf96671bd97b Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 11 Dec 2024 11:51:06 +0700 Subject: update code --- indoteknik_api/controllers/api_v1/partner.py | 20 ++++++++++++++------ indoteknik_api/controllers/api_v1/state.py | 6 +++++- .../models/user_pengajuan_tempo_request.py | 7 +++---- .../views/user_pengajuan_tempo_request.xml | 8 +++++--- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index fcf7e4db..ebf5de08 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -333,15 +333,23 @@ class Partner(controller.Controller): 'streetInvoice': ['alias:street_invoice'], 'stateInvoice': ['alias:state_id_invoice'], 'cityInvoice': ['alias:city_id_invoice'], - 'isSameAddrees':['alias:is_same_address'], - 'isSameAddreesStreet': ['alias:is_same_address_street'], }) + # Konversi nilai 'true' ke boolean True + is_same_address = kw.get('isSameAddrees', 'false').lower() == 'true' + is_same_address_street = kw.get('isSameAddreesStreet', 'false').lower() == 'true' + + # Tambahkan nilai yang dikonversi ke params + if kw.get('isSameAddrees') != '': + params['value']['is_same_address'] = is_same_address + if kw.get('isSameAddreesStreet') != '': + params['value']['is_same_address_street'] = is_same_address_street + if not params['valid']: return self.response(code=400, description=params) - # Filter data baru yang dikirim (non-kosong) - new_data = {key: value for key, value in params['value'].items() if value} + # Filter data baru yang dikirim (non-kosong, boolean False tetap masuk) + new_data = {key: value for key, value in params['value'].items() if value != ''} if pengajuan_tempo: # Jika pengajuan_tempo sudah ada, hanya write data baru yang non-kosong @@ -431,7 +439,7 @@ class Partner(controller.Controller): user_tempo_request = [] if tempo_request: user_tempo_request = request.env['user.pengajuan.tempo.request'].create({ - 'user_id': user.id, + 'user_id': id, 'pengajuan_tempo_id': pengajuan_tempo.id, 'user_company_id': partner_id.id, 'tempo_duration': pengajuan_tempo.tempo_duration.id, @@ -496,7 +504,7 @@ class Partner(controller.Controller): return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) - pengajuan_tempo.user_id = user_account.id + # pengajuan_tempo.user_id = id template = pengajuan_tempo.env.ref('indoteknik_custom.mail_template_res_user_company_request_tempo_review') template.send_mail(pengajuan_tempo.id, force_send=True) template2 = pengajuan_tempo.env.ref('indoteknik_custom.mail_template_res_user_company_new_tempo_to_sales') diff --git a/indoteknik_api/controllers/api_v1/state.py b/indoteknik_api/controllers/api_v1/state.py index 598ef70b..958359a7 100644 --- a/indoteknik_api/controllers/api_v1/state.py +++ b/indoteknik_api/controllers/api_v1/state.py @@ -8,7 +8,11 @@ class District(controller.Controller): @http.route(prefix + 'state', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() def get_state(self, **kw): + tempo = kw.get('tempo') parameters = [] + if tempo == 'true': + parameters.append(('country_id', '=', 100)) + name = kw.get('name') if name: @@ -18,7 +22,7 @@ class District(controller.Controller): states = request.env['res.country.state'].search(parameters) data = [] for state in states: - data.append({ 'id': state.id, 'name': state.name }) + data.append({ 'id': state.id, 'name': state.name}) return self.response(data) diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index 832c21af..452e4763 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -46,8 +46,8 @@ class UserPengajuanTempoRequest(models.Model): user_id = fields.Many2one('res.partner', string='User') user_company_id = fields.Many2one('res.partner', string='Company') pengajuan_tempo_id = fields.Many2one('user.pengajuan.tempo', string='Form Tempo') - tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo', tracking=3, ) - tempo_limit = fields.Char(string='Limit Tempo', tracking=3) + tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo', tracking=3, domain=[('id', 'in', [24, 25, 29, 32])]) + tempo_limit = fields.Integer(string='Limit Tempo', tracking=3) state_tempo = fields.Selection([ ('draft', 'Pengajuan Tempo'), ('approval_sales', 'Approved by Sales Manager'), @@ -70,7 +70,7 @@ class UserPengajuanTempoRequest(models.Model): account_number_tempo = fields.Char(string="Nomor Rekening Bank", related='pengajuan_tempo_id.account_number_tempo', store=True, tracking=True, readonly=False) website_tempo = fields.Char(string='Website', related='pengajuan_tempo_id.website_tempo', store=True, tracking=True, readonly=False) estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun', related='pengajuan_tempo_id.estimasi_tempo', store=True, tracking=True, readonly=False) - tempo_duration_origin = fields.Many2one('account.payment.term', string='Durasi Tempo', related='pengajuan_tempo_id.tempo_duration', store=True, tracking=True, readonly=False) + tempo_duration_origin = fields.Many2one('account.payment.term', string='Durasi Tempo', related='pengajuan_tempo_id.tempo_duration', store=True, tracking=True, readonly=False, domain=[('id', 'in', [24, 25, 29, 32])]) tempo_limit_origin = fields.Char(string='Limit Tempo', related='pengajuan_tempo_id.tempo_limit' , store=True, tracking=True, readonly=False) category_produk_ids = fields.Many2many('product.public.category', string='Kategori Produk yang Digunakan', related='pengajuan_tempo_id.category_produk_ids', readonly=False) @@ -287,7 +287,6 @@ class UserPengajuanTempoRequest(models.Model): for tempo in self: if tempo.env.user.id not in (7, 377, 12182): raise UserError("Limit tempo hanya bisa diubah oleh Sales Manager atau Direktur") - def button_approve(self): for tempo in self: if not self.tempo_limit: diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 0e6b6c71..25907a67 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -8,6 +8,8 @@ + + @@ -42,7 +44,7 @@ + placeholder="Contoh format, misalnya '10000000'" widget="monetary" options="{'currency_field': 'currency_id'}"/> @@ -253,7 +255,7 @@ Pengajuan Tempo kamu di Indoteknik.com Telah Disetujui! "Indoteknik.com" <noreply@indoteknik.com> sales@indoteknik.com - ${object.pengajuan_tempo_id.user_id.login | safe} + ${object.user_id.email | safe}
@@ -285,23 +285,20 @@
- + - - + + + - - - - - + - diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 4a8243da..17ae526c 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -25,13 +25,13 @@ class="oe_highlight" /> - - - - - - - +
Hai. ${object.name_tempo.name},
Halo Tim Finance Indoteknik,
Kabar baik! Kami dengan senang hati menginformasikan bahwa pengajuan tempo pembayaran kamui di Indoteknik.com telah disetujui dengan detail sebagai berikut.
Limit Pembayaran Tempo : Rp ${object.format_currency(object.tempo_limit)}
Kami informasikan bahwa pengajuan tempo dari ${object.pengajuan_tempo_id.name_tempo.name} telah disetujui oleh Manager Divisi Sales.
Untuk kelancaran proses selanjutnya, kami mohon kesediaannya untuk melakukan pengecekan ulang terhadap pengajuan tempo tersebut.
Durasi Pembayaran Tempo : ${object.tempo_duration.name}
Kamu dapat melakukan pembayaran sesuai dengan jangka waktu yang telah disepakati. Detail lengkap mengenai transaksi kamu, termasuk tanggal jatuh tempo & Pengajuan Kenaikan Limit Tempo, dapat kamu lihat di akun Profile Indoteknik.com.
Terima kasih atas kepercayaan kamu kepada Indoteknik.com.
Terima kasih atas perhatian dan kerjasamanya.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
- Indoteknik + + Indoteknik
+ +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + +
Halo Pak Akbar,
Kami sampaikan informasi bahwa saat ini terdapat pengajuan Pembayaran Tempo dari ${object.pengajuan_tempo_id.name_tempo.name} telah melalui tahap persetujuan awal dari Manager Sales & diverifikasi oleh ${object.write_uid.name} dari tim Finance.
Untuk proses persetujuan akhir, mohon Bapak dapat segera meninjau dan mengevaluasi atas pengajuan terhadap data yang telah diberikan oleh ${object.pengajuan_tempo_id.name_tempo.name}.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
+ Indoteknik +
+
+
+
+
+ + + + Users: Company Tempo Approved + + Pengajuan Tempo kamu di Indoteknik.com Telah Disetujui! + "Indoteknik.com" <noreply@indoteknik.com> + sales@indoteknik.com + ${object.pengajuan_tempo_id.user_id.login | safe} + + + +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Hai. ${object.pengajuan_tempo_id.name_tempo.name},
Kabar baik! Kami dengan senang hati menginformasikan bahwa pengajuan tempo pembayaran kamu di Indoteknik.com telah disetujui dengan detail sebagai berikut.
Limit Pembayaran Tempo : Rp ${object.format_currency(object.pengajuan_tempo_id.tempo_limit)}
Durasi Pembayaran Tempo : ${object.pengajuan_tempo_id.tempo_duration.name}
Kamu dapat melakukan pembayaran sesuai dengan jangka waktu yang telah disepakati. Detail lengkap mengenai transaksi kamu, termasuk tanggal jatuh tempo & Pengajuan Kenaikan Limit Tempo, dapat kamu lihat di akun Profile Indoteknik.com .
Terima kasih atas kepercayaan kamu kepada Indoteknik.com.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
+ Indoteknik +
+
+
+
+
+
+
+ + Users: Company Tempo Reject + + Mohon Maaf Pengajuan Tempo anda kami Tolak + "Indoteknik.com" <noreply@indoteknik.com> + sales@indoteknik.com + ${object.pengajuan_tempo_id.user_id.login | safe} + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + +
Hai. ${object.pengajuan_tempo_id.name_tempo.name},
Kami sampaikan dengan sangat menyesal bahwa pengajuan permohonan tempo pembayaran Anda yang diajukan pada tanggal ${format_date(object.pengajuan_tempo_id.create_date, 'dd MMMM yyyy')} tidak dapat kami setujui.
Keputusan ini telah kami pertimbangkan secara matang berdasarkan beberapa faktor, diantaranya alasan tidak disetujuinya adalah ${object.reason_reject}
Kami memahami bahwa hal ini mungkin mengecewakan. Namun, kami berharap Anda dapat memahami kebijakan perusahaan kami.
Terima kasih atas pengertiannya.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
+ Indoteknik +
+
+
+
+
+
+
+ + User Pengajuan Tempo Request ir.actions.act_window -- cgit v1.2.3 From 0aad5455df5d36ef87ab1cbd52030a3cf0bef1d8 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Wed, 4 Dec 2024 10:58:46 +0700 Subject: update code pengajuan tempo --- indoteknik_api/controllers/api_v1/partner.py | 29 ++--- indoteknik_api/controllers/api_v1/user.py | 4 +- indoteknik_api/models/res_partner.py | 142 ++++++++++++++--------- indoteknik_api/models/res_users.py | 4 +- indoteknik_custom/models/user_company_request.py | 26 ++--- 5 files changed, 117 insertions(+), 88 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 19c73aec..0522e8e1 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -284,10 +284,10 @@ class Partner(controller.Controller): user_id = int(kw.get('user_id')) tempo_request = True if kw.get('tempo_request') == 'true' else False pengajuan_tempo = request.env['user.pengajuan.tempo'].search([('name_tempo', '=', user_id)], limit=1) - user = request.env['res.partner'].search([('id', '=', id)], limit=1) + user = request.env['res.partner'].search([('id', '=', user_id)], limit=1) company_name = kw.get('name', pengajuan_tempo.name_tempo.name) partner_id = request.env['res.partner'].search([('name', 'like', company_name)], limit=1) - user_account = self.get_user_by_email(user.user_id.email) + user_account = self.get_user_by_email(user.email) params = self.get_request_params(kw, { @@ -374,7 +374,7 @@ class Partner(controller.Controller): supplier_ids_to_add.append(new_supplier_data.id) - pengajuan_tempo.write({'supplier_ids': [(4, supplier_id, 0) for supplier_id in supplier_ids_to_add]}) + pengajuan_tempo.write({'supplier_ids': [(6, 0, supplier_ids_to_add)]}) except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formSupplier'}) @@ -477,31 +477,31 @@ class Partner(controller.Controller): 'mimetype': mimetype }) - if dokumen['documentName'] == 'dokumenNib' and dokumen['details']['base64'] != '': + if dokumen['documentName'] == 'dokumenNib' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_nib = [(4, sppkp_attachment.id)] - elif dokumen['documentName'] == 'dokumenNpwp' and dokumen['details']['base64'] != '': + elif dokumen['documentName'] == 'dokumenNpwp' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_npwp = [(4, sppkp_attachment.id)] - elif dokumen['documentName'] == 'dokumenSppkp' and dokumen['details']['base64'] != '': + elif dokumen['documentName'] == 'dokumenSppkp' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_sppkp = [(4, sppkp_attachment.id)] - elif dokumen['documentName'] == 'dokumenAktaPerubahan' and dokumen['details']['base64'] != '': + elif dokumen['documentName'] == 'dokumenAktaPerubahan' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_akta_perubahan = [(4, sppkp_attachment.id)] - elif dokumen['documentName'] == 'dokumenKtpDirut' and dokumen['details']['base64'] != '': + elif dokumen['documentName'] == 'dokumenKtpDirut' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_ktp_dirut = [(4, sppkp_attachment.id)] - elif dokumen['documentName'] == 'dokumenAktaPendirian' and dokumen['details']['base64'] != '': + elif dokumen['documentName'] == 'dokumenAktaPendirian' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_akta_pendirian = [(4, sppkp_attachment.id)] - elif dokumen['documentName'] == 'dokumenLaporanKeuangan' and dokumen['details']['base64'] != '': + elif dokumen['documentName'] == 'dokumenLaporanKeuangan' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_laporan_keuangan = [(4, sppkp_attachment.id)] - elif dokumen['documentName'] == 'dokumenFotoKantor' and dokumen['details']['base64'] != '': + elif dokumen['documentName'] == 'dokumenFotoKantor' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_foto_kantor = [(4, sppkp_attachment.id)] - else: + elif dokumen['documentName'] == 'dokumen_tempat_bekerja' and dokumen['details']['base64'] != '' : pengajuan_tempo.dokumen_tempat_bekerja = [(4, sppkp_attachment.id)] formatted_text = ''.join([' ' + char if char.isupper() and i != 0 else char for i, char in enumerate(dokumen['documentName'])]) @@ -519,9 +519,10 @@ class Partner(controller.Controller): 'tempo_limit': pengajuan_tempo.tempo_limit, }) pengajuan_tempo.user_id = user_account.id - template = pengajuan_tempo.env.ref('indoteknik_custom.mail_template_user_cart_reminder_to_checkout') + template = pengajuan_tempo.env.ref('indoteknik_custom.mail_template_res_user_company_request_tempo_review') template.send_mail(pengajuan_tempo.id, force_send=True) - # user_account.send_activation_mail() + template2 = pengajuan_tempo.env.ref('indoteknik_custom.mail_template_res_user_company_new_tempo_to_sales') + template2.send_mail(pengajuan_tempo.id, force_send=True) return self.response({ 'id': pengajuan_tempo.id, 'user_id': user_id, diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index 51dae0a2..addf2c9f 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -405,7 +405,7 @@ class User(controller.Controller): @http.route(prefix + 'user//after_request_tempo', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() - def update_user_tempo(self, **kw): + def update_user_tempo_after_request(self, **kw): id = kw.get('id') user = request.env['res.users'].search([('id', '=', id)], limit=1) @@ -414,7 +414,7 @@ class User(controller.Controller): return self.response({ - 'user': self.response_with_token(user, payment_tempo='Review') + 'user': self.response_with_token(user) }) @http.route(prefix + 'user//address', auth='public', methods=['GET', 'OPTIONS']) diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index 9b9f87d4..7b3c8d47 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -4,10 +4,10 @@ import json class ResPartner(models.Model): _inherit = 'res.partner' - def api_single_response(self, res_partner, with_detail=''): + def api_single_response(self, pengajuan_tempo, with_detail=''): config = self.env['ir.config_parameter'] - partner = res_partner.partner_id + partner = pengajuan_tempo.partner_id dokumen_kirim = [ ['Surat Tanda Terima Barang (STTB)', '0'], @@ -16,10 +16,10 @@ class ResPartner(models.Model): ['Lembar Penerimaan Barang (LPB)', '3'] ] dokumen_pengiriman = [] - if res_partner.dokumen_pengiriman : - res_partner_dokumen_pengiriman = res_partner.dokumen_pengiriman + if pengajuan_tempo.dokumen_pengiriman : + pengajuan_tempo_dokumen_pengiriman = pengajuan_tempo.dokumen_pengiriman mapping_dokumen = {item[0]: item[1] for item in dokumen_kirim} - dokumen_pengiriman_list = [dokumen.strip() for dokumen in res_partner_dokumen_pengiriman.split(',')] + dokumen_pengiriman_list = [dokumen.strip() for dokumen in pengajuan_tempo_dokumen_pengiriman.split(',')] dokumen_pengiriman = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_pengiriman_list] dokumen = [ @@ -30,57 +30,57 @@ class ResPartner(models.Model): ['Good Receipt (GR)','4'] ] dokumen_invoice = [] - if res_partner.dokumen_invoice: - res_partner_dokumen_invoice = res_partner.dokumen_invoice + if pengajuan_tempo.dokumen_invoice: + pengajuan_tempo_dokumen_invoice = pengajuan_tempo.dokumen_invoice mapping_dokumen = {item[0]: item[1] for item in dokumen} - dokumen_invoice_list = [dokumen.strip() for dokumen in res_partner_dokumen_invoice.split(',')] + dokumen_invoice_list = [dokumen.strip() for dokumen in pengajuan_tempo_dokumen_invoice.split(',')] dokumen_invoice = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_invoice_list] data = { - 'name' : res_partner.name_tempo.name, - 'industry_id' : res_partner.industry_id_tempo.id, - 'street' : res_partner.street_tempo, - 'state' : res_partner.state_id_tempo.id, - 'city' : res_partner.city_id_tempo.id, - 'zip' : res_partner.zip_tempo, - 'mobile' : res_partner.mobile_tempo, - 'bank_name' : res_partner.bank_name_tempo, - 'account_name' : res_partner.account_name_tempo, - 'account_number' : res_partner.account_number_tempo, - 'website' : res_partner.website_tempo if res_partner.website_tempo else '', - 'estimasi' : res_partner.estimasi_tempo, - 'tempo_duration' : res_partner.tempo_duration.id, - 'tempo_limit' : res_partner.tempo_limit, - 'category_produk': ','.join([str(cat.id) for cat in res_partner.category_produk_ids]) if res_partner.category_produk_ids else '', + 'name' : pengajuan_tempo.name_tempo.name, + 'industry_id' : pengajuan_tempo.industry_id_tempo.id, + 'street' : pengajuan_tempo.street_tempo, + 'state' : pengajuan_tempo.state_id_tempo.id, + 'city' : pengajuan_tempo.city_id_tempo.id, + 'zip' : pengajuan_tempo.zip_tempo, + 'mobile' : pengajuan_tempo.mobile_tempo, + 'bank_name' : pengajuan_tempo.bank_name_tempo, + 'account_name' : pengajuan_tempo.account_name_tempo, + 'account_number' : pengajuan_tempo.account_number_tempo, + 'website' : pengajuan_tempo.website_tempo if pengajuan_tempo.website_tempo else '', + 'estimasi' : pengajuan_tempo.estimasi_tempo, + 'tempo_duration' : pengajuan_tempo.tempo_duration.id, + 'tempo_limit' : pengajuan_tempo.tempo_limit, + 'category_produk': ','.join([str(cat.id) for cat in pengajuan_tempo.category_produk_ids]) if pengajuan_tempo.category_produk_ids else '', # Kontak Perusahaan - 'direktur_name' : res_partner.direktur_name if res_partner.direktur_name else '', - 'direktur_mobile' : res_partner.direktur_mobile if res_partner.direktur_mobile else '', - 'direktur_email' : res_partner.direktur_email if res_partner.direktur_email else '', - 'purchasing_name' : res_partner.purchasing_name if res_partner.purchasing_name else '', - 'purchasing_mobile' : res_partner.purchasing_mobile if res_partner.purchasing_mobile else '', - 'purchasing_email' : res_partner.purchasing_email if res_partner.purchasing_email else '', - 'finance_name' : res_partner.finance_name if res_partner.finance_name else '', - 'finance_mobile' : res_partner.finance_mobile if res_partner.finance_mobile else '', - 'finance_email' : res_partner.finance_email if res_partner.finance_email else '', + 'direktur_name' : pengajuan_tempo.direktur_name if pengajuan_tempo.direktur_name else '', + 'direktur_mobile' : pengajuan_tempo.direktur_mobile if pengajuan_tempo.direktur_mobile else '', + 'direktur_email' : pengajuan_tempo.direktur_email if pengajuan_tempo.direktur_email else '', + 'purchasing_name' : pengajuan_tempo.purchasing_name if pengajuan_tempo.purchasing_name else '', + 'purchasing_mobile' : pengajuan_tempo.purchasing_mobile if pengajuan_tempo.purchasing_mobile else '', + 'purchasing_email' : pengajuan_tempo.purchasing_email if pengajuan_tempo.purchasing_email else '', + 'finance_name' : pengajuan_tempo.finance_name if pengajuan_tempo.finance_name else '', + 'finance_mobile' : pengajuan_tempo.finance_mobile if pengajuan_tempo.finance_mobile else '', + 'finance_email' : pengajuan_tempo.finance_email if pengajuan_tempo.finance_email else '', # Pengiriman - 'PIC_name' : res_partner.pic_name if res_partner.pic_name else '', - 'street_pengiriman' : res_partner.street_pengiriman if res_partner.street_pengiriman else '', - 'state_id_pengiriman' : res_partner.state_id_pengiriman.id if res_partner.state_id_pengiriman else '', - 'city_id_pengiriman' : res_partner.city_id_pengiriman.id if res_partner.city_id_pengiriman else '', - 'zip_pengiriman' : res_partner.zip_pengiriman if res_partner.zip_pengiriman else '', - 'invoice_pic' : res_partner.invoice_pic if res_partner.invoice_pic else '', - 'street_invoice' : res_partner.street_invoice if res_partner.street_invoice else '', - 'state_id_invoice' : res_partner.state_id_invoice.id if res_partner.state_id_invoice else '', - 'city_id_invoice' : res_partner.city_id_invoice.id if res_partner.city_id_invoice else '', - 'tukar_invoice' : res_partner.tukar_invoice if res_partner.tukar_invoice else '', - 'jadwal_bayar' : res_partner.jadwal_bayar if res_partner.jadwal_bayar else '', + 'PIC_name' : pengajuan_tempo.pic_name if pengajuan_tempo.pic_name else '', + 'street_pengiriman' : pengajuan_tempo.street_pengiriman if pengajuan_tempo.street_pengiriman else '', + 'state_pengiriman' : pengajuan_tempo.state_id_pengiriman.id if pengajuan_tempo.state_id_pengiriman else '', + 'city_pengiriman' : pengajuan_tempo.city_id_pengiriman.id if pengajuan_tempo.city_id_pengiriman else '', + 'zip_pengiriman' : pengajuan_tempo.zip_pengiriman if pengajuan_tempo.zip_pengiriman else '', + 'invoice_pic' : pengajuan_tempo.invoice_pic if pengajuan_tempo.invoice_pic else '', + 'street_invoice' : pengajuan_tempo.street_invoice if pengajuan_tempo.street_invoice else '', + 'state_invoice' : pengajuan_tempo.state_id_invoice.id if pengajuan_tempo.state_id_invoice else '', + 'city_invoice' : pengajuan_tempo.city_id_invoice.id if pengajuan_tempo.city_id_invoice else '', + 'tukar_invoice_input' : pengajuan_tempo.tukar_invoice if pengajuan_tempo.tukar_invoice else '', + 'tukar_invoice_input_pembayaran' : pengajuan_tempo.jadwal_bayar if pengajuan_tempo.jadwal_bayar else '', 'dokumen_pengiriman' : ','.join(dokumen_pengiriman) if dokumen_pengiriman else '', 'dokumen_pengiriman_invoice' : ','.join(dokumen_invoice) if dokumen_invoice else '', - 'is_same_address': res_partner.is_same_address if res_partner.is_same_address else False, - 'res_partner.is_same_address': res_partner.is_same_address_street if res_partner.is_same_address_street else False, + 'is_same_addrees': pengajuan_tempo.is_same_address if pengajuan_tempo.is_same_address else False, + 'is_same_addrees_street': pengajuan_tempo.is_same_address_street if pengajuan_tempo.is_same_address_street else False, 'supplier_ids': [ { 'id': supplier.id, @@ -90,19 +90,49 @@ class ResPartner(models.Model): 'credit_limit': supplier.credit_limit, 'durasi_tempo': supplier.tempo_duration } - for supplier in res_partner.supplier_ids - ] if res_partner.supplier_ids else '' + for supplier in pengajuan_tempo.supplier_ids + ] if pengajuan_tempo.supplier_ids else '', # Dokumen - # 'dokumen_nib': res_partner.dokumen_nib if res_partner.dokumen_nib else '', - # 'dokumen_npwp': res_partner.dokumen_npwp if res_partner.dokumen_npwp else '', - # 'dokumen_sppkp': res_partner.dokumen_sppkp if res_partner.dokumen_sppkp else '', - # 'dokumen_akta_perubahan': res_partner.dokumen_akta_perubahan if res_partner.dokumen_akta_perubahan else '', - # 'dokumen_ktp_dirut': res_partner.dokumen_ktp_dirut if res_partner.dokumen_ktp_dirut else '', - # 'dokumen_akta_pendirian': res_partner.dokumen_akta_pendirian if res_partner.dokumen_akta_pendirian else '', - # 'dokumen_laporan_keuangan': res_partner.dokumen_laporan_keuangan if res_partner.dokumen_laporan_keuangan else '', - # 'dokumen_foto_kantor': res_partner.dokumen_foto_kantor if res_partner.dokumen_foto_kantor else '', - # 'dokumen_tempat_bekerja': res_partner.dokumen_tempat_bekerja if res_partner.dokumen_tempat_bekerja else '', + 'dokumen_nib': + { + 'name': pengajuan_tempo.dokumen_nib.name, + 'base64': pengajuan_tempo.dokumen_nib.local_url, + } + if pengajuan_tempo.dokumen_nib else '', + 'dokumen_npwp': + { + 'name': pengajuan_tempo.dokumen_npwp.name, + 'base64': pengajuan_tempo.dokumen_npwp.local_url, + } if pengajuan_tempo.dokumen_npwp else '', + 'dokumen_sppkp': { + 'name': pengajuan_tempo.dokumen_sppkp.name, + 'base64': pengajuan_tempo.dokumen_sppkp.local_url, + } if pengajuan_tempo.dokumen_sppkp else '', + 'dokumen_akta_perubahan': { + 'name': pengajuan_tempo.dokumen_akta_perubahan.name, + 'base64': pengajuan_tempo.dokumen_akta_perubahan.local_url, + } if pengajuan_tempo.dokumen_akta_perubahan else '', + 'dokumen_ktp_dirut': { + 'name': pengajuan_tempo.dokumen_ktp_dirut.name, + 'base64': pengajuan_tempo.dokumen_ktp_dirut.local_url, + } if pengajuan_tempo.dokumen_ktp_dirut else '', + 'dokumen_akta_pendirian': { + 'name': pengajuan_tempo.dokumen_akta_pendirian.name, + 'base64': pengajuan_tempo.dokumen_akta_pendirian.local_url, + } if pengajuan_tempo.dokumen_akta_pendirian else '', + 'dokumen_laporan_keuangan': { + 'name': pengajuan_tempo.dokumen_laporan_keuangan.name, + 'base64': pengajuan_tempo.dokumen_laporan_keuangan.local_url, + } if pengajuan_tempo.dokumen_laporan_keuangan else '', + 'dokumen_foto_kantor': { + 'name': pengajuan_tempo.dokumen_foto_kantor.name, + 'base64': pengajuan_tempo.dokumen_foto_kantor.local_url, + } if pengajuan_tempo.dokumen_foto_kantor else '', + 'dokumen_tempat_bekerja': { + 'name': pengajuan_tempo.dokumen_tempat_bekerja.name, + 'base64': pengajuan_tempo.dokumen_tempat_bekerja.local_url, + } if pengajuan_tempo.dokumen_tempat_bekerja else '', } return data \ No newline at end of file diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index 15aaa5a7..0c7dd96f 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -4,7 +4,7 @@ from odoo.http import request class ResUsers(models.Model): _inherit = 'res.users' - def api_single_response(self, res_user, with_detail='', payment_tempo= ''): + def api_single_response(self, res_user, with_detail=''): config = self.env['ir.config_parameter'] partner = res_user.partner_id @@ -19,8 +19,6 @@ class ResUsers(models.Model): tempo_progres = 'review' if is_tempo_request.state_tempo in ('draft','approval_sales','approval_finance') else '' if main_partner: partner_tempo = main_partner.get_check_payment_term() - if payment_tempo: - tempo_progres = payment_tempo data = { 'id': res_user.id, diff --git a/indoteknik_custom/models/user_company_request.py b/indoteknik_custom/models/user_company_request.py index ea5ca09e..3de3d751 100644 --- a/indoteknik_custom/models/user_company_request.py +++ b/indoteknik_custom/models/user_company_request.py @@ -88,19 +88,19 @@ class UserCompanyRequest(models.Model): if not self.is_approve and is_approve: if is_approve == 'approved': - self.user_id.parent_id = user_company_id.id if user_company_id.id else self.user_company_id.id - self.user_id.customer_type = user_company_id.customer_type - self.user_id.npwp = user_company_id.npwp - self.user_id.sppkp = user_company_id.sppkp - self.user_id.nama_wajib_pajak = user_company_id.nama_wajib_pajak - self.user_id.alamat_lengkap_text = user_company_id.alamat_lengkap_text - self.user_id.industry_id = user_company_id.industry_id.id - self.user_id.company_type_id = user_company_id.company_type_id.id - self.user_id.user_id = user_company_id.user_id - self.user_id.property_account_receivable_id = user_company_id.property_account_receivable_id - self.user_id.property_account_payable_id = user_company_id.property_account_payable_id - self.user_id.property_payment_term_id = user_company_id.property_payment_term_id - self.user_id.property_supplier_payment_term_id = user_company_id.property_supplier_payment_term_id + self.user_id.parent_id = user_company_id if user_company_id else self.user_company_id + self.user_id.customer_type = user_company_id.customer_type if user_company_id else self.user_company_id.customer_type + self.user_id.npwp = user_company_id.npwp if user_company_id else self.user_company_id.npwp + self.user_id.sppkp = user_company_id.sppkp if user_company_id else self.user_company_id.sppkp + self.user_id.nama_wajib_pajak = user_company_id.nama_wajib_pajak if user_company_id else self.user_company_id.nama_wajib_pajak + self.user_id.alamat_lengkap_text = user_company_id.alamat_lengkap_text if user_company_id else self.user_company_id.alamat_lengkap_text + self.user_id.industry_id = user_company_id.industry_id.id if user_company_id else self.user_company_id.industry_id + self.user_id.company_type_id = user_company_id.company_type_id.id if user_company_id else self.user_company_id.company_type_id + self.user_id.user_id = user_company_id.user_id if user_company_id else self.user_company_id.user_id + self.user_id.property_account_receivable_id = user_company_id.property_account_receivable_id if user_company_id else self.user_company_id.property_account_receivable_id + self.user_id.property_account_payable_id = user_company_id.property_account_payable_id if user_company_id else self.user_company_id.property_account_payable_id + self.user_id.property_payment_term_id = user_company_id.property_payment_term_id if user_company_id else self.user_company_id.property_payment_term_id + self.user_id.property_supplier_payment_term_id = user_company_id.property_supplier_payment_term_id if user_company_id else self.user_company_id.property_supplier_payment_term_id self.user_company_id.active = True user.send_company_request_approve_mail() else: -- cgit v1.2.3 From af85c0d2248728fe33675dcec6e513eefd6553a4 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 6 Dec 2024 17:08:46 +0700 Subject: update pengajuan tempo --- indoteknik_api/controllers/api_v1/partner.py | 97 ++++++++-------------- indoteknik_api/models/res_partner.py | 23 ++--- indoteknik_api/models/res_users.py | 6 +- indoteknik_custom/models/res_partner.py | 3 + indoteknik_custom/models/user_pengajuan_tempo.py | 6 ++ .../models/user_pengajuan_tempo_request.py | 45 ++++++++++ indoteknik_custom/views/res_partner.xml | 1 + indoteknik_custom/views/user_pengajuan_tempo.xml | 1 + .../views/user_pengajuan_tempo_request.xml | 6 +- 9 files changed, 107 insertions(+), 81 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 0522e8e1..d8464add 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -308,22 +308,27 @@ class Partner(controller.Controller): 'tempoLimit': ['alias:tempo_limit'], # informasi perusahaan + 'direkturTittle': ['alias:direktur_tittle'], 'direkturName': ['alias:direktur_name'], 'direkturMobile': ['alias:direktur_mobile'], 'direkturEmail': ['alias:direktur_email'], + 'purchasingTittle': ['alias:purchasing_tittle'], 'purchasingName': ['alias:purchasing_name'], 'purchasingMobile': ['alias:purchasing_mobile'], 'purchasingEmail': ['alias:purchasing_email'], + 'financeTittle': ['alias:finance_tittle'], 'financeName': ['alias:finance_name'], 'financeMobile': ['alias:finance_mobile'], 'financeEmail': ['alias:finance_email'], # Pengiriman + 'PICTittle': ['alias:pic_tittle'], 'PICName': ['alias:pic_name'], 'streetPengiriman': ['alias:street_pengiriman'], 'statePengiriman': ['alias:state_id_pengiriman'], 'cityPengiriman': ['alias:city_id_pengiriman'], 'zipPengiriman': ['alias:zip_pengiriman'], + 'invoicePicTittle': ['alias:invoice_pic_tittle'], 'invoicePic': ['alias:invoice_pic'], 'streetInvoice': ['alias:street_invoice'], 'stateInvoice': ['alias:state_id_invoice'], @@ -384,37 +389,13 @@ class Partner(controller.Controller): category_ids = list(map(int, category_produk_ids.split(','))) pengajuan_tempo.category_produk_ids = [(6, 0, category_ids)] - every_weekday = True if kw.get('everyWeekday') == "true" else False - every_weekday_input = kw.get('everyWeekdayInput') - every_week = True if kw.get('everyWeek') == 'true' else False - every_week_input = kw.get('everyWeekInput') - tukar_invoice = True if kw.get('tukarInvoice') == 'true' else False tukar_invoice_input = kw.get('tukarInvoiceInput') - jadwal_tukar_invoice = "" - if every_weekday: - jadwal_tukar_invoice += f"setiap hari {every_weekday_input}" - if every_week: - jadwal_tukar_invoice += f", setiap {every_week_input}" - if tukar_invoice or tukar_invoice_input: - jadwal_tukar_invoice += f", {tukar_invoice_input}" - if jadwal_tukar_invoice: - pengajuan_tempo.tukar_invoice = jadwal_tukar_invoice - - every_weekday_pembayaran = True if kw.get('everyWeekdayPembayaran') == 'true' else False - every_weekday_input_pembayaran = kw.get('everyWeekdayInputPembayaran') - every_week_pembayaran = True if kw.get('everyWeekPembayaran') == 'true' else False - every_week_input_pembayaran = kw.get('everyWeekInputPembayaran') - tukar_invoice_pembayaran = True if kw.get('tukarInvoicePembayaran') == 'true' else False + if tukar_invoice_input: + pengajuan_tempo.tukar_invoice = tukar_invoice_input + tukar_invoice_input_pembayaran = kw.get('tukarInvoiceInputPembayaran') - jadwal_tukar_invoice_pembayaran = "" - if every_weekday_pembayaran: - jadwal_tukar_invoice_pembayaran += f"setiap hari {every_weekday_input_pembayaran}" - if every_week_pembayaran: - jadwal_tukar_invoice_pembayaran += f", setiap {every_week_input_pembayaran}" - if tukar_invoice_pembayaran or tukar_invoice_input_pembayaran: - jadwal_tukar_invoice_pembayaran += f", {tukar_invoice_input_pembayaran}" - if jadwal_tukar_invoice_pembayaran: - pengajuan_tempo.jadwal_bayar = jadwal_tukar_invoice_pembayaran + if tukar_invoice_input_pembayaran: + pengajuan_tempo.jadwal_bayar = tukar_invoice_input_pembayaran dokumen_kirim = [ 'Surat Tanda Terima Barang (STTB)', @@ -431,11 +412,10 @@ class Partner(controller.Controller): dokumen_kirim_ids = list(map(int, dokumen_kirim_barang_ids.split(','))) dokumen_kirim_barang = [dokumen_kirim[i] for i in dokumen_kirim_ids if 0 <= i < len(dokumen_kirim)] - if dokumen_kirim_barang_input: - input_items = [item.strip() for item in dokumen_kirim_barang_input.split(',')] - dokumen_kirim_barang.extend(item for item in input_items if item and item not in dokumen_kirim_barang) if dokumen_kirim_barang: pengajuan_tempo.dokumen_pengiriman = ', '.join(dokumen_kirim_barang) + if dokumen_kirim_barang_input: + pengajuan_tempo.dokumen_pengiriman_input = dokumen_kirim_barang_input dokumen = [ 'Invoice Pembelian', @@ -445,18 +425,9 @@ class Partner(controller.Controller): 'Good Receipt (GR)' ] - dokumen_invoice_ids = kw.get('dokumenPengirimanInvoice') - dokumen_invoice_input = kw.get('dokumenPengirimanInvoiceInput', '') - dokumen_invoice = "" - - if dokumen_invoice_ids: - dokumen_ids = list(map(int, dokumen_invoice_ids.split(','))) - dokumen_invoice = [dokumen[i] for i in dokumen_ids if 0 <= i < len(dokumen)] - if dokumen_invoice_input: - input_items = [item.strip() for item in dokumen_invoice_input.split(',')] - dokumen_invoice.extend(item for item in input_items if item and item not in dokumen_invoice) + dokumen_invoice = kw.get('dokumenPengirimanInvoice', '') if dokumen_invoice: - pengajuan_tempo.dokumen_invoice = ', '.join(dokumen_invoice) + pengajuan_tempo.dokumen_invoice = dokumen_invoice form_dokumen_data = kw.get('formDocs', False) if form_dokumen_data: @@ -477,37 +448,39 @@ class Partner(controller.Controller): 'mimetype': mimetype }) - if dokumen['documentName'] == 'dokumenNib' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_nib = [(4, sppkp_attachment.id)] + if dokumen['documentName'] == 'dokumenNib': + pengajuan_tempo.dokumen_nib = [(6, 0, [sppkp_attachment.id])] - elif dokumen['documentName'] == 'dokumenNpwp' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_npwp = [(4, sppkp_attachment.id)] + elif dokumen['documentName'] == 'dokumenNpwp': + pengajuan_tempo.dokumen_npwp = [(6, 0, [sppkp_attachment.id])] - elif dokumen['documentName'] == 'dokumenSppkp' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_sppkp = [(4, sppkp_attachment.id)] + elif dokumen['documentName'] == 'dokumenSppkp': + pengajuan_tempo.dokumen_sppkp = [(6, 0, [sppkp_attachment.id])] - elif dokumen['documentName'] == 'dokumenAktaPerubahan' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_akta_perubahan = [(4, sppkp_attachment.id)] + elif dokumen['documentName'] == 'dokumenAktaPerubahan': + pengajuan_tempo.dokumen_akta_perubahan = [(6, 0, [sppkp_attachment.id])] - elif dokumen['documentName'] == 'dokumenKtpDirut' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_ktp_dirut = [(4, sppkp_attachment.id)] + elif dokumen['documentName'] == 'dokumenKtpDirut': + pengajuan_tempo.dokumen_ktp_dirut = [(6, 0, [sppkp_attachment.id])] - elif dokumen['documentName'] == 'dokumenAktaPendirian' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_akta_pendirian = [(4, sppkp_attachment.id)] + elif dokumen['documentName'] == 'dokumenAktaPendirian': + pengajuan_tempo.dokumen_akta_pendirian = [(6, 0, [sppkp_attachment.id])] - elif dokumen['documentName'] == 'dokumenLaporanKeuangan' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_laporan_keuangan = [(4, sppkp_attachment.id)] + elif dokumen['documentName'] == 'dokumenLaporanKeuangan': + pengajuan_tempo.dokumen_laporan_keuangan = [(6, 0, [sppkp_attachment.id])] - elif dokumen['documentName'] == 'dokumenFotoKantor' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_foto_kantor = [(4, sppkp_attachment.id)] + elif dokumen['documentName'] == 'dokumenFotoKantor': + pengajuan_tempo.dokumen_foto_kantor = [(6, 0, [sppkp_attachment.id])] - elif dokumen['documentName'] == 'dokumen_tempat_bekerja' and dokumen['details']['base64'] != '' : - pengajuan_tempo.dokumen_tempat_bekerja = [(4, sppkp_attachment.id)] + elif dokumen['documentName'] == 'dokumenTempatBekerja': + pengajuan_tempo.dokumen_tempat_bekerja = [(6, 0, [sppkp_attachment.id])] - formatted_text = ''.join([' ' + char if char.isupper() and i != 0 else char for i, char in enumerate(dokumen['documentName'])]) + formatted_text = ''.join([' ' + char if char.isupper() and i != 0 else char for i, char in + enumerate(dokumen['documentName'])]) teks = formatted_text.strip().title() pengajuan_tempo.message_post(body=teks, attachment_ids=[sppkp_attachment.id]) + except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) if tempo_request: diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index 7b3c8d47..f73101db 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -22,21 +22,6 @@ class ResPartner(models.Model): dokumen_pengiriman_list = [dokumen.strip() for dokumen in pengajuan_tempo_dokumen_pengiriman.split(',')] dokumen_pengiriman = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_pengiriman_list] - dokumen = [ - ['Invoice Pembelian','0'], - ['Surat Jalan','1'], - ['Berita Acara Serah Terima (BAST)','2'], - ['Faktur Pajak','3'], - ['Good Receipt (GR)','4'] - ] - dokumen_invoice = [] - if pengajuan_tempo.dokumen_invoice: - pengajuan_tempo_dokumen_invoice = pengajuan_tempo.dokumen_invoice - mapping_dokumen = {item[0]: item[1] for item in dokumen} - dokumen_invoice_list = [dokumen.strip() for dokumen in pengajuan_tempo_dokumen_invoice.split(',')] - dokumen_invoice = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_invoice_list] - - data = { 'name' : pengajuan_tempo.name_tempo.name, 'industry_id' : pengajuan_tempo.industry_id_tempo.id, @@ -55,22 +40,27 @@ class ResPartner(models.Model): 'category_produk': ','.join([str(cat.id) for cat in pengajuan_tempo.category_produk_ids]) if pengajuan_tempo.category_produk_ids else '', # Kontak Perusahaan + 'direktur_tittle': pengajuan_tempo.direktur_tittle if pengajuan_tempo.direktur_tittle else '', 'direktur_name' : pengajuan_tempo.direktur_name if pengajuan_tempo.direktur_name else '', 'direktur_mobile' : pengajuan_tempo.direktur_mobile if pengajuan_tempo.direktur_mobile else '', 'direktur_email' : pengajuan_tempo.direktur_email if pengajuan_tempo.direktur_email else '', + 'purchasing_tittle': pengajuan_tempo.purchasing_tittle if pengajuan_tempo.purchasing_tittle else '', 'purchasing_name' : pengajuan_tempo.purchasing_name if pengajuan_tempo.purchasing_name else '', 'purchasing_mobile' : pengajuan_tempo.purchasing_mobile if pengajuan_tempo.purchasing_mobile else '', 'purchasing_email' : pengajuan_tempo.purchasing_email if pengajuan_tempo.purchasing_email else '', + 'finance_tittle': pengajuan_tempo.finance_tittle if pengajuan_tempo.finance_tittle else '', 'finance_name' : pengajuan_tempo.finance_name if pengajuan_tempo.finance_name else '', 'finance_mobile' : pengajuan_tempo.finance_mobile if pengajuan_tempo.finance_mobile else '', 'finance_email' : pengajuan_tempo.finance_email if pengajuan_tempo.finance_email else '', # Pengiriman + 'PIC_tittle' : pengajuan_tempo.pic_tittle if pengajuan_tempo.pic_tittle else '', 'PIC_name' : pengajuan_tempo.pic_name if pengajuan_tempo.pic_name else '', 'street_pengiriman' : pengajuan_tempo.street_pengiriman if pengajuan_tempo.street_pengiriman else '', 'state_pengiriman' : pengajuan_tempo.state_id_pengiriman.id if pengajuan_tempo.state_id_pengiriman else '', 'city_pengiriman' : pengajuan_tempo.city_id_pengiriman.id if pengajuan_tempo.city_id_pengiriman else '', 'zip_pengiriman' : pengajuan_tempo.zip_pengiriman if pengajuan_tempo.zip_pengiriman else '', + 'invoice_pic_tittle' : pengajuan_tempo.invoice_pic_tittle if pengajuan_tempo.invoice_pic_tittle else '', 'invoice_pic' : pengajuan_tempo.invoice_pic if pengajuan_tempo.invoice_pic else '', 'street_invoice' : pengajuan_tempo.street_invoice if pengajuan_tempo.street_invoice else '', 'state_invoice' : pengajuan_tempo.state_id_invoice.id if pengajuan_tempo.state_id_invoice else '', @@ -78,7 +68,8 @@ class ResPartner(models.Model): 'tukar_invoice_input' : pengajuan_tempo.tukar_invoice if pengajuan_tempo.tukar_invoice else '', 'tukar_invoice_input_pembayaran' : pengajuan_tempo.jadwal_bayar if pengajuan_tempo.jadwal_bayar else '', 'dokumen_pengiriman' : ','.join(dokumen_pengiriman) if dokumen_pengiriman else '', - 'dokumen_pengiriman_invoice' : ','.join(dokumen_invoice) if dokumen_invoice else '', + 'dokumen_pengiriman_input' : pengajuan_tempo.dokumen_pengiriman_input if pengajuan_tempo.dokumen_pengiriman_input else '', + 'dokumen_pengiriman_invoice' : pengajuan_tempo.dokumen_invoice if pengajuan_tempo.dokumen_invoice else '', 'is_same_addrees': pengajuan_tempo.is_same_address if pengajuan_tempo.is_same_address else False, 'is_same_addrees_street': pengajuan_tempo.is_same_address_street if pengajuan_tempo.is_same_address_street else False, 'supplier_ids': [ diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index 0c7dd96f..93204a96 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -16,7 +16,11 @@ class ResUsers(models.Model): } partner_tempo = '' is_tempo_request = request.env['user.pengajuan.tempo.request'].search([('user_company_id', '=', main_partner.id)], limit=1) - tempo_progres = 'review' if is_tempo_request.state_tempo in ('draft','approval_sales','approval_finance') else '' + tempo_progres = ( + 'review' if is_tempo_request.state_tempo in ('draft', 'approval_sales', 'approval_finance') else + 'rejected' if is_tempo_request.state_tempo == 'reject' else + 'approve' if is_tempo_request.state_tempo == 'approval_director' else '' + ) if main_partner: partner_tempo = main_partner.get_check_payment_term() diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index b21b1965..d2395dc5 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -68,6 +68,7 @@ class ResPartner(models.Model): tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') jadwal_bayar = fields.Char(string='Jadwal Pembayaran') dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') + dokumen_pengiriman_input = fields.Char(string='Dokumen saat Pengiriman Barang input') dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') # Dokumen @@ -238,6 +239,7 @@ class ResPartner(models.Model): vals['tukar_invoice'] = vals.get('tukar_invoice', self.tukar_invoice) vals['jadwal_bayar'] = vals.get('jadwal_bayar', self.jadwal_bayar) vals['dokumen_pengiriman'] = vals.get('dokumen_pengiriman', self.dokumen_pengiriman) + vals['dokumen_pengiriman_input'] = vals.get('dokumen_pengiriman_input', self.dokumen_pengiriman_input) vals['dokumen_invoice'] = vals.get('dokumen_invoice', self.dokumen_invoice) # Dokumen @@ -296,6 +298,7 @@ class ResPartner(models.Model): 'tukar_invoice': vals.get('tukar_invoice'), 'jadwal_bayar': vals.get('jadwal_bayar'), 'dokumen_pengiriman': vals.get('dokumen_pengiriman'), + 'dokumen_pengiriman_input': vals.get('dokumen_pengiriman_input'), 'dokumen_invoice': vals.get('dokumen_invoice'), 'dokumen_nib': vals.get('dokumen_nib'), 'dokumen_npwp': vals.get('dokumen_npwp'), diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index b527fa4c..046c4cc7 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -55,22 +55,27 @@ class UserPengajuanTempo(models.Model): return [('parent_id', '=', False)] # Kontak Perusahaan + direktur_tittle = fields.Char(string='tittle Direktur') direktur_name = fields.Char(string='Nama Lengkap Direktur') direktur_mobile = fields.Char(string='No. Telpon Direktur') direktur_email = fields.Char(string='Email Direktur') + purchasing_tittle = fields.Char(string='tittle Purchasing') purchasing_name = fields.Char(string='Nama Purchasing') purchasing_mobile = fields.Char(string='No. Telpon Purchasing') purchasing_email = fields.Char(string='Email Purchasing') + finance_tittle = fields.Char(string='tittle Finance') finance_name = fields.Char(string='Nama Finance') finance_mobile = fields.Char(string='No. Telpon Finance') finance_email = fields.Char(string='Email Finance') # Pengiriman + pic_tittle = fields.Char(string='Tittle PIC Penerimaan Barang') pic_name = fields.Char(string='Nama PIC Penerimaan Barang') street_pengiriman = fields.Char(string="Alamat Perusahaan") state_id_pengiriman = fields.Many2one('res.country.state', string='State') city_id_pengiriman = fields.Many2one('vit.kota', string='City') zip_pengiriman = fields.Char(string="Zip") + invoice_pic_tittle = fields.Char(string='Tittle PIC Penerimaan Invoice') invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice') street_invoice = fields.Char(string="Alamat Perusahaan") state_id_invoice = fields.Many2one('res.country.state', string='State') @@ -78,6 +83,7 @@ class UserPengajuanTempo(models.Model): tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') jadwal_bayar = fields.Char(string='Jadwal Pembayaran') dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') + dokumen_pengiriman_input = fields.Char(string='Dokumen saat Pengiriman Barang input') dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') is_same_address = fields.Boolean(string="Same Address pengiriman invoicr dan alamat pengiriman barang") is_same_address_street = fields.Boolean(string="Same Address pengiriman barang dan alamat bisnis") diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index 2d4875fb..74eda31f 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -184,6 +184,50 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.finance_mobile = self.pengajuan_tempo_id.finance_mobile self.user_company_id.finance_email = self.pengajuan_tempo_id.finance_email + # Data untuk kontak baru + contacts_data = [ + { + "type": "contact", + "name": self.pengajuan_tempo_id.direktur_name, + "email": self.pengajuan_tempo_id.direktur_email, + "phone": self.pengajuan_tempo_id.direktur_mobile, + }, + { + "type": "contact", + "name": self.pengajuan_tempo_id.purchasing_name, + "email": self.pengajuan_tempo_id.purchasing_email, + "phone": self.pengajuan_tempo_id.purchasing_mobile, + }, + { + "type": "contact", + "name": self.pengajuan_tempo_id.finance_name, + "email": self.pengajuan_tempo_id.finance_email, + "phone": self.pengajuan_tempo_id.finance_mobile, + }, + { + "type": "delivery", + "name": self.pengajuan_tempo_id.pic_name, + "street": self.pengajuan_tempo_id.street_pengiriman, + "state_id": self.pengajuan_tempo_id.state_id_pengiriman.id, + "city_id": self.pengajuan_tempo_id.city_id_pengiriman.id, + "zip": self.pengajuan_tempo_id.zip_pengiriman, + }, + { + "type": "invoice", + "name": self.pengajuan_tempo_id.invoice_pic, + "street": self.pengajuan_tempo_id.street_invoice, + "state_id": self.pengajuan_tempo_id.state_id_invoice.id, + "city_id": self.pengajuan_tempo_id.city_id_invoice.id, + }, + ] + + # Buat kontak baru untuk company_id + for contact_data in contacts_data: + self.env['res.partner'].create({ + "parent_id": self.user_company_id.id, # Hubungkan ke perusahaan + **contact_data, # Tambahkan data kontak + }) + # Pengiriman self.user_company_id.pic_name = self.pengajuan_tempo_id.pic_name self.user_company_id.street_pengiriman = self.pengajuan_tempo_id.street_pengiriman @@ -197,6 +241,7 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.tukar_invoice = self.pengajuan_tempo_id.tukar_invoice self.user_company_id.jadwal_bayar = self.pengajuan_tempo_id.jadwal_bayar self.user_company_id.dokumen_pengiriman = self.pengajuan_tempo_id.dokumen_pengiriman + self.user_company_id.dokumen_pengiriman_input = self.pengajuan_tempo_id.dokumen_pengiriman_input self.user_company_id.dokumen_invoice = self.pengajuan_tempo_id.dokumen_invoice # Referensi diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 6ce340f3..91298319 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -141,6 +141,7 @@ + diff --git a/indoteknik_custom/views/user_pengajuan_tempo.xml b/indoteknik_custom/views/user_pengajuan_tempo.xml index 30d75fe8..a6360136 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo.xml @@ -65,6 +65,7 @@ + diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 17ae526c..2a3fc745 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -39,7 +39,7 @@ - + @@ -265,9 +265,11 @@
Keputusan ini telah kami pertimbangkan secara matang berdasarkan beberapa faktor, diantaranya alasan tidak disetujuinya adalah ${object.reason_reject}
Kami memahami bahwa hal ini mungkin mengecewakan. Namun, kami berharap Anda dapat memahami kebijakan perusahaan kami.
Jangan khawatir anda dapat melakukan pembelian dengan metode pembayaran CBD (Cash Before Delivery) di website indoteknik.com.
Terima kasih atas pengertiannya.
Terima kasih atas Perhatian & Pengertiannya.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG
Hai. ${object.pengajuan_tempo_id.name_tempo.name},
Kabar baik! Kami dengan senang hati menginformasikan bahwa pengajuan tempo pembayaran kamu di Indoteknik.com telah disetujui dengan detail sebagai berikut.
Limit Pembayaran Tempo : Rp ${object.format_currency(object.pengajuan_tempo_id.tempo_limit)}
Limit Pembayaran Tempo : Rp ${object.format_currency(object.user_id.tempo_limit)}
Durasi Pembayaran Tempo : ${object.pengajuan_tempo_id.tempo_duration.name}
Durasi Pembayaran Tempo : ${object.user_id.tempo_duration.name}
Kamu dapat melakukan pembayaran sesuai dengan jangka waktu yang telah disepakati. Detail lengkap mengenai transaksi kamu, termasuk tanggal jatuh tempo & Pengajuan Kenaikan Limit Tempo, dapat kamu lihat di akun Profile Indoteknik.com .
@@ -322,7 +324,7 @@ Mohon Maaf Pengajuan Tempo anda kami Tolak "Indoteknik.com" <noreply@indoteknik.com> sales@indoteknik.com - ${object.pengajuan_tempo_id.user_id.login | safe} + ${object.user_id.email | safe} -- cgit v1.2.3 From 61427e249985af385de6619e8b362d249a68c688 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 13 Dec 2024 14:14:49 +0700 Subject: update pengajuan tempo --- indoteknik_api/controllers/api_v1/partner.py | 57 ++++++++-- indoteknik_api/models/res_partner.py | 41 ++++++- indoteknik_custom/models/res_partner.py | 40 ++++++- indoteknik_custom/models/user_pengajuan_tempo.py | 36 ++++-- .../models/user_pengajuan_tempo_request.py | 122 +++++++++++++++++---- indoteknik_custom/views/res_partner.xml | 18 ++- indoteknik_custom/views/user_pengajuan_tempo.xml | 20 +++- .../views/user_pengajuan_tempo_request.xml | 27 +++-- 8 files changed, 290 insertions(+), 71 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index ebf5de08..c0088d38 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -138,6 +138,8 @@ class Partner(controller.Controller): 'npwp': [], 'alamat_lengkap_text': [], 'street': [], + 'email': [], + 'mobile': [] }) # Mengambil id_user dari request @@ -297,6 +299,8 @@ class Partner(controller.Controller): 'street': ['alias:street_tempo'], 'state': ['alias:state_id_tempo'], 'city': ['alias:city_id_tempo'], + 'district': ['alias:district_id_tempo'], + 'subDistrict': ['alias:subDistrict_id_tempo'], 'zip': ['alias:zip_tempo'], 'mobile': ['alias:mobile_tempo'], 'bankName': ['alias:bank_name_tempo'], @@ -304,6 +308,8 @@ class Partner(controller.Controller): 'accountNumber': ['alias:account_number_tempo'], 'website': ['alias:website_tempo'], 'estimasi': ['alias:estimasi_tempo'], + 'portal': ['alias:portal'], + 'bersedia': ['alias:bersedia'], 'tempoDuration': ['alias:tempo_duration'], 'tempoLimit': ['alias:tempo_limit'], @@ -327,27 +333,38 @@ class Partner(controller.Controller): 'streetPengiriman': ['alias:street_pengiriman'], 'statePengiriman': ['alias:state_id_pengiriman'], 'cityPengiriman': ['alias:city_id_pengiriman'], + 'districtPengiriman': ['alias:district_id_pengiriman'], + 'subDistrictPengiriman': ['alias:subDistrict_id_pengiriman'], 'zipPengiriman': ['alias:zip_pengiriman'], 'invoicePicTittle': ['alias:invoice_pic_tittle'], 'invoicePic': ['alias:invoice_pic'], 'streetInvoice': ['alias:street_invoice'], 'stateInvoice': ['alias:state_id_invoice'], 'cityInvoice': ['alias:city_id_invoice'], + 'districtInvoice': ['alias:district_id_invoice'], + 'subDistrictInvoice': ['alias:subDistrict_id_invoice'], + 'zipInvoice': ['alias:zip_invoice'], + 'isSameAddrees':['alias:is_same_address'], + 'isSameAddreesStreet':['alias:is_same_address_street'], }) - # Konversi nilai 'true' ke boolean True - is_same_address = kw.get('isSameAddrees', 'false').lower() == 'true' - is_same_address_street = kw.get('isSameAddreesStreet', 'false').lower() == 'true' - - # Tambahkan nilai yang dikonversi ke params - if kw.get('isSameAddrees') != '': - params['value']['is_same_address'] = is_same_address - if kw.get('isSameAddreesStreet') != '': - params['value']['is_same_address_street'] = is_same_address_street + # # Konversi nilai 'true' ke boolean True + # is_same_address = kw.get('isSameAddrees', 'false').lower() == 'true' + # is_same_address_street = kw.get('isSameAddreesStreet', 'false').lower() == 'true' + # + # # Tambahkan nilai yang dikonversi ke params + # if 'isSameAddress' in kw: + # params['value']['is_same_address'] = is_same_address + # if 'is_same_address_street' in kw: + # params['value']['is_same_address_street'] = is_same_address_street if not params['valid']: return self.response(code=400, description=params) - + if params['value']['portal']: + if params['value']['portal'] == 'ada': + params['value']['portal'] = True + else: + params['value']['portal'] = False # Filter data baru yang dikirim (non-kosong, boolean False tetap masuk) new_data = {key: value for key, value in params['value'].items() if value != ''} @@ -413,13 +430,17 @@ class Partner(controller.Controller): ] dokumen_kirim_barang_ids = kw.get('dokumenPengiriman') + dokumen_kirim_input = kw.get('dokumenKirimInput', '') dokumen_kirim_barang_input = kw.get('dokumenPengirimanInput', '') dokumen_kirim_barang = [] if dokumen_kirim_barang_ids: dokumen_kirim_ids = list(map(int, dokumen_kirim_barang_ids.split(','))) dokumen_kirim_barang = [dokumen_kirim[i] for i in dokumen_kirim_ids if 0 <= i < len(dokumen_kirim)] - + if dokumen_kirim_input: + input_items = [item.strip() for item in dokumen_kirim_input.split(',')] + dokumen_kirim_barang.extend(item for item in input_items if item and item not in dokumen_kirim_barang) + pengajuan_tempo.dokumen_kirim_input = dokumen_kirim_input if dokumen_kirim_barang: pengajuan_tempo.dokumen_pengiriman = ', '.join(dokumen_kirim_barang) if dokumen_kirim_barang_input: @@ -468,6 +489,18 @@ class Partner(controller.Controller): if dokumen['documentName'] == 'dokumenNib': pengajuan_tempo.dokumen_nib = [(6, 0, [sppkp_attachment.id])] + elif dokumen['documentName'] == 'dokumenSiup': + pengajuan_tempo.dokumen_siup = [(6, 0, [sppkp_attachment.id])] + + elif dokumen['documentName'] == 'dokumenTdp': + pengajuan_tempo.dokumen_tdp = [(6, 0, [sppkp_attachment.id])] + + elif dokumen['documentName'] == 'dokumenSkdp': + pengajuan_tempo.dokumen_skdp = [(6, 0, [sppkp_attachment.id])] + + elif dokumen['documentName'] == 'dokumenSkt': + pengajuan_tempo.dokumen_skt = [(6, 0, [sppkp_attachment.id])] + elif dokumen['documentName'] == 'dokumenNpwp': pengajuan_tempo.dokumen_npwp = [(6, 0, [sppkp_attachment.id])] @@ -503,7 +536,7 @@ class Partner(controller.Controller): except json.JSONDecodeError: return http.Response(status=400, json_body={'error': 'Invalid JSON format for formDokumen'}) - + if tempo_request: # pengajuan_tempo.user_id = id template = pengajuan_tempo.env.ref('indoteknik_custom.mail_template_res_user_company_request_tempo_review') template.send_mail(pengajuan_tempo.id, force_send=True) diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index f73101db..258d8143 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -28,6 +28,8 @@ class ResPartner(models.Model): 'street' : pengajuan_tempo.street_tempo, 'state' : pengajuan_tempo.state_id_tempo.id, 'city' : pengajuan_tempo.city_id_tempo.id, + 'district' : pengajuan_tempo.district_id_tempo.id, + 'subDistrict' : pengajuan_tempo.subDistrict_id_tempo.id, 'zip' : pengajuan_tempo.zip_tempo, 'mobile' : pengajuan_tempo.mobile_tempo, 'bank_name' : pengajuan_tempo.bank_name_tempo, @@ -35,6 +37,8 @@ class ResPartner(models.Model): 'account_number' : pengajuan_tempo.account_number_tempo, 'website' : pengajuan_tempo.website_tempo if pengajuan_tempo.website_tempo else '', 'estimasi' : pengajuan_tempo.estimasi_tempo, + 'bersedia' : pengajuan_tempo.bersedia, + 'portal' : 'ada' if pengajuan_tempo.portal else 'tidak', 'tempo_duration' : pengajuan_tempo.tempo_duration.id, 'tempo_limit' : pengajuan_tempo.tempo_limit, 'category_produk': ','.join([str(cat.id) for cat in pengajuan_tempo.category_produk_ids]) if pengajuan_tempo.category_produk_ids else '', @@ -59,16 +63,22 @@ class ResPartner(models.Model): 'street_pengiriman' : pengajuan_tempo.street_pengiriman if pengajuan_tempo.street_pengiriman else '', 'state_pengiriman' : pengajuan_tempo.state_id_pengiriman.id if pengajuan_tempo.state_id_pengiriman else '', 'city_pengiriman' : pengajuan_tempo.city_id_pengiriman.id if pengajuan_tempo.city_id_pengiriman else '', + 'district_pengiriman': pengajuan_tempo.district_id_pengiriman.id if pengajuan_tempo.district_id_pengiriman else '', + 'subDistrict_pengiriman': pengajuan_tempo.subDistrict_id_pengiriman.id if pengajuan_tempo.subDistrict_id_pengiriman else '', 'zip_pengiriman' : pengajuan_tempo.zip_pengiriman if pengajuan_tempo.zip_pengiriman else '', 'invoice_pic_tittle' : pengajuan_tempo.invoice_pic_tittle if pengajuan_tempo.invoice_pic_tittle else '', 'invoice_pic' : pengajuan_tempo.invoice_pic if pengajuan_tempo.invoice_pic else '', 'street_invoice' : pengajuan_tempo.street_invoice if pengajuan_tempo.street_invoice else '', 'state_invoice' : pengajuan_tempo.state_id_invoice.id if pengajuan_tempo.state_id_invoice else '', 'city_invoice' : pengajuan_tempo.city_id_invoice.id if pengajuan_tempo.city_id_invoice else '', + 'district_invoice': pengajuan_tempo.district_id_invoice.id if pengajuan_tempo.district_id_invoice else '', + 'subDistrict_invoice': pengajuan_tempo.subDistrict_id_invoice.id if pengajuan_tempo.subDistrict_id_invoice else '', + 'zip_invoice': pengajuan_tempo.zip_invoice if pengajuan_tempo.zip_invoice else '', 'tukar_invoice_input' : pengajuan_tempo.tukar_invoice if pengajuan_tempo.tukar_invoice else '', 'tukar_invoice_input_pembayaran' : pengajuan_tempo.jadwal_bayar if pengajuan_tempo.jadwal_bayar else '', 'dokumen_pengiriman' : ','.join(dokumen_pengiriman) if dokumen_pengiriman else '', 'dokumen_pengiriman_input' : pengajuan_tempo.dokumen_pengiriman_input if pengajuan_tempo.dokumen_pengiriman_input else '', + 'dokumen_kirim_input' : pengajuan_tempo.dokumen_kirim_input if pengajuan_tempo.dokumen_kirim_input else '', 'dokumen_pengiriman_invoice' : pengajuan_tempo.dokumen_invoice if pengajuan_tempo.dokumen_invoice else '', 'is_same_addrees': pengajuan_tempo.is_same_address if pengajuan_tempo.is_same_address else False, 'is_same_addrees_street': pengajuan_tempo.is_same_address_street if pengajuan_tempo.is_same_address_street else False, @@ -85,12 +95,6 @@ class ResPartner(models.Model): ] if pengajuan_tempo.supplier_ids else '', # Dokumen - 'dokumen_nib': - { - 'name': pengajuan_tempo.dokumen_nib.name, - 'base64': pengajuan_tempo.dokumen_nib.local_url, - } - if pengajuan_tempo.dokumen_nib else '', 'dokumen_npwp': { 'name': pengajuan_tempo.dokumen_npwp.name, @@ -100,6 +104,31 @@ class ResPartner(models.Model): 'name': pengajuan_tempo.dokumen_sppkp.name, 'base64': pengajuan_tempo.dokumen_sppkp.local_url, } if pengajuan_tempo.dokumen_sppkp else '', + 'dokumen_nib': + { + 'name': pengajuan_tempo.dokumen_nib.name, + 'base64': pengajuan_tempo.dokumen_nib.local_url, + }if pengajuan_tempo.dokumen_nib else '', + 'dokumen_siup': + { + 'name': pengajuan_tempo.dokumen_siup.name, + 'base64': pengajuan_tempo.dokumen_siup.local_url, + }if pengajuan_tempo.dokumen_siup else '', + 'dokumen_tdp': + { + 'name': pengajuan_tempo.dokumen_tdp.name, + 'base64': pengajuan_tempo.dokumen_tdp.local_url, + }if pengajuan_tempo.dokumen_tdp else '', + 'dokumen_skdp': + { + 'name': pengajuan_tempo.dokumen_skdp.name, + 'base64': pengajuan_tempo.dokumen_skdp.local_url, + }if pengajuan_tempo.dokumen_skdp else '', + 'dokumen_skt': + { + 'name': pengajuan_tempo.dokumen_skt.name, + 'base64': pengajuan_tempo.dokumen_skt.local_url, + }if pengajuan_tempo.dokumen_skt else '', 'dokumen_akta_perubahan': { 'name': pengajuan_tempo.dokumen_akta_perubahan.name, 'base64': pengajuan_tempo.dokumen_akta_perubahan.local_url, diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 835ac65d..93125bb9 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -35,6 +35,7 @@ class ResPartner(models.Model): account_name_tempo = fields.Char(string="Nama Rekening") account_number_tempo = fields.Char(string="Nomor Rekening Bank") website_tempo = fields.Char(string='Website') + portal = fields.Boolean(string='Portal Website') estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') tempo_limit = fields.Char(string='Limit Tempo') @@ -60,21 +61,30 @@ class ResPartner(models.Model): street_pengiriman = fields.Char(string="Alamat Perusahaan") state_id_pengiriman = fields.Many2one('res.country.state', string='State') city_id_pengiriman = fields.Many2one('vit.kota', string='City') + district_id_pengiriman = fields.Many2one('vit.kecamatan', string='Kecamatan') + subDistrict_id_pengiriman = fields.Many2one('vit.kelurahan', string='Kelurahan') zip_pengiriman = fields.Char(string="Zip") invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice') street_invoice = fields.Char(string="Alamat Perusahaan") state_id_invoice = fields.Many2one('res.country.state', string='State') city_id_invoice = fields.Many2one('vit.kota', string='City') + district_id_invoice = fields.Many2one('vit.kecamatan', string='Kecamatan') + subDistrict_id_invoice = fields.Many2one('vit.kelurahan', string='Kelurahan') + zip_invoice = fields.Char(string="Zip") tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') jadwal_bayar = fields.Char(string='Jadwal Pembayaran') - dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') - dokumen_pengiriman_input = fields.Char(string='Dokumen saat Pengiriman Barang input') + dokumen_pengiriman = fields.Char(string='Dokumen Tanda Terima yang Diberikan Pada Saat Pengiriman Barang') + dokumen_pengiriman_input = fields.Char(string='Dokumen yang Dibawa Saat Pengiriman Barang') dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') # Dokumen - dokumen_nib = fields.Many2one('ir.attachment', string="NIB (SIUP/TDP/SKDP)", tracking=3, readonly=True,) dokumen_npwp = fields.Many2one('ir.attachment', string="NPWP Perusahaan", tracking=3, readonly=True) dokumen_sppkp = fields.Many2one('ir.attachment', string="SPPKP Perusahaan", tracking=3, readonly=True) + dokumen_nib = fields.Many2one('ir.attachment', string="NIB (SIUP/TDP/SKDP)", tracking=3, readonly=True,) + dokumen_siup = fields.Many2many('ir.attachment', 'pengajuan_dokumen_siup_rel', string="SIUP Perusahaan", tracking=True) + dokumen_tdp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_tdp_rel', string="TDP Perusahaan", tracking=True) + dokumen_skdp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_skdp_rel', string="SKDP Perusahaan",tracking=True) + dokumen_skt = fields.Many2many('ir.attachment', 'pengajuan_dokumen_skt_rel', string="SKT Perusahaan", tracking=True) dokumen_akta_perubahan = fields.Many2one('ir.attachment', string="Akta Perubahan", tracking=3, readonly=True) dokumen_ktp_dirut = fields.Many2one('ir.attachment', string="KTP Dirut/Direktur", tracking=3, readonly=True) dokumen_akta_pendirian = fields.Many2one('ir.attachment', string="Akta Pendirian", tracking=3, readonly=True) @@ -210,6 +220,7 @@ class ResPartner(models.Model): vals['account_name_tempo'] = vals.get('account_name_tempo', self.account_name_tempo) vals['account_number_tempo'] = vals.get('account_number_tempo', self.account_number_tempo) vals['website_tempo'] = vals.get('website_tempo', self.website_tempo) + vals['portal'] = vals.get('portal', self.portal) vals['estimasi_tempo'] = vals.get('estimasi_tempo', self.estimasi_tempo) vals['tempo_duration'] = vals.get('tempo_duration', self.tempo_duration) vals['tempo_limit'] = vals.get('tempo_limit', self.tempo_limit) @@ -231,11 +242,16 @@ class ResPartner(models.Model): vals['street_pengiriman'] = vals.get('street_pengiriman', self.street_pengiriman) vals['state_id_pengiriman'] = vals.get('state_id_pengiriman', self.state_id_pengiriman) vals['city_id_pengiriman'] = vals.get('city_id_pengiriman', self.city_id_pengiriman) + vals['district_id_pengiriman'] = vals.get('district_id_pengiriman', self.district_id_pengiriman) + vals['subDistrict_id_pengiriman'] = vals.get('subDistrict_id_pengiriman', self.subDistrict_id_pengiriman) vals['zip_pengiriman'] = vals.get('zip_pengiriman', self.zip_pengiriman) vals['invoice_pic'] = vals.get('invoice_pic', self.invoice_pic) vals['street_invoice'] = vals.get('street_invoice', self.street_invoice) vals['state_id_invoice'] = vals.get('state_id_invoice', self.state_id_invoice) vals['city_id_invoice'] = vals.get('city_id_invoice', self.city_id_invoice) + vals['district_id_invoice'] = vals.get('district_id_invoice', self.district_id_invoice) + vals['subDistrict_id_invoice'] = vals.get('subDistrict_id_invoice', self.subDistrict_id_invoice) + vals['zip_invoice'] = vals.get('zip_invoice', self.zip_invoice) vals['tukar_invoice'] = vals.get('tukar_invoice', self.tukar_invoice) vals['jadwal_bayar'] = vals.get('jadwal_bayar', self.jadwal_bayar) vals['dokumen_pengiriman'] = vals.get('dokumen_pengiriman', self.dokumen_pengiriman) @@ -243,9 +259,13 @@ class ResPartner(models.Model): vals['dokumen_invoice'] = vals.get('dokumen_invoice', self.dokumen_invoice) # Dokumen - vals['dokumen_nib'] = vals.get('dokumen_nib', self.dokumen_nib) vals['dokumen_npwp'] = vals.get('dokumen_npwp', self.dokumen_npwp) vals['dokumen_sppkp'] = vals.get('dokumen_sppkp', self.dokumen_sppkp) + vals['dokumen_nib'] = vals.get('dokumen_nib', self.dokumen_nib) + vals['dokumen_siup'] = vals.get('dokumen_siup', self.dokumen_siup) + vals['dokumen_tdp'] = vals.get('dokumen_tdp', self.dokumen_tdp) + vals['dokumen_skdp'] = vals.get('dokumen_skdp', self.dokumen_skdp) + vals['dokumen_skt'] = vals.get('dokumen_skt', self.dokumen_skt) vals['dokumen_akta_perubahan'] = vals.get('dokumen_akta_perubahan', self.dokumen_akta_perubahan) vals['dokumen_ktp_dirut'] = vals.get('dokumen_ktp_dirut', self.dokumen_ktp_dirut) vals['dokumen_akta_pendirian'] = vals.get('dokumen_akta_pendirian', self.dokumen_akta_pendirian) @@ -273,6 +293,7 @@ class ResPartner(models.Model): 'account_name_tempo': vals.get('account_name_tempo'), 'account_number_tempo': vals.get('account_number_tempo'), 'website_tempo': vals.get('website_tempo'), + 'portal': vals.get('portal'), 'estimasi_tempo': vals.get('estimasi_tempo'), 'tempo_duration': vals.get('tempo_duration'), 'tempo_limit': vals.get('tempo_limit'), @@ -290,19 +311,28 @@ class ResPartner(models.Model): 'street_pengiriman': vals.get('street_pengiriman'), 'state_id_pengiriman': vals.get('state_id_pengiriman'), 'city_id_pengiriman': vals.get('city_id_pengiriman'), + 'district_id_pengiriman': vals.get('district_id_pengiriman'), + 'subDistrict_id_pengiriman': vals.get('subDistrict_id_pengiriman'), 'zip_pengiriman': vals.get('zip_pengiriman'), 'invoice_pic': vals.get('invoice_pic'), 'street_invoice': vals.get('street_invoice'), 'state_id_invoice': vals.get('state_id_invoice'), 'city_id_invoice': vals.get('city_id_invoice'), + 'district_id_invoice': vals.get('district_id_invoice'), + 'subDistrict_id_invoice': vals.get('subDistrict_id_invoice'), + 'zip_invoice': vals.get('zip_invoice'), 'tukar_invoice': vals.get('tukar_invoice'), 'jadwal_bayar': vals.get('jadwal_bayar'), 'dokumen_pengiriman': vals.get('dokumen_pengiriman'), 'dokumen_pengiriman_input': vals.get('dokumen_pengiriman_input'), 'dokumen_invoice': vals.get('dokumen_invoice'), - 'dokumen_nib': vals.get('dokumen_nib'), 'dokumen_npwp': vals.get('dokumen_npwp'), 'dokumen_sppkp': vals.get('dokumen_sppkp'), + 'dokumen_nib': vals.get('dokumen_nib'), + 'dokumen_siup': vals.get('dokumen_siup'), + 'dokumen_tdp': vals.get('dokumen_tdp'), + 'dokumen_skdp': vals.get('dokumen_skdp'), + 'dokumen_skt': vals.get('dokumen_skt'), 'dokumen_akta_perubahan': vals.get('dokumen_akta_perubahan'), 'dokumen_ktp_dirut': vals.get('dokumen_ktp_dirut'), 'dokumen_akta_pendirian': vals.get('dokumen_akta_pendirian'), diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index b347e75e..3d8fcb4f 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -39,12 +39,16 @@ class UserPengajuanTempo(models.Model): street_tempo = fields.Char(string="Alamat Perusahaan") state_id_tempo = fields.Many2one('res.country.state', string='State') city_id_tempo = fields.Many2one('vit.kota', string='City') + district_id_tempo = fields.Many2one('vit.kecamatan', string='Kecamatan') + subDistrict_id_tempo = fields.Many2one('vit.kelurahan', string='Kelurahan') zip_tempo = fields.Char(string="Zip") mobile_tempo = fields.Char(string="No. Telfon Perusahaan") bank_name_tempo = fields.Char(string="Nama Bank") account_name_tempo = fields.Char(string="Nama Rekening") account_number_tempo = fields.Char(string="Nomor Rekening Bank") website_tempo = fields.Char(string='Website') + portal = fields.Boolean(string='Portal Website') + bersedia = fields.Char(string='Website') estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun') tempo_duration = fields.Many2one('account.payment.term', string='Durasi Tempo') tempo_limit = fields.Char(string='Limit Tempo') @@ -74,16 +78,22 @@ class UserPengajuanTempo(models.Model): street_pengiriman = fields.Char(string="Alamat Perusahaan") state_id_pengiriman = fields.Many2one('res.country.state', string='State') city_id_pengiriman = fields.Many2one('vit.kota', string='City') + district_id_pengiriman = fields.Many2one('vit.kecamatan', string='Kecamatan') + subDistrict_id_pengiriman = fields.Many2one('vit.kelurahan', string='Kelurahan') zip_pengiriman = fields.Char(string="Zip") invoice_pic_tittle = fields.Char(string='Tittle PIC Penerimaan Invoice') invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice') street_invoice = fields.Char(string="Alamat Perusahaan") state_id_invoice = fields.Many2one('res.country.state', string='State') city_id_invoice = fields.Many2one('vit.kota', string='City') + district_id_invoice = fields.Many2one('vit.kecamatan', string='Kecamatan') + subDistrict_id_invoice = fields.Many2one('vit.kelurahan', string='Kelurahan') + zip_invoice = fields.Char(string="Zip") tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice') jadwal_bayar = fields.Char(string='Jadwal Pembayaran') - dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang') - dokumen_pengiriman_input = fields.Char(string='Dokumen saat Pengiriman Barang input') + dokumen_pengiriman = fields.Char(string='Dokumen Tanda Terima yang Diberikan Pada Saat Pengiriman Barang') + dokumen_kirim_input = fields.Char(string='Dokumen lain yang diterima saat pengiriman barang') + dokumen_pengiriman_input = fields.Char(string='Dokumen yang Dibawa Saat Pengiriman Barang') dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice') is_same_address = fields.Boolean(string="Same Address pengiriman invoicr dan alamat pengiriman barang") is_same_address_street = fields.Boolean(string="Same Address pengiriman barang dan alamat bisnis") @@ -92,21 +102,25 @@ class UserPengajuanTempo(models.Model): supplier_ids = fields.Many2many('user.pengajuan.tempo.line', string="Suppliers") #Dokumen - dokumen_nib = fields.Many2many('ir.attachment', 'pengajuan_dokumen_nib_rel', string="NIB (SIUP/TDP/SKDP)", tracking=3, track_visibility="onchange") - dokumen_npwp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_npwp_rel', string="NPWP Perusahaan", tracking=3) - dokumen_sppkp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_sppkp_rel', string="SPPKP Perusahaan", tracking=3) + dokumen_nib = fields.Many2many('ir.attachment', 'pengajuan_dokumen_nib_rel', string="NIB", tracking=True, track_visibility="onchange") + dokumen_npwp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_npwp_rel', string="NPWP Perusahaan", tracking=True) + dokumen_sppkp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_sppkp_rel', string="SPPKP Perusahaan", tracking=True) + dokumen_siup = fields.Many2many('ir.attachment', 'pengajuan_dokumen_siup_rel', string="SIUP Perusahaan", tracking=True) + dokumen_tdp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_tdp_rel', string="TDP Perusahaan", tracking=True) + dokumen_skdp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_skdp_rel', string="SKDP Perusahaan", tracking=True) + dokumen_skt = fields.Many2many('ir.attachment', 'pengajuan_dokumen_skt_rel', string="SKT Perusahaan", tracking=True) dokumen_akta_perubahan = fields.Many2many('ir.attachment', 'pengajuan_dokumen_akta_perubahan_rel', - string="Akta Perubahan", tracking=3) + string="Akta Perubahan", tracking=True) dokumen_ktp_dirut = fields.Many2many('ir.attachment', 'pengajuan_dokumen_ktp_dirut_rel', - string="KTP Dirut/Direktur", tracking=3) + string="KTP Dirut/Direktur", tracking=True) dokumen_akta_pendirian = fields.Many2many('ir.attachment', 'pengajuan_dokumen_angkta_pendirian_rel', - string="Akta Pendirian", tracking=3) + string="Akta Pendirian", tracking=True) dokumen_laporan_keuangan = fields.Many2many('ir.attachment', 'pengajuan_dokumen_laporan_keuangan_rel', - string="Laporan Keuangan", tracking=3) + string="Laporan Keuangan", tracking=True) dokumen_foto_kantor = fields.Many2many('ir.attachment', 'pengajuan_dokumen_foto_kantor_rel', - string=" Foto Kantor (Tampak Depan)", tracking=3) + string=" Foto Kantor (Tampak Depan)", tracking=True) dokumen_tempat_bekerja = fields.Many2many('ir.attachment', 'pengajuan_dokumen_tempat_bekerja_rel', - string="Tempat Bekerja", tracking=3) + string="Tempat Bekerja", tracking=True) @api.depends('name', 'name_tempo') def name_get(self): diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index 452e4763..c181ab68 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -69,6 +69,7 @@ class UserPengajuanTempoRequest(models.Model): account_name_tempo = fields.Char(string="Nama Rekening", related='pengajuan_tempo_id.account_name_tempo', store=True, tracking=True, readonly=False) account_number_tempo = fields.Char(string="Nomor Rekening Bank", related='pengajuan_tempo_id.account_number_tempo', store=True, tracking=True, readonly=False) website_tempo = fields.Char(string='Website', related='pengajuan_tempo_id.website_tempo', store=True, tracking=True, readonly=False) + portal = fields.Boolean(string='Portal Website', related='pengajuan_tempo_id.portal', store=True, tracking=True, readonly=False) estimasi_tempo = fields.Char(string='Estimasi Pembelian Pertahun', related='pengajuan_tempo_id.estimasi_tempo', store=True, tracking=True, readonly=False) tempo_duration_origin = fields.Many2one('account.payment.term', string='Durasi Tempo', related='pengajuan_tempo_id.tempo_duration', store=True, tracking=True, readonly=False, domain=[('id', 'in', [24, 25, 29, 32])]) tempo_limit_origin = fields.Char(string='Limit Tempo', related='pengajuan_tempo_id.tempo_limit' , store=True, tracking=True, readonly=False) @@ -91,16 +92,21 @@ class UserPengajuanTempoRequest(models.Model): street_pengiriman = fields.Char(string="Alamat Perusahaan", related='pengajuan_tempo_id.street_pengiriman', store=True, readonly=False) state_id_pengiriman = fields.Many2one('res.country.state', string='State', related='pengajuan_tempo_id.state_id_pengiriman', store=True, readonly=False) city_id_pengiriman = fields.Many2one('vit.kota', string='City', related='pengajuan_tempo_id.city_id_pengiriman', store=True, readonly=False) + district_id_pengiriman = fields.Many2one('vit.kecamatan', string='Kecamatan',related='pengajuan_tempo_id.district_id_pengiriman', store=True, readonly=False) + subDistrict_id_pengiriman = fields.Many2one('vit.kelurahan', string='Kelurahan', related='pengajuan_tempo_id.subDistrict_id_pengiriman', store=True, readonly=False) zip_pengiriman = fields.Char(string="Zip", related='pengajuan_tempo_id.zip_pengiriman', store=True, readonly=False) invoice_pic_tittle = fields.Char(string='Tittle PIC Penerimaan Invoice', related='pengajuan_tempo_id.invoice_pic_tittle', store=True, readonly=False) invoice_pic = fields.Char(string='Nama PIC Penerimaan Invoice', related='pengajuan_tempo_id.invoice_pic', store=True, readonly=False) street_invoice = fields.Char(string="Alamat Perusahaan", related='pengajuan_tempo_id.street_invoice', store=True, readonly=False) state_id_invoice = fields.Many2one('res.country.state', string='State', related='pengajuan_tempo_id.state_id_invoice', store=True, readonly=False) city_id_invoice = fields.Many2one('vit.kota', string='City', related='pengajuan_tempo_id.city_id_invoice', store=True, readonly=False) + district_id_invoice = fields.Many2one('vit.kecamatan', string='Kecamatan', related='pengajuan_tempo_id.district_id_invoice', store=True, readonly=False) + subDistrict_id_invoice = fields.Many2one('vit.kelurahan', string='Kelurahan', related='pengajuan_tempo_id.subDistrict_id_invoice', store=True, readonly=False) + zip_invoice = fields.Char(string="Zip", related='pengajuan_tempo_id.zip_invoice', store=True, readonly=False) tukar_invoice = fields.Char(string='Jadwal Penukaran Invoice', related='pengajuan_tempo_id.tukar_invoice', store=True, readonly=False) jadwal_bayar = fields.Char(string='Jadwal Pembayaran', related='pengajuan_tempo_id.jadwal_bayar', store=True, readonly=False) - dokumen_pengiriman = fields.Char(string='Dokumen saat Pengiriman Barang', related='pengajuan_tempo_id.dokumen_pengiriman', store=True, readonly=False) - dokumen_pengiriman_input = fields.Char(string='Dokumen saat Pengiriman Barang input', related='pengajuan_tempo_id.dokumen_pengiriman_input', store=True, readonly=False) + dokumen_pengiriman = fields.Char(string='Dokumen Tanda Terima yang Diberikan Pada Saat Pengiriman Barang', related='pengajuan_tempo_id.dokumen_pengiriman', store=True, readonly=False) + dokumen_pengiriman_input = fields.Char(string='Dokumen yang dibawa saat pengiriman barang', related='pengajuan_tempo_id.dokumen_pengiriman_input', store=True, readonly=False) dokumen_invoice = fields.Char(string='Dokumen yang dilampirkan saat Pengiriman Invoice', related='pengajuan_tempo_id.dokumen_invoice', store=True, readonly=False) is_same_address = fields.Boolean(string="Same Address pengiriman invoicr dan alamat pengiriman barang", related='pengajuan_tempo_id.is_same_address', store=True, readonly=False) is_same_address_street = fields.Boolean(string="Same Address pengiriman barang dan alamat bisnis", related='pengajuan_tempo_id.is_same_address_street', store=True, readonly=False) @@ -109,16 +115,6 @@ class UserPengajuanTempoRequest(models.Model): supplier_ids = fields.Many2many('user.pengajuan.tempo.line',related='pengajuan_tempo_id.supplier_ids', string="Suppliers", readonly=False) # Dokumen - dokumen_nib = fields.Many2many( - 'ir.attachment', - 'pengajuan_dokumen_nib_rel', - string="NIB (SIUP/TDP/SKDP)", - related='pengajuan_tempo_id.dokumen_nib', - readonly=False, - tracking=3, - track_visibility="onchange" - ) - dokumen_npwp = fields.Many2many( 'ir.attachment', 'pengajuan_dokumen_npwp_rel', @@ -136,6 +132,53 @@ class UserPengajuanTempoRequest(models.Model): readonly=False, tracking=3 ) + dokumen_nib = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_nib_rel', + string="NIB", + related='pengajuan_tempo_id.dokumen_nib', + readonly=False, + tracking=3, + track_visibility="onchange" + ) + dokumen_siup = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_siup_rel', + string="SIUP", + related='pengajuan_tempo_id.dokumen_siup', + readonly=False, + tracking=3, + track_visibility="onchange" + ) + + dokumen_tdp = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_tdp_rel', + string="TDP", + related='pengajuan_tempo_id.dokumen_tdp', + readonly=False, + tracking=3, + track_visibility="onchange" + ) + dokumen_skdp = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_skdp_rel', + string="SKDP", + related='pengajuan_tempo_id.dokumen_skdp', + readonly=False, + tracking=3, + track_visibility="onchange" + ) + + dokumen_skt = fields.Many2many( + 'ir.attachment', + 'pengajuan_dokumen_skt_rel', + string="SKT", + related='pengajuan_tempo_id.dokumen_skt', + readonly=False, + tracking=3, + track_visibility="onchange" + ) dokumen_akta_perubahan = fields.Many2many( 'ir.attachment', @@ -208,6 +251,7 @@ class UserPengajuanTempoRequest(models.Model): self.pengajuan_tempo_id.account_name_tempo = self.account_name_tempo self.pengajuan_tempo_id.account_number_tempo = self.account_number_tempo self.pengajuan_tempo_id.website_tempo = self.website_tempo + self.pengajuan_tempo_id.portal = self.portal self.pengajuan_tempo_id.estimasi_tempo = self.estimasi_tempo self.pengajuan_tempo_id.tempo_duration = self.tempo_duration_origin self.pengajuan_tempo_id.tempo_limit = self.tempo_limit_origin @@ -229,8 +273,9 @@ class UserPengajuanTempoRequest(models.Model): self.pengajuan_tempo_id.finance_email = self.finance_email @api.onchange('pic_tittle', 'pic_name', 'street_pengiriman', 'state_id_pengiriman', 'city_id_pengiriman', - 'zip_pengiriman', + 'zip_pengiriman', 'district_id_pengiriman', 'subDistrict_id_pengiriman' 'invoice_pic_tittle', 'invoice_pic', 'street_invoice', 'state_id_invoice', 'city_id_invoice', + 'district_id_invoice', 'subDistrict_id_invoice', 'zip_invoice', 'tukar_invoice', 'jadwal_bayar', 'dokumen_pengiriman', 'dokumen_pengiriman_input', 'dokumen_invoice', 'is_same_address', 'is_same_address_street') def _onchange_related_fields_pengiriman(self): @@ -241,12 +286,17 @@ class UserPengajuanTempoRequest(models.Model): self.pengajuan_tempo_id.street_pengiriman = self.street_pengiriman self.pengajuan_tempo_id.state_id_pengiriman = self.state_id_pengiriman self.pengajuan_tempo_id.city_id_pengiriman = self.city_id_pengiriman + self.pengajuan_tempo_id.district_id_pengiriman = self.district_id_pengiriman + self.pengajuan_tempo_id.subDistrict_id_pengiriman = self.subDistrict_id_pengiriman self.pengajuan_tempo_id.zip_pengiriman = self.zip_pengiriman self.pengajuan_tempo_id.invoice_pic_tittle = self.invoice_pic_tittle self.pengajuan_tempo_id.invoice_pic = self.invoice_pic self.pengajuan_tempo_id.street_invoice = self.street_invoice self.pengajuan_tempo_id.state_id_invoice = self.state_id_invoice self.pengajuan_tempo_id.city_id_invoice = self.city_id_invoice + self.pengajuan_tempo_id.district_id_invoice = self.district_id_invoice + self.pengajuan_tempo_id.subDistrict_id_invoice = self.subDistrict_id_invoice + self.pengajuan_tempo_id.zip_invoice = self.zip_invoice self.pengajuan_tempo_id.tukar_invoice = self.tukar_invoice self.pengajuan_tempo_id.jadwal_bayar = self.jadwal_bayar self.pengajuan_tempo_id.dokumen_pengiriman = self.dokumen_pengiriman @@ -262,11 +312,16 @@ class UserPengajuanTempoRequest(models.Model): @api.onchange('dokumen_nib', 'dokumen_npwp', 'dokumen_sppkp', 'dokumen_akta_perubahan', 'dokumen_ktp_dirut', 'dokumen_akta_pendirian', 'dokumen_laporan_keuangan', - 'dokumen_foto_kantor', 'dokumen_tempat_bekerja') + 'dokumen_foto_kantor', 'dokumen_tempat_bekerja', 'dokumen_skdp', 'dokumen_skt', 'dokumen_siup', + 'dokumen_tdp') def _onchange_related_fields_dokumen(self): if self.pengajuan_tempo_id: # Perbarui nilai di pengajuan_tempo_id self.pengajuan_tempo_id.dokumen_nib = self.dokumen_nib + self.pengajuan_tempo_id.dokumen_siup = self.dokumen_siup + self.pengajuan_tempo_id.dokumen_tdp = self.dokumen_tdp + self.pengajuan_tempo_id.dokumen_skdp = self.dokumen_skdp + self.pengajuan_tempo_id.dokumen_skt = self.dokumen_skt self.pengajuan_tempo_id.dokumen_npwp = self.dokumen_npwp self.pengajuan_tempo_id.dokumen_sppkp = self.dokumen_sppkp self.pengajuan_tempo_id.dokumen_akta_perubahan = self.dokumen_akta_perubahan @@ -388,6 +443,7 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.account_name_tempo = self.pengajuan_tempo_id.account_name_tempo self.user_company_id.account_number_tempo = self.pengajuan_tempo_id.account_number_tempo self.user_company_id.website_tempo = self.pengajuan_tempo_id.website_tempo + self.user_company_id.portal = self.pengajuan_tempo_id.portal self.user_company_id.estimasi_tempo = self.pengajuan_tempo_id.estimasi_tempo self.user_company_id.tempo_duration = tempo_duration.id self.user_company_id.tempo_limit = limit_tempo @@ -432,7 +488,9 @@ class UserPengajuanTempoRequest(models.Model): "name": self.pengajuan_tempo_id.pic_name, "street": self.pengajuan_tempo_id.street_pengiriman, "state_id": self.pengajuan_tempo_id.state_id_pengiriman.id, - "city": self.pengajuan_tempo_id.city_id_pengiriman.id, + "kota_id": self.pengajuan_tempo_id.city_id_pengiriman.id, + "kecamatan_id": self.pengajuan_tempo_id.district_id_pengiriman.id, + "kelurahan_id": self.pengajuan_tempo_id.subDistrict_id_pengiriman.id, "zip": self.pengajuan_tempo_id.zip_pengiriman, }, { @@ -440,7 +498,10 @@ class UserPengajuanTempoRequest(models.Model): "name": self.pengajuan_tempo_id.invoice_pic, "street": self.pengajuan_tempo_id.street_invoice, "state_id": self.pengajuan_tempo_id.state_id_invoice.id, - "city": self.pengajuan_tempo_id.city_id_invoice.id, + "kota_id": self.pengajuan_tempo_id.city_id_invoice.id, + "kecamatan_id": self.pengajuan_tempo_id.district_id_invoice.id, + "kelurahan_id": self.pengajuan_tempo_id.subDistrict_id_invoice.id, + "zip": self.pengajuan_tempo_id.zip_invoice.id, }, ] @@ -456,11 +517,16 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.street_pengiriman = self.pengajuan_tempo_id.street_pengiriman self.user_company_id.state_id_pengiriman = self.pengajuan_tempo_id.state_id_pengiriman self.user_company_id.city_id_pengiriman = self.pengajuan_tempo_id.city_id_pengiriman + self.user_company_id.district_id_pengiriman = self.pengajuan_tempo_id.district_id_pengiriman + self.user_company_id.subDistrict_id_pengiriman = self.pengajuan_tempo_id.subDistrict_id_pengiriman self.user_company_id.zip_pengiriman = self.pengajuan_tempo_id.zip_pengiriman self.user_company_id.invoice_pic = self.pengajuan_tempo_id.invoice_pic self.user_company_id.street_invoice = self.pengajuan_tempo_id.street_invoice self.user_company_id.state_id_invoice = self.pengajuan_tempo_id.state_id_invoice self.user_company_id.city_id_invoice = self.pengajuan_tempo_id.city_id_invoice + self.user_company_id.district_id_invoice = self.pengajuan_tempo_id.district_id_invoice + self.user_company_id.subDistrict_id_invoice = self.pengajuan_tempo_id.subDistrict_id_invoice + self.user_company_id.zip_invoice = self.pengajuan_tempo_id.zip_invoice self.user_company_id.tukar_invoice = self.pengajuan_tempo_id.tukar_invoice self.user_company_id.jadwal_bayar = self.pengajuan_tempo_id.jadwal_bayar self.user_company_id.dokumen_pengiriman = self.pengajuan_tempo_id.dokumen_pengiriman @@ -471,10 +537,6 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.supplier_ids = self.pengajuan_tempo_id.supplier_ids # Dokumen - self.user_company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib[0] - if self.user_company_id.dokumen_nib: - self.user_company_id.message_post(body='Dokumen NIB', attachment_ids=[self.user_company_id.dokumen_nib.id]) - self.user_company_id.dokumen_npwp = self.pengajuan_tempo_id.dokumen_npwp[0] if self.user_company_id.dokumen_npwp: self.user_company_id.message_post(body='Dokumen NPWP', attachment_ids=[self.user_company_id.dokumen_npwp.id]) @@ -483,6 +545,26 @@ class UserPengajuanTempoRequest(models.Model): if self.user_company_id.dokumen_sppkp: self.user_company_id.message_post(body='Dokumen SPPKP', attachment_ids=[self.user_company_id.dokumen_sppkp.id]) + self.user_company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib[0] + if self.user_company_id.dokumen_nib: + self.user_company_id.message_post(body='Dokumen NIB', attachment_ids=[self.user_company_id.dokumen_nib.id]) + + self.user_company_id.dokumen_siup = self.pengajuan_tempo_id.dokumen_siup[0] + if self.user_company_id.dokumen_siup: + self.user_company_id.message_post(body='dokumen SIUP', attachment_ids=[self.user_company_id.dokumen_siup.id]) + + self.user_company_id.dokumen_tdp = self.pengajuan_tempo_id.dokumen_tdp[0] + if self.user_company_id.dokumen_tdp: + self.user_company_id.message_post(body='dokumen TDP', attachment_ids=[self.user_company_id.dokumen_tdp.id]) + + self.user_company_id.dokumen_skdp = self.pengajuan_tempo_id.dokumen_skdp[0] + if self.user_company_id.dokumen_skdp: + self.user_company_id.message_post(body='dokumen SKDP', attachment_ids=[self.user_company_id.dokumen_skdp.id]) + + self.user_company_id.dokumen_skt = self.pengajuan_tempo_id.dokumen_skt[0] + if self.user_company_id.dokumen_skt: + self.user_company_id.message_post(body='dokumen SKT', attachment_ids=[self.user_company_id.dokumen_skt.id]) + self.user_company_id.dokumen_akta_perubahan = self.pengajuan_tempo_id.dokumen_akta_perubahan[0] if self.pengajuan_tempo_id.dokumen_akta_perubahan else [] if self.user_company_id.dokumen_akta_perubahan: self.user_company_id.message_post(body='Dokumen Akta Perubahan', diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index 91298319..b1ec1d07 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -96,6 +96,7 @@ + @@ -129,6 +130,8 @@ + + @@ -136,6 +139,9 @@ + + + @@ -160,16 +166,20 @@ - + + + + + + + + - - - diff --git a/indoteknik_custom/views/user_pengajuan_tempo.xml b/indoteknik_custom/views/user_pengajuan_tempo.xml index a6360136..5b9e51cc 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo.xml @@ -14,12 +14,15 @@ + + + @@ -53,6 +56,8 @@ + + @@ -60,6 +65,9 @@ + + + @@ -84,16 +92,20 @@ - + + + + + + + + - - -
diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 25907a67..2d21ae6c 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -91,6 +91,8 @@ + + @@ -98,6 +100,9 @@ + + + @@ -119,17 +124,21 @@ - - + + + + + + + + + - - - @@ -252,7 +261,7 @@ Users: Company Tempo Approved - Pengajuan Tempo kamu di Indoteknik.com Telah Disetujui! + Pengajuan Tempo Anda di Indoteknik.com Telah Disetujui! "Indoteknik.com" <noreply@indoteknik.com> sales@indoteknik.com ${object.user_id.email | safe} @@ -285,15 +294,15 @@
- + - + - + -- cgit v1.2.3 From 5343cbd0bfceb6bd50dbbed55a1de4b116f5fef4 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 13 Dec 2024 15:53:20 +0700 Subject: update code --- indoteknik_custom/models/res_partner.py | 8 ++++---- indoteknik_custom/models/stock_picking.py | 13 +++++++++++++ indoteknik_custom/models/user_pengajuan_tempo_request.py | 2 +- indoteknik_custom/views/res_partner.xml | 8 ++++---- indoteknik_custom/views/stock_picking.xml | 2 ++ 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/indoteknik_custom/models/res_partner.py b/indoteknik_custom/models/res_partner.py index 93125bb9..57fab403 100644 --- a/indoteknik_custom/models/res_partner.py +++ b/indoteknik_custom/models/res_partner.py @@ -81,10 +81,10 @@ class ResPartner(models.Model): dokumen_npwp = fields.Many2one('ir.attachment', string="NPWP Perusahaan", tracking=3, readonly=True) dokumen_sppkp = fields.Many2one('ir.attachment', string="SPPKP Perusahaan", tracking=3, readonly=True) dokumen_nib = fields.Many2one('ir.attachment', string="NIB (SIUP/TDP/SKDP)", tracking=3, readonly=True,) - dokumen_siup = fields.Many2many('ir.attachment', 'pengajuan_dokumen_siup_rel', string="SIUP Perusahaan", tracking=True) - dokumen_tdp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_tdp_rel', string="TDP Perusahaan", tracking=True) - dokumen_skdp = fields.Many2many('ir.attachment', 'pengajuan_dokumen_skdp_rel', string="SKDP Perusahaan",tracking=True) - dokumen_skt = fields.Many2many('ir.attachment', 'pengajuan_dokumen_skt_rel', string="SKT Perusahaan", tracking=True) + dokumen_siup = fields.Many2one('ir.attachment', string="SIUP Perusahaan", tracking=3, readonly=True) + dokumen_tdp = fields.Many2one('ir.attachment', string="TDP Perusahaan", tracking=3, readonly=True) + dokumen_skdp = fields.Many2one('ir.attachment', string="SKDP Perusahaan",tracking=True, readonly=True) + dokumen_skt = fields.Many2one('ir.attachment', string="SKT Perusahaan", tracking=True, readonly=True) dokumen_akta_perubahan = fields.Many2one('ir.attachment', string="Akta Perubahan", tracking=3, readonly=True) dokumen_ktp_dirut = fields.Many2one('ir.attachment', string="KTP Dirut/Direktur", tracking=3, readonly=True) dokumen_akta_pendirian = fields.Many2one('ir.attachment', string="Akta Pendirian", tracking=3, readonly=True) diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index e6506a0b..e25704f4 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -115,6 +115,19 @@ class StockPicking(models.Model): ], string='Status Reserve', readonly=True, tracking=True, help="The current state of the stock picking.") notee = fields.Text(string="Note") + @api.model + def _compute_dokumen_tanda_terima(self): + for picking in self: + picking.dokumen_tanda_terima = picking.partner_id.dokumen_pengiriman + + @api.model + def _compute_dokumen_pengiriman(self): + for picking in self: + picking.dokumen_pengiriman = picking.partner_id.dokumen_pengiriman_input + + dokumen_tanda_terima = fields.Char(string='Dokumen Tanda Terima yang Diberikan Pada Saat Pengiriman Barang', readonly=True, compute=_compute_dokumen_tanda_terima) + dokumen_pengiriman = fields.Char(string='Dokumen yang Dibawa Saat Pengiriman Barang', readonly=True, compute=_compute_dokumen_pengiriman) + # Envio Tracking Section envio_id = fields.Char(string="Envio ID", readonly=True) envio_code = fields.Char(string="Envio Code", readonly=True) diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index c181ab68..707c8482 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -501,7 +501,7 @@ class UserPengajuanTempoRequest(models.Model): "kota_id": self.pengajuan_tempo_id.city_id_invoice.id, "kecamatan_id": self.pengajuan_tempo_id.district_id_invoice.id, "kelurahan_id": self.pengajuan_tempo_id.subDistrict_id_invoice.id, - "zip": self.pengajuan_tempo_id.zip_invoice.id, + "zip": self.pengajuan_tempo_id.zip_invoice, }, ] diff --git a/indoteknik_custom/views/res_partner.xml b/indoteknik_custom/views/res_partner.xml index b1ec1d07..96cfcd62 100644 --- a/indoteknik_custom/views/res_partner.xml +++ b/indoteknik_custom/views/res_partner.xml @@ -169,10 +169,10 @@ - - - - + + + + diff --git a/indoteknik_custom/views/stock_picking.xml b/indoteknik_custom/views/stock_picking.xml index 562be8d9..57291316 100644 --- a/indoteknik_custom/views/stock_picking.xml +++ b/indoteknik_custom/views/stock_picking.xml @@ -65,6 +65,8 @@ + + -- cgit v1.2.3 From 7a6542e7aab868a40eb83298b95d971e19acf15a Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 17 Dec 2024 13:16:20 +0700 Subject: update pengajuan tempo dokumen --- indoteknik_api/models/res_partner.py | 42 +++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py index 258d8143..0e09fbc6 100644 --- a/indoteknik_api/models/res_partner.py +++ b/indoteknik_api/models/res_partner.py @@ -1,5 +1,6 @@ from odoo import models import json +import base64 class ResPartner(models.Model): _inherit = 'res.partner' @@ -21,7 +22,6 @@ class ResPartner(models.Model): mapping_dokumen = {item[0]: item[1] for item in dokumen_kirim} dokumen_pengiriman_list = [dokumen.strip() for dokumen in pengajuan_tempo_dokumen_pengiriman.split(',')] dokumen_pengiriman = [mapping_dokumen.get(dokumen, '4') for dokumen in dokumen_pengiriman_list] - data = { 'name' : pengajuan_tempo.name_tempo.name, 'industry_id' : pengajuan_tempo.industry_id_tempo.id, @@ -93,65 +93,77 @@ class ResPartner(models.Model): } for supplier in pengajuan_tempo.supplier_ids ] if pengajuan_tempo.supplier_ids else '', - # Dokumen 'dokumen_npwp': { 'name': pengajuan_tempo.dokumen_npwp.name, - 'base64': pengajuan_tempo.dokumen_npwp.local_url, + 'base64': pengajuan_tempo.dokumen_npwp.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_npwp.mimetype, } if pengajuan_tempo.dokumen_npwp else '', 'dokumen_sppkp': { 'name': pengajuan_tempo.dokumen_sppkp.name, - 'base64': pengajuan_tempo.dokumen_sppkp.local_url, + 'base64': pengajuan_tempo.dokumen_sppkp.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_sppkp.mimetype, } if pengajuan_tempo.dokumen_sppkp else '', 'dokumen_nib': { 'name': pengajuan_tempo.dokumen_nib.name, - 'base64': pengajuan_tempo.dokumen_nib.local_url, + 'base64': pengajuan_tempo.dokumen_nib.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_nib.mimetype, }if pengajuan_tempo.dokumen_nib else '', 'dokumen_siup': { 'name': pengajuan_tempo.dokumen_siup.name, - 'base64': pengajuan_tempo.dokumen_siup.local_url, + 'base64': pengajuan_tempo.dokumen_siup.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_siup.mimetype, }if pengajuan_tempo.dokumen_siup else '', 'dokumen_tdp': { 'name': pengajuan_tempo.dokumen_tdp.name, - 'base64': pengajuan_tempo.dokumen_tdp.local_url, + 'base64': pengajuan_tempo.dokumen_tdp.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_tdp.mimetype, }if pengajuan_tempo.dokumen_tdp else '', 'dokumen_skdp': { 'name': pengajuan_tempo.dokumen_skdp.name, - 'base64': pengajuan_tempo.dokumen_skdp.local_url, + 'base64': pengajuan_tempo.dokumen_skdp.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_skdp.mimetype, }if pengajuan_tempo.dokumen_skdp else '', 'dokumen_skt': { 'name': pengajuan_tempo.dokumen_skt.name, - 'base64': pengajuan_tempo.dokumen_skt.local_url, + 'base64': pengajuan_tempo.dokumen_skt.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_skt.mimetype, }if pengajuan_tempo.dokumen_skt else '', 'dokumen_akta_perubahan': { 'name': pengajuan_tempo.dokumen_akta_perubahan.name, - 'base64': pengajuan_tempo.dokumen_akta_perubahan.local_url, + 'base64': pengajuan_tempo.dokumen_akta_perubahan.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_akta_perubahan.mimetype, } if pengajuan_tempo.dokumen_akta_perubahan else '', 'dokumen_ktp_dirut': { 'name': pengajuan_tempo.dokumen_ktp_dirut.name, - 'base64': pengajuan_tempo.dokumen_ktp_dirut.local_url, + 'base64': pengajuan_tempo.dokumen_ktp_dirut.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_ktp_dirut.mimetype, } if pengajuan_tempo.dokumen_ktp_dirut else '', 'dokumen_akta_pendirian': { 'name': pengajuan_tempo.dokumen_akta_pendirian.name, - 'base64': pengajuan_tempo.dokumen_akta_pendirian.local_url, + 'base64': pengajuan_tempo.dokumen_akta_pendirian.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_akta_pendirian.mimetype, } if pengajuan_tempo.dokumen_akta_pendirian else '', 'dokumen_laporan_keuangan': { 'name': pengajuan_tempo.dokumen_laporan_keuangan.name, - 'base64': pengajuan_tempo.dokumen_laporan_keuangan.local_url, + 'base64': pengajuan_tempo.dokumen_laporan_keuangan.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_laporan_keuangan.mimetype, } if pengajuan_tempo.dokumen_laporan_keuangan else '', 'dokumen_foto_kantor': { 'name': pengajuan_tempo.dokumen_foto_kantor.name, - 'base64': pengajuan_tempo.dokumen_foto_kantor.local_url, + 'base64': pengajuan_tempo.dokumen_foto_kantor.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_foto_kantor.mimetype, } if pengajuan_tempo.dokumen_foto_kantor else '', 'dokumen_tempat_bekerja': { 'name': pengajuan_tempo.dokumen_tempat_bekerja.name, - 'base64': pengajuan_tempo.dokumen_tempat_bekerja.local_url, + 'base64': pengajuan_tempo.dokumen_tempat_bekerja.datas.decode('utf-8'), + 'format': pengajuan_tempo.dokumen_tempat_bekerja.mimetype, } if pengajuan_tempo.dokumen_tempat_bekerja else '', } -- cgit v1.2.3 From 90ec56c6fc35b554ce8780b696d3321817bad93c Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Mon, 30 Dec 2024 11:37:21 +0700 Subject: ppn 12% --- indoteknik_custom/models/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 756c69cf..5b1c757b 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -1170,7 +1170,7 @@ class SaleOrder(models.Model): line_voucher = used_discount * line_contribution line_voucher_item = line_voucher / line.product_uom_qty - line_price_unit = line.price_unit / 1.12 if any(tax.id == 23 for tax in line.tax_id) else line.price_unit + line_price_unit = line.price_unit / 1.12 if any(tax.id == 217 for tax in line.tax_id) else line.price_unit line_discount_item = line_price_unit * line.discount / 100 + line_voucher_item line_voucher_item = line_discount_item / line_price_unit * 100 -- cgit v1.2.3 From 63a4c4aca3c3c1594ab72679b3cb44c873f5da5e Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Mon, 30 Dec 2024 11:47:39 +0700 Subject: ppn 12% --- indoteknik_api/models/product_product.py | 20 ++++++++++---------- indoteknik_custom/models/promotion/sale_order.py | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/indoteknik_api/models/product_product.py b/indoteknik_api/models/product_product.py index 386ddb6a..d7c0c66b 100644 --- a/indoteknik_api/models/product_product.py +++ b/indoteknik_api/models/product_product.py @@ -138,39 +138,39 @@ class ProductProduct(models.Model): return retValue def _get_website_price_exclude_tax(self): - default_divide_tax = float(1.11) + default_divide_tax = float(1.12) price_incl = self._get_website_price_include_tax() res = price_incl / default_divide_tax return math.floor(res) def _v2_get_website_price_exclude_tax(self): - default_divide_tax = float(1.11) + default_divide_tax = float(1.12) price_incl = self._v2_get_website_price_include_tax() res = price_incl / default_divide_tax return math.floor(res) def _get_website_price_after_disc_and_tax(self): - default_divide_tax = float(1.11) + default_divide_tax = float(1.12) price_after_disc = self._get_website_price_after_disc() res = price_after_disc / default_divide_tax res = math.ceil(res) return res def _v2_get_website_price_after_disc_and_tax(self): - default_divide_tax = float(1.11) + default_divide_tax = float(1.12) price_after_disc = self._v2_get_website_price_after_disc() res = price_after_disc / default_divide_tax res = math.ceil(res) return res def _get_website_tax(self): - default_percent_tax = float(11) + default_percent_tax = float(12) price_after_disc = self._get_website_price_after_disc_and_tax() res = price_after_disc * default_percent_tax / 100 return math.floor(res) def _v2_get_website_tax(self): - default_percent_tax = float(11) + default_percent_tax = float(12) price_after_disc = self._v2_get_website_price_after_disc_and_tax() res = price_after_disc * default_percent_tax / 100 return math.floor(res) @@ -228,7 +228,7 @@ class ProductProduct(models.Model): def _get_pricelist_tier(self, tier_number): config_param_name = f'product.pricelist.tier{tier_number}' product_pricelist_tier = int(self.env['ir.config_parameter'].get_param(config_param_name)) - default_divide_tax = float(1.11) + default_divide_tax = float(1.12) base_price = discount = price = 0 pricelist_item = self.env['product.pricelist.item'].search([ ('pricelist_id', '=', int(product_pricelist_tier)), @@ -272,12 +272,12 @@ class ProductProduct(models.Model): base_price = 0 if base_pricelist: base_price = base_pricelist.computed_price - # base_price = base_pricelist.computed_price / 1.11 + # base_price = base_pricelist.computed_price / 1.12 discount = 0 price_flashsale = 0 - default_divide_tax = float(1.11) - default_tax = float(11) + default_divide_tax = float(1.12) + default_tax = float(12) if item.price_discount > 0: discount = item.price_discount price_flashsale = base_price - (base_price * discount // 100) diff --git a/indoteknik_custom/models/promotion/sale_order.py b/indoteknik_custom/models/promotion/sale_order.py index be820c6f..f1cd777f 100644 --- a/indoteknik_custom/models/promotion/sale_order.py +++ b/indoteknik_custom/models/promotion/sale_order.py @@ -36,7 +36,7 @@ class SaleOrder(models.Model): else: all_products = self._merge_promotion_products(promotion) - promotion_price = promotion['price']['price_discount'] * line.quantity * 1.11 + promotion_price = promotion['price']['price_discount'] * line.quantity * 1.12 promotion_amt_total = sum(product['price']['price'] * product['qty'] for product in all_products) promotion_used_price = 0 -- cgit v1.2.3 From e90f1b5a714bc1a18073df18f7798d28cafab7c4 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Tue, 31 Dec 2024 09:13:28 +0700 Subject: ppn 12% --- indoteknik_api/controllers/api_v1/sale_order.py | 2 +- indoteknik_custom/models/requisition.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 3e182a2e..f8535199 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -394,7 +394,7 @@ class SaleOrder(controller.Controller): parameters = { 'warehouse_id': 8, 'carrier_id': 1, - 'sales_tax_id': 23, + 'sales_tax_id': 218, 'pricelist_id': user_pricelist or product_pricelist_default_discount_id, 'payment_term_id': 26, 'team_id': 2, diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 32a9f94f..780f3dde 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -159,7 +159,7 @@ class Requisition(models.Model): offset=i * PRODUCT_PER_PO, limit=PRODUCT_PER_PO ) - tax = [22] + tax = [220] for line in lines: product = line.product_id -- cgit v1.2.3 From c971e71a19426de6c210100e2e110319df81aafa Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 2 Jan 2025 14:21:51 +0700 Subject: update pengajuan tempo menu --- indoteknik_custom/views/user_company_request.xml | 18 +++++++++++------- .../views/user_pengajuan_tempo_request.xml | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/indoteknik_custom/views/user_company_request.xml b/indoteknik_custom/views/user_company_request.xml index 1c80e923..6d5642e6 100644 --- a/indoteknik_custom/views/user_company_request.xml +++ b/indoteknik_custom/views/user_company_request.xml @@ -54,12 +54,16 @@ user.company.request tree,form + - + \ No newline at end of file diff --git a/indoteknik_custom/views/user_pengajuan_tempo_request.xml b/indoteknik_custom/views/user_pengajuan_tempo_request.xml index 2d21ae6c..7ba87184 100644 --- a/indoteknik_custom/views/user_pengajuan_tempo_request.xml +++ b/indoteknik_custom/views/user_pengajuan_tempo_request.xml @@ -409,7 +409,7 @@ -- cgit v1.2.3 From 4e926be36ae06a1cf6f0d74151cf97ea4f542017 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Thu, 9 Jan 2025 08:54:09 +0700 Subject: update tempo --- indoteknik_api/controllers/api_v1/invoice.py | 25 ++++++++++++++++++++-- indoteknik_api/controllers/api_v1/partner.py | 24 +++++++++++++++++---- indoteknik_custom/models/user_pengajuan_tempo.py | 2 +- .../models/user_pengajuan_tempo_request.py | 14 ++++++------ 4 files changed, 51 insertions(+), 14 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/invoice.py b/indoteknik_api/controllers/api_v1/invoice.py index 4937e8dd..4bd3746c 100644 --- a/indoteknik_api/controllers/api_v1/invoice.py +++ b/indoteknik_api/controllers/api_v1/invoice.py @@ -1,7 +1,7 @@ from .. import controller from odoo import http from odoo.http import request - +from odoo import fields class Invoice(controller.Controller): PREFIX = '/api/v1/' @@ -15,6 +15,7 @@ class Invoice(controller.Controller): 'name': [], 'limit': ['default:0', 'number'], 'offset': ['default:0', 'number'], + 'status': [], }) limit = params['value']['limit'] offset = params['value']['offset'] @@ -27,6 +28,11 @@ class Invoice(controller.Controller): ('state', '=', 'posted'), ('partner_id', 'in', partner_child_ids) ] + domain_orders = [ + ('invoice_status', '!=', 'invoiced'), + ('state', '=', 'sale'), + ('partner_id', 'in', partner_child_ids) + ] if params['value']['name']: name = params['value']['name'].replace(' ', '%') domain += [ @@ -34,10 +40,25 @@ class Invoice(controller.Controller): ('name', 'ilike', '%'+ name +'%'), ('ref', 'ilike', '%'+ name +'%') ] + if params['value']['status']: + if params['value']['status'] == '1': + domain += [('payment_state', '=', 'not_paid'), ('invoice_date_due', '<', fields.Date.today())] + elif params['value']['status'] == '2': + domain += [('payment_state', '=', 'not_paid'), ('invoice_date_due', '>', fields.Date.today())] + elif params['value']['status'] == '3': + domain += [('payment_state', '=', 'paid')] + elif params['value']['status'] == '0': + domain = domain + elif params['value']['status'] == '4': + domain += [('payment_state', '=', 'not_paid')] + invoices = request.env['account.move'].search(domain, offset=offset, limit=limit) + sale_orders = request.env['sale.order'].search(domain_orders, offset=offset, limit=limit) data = { 'invoice_total': request.env['account.move'].search_count(domain), - 'invoices': [request.env['account.move'].api_v1_single_response(x) for x in invoices] + 'invoices': [request.env['account.move'].api_v1_single_response(x) for x in invoices], + 'sale_order_total': request.env['sale.order'].search_count(domain_orders), + 'sale_orders': [request.env['sale.order'].api_v1_single_response(x) for x in sale_orders] } return self.response(data) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index c0088d38..885cf3ec 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -1,7 +1,7 @@ from .. import controller from odoo import http from odoo.http import request - +from odoo import fields import json import base64 import mimetypes @@ -253,15 +253,31 @@ class Partner(controller.Controller): if any(line.days == 0 for line in partner.property_payment_term_id.line_ids): return self.response(code=402, description='Partner not tempo') - - result_tempo = sum(m.amount_total_signed for m in request.env['account.move'].search([('partner_id', '=', partner.id), ('payment_state', '=', 'not_paid'), ('state', '=', 'posted')])) - + + domain_result_tempo = [('partner_id', '=', partner.id), ('payment_state', '=', 'not_paid'), ('state', '=', 'posted')] + domain_result_jatuh_tempo = [('partner_id', '=', partner.id), ('payment_state', '=', 'not_paid'), ('state', '=', 'posted'), ('invoice_date_due', '<', fields.Date.today())] + domain_orders = [('partner_id', '=', partner.id), ('invoice_status', '!=', 'invoiced'), ('state', '=', 'sale')] + + result_tempo = sum(m.amount_total_signed for m in request.env['account.move'].search(domain_result_tempo)) + result_tempo_total = request.env['account.move'].search_count(domain_result_tempo) + result_jatuh_tempo = sum(m.amount_total_signed for m in request.env['account.move'].search(domain_result_jatuh_tempo)) + result_jatuh_tempo_total = request.env['account.move'].search_count(domain_result_jatuh_tempo) + orders = request.env['sale.order'].search(domain_orders) + orders_total = request.env['sale.order'].search_count(domain_orders) + + total_amount = sum(order.amount_total for order in orders) + remaining_limit = partner.blocking_stage - result_tempo if partner.active_limit else None data = { 'name': partner.name, 'payment_term': partner.property_payment_term_id.name, 'amount_due': result_tempo, + 'amount_due_total': result_tempo_total, + 'amount_jatuh_tempo_total': result_jatuh_tempo_total, + 'amount_jatuh_tempo': result_jatuh_tempo, + 'amount_due_sale': total_amount, + 'amount_due_sale_total': orders_total, 'remaining_limit': remaining_limit } diff --git a/indoteknik_custom/models/user_pengajuan_tempo.py b/indoteknik_custom/models/user_pengajuan_tempo.py index 3d8fcb4f..0fdcdbeb 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo.py +++ b/indoteknik_custom/models/user_pengajuan_tempo.py @@ -20,7 +20,7 @@ class UserPengajuanTempo(models.Model): partner_id = fields.Char() _description = 'User Pengajuan Tempo' - name = fields.Char(string='Name', required=True) + name = fields.Char(string='Name') # informasi perusahaan # name_tempo = fields.Many2one( diff --git a/indoteknik_custom/models/user_pengajuan_tempo_request.py b/indoteknik_custom/models/user_pengajuan_tempo_request.py index 707c8482..c237f417 100644 --- a/indoteknik_custom/models/user_pengajuan_tempo_request.py +++ b/indoteknik_custom/models/user_pengajuan_tempo_request.py @@ -537,31 +537,31 @@ class UserPengajuanTempoRequest(models.Model): self.user_company_id.supplier_ids = self.pengajuan_tempo_id.supplier_ids # Dokumen - self.user_company_id.dokumen_npwp = self.pengajuan_tempo_id.dokumen_npwp[0] + self.user_company_id.dokumen_npwp = self.pengajuan_tempo_id.dokumen_npwp[0] if self.pengajuan_tempo_id.dokumen_npwp else [] if self.user_company_id.dokumen_npwp: self.user_company_id.message_post(body='Dokumen NPWP', attachment_ids=[self.user_company_id.dokumen_npwp.id]) - self.user_company_id.dokumen_sppkp = self.pengajuan_tempo_id.dokumen_sppkp[0] + self.user_company_id.dokumen_sppkp = self.pengajuan_tempo_id.dokumen_sppkp[0] if self.pengajuan_tempo_id.dokumen_sppkp else [] if self.user_company_id.dokumen_sppkp: self.user_company_id.message_post(body='Dokumen SPPKP', attachment_ids=[self.user_company_id.dokumen_sppkp.id]) - self.user_company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib[0] + self.user_company_id.dokumen_nib = self.pengajuan_tempo_id.dokumen_nib[0] if self.pengajuan_tempo_id.dokumen_nib else [] if self.user_company_id.dokumen_nib: self.user_company_id.message_post(body='Dokumen NIB', attachment_ids=[self.user_company_id.dokumen_nib.id]) - self.user_company_id.dokumen_siup = self.pengajuan_tempo_id.dokumen_siup[0] + self.user_company_id.dokumen_siup = self.pengajuan_tempo_id.dokumen_siup[0] if self.pengajuan_tempo_id.dokumen_siup else [] if self.user_company_id.dokumen_siup: self.user_company_id.message_post(body='dokumen SIUP', attachment_ids=[self.user_company_id.dokumen_siup.id]) - self.user_company_id.dokumen_tdp = self.pengajuan_tempo_id.dokumen_tdp[0] + self.user_company_id.dokumen_tdp = self.pengajuan_tempo_id.dokumen_tdp[0] if self.pengajuan_tempo_id.dokumen_tdp else [] if self.user_company_id.dokumen_tdp: self.user_company_id.message_post(body='dokumen TDP', attachment_ids=[self.user_company_id.dokumen_tdp.id]) - self.user_company_id.dokumen_skdp = self.pengajuan_tempo_id.dokumen_skdp[0] + self.user_company_id.dokumen_skdp = self.pengajuan_tempo_id.dokumen_skdp[0] if self.pengajuan_tempo_id.dokumen_skdp else [] if self.user_company_id.dokumen_skdp: self.user_company_id.message_post(body='dokumen SKDP', attachment_ids=[self.user_company_id.dokumen_skdp.id]) - self.user_company_id.dokumen_skt = self.pengajuan_tempo_id.dokumen_skt[0] + self.user_company_id.dokumen_skt = self.pengajuan_tempo_id.dokumen_skt[0] if self.pengajuan_tempo_id.dokumen_skt else [] if self.user_company_id.dokumen_skt: self.user_company_id.message_post(body='dokumen SKT', attachment_ids=[self.user_company_id.dokumen_skt.id]) -- cgit v1.2.3 From 9f994de3f13f6be24d17233bf6890e6e88dd959b Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Fri, 10 Jan 2025 15:25:51 +0700 Subject: pengajuan tempo update --- indoteknik_api/models/res_users.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index d9329f67..2021b0bb 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -14,7 +14,7 @@ class ResUsers(models.Model): 'manager': 2, 'director': 3 } - partner_tempo = '' + partner_tempo = False is_tempo_request = request.env['user.pengajuan.tempo.request'].search([('user_company_id', '=', main_partner.id)], limit=1) tempo_progres = ( 'review' if is_tempo_request.state_tempo in ('draft', 'approval_sales', 'approval_finance') else @@ -22,7 +22,7 @@ class ResUsers(models.Model): 'approve' if is_tempo_request.state_tempo == 'approval_director' else '' ) if main_partner: - partner_tempo = main_partner.get_check_payment_term() + partner_tempo = True if 'tempo' in main_partner.get_check_payment_term().lower() else False data = { 'id': res_user.id, -- cgit v1.2.3 From 7c6f97ba1b4e8fb54204697a3835bcb78a1ddc6b Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Mon, 13 Jan 2025 15:25:44 +0700 Subject: udpate other id --- indoteknik_custom/models/coretax_fatur.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/coretax_fatur.py b/indoteknik_custom/models/coretax_fatur.py index 74f9c8b7..d8b9dc72 100644 --- a/indoteknik_custom/models/coretax_fatur.py +++ b/indoteknik_custom/models/coretax_fatur.py @@ -61,7 +61,7 @@ class CoretaxFaktur(models.Model): ET.SubElement(tax_invoice, 'FacilityStamp') ET.SubElement(tax_invoice, 'SellerIDTKU').text = '0742260227086000000000' ET.SubElement(tax_invoice, 'BuyerTin').text = buyerTIN - ET.SubElement(tax_invoice, 'BuyerDocument').text = 'TIN' if invoice.partner_id.npwp else 'Other ID' + ET.SubElement(tax_invoice, 'BuyerDocument').text = 'TIN' if sum(int(char) for char in buyerTIN) > 0 else 'Other ID' ET.SubElement(tax_invoice, 'BuyerCountry').text = 'IDN' ET.SubElement(tax_invoice, 'BuyerDocumentNumber').text = '-' ET.SubElement(tax_invoice, 'BuyerName').text = invoice.partner_id.nama_wajib_pajak or '' -- cgit v1.2.3 From efefae8a0bdb05f36e0aeee9d06927a55fe648a6 Mon Sep 17 00:00:00 2001 From: trisusilo48 Date: Mon, 13 Jan 2025 15:41:04 +0700 Subject: udpate buyer doc number --- indoteknik_custom/models/coretax_fatur.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indoteknik_custom/models/coretax_fatur.py b/indoteknik_custom/models/coretax_fatur.py index d8b9dc72..ff8606b1 100644 --- a/indoteknik_custom/models/coretax_fatur.py +++ b/indoteknik_custom/models/coretax_fatur.py @@ -63,7 +63,7 @@ class CoretaxFaktur(models.Model): ET.SubElement(tax_invoice, 'BuyerTin').text = buyerTIN ET.SubElement(tax_invoice, 'BuyerDocument').text = 'TIN' if sum(int(char) for char in buyerTIN) > 0 else 'Other ID' ET.SubElement(tax_invoice, 'BuyerCountry').text = 'IDN' - ET.SubElement(tax_invoice, 'BuyerDocumentNumber').text = '-' + ET.SubElement(tax_invoice, 'BuyerDocumentNumber').text = str(invoice.partner_id.id) ET.SubElement(tax_invoice, 'BuyerName').text = invoice.partner_id.nama_wajib_pajak or '' ET.SubElement(tax_invoice, 'BuyerAdress').text = invoice.partner_id.alamat_lengkap_text or '' ET.SubElement(tax_invoice, 'BuyerEmail').text = invoice.partner_id.email or '' -- cgit v1.2.3 From 262013945e9729f9cea9a17f2060ec607bc42b64 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Tue, 14 Jan 2025 08:30:38 +0700 Subject: hapus ppn 12% dari branch --- indoteknik_api/controllers/api_v1/sale_order.py | 2 +- indoteknik_api/models/product_product.py | 8 ++++---- indoteknik_custom/models/logbook_bill.py | 2 +- indoteknik_custom/models/promotion/sale_order.py | 2 +- indoteknik_custom/models/purchase_pricelist.py | 4 ++-- indoteknik_custom/models/requisition.py | 2 +- indoteknik_custom/models/sale_order.py | 10 +++++----- indoteknik_custom/models/sale_order_line.py | 6 +++--- indoteknik_custom/models/stock_move.py | 2 +- indoteknik_custom/models/website_user_cart.py | 6 +++--- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index f972fd46..8b95ade8 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -398,7 +398,7 @@ class SaleOrder(controller.Controller): parameters = { 'warehouse_id': 8, 'carrier_id': 1, - 'sales_tax_id': 218, + 'sales_tax_id': 23, 'pricelist_id': user_pricelist or product_pricelist_default_discount_id, 'payment_term_id': 26, 'team_id': 2, diff --git a/indoteknik_api/models/product_product.py b/indoteknik_api/models/product_product.py index d7e20ac3..10922186 100644 --- a/indoteknik_api/models/product_product.py +++ b/indoteknik_api/models/product_product.py @@ -229,7 +229,7 @@ class ProductProduct(models.Model): def _get_pricelist_tier(self, tier_number): config_param_name = f'product.pricelist.tier{tier_number}' product_pricelist_tier = int(self.env['ir.config_parameter'].get_param(config_param_name)) - default_divide_tax = float(1.12) + default_divide_tax = float(1.11) base_price = discount = price = 0 pricelist_item = self.env['product.pricelist.item'].search([ ('pricelist_id', '=', int(product_pricelist_tier)), @@ -273,12 +273,12 @@ class ProductProduct(models.Model): base_price = 0 if base_pricelist: base_price = base_pricelist.computed_price - # base_price = base_pricelist.computed_price / 1.12 + # base_price = base_pricelist.computed_price / 1.11 discount = 0 price_flashsale = 0 - default_divide_tax = float(1.12) - default_tax = float(12) + default_divide_tax = float(1.11) + default_tax = float(11) if item.price_discount > 0: discount = item.price_discount price_flashsale = base_price - (base_price * discount // 100) diff --git a/indoteknik_custom/models/logbook_bill.py b/indoteknik_custom/models/logbook_bill.py index 3c33aeb7..bb956092 100644 --- a/indoteknik_custom/models/logbook_bill.py +++ b/indoteknik_custom/models/logbook_bill.py @@ -22,7 +22,7 @@ class LogbookBill(models.TransientModel): ('product_id', '=', line.product_id.id), ], order='id desc', limit=1) total += line.quantity_done * po.price_unit - total_with_tax = total * 1.12 + total_with_tax = total * 1.11 return total_with_tax diff --git a/indoteknik_custom/models/promotion/sale_order.py b/indoteknik_custom/models/promotion/sale_order.py index 6cb56914..1c31d060 100644 --- a/indoteknik_custom/models/promotion/sale_order.py +++ b/indoteknik_custom/models/promotion/sale_order.py @@ -37,7 +37,7 @@ class SaleOrder(models.Model): else: all_products = self._merge_promotion_products(promotion) - promotion_price = promotion['price']['price_discount'] * line.quantity * 1.12 + promotion_price = promotion['price']['price_discount'] * line.quantity * 1.11 promotion_amt_total = sum(product['price']['price'] * product['qty'] for product in all_products) promotion_used_price = 0 diff --git a/indoteknik_custom/models/purchase_pricelist.py b/indoteknik_custom/models/purchase_pricelist.py index c543070a..e5b35d7f 100755 --- a/indoteknik_custom/models/purchase_pricelist.py +++ b/indoteknik_custom/models/purchase_pricelist.py @@ -48,9 +48,9 @@ class PurchasePricelist(models.Model): def _constrains_include_price(self): price, taxes = self._get_valid_price() - # When have tax is excluded or empty tax, then multiply by 1.12 + # When have tax is excluded or empty tax, then multiply by 1.11 if (taxes and not taxes.price_include) or not taxes: - price *= 1.12 + price *= 1.11 self.include_price = price diff --git a/indoteknik_custom/models/requisition.py b/indoteknik_custom/models/requisition.py index 78cdf80d..c972b485 100644 --- a/indoteknik_custom/models/requisition.py +++ b/indoteknik_custom/models/requisition.py @@ -159,7 +159,7 @@ class Requisition(models.Model): offset=i * PRODUCT_PER_PO, limit=PRODUCT_PER_PO ) - tax = [220] + tax = [22] for line in lines: product = line.product_id diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 2ef1f43d..7b2d9bf8 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -1218,7 +1218,7 @@ class SaleOrder(models.Model): line_voucher = used_discount * line_contribution line_voucher_item = line_voucher / line.product_uom_qty - line_price_unit = line.price_unit / 1.12 if any(tax.id == 217 for tax in line.tax_id) else line.price_unit + line_price_unit = line.price_unit / 1.11 if any(tax.id == 23 for tax in line.tax_id) else line.price_unit line_discount_item = line_price_unit * line.discount / 100 + line_voucher_item line_voucher_item = line_discount_item / line_price_unit * 100 @@ -1331,13 +1331,13 @@ class SaleOrder(models.Model): if last_so and rec_purchase_price != last_so.purchase_price: rec_taxes = self.env['account.tax'].search([('id', '=', rec_taxes_id)], limit=1) if rec_taxes.price_include: - selling_price = (rec_purchase_price / 1.12) / (1 - (last_so.item_percent_margin_without_deduction / 100)) + selling_price = (rec_purchase_price / 1.11) / (1 - (last_so.item_percent_margin_without_deduction / 100)) else: selling_price = rec_purchase_price / (1 - (last_so.item_percent_margin_without_deduction / 100)) tax_id = last_so.tax_id for tax in tax_id: if tax.price_include: - selling_price = selling_price + (selling_price*12/100) + selling_price = selling_price + (selling_price*11/100) else: selling_price = selling_price discount = 0 @@ -1353,13 +1353,13 @@ class SaleOrder(models.Model): elif last_so and rec_vendor_id == order_line.vendor_id.id and rec_purchase_price != last_so.purchase_price: rec_taxes = self.env['account.tax'].search([('id', '=', rec_taxes_id)], limit=1) if rec_taxes.price_include: - selling_price = (rec_purchase_price / 1.12) / (1 - (last_so.item_percent_margin_without_deduction / 100)) + selling_price = (rec_purchase_price / 1.11) / (1 - (last_so.item_percent_margin_without_deduction / 100)) else: selling_price = rec_purchase_price / (1 - (last_so.item_percent_margin_without_deduction / 100)) tax_id = last_so.tax_id for tax in tax_id: if tax.price_include: - selling_price = selling_price + (selling_price*12/100) + selling_price = selling_price + (selling_price*11/100) else: selling_price = selling_price discount = 0 diff --git a/indoteknik_custom/models/sale_order_line.py b/indoteknik_custom/models/sale_order_line.py index 5b990ed0..29a046fa 100644 --- a/indoteknik_custom/models/sale_order_line.py +++ b/indoteknik_custom/models/sale_order_line.py @@ -104,7 +104,7 @@ class SaleOrderLine(models.Model): purchase_price = line.purchase_price if line.purchase_tax_id.price_include: - purchase_price = line.purchase_price / 1.12 + purchase_price = line.purchase_price / 1.11 purchase_price = purchase_price * line.product_uom_qty margin_per_item = sales_price - purchase_price @@ -132,7 +132,7 @@ class SaleOrderLine(models.Model): purchase_price = line.purchase_price if line.purchase_tax_id.price_include: - purchase_price = line.purchase_price / 1.12 + purchase_price = line.purchase_price / 1.11 purchase_price = purchase_price * line.product_uom_qty margin_per_item = sales_price - purchase_price @@ -183,7 +183,7 @@ class SaleOrderLine(models.Model): # # tax_id = last_so.tax_id # if rec_vendor_id == self.vendor_id and rec_purchase_price != last_so.purchase_price: # if rec_taxes.price_include: - # selling_price = (rec_purchase_price/1.12) / (1-(last_so.line_item_margin / 100)) + # selling_price = (rec_purchase_price/1.11) / (1-(last_so.line_item_margin / 100)) # else: # selling_price = rec_purchase_price / (1-(last_so.line_item_margin / 100)) # tax_id = last_so.tax_id diff --git a/indoteknik_custom/models/stock_move.py b/indoteknik_custom/models/stock_move.py index c0ac341c..e1d4e74c 100644 --- a/indoteknik_custom/models/stock_move.py +++ b/indoteknik_custom/models/stock_move.py @@ -112,7 +112,7 @@ class StockMove(models.Model): # 440 is static id for "PPN Keluaran" on account.account model debit_account_id = self.picking_id.account_id.id if self.picking_id.account_id.id else 538 - tax = cost * (12 / 100) + tax = cost * (11 / 100) move_lines = self._prepare_account_move_line(qty, cost, credit_account_id, debit_account_id, description) move_lines += self._prepare_account_move_line(qty, tax, 440, debit_account_id, description) diff --git a/indoteknik_custom/models/website_user_cart.py b/indoteknik_custom/models/website_user_cart.py index 8da716a1..44393cf1 100644 --- a/indoteknik_custom/models/website_user_cart.py +++ b/indoteknik_custom/models/website_user_cart.py @@ -163,7 +163,7 @@ class WebsiteUserCart(models.Model): voucher_shipping_info = voucher_shipping.apply(order_line) discount_voucher_shipping = voucher_shipping_info['discount']['all'] - tax = round(subtotal * 0.12) + tax = round(subtotal * 0.11) grand_total = subtotal + tax total_weight = sum(x['weight'] * x['quantity'] for x in products) total_weight = round(total_weight, 2) @@ -240,7 +240,7 @@ class WebsiteUserCart(models.Model): total_voucher += voucher_product if total_discount > 0: - ppn = total_discount * 0.12 + ppn = total_discount * 0.11 return { 'total_discount': self.format_currency(total_discount), 'total_voucher': self.format_currency(total_voucher), @@ -352,7 +352,7 @@ class WebsiteUserCart(models.Model): discounted_price = fixed_price - (fixed_price * discount / 100) - final_price = discounted_price / 1.12 + final_price = discounted_price / 1.11 return { 'price': final_price, -- cgit v1.2.3
Hai. ${object.pengajuan_tempo_id.name_tempo.name},
Kabar baik! Kami dengan senang hati menginformasikan bahwa pengajuan tempo pembayaran kamu di Indoteknik.com telah disetujui dengan detail sebagai berikut.
Kabar baik! Kami dengan senang hati menginformasikan bahwa pengajuan tempo pembayaran anda di Indoteknik.com telah disetujui dengan detail sebagai berikut.
Limit Pembayaran Tempo : Rp ${object.format_currency(object.user_id.tempo_limit)}
Durasi Pembayaran Tempo : ${object.user_id.tempo_duration.name}
Kamu dapat melakukan pembayaran sesuai dengan jangka waktu yang telah disepakati. Detail lengkap mengenai transaksi kamu, termasuk tanggal jatuh tempo & Pengajuan Kenaikan Limit Tempo, dapat kamu lihat di akun Profile Indoteknik.com .Anda dapat melakukan pembayaran sesuai dengan jangka waktu yang telah disepakati. Detail lengkap mengenai transaksi anda, termasuk tanggal jatuh tempo & Pengajuan Kenaikan Limit Tempo, dapat anda lihat di akun Profile Indoteknik.com .
Terima kasih atas kepercayaan kamu kepada Indoteknik.com.
Terima kasih atas kepercayaan anda kepada Indoteknik.com.
Hormat kami,
PT. INDOTEKNIK DOTCOM GEMILANG