From 918370f15b08593ea44885ac019cea588c4ddea5 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Mon, 21 May 2012 10:20:57 +0200 Subject: [PATCH 01/56] [ADD] l10n_it_ricevute_bancarie moving from https://code.launchpad.net/~openobject-italia-core-devs/openobject-italia/l10n_it_ricevute_bancarie --- l10n_it_ricevute_bancarie/AUTHORS.txt | 2 + l10n_it_ricevute_bancarie/__init__.py | 33 + l10n_it_ricevute_bancarie/__openerp__.py | 71 ++ l10n_it_ricevute_bancarie/account/__init__.py | 13 + l10n_it_ricevute_bancarie/account/account.py | 87 ++ .../account/account_view.xml | 152 +++ l10n_it_ricevute_bancarie/configurazione.py | 88 ++ .../configurazione_view.xml | 51 + l10n_it_ricevute_bancarie/i18n/it.po | 1126 +++++++++++++++++ l10n_it_ricevute_bancarie/partner/__init__.py | 13 + l10n_it_ricevute_bancarie/partner/partner.py | 40 + .../partner/partner_view.xml | 23 + .../reports/jasper_riba_distinta.jasper | Bin 0 -> 73160 bytes .../reports/jasper_riba_distinta.jrxml | 246 ++++ l10n_it_ricevute_bancarie/reports/reports.xml | 16 + .../reports/riba.distinta.3.xml | 1 + l10n_it_ricevute_bancarie/riba.py | 404 ++++++ l10n_it_ricevute_bancarie/riba_sequence.xml | 17 + l10n_it_ricevute_bancarie/riba_view.xml | 182 +++ l10n_it_ricevute_bancarie/riba_workflow.xml | 112 ++ .../security/ir.model.access.csv | 15 + l10n_it_ricevute_bancarie/wizard/__init__.py | 31 + .../wizard/riba_file_export.py | 249 ++++ .../wizard/riba_file_export.xml | 33 + .../wizard/wizard_accreditation.py | 141 +++ .../wizard/wizard_accreditation.xml | 42 + .../wizard/wizard_emissione_riba.py | 134 ++ .../wizard/wizard_emissione_riba.xml | 51 + .../wizard/wizard_unsolved.py | 180 +++ .../wizard/wizard_unsolved.xml | 46 + 30 files changed, 3599 insertions(+) create mode 100644 l10n_it_ricevute_bancarie/AUTHORS.txt create mode 100755 l10n_it_ricevute_bancarie/__init__.py create mode 100755 l10n_it_ricevute_bancarie/__openerp__.py create mode 100755 l10n_it_ricevute_bancarie/account/__init__.py create mode 100644 l10n_it_ricevute_bancarie/account/account.py create mode 100644 l10n_it_ricevute_bancarie/account/account_view.xml create mode 100644 l10n_it_ricevute_bancarie/configurazione.py create mode 100644 l10n_it_ricevute_bancarie/configurazione_view.xml create mode 100644 l10n_it_ricevute_bancarie/i18n/it.po create mode 100755 l10n_it_ricevute_bancarie/partner/__init__.py create mode 100644 l10n_it_ricevute_bancarie/partner/partner.py create mode 100644 l10n_it_ricevute_bancarie/partner/partner_view.xml create mode 100644 l10n_it_ricevute_bancarie/reports/jasper_riba_distinta.jasper create mode 100644 l10n_it_ricevute_bancarie/reports/jasper_riba_distinta.jrxml create mode 100644 l10n_it_ricevute_bancarie/reports/reports.xml create mode 100644 l10n_it_ricevute_bancarie/reports/riba.distinta.3.xml create mode 100644 l10n_it_ricevute_bancarie/riba.py create mode 100755 l10n_it_ricevute_bancarie/riba_sequence.xml create mode 100644 l10n_it_ricevute_bancarie/riba_view.xml create mode 100644 l10n_it_ricevute_bancarie/riba_workflow.xml create mode 100644 l10n_it_ricevute_bancarie/security/ir.model.access.csv create mode 100644 l10n_it_ricevute_bancarie/wizard/__init__.py create mode 100755 l10n_it_ricevute_bancarie/wizard/riba_file_export.py create mode 100755 l10n_it_ricevute_bancarie/wizard/riba_file_export.xml create mode 100644 l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py create mode 100644 l10n_it_ricevute_bancarie/wizard/wizard_accreditation.xml create mode 100644 l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.py create mode 100644 l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.xml create mode 100644 l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py create mode 100644 l10n_it_ricevute_bancarie/wizard/wizard_unsolved.xml diff --git a/l10n_it_ricevute_bancarie/AUTHORS.txt b/l10n_it_ricevute_bancarie/AUTHORS.txt new file mode 100644 index 000000000000..07c1905c4342 --- /dev/null +++ b/l10n_it_ricevute_bancarie/AUTHORS.txt @@ -0,0 +1,2 @@ +Lorenzo Battistini +Andrea Cometa diff --git a/l10n_it_ricevute_bancarie/__init__.py b/l10n_it_ricevute_bancarie/__init__.py new file mode 100755 index 000000000000..a6fb0f3b1b49 --- /dev/null +++ b/l10n_it_ricevute_bancarie/__init__.py @@ -0,0 +1,33 @@ +# -*- 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 () +# Copyright (C) 2012 Domsense srl () +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# All Rights Reserved +# +# 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 +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import configurazione +import partner +import riba +import account +import wizard + diff --git a/l10n_it_ricevute_bancarie/__openerp__.py b/l10n_it_ricevute_bancarie/__openerp__.py new file mode 100755 index 000000000000..cb67cb3dfd34 --- /dev/null +++ b/l10n_it_ricevute_bancarie/__openerp__.py @@ -0,0 +1,71 @@ +# -*- 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 () +# Copyright (C) 2012 Domsense srl () +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# All Rights Reserved +# +# 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 +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + "name": "Ricevute Bancarie", + "version": "1.3", + "author": "OpenERP Italian Community", + "category": "Accounting & Finance", + "website": "http://www.openerp-italia.org", + "description": """ +Gestione delle Ricevute Bancarie +-------------------------------- +Nella configurazione delle Ri.Ba. è possibile specificare se si tratti di 'salvo buon fine' o 'al dopo incasso'. I due tipi di Ri.Ba. hanno un flusso completamente diverso. In caso di 'al dopo incasso', nessuna registrazione verrà effettuata automaticamente e le fatture risulteranno pagate solo al momento dell'effettivo incasso. + +E' possibile specificare diverse configurazioni (dal menù configurazioni -> varie -> Ri.Ba.). Per ognuna, in caso di 'salvo buon fine', è necessario specificare almeno il sezionale ed il conto da utilizzare al momento dell'accettazione della distinta da parte della banca. +La configurazione relativa alla fase di accredito, verrà usata nel momento in cui la banca accredita l'importo della distinta. Mentre quella relativa all'insoluto verrà utilizzato in caso di mancato pagamento da parte del cliente. + +Per utilizzare il meccanismo delle Ri.Ba. è necessario configurare un termine di pagamento di tipo 'Ri.Ba.'. + +Per emettere una distinta bisogna andare su Ri.Ba. -> emetti Ri.Ba. e selezionare i pagamenti per i quali emettere la distinta. +Se per il cliente è stato abilitato il raggruppo, i pagamenti dello stesso cliente e con la stessa data di scadenza andranno a costituire un solo elemento della distinta. + +I possibili stati della distinta sono: bozza, accettata, accreditata, pagata, insoluta, annullata. +Ad ogni passaggio di stato sarà possibile generare le relative registrazioni contabili, le quali verranno riepilogate nel tab 'contabilità'. Questo tab è presente sia sulla distinta che sulle sue righe. + """, + 'images': [], + 'depends': ['account','account_voucher', 'l10n_it_account', 'account_due_list'], + 'init_xml': [], + 'update_xml': [ + "partner/partner_view.xml", + "configurazione_view.xml", + "riba_sequence.xml", + "wizard/wizard_accreditation.xml", + "wizard/wizard_unsolved.xml", + "riba_view.xml", + "account/account_view.xml", + "wizard/wizard_emissione_riba.xml", + "wizard/riba_file_export.xml", + "reports/reports.xml", + "riba_workflow.xml", + "security/ir.model.access.csv", + ], + 'demo_xml': [], + 'test': [], + 'installable': True, + 'active': False, +} diff --git a/l10n_it_ricevute_bancarie/account/__init__.py b/l10n_it_ricevute_bancarie/account/__init__.py new file mode 100755 index 000000000000..82ca753f76fc --- /dev/null +++ b/l10n_it_ricevute_bancarie/account/__init__.py @@ -0,0 +1,13 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Addon realizzata da Andrea Cometa +# Compatible with OpenERP release 6.x +# Copyright (C) 2012 Andrea Cometa. All Rights Reserved. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# +############################################################################## + +import account + diff --git a/l10n_it_ricevute_bancarie/account/account.py b/l10n_it_ricevute_bancarie/account/account.py new file mode 100644 index 000000000000..f600777d3217 --- /dev/null +++ b/l10n_it_ricevute_bancarie/account/account.py @@ -0,0 +1,87 @@ +# -*- 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 () +# Copyright (C) 2012 Domsense srl () +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# All Rights Reserved +# +# 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 +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import fields, osv + +class account_payment_term(osv.osv): + # flag riba utile a distinguere la modalità di pagamento + _inherit = 'account.payment.term' + + _columns = { + 'riba' : fields.boolean('Riba'), + } + _defaults = { + 'riba': False, + } +account_payment_term() + +class res_bank_add_field(osv.osv): + _inherit = 'res.bank' + _columns = { + 'banca_estera' : fields.boolean('Banca Estera'), + } +res_bank_add_field() + +class res_partner_bank_add(osv.osv): + _inherit = 'res.partner.bank' + _columns = { + 'codice_sia' : fields.char('Codice SIA', size=5, help="Identification Code of the Company in the System Interbank") + } +res_partner_bank_add() + +# se distinta_line_ids == None allora non è stata emessa +class account_move_line(osv.osv): + _inherit = "account.move.line" + + _columns = { + 'distinta_line_ids' : fields.one2many('riba.distinta.move.line', 'move_line_id', "Dettaglio riba"), + 'riba': fields.related('invoice', 'payment_term', 'riba', + type='boolean', string='RiBa', store=False), + 'unsolved_invoice_ids': fields.many2many('account.invoice', 'invoice_unsolved_line_rel', 'line_id', 'invoice_id', 'Unsolved Invoices'), + } + _defaults = { + 'distinta_line_ids' : None, + } + + def fields_view_get(self, cr, uid, view_id=None, view_type='form', context={}, toolbar=False, submenu=False): + view_payments_tree_id = self.pool.get('ir.model.data').get_object_reference( + cr, uid, 'l10n_it_ricevute_bancarie', 'view_riba_da_emettere_tree') + if view_id == view_payments_tree_id[1]: + # Use RiBa list - grazie a eLBati @ account_due_list + result = super(osv.osv, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu) + else: + # Use special views for account.move.line object (for ex. tree view contains user defined fields) + result = super(account_move_line, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu) + return result + +account_move_line() + +class account_invoice(osv.osv): + _inherit = "account.invoice" + _columns = { + 'unsolved_move_line_ids': fields.many2many('account.move.line', 'invoice_unsolved_line_rel', 'invoice_id', 'line_id', 'Unsolved journal items'), + } diff --git a/l10n_it_ricevute_bancarie/account/account_view.xml b/l10n_it_ricevute_bancarie/account/account_view.xml new file mode 100644 index 000000000000..7bcc7e1deeff --- /dev/null +++ b/l10n_it_ricevute_bancarie/account/account_view.xml @@ -0,0 +1,152 @@ + + + + + + + + + account.riba.add.text.field + account.payment.term + + form + + + + + + + + res.bank.add.text.field + res.bank + + form + + + + + + + + res.partner.form.sia.inherit + res.partner + + form + + + + + + + + + + + + + Issue Ri.Ba. + account.move.line + tree + + + + + + + + + + + + + + + + + + + + + Ri.Ba. filter + account.move.line + search + + + + + + + + + + + + + + + + + + + + + Issue Ri.Ba. + ir.actions.act_window + account.move.line + account.move.line + form + tree,form + + {'search_default_da_emettere':1} + ['&','|',('riba','=','True'),('unsolved_invoice_ids','!=',False),('account_id.type','=','receivable')] + + + + + + + + + + account.invoice.form + account.invoice + form + + + + + + + + + + + Unsolved Invoices + account.invoice + form + tree,form,calendar,graph + + [('type','=','out_invoice'), ('unsolved_move_line_ids', '!=', False)] + {'default_type':'out_invoice', 'type':'out_invoice', 'journal_type': 'sale'} + + + + + + + tree + + + + + + form + + + + + + diff --git a/l10n_it_ricevute_bancarie/configurazione.py b/l10n_it_ricevute_bancarie/configurazione.py new file mode 100644 index 000000000000..355e2ea295c4 --- /dev/null +++ b/l10n_it_ricevute_bancarie/configurazione.py @@ -0,0 +1,88 @@ +# -*- 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 () +# Copyright (C) 2012 Domsense srl () +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# All Rights Reserved +# +# 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 +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import fields, osv + +class riba_configurazione(osv.osv): + + _name = "riba.configurazione" + _description = "Parametri di configurazione per le Ricevute Bancarie" + + _columns = { + 'name' : fields.char("Descrizione", size=64, required=True), + 'tipo' : fields.selection((('sbf', 'Salvo buon fine'),('incasso', 'Al dopo incasso')), + "Modalità Emissione", required=True), + 'bank_id' : fields.many2one('res.partner.bank', "Banca", + required=True, help="Bank account used for Ri.Ba. issuing"), + + 'acceptance_journal_id' : fields.many2one('account.journal', "Acceptance journal", + domain=[('type', '=', 'bank')], required=True, + help="Journal used when Ri.Ba. is accepted by the bank"), + 'acceptance_account_id' : fields.many2one('account.account', "Acceptance account", + domain=[('type', '=', 'receivable')], required=True, help='Account used when Ri.Ba. is accepted by the bank'), + + 'company_id': fields.many2one('res.company', 'Company',required=True), + + 'accreditation_journal_id' : fields.many2one('account.journal', "Accreditation journal", + domain=[('type', '=', 'bank')], + help="Journal used when Ri.Ba. amount is accredited by the bank"), + 'accreditation_account_id' : fields.many2one('account.account', "Ri.Ba. bank account", help='Account used when Ri.Ba. is accepted by the bank'), + 'bank_account_id' : fields.many2one('account.account', "Bank account", + domain=[('type', '=', 'liquidity')]), + 'bank_expense_account_id' : fields.many2one('account.account', "Bank Expenses account"), + + 'unsolved_journal_id' : fields.many2one('account.journal', "Unsolved journal", + domain=[('type', '=', 'bank')], + help="Journal used when Ri.Ba. is unsolved"), + 'overdue_effects_account_id' : fields.many2one('account.account', "Overdue Effects account", + domain=[('type', '=', 'receivable')]), + 'protest_charge_account_id' : fields.many2one('account.account', "Protest charge account"), + } + + _defaults = { + 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'riba.configurazione', context=c), + } + + def get_default_value_by_distinta(self, cr, uid, field_name, context=None): + if context is None: + context = {} + if not context.get('active_id', False): + return False + distinta_pool = self.pool.get('riba.distinta') + distinta = distinta_pool.browse(cr, uid, context['active_id'], context=context) + return distinta.config[field_name] and distinta.config[field_name].id or False + + def get_default_value_by_distinta_line(self, cr, uid, field_name, context=None): + if context is None: + context = {} + if not context.get('active_id', False): + return False + distinta_line = self.pool.get('riba.distinta.line').browse(cr, uid, context['active_id'], context=context) + return distinta_line.distinta_id.config[field_name] and distinta_line.distinta_id.config[field_name].id or False + +riba_configurazione() + diff --git a/l10n_it_ricevute_bancarie/configurazione_view.xml b/l10n_it_ricevute_bancarie/configurazione_view.xml new file mode 100644 index 000000000000..0281f4b1e9bb --- /dev/null +++ b/l10n_it_ricevute_bancarie/configurazione_view.xml @@ -0,0 +1,51 @@ + + + + + + + + riba.configurazione.form + riba.configurazione + form + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + Ri.Ba. - Configuration + ir.actions.act_window + riba.configurazione + form + tree,form + + + + + + + +
+
diff --git a/l10n_it_ricevute_bancarie/i18n/it.po b/l10n_it_ricevute_bancarie/i18n/it.po new file mode 100644 index 000000000000..f783df673892 --- /dev/null +++ b/l10n_it_ricevute_bancarie/i18n/it.po @@ -0,0 +1,1126 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_it_ricevute_bancarie +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-05-19 15:37+0000\n" +"PO-Revision-Date: 2012-05-19 17:39+0100\n" +"Last-Translator: Lorenzo Battistini \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" + +#. module: l10n_it_ricevute_bancarie +#: help:riba.configurazione,acceptance_account_id:0 +#: help:riba.configurazione,accreditation_account_id:0 +msgid "Account used when Ri.Ba. is accepted by the bank" +msgstr "Il conto utilizzato quando la Ri.Ba. viene accettata dalla banca" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:143 +#, python-format +msgid "No IBAN specified" +msgstr "Nessun IBAN specificato" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.action_riba_configurazione +msgid "Ri.Ba. - Configuration" +msgstr "Ri.Ba. - Configurazione" + +#. module: l10n_it_ricevute_bancarie +#: help:res.partner.bank,codice_sia:0 +msgid "Identification Code of the Company in the System Interbank" +msgstr "Codice identificativo dell'azienda nel sistema interbancario" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.unsolved,effects_account_id:0 +msgid "Effects account" +msgstr "Conto effetti" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,tipo:0 +msgid "Modalità Emissione" +msgstr "Modalità Emissione" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:103 +#, python-format +msgid "Accreditation Ri.Ba. %s" +msgstr "Accredito Ri.Ba. %s" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Riferimento-name" +msgstr "/data/record/Riferimento-name" + +#. module: l10n_it_ricevute_bancarie +#: help:riba.configurazione,acceptance_journal_id:0 +msgid "Journal used when Ri.Ba. is accepted by the bank" +msgstr "Sezionale utilizzato quando la Ri.Ba. viene accettata dalla banca" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.accreditation,accreditation_account_id:0 +#: field:riba.configurazione,accreditation_account_id:0 +#: field:riba.unsolved,riba_bank_account_id:0 +msgid "Ri.Ba. bank account" +msgstr "Banca conto Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,bank_id:0 +msgid "Debitor Bank" +msgstr "Banca debitore" + +#. module: l10n_it_ricevute_bancarie +#: help:res.partner,group_riba:0 +msgid "Group Ri.Ba. by customer while issuing" +msgstr "Raggruppa le Ri.Ba. per cliente durante l'emissione" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "Scadenza" +msgstr "Scadenza" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:133 +#, python-format +msgid "Overdue Effects" +msgstr "Effetti insoluti" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,company_id:0 +#: field:riba.distinta,company_id:0 +msgid "Company" +msgstr "Azienda" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,invoice_date:0 +msgid "Invoice Date" +msgstr "Data fattura" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Move line" +msgstr "Riga contabile" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:163 +#, python-format +msgid "No VAT or Fiscalcode specified for: " +msgstr "P IVA o codice fiscale non specificato per:" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.action_wizard_riba_file_export +msgid "Export Ri.Ba." +msgstr "Esporta Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:121 +#, python-format +msgid "Effects" +msgstr "Effetti" + +#. module: l10n_it_ricevute_bancarie +#: help:riba.distinta.line,reconciled:0 +msgid "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." +msgstr "Indica che la riga è stata pagata e la registrazione della riga è stata riconciliata con una o più registrazioni di pagamento" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Modalita_Riba-config/Banca-bank_id/Descrizione-name" +msgstr "/data/record/Modalita_Riba-config/Banca-bank_id/Descrizione-name" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:193 +#, python-format +msgid "No IBAN specified for " +msgstr "Nessun IBAN specificato per" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:182 +#, python-format +msgid "No address specified for " +msgstr "Nessun indirizzo specificato per" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.accreditation,accreditation_amount:0 +msgid "Credit amount" +msgstr "Importo credito" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:148 +#, python-format +msgid "No SIA Code specified for: " +msgstr "Nessun codice SIA specificato per:" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Move lines" +msgstr "Righe contabili" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,name:0 +msgid "Descrizione" +msgstr "Descrizione" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Detail" +msgstr "Dettaglio" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +#: field:riba.distinta.line,amount:0 +#: field:riba.distinta.move.line,amount:0 +msgid "Amount" +msgstr "Importo" + +#. module: l10n_it_ricevute_bancarie +#: sql_constraint:account.move.line:0 +msgid "Wrong credit or debit value in accounting entry !" +msgstr "Valore di credito o debito errato nella registrazione contabile !" + +#. module: l10n_it_ricevute_bancarie +#: field:res.partner.bank,codice_sia:0 +msgid "Codice SIA" +msgstr "Codice SIA" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:210 +#, python-format +msgid "No VAT or Fiscal code specified for " +msgstr "P IVA o codice fiscale non specificato per" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_unsolved +msgid "riba.unsolved" +msgstr "riba.unsolved" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "DISTINTA DI PRESENTAZIONE" +msgstr "DISTINTA DI PRESENTAZIONE" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_file_export +msgid "riba.file.export" +msgstr "riba.file.export" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.configurazione:0 +#: view:riba.distinta:0 +#: selection:riba.distinta,state:0 +#: selection:riba.distinta.line,state:0 +msgid "Unsolved" +msgstr "Insoluto" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,config:0 +msgid "Configuration" +msgstr "Configurazione" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,name:0 +msgid "Reference" +msgstr "Riferimento" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:170 +#: field:riba.distinta.line,unsolved_move_id:0 +#, python-format +msgid "Unsolved Entry" +msgstr "Registrazione insoluto" + +#. module: l10n_it_ricevute_bancarie +#: help:riba.distinta,config:0 +msgid "Riba configuration to be used" +msgstr "Configurazione Ri.Ba. da usare" + +#. module: l10n_it_ricevute_bancarie +#: view:account.move.line:0 +msgid "Group by..." +msgstr "Raggruppa per..." + +#. module: l10n_it_ricevute_bancarie +#: constraint:account.move.line:0 +msgid "The date of your Journal Entry is not in the defined period! You should change the date or remove this constraint from the journal." +msgstr "The date of your Journal Entry is not in the defined period! You should change the date or remove this constraint from the journal." + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Reset to Draft" +msgstr "Reimposta a bozza" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "\"Data : \" + $F{Data_Creazione-date_created}.getDate() + \"/\" + ($F{Data_Creazione-date_created}.getMonth() + 1) + \"/\" + ($F{Data_Creazione-date_created}.getYear() + 1900)" +msgstr "\"Data : \" + $F{Data_Creazione-date_created}.getDate() + \"/\" + ($F{Data_Creazione-date_created}.getMonth() + 1) + \"/\" + ($F{Data_Creazione-date_created}.getYear() + 1900)" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_res_partner +msgid "Partner" +msgstr "Partner" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.file.export:0 +msgid "Export Ri.Ba. file" +msgstr "Esporta file Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: view:riba.accreditation:0 +msgid "Skip and confirm accreditation" +msgstr "Salta e conferma accredito" + +#. module: l10n_it_ricevute_bancarie +#: field:res.bank,banca_estera:0 +msgid "Banca Estera" +msgstr "Banca Estera" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +#: selection:riba.distinta.line,state:0 +msgid "Confirmed" +msgstr "Confermata" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,date_paid:0 +msgid "Paid date" +msgstr "Data pagamento" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,unsolved_journal_id:0 +#: field:riba.unsolved,unsolved_journal_id:0 +msgid "Unsolved journal" +msgstr "Sezionale insoluti" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.configurazione:0 +msgid "Accreditation" +msgstr "Accredito" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.accreditation:0 +#: view:riba.emissione:0 +#: view:riba.unsolved:0 +msgid "Create" +msgstr "Crea" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.accreditation,bank_expense_account_id:0 +#: field:riba.configurazione,bank_expense_account_id:0 +#: field:riba.unsolved,bank_expense_account_id:0 +msgid "Bank Expenses account" +msgstr "Conto spese bancarie" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,state:0 +#: field:riba.distinta.line,state:0 +msgid "State" +msgstr "Stato" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Modalita_Riba-config/Banca-bank_id/Citta-city" +msgstr "/data/record/Modalita_Riba-config/Banca-bank_id/Citta-city" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Scadenze_Riba-line_ids/Cliente-partner_id/Nome-name" +msgstr "/data/record/Scadenze_Riba-line_ids/Cliente-partner_id/Nome-name" + +#. module: l10n_it_ricevute_bancarie +#: view:account.move.line:0 +#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.action_riba_da_emettere +#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.emissione_riba_action +#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_riba_da_emettere +#: view:riba.emissione:0 +msgid "Issue Ri.Ba." +msgstr "Emetti Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: view:account.invoice:0 +msgid "Unsolved Ri.Ba." +msgstr "Ri.Ba. insolute" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,type:0 +#: field:riba.distinta.line,type:0 +msgid "Type" +msgstr "Tipo" + +#. module: l10n_it_ricevute_bancarie +#: help:riba.configurazione,unsolved_journal_id:0 +msgid "Journal used when Ri.Ba. is unsolved" +msgstr "Sezionale utilizzato quando la Ri.Ba. è insoluta" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,reconciled:0 +msgid "Paid/Reconciled" +msgstr "Pagato/Riconciliato" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.emissione,configurazione:0 +msgid "Configurazione" +msgstr "Configurazione" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.unsolved,effects_amount:0 +msgid "Effects amount" +msgstr "Importo effetti" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Data_Creazione-date_created" +msgstr "/data/record/Data_Creazione-date_created" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.accreditation,expense_amount:0 +#: field:riba.unsolved,expense_amount:0 +msgid "Expenses amount" +msgstr "Importo spese" + +#. module: l10n_it_ricevute_bancarie +#: field:account.move.line,riba:0 +msgid "RiBa" +msgstr "Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: selection:riba.file.export,state:0 +msgid "get" +msgstr "get" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +#: selection:riba.distinta,state:0 +msgid "Accepted" +msgstr "Accettata" + +#. module: l10n_it_ricevute_bancarie +#: view:account.move.line:0 +msgid "To Issue" +msgstr "Da emettere" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.emissione:0 +msgid "This wizard generates the Ri.Ba. list, do you confirm?" +msgstr "Questo wizard genererà la distinta Ri.Ba., confermi?" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.distinta_riba_action +msgid "Distinta Ri.Ba." +msgstr "Distinta Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +#: field:riba.distinta,acceptance_move_ids:0 +msgid "Acceptance Entries" +msgstr "Registrazioni di accettazione" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,date_unsolved:0 +msgid "Unsolved date" +msgstr "Data insoluto" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Modalita_Riba-config/Company-company_id/Logo-logo" +msgstr "/data/record/Modalita_Riba-config/Company-company_id/Logo-logo" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "Ragione soc." +msgstr "Ragione soc." + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{Logo-logo}" +msgstr "$F{Logo-logo}" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.move.line,riba_line_id:0 +msgid "Distinta line" +msgstr "Riga distinta" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:131 +#: view:riba.distinta:0 +#: field:riba.distinta,accreditation_move_id:0 +#, python-format +msgid "Accreditation Entry" +msgstr "Registrazione accredito" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.unsolved:0 +msgid "Skip and confirm the unsolved state" +msgstr "Salta e conferma lo stato di insoluto" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Scadenze_Riba-line_ids/Numero_Fattura-numero_fattura" +msgstr "/data/record/Scadenze_Riba-line_ids/Numero_Fattura-numero_fattura" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,move_line_ids:0 +msgid "Credit move lines" +msgstr "Righe contabili di credito" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,due_date:0 +msgid "Due date" +msgstr "Data scadenza" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{Nome_Azienda-name}" +msgstr "$F{Nome_Azienda-name}" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{Partner Nome}" +msgstr "$F{Partner Nome}" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.accreditation,accreditation_journal_id:0 +#: field:riba.configurazione,accreditation_journal_id:0 +msgid "Accreditation journal" +msgstr "Sezionale di accredito" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Scadenze_Riba-line_ids/Data_Fattura-data_fattura" +msgstr "/data/record/Scadenze_Riba-line_ids/Data_Fattura-data_fattura" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,protest_charge_account_id:0 +msgid "Protest charge account" +msgstr "Conto spese di protesto" + +#. module: l10n_it_ricevute_bancarie +#: constraint:account.move.line:0 +msgid "The selected account of your Journal Entry forces to provide a secondary currency. You should remove the secondary currency on the account or select a multi-currency view on the journal." +msgstr "The selected account of your Journal Entry forces to provide a secondary currency. You should remove the secondary currency on the account or select a multi-currency view on the journal." + +#. module: l10n_it_ricevute_bancarie +#: selection:riba.distinta,state:0 +msgid "Canceled" +msgstr "Annullata" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,date_accreditation:0 +msgid "Accreditation date" +msgstr "Data accredito" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:155 +#, python-format +msgid "No address specified for: " +msgstr "Nessun indirizzo specificato per:" + +#. module: l10n_it_ricevute_bancarie +#: view:account.move.line:0 +msgid "Search Journal Items" +msgstr "Cerca scritture" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,overdue_effects_account_id:0 +#: field:riba.unsolved,overdue_effects_account_id:0 +msgid "Overdue Effects account" +msgstr "Conto effetti insoluti" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.unsolved,overdue_effects_amount:0 +msgid "Overdue Effects amount" +msgstr "Importo effetti insoluti" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.accreditation:0 +msgid "You can also skip this step and set the distinta status to 'accredited' anyway" +msgstr "E' anche possibile saltare questo passo e impostare comunque la distinta dello stato di 'accreditata'" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:191 +#, python-format +msgid "No CAP specified for " +msgstr "Nessun CAP specificato per" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.unsolved:0 +msgid "You can also skip this step and set the line status to 'unsolved' anyway" +msgstr "E' anche possibile saltare questo passo e impostare comunque lo stato della riga a 'insoluta'" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Scadenze_Riba-line_ids/Cliente-partner_id/Citta-city" +msgstr "/data/record/Scadenze_Riba-line_ids/Cliente-partner_id/Citta-city" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_emissione +msgid "Emissione Ricevute Bancarie" +msgstr "Emissione Ricevute Bancarie" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +#: selection:riba.distinta,state:0 +#: selection:riba.distinta.line,state:0 +msgid "Draft" +msgstr "Bozza" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{IBAN-iban}" +msgstr "$F{IBAN-iban}" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "\" \" + $V{PAGE_NUMBER}" +msgstr "\" \" + $V{PAGE_NUMBER}" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Scadenze_Riba-line_ids/Debitor_Bank-bank_id/IBAN-iban" +msgstr "/data/record/Scadenze_Riba-line_ids/Debitor_Bank-bank_id/IBAN-iban" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "\"SPETT.LE \" + $F{DescrizioneBanca} + \", \" + $F{CittaBanca} + \" - \" + $F{CAPBanca}" +msgstr "\"SPETT.LE \" + $F{DescrizioneBanca} + \", \" + $F{CittaBanca} + \" - \" + $F{CAPBanca}" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{Numero_Fattura-numero_fattura}" +msgstr "$F{Numero_Fattura-numero_fattura}" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.file.export,state:0 +msgid "unknown" +msgstr "sconosciuto" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +#: selection:riba.distinta,state:0 +#: selection:riba.distinta.line,state:0 +msgid "Paid" +msgstr "Pagata" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_accreditation +msgid "Bank accreditation" +msgstr "Accredito banca" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_distinta_line +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_distinta_move_line +msgid "Riba details" +msgstr "Dettagli Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,user_id:0 +msgid "User" +msgstr "Utente" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,unsolved_move_ids:0 +msgid "Unsolved Entries" +msgstr "Registrazioni insoluti" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_account_move_line +msgid "Journal Items" +msgstr "Voci sezionale" + +#. module: l10n_it_ricevute_bancarie +#: constraint:account.move.line:0 +msgid "You can not create journal items on an account of type view." +msgstr "Non è possibile effettuare registrazioni su un conto di tipo vista." + +#. module: l10n_it_ricevute_bancarie +#: help:riba.configurazione,bank_id:0 +msgid "Bank account used for Ri.Ba. issuing" +msgstr "Conto bancario utilizzato per l'emissione delle Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "Data" +msgstr "Data" + +#. module: l10n_it_ricevute_bancarie +#: selection:riba.file.export,state:0 +msgid "choose" +msgstr "choose" + +#. module: l10n_it_ricevute_bancarie +#: constraint:res.partner.bank:0 +msgid "" +"\n" +"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments" +msgstr "" +"\n" +"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:127 +#, python-format +msgid "Ri.Ba. Bank" +msgstr "Banca Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: view:riba.unsolved:0 +msgid "This wizard generates the journal entry related to an unsolved payment" +msgstr "Questo wizard genererà la registrazione relativa ad un pagamento insoluto" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,date_created:0 +msgid "Creation date" +msgstr "Data creazione" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Invoice entries" +msgstr "Registrazioni fattura" + +#. module: l10n_it_ricevute_bancarie +#: help:riba.configurazione,accreditation_journal_id:0 +msgid "Journal used when Ri.Ba. amount is accredited by the bank" +msgstr "Sezionale utilizzato quando l'import della Ri.Ba. viene accreditato dalla banca" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,line_ids:0 +msgid "Riba deadlines" +msgstr "Scadenze Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: field:riba.unsolved,riba_bank_amount:0 +msgid "Ri.Ba. bank amount" +msgstr "Importo banca Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:107 +#, python-format +msgid "Credit" +msgstr "Credito" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "IBAN" +msgstr "IBAN" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/riba.py:108 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:83 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:94 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:101 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:94 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:108 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:115 +#, python-format +msgid "Error" +msgstr "Errore" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta,date_accepted:0 +msgid "Acceptance date" +msgstr "Data accettazione" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,acceptance_account_id:0 +msgid "Acceptance account" +msgstr "Importo accettazione" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:187 +#, python-format +msgid "No Street specified for " +msgstr "Nessun indirizzo specificato per" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "Numero Fattura" +msgstr "Numero Fattura" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,partner_id:0 +msgid "Cliente" +msgstr "Cliente" + +#. module: l10n_it_ricevute_bancarie +#: view:account.move.line:0 +msgid "Group by customer" +msgstr "Raggruppa per cliente" + +#. module: l10n_it_ricevute_bancarie +#: sql_constraint:account.invoice:0 +msgid "Invoice Number must be unique per Company!" +msgstr "Invoice Number must be unique per Company!" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Distinte Ri.Ba." +msgstr "Distinte Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Modalita_Riba-config/Company-company_id/Nome_Azienda-name" +msgstr "/data/record/Modalita_Riba-config/Company-company_id/Nome_Azienda-name" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$V{Importo-importo_3}" +msgstr "$V{Importo-importo_3}" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_res_partner_bank +msgid "Bank Accounts" +msgstr "Conti Bancari" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,sequence:0 +msgid "Number" +msgstr "Numero" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:83 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:94 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:94 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:108 +#, python-format +msgid "No active ID found" +msgstr "Nessun ID trovato" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "General" +msgstr "Generale" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Modalita_Riba-config/Banca-bank_id/CAP-zip" +msgstr "/data/record/Modalita_Riba-config/Banca-bank_id/CAP-zip" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_riba +msgid "Ri.Ba." +msgstr "Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "Importo" +msgstr "Importo" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_account_invoice +msgid "Invoice" +msgstr "Fattura" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "Città" +msgstr "Città" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.accreditation:0 +#: view:riba.distinta:0 +#: view:riba.emissione:0 +#: view:riba.file.export:0 +#: view:riba.unsolved:0 +msgid "Cancel" +msgstr "Annulla" + +#. module: l10n_it_ricevute_bancarie +#: view:account.move.line:0 +msgid "Group by invoice" +msgstr "Raggruppa per fattura" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,acceptance_account_id:0 +msgid "Acceptance Account" +msgstr "Conto accettazione" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.riba_accreditation_action +#: view:riba.accreditation:0 +msgid "Ri.Ba. Accreditation" +msgstr "Accredito Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.riba_unsolved_action +#: view:riba.unsolved:0 +msgid "Ri.Ba. Unsolved" +msgstr "Ri.Ba. Insoluta" + +#. module: l10n_it_ricevute_bancarie +#: field:account.invoice,unsolved_move_line_ids:0 +msgid "Unsolved journal items" +msgstr "Registrazioni insoluti" + +#. module: l10n_it_ricevute_bancarie +#: constraint:account.move.line:0 +msgid "Company must be the same for its related account and period." +msgstr "Company must be the same for its related account and period." + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Other Info" +msgstr "Altre info" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{Citta-city}" +msgstr "$F{Citta-city}" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.configurazione:0 +msgid "Acceptance" +msgstr "Accettazione" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +#: selection:riba.distinta,state:0 +#: selection:riba.distinta.line,state:0 +msgid "Accredited" +msgstr "Accreditata" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.move.line,move_line_id:0 +msgid "Credit move line" +msgstr "Riga credito" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Scadenze_Riba-line_ids/Data_Scadenza-data_scadenza" +msgstr "/data/record/Scadenze_Riba-line_ids/Data_Scadenza-data_scadenza" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Ri.Ba. - Distinta" +msgstr "Ri.Ba. - Distinta" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:101 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:115 +#, python-format +msgid "Every account is mandatory" +msgstr "Ogni conto è obbligatorio" + +#. module: l10n_it_ricevute_bancarie +#: field:res.partner,group_riba:0 +msgid "Group Ri.Ba." +msgstr "Raggruppa Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: view:riba.configurazione:0 +msgid "Ri.Ba. - Configurazione" +msgstr "Ri.Ba. - Configurazione" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_riba_configurazione +msgid "Ri.Ba. Configuration" +msgstr "Ri.Ba. Configurazione" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{Data_Scadenza-data_scadenza}.getDate() + \"/\" + ($F{Data_Scadenza-data_scadenza}.getMonth() + 1) + \"/\" + ($F{Data_Scadenza-data_scadenza}.getYear() + 1900)" +msgstr "$F{Data_Scadenza-data_scadenza}.getDate() + \"/\" + ($F{Data_Scadenza-data_scadenza}.getMonth() + 1) + \"/\" + ($F{Data_Scadenza-data_scadenza}.getYear() + 1900)" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.accreditation,bank_account_id:0 +#: field:riba.configurazione,bank_account_id:0 +#: field:riba.unsolved,bank_account_id:0 +msgid "Bank account" +msgstr "Conto banca" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "\"Numero righe : \" + $V{Importo-importo_2}" +msgstr "\"Numero righe : \" + $V{Importo-importo_2}" + +#. module: l10n_it_ricevute_bancarie +#: field:account.payment.term,riba:0 +msgid "Riba" +msgstr "Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,invoice_number:0 +msgid "Invoice Number" +msgstr "Numero fattura" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.accreditation:0 +msgid "This wizard generates the journal entry related to accreditation received from the bank" +msgstr "Questo wizard genererà la registrazione relativa all'accredito ricevuto dalla banca" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{Importo-importo}" +msgstr "$F{Importo-importo}" + +#. module: l10n_it_ricevute_bancarie +#: view:res.partner:0 +msgid "Ri.Ba. properties" +msgstr "Proprietà Ri.Ba." + +#. module: l10n_it_ricevute_bancarie +#: model:ir.actions.report.xml,name:l10n_it_ricevute_bancarie.report_stampa_riba_distinta +msgid "Stampa Distinta" +msgstr "Stampa Distinta" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:113 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:119 +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:141 +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_res_bank +#, python-format +msgid "Bank" +msgstr "Banca" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "\"Pagina \"+$V{PAGE_NUMBER}+\" di\"" +msgstr "\"Pagina \"+$V{PAGE_NUMBER}+\" di\"" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.unsolved,bank_amount:0 +msgid "Taken amount" +msgstr "Importo prelevato" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "\"Numero Distinta : \" + $F{Riferimento-name}" +msgstr "\"Numero Distinta : \" + $F{Riferimento-name}" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:117 +#, python-format +msgid "Unsolved Ri.Ba. %s - line %s" +msgstr "Ri.Ba. %s insoluta - riga %s" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_distinta +msgid "Distinta Riba" +msgstr "Distinta Riba" + +#. module: l10n_it_ricevute_bancarie +#: selection:riba.configurazione,tipo:0 +msgid "Al dopo incasso" +msgstr "Al dopo incasso" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +#: field:riba.distinta,payment_ids:0 +#: field:riba.distinta.line,payment_ids:0 +msgid "Payments" +msgstr "Pagamenti" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "/data/record/Scadenze_Riba-line_ids/Importo-importo" +msgstr "/data/record/Scadenze_Riba-line_ids/Importo-importo" + +#. module: l10n_it_ricevute_bancarie +#: selection:riba.configurazione,tipo:0 +msgid "Salvo buon fine" +msgstr "Salvo buon fine" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.accreditation,bank_amount:0 +msgid "Versed amount" +msgstr "Importo versato" + +#. module: l10n_it_ricevute_bancarie +#: view:account.move.line:0 +msgid "Total Debit" +msgstr "Debito totale" + +#. module: l10n_it_ricevute_bancarie +#: field:account.move.line,unsolved_invoice_ids:0 +#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.action_invoice_tree1 +#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_invoices +msgid "Unsolved Invoices" +msgstr "Fatture insolute" + +#. module: l10n_it_ricevute_bancarie +#: report:jasper_riba_distinta:0 +msgid "$F{Data_Fattura-data_fattura}" +msgstr "$F{Data_Fattura-data_fattura}" + +#. module: l10n_it_ricevute_bancarie +#: constraint:account.move.line:0 +msgid "You can not create journal items on closed account." +msgstr "You can not create journal items on closed account." + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_account_payment_term +msgid "Payment Term" +msgstr "Termine di pagamento" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:200 +#, python-format +msgid "No City specified for " +msgstr "Nessuna città specificata per" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,distinta_id:0 +msgid "Distinta" +msgstr "Distinta" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_configurazione +msgid "Parametri di configurazione per le Ricevute Bancarie" +msgstr "Parametri di configurazione per le Ricevute Bancarie" + +#. module: l10n_it_ricevute_bancarie +#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_riba_distinte +msgid "Distinte" +msgstr "Distinte" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.distinta.line,acceptance_move_id:0 +msgid "Acceptance Entry" +msgstr "Registrazione di accettazione" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,acceptance_journal_id:0 +msgid "Acceptance journal" +msgstr "Sezionale di accettazione" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:147 +#, python-format +msgid "Expenses" +msgstr "Spese" + +#. module: l10n_it_ricevute_bancarie +#: code:addons/l10n_it_ricevute_bancarie/riba.py:108 +#, python-format +msgid "Distinta %s is in state %s. You can only delete documents in state draft or canceled" +msgstr "La distinta %s è nello stato %s. E' possibile eliminare solamente i documenti in stato bozza o annullato." + +#. module: l10n_it_ricevute_bancarie +#: field:riba.configurazione,bank_id:0 +msgid "Banca" +msgstr "Banca" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.file.export:0 +msgid "Export" +msgstr "Export" + +#. module: l10n_it_ricevute_bancarie +#: field:riba.file.export,riba_.txt:0 +msgid "File" +msgstr "File" + +#. module: l10n_it_ricevute_bancarie +#: view:riba.distinta:0 +msgid "Accounting" +msgstr "Contabilità" + +#. module: l10n_it_ricevute_bancarie +#: field:account.move.line,distinta_line_ids:0 +msgid "Dettaglio riba" +msgstr "Dettaglio riba" + diff --git a/l10n_it_ricevute_bancarie/partner/__init__.py b/l10n_it_ricevute_bancarie/partner/__init__.py new file mode 100755 index 000000000000..9b50057d858f --- /dev/null +++ b/l10n_it_ricevute_bancarie/partner/__init__.py @@ -0,0 +1,13 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Addon realizzata da Andrea Cometa +# Compatible with OpenERP release 6.x +# Copyright (C) 2012 Andrea Cometa. All Rights Reserved. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# +############################################################################## + +import partner + diff --git a/l10n_it_ricevute_bancarie/partner/partner.py b/l10n_it_ricevute_bancarie/partner/partner.py new file mode 100644 index 000000000000..7f1481d77110 --- /dev/null +++ b/l10n_it_ricevute_bancarie/partner/partner.py @@ -0,0 +1,40 @@ +# -*- 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 () +# Copyright (C) 2012 Domsense srl () +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# All Rights Reserved +# +# 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 +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import fields, osv + +class res_partner(osv.osv): + + _name = "res.partner" + _inherit = "res.partner" + + _columns = { + 'group_riba' : fields.boolean("Group Ri.Ba.", + help="Group Ri.Ba. by customer while issuing"), + } + +res_partner() diff --git a/l10n_it_ricevute_bancarie/partner/partner_view.xml b/l10n_it_ricevute_bancarie/partner/partner_view.xml new file mode 100644 index 000000000000..03b42ddf6da4 --- /dev/null +++ b/l10n_it_ricevute_bancarie/partner/partner_view.xml @@ -0,0 +1,23 @@ + + + + + + + + + res.parner.form.riba + res.partner + + + + + + + + + + + + + diff --git a/l10n_it_ricevute_bancarie/reports/jasper_riba_distinta.jasper b/l10n_it_ricevute_bancarie/reports/jasper_riba_distinta.jasper new file mode 100644 index 0000000000000000000000000000000000000000..d7062bfc9fe2ec13425efbaa01a6abfedd3b79c2 GIT binary patch literal 73160 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

