Merge lp:~enlightx-deactivatedaccount/openobject-italia/7.0-l10n_it_ricevute_bancarie into lp:~openobject-italia-core-devs/openobject-italia/italian-addons-7.0

Proposed by Davide Corio
Status: Needs review
Proposed branch: lp:~enlightx-deactivatedaccount/openobject-italia/7.0-l10n_it_ricevute_bancarie
Merge into: lp:~openobject-italia-core-devs/openobject-italia/italian-addons-7.0
Diff against target: 3296 lines (+3161/-0)
26 files modified
l10n_it_ricevute_bancarie/AUTHORS.txt (+3/-0)
l10n_it_ricevute_bancarie/__init__.py (+32/-0)
l10n_it_ricevute_bancarie/__openerp__.py (+71/-0)
l10n_it_ricevute_bancarie/account/__init__.py (+24/-0)
l10n_it_ricevute_bancarie/account/account.py (+121/-0)
l10n_it_ricevute_bancarie/account/account_view.xml (+145/-0)
l10n_it_ricevute_bancarie/configurazione.py (+85/-0)
l10n_it_ricevute_bancarie/configurazione_view.xml (+50/-0)
l10n_it_ricevute_bancarie/i18n/it.po (+930/-0)
l10n_it_ricevute_bancarie/partner/__init__.py (+24/-0)
l10n_it_ricevute_bancarie/partner/partner.py (+37/-0)
l10n_it_ricevute_bancarie/partner/partner_view.xml (+23/-0)
l10n_it_ricevute_bancarie/riba.py (+401/-0)
l10n_it_ricevute_bancarie/riba_sequence.xml (+17/-0)
l10n_it_ricevute_bancarie/riba_view.xml (+180/-0)
l10n_it_ricevute_bancarie/riba_workflow.xml (+112/-0)
l10n_it_ricevute_bancarie/security/ir.model.access.csv (+15/-0)
l10n_it_ricevute_bancarie/wizard/__init__.py (+30/-0)
l10n_it_ricevute_bancarie/wizard/riba_file_export.py (+241/-0)
l10n_it_ricevute_bancarie/wizard/riba_file_export.xml (+32/-0)
l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py (+137/-0)
l10n_it_ricevute_bancarie/wizard/wizard_accreditation.xml (+41/-0)
l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.py (+131/-0)
l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.xml (+50/-0)
l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py (+184/-0)
l10n_it_ricevute_bancarie/wizard/wizard_unsolved.xml (+45/-0)
To merge this branch: bzr merge lp:~enlightx-deactivatedaccount/openobject-italia/7.0-l10n_it_ricevute_bancarie
Reviewer Review Type Date Requested Status
Lorenzo Battistini Needs Fixing
Review via email: mp+194577@code.launchpad.net

Description of the change

v7 compat fixes for l10n_it_ricevute_bancarie

To post a comment you must log in.
Revision history for this message
Lorenzo Battistini (elbati) wrote :

Grazie Davide,
allego il diff tra la versione 6.1 e 7.0, per valutare meglio le modifiche:
http://pastie.org/8467470

Revision history for this message
Davide Corio (enlightx-deactivatedaccount) wrote :

Grazie a te.

In particolare non mi sono chiare le modifiche fatte ad account_move_line.
Presumo abbiano uno scopo preciso.

Ammetto di non aver indagato.

Revision history for this message
Lorenzo Battistini (elbati) wrote :

Se sei d'accordo, in questa MP includerei solamente le modifiche atte a far funzionare il modulo stabile (quello sul branch ufficiale 6.1) sulla 7.0. Le correzioni ai bachi o eventuali miglioramenti al modulo le introdurrei tramite apposite merge proposals.

Quindi, facendo riferimento al diff:

l 17: Lascerei la dipendenza da account_due_list. Per velocizzare il processo di merge di tale modulo sui branch community, invito tutti a fare una review su https://code.launchpad.net/~agilebg/account-payment/adding_account_due_list_7/+merge/182330

l 72-127: sono campi/modifiche che verrebbero introdotte da account_due_list, quindi, se lasciamo la dipendenza, non sono necessari

l 207: è forse una modifica che risolverebbe qualche bug conosciuto? La terrei comunque fuori per ora

l 311, 319, 328, 336, 631: come mai viene passato il self alla chiamata ad un metodo?

l 353, 728: anche questa riga risolve forse un bug esistente?

l 440: la scriverei così: creditor_province = creditor_address.province and creditor_address.province.code or ''

l 649, 658: è necessario per il porting alla 7?

l 745-750: probabilmente un enhancement da tenere fuori da questa MP

PS: non eliminare questa MP in caso ne volessi fare un'altra, al massimo la impostiamo a rejected. Ti consiglio comunque di fare le modifiche direttamente su lp:~enlightx/openobject-italia/7.0-l10n_it_ricevute_bancarie e questa MP verrà aggiornata automaticamente.

PPS: se hai bisogno di verificare il diff tra versione 6.1 e 7.0, puoi copiare nel branch 6.1 il modulo dal branch 7.0 e fare bzr diff

review: Needs Fixing
Revision history for this message
Davide Corio (enlightx-deactivatedaccount) wrote :

Personalmente mi interesserebbe sentire il parere di Bruno sulle modifiche apportate, appunto per capire se risolvono effettivamente dei bachi esistenti.

Revision history for this message
Davide Corio (enlightx-deactivatedaccount) wrote :

Abbiamo ora entrambe le versioni, con e senza le migliorie apportate da Bruno.

Quella "standard" è qui:

https://code.launchpad.net/~enlightx/openobject-italia/adding_riba_v7/+merge/194620

Revision history for this message
Lorenzo Battistini (elbati) wrote :

2013/11/9 Davide Corio <email address hidden>

> Personalmente mi interesserebbe sentire il parere di Bruno sulle modifiche
> apportate, appunto per capire se risolvono effettivamente dei bachi
> esistenti.
>
>
Anche a me, ma vorrei parlarne sulle relative merge proposals.

Ad esempio questa
https://code.launchpad.net/~bruno-bottacini/openobject-italia/6.1-fix-bug-1167773/+merge/158863
è ancora in sospeso e non la includerei nel porting.

Se nella MP del porting vogliamo includere modifiche non direttamente
collegate al porting alla 7, per ogni ulteriore modifica bisogna spiegare
cosa fa, cosa risolve o cosa migliora. E deve essere approvata.

Revision history for this message
Davide Corio (enlightx-deactivatedaccount) wrote :

Quindi conviene partire da https://code.launchpad.net/~enlightx/openobject-italia/adding_riba_v7/+merge/194620 e marcare questo come rejected

Unmerged revisions

225. By Davide Corio

