diff options
| author | AndriFP <andrifebriyadiputra@gmail.com> | 2025-04-22 12:28:04 +0700 |
|---|---|---|
| committer | AndriFP <andrifebriyadiputra@gmail.com> | 2025-04-22 12:28:04 +0700 |
| commit | 2f16e84dcceec98e3dd49cbbbf57457d00989a04 (patch) | |
| tree | 3c43b3efe7aac4d1fa94ef27c24155106fbc650f | |
| parent | 06dfcab31167bfcd99272e2e0a5d2df13377f9ad (diff) | |
(miqdad) add xpdc
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 79 | ||||
| -rwxr-xr-x | indoteknik_custom/views/sale_order.xml | 706 |
2 files changed, 434 insertions, 351 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 92581678..2061c686 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -67,6 +67,17 @@ class ShippingOption(models.Model): class SaleOrder(models.Model): _inherit = "sale.order" + ongkir_ke_xpdc = fields.Float(string='Ongkir ke Ekspedisi', help='Biaya ongkir ekspedisi', copy=False, index=True, tracking=3) + + metode_kirim_ke_xpdc = fields.Selection([ + ('indoteknik_deliv', 'Indoteknik Delivery'), + ('lalamove', 'Lalamove'), + ('grab', 'Grab'), + ('gojek', 'Gojek'), + ('deliveree', 'Deliveree'), + ('other', 'Other'), + ], string='Metode Kirim Ke Ekspedisi', copy=False, index=True, tracking=3) + koli_lines = fields.One2many('sales.order.koli', 'sale_order_id', string='Sales Order Koli', auto_join=True) fulfillment_line_v2 = fields.One2many('sales.order.fulfillment.v2', 'sale_order_id', string='Fullfillment2') fullfillment_line = fields.One2many('sales.order.fullfillment', 'sales_order_id', string='Fullfillment') @@ -315,17 +326,7 @@ class SaleOrder(models.Model): "sale_order_id": self.id, }) self.shipping_option_id = shipping_option.id - self.message_post( - body=( - f"<b>Estimasi pengiriman Indoteknik berhasil:</b><br/>" - f"Layanan: {shipping_option.name}<br/>" - f"ETD: {shipping_option.etd}<br/>" - f"Biaya: Rp {shipping_option.price:,}<br/>" - f"Provider: {shipping_option.provider}" - ), - message_type="comment", - ) - + def action_estimate_shipping(self): if self.carrier_id.id in [1, 151]: self.action_indoteknik_estimate_shipping() @@ -364,8 +365,6 @@ class SaleOrder(models.Model): shipping_options.append((service, description, etd, value, courier['code'])) self.env["shipping.option"].search([('sale_order_id', '=', self.id)]).unlink() - - _logger.info(f"Shipping options: {shipping_options}") for service, description, etd, value, provider in shipping_options: self.env["shipping.option"].create({ @@ -375,23 +374,12 @@ class SaleOrder(models.Model): "etd": etd, "sale_order_id": self.id, }) - self.shipping_option_id = self.env["shipping.option"].search([('sale_order_id', '=', self.id)], limit=1).id - _logger.info(f"Shipping option SO ID: {self.shipping_option_id}") - - self.message_post( - body=f"Estimasi Ongkos Kirim: Rp{self.delivery_amt}<br/>Detail Lain:<br/>" - f"{'<br/>'.join([f'Service: {s[0]}, Description: {s[1]}, ETD: {s[2]} hari, Cost: Rp {s[3]}' for s in shipping_options])}", - message_type="comment" - ) - - # self.message_post(body=f"Estimasi Ongkos Kirim: Rp{self.delivery_amt}<br/>Detail Lain:<br/>{'<br/>'.join([f'Service: {s[0]}, Description: {s[1]}, ETD: {s[2]} hari, Cost: Rp {s[3]}' for s in shipping_options])}", message_type="comment") - + self.message_post(body=f"Estimasi Ongkos Kirim: Rp{self.delivery_amt}<br/>Detail Lain:<br/>{'<br/>'.join([f'Service: {s[0]}, Description: {s[1]}, ETD: {s[2]} hari, Cost: Rp {s[3]}' for s in shipping_options])}") else: raise UserError("Gagal mendapatkan estimasi ongkir.") - def _call_rajaongkir_api(self, total_weight, destination_subsdistrict_id): url = 'https://pro.rajaongkir.com/api/cost' @@ -495,7 +483,7 @@ class SaleOrder(models.Model): def _compute_date_kirim(self): for rec in self: - picking = self.env['stock.picking'].search([('sale_id', '=', rec.id), ('state', 'not in', ['cancel'])], order='date_doc_kirim desc', limit=1) + picking = self.env['stock.picking'].search([('sale_id', '=', rec.id), ('state', 'not in', ['cancel']), ('name', 'not ilike', 'BU/PICK/%')], order='date_doc_kirim desc', limit=1) rec.date_kirim_ril = picking.date_doc_kirim rec.date_status_done = picking.date_done rec.date_driver_arrival = picking.driver_arrival_date @@ -694,30 +682,12 @@ class SaleOrder(models.Model): # @api.constrains('delivery_amt', 'carrier_id', 'shipping_cost_covered') def _validate_delivery_amt(self): - is_indoteknik = self.carrier_id.id == 1 or self.shipping_cost_covered == 'indoteknik' - is_active_id = not self.env.context.get('active_id', []) - - if is_indoteknik and is_active_id: - if self.delivery_amt == 0: - if self.carrier_id.id == 1: - raise UserError('Untuk Kurir Indoteknik Delivery, estimasi ongkos kirim belum diisi.') - else: - raise UserError('Untuk Shipping Covered Indoteknik, estimasi ongkos kirim belum diisi.') - - if self.delivery_amt < 5000: - if self.carrier_id.id == 1: - raise UserError('Untuk Kurir Indoteknik Delivery, estimasi ongkos kirim belum memenuhi tarif minimum.') + if self.delivery_amt < 1: + if(self.carrier_id.id == 1 or self.shipping_cost_covered == 'indoteknik') and not self.env.context.get('active_id', []): + if(self.carrier_id.id == 1): + raise UserError('Untuk Kurir Indoteknik Delivery, Estimasi Ongkos Kirim Harus di isi') else: - raise UserError('Untuk Shipping Covered Indoteknik, estimasi ongkos kirim belum memenuhi tarif minimum.') - - - # if self.delivery_amt < 5000: - # if (self.carrier_id.id == 1 or self.shipping_cost_covered == 'indoteknik') and not self.env.context.get('active_id', []): - # if self.carrier_id.id == 1: - # raise UserError('Untuk Kurir Indoteknik Delivery, estimasi ongkos kirim belum memenuhi jumlah minimum.') - # else: - # raise UserError('Untuk Shipping Covered Indoteknik, estimasi ongkos kirim belum memenuhi jumlah minimum.') - + raise UserError('Untuk Shipping Covered Indoteknik, Estimasi Ongkos Kirim Harus di isi') def override_allow_create_invoice(self): if not self.env.user.is_accounting: @@ -1467,12 +1437,21 @@ class SaleOrder(models.Model): # partner.npwp = self.npwp # partner.sppkp = self.sppkp # partner.email = self.email - + def _compute_total_margin(self): for order in self: total_margin = sum(line.item_margin for line in order.order_line if line.product_id) + #hitung nek onk + if order.ongkir_ke_xpdc: + total_margin -= order.ongkir_ke_xpdc + order.total_margin = total_margin + # def _compute_total_margin(self): + # for order in self: + # total_margin = sum(line.item_margin for line in order.order_line if line.product_id) + # order.total_margin = total_margin + def _compute_total_percent_margin(self): for order in self: if order.amount_untaxed == 0: diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index f1b72af3..79a095fb 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -1,181 +1,214 @@ -<?xml version="1.0" encoding="UTF-8" ?> +<?xml version="1.0" encoding="UTF-8"?> <odoo> <data> <record id="sale_order_form_view_inherit" model="ir.ui.view"> <field name="name">Sale Order</field> <field name="model">sale.order</field> - <field name="inherit_id" ref="sale.view_order_form"/> + <field name="inherit_id" ref="sale.view_order_form" /> <field name="arch" type="xml"> <button id="action_confirm" position="after"> <button name="calculate_line_no" - string="Create No" - type="object" + string="Create No" + type="object" /> <button name="sale_order_approve" - string="Ask Approval" - type="object" - attrs="{'invisible': [('approval_status', '=', ['approved'])]}" + string="Ask Approval" + type="object" + attrs="{'invisible': [('approval_status', '=', ['approved'])]}" /> <button name="action_web_approve" - string="Web Approve" - type="object" - attrs="{'invisible': ['|', '|', ('create_uid', '!=', 25), ('web_approval', '!=', False), ('state', '!=', 'draft')]}" + string="Web Approve" + type="object" + attrs="{'invisible': ['|', '|', ('create_uid', '!=', 25), ('web_approval', '!=', False), ('state', '!=', 'draft')]}" /> - <button name="indoteknik_custom.action_view_uangmuka_penjualan" string="UangMuka" - type="action" attrs="{'invisible': [('approval_status', '!=', 'approved')]}"/> + <button name="indoteknik_custom.action_view_uangmuka_penjualan" + string="UangMuka" + type="action" attrs="{'invisible': [('approval_status', '!=', 'approved')]}" /> </button> <field name="payment_term_id" position="after"> - <field name="create_uid" invisible="1"/> - <field name="create_date" invisible="1"/> - <field name="shipping_cost_covered" attrs="{'required': ['|', ('create_date', '>', '2023-06-15'), ('create_date', '=', False)]}"/> - <field name="shipping_paid_by" attrs="{'required': ['|', ('create_date', '>', '2023-06-15'), ('create_date', '=', False)]}"/> - <field name="delivery_amt"/> - <field name="fee_third_party"/> - <field name="biaya_lain_lain"/> - <field name="total_percent_margin"/> - <field name="total_margin_excl_third_party" readonly="1"/> - <field name="type_promotion"/> - <label for="voucher_id"/> + <field name="create_uid" invisible="1" /> + <field name="create_date" invisible="1" /> + <field name="shipping_cost_covered" + attrs="{'required': ['|', ('create_date', '>', '2023-06-15'), ('create_date', '=', False)]}" /> + <field name="shipping_paid_by" + attrs="{'required': ['|', ('create_date', '>', '2023-06-15'), ('create_date', '=', False)]}" /> + <field name="delivery_amt" /> + <field name="ongkir_ke_xpdc" /> + <field name="metode_kirim_ke_xpdc" /> + <field name="fee_third_party" /> + <field name="biaya_lain_lain" /> + <field name="total_percent_margin" /> + <field name="total_margin_excl_third_party" readonly="1" /> + <field name="type_promotion" /> + <label for="voucher_id" /> <div class="o_row"> - <field name="voucher_id" id="voucher_id" attrs="{'readonly': ['|', ('state', 'not in', ['draft', 'sent']), ('applied_voucher_id', '!=', False)]}"/> + <field name="voucher_id" id="voucher_id" + attrs="{'readonly': ['|', ('state', 'not in', ['draft', 'sent']), ('applied_voucher_id', '!=', False)]}" /> <field name="applied_voucher_id" invisible="1" /> - <button name="action_apply_voucher" type="object" string="Apply" confirm="Anda yakin untuk menggunakan voucher?" help="Apply the selected voucher" class="btn-link mb-1 px-0" icon="fa-plus" + <button name="action_apply_voucher" type="object" string="Apply" + confirm="Anda yakin untuk menggunakan voucher?" + help="Apply the selected voucher" class="btn-link mb-1 px-0" + icon="fa-plus" attrs="{'invisible': ['|', '|', ('voucher_id', '=', False), ('state', 'not in', ['draft', 'sent']), ('applied_voucher_id', '!=', False)]}" /> - <button name="cancel_voucher" type="object" string="Cancel" confirm="Anda yakin untuk membatalkan penggunaan voucher?" help="Cancel applied voucher" class="btn-link mb-1 px-0" icon="fa-times" + <button name="cancel_voucher" type="object" string="Cancel" + confirm="Anda yakin untuk membatalkan penggunaan voucher?" + help="Cancel applied voucher" class="btn-link mb-1 px-0" icon="fa-times" attrs="{'invisible': ['|', ('applied_voucher_id', '=', False), ('state', 'not in', ['draft','sent'])]}" /> </div> - <label for="voucher_shipping_id"/> + <label for="voucher_shipping_id" /> <div class="o_row"> - <field name="voucher_shipping_id" id="voucher_shipping_id" attrs="{'readonly': ['|', ('state', 'not in', ['draft', 'sent']), ('applied_voucher_shipping_id', '!=', False)]}"/> + <field name="voucher_shipping_id" id="voucher_shipping_id" + attrs="{'readonly': ['|', ('state', 'not in', ['draft', 'sent']), ('applied_voucher_shipping_id', '!=', False)]}" /> <field name="applied_voucher_shipping_id" invisible="1" /> - <button name="action_apply_voucher_shipping" type="object" string="Apply" confirm="Anda yakin untuk menggunakan voucher?" help="Apply the selected voucher" class="btn-link mb-1 px-0" icon="fa-plus" + <button name="action_apply_voucher_shipping" type="object" string="Apply" + confirm="Anda yakin untuk menggunakan voucher?" + help="Apply the selected voucher" class="btn-link mb-1 px-0" + icon="fa-plus" attrs="{'invisible': ['|', '|', ('voucher_id', '=', False), ('state', 'not in', ['draft', 'sent']), ('applied_voucher_shipping_id', '!=', False)]}" /> - <button name="cancel_voucher_shipping" type="object" string="Cancel" confirm="Anda yakin untuk membatalkan penggunaan voucher?" help="Cancel applied voucher" class="btn-link mb-1 px-0" icon="fa-times" + <button name="cancel_voucher_shipping" type="object" string="Cancel" + confirm="Anda yakin untuk membatalkan penggunaan voucher?" + help="Cancel applied voucher" class="btn-link mb-1 px-0" icon="fa-times" attrs="{'invisible': ['|', ('applied_voucher_shipping_id', '=', False), ('state', 'not in', ['draft','sent'])]}" /> </div> <button name="calculate_selling_price" - string="Calculate Selling Price" - type="object" + string="Calculate Selling Price" + type="object" /> </field> <field name="source_id" position="attributes"> <attribute name="invisible">1</attribute> </field> <field name="user_id" position="after"> - <field name="helper_by_id" readonly="1"/> - <field name="compute_fullfillment" invisible="1"/> + <field name="helper_by_id" readonly="1" /> + <field name="compute_fullfillment" invisible="1" /> </field> <field name="tag_ids" position="after"> - <field name="eta_date_start"/> - <t t-esc="' to '"/> - <field name="eta_date" readonly="1"/> + <field name="eta_date_start" /> + <t t-esc="' to '" /> + <field name="eta_date" readonly="1" /> <field name="expected_ready_to_ship" /> - <field name="flash_sale"/> - <field name="margin_after_delivery_purchase"/> - <field name="percent_margin_after_delivery_purchase"/> - <field name="total_weight"/> - <field name="pareto_status"/> + <field name="flash_sale" /> + <field name="margin_after_delivery_purchase" /> + <field name="percent_margin_after_delivery_purchase" /> + <field name="total_weight" /> + <field name="pareto_status" /> </field> <field name="analytic_account_id" position="after"> - <field name="customer_type" required="1"/> - <field name="npwp" placeholder='99.999.999.9-999.999' required="1"/> - <field name="sppkp" attrs="{'required': [('customer_type', '=', 'pkp')]}"/> - <field name="email" required="1"/> - <field name="unreserve_id"/> - <field name="due_id" readonly="1"/> - <field name="vendor_approval_id" readonly="1" widget="many2many_tags"/> - <field name="source_id" domain="[('id', 'in', [32, 59, 60, 61])]" required="1"/> + <field name="customer_type" required="1" /> + <field name="npwp" placeholder='99.999.999.9-999.999' required="1" /> + <field name="sppkp" attrs="{'required': [('customer_type', '=', 'pkp')]}" /> + <field name="email" required="1" /> + <field name="unreserve_id" /> + <field name="due_id" readonly="1" /> + <field name="vendor_approval_id" readonly="1" widget="many2many_tags" /> + <field name="source_id" domain="[('id', 'in', [32, 59, 60, 61])]" required="1" /> <button name="override_allow_create_invoice" - string="Override Create Invoice" - type="object" + string="Override Create Invoice" + type="object" /> - <button string="Estimate Shipping" type="object" name="action_estimate_shipping"/> - + <button string="Estimate Shipping" type="object" name="action_estimate_shipping" /> </field> <field name="partner_shipping_id" position="after"> - <field name="real_shipping_id"/> - <field name="real_invoice_id"/> + <field name="real_shipping_id" /> + <field name="real_invoice_id" /> <field name="approval_status" /> - <field name="sales_tax_id" domain="[('type_tax_use','=','sale'), ('active', '=', True)]" required="1"/> - <field name="carrier_id" required="1"/> - <field name="delivery_service_type" readonly="1"/> - <field name="shipping_option_id"/> + <field name="sales_tax_id" + domain="[('type_tax_use','=','sale'), ('active', '=', True)]" required="1" /> + <field name="carrier_id" required="1" /> + <field name="delivery_service_type" readonly="1" /> + <field name="shipping_option_id" /> </field> <field name="medium_id" position="after"> - <field name="date_doc_kirim" readonly="1"/> - <field name="notification" readonly="1"/> + <field name="date_doc_kirim" readonly="1" /> + <field name="notification" readonly="1" /> </field> - <xpath expr="//form/sheet/notebook/page/field[@name='order_line']" position="attributes"> + <xpath expr="//form/sheet/notebook/page/field[@name='order_line']" + position="attributes"> <attribute name="attrs"> {'readonly': [('state', 'in', ('done','cancel'))]} </attribute> </xpath> - <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree" position="inside"> - <field name="desc_updatable" invisible="1"/> + <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree" + position="inside"> + <field name="desc_updatable" invisible="1" /> </xpath> - <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='name']" position="attributes"> + <xpath + expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='name']" + position="attributes"> <attribute name="modifiers"> {'readonly': [('desc_updatable', '=', False)]} </attribute> </xpath> - <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='price_unit']" position="attributes"> + <xpath + expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='price_unit']" + position="attributes"> <attribute name="attrs"> { - 'readonly': [ - '|', - ('qty_invoiced', '>', 0), - ('parent.approval_status', '!=', False) - ] + 'readonly': [ + '|', + ('qty_invoiced', '>', 0), + ('parent.approval_status', '!=', False) + ] } </attribute> </xpath> <div name="invoice_lines" position="before"> - <div name="vendor_id" groups="base.group_no_one" attrs="{'invisible': [('display_type', '!=', False)]}"> - <label for="vendor_id"/> + <div name="vendor_id" groups="base.group_no_one" + attrs="{'invisible': [('display_type', '!=', False)]}"> + <label for="vendor_id" /> <div name="vendor_id"> - <field name="vendor_id" - attrs="{'readonly': [('parent.approval_status', '=', 'approved')]}" - domain="[('parent_id', '=', False)]" - options="{'no_create': True}" class="oe_inline" /> + <field name="vendor_id" + attrs="{'readonly': [('parent.approval_status', '=', 'approved')]}" + domain="[('parent_id', '=', False)]" + options="{'no_create': True}" class="oe_inline" /> </div> </div> </div> - + <div name="invoice_lines" position="before"> - <div name="purchase_price" groups="base.group_no_one" attrs="{'invisible': [('display_type', '!=', False)]}"> - <label for="purchase_price"/> - <field name="purchase_price"/> + <div name="purchase_price" groups="base.group_no_one" + attrs="{'invisible': [('display_type', '!=', False)]}"> + <label for="purchase_price" /> + <field name="purchase_price" /> </div> </div> <div name="invoice_lines" position="before"> - <div name="purchase_tax_id" groups="base.group_no_one" attrs="{'invisible': [('display_type', '!=', False)]}"> - <label for="purchase_tax_id"/> + <div name="purchase_tax_id" groups="base.group_no_one" + attrs="{'invisible': [('display_type', '!=', False)]}"> + <label for="purchase_tax_id" /> <div name="purchase_tax_id"> - <field name="purchase_tax_id"/> + <field name="purchase_tax_id" /> </div> </div> </div> <div name="invoice_lines" position="before"> - <div name="item_percent_margin" groups="base.group_no_one" attrs="{'invisible': [('display_type', '!=', False)]}"> - <label for="item_percent_margin"/> - <field name="item_percent_margin"/> + <div name="item_percent_margin" groups="base.group_no_one" + attrs="{'invisible': [('display_type', '!=', False)]}"> + <label for="item_percent_margin" /> + <field name="item_percent_margin" /> </div> </div> <div name="invoice_lines" position="before"> - <div name="price_subtotal" groups="base.group_no_one" attrs="{'invisible': [('display_type', '!=', False)]}"> - <label for="price_subtotal"/> - <field name="price_subtotal"/> + <div name="price_subtotal" groups="base.group_no_one" + attrs="{'invisible': [('display_type', '!=', False)]}"> + <label for="price_subtotal" /> + <field name="price_subtotal" /> </div> </div> - <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='price_total']" position="after"> - <field name="qty_free_bu" optional="hide"/> - <field name="vendor_id" attrs="{'readonly': [('parent.approval_status', '=', 'approved')], 'invisible': [('display_type', '!=', False)]}" domain="[('parent_id', '=', False)]" options="{'no_create':True}"/> - <field name="vendor_md_id" optional="hide"/> - <field name="purchase_price" attrs=" + <xpath + expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='price_total']" + position="after"> + <field name="qty_free_bu" optional="hide" /> + <field name="vendor_id" + attrs="{'readonly': [('parent.approval_status', '=', 'approved')], 'invisible': [('display_type', '!=', False)]}" + domain="[('parent_id', '=', False)]" options="{'no_create':True}" /> + <field name="vendor_md_id" optional="hide" /> + <field name="purchase_price" + attrs=" { 'readonly': [ '|', @@ -183,56 +216,72 @@ ('parent.approval_status', '!=', False) ] } - "/> - <field name="purchase_price_md" optional="hide"/> - <field name="purchase_tax_id" attrs="{'readonly': [('parent.approval_status', '!=', False)]}" domain="[('type_tax_use','=','purchase')]" options="{'no_create':True}"/> - <field name="item_percent_margin"/> - <field name="item_margin" optional="hide"/> - <field name="margin_md" optional="hide"/> - <field name="note" optional="hide"/> - <field name="note_procurement" optional="hide"/> - <field name="vendor_subtotal" optional="hide"/> - <field name="weight" optional="hide"/> - <field name="amount_voucher_disc" string="Voucher" readonly="1" optional="hide"/> - <field name="order_promotion_id" string="Promotion" readonly="1" optional="hide"/> + " /> + <field name="purchase_price_md" optional="hide" /> + <field name="purchase_tax_id" + attrs="{'readonly': [('parent.approval_status', '!=', False)]}" + domain="[('type_tax_use','=','purchase')]" options="{'no_create':True}" /> + <field name="item_percent_margin" /> + <field name="item_margin" optional="hide" /> + <field name="margin_md" optional="hide" /> + <field name="note" optional="hide" /> + <field name="note_procurement" optional="hide" /> + <field name="vendor_subtotal" optional="hide" /> + <field name="weight" optional="hide" /> + <field name="amount_voucher_disc" string="Voucher" readonly="1" optional="hide" /> + <field name="order_promotion_id" string="Promotion" readonly="1" optional="hide" /> </xpath> - <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='product_id']" position="before"> - <field name="line_no" readonly="1" optional="hide"/> + <xpath + expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='product_id']" + position="before"> + <field name="line_no" readonly="1" optional="hide" /> </xpath> - <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='qty_delivered']" position="before"> - <field name="qty_reserved" invisible="1"/> - <field name="reserved_from" readonly="1" optional="hide"/> + <xpath + expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='qty_delivered']" + position="before"> + <field name="qty_reserved" invisible="1" /> + <field name="reserved_from" readonly="1" optional="hide" /> </xpath> - <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='product_id']" position="attributes"> + <xpath + expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='product_id']" + position="attributes"> <attribute name="options">{'no_create': True}</attribute> </xpath> - <!-- <xpath expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='tax_id']" position="attributes"> + <!-- <xpath + expr="//form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='tax_id']" + position="attributes"> <attribute name="required">1</attribute> </xpath> --> <field name="amount_total" position="after"> - <field name="grand_total"/> + <field name="grand_total" /> <label for="amount_voucher_disc" string="Voucher" /> <div> - <field class="mb-0" name="amount_voucher_disc" string="Voucher" readonly="1"/> - <div class="text-right mb-2"><small>*Hanya informasi</small></div> + <field class="mb-0" name="amount_voucher_disc" string="Voucher" readonly="1" /> + <div class="text-right mb-2"> + <small>*Hanya informasi</small> + </div> </div> <label for="amount_voucher_shipping_disc" string="Voucher Shipping" /> <div> - <field class="mb-0" name="amount_voucher_shipping_disc" string="Voucher Shipping" readonly="1"/> - <div class="text-right mb-2"><small>*Hanya informasi</small></div> + <field class="mb-0" name="amount_voucher_shipping_disc" + string="Voucher Shipping" readonly="1" /> + <div class="text-right mb-2"> + <small>*Hanya informasi</small> + </div> </div> - <field name="total_margin"/> - <field name="total_percent_margin"/> + <field name="total_margin" /> + <field name="total_percent_margin" /> </field> <field name="effective_date" position="after"> - <field name="carrier_id"/> - <field name="estimated_arrival_days"/> - <field name="picking_iu_id"/> - <field name="note_ekspedisi"/> + <field name="carrier_id" /> + <field name="estimated_arrival_days" /> + <field name="picking_iu_id" /> + <field name="note_ekspedisi" /> </field> <field name="carrier_id" position="attributes"> <attribute name="attrs"> - {'readonly': [('approval_status', '=', 'approved'), ('state', 'not in', ['cancel','draft'])]} + {'readonly': [('approval_status', '=', 'approved'), ('state', 'not in', + ['cancel','draft'])]} </attribute> </field> @@ -240,22 +289,22 @@ <page string="Website" name="customer_purchase_order"> <group> <group> - <field name="partner_purchase_order_name" readonly="True"/> - <field name="partner_purchase_order_description" readonly="True"/> - <field name="partner_purchase_order_file" readonly="True"/> - <field name="note_website" readonly="True"/> - <field name="web_approval" readonly="True"/> + <field name="partner_purchase_order_name" readonly="True" /> + <field name="partner_purchase_order_description" readonly="True" /> + <field name="partner_purchase_order_file" readonly="True" /> + <field name="note_website" readonly="True" /> + <field name="web_approval" readonly="True" /> </group> <group> <button name="generate_payment_link_midtrans_sales_order" - string="Create Payment Link" - type="object" + string="Create Payment Link" + type="object" /> - <field name="payment_link_midtrans" readonly="True" widget="url"/> - <field name="gross_amount" readonly="True"/> - <field name="payment_type" readonly="True"/> - <field name="payment_status" readonly="True"/> - <field name="payment_qr_code" widget="image" readonly="True"/> + <field name="payment_link_midtrans" readonly="True" widget="url" /> + <field name="gross_amount" readonly="True" /> + <field name="payment_type" readonly="True" /> + <field name="payment_status" readonly="True" /> + <field name="payment_qr_code" widget="image" readonly="True" /> </group> </group> </page> @@ -276,89 +325,91 @@ </field> </page> <page string="Matches PO" name="page_matches_po" invisible="1"> - <field name="order_sales_match_line" readonly="1"/> + <field name="order_sales_match_line" readonly="1" /> </page> <!-- <page string="Fullfillment" name="page_sale_order_fullfillment"> <field name="fullfillment_line" readonly="1"/> </page> --> <page string="Fulfillment v2" name="page_sale_order_fullfillment2"> - <field name="fulfillment_line_v2" readonly="1"/> + <field name="fulfillment_line_v2" readonly="1" /> </page> <page string="Reject Line" name="page_sale_order_reject_line"> - <field name="reject_line" readonly="1"/> + <field name="reject_line" readonly="1" /> </page> <page string="Koli" name="page_sales_order_koli_line"> - <field name="koli_lines" readonly="1"/> + <field name="koli_lines" readonly="1" /> </page> </page> </field> </record> - <!-- Wizard for Reject Reason --> - <record id="view_cancel_reason_order_form" model="ir.ui.view"> - <field name="name">cancel.reason.order.form</field> - <field name="model">cancel.reason.order</field> - <field name="arch" type="xml"> - <form string="Cancel Reason"> - <group> - <field name="reason_cancel" widget="selection"/> - <field name="attachment_bukti" widget="many2many_binary" required="1"/> - <field name="nomor_so_pengganti" attrs="{'invisible': [('reason_cancel', '!=', 'ganti_quotation')]}"/> - </group> - <footer> - <button string="Confirm" type="object" name="confirm_reject" class="btn-primary"/> - <button string="Cancel" class="btn-secondary" special="cancel"/> - </footer> - </form> - </field> - </record> + <!-- Wizard for Reject Reason --> + <record id="view_cancel_reason_order_form" model="ir.ui.view"> + <field name="name">cancel.reason.order.form</field> + <field name="model">cancel.reason.order</field> + <field name="arch" type="xml"> + <form string="Cancel Reason"> + <group> + <field name="reason_cancel" widget="selection" /> + <field name="attachment_bukti" widget="many2many_binary" required="1" /> + <field name="nomor_so_pengganti" + attrs="{'invisible': [('reason_cancel', '!=', 'ganti_quotation')]}" /> + </group> + <footer> + <button string="Confirm" type="object" name="confirm_reject" + class="btn-primary" /> + <button string="Cancel" class="btn-secondary" special="cancel" /> + </footer> + </form> + </field> + </record> - <record id="action_cancel_reason_order" model="ir.actions.act_window"> - <field name="name">Cancel Reason</field> - <field name="res_model">cancel.reason.order</field> - <field name="view_mode">form</field> - <field name="target">new</field> - </record> + <record id="action_cancel_reason_order" model="ir.actions.act_window"> + <field name="name">Cancel Reason</field> + <field name="res_model">cancel.reason.order</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> </data> <data> <record id="sale_order_tree_view_inherit" model="ir.ui.view"> <field name="name">Sale Order</field> <field name="model">sale.order</field> - <field name="inherit_id" ref="sale.view_quotation_tree_with_onboarding"/> + <field name="inherit_id" ref="sale.view_quotation_tree_with_onboarding" /> <field name="arch" type="xml"> <field name="state" position="after"> <field name="approval_status" /> - <field name="client_order_ref"/> - <field name="payment_type" optional="hide"/> - <field name="payment_status" optional="hide"/> - <field name="pareto_status" optional="hide"/> - <field name="shipping_method_picking" optional="hide"/> + <field name="client_order_ref" /> + <field name="payment_type" optional="hide" /> + <field name="payment_status" optional="hide" /> + <field name="pareto_status" optional="hide" /> + <field name="shipping_method_picking" optional="hide" /> </field> </field> </record> <record id="sales_order_tree_view_inherit" model="ir.ui.view"> <field name="name">Sale Order</field> <field name="model">sale.order</field> - <field name="inherit_id" ref="sale.view_order_tree"/> + <field name="inherit_id" ref="sale.view_order_tree" /> <field name="arch" type="xml"> <field name="state" position="after"> <field name="approval_status" /> - <field name="client_order_ref"/> - <field name="so_status"/> - <field name="date_status_done"/> - <field name="date_kirim_ril"/> - <field name="date_driver_departure"/> - <field name="date_driver_arrival"/> - <field name="payment_type" optional="hide"/> - <field name="payment_status" optional="hide"/> - <field name="pareto_status" optional="hide"/> + <field name="client_order_ref" /> + <field name="so_status" /> + <field name="date_status_done" /> + <field name="date_kirim_ril" /> + <field name="date_driver_departure" /> + <field name="date_driver_arrival" /> + <field name="payment_type" optional="hide" /> + <field name="payment_status" optional="hide" /> + <field name="pareto_status" optional="hide" /> </field> </field> </record> <record id="sale_order_multi_update_ir_actions_server" model="ir.actions.server"> <field name="name">Mark As Cancel</field> - <field name="model_id" ref="sale.model_sale_order"/> - <field name="binding_model_id" ref="sale.model_sale_order"/> + <field name="model_id" ref="sale.model_sale_order" /> + <field name="binding_model_id" ref="sale.model_sale_order" /> <field name="binding_view_types">form,list</field> <field name="state">code</field> <field name="code">action = records.open_form_multi_update_state()</field> @@ -366,46 +417,81 @@ <record id="sale_order_update_multi_actions_server" model="ir.actions.server"> <field name="name">Mark As Completed</field> - <field name="model_id" ref="sale.model_sale_order"/> - <field name="binding_model_id" ref="sale.model_sale_order"/> + <field name="model_id" ref="sale.model_sale_order" /> + <field name="binding_model_id" ref="sale.model_sale_order" /> <field name="state">code</field> <field name="code">action = records.open_form_multi_update_status()</field> </record> <record id="mail_template_sale_order_web_approve_notification" model="mail.template"> <field name="name">Sale Order: Web Approve Notification</field> - <field name="model_id" ref="indoteknik_custom.model_sale_order"/> + <field name="model_id" ref="indoteknik_custom.model_sale_order" /> <field name="subject">Permintaan Persetujuan Pesanan ${object.name} di Indoteknik.com</field> <field name="email_from">sales@indoteknik.com</field> <field name="email_to">${object.partner_id.email | safe}</field> <field name="email_cc">${object.partner_id.get_approve_partner_ids("email_comma_sep")}</field> <field name="body_html" type="html"> - <table border="0" cellpadding="0" cellspacing="0" style="padding: 16px 0; background-color: #F1F1F1; font-family:Inter, Helvetica, Verdana, Arial,sans-serif; line-height: 24px; color: #454748; width: 100%; border-collapse:separate;"> - <tr><td align="center"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style="font-size: 13px; padding: 16px; background-color: white; color: #454748; border-collapse:separate;"> - <tbody> - <tr> - <td align="center" style="min-width: 590px;"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> - <tr><td style="padding-bottom: 24px;">Dear ${(object.partner_id.get_main_parent()).name},</td></tr> + <table border="0" cellpadding="0" cellspacing="0" + style="padding: 16px 0; background-color: #F1F1F1; font-family:Inter, Helvetica, Verdana, Arial,sans-serif; line-height: 24px; color: #454748; width: 100%; border-collapse:separate;"> + <tr> + <td align="center"> + <table border="0" cellpadding="0" cellspacing="0" width="590" + style="font-size: 13px; padding: 16px; background-color: white; color: #454748; border-collapse:separate;"> + <tbody> + <tr> + <td align="center" style="min-width: 590px;"> + <table border="0" cellpadding="0" cellspacing="0" + width="590" + style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> + <tr> + <td style="padding-bottom: 24px;"> + Dear + ${(object.partner_id.get_main_parent()).name},</td> + </tr> - <tr><td style="padding-bottom: 16px;">Ini adalah konfirmasi pesanan dari ${object.partner_id.name | safe} untuk nomor pesanan ${object.name} yang memerlukan persetujuan agar dapat diproses.</td></tr> - <tr><td style="padding-bottom: 16px;"> - <a href="https://indoteknik.com/my/quotations/${object.id}" style="color: white; background-color: #C53030; border: none; border-radius: 6px; padding: 4px 8px; width: fit-content; display: block;"> - Lihat Pesanan - </a> - </td></tr> - <tr><td style="padding-bottom: 16px;">Mohon segera melakukan tinjauan terhadap pesanan ini dan memberikan persetujuan. Terima kasih atas perhatian dan kerjasama Anda. Kami berharap dapat segera melanjutkan proses pesanan ini setelah mendapatkan persetujuan Anda.</td></tr> + <tr> + <td style="padding-bottom: 16px;">Ini adalah + konfirmasi pesanan dari + ${object.partner_id.name | safe} untuk nomor + pesanan ${object.name} yang memerlukan + persetujuan agar dapat diproses.</td> + </tr> + <tr> + <td style="padding-bottom: 16px;"> + <a + href="https://indoteknik.com/my/quotations/${object.id}" + style="color: white; background-color: #C53030; border: none; border-radius: 6px; padding: 4px 8px; width: fit-content; display: block;"> + Lihat Pesanan + </a> + </td> + </tr> + <tr> + <td style="padding-bottom: 16px;">Mohon segera + melakukan tinjauan terhadap pesanan ini dan + memberikan persetujuan. Terima kasih atas + perhatian dan kerjasama Anda. Kami berharap + dapat segera melanjutkan proses pesanan ini + setelah mendapatkan persetujuan Anda.</td> + </tr> - <tr><td style="padding-bottom: 2px;">Hormat kami,</td></tr> - <tr><td style="padding-bottom: 2px;">PT. Indoteknik Dotcom Gemilang</td></tr> - <tr><td style="padding-bottom: 2px;">sales@indoteknik.com</td></tr> - </table> - </td> - </tr> - </tbody> - </table> - </td></tr> + <tr> + <td style="padding-bottom: 2px;">Hormat kami,</td> + </tr> + <tr> + <td style="padding-bottom: 2px;">PT. Indoteknik + Dotcom Gemilang</td> + </tr> + <tr> + <td style="padding-bottom: 2px;"> + sales@indoteknik.com</td> + </tr> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> </table> </field> </record> @@ -417,11 +503,11 @@ <field name="model">sales.order.purchase.match</field> <field name="arch" type="xml"> <tree editable="top" create="false" delete="false"> - <field name="purchase_order_id" readonly="1"/> - <field name="purchase_line_id" readonly="1"/> - <field name="product_id" readonly="1"/> - <field name="qty_so" readonly="1"/> - <field name="qty_po" readonly="1"/> + <field name="purchase_order_id" readonly="1" /> + <field name="purchase_line_id" readonly="1" /> + <field name="product_id" readonly="1" /> + <field name="qty_so" readonly="1" /> + <field name="qty_po" readonly="1" /> </tree> </field> </record> @@ -433,9 +519,9 @@ <field name="model">sales.order.koli</field> <field name="arch" type="xml"> <tree editable="top" create="false" delete="false"> - <field name="koli_id" readonly="1"/> - <field name="picking_id" readonly="1"/> - <field name="state" readonly="1"/> + <field name="koli_id" readonly="1" /> + <field name="picking_id" readonly="1" /> + <field name="state" readonly="1" /> </tree> </field> </record> @@ -444,32 +530,32 @@ <data> </data> - <record id="sales_order_fulfillment_v2_tree" model="ir.ui.view"> - <field name="name">sales.order.fulfillment.v2.tree</field> - <field name="model">sales.order.fulfillment.v2</field> - <field name="arch" type="xml"> - <tree editable="top" create="false"> - <field name="product_id" readonly="1"/> - <field name="so_qty" readonly="1" optional="show"/> - <field name="reserved_stock_qty" readonly="1" optional="show"/> - <field name="delivered_qty" readonly="1" optional="hide"/> - <field name="po_ids" widget="many2many_tags" readonly="1" optional="show"/> - <field name="po_qty" readonly="1" optional="show"/> - <field name="received_qty" readonly="1" optional="show"/> - <field name="purchaser" readonly="1" optional="hide"/> - </tree> - </field> - </record> + <record id="sales_order_fulfillment_v2_tree" model="ir.ui.view"> + <field name="name">sales.order.fulfillment.v2.tree</field> + <field name="model">sales.order.fulfillment.v2</field> + <field name="arch" type="xml"> + <tree editable="top" create="false"> + <field name="product_id" readonly="1" /> + <field name="so_qty" readonly="1" optional="show" /> + <field name="reserved_stock_qty" readonly="1" optional="show" /> + <field name="delivered_qty" readonly="1" optional="hide" /> + <field name="po_ids" widget="many2many_tags" readonly="1" optional="show" /> + <field name="po_qty" readonly="1" optional="show" /> + <field name="received_qty" readonly="1" optional="show" /> + <field name="purchaser" readonly="1" optional="hide" /> + </tree> + </field> + </record> <data> <record id="sales_order_fullfillmet_tree" model="ir.ui.view"> <field name="name">sales.order.fullfillment.tree</field> <field name="model">sales.order.fullfillment</field> <field name="arch" type="xml"> <tree editable="top" create="false"> - <field name="product_id" readonly="1"/> - <field name="reserved_from" readonly="1"/> - <field name="qty_fullfillment" readonly="1"/> - <field name="user_id" readonly="1"/> + <field name="product_id" readonly="1" /> + <field name="reserved_from" readonly="1" /> + <field name="qty_fullfillment" readonly="1" /> + <field name="user_id" readonly="1" /> </tree> </field> </record> @@ -481,9 +567,9 @@ <field name="model">sales.order.reject</field> <field name="arch" type="xml"> <tree editable="top" create="false"> - <field name="product_id" readonly="1"/> - <field name="qty_reject" readonly="1"/> - <field name="reason_reject" readonly="1"/> + <field name="product_id" readonly="1" /> + <field name="qty_reject" readonly="1" /> + <field name="reason_reject" readonly="1" /> </tree> </field> </record> @@ -492,8 +578,8 @@ <data> <record id="sale_order_multi_create_uangmuka_ir_actions_server" model="ir.actions.server"> <field name="name">Uang Muka</field> - <field name="model_id" ref="sale.model_sale_order"/> - <field name="binding_model_id" ref="sale.model_sale_order"/> + <field name="model_id" ref="sale.model_sale_order" /> + <field name="binding_model_id" ref="sale.model_sale_order" /> <field name="state">code</field> <field name="code">action = records.open_form_multi_create_uang_muka()</field> </record> @@ -502,66 +588,84 @@ <data> <record id="mail_template_sale_order_notification_to_salesperson" model="mail.template"> <field name="name">Sale Order: Notification to Salesperson</field> - <field name="model_id" ref="sale.model_sale_order"/> + <field name="model_id" ref="sale.model_sale_order" /> <field name="subject">Konsolidasi Pengiriman</field> <field name="email_from">sales@indoteknik.com</field> <field name="email_to">${object.user_id.login | safe}</field> <field name="body_html" type="html"> - <table border="0" cellpadding="0" cellspacing="0" style="padding-top: 16px; background-color: #F1F1F1; font-family:Inter, Helvetica, Verdana, Arial,sans-serif; line-height: 24px; color: #454748; width: 100%; border-collapse:separate;"> - <tr><td align="center"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style="font-size: 13px; padding: 16px; background-color: white; color: #454748; border-collapse:separate;"> - <!-- HEADER --> - <tbody> - <tr> - <td align="center" style="min-width: 590px;"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> - <tr> - <td valign="middle"> - <span></span> - </td> - </tr> - </table> - </td> - </tr> - <!-- CONTENT --> - <tr> - <td align="center" style="min-width: 590px;"> - <table border="0" cellpadding="0" cellspacing="0" width="590" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> - <tr><td style="padding-bottom: 24px;">Dear ${salesperson_name},</td></tr> - - <tr><td style="padding-bottom: 16px;">Terdapat pesanan dari BP ${business_partner} untuk site ${site} dengan total belanja ${sum_total_amount} dari list SO dibawah ini:</td></tr> - - <tr> - <td> - <table border="1" cellpadding="5" cellspacing="0"> - <thead> - <tr> - <th>Nama Pesanan</th> - <th>Nama Perusahaan Induk</th> - <th>Nama Situs</th> - <th>Total Pembelian</th> - </tr> - </thead> - <tbody> - ${table_content} - </tbody> - </table> - </td> - </tr> - - <tr> - <td style="text-align:center;"> - <hr width="100%" - style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;" /> - </td> - </tr> - </table> - </td> - </tr> - <!-- CONTENT --> - </tbody> - </table> - </td></tr> + <table border="0" cellpadding="0" cellspacing="0" + style="padding-top: 16px; background-color: #F1F1F1; font-family:Inter, Helvetica, Verdana, Arial,sans-serif; line-height: 24px; color: #454748; width: 100%; border-collapse:separate;"> + <tr> + <td align="center"> + <table border="0" cellpadding="0" cellspacing="0" width="590" + style="font-size: 13px; padding: 16px; background-color: white; color: #454748; border-collapse:separate;"> + <!-- HEADER --> + <tbody> + <tr> + <td align="center" style="min-width: 590px;"> + <table border="0" cellpadding="0" cellspacing="0" + width="590" + style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> + <tr> + <td valign="middle"> + <span></span> + </td> + </tr> + </table> + </td> + </tr> + <!-- CONTENT --> + <tr> + <td align="center" style="min-width: 590px;"> + <table border="0" cellpadding="0" cellspacing="0" + width="590" + style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;"> + <tr> + <td style="padding-bottom: 24px;">Dear + ${salesperson_name},</td> + </tr> + + <tr> + <td style="padding-bottom: 16px;">Terdapat + pesanan dari BP ${business_partner} untuk + site ${site} dengan total belanja + ${sum_total_amount} dari list SO dibawah + ini:</td> + </tr> + + <tr> + <td> + <table border="1" cellpadding="5" + cellspacing="0"> + <thead> + <tr> + <th>Nama Pesanan</th> + <th>Nama Perusahaan Induk</th> + <th>Nama Situs</th> + <th>Total Pembelian</th> + </tr> + </thead> + <tbody> + ${table_content} + </tbody> + </table> + </td> + </tr> + + <tr> + <td style="text-align:center;"> + <hr width="100%" + style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;" /> + </td> + </tr> + </table> + </td> + </tr> + <!-- CONTENT --> + </tbody> + </table> + </td> + </tr> </table> </field> </record> |
