Add check methods for accounting and improve search view of account.invoice.report

This commit is contained in:
Alexis de Lattre
2017-06-14 17:31:45 +02:00
parent d736663f3f
commit f83c948889
2 changed files with 71 additions and 0 deletions

View File

@@ -23,6 +23,8 @@
from openerp import models, fields, api, _
from openerp.tools import float_compare
from openerp.exceptions import Warning as UserError
import logging
logger = logging.getLogger(__name__)
class AccountInvoice(models.Model):
@@ -128,6 +130,28 @@ class AccountAccount(models.Model):
else:
return super(AccountAccount, self).name_get()
@api.model
def check_account_hierarchy(self):
'''designed to be called by a script'''
accounts = self.env['account.account'].search([])
parent_accounts = self
for account in accounts:
if account.parent_id and account.parent_id not in parent_accounts:
parent_accounts += account.parent_id
err_msg = []
view_user_type = self.env.ref('account.data_account_type_view')
for pacc in parent_accounts:
if pacc.type != 'view':
err_msg.append(_(
'Parent account %s should have type=view '
'(current type=%s)') % (pacc.code, pacc.type))
if pacc.user_type != view_user_type:
err_msg.append(_(
'Parent account %s should have user_type=view (current '
'(user_type=%s)') % (pacc.code, pacc.user_type.name))
if err_msg:
raise UserError('\n'.join(err_msg))
class AccountAnalyticAccount(models.Model):
_inherit = 'account.analytic.account'
@@ -164,6 +188,39 @@ class AccountMove(models.Model):
if self.date:
self.period_id = self.env['account.period'].find(self.date)
@api.model
def delete_move_no_lines(self):
'''designed to be called by a script'''
moves_no_lines = self.search([('line_id', '=', False)])
inv_moves_sr = self.env['account.invoice'].search_read(
[('move_id', '!=', False)], ['move_id'])
move2inv = {} # key=move_id, value=invoice_id
invoice_move_no_line = {} # key=ID, value=number
deleted_move_ids = []
for inv_move_sr in inv_moves_sr:
move2inv[inv_move_sr['move_id'][0]] = inv_move_sr['id']
for move in moves_no_lines:
for l in move.line_id:
raise UserError(_('Move %d has a line !') % move.id)
if move.id not in move2inv:
if move.state == 'posted':
move.state = 'draft'
deleted_move_ids.append(move.id)
move.unlink()
else:
invoice_move_no_line[move2inv[move.id]] = move.name
if deleted_move_ids:
logger.info(
'Account move IDs %s have been deleted because they '
'had 0 lines', deleted_move_ids)
else:
logger.info('0 moves without lines found')
if invoice_move_no_line:
for inv_id, inv_number in invoice_move_no_line.iteritems():
logger.info(
'Invoice ID %d number %s has a move with 0 lines',
inv_id, inv_number)
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'

View File

@@ -161,6 +161,20 @@ module -->
<field name="context">{'show_invoice_fields': True}</field>
</record>
<record id="view_account_invoice_report_search" model="ir.ui.view">
<field name="name">usability.account.invoice.report.search</field>
<field name="model">account.invoice.report</field>
<field name="inherit_id" ref="account.view_account_invoice_report_search"/>
<field name="arch" type="xml">
<field name="categ_id" position="after">
<field name="product_id"/>
</field>
<filter name="category_product" position="after">
<filter string="Product" name="product_group_by" context="{'group_by': 'product_id'}"/>
</filter>
</field>
</record>
<!-- model account.move.line / Journal Items -->
<record id="account.action_account_moves_all_a" model="ir.actions.act_window">
<field name="limit">200</field>