[ADD] l10n_it_ricevute_bancarie

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'l10n_it_ricevute_bancarie'
2=== added file 'l10n_it_ricevute_bancarie/AUTHORS.txt'
3--- l10n_it_ricevute_bancarie/AUTHORS.txt 1970-01-01 00:00:00 +0000
4+++ l10n_it_ricevute_bancarie/AUTHORS.txt 2013-11-08 19:19:50 +0000
5@@ -0,0 +1,3 @@
6+Lorenzo Battistini <lorenzo.battistini@agilebg.com>
7+Andrea Cometa <info@andreacometa.it>
8+Davide Corio <info@davidecorio.com>
9
10=== added file 'l10n_it_ricevute_bancarie/__init__.py'
11--- l10n_it_ricevute_bancarie/__init__.py 1970-01-01 00:00:00 +0000
12+++ l10n_it_ricevute_bancarie/__init__.py 2013-11-08 19:19:50 +0000
13@@ -0,0 +1,32 @@
14+# -*- coding: utf-8 -*-
15+##############################################################################
16+#
17+# Copyright (C) 2012 Andrea Cometa.
18+# Email: info@andreacometa.it
19+# Web site: http://www.andreacometa.it
20+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
21+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
22+# Copyright (C) 2012 Associazione OpenERP Italia
23+# (<http://www.openerp-italia.org>).
24+#
25+# This program is free software: you can redistribute it and/or modify
26+# it under the terms of the GNU Affero General Public License as published
27+# by the Free Software Foundation, either version 3 of the License, or
28+# (at your option) any later version.
29+#
30+# This program is distributed in the hope that it will be useful,
31+# but WITHOUT ANY WARRANTY; without even the implied warranty of
32+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33+# GNU Affero General Public License for more details.
34+#
35+# You should have received a copy of the GNU Affero General Public License
36+# along with this program. If not, see <http://www.gnu.org/licenses/>.
37+#
38+##############################################################################
39+
40+import configurazione
41+import partner
42+import riba
43+import account
44+import wizard
45+
46
47=== added file 'l10n_it_ricevute_bancarie/__openerp__.py'
48--- l10n_it_ricevute_bancarie/__openerp__.py 1970-01-01 00:00:00 +0000
49+++ l10n_it_ricevute_bancarie/__openerp__.py 2013-11-08 19:19:50 +0000
50@@ -0,0 +1,71 @@
51+# -*- coding: utf-8 -*-
52+##############################################################################
53+#
54+# Copyright (C) 2012 Andrea Cometa.
55+# Email: info@andreacometa.it
56+# Web site: http://www.andreacometa.it
57+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
58+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
59+# Copyright (C) 2012 Associazione OpenERP Italia
60+# (<http://www.openerp-italia.org>).
61+#
62+# This program is free software: you can redistribute it and/or modify
63+# it under the terms of the GNU Affero General Public License as published
64+# by the Free Software Foundation, either version 3 of the License, or
65+# (at your option) any later version.
66+#
67+# This program is distributed in the hope that it will be useful,
68+# but WITHOUT ANY WARRANTY; without even the implied warranty of
69+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
70+# GNU Affero General Public License for more details.
71+#
72+# You should have received a copy of the GNU Affero General Public License
73+# along with this program. If not, see <http://www.gnu.org/licenses/>.
74+#
75+##############################################################################
76+
77+{
78+ "name": "Ricevute Bancarie",
79+ "version": "1.3",
80+ "author": "OpenERP Italian Community",
81+ "category": "Accounting & Finance",
82+ "website": "http://www.openerp-italia.org",
83+ "description": """
84+Gestione delle Ricevute Bancarie
85+--------------------------------
86+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.
87+
88+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.
89+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.
90+
91+Per utilizzare il meccanismo delle Ri.Ba. è necessario configurare un termine di pagamento di tipo 'Ri.Ba.'.
92+
93+Per emettere una distinta bisogna andare su Ri.Ba. -> emetti Ri.Ba. e selezionare i pagamenti per i quali emettere la distinta.
94+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.
95+
96+I possibili stati della distinta sono: bozza, accettata, accreditata, pagata, insoluta, annullata.
97+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.
98+
99+Qui https://docs.google.com/document/d/1xCqeTcY6CF-Dgk_Avthhy7iwg_aG86WzNv3E_HHQkt4/edit# abbiamo un esempio delle tipiche registrazioni generate da un flusso 'salvo buon fine'.
100+ """,
101+ 'images': [],
102+ 'depends': ['account','account_voucher', 'l10n_it_fiscalcode'],
103+ 'init_xml': [],
104+ 'data': [
105+ "partner/partner_view.xml",
106+ "configurazione_view.xml",
107+ "riba_sequence.xml",
108+ "wizard/wizard_accreditation.xml",
109+ "wizard/wizard_unsolved.xml",
110+ "riba_view.xml",
111+ "account/account_view.xml",
112+ "wizard/wizard_emissione_riba.xml",
113+ "wizard/riba_file_export.xml",
114+ "riba_workflow.xml",
115+ "security/ir.model.access.csv",
116+ ],
117+ 'demo_xml': [],
118+ 'test': [],
119+ 'installable': True,
120+ 'active': False,
121+}
122
123=== added directory 'l10n_it_ricevute_bancarie/account'
124=== added file 'l10n_it_ricevute_bancarie/account/__init__.py'
125--- l10n_it_ricevute_bancarie/account/__init__.py 1970-01-01 00:00:00 +0000
126+++ l10n_it_ricevute_bancarie/account/__init__.py 2013-11-08 19:19:50 +0000
127@@ -0,0 +1,24 @@
128+# -*- coding: utf-8 -*-
129+##############################################################################
130+#
131+# Copyright (C) 2012 Andrea Cometa.
132+# Email: info@andreacometa.it
133+# Web site: http://www.andreacometa.it
134+#
135+# This program is free software: you can redistribute it and/or modify
136+# it under the terms of the GNU Affero General Public License as published
137+# by the Free Software Foundation, either version 3 of the License, or
138+# (at your option) any later version.
139+#
140+# This program is distributed in the hope that it will be useful,
141+# but WITHOUT ANY WARRANTY; without even the implied warranty of
142+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
143+# GNU Affero General Public License for more details.
144+#
145+# You should have received a copy of the GNU Affero General Public License
146+# along with this program. If not, see <http://www.gnu.org/licenses/>.
147+#
148+##############################################################################
149+
150+import account
151+
152
153=== added file 'l10n_it_ricevute_bancarie/account/account.py'
154--- l10n_it_ricevute_bancarie/account/account.py 1970-01-01 00:00:00 +0000
155+++ l10n_it_ricevute_bancarie/account/account.py 2013-11-08 19:19:50 +0000
156@@ -0,0 +1,121 @@
157+# -*- coding: utf-8 -*-
158+##############################################################################
159+#
160+# Copyright (C) 2012 Andrea Cometa.
161+# Email: info@andreacometa.it
162+# Web site: http://www.andreacometa.it
163+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
164+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
165+# Copyright (C) 2012 Associazione OpenERP Italia
166+# (<http://www.openerp-italia.org>).
167+#
168+# This program is free software: you can redistribute it and/or modify
169+# it under the terms of the GNU Affero General Public License as published
170+# by the Free Software Foundation, either version 3 of the License, or
171+# (at your option) any later version.
172+#
173+# This program is distributed in the hope that it will be useful,
174+# but WITHOUT ANY WARRANTY; without even the implied warranty of
175+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
176+# GNU Affero General Public License for more details.
177+#
178+# You should have received a copy of the GNU Affero General Public License
179+# along with this program. If not, see <http://www.gnu.org/licenses/>.
180+#
181+##############################################################################
182+
183+from openerp.osv import fields, orm
184+
185+class account_payment_term(orm.Model):
186+ # flag riba utile a distinguere la modalità di pagamento
187+ _inherit = 'account.payment.term'
188+
189+ _columns = {
190+ 'riba' : fields.boolean('Riba'),
191+ }
192+ _defaults = {
193+ 'riba': False,
194+ }
195+
196+
197+class res_bank_add_field(orm.Model):
198+ _inherit = 'res.bank'
199+ _columns = {
200+ 'banca_estera' : fields.boolean('Banca Estera'),
201+ }
202+
203+
204+class res_partner_bank_add(orm.Model):
205+ _inherit = 'res.partner.bank'
206+ _columns = {
207+ 'codice_sia' : fields.char('Codice SIA', size=5, help="Identification Code of the Company in the System Interbank")
208+ }
209+
210+
211+# se distinta_line_ids == None allora non è stata emessa
212+class account_move_line(orm.Model):
213+ _inherit = "account.move.line"
214+
215+ def _get_invoice(self, cr, uid, ids, field_name, arg, context=None):
216+ invoice_pool = self.pool.get('account.invoice')
217+ res = {}
218+ for line in self.browse(cr, uid, ids):
219+ inv_ids = invoice_pool.search(cr, uid, [('move_id', '=', line.move_id.id)])
220+ if len(inv_ids)>1:
221+ raise orm.except_orm(_('Error'), _('Incongruent data: move %s has more than one invoice') % line.move_id.name)
222+ if inv_ids:
223+ res[line.id] = inv_ids[0]
224+ else:
225+ res[line.id] = False
226+ return res
227+
228+ def _get_move_lines(self, cr, uid, ids, context=None):
229+ invoice_pool = self.pool.get('account.invoice')
230+ res = []
231+ for invoice in invoice_pool.browse(cr, uid, ids):
232+ if invoice.move_id:
233+ for line in invoice.move_id.line_id:
234+ if line.id not in res:
235+ res.append(line.id)
236+ return res
237+
238+ _columns = {
239+ 'distinta_line_ids' : fields.one2many('riba.distinta.move.line', 'move_line_id', "Dettaglio riba"),
240+ 'riba': fields.related('invoice', 'payment_term', 'riba',
241+ type='boolean', string='RiBa', store=False),
242+ 'unsolved_invoice_ids': fields.many2many('account.invoice', 'invoice_unsolved_line_rel', 'line_id', 'invoice_id', 'Unsolved Invoices'),
243+ 'iban' : fields.related('partner_id', 'bank_ids', 'iban', type='char', string='IBAN', store=False),
244+ 'invoice_origin': fields.related('invoice', 'origin', type='char', string='Source Doc', store=False),
245+ 'invoice_date': fields.related('invoice', 'date_invoice', type='date', string='Invoice Date', store=False),
246+ 'payment_term_id': fields.related('invoice', 'payment_term', type='many2one', string='Payment Term', store=False, relation="account.payment.term"),
247+ 'stored_invoice_id': fields.function(_get_invoice, method=True, string="Invoice", type="many2one", relation="account.invoice",
248+ store={
249+ 'account.move.line': (lambda self, cr, uid, ids, c={}: ids, ['move_id'], 10),
250+ 'account.invoice': (_get_move_lines, ['move_id'], 10),
251+ }),
252+ 'partner_ref': fields.related('partner_id', 'ref', type='char', string='Partner Ref', store=False),
253+ }
254+ _defaults = {
255+ 'distinta_line_ids' : None,
256+ }
257+
258+ def fields_view_get(self, cr, uid, view_id=None, view_type='form', context={}, toolbar=False, submenu=False):
259+ model_data_obj = self.pool.get('ir.model.data')
260+ ids = model_data_obj.search(cr, uid, [('module','=','l10n_it_ricevute_bancarie'), ('name','=','view_riba_da_emettere_tree')])
261+ if ids:
262+ view_payments_tree_id = self.pool.get('ir.model.data').get_object_reference(
263+ cr, uid, 'l10n_it_ricevute_bancarie', 'view_riba_da_emettere_tree')
264+ if ids and view_id == view_payments_tree_id[1]:
265+ # Use RiBa list - grazie a eLBati @ account_due_list
266+ result = super(orm.Model, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
267+ else:
268+ # Use special views for account.move.line object (for ex. tree view contains user defined fields)
269+ result = super(account_move_line, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
270+ return result
271+
272+
273+class account_invoice(orm.Model):
274+ _inherit = "account.invoice"
275+ _columns = {
276+ 'unsolved_move_line_ids': fields.many2many('account.move.line', 'invoice_unsolved_line_rel', 'invoice_id', 'line_id', 'Unsolved journal items'),
277+ }
278
279=== added file 'l10n_it_ricevute_bancarie/account/account_view.xml'
280--- l10n_it_ricevute_bancarie/account/account_view.xml 1970-01-01 00:00:00 +0000
281+++ l10n_it_ricevute_bancarie/account/account_view.xml 2013-11-08 19:19:50 +0000
282@@ -0,0 +1,145 @@
283+<?xml version="1.0" encoding="utf-8"?>
284+<openerp>
285+ <data>
286+
287+ <!-- ====================================================== -->
288+ <!-- CAMPI AGGIUNTIVI -->
289+ <!-- ====================================================== -->
290+ <record id="view_riba_add_text_field" model="ir.ui.view">
291+ <field name="name">account.riba.add.text.field</field>
292+ <field name="model">account.payment.term</field>
293+ <field name="inherit_id" ref="account.view_payment_term_form"/>
294+ <field name="arch" type="xml">
295+ <field name="active" position="after">
296+ <field name="riba"/>
297+ </field>
298+ </field>
299+ </record>
300+ <record id="view_res_bank_add_text_field" model="ir.ui.view">
301+ <field name="name">res.bank.add.text.field</field>
302+ <field name="model">res.bank</field>
303+ <field name="inherit_id" ref="base.view_res_bank_form"/>
304+ <field name="arch" type="xml">
305+ <field name="bic" position="after">
306+ <field name="banca_estera"/>
307+ </field>
308+ </field>
309+ </record>
310+ <record id="view_partner_bank_sia_form" model="ir.ui.view">
311+ <field name="name">res.partner.bank.form.sia.inherit</field>
312+ <field name="model">res.partner.bank</field>
313+ <field name="inherit_id" ref="base.view_partner_bank_form"/>
314+ <field name="arch" type="xml">
315+ <field name="acc_number" position="after">
316+ <field name="codice_sia"/>
317+ </field>
318+ </field>
319+ </record>
320+
321+ <!-- Riba da emettere Tree View -->
322+
323+ <record model="ir.ui.view" id="view_riba_da_emettere_tree">
324+ <field name="name">Issue Ri.Ba.</field>
325+ <field name="model">account.move.line</field>
326+ <field name="arch" type="xml">
327+ <tree string="Issue Ri.Ba." colors="red:date_maturity&lt;current_date">
328+ <field name="stored_invoice_id" readonly="1"/>
329+ <field name="invoice_date" readonly="1"/>
330+ <field name="invoice_origin" readonly="1"/>
331+ <field name="partner_id" readonly="1"/>
332+ <field name="iban" readonly="1"/>
333+ <field name="partner_ref" readonly="1"/>
334+ <field name="payment_term_id" readonly="1"/>
335+ <field name="account_id" readonly="1"/>
336+ <field name="debit" readonly="1" sum="Total Debit"/>
337+ <field name="date_maturity"/>
338+ <field name="riba" />
339+ <field name="distinta_line_ids" invisible="1" />
340+ </tree>
341+ </field>
342+ </record>
343+
344+ <!-- Riba da emettere Filtro -->
345+
346+ <record id="riba_filter" model="ir.ui.view">
347+ <field name="name">Ri.Ba. filter</field>
348+ <field name="model">account.move.line</field>
349+ <field name="arch" type="xml">
350+ <search string="Search Journal Items">
351+ <filter icon="terp-go-today" string="To Issue"
352+ domain="[('distinta_line_ids', '=', False)]" name="da_emettere"/>
353+ <field name="account_id"/>
354+ <field name="partner_id"/>
355+ <field name="invoice"/>
356+ <field name="invoice_origin"/>
357+ <field name="date_maturity"/>
358+ <newline/>
359+ <group expand="0" string="Group by..." colspan="11">
360+ <filter string="Group by customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
361+ <filter string="Group by invoice" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'stored_invoice_id'}"/>
362+ </group>
363+ </search>
364+ </field>
365+ </record>
366+
367+ <!-- Riba da emettere Action -->
368+
369+ <record model="ir.actions.act_window" id="action_riba_da_emettere">
370+ <field name="name">Issue Ri.Ba.</field>
371+ <field name="type">ir.actions.act_window</field>
372+ <field name="res_model">account.move.line</field>
373+ <field name="src_model">account.move.line</field>
374+ <field name="view_type">form</field>
375+ <field name="view_mode">tree,form</field>
376+ <field name="view_id" ref="view_riba_da_emettere_tree" />
377+ <field name="context">{'search_default_da_emettere':1}</field>
378+ <field name="domain">['&amp;','|',('riba','=','True'),('unsolved_invoice_ids','!=',False),('account_id.type','=','receivable')]</field>
379+ <field name="search_view_id" ref="riba_filter"/>
380+ </record>
381+
382+
383+ <menuitem name="Issue Ri.Ba." parent="menu_riba"
384+ id="menu_riba_da_emettere" action="action_riba_da_emettere" />
385+
386+ <!-- Invoice -->
387+
388+ <record id="invoice_form" model="ir.ui.view">
389+ <field name="name">account.invoice.form</field>
390+ <field name="model">account.invoice</field>
391+ <field name="inherit_id" ref="account.invoice_form"></field>
392+ <field name="arch" type="xml">
393+ <field name="payment_ids" position="after">
394+ <separator string="Unsolved Ri.Ba." colspan="4"/>
395+ <field name="unsolved_move_line_ids" colspan="4" nolabel="1"/>
396+ </field>
397+ </field>
398+ </record>
399+
400+ <record id="action_invoice_tree1" model="ir.actions.act_window">
401+ <field name="name">Unsolved Invoices</field>
402+ <field name="res_model">account.invoice</field>
403+ <field name="view_type">form</field>
404+ <field name="view_mode">tree,form,calendar,graph</field>
405+ <field eval="False" name="view_id"/>
406+ <field name="domain">[('type','=','out_invoice'), ('unsolved_move_line_ids', '!=', False)]</field>
407+ <field name="context">{'default_type':'out_invoice', 'type':'out_invoice', 'journal_type': 'sale'}</field>
408+ <field name="search_view_id" ref="account.view_account_invoice_filter"/>
409+ </record>
410+
411+
412+ <record id="action_invoice_tree1_view1" model="ir.actions.act_window.view">
413+ <field eval="1" name="sequence"/>
414+ <field name="view_mode">tree</field>
415+ <field name="act_window_id" ref="action_invoice_tree1"/>
416+ </record>
417+
418+ <record id="action_invoice_tree1_view2" model="ir.actions.act_window.view">
419+ <field eval="2" name="sequence"/>
420+ <field name="view_mode">form</field>
421+ <field name="view_id" ref="account.invoice_form"/>
422+ <field name="act_window_id" ref="action_invoice_tree1"/>
423+ </record>
424+ <menuitem name="Unsolved Invoices" parent="menu_riba"
425+ id="menu_invoices" action="action_invoice_tree1" />
426+ </data>
427+</openerp>
428
429=== added file 'l10n_it_ricevute_bancarie/configurazione.py'
430--- l10n_it_ricevute_bancarie/configurazione.py 1970-01-01 00:00:00 +0000
431+++ l10n_it_ricevute_bancarie/configurazione.py 2013-11-08 19:19:50 +0000
432@@ -0,0 +1,85 @@
433+# -*- coding: utf-8 -*-
434+##############################################################################
435+#
436+# Copyright (C) 2012 Andrea Cometa.
437+# Email: info@andreacometa.it
438+# Web site: http://www.andreacometa.it
439+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
440+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
441+# Copyright (C) 2012 Associazione OpenERP Italia
442+# (<http://www.openerp-italia.org>).
443+#
444+# This program is free software: you can redistribute it and/or modify
445+# it under the terms of the GNU Affero General Public License as published
446+# by the Free Software Foundation, either version 3 of the License, or
447+# (at your option) any later version.
448+#
449+# This program is distributed in the hope that it will be useful,
450+# but WITHOUT ANY WARRANTY; without even the implied warranty of
451+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
452+# GNU Affero General Public License for more details.
453+#
454+# You should have received a copy of the GNU Affero General Public License
455+# along with this program. If not, see <http://www.gnu.org/licenses/>.
456+#
457+##############################################################################
458+
459+from openerp.osv import fields, orm
460+
461+class riba_configurazione(orm.Model):
462+
463+ _name = "riba.configurazione"
464+ _description = "Parametri di configurazione per le Ricevute Bancarie"
465+
466+ _columns = {
467+ 'name' : fields.char("Descrizione", size=64, required=True),
468+ 'tipo' : fields.selection((('sbf', 'Salvo buon fine'),('incasso', 'Al dopo incasso')),
469+ "Modalità Emissione", required=True),
470+ 'bank_id' : fields.many2one('res.partner.bank', "Banca",
471+ required=True, help="Bank account used for Ri.Ba. issuing"),
472+
473+ 'acceptance_journal_id' : fields.many2one('account.journal', "Acceptance journal",
474+ domain=[('type', '=', 'bank')],
475+ help="Journal used when Ri.Ba. is accepted by the bank"),
476+ 'acceptance_account_id' : fields.many2one('account.account', "Acceptance account",
477+ domain=[('type', '=', 'receivable')], help='Account used when Ri.Ba. is accepted by the bank'),
478+
479+ 'company_id': fields.many2one('res.company', 'Company',required=True),
480+
481+ 'accreditation_journal_id' : fields.many2one('account.journal', "Accreditation journal",
482+ domain=[('type', '=', 'bank')],
483+ help="Journal used when Ri.Ba. amount is accredited by the bank"),
484+ 'accreditation_account_id' : fields.many2one('account.account', "Ri.Ba. bank account", help='Account used when Ri.Ba. is accepted by the bank'),
485+ 'bank_account_id' : fields.many2one('account.account', "Bank account",
486+ domain=[('type', '=', 'liquidity')]),
487+ 'bank_expense_account_id' : fields.many2one('account.account', "Bank Expenses account"),
488+
489+ 'unsolved_journal_id' : fields.many2one('account.journal', "Unsolved journal",
490+ domain=[('type', '=', 'bank')],
491+ help="Journal used when Ri.Ba. is unsolved"),
492+ 'overdue_effects_account_id' : fields.many2one('account.account', "Overdue Effects account",
493+ domain=[('type', '=', 'receivable')]),
494+ 'protest_charge_account_id' : fields.many2one('account.account', "Protest charge account"),
495+ }
496+
497+ _defaults = {
498+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'riba.configurazione', context=c),
499+ }
500+
501+ def get_default_value_by_distinta(self, cr, uid, field_name, context=None):
502+ if context is None:
503+ context = {}
504+ if not context.get('active_id', False):
505+ return False
506+ distinta_pool = self.pool.get('riba.distinta')
507+ distinta = distinta_pool.browse(cr, uid, context['active_id'], context=context)
508+ return distinta.config[field_name] and distinta.config[field_name].id or False
509+
510+ def get_default_value_by_distinta_line(self, cr, uid, field_name, context=None):
511+ if context is None:
512+ context = {}
513+ if not context.get('active_id', False):
514+ return False
515+ distinta_line = self.pool.get('riba.distinta.line').browse(cr, uid, context['active_id'], context=context)
516+ return distinta_line.distinta_id.config[field_name] and distinta_line.distinta_id.config[field_name].id or False
517+
518
519=== added file 'l10n_it_ricevute_bancarie/configurazione_view.xml'
520--- l10n_it_ricevute_bancarie/configurazione_view.xml 1970-01-01 00:00:00 +0000
521+++ l10n_it_ricevute_bancarie/configurazione_view.xml 2013-11-08 19:19:50 +0000
522@@ -0,0 +1,50 @@
523+<?xml version="1.0"?>
524+<openerp>
525+ <data>
526+ <!-- ====================================================== -->
527+ <!-- CONFIGURAZIONE RIBA FORM -->
528+ <!-- ====================================================== -->
529+ <record model="ir.ui.view" id="view_riba_configurazione_form">
530+ <field name="name">riba.configurazione.form</field>
531+ <field name="model">riba.configurazione</field>
532+ <field name="arch" type="xml">
533+ <form string="Ri.Ba. - Configurazione">
534+ <field name="name" />
535+ <field name="tipo" />
536+ <field name="bank_id" />
537+ <field name="company_id" widget="selection" groups="base.group_multi_company"/>
538+ <group string="Salvo buon fine" attrs="{'invisible': [('tipo','!=','sbf')]}" colspan="4" col="4">
539+ <separator colspan="4" string="Acceptance"/>
540+ <field name="acceptance_journal_id" attrs="{'required':[('tipo','=','sbf')]}"/>
541+ <field name="acceptance_account_id" attrs="{'required':[('tipo','=','sbf')]}"/>
542+ <separator colspan="4" string="Accreditation"/>
543+ <field name="accreditation_journal_id" />
544+ <field name="accreditation_account_id"/>
545+ <field name="bank_account_id" />
546+ <field name="bank_expense_account_id" />
547+ <separator colspan="4" string="Unsolved"/>
548+ <field name="unsolved_journal_id" />
549+ <field name="overdue_effects_account_id" />
550+ <field name="protest_charge_account_id" />
551+ </group>
552+ </form>
553+ </field>
554+ </record>
555+ <!-- ====================================================== -->
556+ <!-- CONFIGURAZIONE RIBA ACTION -->
557+ <!-- ====================================================== -->
558+ <record model="ir.actions.act_window" id="action_riba_configurazione">
559+ <field name="name">Ri.Ba. - Configuration</field>
560+ <field name="type">ir.actions.act_window</field>
561+ <field name="res_model">riba.configurazione</field>
562+ <field name="view_type">form</field>
563+ <field name="view_mode">tree,form</field>
564+ <!--field name="view_id" ref="view_riba_configurazione_form"/-->
565+ </record>
566+ <!-- ====================================================== -->
567+ <!-- CONFIGURAZIONE RIBA MENU -->
568+ <!-- ====================================================== -->
569+ <menuitem action="action_riba_configurazione" id="menu_riba_configurazione" name="Ri.Ba. Configuration" parent="account.menu_configuration_misc"/>
570+
571+ </data>
572+</openerp>
573
574=== added directory 'l10n_it_ricevute_bancarie/i18n'
575=== added file 'l10n_it_ricevute_bancarie/i18n/it.po'
576--- l10n_it_ricevute_bancarie/i18n/it.po 1970-01-01 00:00:00 +0000
577+++ l10n_it_ricevute_bancarie/i18n/it.po 2013-11-08 19:19:50 +0000
578@@ -0,0 +1,930 @@
579+# Translation of OpenERP Server.
580+# This file contains the translation of the following modules:
581+# * l10n_it_ricevute_bancarie
582+#
583+msgid ""
584+msgstr ""
585+"Project-Id-Version: OpenERP Server 6.1\n"
586+"Report-Msgid-Bugs-To: \n"
587+"POT-Creation-Date: 2012-05-21 10:13+0000\n"
588+"PO-Revision-Date: 2012-05-21 10:13+0000\n"
589+"Last-Translator: <>\n"
590+"Language-Team: \n"
591+"MIME-Version: 1.0\n"
592+"Content-Type: text/plain; charset=UTF-8\n"
593+"Content-Transfer-Encoding: \n"
594+"Plural-Forms: \n"
595+
596+#. module: l10n_it_ricevute_bancarie
597+#: help:riba.configurazione,acceptance_account_id:0
598+#: help:riba.configurazione,accreditation_account_id:0
599+msgid "Account used when Ri.Ba. is accepted by the bank"
600+msgstr "Il conto utilizzato quando la Ri.Ba. viene accettata dalla banca"
601+
602+#. module: l10n_it_ricevute_bancarie
603+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:143
604+#, python-format
605+msgid "No IBAN specified"
606+msgstr "Nessun IBAN specificato"
607+
608+#. module: l10n_it_ricevute_bancarie
609+#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.action_riba_configurazione
610+msgid "Ri.Ba. - Configuration"
611+msgstr "Ri.Ba. - Configurazione"
612+
613+#. module: l10n_it_ricevute_bancarie
614+#: help:res.partner.bank,codice_sia:0
615+msgid "Identification Code of the Company in the System Interbank"
616+msgstr "Codice identificativo dell'azienda nel sistema interbancario"
617+
618+#. module: l10n_it_ricevute_bancarie
619+#: field:riba.unsolved,effects_account_id:0
620+msgid "Effects account"
621+msgstr "Conto effetti"
622+
623+#. module: l10n_it_ricevute_bancarie
624+#: field:riba.configurazione,tipo:0
625+msgid "Modalità Emissione"
626+msgstr "Modalità Emissione"
627+
628+#. module: l10n_it_ricevute_bancarie
629+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:103
630+#, python-format
631+msgid "Accreditation Ri.Ba. %s"
632+msgstr "Accredito Ri.Ba. %s"
633+
634+#. module: l10n_it_ricevute_bancarie
635+#: help:riba.configurazione,acceptance_journal_id:0
636+msgid "Journal used when Ri.Ba. is accepted by the bank"
637+msgstr "Sezionale utilizzato quando la Ri.Ba. viene accettata dalla banca"
638+
639+#. module: l10n_it_ricevute_bancarie
640+#: field:riba.accreditation,accreditation_account_id:0
641+#: field:riba.configurazione,accreditation_account_id:0
642+#: field:riba.unsolved,riba_bank_account_id:0
643+msgid "Ri.Ba. bank account"
644+msgstr "Banca conto Ri.Ba."
645+
646+#. module: l10n_it_ricevute_bancarie
647+#: field:riba.distinta.line,bank_id:0
648+msgid "Debitor Bank"
649+msgstr "Banca debitore"
650+
651+#. module: l10n_it_ricevute_bancarie
652+#: help:res.partner,group_riba:0
653+msgid "Group Ri.Ba. by customer while issuing"
654+msgstr "Raggruppa le Ri.Ba. per cliente durante l'emissione"
655+
656+#. module: l10n_it_ricevute_bancarie
657+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:133
658+#, python-format
659+msgid "Overdue Effects"
660+msgstr "Effetti insoluti"
661+
662+#. module: l10n_it_ricevute_bancarie
663+#: field:riba.configurazione,company_id:0
664+#: field:riba.distinta,company_id:0
665+msgid "Company"
666+msgstr "Azienda"
667+
668+#. module: l10n_it_ricevute_bancarie
669+#: field:riba.distinta.line,invoice_date:0
670+msgid "Invoice Date"
671+msgstr "Data fattura"
672+
673+#. module: l10n_it_ricevute_bancarie
674+#: view:riba.distinta:0
675+msgid "Move line"
676+msgstr "Riga contabile"
677+
678+#. module: l10n_it_ricevute_bancarie
679+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:163
680+#, python-format
681+msgid "No VAT or Fiscalcode specified for: "
682+msgstr "P IVA o codice fiscale non specificato per:"
683+
684+#. module: l10n_it_ricevute_bancarie
685+#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.action_wizard_riba_file_export
686+msgid "Export Ri.Ba."
687+msgstr "Esporta Ri.Ba."
688+
689+#. module: l10n_it_ricevute_bancarie
690+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:121
691+#, python-format
692+msgid "Effects"
693+msgstr "Effetti"
694+
695+#. module: l10n_it_ricevute_bancarie
696+#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.riba_accreditation_action
697+#: view:riba.accreditation:0
698+msgid "Ri.Ba. Accreditation"
699+msgstr "Accredito Ri.Ba."
700+
701+#. module: l10n_it_ricevute_bancarie
702+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:193
703+#, python-format
704+msgid "No IBAN specified for "
705+msgstr "Nessun IBAN specificato per"
706+
707+#. module: l10n_it_ricevute_bancarie
708+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:182
709+#, python-format
710+msgid "No address specified for "
711+msgstr "Nessun indirizzo specificato per"
712+
713+#. module: l10n_it_ricevute_bancarie
714+#: field:riba.accreditation,accreditation_amount:0
715+msgid "Credit amount"
716+msgstr "Importo credito"
717+
718+#. module: l10n_it_ricevute_bancarie
719+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:148
720+#, python-format
721+msgid "No SIA Code specified for: "
722+msgstr "Nessun codice SIA specificato per:"
723+
724+#. module: l10n_it_ricevute_bancarie
725+#: view:riba.distinta:0
726+msgid "Move lines"
727+msgstr "Righe contabili"
728+
729+#. module: l10n_it_ricevute_bancarie
730+#: field:riba.configurazione,name:0
731+msgid "Descrizione"
732+msgstr "Descrizione"
733+
734+#. module: l10n_it_ricevute_bancarie
735+#: view:account.move.line:0
736+msgid "Total Debit"
737+msgstr "Debito totale"
738+
739+#. module: l10n_it_ricevute_bancarie
740+#: view:riba.distinta:0
741+#: field:riba.distinta.line,amount:0
742+#: field:riba.distinta.move.line,amount:0
743+msgid "Amount"
744+msgstr "Importo"
745+
746+#. module: l10n_it_ricevute_bancarie
747+#: sql_constraint:account.move.line:0
748+msgid "Wrong credit or debit value in accounting entry !"
749+msgstr "Valore di credito o debito errato nella registrazione contabile !"
750+
751+#. module: l10n_it_ricevute_bancarie
752+#: field:res.partner.bank,codice_sia:0
753+msgid "Codice SIA"
754+msgstr "Codice SIA"
755+
756+#. module: l10n_it_ricevute_bancarie
757+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:210
758+#, python-format
759+msgid "No VAT or Fiscal code specified for "
760+msgstr "P IVA o codice fiscale non specificato per"
761+
762+#. module: l10n_it_ricevute_bancarie
763+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_unsolved
764+msgid "riba.unsolved"
765+msgstr "riba.unsolved"
766+
767+#. module: l10n_it_ricevute_bancarie
768+#: help:riba.distinta.line,reconciled:0
769+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."
770+msgstr "Indica che la riga è stata pagata e la registrazione della riga è stata riconciliata con una o più registrazioni di pagamento"
771+
772+#. module: l10n_it_ricevute_bancarie
773+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_file_export
774+msgid "riba.file.export"
775+msgstr "riba.file.export"
776+
777+#. module: l10n_it_ricevute_bancarie
778+#: view:riba.configurazione:0
779+#: view:riba.distinta:0
780+#: selection:riba.distinta,state:0
781+#: selection:riba.distinta.line,state:0
782+msgid "Unsolved"
783+msgstr "Insoluto"
784+
785+#. module: l10n_it_ricevute_bancarie
786+#: field:riba.distinta,config:0
787+msgid "Configuration"
788+msgstr "Configurazione"
789+
790+#. module: l10n_it_ricevute_bancarie
791+#: field:riba.distinta,name:0
792+msgid "Reference"
793+msgstr "Riferimento"
794+
795+#. module: l10n_it_ricevute_bancarie
796+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:170
797+#: field:riba.distinta.line,unsolved_move_id:0
798+#, python-format
799+msgid "Unsolved Entry"
800+msgstr "Registrazione insoluto"
801+
802+#. module: l10n_it_ricevute_bancarie
803+#: help:riba.distinta,config:0
804+msgid "Riba configuration to be used"
805+msgstr "Configurazione Ri.Ba. da usare"
806+
807+#. module: l10n_it_ricevute_bancarie
808+#: constraint:account.move.line:0
809+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."
810+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."
811+
812+#. module: l10n_it_ricevute_bancarie
813+#: view:riba.distinta:0
814+msgid "Reset to Draft"
815+msgstr "Reimposta a bozza"
816+
817+#. module: l10n_it_ricevute_bancarie
818+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_res_partner
819+msgid "Partner"
820+msgstr "Partner"
821+
822+#. module: l10n_it_ricevute_bancarie
823+#: view:riba.file.export:0
824+msgid "Export Ri.Ba. file"
825+msgstr "Esporta file Ri.Ba."
826+
827+#. module: l10n_it_ricevute_bancarie
828+#: field:res.bank,banca_estera:0
829+msgid "Banca Estera"
830+msgstr "Banca Estera"
831+
832+#. module: l10n_it_ricevute_bancarie
833+#: view:riba.distinta:0
834+#: selection:riba.distinta.line,state:0
835+msgid "Confirmed"
836+msgstr "Confermata"
837+
838+#. module: l10n_it_ricevute_bancarie
839+#: field:riba.distinta,date_paid:0
840+msgid "Paid date"
841+msgstr "Data pagamento"
842+
843+#. module: l10n_it_ricevute_bancarie
844+#: view:riba.configurazione:0
845+msgid "Accreditation"
846+msgstr "Accredito"
847+
848+#. module: l10n_it_ricevute_bancarie
849+#: view:riba.accreditation:0
850+#: view:riba.emissione:0
851+#: view:riba.unsolved:0
852+msgid "Create"
853+msgstr "Crea"
854+
855+#. module: l10n_it_ricevute_bancarie
856+#: field:riba.accreditation,bank_expense_account_id:0
857+#: field:riba.configurazione,bank_expense_account_id:0
858+#: field:riba.unsolved,bank_expense_account_id:0
859+msgid "Bank Expenses account"
860+msgstr "Conto spese bancarie"
861+
862+#. module: l10n_it_ricevute_bancarie
863+#: field:riba.distinta,state:0
864+#: field:riba.distinta.line,state:0
865+msgid "State"
866+msgstr "Stato"
867+
868+#. module: l10n_it_ricevute_bancarie
869+#: view:account.move.line:0
870+#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.action_riba_da_emettere
871+#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.emissione_riba_action
872+#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_riba_da_emettere
873+#: view:riba.emissione:0
874+msgid "Issue Ri.Ba."
875+msgstr "Emetti Ri.Ba."
876+
877+#. module: l10n_it_ricevute_bancarie
878+#: view:account.invoice:0
879+msgid "Unsolved Ri.Ba."
880+msgstr "Ri.Ba. insolute"
881+
882+#. module: l10n_it_ricevute_bancarie
883+#: field:riba.distinta,type:0
884+#: field:riba.distinta.line,type:0
885+msgid "Type"
886+msgstr "Tipo"
887+
888+#. module: l10n_it_ricevute_bancarie
889+#: help:riba.configurazione,unsolved_journal_id:0
890+msgid "Journal used when Ri.Ba. is unsolved"
891+msgstr "Sezionale utilizzato quando la Ri.Ba. è insoluta"
892+
893+#. module: l10n_it_ricevute_bancarie
894+#: field:riba.distinta.line,reconciled:0
895+msgid "Paid/Reconciled"
896+msgstr "Pagato/Riconciliato"
897+
898+#. module: l10n_it_ricevute_bancarie
899+#: field:riba.emissione,configurazione:0
900+msgid "Configurazione"
901+msgstr "Configurazione"
902+
903+#. module: l10n_it_ricevute_bancarie
904+#: field:riba.unsolved,effects_amount:0
905+msgid "Effects amount"
906+msgstr "Importo effetti"
907+
908+#. module: l10n_it_ricevute_bancarie
909+#: field:riba.accreditation,expense_amount:0
910+#: field:riba.unsolved,expense_amount:0
911+msgid "Expenses amount"
912+msgstr "Importo spese"
913+
914+#. module: l10n_it_ricevute_bancarie
915+#: field:account.move.line,riba:0
916+msgid "RiBa"
917+msgstr "Ri.Ba."
918+
919+#. module: l10n_it_ricevute_bancarie
920+#: selection:riba.file.export,state:0
921+msgid "get"
922+msgstr "get"
923+
924+#. module: l10n_it_ricevute_bancarie
925+#: view:riba.distinta:0
926+#: selection:riba.distinta,state:0
927+msgid "Accepted"
928+msgstr "Accettata"
929+
930+#. module: l10n_it_ricevute_bancarie
931+#: view:account.move.line:0
932+msgid "To Issue"
933+msgstr "Da emettere"
934+
935+#. module: l10n_it_ricevute_bancarie
936+#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.distinta_riba_action
937+msgid "Distinta Ri.Ba."
938+msgstr "Distinta Ri.Ba."
939+
940+#. module: l10n_it_ricevute_bancarie
941+#: view:riba.distinta:0
942+#: field:riba.distinta,acceptance_move_ids:0
943+msgid "Acceptance Entries"
944+msgstr "Registrazioni di accettazione"
945+
946+#. module: l10n_it_ricevute_bancarie
947+#: field:riba.distinta,date_unsolved:0
948+msgid "Unsolved date"
949+msgstr "Data insoluto"
950+
951+#. module: l10n_it_ricevute_bancarie
952+#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_riba
953+msgid "Ri.Ba."
954+msgstr "Ri.Ba."
955+
956+#. module: l10n_it_ricevute_bancarie
957+#: field:riba.distinta.move.line,riba_line_id:0
958+msgid "Distinta line"
959+msgstr "Riga distinta"
960+
961+#. module: l10n_it_ricevute_bancarie
962+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:131
963+#: view:riba.distinta:0
964+#: field:riba.distinta,accreditation_move_id:0
965+#, python-format
966+msgid "Accreditation Entry"
967+msgstr "Registrazione accredito"
968+
969+#. module: l10n_it_ricevute_bancarie
970+#: field:riba.configurazione,unsolved_journal_id:0
971+#: field:riba.unsolved,unsolved_journal_id:0
972+msgid "Unsolved journal"
973+msgstr "Sezionale insoluti"
974+
975+#. module: l10n_it_ricevute_bancarie
976+#: field:riba.distinta.line,move_line_ids:0
977+msgid "Credit move lines"
978+msgstr "Righe contabili di credito"
979+
980+#. module: l10n_it_ricevute_bancarie
981+#: field:riba.distinta.line,due_date:0
982+msgid "Due date"
983+msgstr "Data scadenza"
984+
985+#. module: l10n_it_ricevute_bancarie
986+#: field:riba.accreditation,accreditation_journal_id:0
987+#: field:riba.configurazione,accreditation_journal_id:0
988+msgid "Accreditation journal"
989+msgstr "Sezionale di accredito"
990+
991+#. module: l10n_it_ricevute_bancarie
992+#: field:riba.configurazione,protest_charge_account_id:0
993+msgid "Protest charge account"
994+msgstr "Conto spese di protesto"
995+
996+#. module: l10n_it_ricevute_bancarie
997+#: constraint:account.move.line:0
998+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."
999+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."
1000+
1001+#. module: l10n_it_ricevute_bancarie
1002+#: view:account.move.line:0
1003+msgid "Group by..."
1004+msgstr "Raggruppa per..."
1005+
1006+#. module: l10n_it_ricevute_bancarie
1007+#: field:riba.distinta,date_accreditation:0
1008+msgid "Accreditation date"
1009+msgstr "Data accredito"
1010+
1011+#. module: l10n_it_ricevute_bancarie
1012+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:155
1013+#, python-format
1014+msgid "No address specified for: "
1015+msgstr "Nessun indirizzo specificato per:"
1016+
1017+#. module: l10n_it_ricevute_bancarie
1018+#: view:account.move.line:0
1019+msgid "Search Journal Items"
1020+msgstr "Cerca scritture"
1021+
1022+#. module: l10n_it_ricevute_bancarie
1023+#: field:riba.configurazione,overdue_effects_account_id:0
1024+#: field:riba.unsolved,overdue_effects_account_id:0
1025+msgid "Overdue Effects account"
1026+msgstr "Conto effetti insoluti"
1027+
1028+#. module: l10n_it_ricevute_bancarie
1029+#: field:riba.unsolved,overdue_effects_amount:0
1030+msgid "Overdue Effects amount"
1031+msgstr "Importo effetti insoluti"
1032+
1033+#. module: l10n_it_ricevute_bancarie
1034+#: view:riba.accreditation:0
1035+msgid "You can also skip this step and set the distinta status to 'accredited' anyway"
1036+msgstr "E' anche possibile saltare questo passo e impostare comunque la distinta dello stato di 'accreditata'"
1037+
1038+#. module: l10n_it_ricevute_bancarie
1039+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:191
1040+#, python-format
1041+msgid "No CAP specified for "
1042+msgstr "Nessun CAP specificato per"
1043+
1044+#. module: l10n_it_ricevute_bancarie
1045+#: view:riba.unsolved:0
1046+msgid "You can also skip this step and set the line status to 'unsolved' anyway"
1047+msgstr "E' anche possibile saltare questo passo e impostare comunque lo stato della riga a 'insoluta'"
1048+
1049+#. module: l10n_it_ricevute_bancarie
1050+#: view:riba.distinta:0
1051+msgid "Detail"
1052+msgstr "Dettaglio"
1053+
1054+#. module: l10n_it_ricevute_bancarie
1055+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_emissione
1056+msgid "Emissione Ricevute Bancarie"
1057+msgstr "Emissione Ricevute Bancarie"
1058+
1059+#. module: l10n_it_ricevute_bancarie
1060+#: view:riba.distinta:0
1061+#: selection:riba.distinta,state:0
1062+#: selection:riba.distinta.line,state:0
1063+msgid "Draft"
1064+msgstr "Bozza"
1065+
1066+#. module: l10n_it_ricevute_bancarie
1067+#: field:riba.file.export,state:0
1068+msgid "unknown"
1069+msgstr "sconosciuto"
1070+
1071+#. module: l10n_it_ricevute_bancarie
1072+#: view:riba.distinta:0
1073+#: selection:riba.distinta,state:0
1074+#: selection:riba.distinta.line,state:0
1075+msgid "Paid"
1076+msgstr "Pagata"
1077+
1078+#. module: l10n_it_ricevute_bancarie
1079+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_accreditation
1080+msgid "Bank accreditation"
1081+msgstr "Accredito banca"
1082+
1083+#. module: l10n_it_ricevute_bancarie
1084+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_distinta_line
1085+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_distinta_move_line
1086+msgid "Riba details"
1087+msgstr "Dettagli Ri.Ba."
1088+
1089+#. module: l10n_it_ricevute_bancarie
1090+#: field:riba.distinta,user_id:0
1091+msgid "User"
1092+msgstr "Utente"
1093+
1094+#. module: l10n_it_ricevute_bancarie
1095+#: field:riba.distinta,unsolved_move_ids:0
1096+msgid "Unsolved Entries"
1097+msgstr "Registrazioni insoluti"
1098+
1099+#. module: l10n_it_ricevute_bancarie
1100+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_account_move_line
1101+msgid "Journal Items"
1102+msgstr "Voci sezionale"
1103+
1104+#. module: l10n_it_ricevute_bancarie
1105+#: constraint:account.move.line:0
1106+msgid "You can not create journal items on an account of type view."
1107+msgstr "Non è possibile effettuare registrazioni su un conto di tipo vista."
1108+
1109+#. module: l10n_it_ricevute_bancarie
1110+#: help:riba.configurazione,bank_id:0
1111+msgid "Bank account used for Ri.Ba. issuing"
1112+msgstr "Conto bancario utilizzato per l'emissione delle Ri.Ba."
1113+
1114+#. module: l10n_it_ricevute_bancarie
1115+#: selection:riba.file.export,state:0
1116+msgid "choose"
1117+msgstr "choose"
1118+
1119+#. module: l10n_it_ricevute_bancarie
1120+#: constraint:res.partner.bank:0
1121+msgid "\n"
1122+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
1123+msgstr "\n"
1124+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
1125+
1126+#. module: l10n_it_ricevute_bancarie
1127+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:127
1128+#, python-format
1129+msgid "Ri.Ba. Bank"
1130+msgstr "Banca Ri.Ba."
1131+
1132+#. module: l10n_it_ricevute_bancarie
1133+#: view:riba.unsolved:0
1134+msgid "This wizard generates the journal entry related to an unsolved payment"
1135+msgstr "Questo wizard genererà la registrazione relativa ad un pagamento insoluto"
1136+
1137+#. module: l10n_it_ricevute_bancarie
1138+#: field:riba.distinta,date_created:0
1139+msgid "Creation date"
1140+msgstr "Data creazione"
1141+
1142+#. module: l10n_it_ricevute_bancarie
1143+#: view:riba.distinta:0
1144+msgid "Invoice entries"
1145+msgstr "Registrazioni fattura"
1146+
1147+#. module: l10n_it_ricevute_bancarie
1148+#: help:riba.configurazione,accreditation_journal_id:0
1149+msgid "Journal used when Ri.Ba. amount is accredited by the bank"
1150+msgstr "Sezionale utilizzato quando l'import della Ri.Ba. viene accreditato dalla banca"
1151+
1152+#. module: l10n_it_ricevute_bancarie
1153+#: field:riba.distinta,line_ids:0
1154+msgid "Riba deadlines"
1155+msgstr "Scadenze Ri.Ba."
1156+
1157+#. module: l10n_it_ricevute_bancarie
1158+#: field:riba.unsolved,riba_bank_amount:0
1159+msgid "Ri.Ba. bank amount"
1160+msgstr "Importo banca Ri.Ba."
1161+
1162+#. module: l10n_it_ricevute_bancarie
1163+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:107
1164+#, python-format
1165+msgid "Credit"
1166+msgstr "Credito"
1167+
1168+#. module: l10n_it_ricevute_bancarie
1169+#: code:addons/l10n_it_ricevute_bancarie/riba.py:108
1170+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:83
1171+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:94
1172+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:101
1173+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:94
1174+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:108
1175+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:115
1176+#, python-format
1177+msgid "Error"
1178+msgstr "Errore"
1179+
1180+#. module: l10n_it_ricevute_bancarie
1181+#: field:riba.distinta,date_accepted:0
1182+msgid "Acceptance date"
1183+msgstr "Data accettazione"
1184+
1185+#. module: l10n_it_ricevute_bancarie
1186+#: field:riba.configurazione,acceptance_account_id:0
1187+msgid "Acceptance account"
1188+msgstr "Importo accettazione"
1189+
1190+#. module: l10n_it_ricevute_bancarie
1191+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:187
1192+#, python-format
1193+msgid "No Street specified for "
1194+msgstr "Nessun indirizzo specificato per"
1195+
1196+#. module: l10n_it_ricevute_bancarie
1197+#: field:riba.distinta.line,partner_id:0
1198+msgid "Cliente"
1199+msgstr "Cliente"
1200+
1201+#. module: l10n_it_ricevute_bancarie
1202+#: view:account.move.line:0
1203+msgid "Group by customer"
1204+msgstr "Raggruppa per cliente"
1205+
1206+#. module: l10n_it_ricevute_bancarie
1207+#: sql_constraint:account.invoice:0
1208+msgid "Invoice Number must be unique per Company!"
1209+msgstr "Invoice Number must be unique per Company!"
1210+
1211+#. module: l10n_it_ricevute_bancarie
1212+#: view:riba.distinta:0
1213+msgid "Distinte Ri.Ba."
1214+msgstr "Distinte Ri.Ba."
1215+
1216+#. module: l10n_it_ricevute_bancarie
1217+#: view:riba.accreditation:0
1218+msgid "Skip and confirm accreditation"
1219+msgstr "Salta e conferma accredito"
1220+
1221+#. module: l10n_it_ricevute_bancarie
1222+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_res_partner_bank
1223+msgid "Bank Accounts"
1224+msgstr "Conti Bancari"
1225+
1226+#. module: l10n_it_ricevute_bancarie
1227+#: field:riba.distinta.line,sequence:0
1228+msgid "Number"
1229+msgstr "Numero"
1230+
1231+#. module: l10n_it_ricevute_bancarie
1232+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:83
1233+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:94
1234+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:94
1235+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:108
1236+#, python-format
1237+msgid "No active ID found"
1238+msgstr "Nessun ID trovato"
1239+
1240+#. module: l10n_it_ricevute_bancarie
1241+#: view:riba.distinta:0
1242+msgid "General"
1243+msgstr "Generale"
1244+
1245+#. module: l10n_it_ricevute_bancarie
1246+#: view:riba.emissione:0
1247+msgid "This wizard generates the Ri.Ba. list, do you confirm?"
1248+msgstr "Questo wizard genererà la distinta Ri.Ba., confermi?"
1249+
1250+#. module: l10n_it_ricevute_bancarie
1251+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_account_invoice
1252+msgid "Invoice"
1253+msgstr "Fattura"
1254+
1255+#. module: l10n_it_ricevute_bancarie
1256+#: view:riba.accreditation:0
1257+#: view:riba.distinta:0
1258+#: view:riba.emissione:0
1259+#: view:riba.file.export:0
1260+#: view:riba.unsolved:0
1261+msgid "Cancel"
1262+msgstr "Annulla"
1263+
1264+#. module: l10n_it_ricevute_bancarie
1265+#: view:account.move.line:0
1266+msgid "Group by invoice"
1267+msgstr "Raggruppa per fattura"
1268+
1269+#. module: l10n_it_ricevute_bancarie
1270+#: field:riba.distinta.line,acceptance_account_id:0
1271+msgid "Acceptance Account"
1272+msgstr "Conto accettazione"
1273+
1274+#. module: l10n_it_ricevute_bancarie
1275+#: selection:riba.distinta,state:0
1276+msgid "Canceled"
1277+msgstr "Annullata"
1278+
1279+#. module: l10n_it_ricevute_bancarie
1280+#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.riba_unsolved_action
1281+#: view:riba.unsolved:0
1282+msgid "Ri.Ba. Unsolved"
1283+msgstr "Ri.Ba. Insoluta"
1284+
1285+#. module: l10n_it_ricevute_bancarie
1286+#: field:account.invoice,unsolved_move_line_ids:0
1287+msgid "Unsolved journal items"
1288+msgstr "Registrazioni insoluti"
1289+
1290+#. module: l10n_it_ricevute_bancarie
1291+#: constraint:account.move.line:0
1292+msgid "Company must be the same for its related account and period."
1293+msgstr "Company must be the same for its related account and period."
1294+
1295+#. module: l10n_it_ricevute_bancarie
1296+#: view:riba.distinta:0
1297+msgid "Other Info"
1298+msgstr "Altre info"
1299+
1300+#. module: l10n_it_ricevute_bancarie
1301+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_account_payment_term
1302+msgid "Payment Term"
1303+msgstr "Termine di pagamento"
1304+
1305+#. module: l10n_it_ricevute_bancarie
1306+#: view:riba.configurazione:0
1307+msgid "Acceptance"
1308+msgstr "Accettazione"
1309+
1310+#. module: l10n_it_ricevute_bancarie
1311+#: view:riba.distinta:0
1312+#: selection:riba.distinta,state:0
1313+#: selection:riba.distinta.line,state:0
1314+msgid "Accredited"
1315+msgstr "Accreditata"
1316+
1317+#. module: l10n_it_ricevute_bancarie
1318+#: field:riba.distinta.move.line,move_line_id:0
1319+msgid "Credit move line"
1320+msgstr "Riga credito"
1321+
1322+#. module: l10n_it_ricevute_bancarie
1323+#: view:riba.unsolved:0
1324+msgid "Skip and confirm the unsolved state"
1325+msgstr "Salta e conferma lo stato di insoluto"
1326+
1327+#. module: l10n_it_ricevute_bancarie
1328+#: view:riba.distinta:0
1329+msgid "Ri.Ba. - Distinta"
1330+msgstr "Ri.Ba. - Distinta"
1331+
1332+#. module: l10n_it_ricevute_bancarie
1333+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:101
1334+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:115
1335+#, python-format
1336+msgid "Every account is mandatory"
1337+msgstr "Ogni conto è obbligatorio"
1338+
1339+#. module: l10n_it_ricevute_bancarie
1340+#: view:riba.configurazione:0
1341+msgid "Ri.Ba. - Configurazione"
1342+msgstr "Ri.Ba. - Configurazione"
1343+
1344+#. module: l10n_it_ricevute_bancarie
1345+#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_riba_configurazione
1346+msgid "Ri.Ba. Configuration"
1347+msgstr "Ri.Ba. Configurazione"
1348+
1349+#. module: l10n_it_ricevute_bancarie
1350+#: field:res.partner,group_riba:0
1351+msgid "Group Ri.Ba."
1352+msgstr "Raggruppa Ri.Ba."
1353+
1354+#. module: l10n_it_ricevute_bancarie
1355+#: field:riba.accreditation,bank_account_id:0
1356+#: field:riba.configurazione,bank_account_id:0
1357+#: field:riba.unsolved,bank_account_id:0
1358+msgid "Bank account"
1359+msgstr "Conto banca"
1360+
1361+#. module: l10n_it_ricevute_bancarie
1362+#: field:riba.unsolved,bank_amount:0
1363+msgid "Taken amount"
1364+msgstr "Importo prelevato"
1365+
1366+#. module: l10n_it_ricevute_bancarie
1367+#: field:account.payment.term,riba:0
1368+msgid "Riba"
1369+msgstr "Ri.Ba."
1370+
1371+#. module: l10n_it_ricevute_bancarie
1372+#: field:riba.distinta.line,invoice_number:0
1373+msgid "Invoice Number"
1374+msgstr "Numero fattura"
1375+
1376+#. module: l10n_it_ricevute_bancarie
1377+#: view:riba.accreditation:0
1378+msgid "This wizard generates the journal entry related to accreditation received from the bank"
1379+msgstr "Questo wizard genererà la registrazione relativa all'accredito ricevuto dalla banca"
1380+
1381+#. module: l10n_it_ricevute_bancarie
1382+#: view:res.partner:0
1383+msgid "Ri.Ba. properties"
1384+msgstr "Proprietà Ri.Ba."
1385+
1386+#. module: l10n_it_ricevute_bancarie
1387+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:113
1388+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py:119
1389+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:141
1390+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_res_bank
1391+#, python-format
1392+msgid "Bank"
1393+msgstr "Banca"
1394+
1395+#. module: l10n_it_ricevute_bancarie
1396+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:117
1397+#, python-format
1398+msgid "Unsolved Ri.Ba. %s - line %s"
1399+msgstr "Ri.Ba. %s insoluta - riga %s"
1400+
1401+#. module: l10n_it_ricevute_bancarie
1402+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_distinta
1403+msgid "Distinta Riba"
1404+msgstr "Distinta Riba"
1405+
1406+#. module: l10n_it_ricevute_bancarie
1407+#: selection:riba.configurazione,tipo:0
1408+msgid "Al dopo incasso"
1409+msgstr "Al dopo incasso"
1410+
1411+#. module: l10n_it_ricevute_bancarie
1412+#: view:riba.distinta:0
1413+#: field:riba.distinta,payment_ids:0
1414+#: field:riba.distinta.line,payment_ids:0
1415+msgid "Payments"
1416+msgstr "Pagamenti"
1417+
1418+#. module: l10n_it_ricevute_bancarie
1419+#: view:riba.configurazione:0
1420+#: selection:riba.configurazione,tipo:0
1421+msgid "Salvo buon fine"
1422+msgstr "Salvo buon fine"
1423+
1424+#. module: l10n_it_ricevute_bancarie
1425+#: field:riba.accreditation,bank_amount:0
1426+msgid "Versed amount"
1427+msgstr "Importo versato"
1428+
1429+#. module: l10n_it_ricevute_bancarie
1430+#: field:account.move.line,unsolved_invoice_ids:0
1431+#: model:ir.actions.act_window,name:l10n_it_ricevute_bancarie.action_invoice_tree1
1432+#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_invoices
1433+msgid "Unsolved Invoices"
1434+msgstr "Fatture insolute"
1435+
1436+#. module: l10n_it_ricevute_bancarie
1437+#: constraint:account.move.line:0
1438+msgid "You can not create journal items on closed account."
1439+msgstr "You can not create journal items on closed account."
1440+
1441+#. module: l10n_it_ricevute_bancarie
1442+#: code:addons/l10n_it_ricevute_bancarie/wizard/riba_file_export.py:200
1443+#, python-format
1444+msgid "No City specified for "
1445+msgstr "Nessuna città specificata per"
1446+
1447+#. module: l10n_it_ricevute_bancarie
1448+#: field:riba.distinta.line,distinta_id:0
1449+msgid "Distinta"
1450+msgstr "Distinta"
1451+
1452+#. module: l10n_it_ricevute_bancarie
1453+#: model:ir.model,name:l10n_it_ricevute_bancarie.model_riba_configurazione
1454+msgid "Parametri di configurazione per le Ricevute Bancarie"
1455+msgstr "Parametri di configurazione per le Ricevute Bancarie"
1456+
1457+#. module: l10n_it_ricevute_bancarie
1458+#: model:ir.ui.menu,name:l10n_it_ricevute_bancarie.menu_riba_distinte
1459+msgid "Distinte"
1460+msgstr "Distinte"
1461+
1462+#. module: l10n_it_ricevute_bancarie
1463+#: field:riba.distinta.line,acceptance_move_id:0
1464+msgid "Acceptance Entry"
1465+msgstr "Registrazione di accettazione"
1466+
1467+#. module: l10n_it_ricevute_bancarie
1468+#: field:riba.configurazione,acceptance_journal_id:0
1469+msgid "Acceptance journal"
1470+msgstr "Sezionale di accettazione"
1471+
1472+#. module: l10n_it_ricevute_bancarie
1473+#: code:addons/l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py:147
1474+#, python-format
1475+msgid "Expenses"
1476+msgstr "Spese"
1477+
1478+#. module: l10n_it_ricevute_bancarie
1479+#: code:addons/l10n_it_ricevute_bancarie/riba.py:108
1480+#, python-format
1481+msgid "Distinta %s is in state %s. You can only delete documents in state draft or canceled"
1482+msgstr "La distinta %s è nello stato %s. E' possibile eliminare solamente i documenti in stato bozza o annullato."
1483+
1484+#. module: l10n_it_ricevute_bancarie
1485+#: field:riba.configurazione,bank_id:0
1486+msgid "Banca"
1487+msgstr "Banca"
1488+
1489+#. module: l10n_it_ricevute_bancarie
1490+#: view:riba.file.export:0
1491+msgid "Export"
1492+msgstr "Export"
1493+
1494+#. module: l10n_it_ricevute_bancarie
1495+#: field:riba.file.export,riba_.txt:0
1496+msgid "File"
1497+msgstr "File"
1498+
1499+#. module: l10n_it_ricevute_bancarie
1500+#: view:riba.distinta:0
1501+msgid "Accounting"
1502+msgstr "Contabilità"
1503+
1504+#. module: l10n_it_ricevute_bancarie
1505+#: field:account.move.line,distinta_line_ids:0
1506+msgid "Dettaglio riba"
1507+msgstr "Dettaglio riba"
1508+
1509
1510=== added directory 'l10n_it_ricevute_bancarie/partner'
1511=== added file 'l10n_it_ricevute_bancarie/partner/__init__.py'
1512--- l10n_it_ricevute_bancarie/partner/__init__.py 1970-01-01 00:00:00 +0000
1513+++ l10n_it_ricevute_bancarie/partner/__init__.py 2013-11-08 19:19:50 +0000
1514@@ -0,0 +1,24 @@
1515+# -*- coding: utf-8 -*-
1516+##############################################################################
1517+#
1518+# Copyright (C) 2012 Andrea Cometa.
1519+# Email: info@andreacometa.it
1520+# Web site: http://www.andreacometa.it
1521+#
1522+# This program is free software: you can redistribute it and/or modify
1523+# it under the terms of the GNU Affero General Public License as published
1524+# by the Free Software Foundation, either version 3 of the License, or
1525+# (at your option) any later version.
1526+#
1527+# This program is distributed in the hope that it will be useful,
1528+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1529+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1530+# GNU Affero General Public License for more details.
1531+#
1532+# You should have received a copy of the GNU Affero General Public License
1533+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1534+#
1535+##############################################################################
1536+
1537+import partner
1538+
1539
1540=== added file 'l10n_it_ricevute_bancarie/partner/partner.py'
1541--- l10n_it_ricevute_bancarie/partner/partner.py 1970-01-01 00:00:00 +0000
1542+++ l10n_it_ricevute_bancarie/partner/partner.py 2013-11-08 19:19:50 +0000
1543@@ -0,0 +1,37 @@
1544+# -*- coding: utf-8 -*-
1545+##############################################################################
1546+#
1547+# Copyright (C) 2012 Andrea Cometa.
1548+# Email: info@andreacometa.it
1549+# Web site: http://www.andreacometa.it
1550+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
1551+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
1552+# Copyright (C) 2012 Associazione OpenERP Italia
1553+# (<http://www.openerp-italia.org>).
1554+#
1555+# This program is free software: you can redistribute it and/or modify
1556+# it under the terms of the GNU Affero General Public License as published
1557+# by the Free Software Foundation, either version 3 of the License, or
1558+# (at your option) any later version.
1559+#
1560+# This program is distributed in the hope that it will be useful,
1561+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1562+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1563+# GNU Affero General Public License for more details.
1564+#
1565+# You should have received a copy of the GNU Affero General Public License
1566+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1567+#
1568+##############################################################################
1569+
1570+from openerp.osv import fields, orm
1571+
1572+class res_partner(orm.Model):
1573+
1574+ _name = "res.partner"
1575+ _inherit = "res.partner"
1576+
1577+ _columns = {
1578+ 'group_riba' : fields.boolean("Group Ri.Ba.",
1579+ help="Group Ri.Ba. by customer while issuing"),
1580+ }
1581
1582=== added file 'l10n_it_ricevute_bancarie/partner/partner_view.xml'
1583--- l10n_it_ricevute_bancarie/partner/partner_view.xml 1970-01-01 00:00:00 +0000
1584+++ l10n_it_ricevute_bancarie/partner/partner_view.xml 2013-11-08 19:19:50 +0000
1585@@ -0,0 +1,23 @@
1586+<?xml version="1.0"?>
1587+<openerp>
1588+ <data>
1589+
1590+ <!--========================================================-->
1591+ <!-- RES.PARTNER - FORM -->
1592+ <!--========================================================-->
1593+ <record id="view_partner_form_riba" model="ir.ui.view">
1594+ <field name="name">res.parner.form.riba</field>
1595+ <field name="model">res.partner</field>
1596+ <field name="inherit_id" ref="base.view_partner_form"/>
1597+ <field name="arch" type="xml">
1598+ <field name="property_payment_term" position="after">
1599+ <separator string="Ri.Ba. properties" colspan="2"/>
1600+ <group col="4" colspan="2">
1601+ <field name="group_riba"/>
1602+ </group>
1603+ </field>
1604+ </field>
1605+ </record>
1606+
1607+ </data>
1608+</openerp>
1609
1610=== added file 'l10n_it_ricevute_bancarie/riba.py'
1611--- l10n_it_ricevute_bancarie/riba.py 1970-01-01 00:00:00 +0000
1612+++ l10n_it_ricevute_bancarie/riba.py 2013-11-08 19:19:50 +0000
1613@@ -0,0 +1,401 @@
1614+# -*- coding: utf-8 -*-
1615+##############################################################################
1616+#
1617+# Copyright (C) 2012 Andrea Cometa.
1618+# Email: info@andreacometa.it
1619+# Web site: http://www.andreacometa.it
1620+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
1621+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
1622+# Copyright (C) 2012 Associazione OpenERP Italia
1623+# (<http://www.openerp-italia.org>).
1624+#
1625+# This program is free software: you can redistribute it and/or modify
1626+# it under the terms of the GNU Affero General Public License as published
1627+# by the Free Software Foundation, either version 3 of the License, or
1628+# (at your option) any later version.
1629+#
1630+# This program is distributed in the hope that it will be useful,
1631+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1632+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1633+# GNU Affero General Public License for more details.
1634+#
1635+# You should have received a copy of the GNU Affero General Public License
1636+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1637+#
1638+##############################################################################
1639+
1640+from openerp.osv import fields, orm
1641+import time
1642+import decimal_precision as dp
1643+import netsvc
1644+from tools.translate import _
1645+
1646+class riba_distinta(orm.Model):
1647+
1648+ def _get_acceptance_move_ids(self, cr, uid, ids, field_name, arg, context):
1649+ res = {}
1650+ for distinta in self.browse(cr, uid, ids, context=context):
1651+ move_ids = []
1652+ for line in distinta.line_ids:
1653+ if line.acceptance_move_id and line.acceptance_move_id.id not in move_ids:
1654+ move_ids.append(line.acceptance_move_id.id)
1655+ res[distinta.id] = move_ids
1656+ return res
1657+
1658+ def _get_unsolved_move_ids(self, cr, uid, ids, field_name, arg, context):
1659+ res = {}
1660+ for distinta in self.browse(cr, uid, ids, context=context):
1661+ move_ids = []
1662+ for line in distinta.line_ids:
1663+ if line.unsolved_move_id and line.unsolved_move_id.id not in move_ids:
1664+ move_ids.append(line.unsolved_move_id.id)
1665+ res[distinta.id] = move_ids
1666+ return res
1667+
1668+ def _get_payment_ids(self, cr, uid, ids, field_name, arg, context):
1669+ res = {}
1670+ for distinta in self.browse(cr, uid, ids, context=context):
1671+ move_line_ids = []
1672+ for line in distinta.line_ids:
1673+ for payment in line.payment_ids:
1674+ if payment.id not in move_line_ids:
1675+ move_line_ids.append(payment.id)
1676+ res[distinta.id] = move_line_ids
1677+ return res
1678+
1679+ _name = 'riba.distinta'
1680+ _description = 'Distinta Riba'
1681+
1682+ _columns = {
1683+ 'name': fields.char('Reference', size=128, required=True, readonly=True, states={'draft': [('readonly', False)]}),
1684+ 'config': fields.many2one('riba.configurazione', 'Configuration',
1685+ select=True, required=True, readonly=True, states={'draft': [('readonly', False)]},
1686+ help='Riba configuration to be used'),
1687+ 'state': fields.selection([
1688+ ('draft', 'Draft'),
1689+ ('accepted', 'Accepted'),
1690+ ('accredited', 'Accredited'),
1691+ ('paid', 'Paid'),
1692+ ('unsolved', 'Unsolved'),
1693+ ('cancel', 'Canceled')], 'State', select=True, readonly=True),
1694+ 'line_ids': fields.one2many('riba.distinta.line', 'distinta_id',
1695+ 'Riba deadlines', readonly=True, states={'draft': [('readonly', False)]}),
1696+ 'user_id': fields.many2one('res.users', 'User', required=True, readonly=True, states={'draft': [('readonly', False)]}),
1697+ 'date_created': fields.date('Creation date', readonly=True),
1698+ 'date_accepted': fields.date('Acceptance date', readonly=True),
1699+ 'date_accreditation': fields.date('Accreditation date', readonly=True),
1700+ 'date_paid': fields.date('Paid date', readonly=True),
1701+ 'date_unsolved': fields.date('Unsolved date', readonly=True),
1702+ 'company_id': fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft':[('readonly',False)]}),
1703+ 'acceptance_move_ids': fields.function(_get_acceptance_move_ids, type='many2many', relation='account.move', method=True, string="Acceptance Entries"),
1704+ 'accreditation_move_id': fields.many2one('account.move', 'Accreditation Entry', readonly=True),
1705+ 'payment_ids': fields.function(_get_payment_ids, relation='account.move.line', type="many2many", string='Payments'),
1706+ 'unsolved_move_ids': fields.function(_get_unsolved_move_ids, type='many2many', relation='account.move', method=True, string="Unsolved Entries"),
1707+ 'type': fields.related('config', 'tipo', type='char', size=32, string='Type', readonly=True),
1708+ }
1709+
1710+ _defaults = {
1711+ 'user_id': lambda self,cr,uid,context: uid,
1712+ 'date_created': fields.date.context_today,
1713+ 'name': lambda self,cr,uid,context: self.pool.get('ir.sequence').get(cr, uid, 'riba.distinta'),
1714+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'riba.distinta', context=c),
1715+ }
1716+
1717+ def unlink(self, cr, uid, ids, context=None):
1718+ for distinta in self.browse(cr, uid, ids, context=context):
1719+ if distinta.state not in ('draft', 'cancel'):
1720+ raise orm.except_orm(_('Error'),_('Distinta %s is in state %s. You can only delete documents in state draft or canceled') % (distinta.name, distinta.state))
1721+ osv.osv.unlink(cr, uid, ids, context=context)
1722+ return True
1723+
1724+ def confirm(self, cr, uid, ids, context=None):
1725+ line_pool = self.pool.get('riba.distinta.line')
1726+ for distinta in self.browse(cr, uid, ids, context=context):
1727+ line_pool.confirm(cr, uid, [line.id for line in distinta.line_ids], context=context)
1728+ return True
1729+
1730+ def riba_new(self, cr, uid, ids, context=None):
1731+ self.write(cr, uid, ids, {
1732+ 'state': 'draft',
1733+ }, context=context)
1734+ return True
1735+
1736+ def riba_cancel(self, cr, uid, ids, context=None):
1737+ for distinta in self.browse(cr, uid, ids, context=context):
1738+ # TODO remove ervery other move
1739+ for line in distinta.line_ids:
1740+ if line.acceptance_move_id:
1741+ line.acceptance_move_id.unlink()
1742+ if line.unsolved_move_id:
1743+ line.unsolved_move_id.unlink()
1744+ if distinta.accreditation_move_id:
1745+ distinta.accreditation_move_id.unlink()
1746+ self.write(cr, uid, ids, {
1747+ 'state': 'cancel',
1748+ }, context=context)
1749+ return True
1750+
1751+ def riba_accepted(self, cr, uid, ids, context=None):
1752+ self.write(cr, uid, ids, {
1753+ 'state': 'accepted',
1754+ 'date_accepted': fields.date.context_today(self,cr,uid,context),
1755+ }, context=context)
1756+ return True
1757+
1758+ def riba_accredited(self, cr, uid, ids, context=None):
1759+ self.write(cr, uid, ids, {
1760+ 'state': 'accredited',
1761+ 'date_accreditation': fields.date.context_today(self,cr,uid,context),
1762+ }, context=context)
1763+ for distinta in self.browse(cr, uid, ids, context=context):
1764+ for line in distinta.line_ids:
1765+ line.write({'state': 'accredited'})
1766+ return True
1767+
1768+ def riba_paid(self, cr, uid, ids, context=None):
1769+ self.write(cr, uid, ids, {
1770+ 'state': 'paid',
1771+ 'date_paid': fields.date.context_today(self,cr,uid,context),
1772+ }, context=context)
1773+ return True
1774+
1775+ def riba_unsolved(self, cr, uid, ids, context=None):
1776+ self.write(cr, uid, ids, {
1777+ 'state': 'unsolved',
1778+ 'date_unsolved': fields.date.context_today(self,cr,uid,context),
1779+ }, context=context)
1780+ return True
1781+
1782+ def test_accepted(self, cr, uid, ids, *args):
1783+ for distinta in self.browse(cr, uid, ids):
1784+ for line in distinta.line_ids:
1785+ if line.state != 'confirmed':
1786+ return False
1787+ return True
1788+
1789+ def test_unsolved(self, cr, uid, ids, *args):
1790+ for distinta in self.browse(cr, uid, ids):
1791+ for line in distinta.line_ids:
1792+ if line.state != 'unsolved':
1793+ return False
1794+ return True
1795+
1796+ def test_paid(self, cr, uid, ids, *args):
1797+ for distinta in self.browse(cr, uid, ids):
1798+ for line in distinta.line_ids:
1799+ if line.state != 'paid':
1800+ return False
1801+ return True
1802+
1803+ def action_cancel_draft(self, cr, uid, ids, *args):
1804+ self.write(cr, uid, ids, {'state':'draft'})
1805+ wf_service = netsvc.LocalService("workflow")
1806+ for distinta_id in ids:
1807+ wf_service.trg_delete(uid, 'riba.distinta', distinta_id, cr)
1808+ wf_service.trg_create(uid, 'riba.distinta', distinta_id, cr)
1809+ return True
1810+
1811+
1812+class riba_distinta_line(orm.Model):
1813+
1814+ def _get_line_values(self, cr, uid, ids, field_name, arg, context):
1815+ res = {}
1816+ for line in self.browse(cr, uid, ids, context=context):
1817+ res[line.id] = {}
1818+ res[line.id]['amount'] = 0.0
1819+ res[line.id]['invoice_date'] = ''
1820+ res[line.id]['invoice_number'] = ''
1821+ for move_line in line.move_line_ids:
1822+ res[line.id]['amount'] += move_line.amount
1823+ if not res[line.id]['invoice_date']:
1824+ res[line.id]['invoice_date'] = str(move_line.move_line_id.invoice.date_invoice)
1825+ else:
1826+ res[line.id]['invoice_date'] += ', '+str(move_line.move_line_id.invoice.date_invoice)
1827+ if not res[line.id]['invoice_number']:
1828+ res[line.id]['invoice_number'] = str(move_line.move_line_id.invoice.internal_number)
1829+ else:
1830+ res[line.id]['invoice_number'] += ', '+str(move_line.move_line_id.invoice.internal_number)
1831+ return res
1832+
1833+ def _reconciled(self, cr, uid, ids, name, args, context=None):
1834+ wf_service = netsvc.LocalService("workflow")
1835+ res = {}
1836+ for id in ids:
1837+ res[id] = self.test_paid(cr, uid, [id])
1838+ if res[id]:
1839+ self.write(cr, uid, id, {'state': 'paid'}, context=context)
1840+ wf_service.trg_validate(
1841+ uid, 'riba.distinta',
1842+ self.browse(cr, uid, id).distinta_id.id, 'paid', cr)
1843+ return res
1844+
1845+ def move_line_id_payment_gets(self, cr, uid, ids, *args):
1846+ res = {}
1847+ if not ids: return res
1848+ cr.execute('SELECT distinta_line.id, l.id '\
1849+ 'FROM account_move_line l '\
1850+ 'LEFT JOIN riba_distinta_line distinta_line ON (distinta_line.acceptance_move_id=l.move_id) '\
1851+ 'WHERE distinta_line.id IN %s '\
1852+ 'AND l.account_id=distinta_line.acceptance_account_id',
1853+ (tuple(ids),))
1854+ for r in cr.fetchall():
1855+ res.setdefault(r[0], [])
1856+ res[r[0]].append( r[1] )
1857+ return res
1858+
1859+ # return the ids of the move lines which has the same account than the statement
1860+ # whose id is in ids
1861+ def move_line_id_payment_get(self, cr, uid, ids, *args):
1862+ if not ids: return []
1863+ result = self.move_line_id_payment_gets(cr, uid, ids, *args)
1864+ return result.get(ids[0], [])
1865+
1866+ def test_paid(self, cr, uid, ids, *args):
1867+ res = self.move_line_id_payment_get(cr, uid, ids)
1868+ if not res:
1869+ return False
1870+ ok = True
1871+ for id in res:
1872+ cr.execute('select reconcile_id from account_move_line where id=%s', (id,))
1873+ ok = ok and bool(cr.fetchone()[0])
1874+ return ok
1875+
1876+ def _get_riba_line_from_move_line(self, cr, uid, ids, context=None):
1877+ move = {}
1878+ for line in self.pool.get('account.move.line').browse(cr, uid, ids, context=context):
1879+ if line.reconcile_partial_id:
1880+ for line2 in line.reconcile_partial_id.line_partial_ids:
1881+ move[line2.move_id.id] = True
1882+ if line.reconcile_id:
1883+ for line2 in line.reconcile_id.line_id:
1884+ move[line2.move_id.id] = True
1885+ line_ids = []
1886+ if move:
1887+ line_ids = self.pool.get('riba.distinta.line').search(
1888+ cr, uid, [('acceptance_move_id','in',move.keys())], context=context)
1889+ return line_ids
1890+
1891+ def _get_line_from_reconcile(self, cr, uid, ids, context=None):
1892+ move = {}
1893+ for r in self.pool.get('account.move.reconcile').browse(cr, uid, ids, context=context):
1894+ for line in r.line_partial_ids:
1895+ move[line.move_id.id] = True
1896+ for line in r.line_id:
1897+ move[line.move_id.id] = True
1898+ line_ids = []
1899+ if move:
1900+ line_ids = self.pool.get('riba.distinta.line').search(
1901+ cr, uid, [('acceptance_move_id','in',move.keys())], context=context)
1902+ return line_ids
1903+
1904+ def _compute_lines(self, cr, uid, ids, name, args, context=None):
1905+ result = {}
1906+ for riba_line in self.browse(cr, uid, ids, context=context):
1907+ src = []
1908+ lines = []
1909+ if riba_line.acceptance_move_id:
1910+ for m in riba_line.acceptance_move_id.line_id:
1911+ temp_lines = []
1912+ if m.reconcile_id and m.credit == 0.0:
1913+ temp_lines = map(lambda x: x.id, m.reconcile_id.line_id)
1914+ elif m.reconcile_partial_id and m.credit == 0.0:
1915+ temp_lines = map(lambda x: x.id, m.reconcile_partial_id.line_partial_ids)
1916+ lines += [x for x in temp_lines if x not in lines]
1917+ src.append(m.id)
1918+
1919+ lines = filter(lambda x: x not in src, lines)
1920+ result[riba_line.id] = lines
1921+ return result
1922+
1923+ # TODO estendere la account_due_list per visualizzare e filtrare in base alle riba ?
1924+ _name = 'riba.distinta.line'
1925+ _description = 'Riba details'
1926+ _rec_name = 'sequence'
1927+
1928+ _columns = {
1929+ 'sequence': fields.integer('Number'),
1930+ 'move_line_ids': fields.one2many('riba.distinta.move.line', 'riba_line_id', 'Credit move lines'),
1931+ 'acceptance_move_id': fields.many2one('account.move', 'Acceptance Entry', readonly=True),
1932+ 'unsolved_move_id': fields.many2one('account.move', 'Unsolved Entry', readonly=True),
1933+ 'acceptance_account_id': fields.many2one('account.account', 'Acceptance Account'),
1934+ 'amount' : fields.function(_get_line_values, method=True, string="Amount", multi="line"),
1935+ 'bank_id': fields.many2one('res.partner.bank', 'Debitor Bank'),
1936+ 'iban': fields.related('bank_id', 'iban', type='char', string='IBAN', store=False, readonly=True),
1937+ 'distinta_id': fields.many2one('riba.distinta', 'Distinta', required=True, ondelete='cascade'),
1938+ 'partner_id' : fields.many2one('res.partner', "Cliente", readonly=True),
1939+ 'invoice_date' : fields.function(_get_line_values, string="Invoice Date", type='char', size=256, method=True, multi="line"),
1940+ 'invoice_number' : fields.function(_get_line_values, string="Invoice Number", type='char', size=256, method=True, multi="line"),
1941+ 'due_date' : fields.date("Due date", readonly=True),
1942+ 'state': fields.selection([
1943+ ('draft', 'Draft'),
1944+ ('confirmed', 'Confirmed'),
1945+ ('accredited', 'Accredited'),
1946+ ('paid', 'Paid'),
1947+ ('unsolved', 'Unsolved'),
1948+ ], 'State', select=True, readonly=True),
1949+ 'reconciled': fields.function(_reconciled, string='Paid/Reconciled', type='boolean',
1950+ store={
1951+ 'riba.distinta.line': (lambda self, cr, uid, ids, c={}: ids, ['acceptance_move_id'], 50),
1952+ 'account.move.line': (_get_riba_line_from_move_line, None, 50),
1953+ 'account.move.reconcile': (_get_line_from_reconcile, None, 50),
1954+ }, 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."),
1955+ 'payment_ids': fields.function(_compute_lines, relation='account.move.line', type="many2many", string='Payments'),
1956+ 'type': fields.related('distinta_id', 'type', type='char', size=32, string='Type', readonly=True),
1957+ }
1958+
1959+ def confirm(self, cr, uid, ids, context=None):
1960+ move_pool = self.pool.get('account.move')
1961+ move_line_pool = self.pool.get('account.move.line')
1962+ wf_service = netsvc.LocalService("workflow")
1963+ for line in self.browse(cr, uid, ids, context=context):
1964+ journal = line.distinta_id.config.acceptance_journal_id
1965+ total_credit = 0.0
1966+ move_id= move_pool.create(cr, uid, {
1967+ 'ref': 'Ri.Ba. %s - line %s' % (line.distinta_id.name, line.sequence),
1968+ 'journal_id': journal.id,
1969+ }, context=context)
1970+ to_be_reconciled = []
1971+ for riba_move_line in line.move_line_ids:
1972+ total_credit += riba_move_line.amount
1973+ move_line_id = move_line_pool.create(cr, uid, {
1974+ 'name': riba_move_line.move_line_id.invoice.number,
1975+ 'account_id': riba_move_line.move_line_id.account_id.id,
1976+ 'credit': riba_move_line.amount,
1977+ 'debit': 0.0,
1978+ 'move_id': move_id,
1979+ 'partner_id': line.partner_id.id,
1980+ }, context=context)
1981+ to_be_reconciled.append([move_line_id, riba_move_line.move_line_id.id])
1982+ move_line_pool.create(cr, uid, {
1983+ 'name': 'Ri.Ba. %s - line %s' % (line.distinta_id.name, line.sequence),
1984+ 'account_id': line.acceptance_account_id.id,
1985+ 'partner_id': line.partner_id.id,
1986+ 'date_maturity': line.due_date,
1987+ 'credit': 0.0,
1988+ 'debit': total_credit,
1989+ 'move_id': move_id,
1990+ }, context=context)
1991+ move_pool.post(cr, uid, [move_id], context=context)
1992+ for reconcile_ids in to_be_reconciled:
1993+ move_line_pool.reconcile_partial(cr, uid, reconcile_ids, context=context)
1994+ line.write({
1995+ 'acceptance_move_id': move_id,
1996+ 'state': 'confirmed',
1997+ })
1998+ wf_service.trg_validate(
1999+ uid, 'riba.distinta', line.distinta_id.id, 'accepted', cr)
2000+ return True
2001+
2002+
2003+class riba_distinta_move_line(orm.Model):
2004+
2005+ _name = 'riba.distinta.move.line'
2006+ _description = 'Riba details'
2007+ _rec_name = 'amount'
2008+
2009+ _columns = {
2010+ 'amount' : fields.float('Amount', digits_compute=dp.get_precision('Account')),
2011+ 'move_line_id': fields.many2one('account.move.line', 'Credit move line'),
2012+ 'riba_line_id': fields.many2one('riba.distinta.line', 'Distinta line', ondelete='cascade'),
2013+ }
2014+
2015
2016=== added file 'l10n_it_ricevute_bancarie/riba_sequence.xml'
2017--- l10n_it_ricevute_bancarie/riba_sequence.xml 1970-01-01 00:00:00 +0000
2018+++ l10n_it_ricevute_bancarie/riba_sequence.xml 2013-11-08 19:19:50 +0000
2019@@ -0,0 +1,17 @@
2020+<?xml version="1.0" encoding="utf-8"?>
2021+<openerp>
2022+ <data noupdate="1">
2023+ <record forcecreate="1" id="type_riba_distinta" model="ir.sequence.type">
2024+ <field name="name">Tipo Distinta Ri.Ba.</field>
2025+ <field name="code">seq.riba.distinta</field>
2026+ </record>
2027+
2028+ <record forcecreate="1" id="seq_riba_distinta" model="ir.sequence">
2029+ <field name="name">Distinta Ri.Ba.</field>
2030+ <field name="code">seq.riba.distinta</field>
2031+ <field eval="3" name="padding"/>
2032+ <field name="prefix">%(y)s/</field>
2033+ </record>
2034+
2035+ </data>
2036+</openerp>
2037
2038=== added file 'l10n_it_ricevute_bancarie/riba_view.xml'
2039--- l10n_it_ricevute_bancarie/riba_view.xml 1970-01-01 00:00:00 +0000
2040+++ l10n_it_ricevute_bancarie/riba_view.xml 2013-11-08 19:19:50 +0000
2041@@ -0,0 +1,180 @@
2042+<?xml version="1.0" encoding="utf-8"?>
2043+<openerp>
2044+ <data>
2045+
2046+ <menuitem name="Ri.Ba." parent="account.menu_finance" id="menu_riba" icon="STOCK_OPEN" />
2047+
2048+ <!-- ====================================================== -->
2049+ <!-- DISTINTA RIBA - FILTRI -->
2050+ <!-- ====================================================== -->
2051+ <record id="view_distinta_riba_filtri" model="ir.ui.view">
2052+ <field name="name">riba.distinta.filtri</field>
2053+ <field name="model">riba.distinta</field>
2054+ <field name="arch" type="xml">
2055+ <search string="Distinte Ri.Ba.">
2056+ <filter icon="terp-check" string="Draft" domain="[('state','=','draft')]" help="Draft"/>
2057+ <filter icon="terp-dolar" string="Confirmed" domain="[('state','=','accepted')]" help="Accepted"/>
2058+ <filter icon="terp-dolar_ok!" string="Paid" domain="[('state','=','paid')]" help="Paid"/>
2059+ <separator orientation="vertical"/>
2060+ <field name="name" />
2061+ <field name="config" />
2062+ <field name="date_accepted" />
2063+ <field name="date_paid" />
2064+ </search>
2065+ </field>
2066+ </record>
2067+
2068+ <!-- ====================================================== -->
2069+ <!-- DISTINTA RIBA TREE -->
2070+ <!-- ====================================================== -->
2071+ <record model="ir.ui.view" id="view_distinta_riba_tree">
2072+ <field name="name">riba.distinta.tree</field>
2073+ <field name="model">riba.distinta</field>
2074+ <field name="arch" type="xml">
2075+ <tree string="Distinte Ri.Ba.">
2076+ <field name="name" />
2077+ <field name="config" />
2078+ <field name="date_accepted" />
2079+ <field name="date_paid" />
2080+ <field name="state" />
2081+ </tree>
2082+ </field>
2083+ </record>
2084+
2085+ <!-- ====================================================== -->
2086+ <!-- DISTINTA RIBA FORM -->
2087+ <!-- ====================================================== -->
2088+ <record model="ir.ui.view" id="view_distinta_riba_form">
2089+ <field name="name">riba.distinta.form</field>
2090+ <field name="model">riba.distinta</field>
2091+ <field name="arch" type="xml">
2092+ <form string="Ri.Ba. - Distinta">
2093+ <field name="name" />
2094+ <field name="config" widget="selection"/>
2095+ <notebook colspan="4">
2096+ <page string="General">
2097+ <field name="line_ids" nolabel="1" colspan="4">
2098+ <tree string="Detail">
2099+ <field name="sequence"/>
2100+ <field name="invoice_number"/>
2101+ <field name="invoice_date"/>
2102+ <field name="partner_id"/>
2103+ <field name="iban"/>
2104+ <field name="amount" sum="Amount"/>
2105+ <field name="due_date"/>
2106+ <field name="state"/>
2107+ <button name="%(riba_unsolved_action)d" type='action' attrs="{'invisible':['|',('type','=','incasso'),('state','!=','accredited')]}" string="Unsolved" icon="terp-dolar_ok!"/>
2108+ <field name="type" invisible="1" />
2109+ </tree>
2110+ <form string="Detail">
2111+ <notebook colspan="4">
2112+ <page string="General">
2113+ <field name="sequence"/>
2114+ <field name="invoice_number"/>
2115+ <field name="invoice_date"/>
2116+ <field name="partner_id"/>
2117+ <field name="amount" />
2118+ <field name="due_date"/>
2119+ <field name="state"/>
2120+ <field name="reconciled" />
2121+ </page>
2122+ <page string="Accounting">
2123+ <separator string="Invoice entries" colspan="4"/>
2124+ <field name="move_line_ids" nolabel="1" colspan="4">
2125+ <tree string="Move lines">
2126+ <field name="amount" />
2127+ <field name="move_line_id"/>
2128+ </tree>
2129+ <form string="Move line">
2130+ <field name="amount" />
2131+ <field name="move_line_id"/>
2132+ </form>
2133+ </field>
2134+ <field name="acceptance_account_id"/>
2135+ <field name="acceptance_move_id"/>
2136+ <separator string="Payments" colspan="4"/>
2137+ <field name="payment_ids" nolabel="1" colspan="4">
2138+ <tree string="Payments">
2139+ <field name="date"/>
2140+ <field name="move_id"/>
2141+ <field name="ref"/>
2142+ <field name="name"/>
2143+ <field name="journal_id" groups="base.group_user"/>
2144+ <field name="debit"/>
2145+ <field name="credit"/>
2146+ <field name="amount_currency"/>
2147+ <field name="currency_id"/>
2148+ </tree>
2149+ </field>
2150+ <field name="unsolved_move_id"/>
2151+ </page>
2152+ </notebook>
2153+ </form>
2154+ </field>
2155+ <group col="2" colspan="2">
2156+ <field name="state" readonly="1" nolabel="1" colspan="2" />
2157+ <field name="type" invisible="1" />
2158+ </group>
2159+ <group col="2" colspan="2">
2160+ <button name="confirm" type='object' string="Accepted" icon="gtk-apply" attrs="{'invisible':['|',('state','!=','draft'),('type','=','incasso')]}"/>
2161+ <button name="%(riba_accreditation_action)d" type='action' attrs="{'invisible':['|',('state','!=','accepted'),('type','=','incasso')]}" string="Accredited" icon="gtk-apply"/>
2162+ <button name="cancel" attrs="{'invisible':[('state','=','cancel')]}" string="Cancel" icon="gtk-cancel"/>
2163+ <button name="action_cancel_draft" attrs="{'invisible':['|',('state','!=','cancel'),('type','=','incasso')]}" string="Reset to Draft" type="object" icon="terp-stock_effects-object-colorize"/>
2164+ </group>
2165+ </page>
2166+ <page string="Other Info">
2167+ <field name="user_id" />
2168+ <newline/>
2169+ <field name="date_created" />
2170+ <field name="date_accepted" />
2171+ <field name="date_accreditation" />
2172+ <field name="date_paid" />
2173+ </page>
2174+ <page string="Accounting">
2175+ <separator colspan="4" string="Acceptance Entries"/>
2176+ <field name='acceptance_move_ids' colspan="4" nolabel="1"/>
2177+ <separator colspan="4" string="Accreditation Entry"/>
2178+ <field name='accreditation_move_id' colspan="4" nolabel="1"/>
2179+ <separator colspan="4" string="Payments"/>
2180+ <field name='payment_ids' colspan="4" nolabel="1">
2181+ <tree string="Payments">
2182+ <field name="date"/>
2183+ <field name="move_id"/>
2184+ <field name="ref"/>
2185+ <field name="name"/>
2186+ <field name="journal_id" groups="base.group_user"/>
2187+ <field name="debit"/>
2188+ <field name="credit"/>
2189+ <field name="amount_currency"/>
2190+ <field name="currency_id"/>
2191+ </tree>
2192+ </field>
2193+ <separator colspan="4" string="Unsolved"/>
2194+ <field name='unsolved_move_ids' colspan="4" nolabel="1"/>
2195+ </page>
2196+ </notebook>
2197+ </form>
2198+ </field>
2199+ </record>
2200+
2201+ <!-- ====================================================== -->
2202+ <!-- ACTION DISTINTA RIBA -->
2203+ <!-- ====================================================== -->
2204+ <record id="distinta_riba_action" model="ir.actions.act_window">
2205+ <field name="name">Distinta Ri.Ba.</field>
2206+ <field name="type">ir.actions.act_window</field>
2207+ <field name="res_model">riba.distinta</field>
2208+ <field name="src_model">riba.distinta</field>
2209+ <field name="view_type">form</field>
2210+ <field name="view_mode">tree,form</field>
2211+ <field name="search_view_id" ref="view_distinta_riba_filtri"/>
2212+ </record>
2213+
2214+ <!-- ====================================================== -->
2215+ <!-- DISTINTA RIBA - MENU -->
2216+ <!-- ====================================================== -->
2217+ <menuitem name="Distinte" parent="menu_riba"
2218+ id="menu_riba_distinte" action="distinta_riba_action" />
2219+
2220+ </data>
2221+</openerp>
2222
2223=== added file 'l10n_it_ricevute_bancarie/riba_workflow.xml'
2224--- l10n_it_ricevute_bancarie/riba_workflow.xml 1970-01-01 00:00:00 +0000
2225+++ l10n_it_ricevute_bancarie/riba_workflow.xml 2013-11-08 19:19:50 +0000
2226@@ -0,0 +1,112 @@
2227+<?xml version="1.0"?>
2228+<openerp>
2229+ <data>
2230+ <record model="workflow" id="wkf_riba_distinta">
2231+ <field name="name">riba.distinta.wkf</field>
2232+ <field name="osv">riba.distinta</field>
2233+ <field name="on_create">True</field>
2234+ </record>
2235+
2236+ <record model="workflow.activity" id="act_new">
2237+ <field name="wkf_id" ref="wkf_riba_distinta" />
2238+ <field name="flow_start">True</field>
2239+ <field name="name">new</field>
2240+ <field name="kind">function</field>
2241+ <field name="action">riba_new()</field>
2242+ </record>
2243+
2244+ <record model="workflow.activity" id="act_accepted">
2245+ <field name="wkf_id" ref="wkf_riba_distinta" />
2246+ <field name="name">accepted</field>
2247+ <field name="kind">function</field>
2248+ <field name="action">riba_accepted()</field>
2249+ </record>
2250+
2251+ <record model="workflow.activity" id="act_accredited">
2252+ <field name="wkf_id" ref="wkf_riba_distinta" />
2253+ <field name="name">accredited</field>
2254+ <field name="kind">function</field>
2255+ <field name="action">riba_accredited()</field>
2256+ </record>
2257+
2258+ <record model="workflow.activity" id="act_paid">
2259+ <field name="wkf_id" ref="wkf_riba_distinta" />
2260+ <field name="name">paid</field>
2261+ <field name="kind">function</field>
2262+ <field name="action">riba_paid()</field>
2263+ </record>
2264+
2265+ <record model="workflow.activity" id="act_unsolved">
2266+ <field name="wkf_id" ref="wkf_riba_distinta" />
2267+ <field name="name">unsolved</field>
2268+ <field name="kind">function</field>
2269+ <field name="action">riba_unsolved()</field>
2270+ </record>
2271+
2272+ <record model="workflow.activity" id="act_cancel">
2273+ <field name="wkf_id" ref="wkf_riba_distinta" />
2274+ <field name="name">cancel</field>
2275+ <field name="kind">function</field>
2276+ <field name="action">riba_cancel()</field>
2277+ <field name="flow_stop">True</field>
2278+ </record>
2279+
2280+ <!-- transitions -->
2281+
2282+ <record model="workflow.transition" id="new_to_accepted">
2283+ <field name="act_from" ref="act_new" />
2284+ <field name="act_to" ref="act_accepted" />
2285+ <field name="signal">accepted</field>
2286+ <field name="condition">test_accepted()</field>
2287+ </record>
2288+ <record model="workflow.transition" id="accepted_to_accredited">
2289+ <field name="act_from" ref="act_accepted" />
2290+ <field name="act_to" ref="act_accredited" />
2291+ <field name="signal">accredited</field>
2292+ </record>
2293+ <record model="workflow.transition" id="accredited_to_paid">
2294+ <field name="act_from" ref="act_accredited" />
2295+ <field name="act_to" ref="act_paid" />
2296+ <field name="signal">paid</field>
2297+ <field name="condition">test_paid()</field>
2298+ </record>
2299+ <record model="workflow.transition" id="accepted_to_paid">
2300+ <field name="act_from" ref="act_accepted" />
2301+ <field name="act_to" ref="act_paid" />
2302+ <field name="signal">paid</field>
2303+ <field name="condition">test_paid()</field>
2304+ </record>
2305+ <record model="workflow.transition" id="accepted_to_cancel">
2306+ <field name="act_from" ref="act_accepted" />
2307+ <field name="act_to" ref="act_cancel" />
2308+ <field name="signal">cancel</field>
2309+ </record>
2310+ <record model="workflow.transition" id="new_to_cancel">
2311+ <field name="act_from" ref="act_new" />
2312+ <field name="act_to" ref="act_cancel" />
2313+ <field name="signal">cancel</field>
2314+ </record>
2315+ <record model="workflow.transition" id="accredited_to_cancel">
2316+ <field name="act_from" ref="act_accredited" />
2317+ <field name="act_to" ref="act_cancel" />
2318+ <field name="signal">cancel</field>
2319+ </record>
2320+ <record model="workflow.transition" id="paid_to_cancel">
2321+ <field name="act_from" ref="act_paid" />
2322+ <field name="act_to" ref="act_cancel" />
2323+ <field name="signal">cancel</field>
2324+ </record>
2325+ <record model="workflow.transition" id="accredited_to_unsolved">
2326+ <field name="act_from" ref="act_accredited" />
2327+ <field name="act_to" ref="act_unsolved" />
2328+ <field name="signal">unsolved</field>
2329+ <field name="condition">test_unsolved()</field>
2330+ </record>
2331+ <record model="workflow.transition" id="unsolved_to_cancel">
2332+ <field name="act_from" ref="act_unsolved" />
2333+ <field name="act_to" ref="act_cancel" />
2334+ <field name="signal">cancel</field>
2335+ </record>
2336+
2337+ </data>
2338+</openerp>
2339
2340=== added directory 'l10n_it_ricevute_bancarie/security'
2341=== added file 'l10n_it_ricevute_bancarie/security/ir.model.access.csv'
2342--- l10n_it_ricevute_bancarie/security/ir.model.access.csv 1970-01-01 00:00:00 +0000
2343+++ l10n_it_ricevute_bancarie/security/ir.model.access.csv 2013-11-08 19:19:50 +0000
2344@@ -0,0 +1,15 @@
2345+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
2346+access_riba_distinta_uinvoice,riba_distinta,model_riba_distinta,account.group_account_invoice,1,1,1,1
2347+access_riba_distinta_group_invoice,riba_distinta group invoice,model_riba_distinta,account.group_account_invoice,1,1,1,1
2348+access_riba_distinta_user,riba_distinta user,model_riba_distinta,base.group_user,1,0,0,0
2349+access_riba_distinta_accountant,riba_distinta accountant,model_riba_distinta,account.group_account_user,1,0,0,0
2350+access_riba_distinta_line_uinvoice,riba_distinta_line,model_riba_distinta_line,account.group_account_invoice,1,1,1,1
2351+access_riba_distinta_line_group_invoice,riba_distinta_line group invoice,model_riba_distinta_line,account.group_account_invoice,1,1,1,1
2352+access_riba_distinta_line_user,riba_distinta_line user,model_riba_distinta_line,base.group_user,1,0,0,0
2353+access_riba_distinta_line_accountant,riba_distinta_line accountant,model_riba_distinta_line,account.group_account_user,1,0,0,0
2354+access_riba_distinta_move_line_uinvoice,riba_distinta_move_line,model_riba_distinta_move_line,account.group_account_invoice,1,1,1,1
2355+access_riba_distinta_move_line_group_invoice,riba_distinta_move_line group invoice,model_riba_distinta_move_line,account.group_account_invoice,1,1,1,1
2356+access_riba_distinta_move_line_user,riba_distinta_move_line user,model_riba_distinta_move_line,base.group_user,1,0,0,0
2357+access_riba_distinta_move_line_accountant,riba_distinta_move_line accountant,model_riba_distinta_move_line,account.group_account_user,1,0,0,0
2358+access_riba_configurazione_manager,riba_configurazione,model_riba_configurazione,account.group_account_manager,1,1,1,1
2359+access_riba_configurazione_invoice,riba_configurazione invoice,model_riba_configurazione,account.group_account_invoice,1,0,0,0
2360
2361=== added directory 'l10n_it_ricevute_bancarie/wizard'
2362=== added file 'l10n_it_ricevute_bancarie/wizard/__init__.py'
2363--- l10n_it_ricevute_bancarie/wizard/__init__.py 1970-01-01 00:00:00 +0000
2364+++ l10n_it_ricevute_bancarie/wizard/__init__.py 2013-11-08 19:19:50 +0000
2365@@ -0,0 +1,30 @@
2366+# -*- coding: utf-8 -*-
2367+##############################################################################
2368+#
2369+# Copyright (C) 2012 Andrea Cometa.
2370+# Email: info@andreacometa.it
2371+# Web site: http://www.andreacometa.it
2372+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
2373+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
2374+# Copyright (C) 2012 Associazione OpenERP Italia
2375+# (<http://www.openerp-italia.org>).
2376+#
2377+# This program is free software: you can redistribute it and/or modify
2378+# it under the terms of the GNU Affero General Public License as published
2379+# by the Free Software Foundation, either version 3 of the License, or
2380+# (at your option) any later version.
2381+#
2382+# This program is distributed in the hope that it will be useful,
2383+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2384+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2385+# GNU Affero General Public License for more details.
2386+#
2387+# You should have received a copy of the GNU Affero General Public License
2388+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2389+#
2390+##############################################################################
2391+
2392+import wizard_emissione_riba
2393+import riba_file_export
2394+import wizard_accreditation
2395+import wizard_unsolved
2396
2397=== added file 'l10n_it_ricevute_bancarie/wizard/riba_file_export.py'
2398--- l10n_it_ricevute_bancarie/wizard/riba_file_export.py 1970-01-01 00:00:00 +0000
2399+++ l10n_it_ricevute_bancarie/wizard/riba_file_export.py 2013-11-08 19:19:50 +0000
2400@@ -0,0 +1,241 @@
2401+# -*- coding: utf-8 -*-
2402+##############################################################################
2403+#
2404+# Copyright (C) 2011-2012 Associazione OpenERP Italia
2405+# (<http://www.openerp-italia.org>).
2406+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
2407+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
2408+# Thanks to Antonio de Vincentiis http://www.devincentiis.it/ ,
2409+# GAzie http://gazie.sourceforge.net/
2410+# and Cecchi s.r.l http://www.cecchi.com/
2411+#
2412+# This program is free software: you can redistribute it and/or modify
2413+# it under the terms of the GNU Affero General Public License as published by
2414+# the Free Software Foundation, either version 3 of the License, or
2415+# (at your option) any later version.
2416+#
2417+# This program is distributed in the hope that it will be useful,
2418+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2419+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2420+# GNU Affero General Public License for more details.
2421+#
2422+# You should have received a copy of the GNU Affero General Public License
2423+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2424+#
2425+##############################################################################
2426+
2427+'''
2428+*****************************************************************************************
2429+ Questa classe genera il file RiBa standard ABI-CBI passando alla funzione "creaFile" i due array di seguito specificati:
2430+$intestazione = array monodimensionale con i seguenti index:
2431+ [0] = credit_sia variabile lunghezza 5 alfanumerico
2432+ [1] = credit_abi assuntrice variabile lunghezza 5 numerico
2433+ [2] = credit_cab assuntrice variabile lunghezza 5 numerico
2434+ [3] = credit_conto conto variabile lunghezza 10 alfanumerico
2435+ [4] = data_creazione variabile lunghezza 6 numerico formato GGMMAA
2436+ [5] = nome_supporto variabile lunghezza 20 alfanumerico
2437+ [6] = codice_divisa variabile lunghezza 1 alfanumerico opzionale default "E"
2438+ [7] = name_company nome ragione sociale creditore variabile lunghezza 24 alfanumerico
2439+ [8] = indirizzo_creditore variabile lunghezza 24 alfanumerico
2440+ [9] = cap_citta_creditore variabile lunghezza 24 alfanumerico
2441+ [10] = ref (definizione attivita) creditore
2442+ [11] = codice fiscale/partita iva creditore alfanumerico opzionale
2443+
2444+$ricevute_bancarie = array bidimensionale con i seguenti index:
2445+ [0] = numero ricevuta lunghezza 10 numerico
2446+ [1] = data scadenza lunghezza 6 numerico
2447+ [2] = importo in centesimi di euro
2448+ [3] = nome debitore lunghezza 60 alfanumerico
2449+ [4] = codice fiscale/partita iva debitore lunghezza 16 alfanumerico
2450+ [5] = indirizzo debitore lunghezza 30 alfanumerico
2451+ [6] = cap debitore lunghezza 5 numerico
2452+ [7] = citta debitore alfanumerico
2453+ [8] = debitor_province debitore alfanumerico
2454+ [9] = abi banca domiciliataria lunghezza 5 numerico
2455+ [10] = cab banca domiciliataria lunghezza 5 numerico
2456+ [11] = descrizione banca domiciliataria lunghezza 50 alfanumerico
2457+ [12] = codice cliente attribuito dal creditore lunghezza 16 numerico
2458+ [13] = numero fattura lunghezza 40 alfanumerico
2459+ [14] = data effettiva della fattura
2460+
2461+'''
2462+
2463+import tools
2464+import base64
2465+from openerp.osv import fields,orm
2466+from tools.translate import _
2467+import datetime
2468+
2469+class riba_file_export(orm.TransientModel):
2470+
2471+ _progressivo = 0
2472+ _assuntrice = 0
2473+ _sia = 0
2474+ _data = 0
2475+ _valuta = 0
2476+ _supporto = 0
2477+ _totale = 0
2478+ _creditore = 0
2479+ _descrizione = ''
2480+ _codice = ''
2481+ _comune_provincia_debitor = ''
2482+
2483+ def _RecordIB(self, sia_assuntrice, abi_assuntrice, data_creazione, nome_supporto, codice_divisa): #record di testa
2484+ self._sia = sia_assuntrice.rjust(5,'0')
2485+ self._assuntrice = abi_assuntrice.rjust(5, '0')
2486+ self._data = data_creazione.rjust(6, '0')
2487+ self._valuta = codice_divisa[0:1]
2488+ self._supporto = nome_supporto.ljust(20, ' ')
2489+ return " IB" + self._sia + self._assuntrice + self._data + self._supporto + " " * 74 + self._valuta + " " * 6 + "\r\n"
2490+
2491+ def _Record14(self, scadenza, importo, abi_assuntrice, cab_assuntrice, conto, abi_domiciliataria, cab_domiciliataria, sia_credit, codice_cliente):
2492+ self._totale += importo
2493+ return " 14" + str(self._progressivo).rjust(7,'0') + " " * 12 + scadenza + "30000" + str(int(round(importo*100))).rjust(13,'0') + "-" + abi_assuntrice.rjust(5,'0') + cab_assuntrice.rjust(5,'0') + conto.ljust(12,'0') + abi_domiciliataria.rjust(5,'0') + cab_domiciliataria.rjust(5,'0') + " " * 12 + str(sia_credit).rjust(5,'0') + "4" + codice_cliente.ljust(16) + " " * 6 + self._valuta + "\r\n"
2494+
2495+ def _Record20(self, ragione_soc1_creditore, indirizzo_creditore, cap_citta_creditore, ref_creditore,):
2496+ self._creditore = ragione_soc1_creditore.ljust(24)
2497+ return " 20" + str(self._progressivo).rjust(7,'0') + self._creditore[0:24] + indirizzo_creditore.ljust(24)[0:24] + cap_citta_creditore.ljust(24)[0:24]+ ref_creditore.ljust(24)[0:24] + " " * 14 + "\r\n"
2498+
2499+ def _Record30(self, nome_debitore, codice_fiscale_debitore):
2500+ return " 30" + str(self._progressivo).rjust(7,'0') + nome_debitore.ljust(60)[0:60] + codice_fiscale_debitore.ljust(16,' ') + " " * 34 + "\r\n"
2501+
2502+ def _Record40(self, indirizzo_debitore, cap_debitore, comune_debitore, provincia_debitore, descrizione_domiciliataria=""):
2503+ self._comune_provincia_debitor = comune_debitore + provincia_debitore.rjust(25-len(comune_debitore),' ')
2504+ return " 40" + str(self._progressivo).rjust(7,'0') + indirizzo_debitore.ljust(30)[0:30] + str(cap_debitore).rjust(5,'0') + self._comune_provincia_debitor + descrizione_domiciliataria.ljust(50)[0:50] + "\r\n"
2505+
2506+ def _Record50(self, importo_debito, invoice_ref, data_invoice, partita_iva_creditore):
2507+ self._descrizione = 'PER LA FATTURA N. ' + invoice_ref + ' DEL '+ data_invoice + ' IMP '+ str(importo_debito)
2508+ return " 50" + str(self._progressivo).rjust(7,'0') + self._descrizione.ljust(80)[0:80] + " " * 10 + partita_iva_creditore.ljust(16,' ') + " " * 4 + "\r\n"
2509+
2510+ def _Record51(self, numero_ricevuta_creditore):
2511+ return " 51" + str(self._progressivo).rjust(7,'0') + str(numero_ricevuta_creditore).rjust(10,'0') + self._creditore[0:20] + " " * 80 + "\r\n"
2512+
2513+ def _Record70(self):
2514+ return " 70" + str(self._progressivo).rjust(7,'0') + " " * 110 + "\r\n"
2515+
2516+ def _RecordEF(self): #record di coda
2517+ return " EF" + self._sia + self._assuntrice + self._data + self._supporto + " " * 6 + str(self._progressivo).rjust(7,'0') + str(int(round(self._totale * 100))).rjust(15,'0') + "0" * 15 + str(int(self._progressivo)*7+2).rjust(7,'0') + " " * 24 + self._valuta + " " * 6 + "\r\n"
2518+
2519+ def _creaFile(self, intestazione, ricevute_bancarie):
2520+ accumulatore = self._RecordIB(intestazione[0], intestazione[1], intestazione[4], intestazione[5], intestazione[6])
2521+ for value in ricevute_bancarie: #estraggo le ricevute dall'array
2522+ self._progressivo =self._progressivo + 1
2523+ accumulatore = accumulatore + self._Record14(
2524+ value[1], value[2], intestazione[1], intestazione[2], intestazione[3], value[9], value[10], intestazione[0], value[12])
2525+ accumulatore = accumulatore + self._Record20(intestazione[7], intestazione[8], intestazione[9], intestazione[10])
2526+ accumulatore = accumulatore + self._Record30(value[3], value[4])
2527+ accumulatore = accumulatore + self._Record40(value[5], value[6], value[7], value[8], value[11])
2528+ accumulatore = accumulatore + self._Record50(value[2], value[13], value[14], intestazione[11])
2529+ accumulatore = accumulatore + self._Record51(value[0])
2530+ accumulatore = accumulatore + self._Record70()
2531+ accumulatore = accumulatore + self._RecordEF()
2532+ self._progressivo = 0
2533+ self._totale = 0
2534+ return accumulatore
2535+
2536+ def act_getfile(self, cr, uid, ids, context=None):
2537+ active_ids = context and context.get('active_ids', [])
2538+ order_obj = self.pool.get('riba.distinta').browse(cr, uid, active_ids, context=context)[0]
2539+ credit_bank = order_obj.config.bank_id
2540+ name_company = order_obj.config.company_id.partner_id.name
2541+ if not credit_bank.iban:
2542+ raise orm.except_orm('Error', _('No IBAN specified'))
2543+ credit_abi = credit_bank.iban[5:10]
2544+ credit_cab = credit_bank.iban[10:15]
2545+ credit_conto = credit_bank.iban[-12:]
2546+ if not credit_bank.codice_sia:
2547+ raise orm.except_orm('Error', _('No SIA Code specified for: ') + name_company)
2548+ credit_sia = credit_bank.codice_sia
2549+ credit_account = credit_bank.iban[15:27]
2550+ dataemissione = datetime.datetime.now().strftime("%d%m%y")
2551+ nome_supporto = datetime.datetime.now().strftime("%d%m%y%H%M%S") + credit_sia
2552+ creditor_address = order_obj.config.company_id.partner_id
2553+ creditor_street = creditor_address.street or ''
2554+ creditor_city = creditor_address.city or ''
2555+ creditor_province = creditor_address.province.code or ''
2556+ if not order_obj.config.company_id.partner_id.vat and not order_obj.config.company_id.partner_id.fiscalcode:
2557+ raise orm.except_orm('Error', _('No VAT or Fiscalcode specified for: ') + name_company)
2558+ array_testata = [
2559+ credit_sia,
2560+ credit_abi,
2561+ credit_cab,
2562+ credit_conto,
2563+ dataemissione,
2564+ nome_supporto,
2565+ 'E',
2566+ name_company,
2567+ creditor_address.street or '',
2568+ creditor_address.zip or '' + ' ' + creditor_city,
2569+ order_obj.config.company_id.partner_id.ref or '',
2570+ order_obj.config.company_id.partner_id.vat and order_obj.config.company_id.partner_id.vat[2:] or order_obj.config.company_id.partner_id.fiscalcode,
2571+ ]
2572+ arrayRiba = []
2573+ for line in order_obj.line_ids:
2574+ debit_bank = line.bank_id
2575+ debitor_address = line.partner_id
2576+ debitor_street = debitor_address.street or ''
2577+ debitor_zip = debitor_address.zip or ''
2578+ if not debit_bank.iban:
2579+ raise orm.except_orm('Error', _('No IBAN specified for ') + line.partner_id.name)
2580+ debit_abi = debit_bank.iban[5:10]
2581+ debit_cab = debit_bank.iban[10:15]
2582+ debitor_city = debitor_address.city or ''
2583+ debitor_province = debitor_address.province.code or ''
2584+ if not line.due_date: # ??? VERIFICARE
2585+ due_date = '000000'
2586+ else:
2587+ due_date = datetime.datetime.strptime(line.due_date[:10], '%Y-%m-%d').strftime("%d%m%y")
2588+
2589+ if not line.partner_id.vat and not line.partner_id.fiscalcode:
2590+ raise orm.except_orm('Error', _('No VAT or Fiscal code specified for ') + line.partner_id.name)
2591+ Riba = [
2592+ line.sequence,
2593+ due_date,
2594+ line.amount,
2595+ line.partner_id.name,
2596+ line.partner_id.vat and line.partner_id.vat[2:] or line.partner_id.fiscalcode,
2597+ debitor_street,
2598+ debitor_zip,
2599+ debitor_city,
2600+ debitor_province,
2601+ debit_abi,
2602+ debit_cab,
2603+ debit_bank.bank and debit_bank.bank.name or debit_bank.bank_name,
2604+ line.partner_id.ref or '',
2605+ #line.move_line_id.name,
2606+ line.invoice_number,
2607+ #datetime.datetime.strptime(line.distinta_id.date_created, '%Y-%m-%d').strftime("%d/%m/%Y"),
2608+ line.invoice_date,
2609+ ]
2610+ arrayRiba.append(Riba)
2611+
2612+ out=base64.encodestring(self._creaFile(array_testata, arrayRiba).encode("utf8"))
2613+ self.write(cr, uid, ids, {'state':'get', 'riba_.txt':out}, context=context)
2614+
2615+ model_data_obj = self.pool.get('ir.model.data')
2616+ view_rec = model_data_obj.get_object_reference(cr, uid, 'l10n_it_ricevute_bancarie', 'wizard_riba_file_export')
2617+ view_id = view_rec and view_rec[1] or False
2618+
2619+ return {
2620+ 'view_type': 'form',
2621+ 'view_id' : [view_id],
2622+ 'view_mode': 'form',
2623+ 'res_model': 'riba.file.export',
2624+ 'res_id': ids[0],
2625+ 'type': 'ir.actions.act_window',
2626+ 'target': 'new',
2627+ 'context': context,
2628+ }
2629+
2630+ _name = "riba.file.export"
2631+
2632+ _columns = {
2633+ 'state': fields.selection( ( ('choose','choose'), # choose accounts
2634+ ('get','get'), # get the file
2635+ ) ),
2636+ 'riba_.txt': fields.binary('File', readonly=True),
2637+ }
2638+ _defaults = {
2639+ 'state': lambda *a: 'choose',
2640+ }
2641+
2642
2643=== added file 'l10n_it_ricevute_bancarie/wizard/riba_file_export.xml'
2644--- l10n_it_ricevute_bancarie/wizard/riba_file_export.xml 1970-01-01 00:00:00 +0000
2645+++ l10n_it_ricevute_bancarie/wizard/riba_file_export.xml 2013-11-08 19:19:50 +0000
2646@@ -0,0 +1,32 @@
2647+<?xml version="1.0" encoding="utf-8"?>
2648+<openerp>
2649+ <data>
2650+
2651+ <record id="wizard_riba_file_export" model="ir.ui.view">
2652+ <field name="name">Export Ri.Ba.</field>
2653+ <field name="model">riba.file.export</field>
2654+ <field name="arch" type="xml">
2655+ <form string="Export Ri.Ba. file">
2656+ <group col="4">
2657+ <group colspan="4" >
2658+ <button icon="gtk-cancel" special="cancel" string="Cancel"/>
2659+ <button icon="gtk-ok" name="act_getfile" string="Export" type="object"/>
2660+ </group>
2661+ <group colspan="4">
2662+ <field name="riba_.txt" readonly="1"/>
2663+ </group>
2664+ </group>
2665+ </form>
2666+ </field>
2667+ </record>
2668+
2669+ <act_window name="Export Ri.Ba."
2670+ res_model="riba.file.export"
2671+ src_model="riba.distinta"
2672+ view_mode="form"
2673+ target="new"
2674+ key2="client_action_multi"
2675+ id="action_wizard_riba_file_export"
2676+ view_id="wizard_riba_file_export"/>
2677+ </data>
2678+</openerp>
2679
2680=== added file 'l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py'
2681--- l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py 1970-01-01 00:00:00 +0000
2682+++ l10n_it_ricevute_bancarie/wizard/wizard_accreditation.py 2013-11-08 19:19:50 +0000
2683@@ -0,0 +1,137 @@
2684+# -*- coding: utf-8 -*-
2685+##############################################################################
2686+#
2687+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
2688+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
2689+# Copyright (C) 2012 Associazione OpenERP Italia
2690+# (<http://www.openerp-italia.org>).
2691+#
2692+# This program is free software: you can redistribute it and/or modify
2693+# it under the terms of the GNU Affero General Public License as published
2694+# by the Free Software Foundation, either version 3 of the License, or
2695+# (at your option) any later version.
2696+#
2697+# This program is distributed in the hope that it will be useful,
2698+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2699+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2700+# GNU Affero General Public License for more details.
2701+#
2702+# You should have received a copy of the GNU Affero General Public License
2703+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2704+#
2705+##############################################################################
2706+
2707+from openerp.osv import fields,orm
2708+from tools.translate import _
2709+import netsvc
2710+
2711+class riba_accreditation(orm.TransientModel):
2712+
2713+ def _get_accreditation_journal_id(self, cr, uid, context=None):
2714+ return self.pool.get('riba.configurazione').get_default_value_by_distinta( cr, uid, 'accreditation_journal_id', context=context)
2715+
2716+ def _get_accreditation_account_id(self, cr, uid, context=None):
2717+ return self.pool.get('riba.configurazione').get_default_value_by_distinta( cr, uid, 'accreditation_account_id', context=context)
2718+
2719+ def _get_bank_account_id(self, cr, uid, context=None):
2720+ return self.pool.get('riba.configurazione').get_default_value_by_distinta( cr, uid, 'bank_account_id', context=context)
2721+
2722+ def _get_bank_expense_account_id(self, cr, uid, context=None):
2723+ return self.pool.get('riba.configurazione').get_default_value_by_distinta( cr, uid, 'bank_expense_account_id', context=context)
2724+
2725+ def _get_accreditation_amount(self, cr, uid, context=None):
2726+ if context is None:
2727+ context = {}
2728+ if not context.get('active_id', False):
2729+ return False
2730+ distinta_pool = self.pool.get('riba.distinta')
2731+ distinta = distinta_pool.browse(cr, uid, context['active_id'], context=context)
2732+ amount = 0.0
2733+ for line in distinta.line_ids:
2734+ amount += line.amount
2735+ return amount
2736+
2737+ _name = "riba.accreditation"
2738+ _description = "Bank accreditation"
2739+ _columns = {
2740+ 'accreditation_journal_id' : fields.many2one('account.journal', "Accreditation journal",
2741+ domain=[('type', '=', 'bank')]),
2742+ 'accreditation_account_id' : fields.many2one('account.account', "Ri.Ba. bank account"),
2743+ 'accreditation_amount': fields.float('Credit amount'),
2744+ 'bank_account_id' : fields.many2one('account.account', "Bank account",
2745+ domain=[('type', '=', 'liquidity')]),
2746+ 'bank_amount': fields.float('Versed amount'),
2747+ 'bank_expense_account_id' : fields.many2one('account.account', "Bank Expenses account"),
2748+ 'expense_amount': fields.float('Expenses amount'),
2749+ }
2750+
2751+ _defaults = {
2752+ 'accreditation_journal_id': _get_accreditation_journal_id,
2753+ 'accreditation_account_id': _get_accreditation_account_id,
2754+ 'bank_account_id': _get_bank_account_id,
2755+ 'bank_expense_account_id': _get_bank_expense_account_id,
2756+ 'accreditation_amount': _get_accreditation_amount,
2757+ }
2758+
2759+ def skip(self, cr, uid, ids, context=None):
2760+ if context is None:
2761+ context = {}
2762+ wf_service = netsvc.LocalService("workflow")
2763+ active_id = context and context.get('active_id', False) or False
2764+ if not active_id:
2765+ raise orm.except_orm(_('Error'), _('No active ID found'))
2766+ wf_service.trg_validate(
2767+ uid, 'riba.distinta', active_id, 'accredited', cr)
2768+ return {'type': 'ir.actions.act_window_close'}
2769+
2770+ def create_move(self, cr, uid, ids, context=None):
2771+ if context is None:
2772+ context = {}
2773+ wf_service = netsvc.LocalService("workflow")
2774+ active_id = context and context.get('active_id', False) or False
2775+ if not active_id:
2776+ raise orm.except_orm(_('Error'), _('No active ID found'))
2777+ move_pool = self.pool.get('account.move')
2778+ move_line_pool = self.pool.get('account.move.line')
2779+ distinta_pool = self.pool.get('riba.distinta')
2780+ distinta = distinta_pool.browse(cr, uid, active_id, context=context)
2781+ wizard = self.browse(cr,uid,ids)[0]
2782+ if not wizard.accreditation_journal_id or not wizard.accreditation_account_id or not wizard.bank_account_id or not wizard.bank_expense_account_id:
2783+ raise orm.except_orm(_('Error'), _('Every account is mandatory'))
2784+ move_vals = {
2785+ 'ref': _('Accreditation Ri.Ba. %s') % distinta.name,
2786+ 'journal_id': wizard.accreditation_journal_id.id,
2787+ 'line_id': [
2788+ (0,0, {
2789+ 'name': _('Credit'),
2790+ 'account_id': wizard.accreditation_account_id.id,
2791+ 'credit': wizard.accreditation_amount,
2792+ 'debit': 0.0,
2793+ }),
2794+ (0,0, {
2795+ 'name': _('Bank'),
2796+ 'account_id': wizard.bank_account_id.id,
2797+ 'debit': wizard.bank_amount,
2798+ 'credit': 0.0,
2799+ }),
2800+ (0,0, {
2801+ 'name': _('Bank'),
2802+ 'account_id': wizard.bank_expense_account_id.id,
2803+ 'debit': wizard.expense_amount,
2804+ 'credit': 0.0,
2805+ }),
2806+ ]
2807+ }
2808+ move_id = move_pool.create(cr, uid, move_vals, context=context)
2809+ distinta.write({'accreditation_move_id': move_id})
2810+ wf_service.trg_validate(
2811+ uid, 'riba.distinta', active_id, 'accredited', cr)
2812+ return {
2813+ 'name': _('Accreditation Entry'),
2814+ 'view_type': 'form',
2815+ 'view_mode': 'form',
2816+ 'res_model': 'account.move',
2817+ 'type': 'ir.actions.act_window',
2818+ 'target': 'current',
2819+ 'res_id': move_id or False,
2820+ }
2821
2822=== added file 'l10n_it_ricevute_bancarie/wizard/wizard_accreditation.xml'
2823--- l10n_it_ricevute_bancarie/wizard/wizard_accreditation.xml 1970-01-01 00:00:00 +0000
2824+++ l10n_it_ricevute_bancarie/wizard/wizard_accreditation.xml 2013-11-08 19:19:50 +0000
2825@@ -0,0 +1,41 @@
2826+<?xml version="1.0" encoding="utf-8"?>
2827+
2828+<openerp>
2829+ <data>
2830+
2831+ <record id="riba_accreditation" model="ir.ui.view">
2832+ <field name="name">riba.accreditation.wizard</field>
2833+ <field name="model">riba.accreditation</field>
2834+ <field name="arch" type="xml">
2835+ <form string="Ri.Ba. Accreditation">
2836+ <separator string="This wizard generates the journal entry related to accreditation received from the bank" colspan="4"/>
2837+ <field name="accreditation_journal_id" />
2838+ <newline/>
2839+ <field name="accreditation_account_id" />
2840+ <field name="accreditation_amount" />
2841+ <field name="bank_account_id" />
2842+ <field name="bank_amount" />
2843+ <field name="bank_expense_account_id" />
2844+ <field name="expense_amount" />
2845+ <button string="Cancel" special="cancel" icon="gtk-cancel" colspan="2"/>
2846+ <button string="Create" name="create_move" type="object" icon="gtk-ok" colspan="2"/>
2847+ <separator string="You can also skip this step and set the distinta status to 'accredited' anyway" colspan="4"/>
2848+ <button string="Skip and confirm accreditation" name="skip" type="object" icon="gtk-apply" colspan="4"/>
2849+ </form>
2850+ </field>
2851+ </record>
2852+
2853+ <record id="riba_accreditation_action" model="ir.actions.act_window">
2854+ <field name="name">Ri.Ba. Accreditation</field>
2855+ <field name="type">ir.actions.act_window</field>
2856+ <field name="res_model">riba.accreditation</field>
2857+ <field name="src_model">riba.distinta</field>
2858+ <field name="view_type">form</field>
2859+ <field name="view_mode">form</field>
2860+ <field name="target">new</field>
2861+ <field name="view_id" ref="riba_accreditation"/>
2862+
2863+ </record>
2864+
2865+ </data>
2866+</openerp>
2867
2868=== added file 'l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.py'
2869--- l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.py 1970-01-01 00:00:00 +0000
2870+++ l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.py 2013-11-08 19:19:50 +0000
2871@@ -0,0 +1,131 @@
2872+# -*- coding: utf-8 -*-
2873+##############################################################################
2874+#
2875+# Copyright (C) 2012 Andrea Cometa.
2876+# Email: info@andreacometa.it
2877+# Web site: http://www.andreacometa.it
2878+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
2879+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
2880+# Copyright (C) 2012 Associazione OpenERP Italia
2881+# (<http://www.openerp-italia.org>).
2882+#
2883+# This program is free software: you can redistribute it and/or modify
2884+# it under the terms of the GNU Affero General Public License as published
2885+# by the Free Software Foundation, either version 3 of the License, or
2886+# (at your option) any later version.
2887+#
2888+# This program is distributed in the hope that it will be useful,
2889+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2890+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2891+# GNU Affero General Public License for more details.
2892+#
2893+# You should have received a copy of the GNU Affero General Public License
2894+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2895+#
2896+##############################################################################
2897+
2898+from openerp.osv import fields,orm
2899+
2900+# -------------------------------------------------------
2901+# EMISSIONE RIBA
2902+# -------------------------------------------------------
2903+class emissione_riba(orm.TransientModel):
2904+ _name = "riba.emissione"
2905+ _description = "Emissione Ricevute Bancarie"
2906+ _columns = {
2907+
2908+ 'configurazione' : fields.many2one('riba.configurazione', 'Configurazione', required=True),
2909+ }
2910+
2911+ def crea_distinta(self, cr, uid, ids, context=None):
2912+ if context is None:
2913+ context = {}
2914+ def create_rdl(conta, bank_id, rd_id, date_maturity, partner_id, acceptance_account_id):
2915+ rdl = {
2916+ 'sequence' : conta,
2917+ 'bank_id' : bank_id,
2918+ 'distinta_id': rd_id,
2919+ 'due_date' : date_maturity,
2920+ 'partner_id' : partner_id,
2921+ 'state': 'draft',
2922+ 'acceptance_account_id': acceptance_account_id,
2923+ }
2924+ return riba_distinta_line.create(cr, uid, rdl, context=context)
2925+
2926+ """
2927+ Qui creiamo la distinta
2928+ """
2929+ wizard_obj = self.browse(cr,uid,ids)[0]
2930+ active_ids = context and context.get('active_ids', [])
2931+ riba_distinta = self.pool.get('riba.distinta')
2932+ riba_distinta_line = self.pool.get('riba.distinta.line')
2933+ riba_distinta_move_line = self.pool.get('riba.distinta.move.line')
2934+ move_line_obj = self.pool.get('account.move.line')
2935+
2936+ # create distinta
2937+ rd = {
2938+ 'name': self.pool.get('ir.sequence').get(cr, uid, 'seq.riba.distinta'),
2939+ 'config': wizard_obj.configurazione.id,
2940+ 'user_id': uid,
2941+ 'date_created': fields.date.context_today(self,cr,uid,context),
2942+ }
2943+ rd_id = riba_distinta.create(cr, uid, rd)
2944+
2945+ # group by partner and due date
2946+ grouped_lines = {}
2947+ move_line_ids = move_line_obj.search(cr, uid, [('id', 'in', active_ids)], context=context)
2948+ for move_line in move_line_obj.browse(cr, uid, move_line_ids, context=context):
2949+ if move_line.partner_id.group_riba:
2950+ if not grouped_lines.get(
2951+ (move_line.partner_id.id, move_line.date_maturity), False):
2952+ grouped_lines[(move_line.partner_id.id, move_line.date_maturity)] = []
2953+ grouped_lines[(move_line.partner_id.id, move_line.date_maturity)].append(
2954+ move_line)
2955+
2956+ # create lines
2957+ conta = 1
2958+
2959+ for move_line in move_line_obj.browse(cr, uid, move_line_ids, context=context):
2960+ if move_line.partner_id.bank_ids:
2961+ bank_id = move_line.partner_id.bank_ids[0]
2962+ else:
2963+ raise orm.except_orm('Attenzione!', 'Il cliente %s non ha la banca!!!' % move_line.partner_id.name)
2964+ if move_line.partner_id.group_riba:
2965+ for key in grouped_lines:
2966+ if key[0] == move_line.partner_id.id and key[1] == move_line.date_maturity:
2967+ rdl_id = create_rdl(conta, bank_id.id, rd_id, move_line.date_maturity, move_line.partner_id.id, wizard_obj.configurazione.acceptance_account_id.id)
2968+ total = 0.0
2969+ invoice_date_group = ''
2970+ for grouped_line in grouped_lines[key]:
2971+ riba_distinta_move_line.create(cr, uid, {
2972+ 'riba_line_id': rdl_id,
2973+ 'amount': grouped_line.debit,
2974+ 'move_line_id': grouped_line.id,
2975+ }, context=context)
2976+ del grouped_lines[key]
2977+ break
2978+ else:
2979+ rdl_id = create_rdl(conta, bank_id.id, rd_id, move_line.date_maturity, move_line.partner_id.id, wizard_obj.configurazione.acceptance_account_id.id)
2980+ riba_distinta_move_line.create(cr, uid, {
2981+ 'riba_line_id': rdl_id,
2982+ 'amount': move_line.debit,
2983+ 'move_line_id': move_line.id,
2984+ }, context=context)
2985+
2986+ conta+=1
2987+
2988+ # ----- show distinta form
2989+ mod_obj = self.pool.get('ir.model.data')
2990+ res = mod_obj.get_object_reference(cr, uid, 'l10n_it_ricevute_bancarie', 'view_distinta_riba_form')
2991+ res_id = res and res[1] or False,
2992+ return {
2993+ 'name': 'Distinta',
2994+ 'view_type': 'form',
2995+ 'view_mode': 'form',
2996+ 'view_id': res_id,
2997+ 'res_model': 'riba.distinta',
2998+ 'type': 'ir.actions.act_window',
2999+ #'nodestroy': True,
3000+ 'target': 'current',
3001+ 'res_id': rd_id or False,
3002+ }
3003
3004=== added file 'l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.xml'
3005--- l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.xml 1970-01-01 00:00:00 +0000
3006+++ l10n_it_ricevute_bancarie/wizard/wizard_emissione_riba.xml 2013-11-08 19:19:50 +0000
3007@@ -0,0 +1,50 @@
3008+<?xml version="1.0" encoding="utf-8"?>
3009+
3010+<openerp>
3011+ <data>
3012+
3013+ <!-- ====================================================== -->
3014+ <!-- WIZARD EMISSIONE RIBA -->
3015+ <!-- ====================================================== -->
3016+ <record id="emissione_riba_view" model="ir.ui.view">
3017+ <field name="name">riba.emissione.wizard</field>
3018+ <field name="model">riba.emissione</field>
3019+ <field name="arch" type="xml">
3020+ <form string="Issue Ri.Ba.">
3021+ <separator string="This wizard generates the Ri.Ba. list, do you confirm?" colspan="4"/>
3022+ <field name="configurazione"/>
3023+ <group col="4" colspan="4">
3024+ <button string="Cancel" special="cancel" icon="gtk-cancel" colspan="2"/>
3025+ <button string="Create" name="crea_distinta" type="object" icon="gtk-ok" colspan="2"/>
3026+ </group>
3027+ </form>
3028+ </field>
3029+ </record>
3030+
3031+ <!-- ====================================================== -->
3032+ <!-- ACTION EMISSIONE RIBA -->
3033+ <!-- ====================================================== -->
3034+ <record id="emissione_riba_action" model="ir.actions.act_window">
3035+ <field name="name">Issue Ri.Ba.</field>
3036+ <field name="type">ir.actions.act_window</field>
3037+ <field name="res_model">riba.emissione</field>
3038+ <field name="src_model">account.move.line</field>
3039+ <field name="view_type">form</field>
3040+ <field name="view_mode">form</field>
3041+ <field name="target">new</field>
3042+ <field name="view_id" ref="emissione_riba_view"/>
3043+
3044+ </record>
3045+
3046+ <record model="ir.values" id="emissione_riba_client_action">
3047+ <!--field name="model_id" ref="sale.model_sale_order" /
3048+ <field name="object" eval="1" /> -->
3049+ <field name="name">Issue Ri.Ba.</field>
3050+ <field name="key2">client_action_multi</field>
3051+ <field name="value" eval="'ir.actions.act_window,' + str(ref('emissione_riba_action'))" />
3052+ <field name="key">action</field>
3053+ <field name="model">account.move.line</field>
3054+ </record>
3055+
3056+ </data>
3057+</openerp>
3058
3059=== added file 'l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py'
3060--- l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py 1970-01-01 00:00:00 +0000
3061+++ l10n_it_ricevute_bancarie/wizard/wizard_unsolved.py 2013-11-08 19:19:50 +0000
3062@@ -0,0 +1,184 @@
3063+# -*- coding: utf-8 -*-
3064+##############################################################################
3065+#
3066+# Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
3067+# Copyright (C) 2012 Domsense srl (<http://www.domsense.com>)
3068+# Copyright (C) 2012 Associazione OpenERP Italia
3069+# (<http://www.openerp-italia.org>).
3070+#
3071+# This program is free software: you can redistribute it and/or modify
3072+# it under the terms of the GNU Affero General Public License as published
3073+# by the Free Software Foundation, either version 3 of the License, or
3074+# (at your option) any later version.
3075+#
3076+# This program is distributed in the hope that it will be useful,
3077+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3078+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3079+# GNU Affero General Public License for more details.
3080+#
3081+# You should have received a copy of the GNU Affero General Public License
3082+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3083+#
3084+##############################################################################
3085+
3086+from openerp.osv import fields,orm
3087+from tools.translate import _
3088+import netsvc
3089+
3090+class riba_unsolved(orm.TransientModel):
3091+
3092+ def _get_unsolved_journal_id(self, cr, uid, context=None):
3093+ return self.pool.get('riba.configurazione').get_default_value_by_distinta_line( cr, uid, 'unsolved_journal_id', context=context)
3094+
3095+ def _get_effects_account_id(self, cr, uid, context=None):
3096+ return self.pool.get('riba.configurazione').get_default_value_by_distinta_line( cr, uid, 'acceptance_account_id', context=context)
3097+
3098+ def _get_effects_amount(self, cr, uid, context=None):
3099+ if context is None:
3100+ context = {}
3101+ if not context.get('active_id', False):
3102+ return False
3103+ return self.pool.get('riba.distinta.line').browse(cr, uid, context['active_id'], context=context).amount
3104+
3105+ def _get_riba_bank_account_id(self, cr, uid, context=None):
3106+ return self.pool.get('riba.configurazione').get_default_value_by_distinta_line( cr, uid, 'accreditation_account_id', context=context)
3107+
3108+ def _get_overdue_effects_account_id(self, cr, uid, context=None):
3109+ return self.pool.get('riba.configurazione').get_default_value_by_distinta_line( cr, uid, 'overdue_effects_account_id', context=context)
3110+
3111+ def _get_bank_account_id(self, cr, uid, context=None):
3112+ return self.pool.get('riba.configurazione').get_default_value_by_distinta_line( cr, uid, 'bank_account_id', context=context)
3113+
3114+ def _get_bank_expense_account_id(self, cr, uid, context=None):
3115+ return self.pool.get('riba.configurazione').get_default_value_by_distinta_line( cr, uid, 'protest_charge_account_id', context=context)
3116+
3117+
3118+ _name = "riba.unsolved"
3119+ _columns = {
3120+ 'unsolved_journal_id' : fields.many2one('account.journal', "Unsolved journal",
3121+ domain=[('type', '=', 'bank')]),
3122+ 'effects_account_id' : fields.many2one('account.account', "Effects account",
3123+ domain=[('type', '=', 'receivable')]),
3124+ 'effects_amount': fields.float('Effects amount'),
3125+ 'riba_bank_account_id' : fields.many2one('account.account', "Ri.Ba. bank account"),
3126+ 'riba_bank_amount': fields.float('Ri.Ba. bank amount'),
3127+ 'overdue_effects_account_id' : fields.many2one('account.account', "Overdue Effects account",
3128+ domain=[('type', '=', 'receivable')]),
3129+ 'overdue_effects_amount': fields.float('Overdue Effects amount'),
3130+ 'bank_account_id' : fields.many2one('account.account', "Bank account",
3131+ domain=[('type', '=', 'liquidity')]),
3132+ 'bank_amount': fields.float('Taken amount'),
3133+ 'bank_expense_account_id' : fields.many2one('account.account', "Bank Expenses account"),
3134+ 'expense_amount': fields.float('Expenses amount'),
3135+ }
3136+
3137+ _defaults = {
3138+ 'unsolved_journal_id': _get_unsolved_journal_id,
3139+ 'effects_account_id': _get_effects_account_id,
3140+ 'effects_amount': _get_effects_amount,
3141+ 'riba_bank_account_id': _get_riba_bank_account_id,
3142+ 'riba_bank_amount': _get_effects_amount,
3143+ 'overdue_effects_account_id': _get_overdue_effects_account_id,
3144+ 'overdue_effects_amount': _get_effects_amount,
3145+ 'bank_account_id': _get_bank_account_id,
3146+ 'bank_expense_account_id': _get_bank_expense_account_id,
3147+ }
3148+
3149+ def skip(self, cr, uid, ids, context=None):
3150+ if context is None:
3151+ context = {}
3152+ wf_service = netsvc.LocalService("workflow")
3153+ active_id = context and context.get('active_id', False) or False
3154+ if not active_id:
3155+ raise orm.except_orm(_('Error'), _('No active ID found'))
3156+ line_pool = self.pool.get('riba.distinta.line')
3157+ line_pool.write(cr, uid, active_id,
3158+ {'state': 'unsolved'}, context=context)
3159+ wf_service.trg_validate(
3160+ uid, 'riba.distinta', line_pool.browse(cr, uid, active_id).distinta_id.id, 'unsolved', cr)
3161+ return {'type': 'ir.actions.act_window_close'}
3162+
3163+ def create_move(self, cr, uid, ids, context=None):
3164+ if context is None:
3165+ context = {}
3166+ wf_service = netsvc.LocalService("workflow")
3167+ active_id = context and context.get('active_id', False) or False
3168+ if not active_id:
3169+ raise orm.except_orm(_('Error'), _('No active ID found'))
3170+ move_pool = self.pool.get('account.move')
3171+ invoice_pool = self.pool.get('account.invoice')
3172+ move_line_pool = self.pool.get('account.move.line')
3173+ distinta_line = self.pool.get('riba.distinta.line').browse(cr, uid, active_id, context=context)
3174+ wizard = self.browse(cr,uid,ids)[0]
3175+ if not wizard.unsolved_journal_id or not wizard.effects_account_id or not wizard.riba_bank_account_id or not wizard.overdue_effects_account_id or not wizard.bank_account_id or not wizard.bank_expense_account_id:
3176+ raise orm.except_orm(_('Error'), _('Every account is mandatory'))
3177+ move_vals = {
3178+ 'ref': _('Unsolved Ri.Ba. %s - line %s') % (distinta_line.distinta_id.name, distinta_line.sequence),
3179+ 'journal_id': wizard.unsolved_journal_id.id,
3180+ 'line_id': [
3181+ (0,0, {
3182+ 'name': _('Effects'),
3183+ 'account_id': wizard.effects_account_id.id,
3184+ 'credit': wizard.effects_amount,
3185+ 'debit': 0.0,
3186+ 'partner_id': distinta_line.partner_id.id,
3187+ }),
3188+ (0,0, {
3189+ 'name': _('Ri.Ba. Bank'),
3190+ 'account_id': wizard.riba_bank_account_id.id,
3191+ 'debit': wizard.riba_bank_amount,
3192+ 'credit': 0.0,
3193+ }),
3194+ (0,0, {
3195+ 'name': _('Overdue Effects'),
3196+ 'account_id': wizard.overdue_effects_account_id.id,
3197+ 'debit': wizard.overdue_effects_amount,
3198+ 'credit': 0.0,
3199+ 'partner_id': distinta_line.partner_id.id,
3200+ 'date_maturity': distinta_line.due_date,
3201+ }),
3202+ (0,0, {
3203+ 'name': _('Bank'),
3204+ 'account_id': wizard.bank_account_id.id,
3205+ 'credit': wizard.bank_amount,
3206+ 'debit': 0.0,
3207+ }),
3208+ (0,0, {
3209+ 'name': _('Expenses'),
3210+ 'account_id': wizard.bank_expense_account_id.id,
3211+ 'debit': wizard.expense_amount,
3212+ 'credit': 0.0,
3213+ }),
3214+ ]
3215+ }
3216+ move_id = move_pool.create(cr, uid, move_vals, context=context)
3217+
3218+ to_be_reconciled = []
3219+ for move_line in move_pool.browse(cr, uid, move_id, context=context).line_id:
3220+ if move_line.account_id.id == wizard.overdue_effects_account_id.id:
3221+ for riba_move_line in distinta_line.move_line_ids:
3222+ invoice_pool.write(cr, uid, riba_move_line.move_line_id.invoice.id, {
3223+ 'unsolved_move_line_ids': [(4, move_line.id)],
3224+ }, context=context)
3225+ if move_line.account_id.id == wizard.effects_account_id.id:
3226+ to_be_reconciled.append(move_line.id)
3227+ for acceptance_move_line in distinta_line.acceptance_move_id.line_id:
3228+ if acceptance_move_line.debit > 0.0:
3229+ to_be_reconciled.append(acceptance_move_line.id)
3230+ move_line_pool.reconcile_partial(cr, uid, to_be_reconciled, context=context)
3231+
3232+ distinta_line.write({
3233+ 'unsolved_move_id': move_id,
3234+ 'state': 'unsolved',
3235+ })
3236+ wf_service.trg_validate(
3237+ uid, 'riba.distinta', distinta_line.distinta_id.id, 'unsolved', cr)
3238+ return {
3239+ 'name': _('Unsolved Entry'),
3240+ 'view_type': 'form',
3241+ 'view_mode': 'form',
3242+ 'res_model': 'account.move',
3243+ 'type': 'ir.actions.act_window',
3244+ 'target': 'current',
3245+ 'res_id': move_id or False,
3246+ }
3247
3248=== added file 'l10n_it_ricevute_bancarie/wizard/wizard_unsolved.xml'
3249--- l10n_it_ricevute_bancarie/wizard/wizard_unsolved.xml 1970-01-01 00:00:00 +0000
3250+++ l10n_it_ricevute_bancarie/wizard/wizard_unsolved.xml 2013-11-08 19:19:50 +0000
3251@@ -0,0 +1,45 @@
3252+<?xml version="1.0" encoding="utf-8"?>
3253+
3254+<openerp>
3255+ <data>
3256+
3257+ <record id="riba_unsolved" model="ir.ui.view">
3258+ <field name="name">riba.unsolved.wizard</field>
3259+ <field name="model">riba.unsolved</field>
3260+ <field name="arch" type="xml">
3261+ <form string="Ri.Ba. Unsolved">
3262+ <separator string="This wizard generates the journal entry related to an unsolved payment" colspan="4"/>
3263+ <field name="unsolved_journal_id" />
3264+ <newline/>
3265+ <field name="effects_account_id" />
3266+ <field name="effects_amount" />
3267+ <field name="riba_bank_account_id" />
3268+ <field name="riba_bank_amount" />
3269+ <field name="overdue_effects_account_id" />
3270+ <field name="overdue_effects_amount" />
3271+ <field name="bank_account_id" />
3272+ <field name="bank_amount" />
3273+ <field name="bank_expense_account_id" />
3274+ <field name="expense_amount" />
3275+ <button string="Cancel" special="cancel" icon="gtk-cancel" colspan="2"/>
3276+ <button string="Create" name="create_move" type="object" icon="gtk-ok" colspan="2"/>
3277+ <separator string="You can also skip this step and set the line status to 'unsolved' anyway" colspan="4"/>
3278+ <button string="Skip and confirm the unsolved state" name="skip" type="object" icon="gtk-apply" colspan="4"/>
3279+ </form>
3280+ </field>
3281+ </record>
3282+
3283+ <record id="riba_unsolved_action" model="ir.actions.act_window">
3284+ <field name="name">Ri.Ba. Unsolved</field>
3285+ <field name="type">ir.actions.act_window</field>
3286+ <field name="res_model">riba.unsolved</field>
3287+ <field name="src_model">riba.distinta.line</field>
3288+ <field name="view_type">form</field>
3289+ <field name="view_mode">form</field>
3290+ <field name="target">new</field>
3291+ <field name="view_id" ref="riba_unsolved"/>
3292+
3293+ </record>
3294+
3295+ </data>
3296+</openerp>

Subscribers

People subscribed via source and target branches