Add button 'delete lines qty = 0' on supplier invoices
Add filter missing attachment on invoices Add filter on to_send, sent on invoices
This commit is contained in:
@@ -30,6 +30,9 @@ This module has been written by Alexis de Lattre from Akretion <alexis.delattre@
|
|||||||
'author': 'Akretion',
|
'author': 'Akretion',
|
||||||
'website': 'http://www.akretion.com',
|
'website': 'http://www.akretion.com',
|
||||||
'depends': ['account'],
|
'depends': ['account'],
|
||||||
'data': ['account_view.xml'],
|
'data': [
|
||||||
|
'account_view.xml',
|
||||||
|
'partner_view.xml',
|
||||||
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,12 @@ class AccountInvoice(models.Model):
|
|||||||
# for invoice report
|
# for invoice report
|
||||||
has_discount = fields.Boolean(
|
has_discount = fields.Boolean(
|
||||||
compute='_compute_has_discount', readonly=True)
|
compute='_compute_has_discount', readonly=True)
|
||||||
|
# has_attachment is useful for those who use attachment to archive
|
||||||
|
# supplier invoices. It allows them to find supplier invoices
|
||||||
|
# that don't have any attachment
|
||||||
|
has_attachment = fields.Boolean(
|
||||||
|
compute='_compute_has_attachment',
|
||||||
|
search='_search_has_attachment', readonly=True)
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def _compute_has_discount(self):
|
def _compute_has_discount(self):
|
||||||
@@ -45,6 +51,30 @@ class AccountInvoice(models.Model):
|
|||||||
break
|
break
|
||||||
inv.has_discount = has_discount
|
inv.has_discount = has_discount
|
||||||
|
|
||||||
|
def _compute_has_attachment(self):
|
||||||
|
iao = self.env['ir.attachment']
|
||||||
|
for inv in self:
|
||||||
|
if iao.search([
|
||||||
|
('res_model', '=', 'account.invoice'),
|
||||||
|
('res_id', '=', inv.id),
|
||||||
|
('type', '=', 'binary'),
|
||||||
|
('company_id', '=', inv.company_id.id)], limit=1):
|
||||||
|
inv.has_attachment = True
|
||||||
|
else:
|
||||||
|
inv.has_attachment = False
|
||||||
|
|
||||||
|
def _search_has_attachment(self, operator, value):
|
||||||
|
att_inv_ids = {}
|
||||||
|
if operator == '=':
|
||||||
|
search_res = self.env['ir.attachment'].search_read([
|
||||||
|
('res_model', '=', 'account.invoice'),
|
||||||
|
('type', '=', 'binary'),
|
||||||
|
('res_id', '!=', False)], ['res_id'])
|
||||||
|
for att in search_res:
|
||||||
|
att_inv_ids[att['res_id']] = True
|
||||||
|
res = [('id', value and 'in' or 'not in', att_inv_ids.keys())]
|
||||||
|
return res
|
||||||
|
|
||||||
# I really hate to see a "/" in the 'name' field of the account.move.line
|
# I really hate to see a "/" in the 'name' field of the account.move.line
|
||||||
# generated from customer invoices linked to the partners' account because:
|
# generated from customer invoices linked to the partners' account because:
|
||||||
# 1) the label of an account move line is an important field, we can't
|
# 1) the label of an account move line is an important field, we can't
|
||||||
@@ -63,6 +93,12 @@ class AccountInvoice(models.Model):
|
|||||||
self.invalidate_cache()
|
self.invalidate_cache()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def delete_lines_qty_zero(self):
|
||||||
|
lines = self.env['account.invoice.line'].search([
|
||||||
|
('invoice_id', 'in', self.ids), ('quantity', '=', 0)])
|
||||||
|
lines.unlink()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
class AccountInvoiceLine(models.Model):
|
class AccountInvoiceLine(models.Model):
|
||||||
_inherit = 'account.invoice.line'
|
_inherit = 'account.invoice.line'
|
||||||
|
|||||||
@@ -16,6 +16,9 @@
|
|||||||
<field name="fiscal_position_id" position="attributes">
|
<field name="fiscal_position_id" position="attributes">
|
||||||
<attribute name="widget">selection</attribute>
|
<attribute name="widget">selection</attribute>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="invoice_line_ids" position="before">
|
||||||
|
<button name="delete_lines_qty_zero" states="draft" string="⇒ Delete lines qty=0" type="object" class="oe_link oe_right" groups="account.group_account_invoice"/>
|
||||||
|
</field>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
@@ -41,6 +44,21 @@
|
|||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<record id="view_account_invoice_filter" model="ir.ui.view">
|
||||||
|
<field name="name">account_usability.invoice.search</field>
|
||||||
|
<field name="model">account.invoice</field>
|
||||||
|
<field name="inherit_id" ref="account.view_account_invoice_filter"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<filter name="late" position="after">
|
||||||
|
<separator/>
|
||||||
|
<filter name="to_send" string="To Send" domain="[('sent', '=', False), ('state', 'in', ('open', 'paid'))]"/>
|
||||||
|
<filter name="sent" string="Sent" domain="[('sent', '=', True)]"/>
|
||||||
|
<separator/>
|
||||||
|
<filter name="no_attachment" string="Missing Attachment" domain="[('has_attachment', '=', False)]"/>
|
||||||
|
</filter>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<!-- Having a menu entry on invoice lines is often very usefull for odoo user:
|
<!-- Having a menu entry on invoice lines is often very usefull for odoo user:
|
||||||
they can search in their lines, etc...
|
they can search in their lines, etc...
|
||||||
So I enhance the generic views and add actions, but I don't add menu entries here ;
|
So I enhance the generic views and add actions, but I don't add menu entries here ;
|
||||||
|
|||||||
23
account_usability/partner_view.xml
Normal file
23
account_usability/partner_view.xml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
© 2017 Akretion (http://www.akretion.com/)
|
||||||
|
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
-->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
|
||||||
|
<record id="view_partner_property_form" model="ir.ui.view">
|
||||||
|
<field name="name">account_usability.res.partner.form</field>
|
||||||
|
<field name="model">res.partner</field>
|
||||||
|
<field name="inherit_id" ref="account.view_partner_property_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="property_account_position_id" position="attributes">
|
||||||
|
<attribute name="widget">selection</attribute>
|
||||||
|
</field>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user