Oh`;pZ_kCqWcBt!NK8?0 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="72" splitType="Stretch"> + <staticText> + <reportElement x="239" y="0" width="316" height="25"/> + <textElement> + <font size="18"/> + </textElement> + <text><![CDATA[DISTINTA DI PRESENTAZIONE]]></text> + </staticText> + <textField isBlankWhenNull="true"> + <reportElement x="239" y="25" width="316" height="16"/> + <textElement/> + <textFieldExpression><![CDATA[$F{Nome_Azienda-name}]]></textFieldExpression> + </textField> + <image scaleImage="RetainShape" hAlign="Center" vAlign="Top" isUsingCache="false" isLazy="true" onErrorType="Icon"> + <reportElement x="0" y="0" width="239" height="62"/> + <imageExpression><![CDATA[$F{Logo-logo}]]></imageExpression> + </image> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + diff --git a/l10n_it_ricevute_bancarie/reports/reports.xml b/l10n_it_ricevute_bancarie/reports/reports.xml new file mode 100644 index 000000000000..376b0fdf668c --- /dev/null +++ b/l10n_it_ricevute_bancarie/reports/reports.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/l10n_it_ricevute_bancarie/reports/riba.distinta.3.xml b/l10n_it_ricevute_bancarie/reports/riba.distinta.3.xml new file mode 100644 index 000000000000..8ee9a09c31fd --- /dev/null +++ b/l10n_it_ricevute_bancarie/reports/riba.distinta.3.xml @@ -0,0 +1 @@ +111active12345.67code12345.67currency_mode12345.6712345namenote1234512345reconcileshortcuttype1acc_numbercitycodice_siaibannameowner_name12345statestreetzip1account_nolib_pathlogonameoverdue_msgrml_footer1rml_footer2rml_headerrml_header1rml_header2rml_header3name1allow_datecentralisationcodeentry_postedgroup_invoice_linesnamerefund_journaltypeupdate_postedtipo12009-12-31 12:34:56datasdatas_fnamedescriptionname12345res_modelres_nametypeurl2009-12-31 00:00:002009-12-31 00:00:0011acc_numbercitycodice_siaibannameowner_name12345statestreetzipdata_fattura2009-12-31 00:00:0012009-12-31 00:00:002009-12-31 00:00:00namestate12345.67112345.6712345.6712345.6712345.67blockedcentralisation12345.672009-12-31 00:00:002009-12-31 00:00:002009-12-31 00:00:00day12345.67internal_sequence_number2009-12-31 00:00:00invoice_originnamenarrationpartner_ref12345.67refribastate12345.67numero_fattura1active2009-12-31 00:00:00citycomment12345.6712345.67customer2009-12-31 00:00:0012345.6712345.67ean13emailemployeefiscalcodefiscalcode_firstnamefiscalcode_surnamelang2009-12-31 12:34:56mobilenamephoneraggruppa_ribarefsexsuppliervatvat_subjectedwebsite2009-12-31 00:00:001234512009-12-31 12:34:56datasdatas_fnamedescriptionname12345res_modelres_nametypeurlnamestate11nametypeusageactive1activebirthdatecityemailfaxfunctionis_customer_addis_supplier_addmobilenamephonestreetstreet2typezip1account_nolib_pathlogonameoverdue_msgrml_footer1rml_footer2rml_headerrml_header1rml_header2rml_header31account_nolib_pathlogonameoverdue_msgrml_footer1rml_footer2rml_headerrml_header1rml_header2rml_header3context_langcontext_tz2009-12-31 12:34:56email1commentnamelogin1nametypeusagemenu_tipsnamenew_passwordpasswordsignatureuser_emailview12009-12-31 12:34:56datasdatas_fnamedescriptionname12345res_modelres_nametypeurl11account_nolib_pathlogonameoverdue_msgrml_footer1rml_footer2rml_headerrml_header1rml_header2rml_header32009-12-31 12:34:561activecontext_langcontext_tz2009-12-31 12:34:56emailloginmenu_tipsnamenew_passwordpasswordsignatureuser_emailviewdatasdatas_fnamedescriptionname12345res_modelres_nametypeurl12009-12-31 12:34:56datasdatas_fnamedescriptionname12345res_modelres_nametypeurl11nametypeusageactive1activebirthdatecityemailfaxfunctionis_customer_addis_supplier_addmobilenamephonestreetstreet2typezip1account_nolib_pathlogonameoverdue_msgrml_footer1rml_footer2rml_headerrml_header1rml_header2rml_header31account_nolib_pathlogonameoverdue_msgrml_footer1rml_footer2rml_headerrml_header1rml_header2rml_header3context_langcontext_tz2009-12-31 12:34:56email1commentnamelogin1nametypeusagemenu_tipsnamenew_passwordpasswordsignatureuser_emailview12009-12-31 12:34:56datasdatas_fnamedescriptionname12345res_modelres_nametypeurl \ No newline at end of file diff --git a/l10n_it_ricevute_bancarie/riba.py b/l10n_it_ricevute_bancarie/riba.py new file mode 100644 index 000000000000..0e81988b7bc8 --- /dev/null +++ b/l10n_it_ricevute_bancarie/riba.py @@ -0,0 +1,404 @@ +# -*- 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 () +# Copyright (C) 2012 Domsense srl () +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# All Rights Reserved +# +# 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 +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import fields, osv +import time +import decimal_precision as dp +import netsvc +from tools.translate import _ + +class riba_distinta(osv.osv): + + def _get_acceptance_move_ids(self, cr, uid, ids, field_name, arg, context): + res = {} + for distinta in self.browse(cr, uid, ids, context=context): + move_ids = [] + for line in distinta.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 + return res + + def _get_unsolved_move_ids(self, cr, uid, ids, field_name, arg, context): + res = {} + for distinta in self.browse(cr, uid, ids, context=context): + move_ids = [] + for line in distinta.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 + return res + + def _get_payment_ids(self, cr, uid, ids, field_name, arg, context): + res = {} + for distinta in self.browse(cr, uid, ids, context=context): + move_line_ids = [] + for line in distinta.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 + 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), + } + + _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), + } + + 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 osv.except_osv(_('Error'),_('Distinta %s is in state %s. You can only delete documents in state draft or canceled') % (distinta.name, distinta.state)) + osv.osv.unlink(self, 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): + # TODO remove ervery other move + for line in distinta.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(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(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(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(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 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: + 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: + 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 + +riba_distinta() + + +class riba_distinta_line(osv.osv): + + 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'] = '' + 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(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(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") + res = {} + for id in ids: + res[id] = self.test_paid(cr, uid, [id]) + if res[id]: + self.write(cr, uid, id, {'state': 'paid'}, context=context) + wf_service.trg_validate( + uid, 'riba.distinta', + self.browse(cr, uid, id).distinta_id.id, 'paid', cr) + return res + + def move_line_id_payment_gets(self, cr, uid, ids, *args): + res = {} + if not ids: return res + cr.execute('SELECT distinta_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),)) + for r in cr.fetchall(): + res.setdefault(r[0], []) + res[r[0]].append( r[1] ) + return res + + # 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: return [] + result = self.move_line_id_payment_gets(cr, uid, ids, *args) + return result.get(ids[0], []) + + def test_paid(self, cr, uid, ids, *args): + res = self.move_line_id_payment_get(cr, uid, ids) + if not res: + return False + ok = True + for id in res: + cr.execute('select reconcile_id from account_move_line where id=%s', (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): + if line.reconcile_partial_id: + for line2 in line.reconcile_partial_id.line_partial_ids: + move[line2.move_id.id] = True + if line.reconcile_id: + for line2 in line.reconcile_id.line_id: + move[line2.move_id.id] = True + line_ids = [] + if move: + line_ids = self.pool.get('riba.distinta.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 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( + cr, uid, [('acceptance_move_id','in',move.keys())], context=context) + return line_ids + + def _compute_lines(self, cr, uid, ids, name, args, context=None): + result = {} + for riba_line in self.browse(cr, uid, ids, context=context): + src = [] + lines = [] + if riba_line.acceptance_move_id: + for m in riba_line.acceptance_move_id.line_id: + temp_lines = [] + if m.reconcile_id and m.credit == 0.0: + temp_lines = map(lambda x: x.id, m.reconcile_id.line_id) + elif m.reconcile_partial_id and m.credit == 0.0: + temp_lines = map(lambda x: x.id, m.reconcile_partial_id.line_partial_ids) + lines += [x for x in temp_lines if x not in lines] + src.append(m.id) + + lines = filter(lambda x: x not in src, lines) + 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', required=True), + 'amount' : fields.function(_get_line_values, method=True, string="Amount", multi="line"), + 'bank_id': fields.many2one('res.partner.bank', 'Debitor Bank'), + '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 + total_credit = 0.0 + move_id= move_pool.create(cr, uid, { + 'ref': 'Ri.Ba. %s - line %s' % (line.distinta_id.name, line.sequence), + 'journal_id': journal.id, + }, context=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.number, + '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, + '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) + for reconcile_ids in to_be_reconciled: + move_line_pool.reconcile_partial(cr, uid, reconcile_ids, context=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 + +riba_distinta_line() + +class riba_distinta_move_line(osv.osv): + + _name = 'riba.distinta.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'), + } + +riba_distinta_line() diff --git a/l10n_it_ricevute_bancarie/riba_sequence.xml b/l10n_it_ricevute_bancarie/riba_sequence.xml new file mode 100755 index 000000000000..a45b80fb61b5 --- /dev/null +++ b/l10n_it_ricevute_bancarie/riba_sequence.xml @@ -0,0 +1,17 @@ + + + + + Tipo Distinta Ri.Ba. + seq.riba.distinta + + + + Distinta Ri.Ba. + seq.riba.distinta + + %(y)s/ + + + + diff --git a/l10n_it_ricevute_bancarie/riba_view.xml b/l10n_it_ricevute_bancarie/riba_view.xml new file mode 100644 index 000000000000..a2ac9ce1ac8a --- /dev/null +++ b/l10n_it_ricevute_bancarie/riba_view.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + riba.distinta.filtri + riba.distinta + search + + + + + + + + + + + + + + + + + + + riba.distinta.tree + riba.distinta + tree + + + + + + + + + + + + + + + + riba.distinta.form + riba.distinta + form + +
+ + + + + + + + + + + + + +