account_invoice_update_wizard: improve migration to v14
account_invoice_update_wizard: remove 'name' field. Improve field labels. Add module account_invoice_update_wizard_payment_mode
This commit is contained in:
@@ -11,9 +11,8 @@ class AccountMove(models.Model):
|
|||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
wizard = self.env['account.move.update']
|
wizard = self.env['account.move.update']
|
||||||
res = wizard._prepare_default_get(self)
|
res = wizard._prepare_default_get(self)
|
||||||
action = self.env.ref(
|
action = self.env["ir.actions.actions"]._for_xml_id(
|
||||||
'account_invoice_update_wizard.account_invoice_update_action'
|
'account_invoice_update_wizard.account_invoice_update_action')
|
||||||
).read()[0]
|
|
||||||
action['name'] = "Update Wizard"
|
action['name'] = "Update Wizard"
|
||||||
action['res_id'] = wizard.create(res).id
|
action['res_id'] = wizard.create(res).id
|
||||||
return action
|
return action
|
||||||
|
|||||||
@@ -14,16 +14,13 @@ class AccountMoveUpdate(models.TransientModel):
|
|||||||
invoice_id = fields.Many2one(
|
invoice_id = fields.Many2one(
|
||||||
'account.move', string='Invoice', required=True,
|
'account.move', string='Invoice', required=True,
|
||||||
readonly=True)
|
readonly=True)
|
||||||
type = fields.Selection(related='invoice_id.move_type', readonly=True)
|
move_type = fields.Selection(related='invoice_id.move_type')
|
||||||
company_id = fields.Many2one(
|
company_id = fields.Many2one(related='invoice_id.company_id')
|
||||||
related='invoice_id.company_id', readonly=True)
|
partner_id = fields.Many2one(related='invoice_id.partner_id')
|
||||||
partner_id = fields.Many2one(
|
|
||||||
related='invoice_id.partner_id', readonly=True)
|
|
||||||
user_id = fields.Many2one('res.users', string='Salesperson')
|
user_id = fields.Many2one('res.users', string='Salesperson')
|
||||||
invoice_payment_term_id = fields.Many2one(
|
invoice_payment_term_id = fields.Many2one(
|
||||||
'account.payment.term', string='Payment Term')
|
'account.payment.term', string='Payment Term')
|
||||||
ref = fields.Char(string='Invoice Reference')
|
ref = fields.Char(string='Reference') # field label is customized in the view
|
||||||
name = fields.Char(string='Reference/Description')
|
|
||||||
invoice_origin = fields.Char(string='Source Document')
|
invoice_origin = fields.Char(string='Source Document')
|
||||||
partner_bank_id = fields.Many2one(
|
partner_bank_id = fields.Many2one(
|
||||||
'res.partner.bank', string='Bank Account')
|
'res.partner.bank', string='Bank Account')
|
||||||
@@ -33,7 +30,7 @@ class AccountMoveUpdate(models.TransientModel):
|
|||||||
@api.model
|
@api.model
|
||||||
def _simple_fields2update(self):
|
def _simple_fields2update(self):
|
||||||
'''List boolean, date, datetime, char, text fields'''
|
'''List boolean, date, datetime, char, text fields'''
|
||||||
return ['ref', 'name', 'invoice_origin']
|
return ['ref', 'invoice_origin']
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _m2o_fields2update(self):
|
def _m2o_fields2update(self):
|
||||||
@@ -55,15 +52,16 @@ class AccountMoveUpdate(models.TransientModel):
|
|||||||
'quantity': line.quantity,
|
'quantity': line.quantity,
|
||||||
'price_subtotal': line.price_subtotal,
|
'price_subtotal': line.price_subtotal,
|
||||||
'analytic_account_id': line.analytic_account_id.id,
|
'analytic_account_id': line.analytic_account_id.id,
|
||||||
|
'currency_id': line.currency_id.id,
|
||||||
'analytic_tag_ids': aa_tags,
|
'analytic_tag_ids': aa_tags,
|
||||||
'display_type': line.display_type,
|
'display_type': line.display_type,
|
||||||
}])
|
}])
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.onchange('type')
|
@api.onchange('move_type')
|
||||||
def type_on_change(self):
|
def move_type_on_change(self):
|
||||||
res = {'domain': {}}
|
res = {'domain': {}}
|
||||||
if self.type in ('out_invoice', 'out_refund'):
|
if self.move_type in ('out_invoice', 'out_refund'):
|
||||||
res['domain']['partner_bank_id'] =\
|
res['domain']['partner_bank_id'] =\
|
||||||
"[('partner_id.ref_company_ids', 'in', [company_id])]"
|
"[('partner_id.ref_company_ids', 'in', [company_id])]"
|
||||||
else:
|
else:
|
||||||
@@ -243,11 +241,11 @@ class AccountMoveLineUpdate(models.TransientModel):
|
|||||||
('line_section', "Section"),
|
('line_section', "Section"),
|
||||||
('line_note', "Note")], default=False, help="Technical field for UX purpose.")
|
('line_note', "Note")], default=False, help="Technical field for UX purpose.")
|
||||||
quantity = fields.Float(
|
quantity = fields.Float(
|
||||||
string='Quantity', digits=dp.get_precision('Product Unit of Measure'),
|
string='Quantity', digits='Product Unit of Measure', readonly=True)
|
||||||
readonly=True)
|
price_subtotal = fields.Monetary(
|
||||||
price_subtotal = fields.Float(
|
string='Amount', readonly=True)
|
||||||
string='Amount', readonly=True, digits=dp.get_precision('Account'))
|
|
||||||
analytic_account_id = fields.Many2one(
|
analytic_account_id = fields.Many2one(
|
||||||
'account.analytic.account', string='Analytic Account')
|
'account.analytic.account', string='Analytic Account')
|
||||||
analytic_tag_ids = fields.Many2many(
|
analytic_tag_ids = fields.Many2many(
|
||||||
'account.analytic.tag', string='Analytic Tags')
|
'account.analytic.tag', string='Analytic Tags')
|
||||||
|
currency_id = fields.Many2one('res.currency', readonly=True)
|
||||||
|
|||||||
@@ -12,26 +12,27 @@
|
|||||||
<form string="Update Invoice Wizard">
|
<form string="Update Invoice Wizard">
|
||||||
<group name="main">
|
<group name="main">
|
||||||
<field name="invoice_id" invisible="1"/>
|
<field name="invoice_id" invisible="1"/>
|
||||||
<field name="type" invisible="1"/>
|
<field name="move_type" invisible="1"/>
|
||||||
<field name="company_id" invisible="1"/>
|
<field name="company_id" invisible="1"/>
|
||||||
<field name="partner_id" invisible="1"/>
|
<field name="partner_id" invisible="1"/>
|
||||||
<field name="ref" attrs="{'invisible': [('type', 'not in', ('in_invoice', 'in_refund'))]}"/>
|
<field string="Bill Reference" attrs="{'invisible': [('move_type', 'not in', ('in_invoice', 'in_refund'))]}" name="ref"/>
|
||||||
|
<field string="Customer Reference" attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund'))]}" name="ref"/>
|
||||||
<field name="invoice_origin"/>
|
<field name="invoice_origin"/>
|
||||||
<field name="name"/>
|
|
||||||
<field name="invoice_payment_term_id" widget="selection"/>
|
<field name="invoice_payment_term_id" widget="selection"/>
|
||||||
<field name="partner_bank_id"/>
|
<field name="partner_bank_id"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id" options="{'no_open': True, 'no_create': True, 'no_create_edit': True}"/>
|
||||||
</group>
|
</group>
|
||||||
<group name="lines">
|
<group name="lines">
|
||||||
<field name="line_ids" nolabel="1">
|
<field name="line_ids" nolabel="1">
|
||||||
<tree editable="bottom" create="false" delete="false" edit="true">
|
<tree editable="bottom" create="false" delete="false" edit="true">
|
||||||
<field name="invoice_line_id" invisible="1"/>
|
<field name="invoice_line_id" invisible="1"/>
|
||||||
<field name="display_type" invisible="1"/>
|
<field name="display_type" invisible="1"/>
|
||||||
|
<field name="currency_id" invisible="1"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="quantity" attrs="{'invisible': [('display_type', '!=', False)]}"/>
|
<field name="quantity" attrs="{'invisible': [('display_type', '!=', False)]}"/>
|
||||||
<field name="price_subtotal" attrs="{'invisible': [('display_type', '!=', False)]}"/>
|
<field name="price_subtotal" attrs="{'invisible': [('display_type', '!=', False)]}"/>
|
||||||
<field name="analytic_account_id" attrs="{'invisible': [('display_type', '!=', False)]}" groups="analytic.group_analytic_accounting"/>
|
<field name="analytic_account_id" attrs="{'invisible': [('display_type', '!=', False)]}" groups="analytic.group_analytic_accounting"/>
|
||||||
<field name="analytic_tag_ids" attrs="{'invisible': [('display_type', '!=', False)]}" groups="analytic.group_analytic_accounting" widget="many2many_tags"/>
|
<field name="analytic_tag_ids" attrs="{'invisible': [('display_type', '!=', False)]}" groups="analytic.group_analytic_tags" widget="many2many_tags"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</group>
|
</group>
|
||||||
|
|||||||
39
account_invoice_update_wizard_payment_mode/README.rst
Normal file
39
account_invoice_update_wizard_payment_mode/README.rst
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
||||||
|
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
|
:alt: License: AGPL-3
|
||||||
|
|
||||||
|
Account Invoice Update Wizard
|
||||||
|
=============================
|
||||||
|
|
||||||
|
This module adds a button *Update Invoice* on Customer and Supplier invoices in
|
||||||
|
Open or Paid state. This button starts a wizard which allows the user to update
|
||||||
|
non-legal fields of the invoice:
|
||||||
|
|
||||||
|
* Source Document
|
||||||
|
* Reference/Description
|
||||||
|
* Payment terms (update allowed only to a payment term with same number of terms
|
||||||
|
of the same amount and on invoices without any payment)
|
||||||
|
* Bank Account
|
||||||
|
* Salesman
|
||||||
|
* Notes
|
||||||
|
* Description of invoice lines
|
||||||
|
* Analytic account
|
||||||
|
* Analytic tags
|
||||||
|
|
||||||
|
Bug Tracker
|
||||||
|
===========
|
||||||
|
|
||||||
|
Bugs are tracked on `GitHub Issues
|
||||||
|
<https://github.com/akretion/odoo-usability/issues>`_. In case of trouble, please
|
||||||
|
check there if your issue has already been reported. If you spotted it first,
|
||||||
|
help us smash it by providing detailed and welcomed feedback.
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
* Florian da Costa <florian.dacosta@akretion.com>
|
||||||
|
* Matthieu Dietrich <matthieu.dietrich@camptocamp.com>
|
||||||
|
* Yannick Vaucher <yannick.vaucher@camptocamp.com>
|
||||||
|
* Mykhailo Panarin <m.panarin@mobilunity.com>
|
||||||
|
* Artem Kostyuk <a.kostyuk@mobilunity.com>
|
||||||
1
account_invoice_update_wizard_payment_mode/__init__.py
Normal file
1
account_invoice_update_wizard_payment_mode/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import wizard
|
||||||
17
account_invoice_update_wizard_payment_mode/__manifest__.py
Normal file
17
account_invoice_update_wizard_payment_mode/__manifest__.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Copyright 2022 Akretion France (http://www.akretion.com/)
|
||||||
|
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
'name': 'Account Invoice Update Wizard Payment Mode',
|
||||||
|
'version': '14.0.1.0.0',
|
||||||
|
'category': 'Accounting & Finance',
|
||||||
|
'license': 'AGPL-3',
|
||||||
|
'summary': 'Add Payment Mode to Invoice Update Wizard',
|
||||||
|
'author': 'Akretion',
|
||||||
|
'website': 'https://github.com/akretion/odoo-usability',
|
||||||
|
'depends': ['account_invoice_update_wizard', 'account_payment_partner'],
|
||||||
|
'data': ['wizard/account_move_update_view.xml'],
|
||||||
|
'installable': True,
|
||||||
|
'auto_install': True,
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
-->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_move_form_inherit" model="ir.ui.view">
|
||||||
|
<field name="model">account.move</field>
|
||||||
|
<field name="inherit_id" ref="account.view_move_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<button name="button_draft" position="before">
|
||||||
|
<button name="prepare_update_wizard" type="object" string="Update Invoice" states="posted" groups="account.group_account_invoice"/>
|
||||||
|
</button>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
from . import account_move_update
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Copyright 2022 Akretion France (http://www.akretion.com/)
|
||||||
|
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class AccountMoveUpdate(models.TransientModel):
|
||||||
|
_inherit = 'account.move.update'
|
||||||
|
|
||||||
|
payment_mode_filter_type_domain = fields.Char(
|
||||||
|
related='invoice_id.payment_mode_filter_type_domain')
|
||||||
|
partner_bank_filter_type_domain = fields.Many2one(
|
||||||
|
related='invoice_id.partner_bank_filter_type_domain')
|
||||||
|
bank_account_required = fields.Boolean(
|
||||||
|
related='invoice_id.bank_account_required')
|
||||||
|
payment_mode_id = fields.Many2one("account.payment.mode")
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _m2o_fields2update(self):
|
||||||
|
m2o_list = super()._m2o_fields2update()
|
||||||
|
m2o_list.append('payment_mode_id')
|
||||||
|
return m2o_list
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2022 Akretion France (http://www.akretion.com/)
|
||||||
|
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||||
|
-->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
|
||||||
|
<record id="account_invoice_update_form" model="ir.ui.view">
|
||||||
|
<field name="model">account.move.update</field>
|
||||||
|
<field name="inherit_id" ref="account_invoice_update_wizard.account_invoice_update_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="invoice_payment_term_id" position="after">
|
||||||
|
<field name="payment_mode_filter_type_domain" invisible="1"/>
|
||||||
|
<field name="partner_bank_filter_type_domain" invisible="1"/>
|
||||||
|
<field name="bank_account_required" invisible="1"/>
|
||||||
|
<field name="payment_mode_id" domain="[('payment_type', '=', payment_mode_filter_type_domain), ('company_id', '=', company_id)]"/>
|
||||||
|
</field>
|
||||||
|
<field name="partner_bank_id" position="attributes">
|
||||||
|
<attribute name="domain">
|
||||||
|
[('partner_id', '=', partner_bank_filter_type_domain),
|
||||||
|
'|',('company_id', '=', company_id),('company_id', '=', False)]
|
||||||
|
</attribute>
|
||||||
|
<attribute name="attrs">{'required': [('bank_account_required', '=', True),('move_type', 'in', ('in_invoice', 'in_refund'))]}</attribute>
|
||||||
|
</field>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user