diff options
| -rwxr-xr-x | fixco_custom/__manifest__.py | 1 | ||||
| -rw-r--r-- | fixco_custom/models/account_move.py | 61 | ||||
| -rw-r--r-- | fixco_custom/models/purchase_order_line.py | 7 | ||||
| -rwxr-xr-x | fixco_custom/security/ir.model.access.csv | 1 | ||||
| -rw-r--r-- | fixco_custom/views/account_move.xml | 13 | ||||
| -rw-r--r-- | fixco_custom/views/purchase_order.xml | 1 | ||||
| -rw-r--r-- | fixco_custom/views/purchase_order_line_wizard.xml | 37 |
7 files changed, 118 insertions, 3 deletions
diff --git a/fixco_custom/__manifest__.py b/fixco_custom/__manifest__.py index c1aa655..557b2ae 100755 --- a/fixco_custom/__manifest__.py +++ b/fixco_custom/__manifest__.py @@ -52,6 +52,7 @@ 'views/queue_job.xml', 'views/purchase_order_multi_bills.xml', 'views/report_picking_list_new.xml', + 'views/purchase_order_line_wizard.xml', ], 'demo': [], 'css': [], diff --git a/fixco_custom/models/account_move.py b/fixco_custom/models/account_move.py index f6fd742..a0de6bb 100644 --- a/fixco_custom/models/account_move.py +++ b/fixco_custom/models/account_move.py @@ -47,6 +47,25 @@ class AccountMove(models.Model): compute="_compute_need_refund", help="Flag otomatis kalau invoice sudah paid dan picking terkait di-return." ) + # purchase_item_ids= fields.Many2many( + # 'purchase.order.line', + # string='Auto Complete (PO Item)', + # ) + + def action_open_po_item_wizard(self): + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'name': 'Select PO Items', + 'res_model': 'purchase.order.line.wizard', + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'default_move_id': self.id, + 'default_partner_id': self.partner_id.id, + } + } + approval_refund = fields.Selection( [('approved', 'Approved'), ('rejected', 'Rejected'), @@ -266,8 +285,6 @@ class AccountMove(models.Model): if entry.move_type == 'out_invoice': if entry.picking_id: entry.invoice_date = entry.picking_id.date_done - - return res @api.onchange('purchase_vendor_bill_ids', 'purchase_id') @@ -320,3 +337,43 @@ class AccountMove(models.Model): self.purchase_id = False self.purchase_vendor_bill_ids = [(5, 0, 0)] # clear after use self._onchange_currency() + +class PurchaseOrderLineWizard(models.TransientModel): + _name = 'purchase.order.line.wizard' + _description = 'PO Item Selector Wizard' + + move_id = fields.Many2one('account.move', required=True) + partner_id = fields.Many2one('res.partner') + + line_ids = fields.Many2many( + 'purchase.order.line', + string='PO Items', + ) + + def action_add_lines(self): + self.ensure_one() + move = self.move_id + + if move.state != 'draft': + raise UserError('Invoice harus draft') + + + for po_line in self.line_ids: + + line = self.env['account.move.line'].with_context( + check_move_validity=False + ).new({ + 'move_id': move.id, + 'product_id': po_line.product_id.id, + }) + + line._onchange_product_id() + + line.name = po_line.name + # 🔹 Hanya qty yang belum di-invoice + line.quantity = po_line.product_qty - po_line.qty_invoiced + line.price_unit = po_line.price_unit + line.tax_ids = po_line.taxes_id + line.purchase_line_id = po_line.id + + move.invoice_line_ids += line diff --git a/fixco_custom/models/purchase_order_line.py b/fixco_custom/models/purchase_order_line.py index 53a5eba..bdd729c 100644 --- a/fixco_custom/models/purchase_order_line.py +++ b/fixco_custom/models/purchase_order_line.py @@ -38,6 +38,13 @@ class PurchaseOrderLine(models.Model): original_price_subtotal = fields.Float(string='Original Subtotal', readonly=True) description = fields.Text(string='Description', readonly=True, copy=False) docstatus_altama = fields.Text(string='Status Altama', readonly=True, copy=False) + bill_remain = fields.Float(string='Bill Remain', readonly=True, copy=False, tracking=True, compute='_compute_bill_remain') + + @api.depends('qty_invoiced', 'product_qty') + def _compute_bill_remain(self): + for line in self: + line.bill_remain = line.product_qty - line.qty_invoiced + @api.constrains('product_id', 'price_unit', 'product_qty') def _store_original_price(self): diff --git a/fixco_custom/security/ir.model.access.csv b/fixco_custom/security/ir.model.access.csv index 91c309e..2117f29 100755 --- a/fixco_custom/security/ir.model.access.csv +++ b/fixco_custom/security/ir.model.access.csv @@ -47,3 +47,4 @@ access_upload_cancel_picking,access.upload.cancel.picking,model_upload_cancel_pi access_upload_cancel_picking_line,access.upload.cancel.picking.line,model_upload_cancel_picking_line,,1,1,1,1 access_queue_job,access.queue.job,model_queue_job,,1,1,1,1 access_purchase_order_multi_bills,access.purchase.order.multi_bills,model_purchase_order_multi_bills,,1,1,1,1 +access_purchase_order_line_wizard,access.purchase.order.line.wizard,model_purchase_order_line_wizard,,1,1,1,1
\ No newline at end of file diff --git a/fixco_custom/views/account_move.xml b/fixco_custom/views/account_move.xml index 5af0cfc..4869981 100644 --- a/fixco_custom/views/account_move.xml +++ b/fixco_custom/views/account_move.xml @@ -33,6 +33,17 @@ <!-- <button name="approve_refund" string="Approved Pengajuan Refund" type="object" class="btn-primary" attrs="{'invisible': [('state', '!=', 'posted'), ('move_type', '!=', 'entry'), ('approval_refund', 'in', ('approved','rejected'))]}"/> --> </button> + <xpath expr="//header" position="inside"> + <button name="action_open_po_item_wizard" + type="object" + string="Add PO Items" + class="oe_highlight" + attrs="{'invisible': ['|', + ('move_type','!=','in_invoice'), + ('state','!=','draft') + ]}"/> + </xpath> + <button name="open_reconcile_view" position="after"> <button type="object" name="action_view_related_payment" @@ -189,4 +200,4 @@ <field name="code">action = records.queue_job_cancel_bill()</field> </record> </data> -</odoo>
\ No newline at end of file +</odoo> diff --git a/fixco_custom/views/purchase_order.xml b/fixco_custom/views/purchase_order.xml index cb85374..d254c92 100644 --- a/fixco_custom/views/purchase_order.xml +++ b/fixco_custom/views/purchase_order.xml @@ -59,6 +59,7 @@ <field name="altama_ordered" optional="hide" readonly="1"/> <field name="altama_delivered" optional="hide" readonly="1"/> <field name="altama_invoiced" optional="hide" readonly="1"/> + <field name="bill_remain" readonly="1"/> </field> </field> </record> diff --git a/fixco_custom/views/purchase_order_line_wizard.xml b/fixco_custom/views/purchase_order_line_wizard.xml new file mode 100644 index 0000000..bce3667 --- /dev/null +++ b/fixco_custom/views/purchase_order_line_wizard.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <data> + + <record id="view_po_line_wizard_form" model="ir.ui.view"> + <field name="name">purchase.order.line.wizard.form</field> + <field name="model">purchase.order.line.wizard</field> + <field name="arch" type="xml"> + <form string="Select PO Items"> + <group> + <field name="line_ids"> + <tree editable="bottom"> + <field name="order_id" readonly="1"/> + <field name="product_id" readonly="1"/> + <field name="bill_remain" readonly="1"/> + <field name="qty_invoiced" readonly="1"/> + <field name="product_qty" readonly="1"/> + </tree> + </field> + </group> + + <footer> + <button string="Add" + type="object" + name="action_add_lines" + class="btn-primary"/> + <button string="Cancel" + class="btn-secondary" + special="cancel"/> + </footer> + </form> + </field> + </record> + + </data> +</odoo> + |
