Skip to content

Instantly share code, notes, and snippets.

@eLBati
Created June 14, 2015 09:42
Show Gist options
  • Save eLBati/d46052662c03183e0cf8 to your computer and use it in GitHub Desktop.
Save eLBati/d46052662c03183e0cf8 to your computer and use it in GitHub Desktop.
diff --git a/7.0:l10n_it_ricevute_bancarie/riba.py..scigghia/8.0-riba:l10n_it_ricevute_bancarie/models/riba.py b/scigghia/8.0-riba:l10n_it_ricevute_bancarie/models/riba.py
index 6df9d96..ac81bd0 100644
--- a/7.0:l10n_it_ricevute_bancarie/riba.py..scigghia/8.0-riba:l10n_it_ricevute_bancarie/models/riba.py
+++ b/scigghia/8.0-riba:l10n_it_ricevute_bancarie/models/riba.py
@@ -1,13 +1,8 @@
# -*- coding: utf-8 -*-
+##############################################################################
#
-#
-# Copyright (C) 2012 Andrea Cometa.
-# Email: info@andreacometa.it
-# Web site: http://www.andreacometa.it
-# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
-# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
-# Copyright (C) 2012 Associazione OpenERP Italia
-# (<http://www.openerp-italia.org>).
+# Copyright (C) 2014 Associazione Odoo Italia
+# (<http://www.odoo-italia.org>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
@@ -22,275 +17,263 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
-#
+##############################################################################
-from openerp.osv import fields, orm
-import decimal_precision as dp
-import netsvc
-from tools.translate import _
+from openerp import fields, models, api, _, exceptions, workflow
+import time
+import openerp.addons.decimal_precision as dp
+# from openerp import netsvc
-class riba_distinta(orm.Model):
+class riba_list(models.Model):
- def _get_acceptance_move_ids(self, cr, uid, ids, field_name, arg, context):
+ @api.multi
+ def _get_acceptance_move_ids(self):
res = {}
- for distinta in self.browse(cr, uid, ids, context=context):
+ for list in self:
move_ids = []
- for line in distinta.line_ids:
- if (
- line.acceptance_move_id
- and line.acceptance_move_id.id not in move_ids
- ):
+ for line in list.line_ids:
+ if (line.acceptance_move_id and
+ line.acceptance_move_id.id not in move_ids):
move_ids.append(line.acceptance_move_id.id)
- res[distinta.id] = move_ids
+ res[list.id] = move_ids
return res
- def _get_unsolved_move_ids(self, cr, uid, ids, field_name, arg, context):
+ @api.multi
+ def _get_unsolved_move_ids(self):
res = {}
- for distinta in self.browse(cr, uid, ids, context=context):
+ for list in self:
move_ids = []
- for line in distinta.line_ids:
- if (
- line.unsolved_move_id
- and line.unsolved_move_id.id not in move_ids
- ):
+ for line in list.line_ids:
+ if (line.unsolved_move_id and
+ line.unsolved_move_id.id not in move_ids):
move_ids.append(line.unsolved_move_id.id)
- res[distinta.id] = move_ids
+ res[list.id] = move_ids
return res
- def _get_payment_ids(self, cr, uid, ids, field_name, arg, context):
+ @api.multi
+ def _get_payment_ids(self):
res = {}
- for distinta in self.browse(cr, uid, ids, context=context):
+ for list in self:
move_line_ids = []
- for line in distinta.line_ids:
+ for line in list.line_ids:
for payment in line.payment_ids:
if payment.id not in move_line_ids:
move_line_ids.append(payment.id)
- res[distinta.id] = move_line_ids
+ res[list.id] = move_line_ids
return res
- _name = 'riba.distinta'
- _description = 'Distinta Riba'
-
- _columns = {
- 'name': fields.char(
- 'Reference', size=128, required=True, readonly=True,
- states={'draft': [('readonly', False)]}),
- 'config': fields.many2one(
- 'riba.configurazione', 'Configuration',
- select=True, required=True, readonly=True,
- states={'draft': [('readonly', False)]},
- help='Riba configuration to be used'),
- 'state': fields.selection([
- ('draft', 'Draft'),
- ('accepted', 'Accepted'),
- ('accredited', 'Accredited'),
- ('paid', 'Paid'),
- ('unsolved', 'Unsolved'),
- ('cancel', 'Canceled')], 'State', select=True, readonly=True),
- 'line_ids': fields.one2many(
- 'riba.distinta.line', 'distinta_id',
- 'Riba deadlines', readonly=True,
- states={'draft': [('readonly', False)]}),
- 'user_id': fields.many2one(
- 'res.users', 'User', required=True, readonly=True,
- states={'draft': [('readonly', False)]}),
- 'date_created': fields.date('Creation date', readonly=True),
- 'date_accepted': fields.date('Acceptance date', readonly=True),
- 'date_accreditation': fields.date('Accreditation date', readonly=True),
- 'date_paid': fields.date('Paid date', readonly=True),
- 'date_unsolved': fields.date('Unsolved date', readonly=True),
- 'company_id': fields.many2one(
- 'res.company', 'Company', required=True, readonly=True,
- states={'draft': [('readonly', False)]}),
- 'acceptance_move_ids': fields.function(
- _get_acceptance_move_ids, type='many2many',
- relation='account.move', method=True, string="Acceptance Entries"),
- 'accreditation_move_id': fields.many2one(
- 'account.move', 'Accreditation Entry', readonly=True),
- 'payment_ids': fields.function(
- _get_payment_ids, relation='account.move.line', type="many2many",
- string='Payments'),
- 'unsolved_move_ids': fields.function(
- _get_unsolved_move_ids, type='many2many', relation='account.move',
- method=True, string="Unsolved Entries"),
- 'type': fields.related(
- 'config', 'tipo', type='char', size=32, string='Type',
- readonly=True),
- 'registration_date': fields.date(
- 'Registration Date',
- states={'draft': [('readonly', False)],
- 'cancel': [('readonly', False)], },
- select=True,
- readonly=True,
- required=True,
- help="Keep empty to use the current date"),
- }
-
- _defaults = {
- 'user_id': lambda self, cr, uid, context: uid,
- 'date_created': fields.date.context_today,
- 'name': lambda self, cr, uid, context: self.pool.get(
- 'ir.sequence').get(cr, uid, 'riba.distinta'),
- 'company_id': lambda self, cr, uid, c: self.pool.get(
- 'res.company'
- )._company_default_get(cr, uid, 'riba.distinta', context=c),
- 'registration_date': fields.date.context_today,
- }
-
- def unlink(self, cr, uid, ids, context=None):
- for distinta in self.browse(cr, uid, ids, context=context):
- if distinta.state not in ('draft', 'cancel'):
- raise orm.except_orm(
+ _name = 'riba.list'
+ _description = 'Riba list'
+
+ name = fields.Char(
+ 'Reference', size=128, required=True, readonly=True,
+ states={'draft': [('readonly', False)]},
+ default=(lambda self: self.env['ir.sequence'].get('riba.list')))
+ config_id = fields.Many2one(
+ 'riba.configuration', string='Configuration', select=True,
+ required=True, readonly=True, states={'draft': [('readonly', False)]},
+ help='Riba configuration to be used')
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('accepted', 'Accepted'),
+ ('accredited', 'Accredited'),
+ ('paid', 'Paid'),
+ ('unsolved', 'Unsolved'),
+ ('cancel', 'Canceled')], 'State', select=True, readonly=True,
+ default='draft')
+ line_ids = fields.One2many(
+ 'riba.list.line', 'list_id', 'Riba deadlines', readonly=True,
+ states={'draft': [('readonly', False)]})
+ user_id = fields.Many2one(
+ 'res.users', 'User', required=True, readonly=True,
+ states={'draft': [('readonly', False)]},
+ default=lambda self: self.env.user,)
+ date_created = fields.Date(
+ 'Creation date', readonly=True,
+ default=lambda self: fields.Date.context_today(self))
+ date_accepted = fields.Date('Acceptance date', readonly=True)
+ date_accreditation = fields.Date('Accreditation date', readonly=True)
+ date_paid = fields.Date('Paid date', readonly=True)
+ date_unsolved = fields.Date('Unsolved date', readonly=True)
+ company_id = fields.Many2one(
+ 'res.company', 'Company', required=True, readonly=True,
+ states={'draft': [('readonly', False)]},
+ default=lambda self: self.env['res.company']._company_default_get(
+ 'riba.list'))
+ acceptance_move_ids = fields.Many2many(
+ compute='_get_acceptance_move_ids', string="Acceptance Entries")
+ accreditation_move_id = fields.Many2one(
+ 'account.move', 'Accreditation Entry', readonly=True)
+ payment_ids = fields.Many2many(
+ 'account.move.line', compute='_get_payment_ids', string='Payments')
+ unsolved_move_ids = fields.Many2many(
+ compute='_get_unsolved_move_ids', string="Unsolved Entries")
+ type = fields.Selection(
+ string="Type", related='config_id.type', readonly=True)
+ registration_date = fields.Date(
+ 'Registration Date',
+ states={'draft': [('readonly', False)],
+ 'cancel': [('readonly', False)], },
+ select=True, readonly=True,
+ required=True,
+ default=lambda self: fields.Date.context_today(self),
+ help="Keep empty to use the current date")
+
+ @api.multi
+ def unlink(self): # , cr, uid, ids, context=None):
+ for list in self: # .browse(cr, uid, ids, context=context):
+ if list.state not in ('draft', 'cancel'):
+ raise exceptions.Warning(
_('Error'),
- _('Distinta %s is in state %s. You can only delete '
- 'documents in state draft or canceled')
- % (distinta.name, distinta.state))
- super(riba_distinta, self).unlink(cr, uid, ids, context=context)
- return True
-
- def confirm(self, cr, uid, ids, context=None):
- line_pool = self.pool.get('riba.distinta.line')
- for distinta in self.browse(cr, uid, ids, context=context):
- line_pool.confirm(
- cr, uid, [line.id for line in distinta.line_ids],
- context=context)
- return True
-
- def riba_new(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {
- 'state': 'draft',
- }, context=context)
- return True
-
- def riba_cancel(self, cr, uid, ids, context=None):
- for distinta in self.browse(cr, uid, ids, context=context):
+ _('List %s is in state %s. You can only delete documents \
+in state draft or canceled') % (list.name, list.state))
+ super(riba_list, self).unlink() # cr, uid, ids, context=context)
+
+ @api.multi
+ def confirm(self): # , cr, uid, ids, context=None):
+ for list in self: # .browse(cr, uid, ids, context=context):
+ for line in list.line_ids:
+ line.confirm()
+
+ @api.one
+ def riba_new(self): # , cr, uid, ids, context=None):
+ self.state = 'draft'
+
+ @api.multi
+ def riba_cancel(self): # , cr, uid, ids, context=None):
+ for list in self: # .browse(cr, uid, ids, context=context):
# TODO remove ervery other move
- for line in distinta.line_ids:
+ for line in list.line_ids:
if line.acceptance_move_id:
line.acceptance_move_id.unlink()
if line.unsolved_move_id:
line.unsolved_move_id.unlink()
- if distinta.accreditation_move_id:
- distinta.accreditation_move_id.unlink()
- self.write(cr, uid, ids, {
- 'state': 'cancel',
- }, context=context)
- return True
-
- def riba_accepted(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {
- 'state': 'accepted',
- 'date_accepted': fields.date.context_today(
- self, cr, uid, context),
- }, context=context)
- return True
-
- def riba_accredited(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {
- 'state': 'accredited',
- 'date_accreditation': fields.date.context_today(
- self, cr, uid, context),
- }, context=context)
- for distinta in self.browse(cr, uid, ids, context=context):
- for line in distinta.line_ids:
- line.write({'state': 'accredited'})
- return True
-
- def riba_paid(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {
- 'state': 'paid',
- 'date_paid': fields.date.context_today(
- self, cr, uid, context),
- }, context=context)
- return True
-
- def riba_unsolved(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {
- 'state': 'unsolved',
- 'date_unsolved': fields.date.context_today(
- self, cr, uid, context),
- }, context=context)
- return True
-
- def test_accepted(self, cr, uid, ids, *args):
- for distinta in self.browse(cr, uid, ids):
- for line in distinta.line_ids:
+ if list.accreditation_move_id:
+ list.accreditation_move_id.unlink()
+ line.state = 'cancel' # was self.write(state=cancel)
+
+ @api.one
+ def riba_accepted(self): # , cr, uid, ids, context=None):
+ self.state = 'accepted'
+ self.date_accepted = fields.Date.context_today(self)
+
+ @api.one
+ def riba_accredited(self): # , cr, uid, ids, context=None):
+ self.state = 'accredited'
+ self.date_accreditation = fields.Date.context_today(self)
+ for list in self: # .browse(cr, uid, ids, context=context):
+ for line in list.line_ids:
+ line.state = 'accredited'
+
+ @api.one
+ def riba_paid(self): # , cr, uid, ids, context=None):
+ self.state = 'paid'
+ self.date_paid = fields.Date.context_today(self)
+
+ @api.one
+ def riba_unsolved(self): # , cr, uid, ids, context=None):
+ self.state = 'unsolved'
+ self.date_unsolved = fields.Date.context_today(self)
+
+ @api.multi
+ def test_accepted(self): # , cr, uid, ids, *args):
+ for list in self: # .browse(cr, uid, ids):
+ for line in list.line_ids:
if line.state != 'confirmed':
return False
return True
- def test_unsolved(self, cr, uid, ids, *args):
- for distinta in self.browse(cr, uid, ids):
- for line in distinta.line_ids:
+ @api.multi
+ def test_unsolved(self): # , cr, uid, ids, *args):
+ for list in self: # .browse(cr, uid, ids):
+ for line in list.line_ids:
if line.state != 'unsolved':
return False
return True
- def test_paid(self, cr, uid, ids, *args):
- for distinta in self.browse(cr, uid, ids):
- for line in distinta.line_ids:
+ @api.multi
+ def test_paid(self): # , cr, uid, ids, *args):
+ for list in self: # .browse(cr, uid, ids):
+ for line in list.line_ids:
if line.state != 'paid':
return False
return True
- def action_cancel_draft(self, cr, uid, ids, *args):
- self.write(cr, uid, ids, {'state': 'draft'})
- wf_service = netsvc.LocalService("workflow")
- for distinta_id in ids:
- wf_service.trg_delete(uid, 'riba.distinta', distinta_id, cr)
- wf_service.trg_create(uid, 'riba.distinta', distinta_id, cr)
- return True
-
-
-class riba_distinta_line(orm.Model):
+ @api.multi
+ def action_cancel_draft(self): # , cr, uid, ids, *args):
+ # self.state = 'draft'
+ # wf_service = netsvc.LocalService("workflow")
+ for list in self:
+ workflow.trg_delete(
+ self.env.user.id, 'riba.list', list.id, self._cr)
+ workflow.trg_create(
+ self.env.user.id, 'riba.list', list.id, self._cr)
+ list.state = 'draft'
+
+
+class riba_list_line(models.Model):
+ # TODO estendere la account_due_list per visualizzare e filtrare
+ # in base alle riba ?
+ _name = 'riba.list.line'
+ _description = 'Riba details'
+ _rec_name = 'sequence'
- def _get_line_values(self, cr, uid, ids, field_name, arg, context):
- res = {}
- for line in self.browse(cr, uid, ids, context=context):
- res[line.id] = {}
- res[line.id]['amount'] = 0.0
- res[line.id]['invoice_date'] = ''
- res[line.id]['invoice_number'] = ''
+ @api.multi
+ def _get_line_values(self):
+ # res = {}
+ for line in self:
+ # res[line.id] = {}
+ line.amount = 0.0
+ line.invoice_date = ""
+ line.invoice_number = ""
for move_line in line.move_line_ids:
- res[line.id]['amount'] += move_line.amount
- if not res[line.id]['invoice_date']:
- res[line.id]['invoice_date'] = str(
+ line.amount += move_line.amount
+ if not line.invoice_date:
+ line.invoice_date = str(
move_line.move_line_id.invoice.date_invoice)
else:
- res[line.id]['invoice_date'] += ', ' + str(
- move_line.move_line_id.invoice.date_invoice)
- if not res[line.id]['invoice_number']:
- res[line.id]['invoice_number'] = str(
+ line.invoice_date = "%s, %s" % (line.invoice_date, str(
+ move_line.move_line_id.invoice.date_invoice))
+ if not line.invoice_number:
+ line.invoice_number = str(
move_line.move_line_id.invoice.internal_number)
else:
- res[line.id]['invoice_number'] += ', ' + str(
- move_line.move_line_id.invoice.internal_number)
- return res
-
- def _reconciled(self, cr, uid, ids, name, args, context=None):
- wf_service = netsvc.LocalService("workflow")
+ line.invoice_number = "%s, %s" % (line.invoice_number, str(
+ move_line.move_line_id.invoice.internal_number))
+
+ amount = fields.Float(
+ compute='_get_line_values', string="Amount")
+ invoice_date = fields.Char(
+ compute='_get_line_values', string="Invoice Date", size=256)
+ invoice_number = fields.Char(
+ compute='_get_line_values', string="Invoice Number", size=256)
+
+ @api.multi
+ def _reconciled(self): # , cr, uid, ids, name, args, context=None):
+ # wf_service = netsvc.LocalService("workflow")
res = {}
- for rec_id in ids:
- res[rec_id] = self.test_paid(cr, uid, [rec_id])
- if res[rec_id]:
- self.write(cr, uid, rec_id, {'state': 'paid'}, context=context)
- wf_service.trg_validate(
- uid, 'riba.distinta',
- self.browse(cr, uid, rec_id).distinta_id.id, 'paid', cr)
+ for line in self:
+ res[line.id] = line.test_paid()
+ if res[line.id]:
+ line.state = 'paid'
+ workflow.trg_validate(
+ self.env.user.id, 'riba.list',
+ line.list_id.id, 'paid', cr)
return res
- def move_line_id_payment_gets(self, cr, uid, ids, *args):
+ @api.one
+ def move_line_id_payment_gets(self): # , cr, uid, ids, *args):
res = {}
- if not ids:
+ if not self:
return res
- cr.execute('SELECT distinta_line.id, l.id '
+ cr.execute('SELECT list_line.id, l.id '
'FROM account_move_line l '
- 'LEFT JOIN riba_distinta_line distinta_line ON '
- '(distinta_line.acceptance_move_id=l.move_id) '
- 'WHERE distinta_line.id IN %s '
- 'AND l.account_id=distinta_line.acceptance_account_id',
- (tuple(ids),))
+ 'LEFT JOIN riba_list_line list_line ON '
+ '(list_line.acceptance_move_id=l.move_id) '
+ 'WHERE list_line.id IN %s '
+ 'AND l.account_id=list_line.acceptance_account_id',
+ (tuple([line.id for line in self]),))
for r in cr.fetchall():
res.setdefault(r[0], [])
res[r[0]].append(r[1])
@@ -298,32 +281,32 @@ class riba_distinta_line(orm.Model):
# return the ids of the move lines which has the same account than the
# statement whose id is in ids
- def move_line_id_payment_get(self, cr, uid, ids, *args):
- if not ids:
+ @api.multi
+ def move_line_id_payment_get(self): # , cr, uid, ids, *args):
+ if not self:
return []
- result = self.move_line_id_payment_gets(cr, uid, ids, *args)
+ ids = [x.id for x in self]
+ result = self.move_line_id_payment_gets(ids) # cr, uid, ids, *args)
return result.get(ids[0], [])
- def test_paid(self, cr, uid, ids, *args):
- for line in self.browse(cr, uid, ids):
- if line.state == 'unsolved':
- return False
- res = self.move_line_id_payment_get(cr, uid, ids)
+ @api.multi
+ def test_paid(self): # , cr, uid, ids, *args):
+ ids = [x.id for x in self]
+ res = self.move_line_id_payment_get(ids)
if not res:
return False
ok = True
- for rec_id in res:
+ for id in res:
cr.execute(
'select reconcile_id from account_move_line where id=%s',
- (rec_id,))
+ (id,))
ok = ok and bool(cr.fetchone()[0])
return ok
def _get_riba_line_from_move_line(self, cr, uid, ids, context=None):
move = {}
- for line in self.pool.get('account.move.line').browse(
- cr, uid, ids, context=context
- ):
+ for line in self.pool['account.move.line'].browse(cr, uid, ids,
+ context=context):
if line.reconcile_partial_id:
for line2 in line.reconcile_partial_id.line_partial_ids:
move[line2.move_id.id] = True
@@ -332,30 +315,30 @@ class riba_distinta_line(orm.Model):
move[line2.move_id.id] = True
line_ids = []
if move:
- line_ids = self.pool.get('riba.distinta.line').search(
+ line_ids = self.pool['riba.list.line'].search(
cr, uid, [('acceptance_move_id', 'in', move.keys())],
context=context)
return line_ids
def _get_line_from_reconcile(self, cr, uid, ids, context=None):
move = {}
- for r in self.pool.get('account.move.reconcile').browse(
- cr, uid, ids, context=context
- ):
+ for r in self.pool['account.move.reconcile'].browse(cr, uid, ids,
+ context=context):
for line in r.line_partial_ids:
move[line.move_id.id] = True
for line in r.line_id:
move[line.move_id.id] = True
line_ids = []
if move:
- line_ids = self.pool.get('riba.distinta.line').search(
+ line_ids = self.pool.get('riba.list.line').search(
cr, uid, [('acceptance_move_id', 'in', move.keys())],
context=context)
return line_ids
- def _compute_lines(self, cr, uid, ids, name, args, context=None):
+ @api.multi
+ def _compute_lines(self):
result = {}
- for riba_line in self.browse(cr, uid, ids, context=context):
+ for riba_line in self:
src = []
lines = []
if riba_line.acceptance_move_id:
@@ -375,134 +358,118 @@ class riba_distinta_line(orm.Model):
result[riba_line.id] = lines
return result
- # TODO estendere la account_due_list per visualizzare e filtrare in base
- # alle riba ?
- _name = 'riba.distinta.line'
- _description = 'Riba details'
- _rec_name = 'sequence'
-
- _columns = {
- 'sequence': fields.integer('Number'),
- 'move_line_ids': fields.one2many(
- 'riba.distinta.move.line', 'riba_line_id', 'Credit move lines'),
- 'acceptance_move_id': fields.many2one(
- 'account.move', 'Acceptance Entry', readonly=True),
- 'unsolved_move_id': fields.many2one(
- 'account.move', 'Unsolved Entry', readonly=True),
- 'acceptance_account_id': fields.many2one(
- 'account.account', 'Acceptance Account'),
- 'amount': fields.function(
- _get_line_values, method=True, string="Amount", multi="line"),
- 'bank_id': fields.many2one('res.partner.bank', 'Debitor Bank'),
- 'iban': fields.related(
- 'bank_id', 'iban', type='char', string='IBAN', store=False,
- readonly=True),
- 'distinta_id': fields.many2one(
- 'riba.distinta', 'Distinta', required=True, ondelete='cascade'),
- 'partner_id': fields.many2one('res.partner', "Cliente", readonly=True),
- 'invoice_date': fields.function(
- _get_line_values, string="Invoice Date", type='char', size=256,
- method=True, multi="line"),
- 'invoice_number': fields.function(
- _get_line_values, string="Invoice Number", type='char', size=256,
- method=True, multi="line"),
- 'due_date': fields.date("Due date", readonly=True),
- 'state': fields.selection([
- ('draft', 'Draft'),
- ('confirmed', 'Confirmed'),
- ('accredited', 'Accredited'),
- ('paid', 'Paid'),
- ('unsolved', 'Unsolved'),
- ], 'State', select=True, readonly=True),
- 'reconciled': fields.function(
- _reconciled, string='Paid/Reconciled', type='boolean',
- store={
- 'riba.distinta.line': (lambda self, cr, uid, ids, c={}: ids, [
- 'acceptance_move_id'], 50),
- 'account.move.line': (_get_riba_line_from_move_line, None, 50),
- 'account.move.reconcile': (_get_line_from_reconcile, None, 50),
- },
- help="It indicates that the line has been paid and the journal "
- "entry of the line has been reconciled with one or several "
- "journal entries of payment."),
- 'payment_ids': fields.function(
- _compute_lines, relation='account.move.line', type="many2many",
- string='Payments'),
- 'type': fields.related(
- 'distinta_id', 'type', type='char', size=32, string='Type',
- readonly=True),
- }
-
- def confirm(self, cr, uid, ids, context=None):
- move_pool = self.pool.get('account.move')
- move_line_pool = self.pool.get('account.move.line')
- wf_service = netsvc.LocalService("workflow")
- for line in self.browse(cr, uid, ids, context=context):
- journal = line.distinta_id.config.acceptance_journal_id
+ sequence = fields.Integer('Number')
+ move_line_ids = fields.One2many(
+ 'riba.list.move.line', 'riba_line_id', string='Credit move lines')
+ acceptance_move_id = fields.Many2one(
+ 'account.move', string='Acceptance Entry', readonly=True)
+ unsolved_move_id = fields.Many2one(
+ 'account.move', string='Unsolved Entry', readonly=True)
+ acceptance_account_id = fields.Many2one(
+ 'account.account', string='Acceptance Account')
+ bank_id = fields.Many2one('res.partner.bank', string='Debitor Bank')
+ iban = fields.Char(
+ related='bank_id.iban', string='IBAN', store=False,
+ readonly=True)
+ list_id = fields.Many2one(
+ 'riba.list', string='List', required=True, ondelete='cascade')
+ partner_id = fields.Many2one(
+ 'res.partner', string="Cliente", readonly=True)
+ due_date = fields.Date("Due date", readonly=True)
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('confirmed', 'Confirmed'),
+ ('accredited', 'Accredited'),
+ ('paid', 'Paid'),
+ ('unsolved', 'Unsolved'),
+ ], 'State', select=True, readonly=True, track_visibility='onchange')
+ reconciled = fields.Boolean(
+ compute='_reconciled', string='Paid/Reconciled',
+ store=True,
+ help="It indicates that the line has been paid and the journal \
+entry of the line has been reconciled with one or several journal entries of \
+payment.")
+ """
+ store={
+ 'riba.list.line': (lambda self, cr, uid, ids, c={}: ids,
+ ['acceptance_move_id'], 50),
+ 'account.move.line': (_get_riba_line_from_move_line, None, 50),
+ 'account.move.reconcile': (_get_line_from_reconcile, None, 50),
+ },
+ """
+ payment_ids = fields.Many2many(
+ 'account.move.line', compute='_compute_lines', string='Payments')
+ type = fields.Char(
+ relation='list_id.type', size=32, string='Type', readonly=True)
+
+ @api.multi
+ def confirm(self): # , cr, uid, ids, context=None):
+ move_pool = self.pool['account.move']
+ move_line_pool = self.pool['account.move.line']
+ # wf_service = netsvc.LocalService("workflow")
+ for line in self: # .browse(cr, uid, ids, context=context):
+ journal = line.list_id.config_id.acceptance_journal_id
total_credit = 0.0
- move_id = move_pool.create(cr, uid, {
- 'ref': 'Ri.Ba. %s - line %s' % (
- line.distinta_id.name, line.sequence),
+ move_id = move_pool.create(self._cr, self.env.user.id, {
+ 'ref': 'Ri.Ba. %s - line %s' % (line.list_id.name,
+ line.sequence),
'journal_id': journal.id,
- 'date': line.distinta_id.registration_date,
- }, context=context)
+ 'date': line.list_id.registration_date,
+ }, self._context)
to_be_reconciled = []
for riba_move_line in line.move_line_ids:
total_credit += riba_move_line.amount
- move_line_id = move_line_pool.create(cr, uid, {
- 'name': (
- riba_move_line.move_line_id.invoice
- and riba_move_line.move_line_id.invoice.number
- or riba_move_line.move_line_id.name
- ),
- 'partner_id': line.partner_id.id,
- 'account_id': riba_move_line.move_line_id.account_id.id,
- 'credit': riba_move_line.amount,
- 'debit': 0.0,
- 'move_id': move_id,
- }, context=context)
- to_be_reconciled.append(
- [move_line_id, riba_move_line.move_line_id.id])
- move_line_pool.create(
- cr, uid, {
- 'name': 'Ri.Ba. %s - line %s' % (
- line.distinta_id.name, line.sequence),
- 'account_id': (
- line.acceptance_account_id.id or
- line.distinta_id.config.acceptance_account_id.id
- # in questo modo se la riga non ha conto accettazione
- # viene prelevato il conto in configurazione riba
+ move_line_id = move_line_pool.create(
+ self._cr, self.env.user.id, {
+ 'name': riba_move_line.move_line_id.invoice.number,
+ 'partner_id': line.partner_id.id,
+ 'account_id': (
+ riba_move_line.move_line_id.account_id.id),
+ 'credit': riba_move_line.amount,
+ 'debit': 0.0,
+ 'move_id': move_id,
+ }, self._context)
+ to_be_reconciled.append([move_line_id,
+ riba_move_line.move_line_id.id])
+ move_line_pool.create(self._cr, self.env.user.id, {
+ 'name': 'Ri.Ba. %s - line %s' % (line.list_id.name,
+ line.sequence),
+ 'account_id': (
+ line.acceptance_account_id.id or
+ line.list_id.config_id.acceptance_account_id.id
+ # in questo modo se la riga non ha conto accettazione
+ # viene prelevato il conto in configuration riba
),
- 'partner_id': line.partner_id.id,
- 'date_maturity': line.due_date,
- 'credit': 0.0,
- 'debit': total_credit,
- 'move_id': move_id,
- }, context=context)
- move_pool.post(cr, uid, [move_id], context=context)
+ 'partner_id': line.partner_id.id,
+ 'date_maturity': line.due_date,
+ 'credit': 0.0,
+ 'debit': total_credit,
+ 'move_id': move_id,
+ }, self._context)
+ move_pool.post(
+ self._cr, self.env.user.id, [move_id], self._context)
for reconcile_ids in to_be_reconciled:
- move_line_pool.reconcile_partial(
- cr, uid, reconcile_ids, context=context)
+ move_line_pool.reconcile_partial(self._cr, self.env.user.id,
+ reconcile_ids,
+ self._context)
line.write({
'acceptance_move_id': move_id,
'state': 'confirmed',
- })
- wf_service.trg_validate(
- uid, 'riba.distinta', line.distinta_id.id, 'accepted', cr)
- return True
+ })
+ workflow.trg_validate(
+ self.env.user.id, 'riba.list', line.list_id.id, 'accepted',
+ self._cr)
-class riba_distinta_move_line(orm.Model):
+class riba_list_move_line(models.Model):
- _name = 'riba.distinta.move.line'
+ _name = 'riba.list.move.line'
_description = 'Riba details'
_rec_name = 'amount'
- _columns = {
- 'amount': fields.float(
- 'Amount', digits_compute=dp.get_precision('Account')),
- 'move_line_id': fields.many2one(
- 'account.move.line', 'Credit move line'),
- 'riba_line_id': fields.many2one(
- 'riba.distinta.line', 'Distinta line', ondelete='cascade'),
- }
+ amount = fields.Float(
+ 'Amount', digits_compute=dp.get_precision('Account'))
+ move_line_id = fields.Many2one(
+ 'account.move.line', string='Credit move line')
+ riba_line_id = fields.Many2one(
+ 'riba.list.line', string='List line', ondelete='cascade')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment