Merge lp:~bruno-bottacini/openobject-italia/7-l10n_it_ricevute_bancarie into lp:~openobject-italia-core-devs/openobject-italia/italian-addons-7.0

Proposed by bruno bottacini
Status: Needs review
Proposed branch: lp:~bruno-bottacini/openobject-italia/7-l10n_it_ricevute_bancarie
Merge into: lp:~openobject-italia-core-devs/openobject-italia/italian-addons-7.0
Diff against target: 3314 lines (+3179/-0)
26 files modified
l10n_it_ricevute_bancarie/AUTHORS.txt (+2/-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 (+260/-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:~bruno-bottacini/openobject-italia/7-l10n_it_ricevute_bancarie
Reviewer Review Type Date Requested Status
Lorenzo Battistini Disapprove
Review via email: mp+171085@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Lorenzo Battistini (elbati) wrote :

Ciao Bruno,

puoi riassumere le modifiche principali che hai fatto rispetto alla 6.1?

Ad esempio vedo che hai rimosso la dipendenza da 'account_due_list', ma nel 'fields_view_get' alla riga 269 del diff ci sono ancora dei riferimenti.

Alla riga 3257 mi sembra ci sia la modifica che per 6.1 è nel seguente MP
https://code.launchpad.net/~bruno-bottacini/openobject-italia/6.1-fix-bug-1167773/+merge/158863
Hai un'opinione riguardo al commento che ti avevo lasciato?

Grazie

review: Needs Information
219. By bruno bottacini

rimossa la dipendenza da account_due_list

Revision history for this message
bruno bottacini (bruno-bottacini) wrote :

Ciao Lorenzo,

è passato un po' di tempo, ma in sostanza ho fatto un mero porting della versione 6.1 con l'aggiunta, per poter rimuovere la dipendeza da account_due_list, dei campi utilizzati ma non più presenti perchè definiti in quel modulo appunto.

ora ho rimosso la dipendenza da account_due_list (un mio errore per la fretta).
invece mi era scappato il commento sulla versione 6.1, analizzo il problema.

grazie

Revision history for this message
Marzi Gianpaolo (g-marzi) wrote :

Sono fuori dall'ufficio da Gio 18/07/2013 fino a Dom 21/07/2013.

Nota: Questa è una risposta automatizzata al messaggio "Re:
[Openobject-italia-core-devs] [Merge]
lp:~bruno-bottacini/openobject-italia/7-l10n_it_ricevute_bancarie into
lp:openobject-italia/7.0" inviata il 19/07/2013 10.23.30.

Questa è l'unica notifica che verrà ricevuta mentre la persona è assente.

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

A proposito di 'account_due_list':
https://code.launchpad.net/~agilebg/account-payment/adding_account_due_list_7
sulla 7 esisterà

Quindi possiamo evitare di dover modificare 'l10n_it_ricevute_bancarie' per rimuovere la dipendenza

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

ho testato il branch, ma non mi è chiaro come possa funzionare, siccome dipende da strutture non più presenti su v7, come ad esempio res.partner.address.

Partendo dal branch di Bruno, ho fatto questo:

https://code.launchpad.net/~enlightx/openobject-italia/7.0-l10n_it_ricevute_bancarie

per il quale avevo erroneamente creato un MP verso openobject-italia/7.0.

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

Se questo branch ha ancora senso posso creare un MP verso questo e continuiamo a lavorare qui.

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

Bruno, se ci sei batti un colpo :-)

Altrimenti spostiamo tutto su un altro branch posseduto da 'openobject-italia-core-devs' o da qualcuno di attivo.

Revision history for this message
bruno bottacini (bruno-bottacini) wrote :

scusatemi, per me potete pure spostarlo o stare qui

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

Suggerirei di partire comunque da un altro branch, inserendo unicamente le modifiche per fare andare il modulo sulla 7. Eventuali bachi o migliorie li gestirei in proposte a parte.

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

riproporrei quindi le modifiche che ho fatto, ma partendo dalla versione ufficiale per 6.1

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

On 10/22/2013 12:25 PM, Davide Corio wrote:
> riproporrei quindi le modifiche che ho fatto, ma partendo dalla versione ufficiale per 6.1

Perfetto, grazie.

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

This project is now hosted on https://github.com/OCA/l10n-italy. Please move your proposal there. This guide may help you https://github.com/OCA/maintainers-tools/wiki/How-to-move-a-Merge-Proposal-to-GitHub

Unmerged revisions

219. By bruno bottacini

rimossa la dipendenza da account_due_list

218. By bruno bottacini

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

Subscribers

People subscribed via source and target branches