Merge lp:~camptocamp/account-invoicing/7.0-port-invoice_validation_wkfl into lp:~account-core-editors/account-invoicing/7.0

Proposed by Yannick Vaucher @ Camptocamp
Status: Merged
Merged at revision: 18
Proposed branch: lp:~camptocamp/account-invoicing/7.0-port-invoice_validation_wkfl
Merge into: lp:~account-core-editors/account-invoicing/7.0
Diff against target: 486 lines (+174/-199)
5 files modified
invoice_validation_wkfl/__init__.py (+18/-24)
invoice_validation_wkfl/__openerp__.py (+38/-50)
invoice_validation_wkfl/invoice.py (+35/-42)
invoice_validation_wkfl/invoice_view.xml (+49/-51)
invoice_validation_wkfl/invoice_wkf.xml (+34/-32)
To merge this branch: bzr merge lp:~camptocamp/account-invoicing/7.0-port-invoice_validation_wkfl
Reviewer Review Type Date Requested Status
Maxime Chambreuil (http://www.savoirfairelinux.com) Approve
Guewen Baconnier @ Camptocamp code review, no test Approve
Alexandre Fayolle - camptocamp code review, no test Needs Fixing
Review via email: mp+162128@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Alexandre Fayolle - camptocamp (alexandre-fayolle-c2c) wrote :

line 134: s/add/adds/

line 229: remove space before ':'

review: Needs Fixing (code review, no test)
22. By Yannick Vaucher @ Camptocamp

[IMP] invoice_validation_wkfl - __openerp__ spelling and formating

23. By Yannick Vaucher @ Camptocamp

[IMP] invoice_validation_wkfl - remove space before ':'

Revision history for this message
Yannick Vaucher @ Camptocamp (yvaucher-c2c) wrote :

correction made

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Small typo fix : l.137 typo : s/incoices/invoices ( + no space before : )

Apart that LGTM

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Fixed the typo.
LGTM

review: Approve (code review, no test)
24. By Guewen Baconnier @ Camptocamp

[FIX] typo, no space before colon

Revision history for this message
Maxime Chambreuil (http://www.savoirfairelinux.com) (max3903) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'invoice_validation_wkfl/__init__.py'
2--- invoice_validation_wkfl/__init__.py 2011-08-12 12:35:23 +0000
3+++ invoice_validation_wkfl/__init__.py 2013-06-17 09:44:27 +0000
4@@ -1,29 +1,23 @@
5 # -*- coding: utf-8 -*-
6 ##############################################################################
7 #
8-# Copyright (c) 2010 Camtocamp SA
9-# @author Joël Grand-Guillaume
10-#
11-# WARNING: This program as such is intended to be used by professional
12-# programmers who take the whole responsability of assessing all potential
13-# consequences resulting from its eventual inadequacies and bugs
14-# End users who are looking for a ready-to-use solution with commercial
15-# garantees and support are strongly adviced to contract a Free Software
16-# Service Company
17-#
18-# This program is Free Software; you can redistribute it and/or
19-# modify it under the terms of the GNU General Public License
20-# as published by the Free Software Foundation; either version 2
21-# of the License, or (at your option) any later version.
22-#
23-# This program is distributed in the hope that it will be useful,
24-# but WITHOUT ANY WARRANTY; without even the implied warranty of
25-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26-# GNU General Public License for more details.
27-#
28-# You should have received a copy of the GNU General Public License
29-# along with this program; if not, write to the Free Software
30-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
31+# Author: Joël Grand-Guillaume
32+# Copyright 2010 Camptocamp SA
33+#
34+# This program is free software: you can redistribute it and/or modify
35+# it under the terms of the GNU Affero General Public License as
36+# published by the Free Software Foundation, either version 3 of the
37+# License, or (at your option) any later version.
38+#
39+# This program is distributed in the hope that it will be useful,
40+# but WITHOUT ANY WARRANTY; without even the implied warranty of
41+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
42+# GNU Affero General Public License for more details.
43+#
44+# You should have received a copy of the GNU Affero General Public License
45+# along with this program. If not, see <http://www.gnu.org/licenses/>.
46 #
47 ##############################################################################
48-import invoice
49\ No newline at end of file
50+import invoice
51+
52+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
53
54=== modified file 'invoice_validation_wkfl/__openerp__.py'
55--- invoice_validation_wkfl/__openerp__.py 2013-04-03 14:37:57 +0000
56+++ invoice_validation_wkfl/__openerp__.py 2013-06-17 09:44:27 +0000
57@@ -1,57 +1,45 @@
58 # -*- coding: utf-8 -*-
59 ##############################################################################
60 #
61-# Copyright (c) 2011 Camptocamp SA (http://www.camptocamp.com)
62-# All Right Reserved
63-#
64-# Author : Joël Grand-Guillaume (Camptocamp)
65-#
66-# WARNING: This program as such is intended to be used by professional
67-# programmers who take the whole responsability of assessing all potential
68-# consequences resulting from its eventual inadequacies and bugs
69-# End users who are looking for a ready-to-use solution with commercial
70-# garantees and support are strongly adviced to contract a Free Software
71-# Service Company
72-#
73-# This program is Free Software; you can redistribute it and/or
74-# modify it under the terms of the GNU General Public License
75-# as published by the Free Software Foundation; either version 2
76-# of the License, or (at your option) any later version.
77-#
78-# This program is distributed in the hope that it will be useful,
79-# but WITHOUT ANY WARRANTY; without even the implied warranty of
80-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
81-# GNU General Public License for more details.
82-#
83-# You should have received a copy of the GNU General Public License
84-# along with this program; if not, write to the Free Software
85-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
86+# Author: Joël Grand-Guillaume (Camptocamp)
87+# Copyright 2010 Camptocamp SA
88+#
89+# This program is free software: you can redistribute it and/or modify
90+# it under the terms of the GNU Affero General Public License as
91+# published by the Free Software Foundation, either version 3 of the
92+# License, or (at your option) any later version.
93+#
94+# This program is distributed in the hope that it will be useful,
95+# but WITHOUT ANY WARRANTY; without even the implied warranty of
96+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
97+# GNU Affero General Public License for more details.
98+#
99+# You should have received a copy of the GNU Affero General Public License
100+# along with this program. If not, see <http://www.gnu.org/licenses/>.
101 #
102 ##############################################################################
103-
104 {
105- "name" : "Add 'To Send' and 'To Validate' states in Invoices",
106- "version" : "1.0",
107- "author" : "Camptocamp",
108- "category" : "Generic Modules/Invoicing",
109- "description":
110-"""
111-This module adds 2 states between Draft and Open states in Invoices:
112-
113-- To Validate: for invoices which need a validation
114-- To Send: for invoices that need to be sent
115-
116-""",
117- "website": "http://camptocamp.com",
118- "depends" : [
119- "account",
120- ],
121- "init_xml" : [],
122- "demo_xml" : [],
123- "update_xml" : [
124- "invoice_wkf.xml",
125- "invoice_view.xml",
126- ],
127- "active": False,
128- "installable": False
129+ 'name': 'Add "To Send" and "To Validate" states in Invoices',
130+ 'version': '1.0',
131+ 'category': 'Generic Modules/Invoicing',
132+ 'description':
133+'''
134+This module adds 2 states between draft and open state in invoices:
135+
136+- To Validate: For invoices which need a validation
137+- To Send: For all invoices that need to be sent
138+
139+''',
140+ 'author': 'Camptocamp',
141+ 'website': 'http://camptocamp.com',
142+ 'depends': ['account'],
143+ 'data': [
144+ 'invoice_wkf.xml',
145+ 'invoice_view.xml',
146+ ],
147+ 'demo': [],
148+ 'test': [],
149+ 'installable': True,
150+ 'auto_install': False,
151+ 'application': False
152 }
153
154=== modified file 'invoice_validation_wkfl/invoice.py'
155--- invoice_validation_wkfl/invoice.py 2012-02-23 09:24:17 +0000
156+++ invoice_validation_wkfl/invoice.py 2013-06-17 09:44:27 +0000
157@@ -1,41 +1,30 @@
158 # -*- coding: utf-8 -*-
159 ##############################################################################
160 #
161-# Copyright (c) 2010 Camtocamp SA
162-# @author Joël Grand-Guillaume
163-# $Id: $
164-#
165-# WARNING: This program as such is intended to be used by professional
166-# programmers who take the whole responsability of assessing all potential
167-# consequences resulting from its eventual inadequacies and bugs
168-# End users who are looking for a ready-to-use solution with commercial
169-# garantees and support are strongly adviced to contract a Free Software
170-# Service Company
171-#
172-# This program is Free Software; you can redistribute it and/or
173-# modify it under the terms of the GNU General Public License
174-# as published by the Free Software Foundation; either version 2
175-# of the License, or (at your option) any later version.
176-#
177-# This program is distributed in the hope that it will be useful,
178-# but WITHOUT ANY WARRANTY; without even the implied warranty of
179-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
180-# GNU General Public License for more details.
181-#
182-# You should have received a copy of the GNU General Public License
183-# along with this program; if not, write to the Free Software
184-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
185+# Author: Joël Grand-Guillaume
186+# Copyright 2010 Camptocamp SA
187+#
188+# This program is free software: you can redistribute it and/or modify
189+# it under the terms of the GNU Affero General Public License as
190+# published by the Free Software Foundation, either version 3 of the
191+# License, or (at your option) any later version.
192+#
193+# This program is distributed in the hope that it will be useful,
194+# but WITHOUT ANY WARRANTY; without even the implied warranty of
195+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
196+# GNU Affero General Public License for more details.
197+#
198+# You should have received a copy of the GNU Affero General Public License
199+# along with this program. If not, see <http://www.gnu.org/licenses/>.
200 #
201 ##############################################################################
202-
203-from osv import fields
204-from osv import osv
205+from openerp.osv import orm, fields, osv
206 from tools.translate import _
207 import netsvc
208
209-class account_invoice(osv.osv):
210+class AccountInvoice(orm.Model):
211 _inherit = "account.invoice"
212-
213+
214 def action_to_valid(self, cr, uid, ids):
215 """Check if analytic account of each lines is not closed"""
216 inv_ids = isinstance(ids, list) and ids[:] or [ids]
217@@ -45,16 +34,16 @@
218 for line in inv.invoice_line:
219 if line.account_analytic_id and line.account_analytic_id.state in ['close', 'cancelled']:
220 str_error_lines += "\n- %s" %(line.name)
221- errors = True
222- if errors:
223+ errors = True
224+ if errors:
225 raise osv.except_osv(_('UserError'),
226 _("You are trying to validate invoice lines linked to a closed or cancelled Analytic Account."
227- "\n\nCheck the following lines :")
228+ "\n\nCheck the following lines:")
229 + str_error_lines)
230-
231+
232 self.write(cr, uid, inv_ids, {'state': 'to_valid'})
233 return True
234-
235+
236 _columns = {
237 'state': fields.selection([
238 ('draft','Draft'),
239@@ -64,13 +53,12 @@
240 ('open','Open'),
241 ('paid','Paid'),
242 ('cancel','Canceled')],'State', select=True, readonly=True),
243- }
244-
245-account_invoice()
246-
247-class account_invoice_refund(osv.osv_memory):
248+ }
249+
250+
251+class AccountInvoiceRefund(orm.TransientModel):
252 _inherit = "account.invoice.refund"
253-
254+
255 def compute_refund(self, cr, uid, ids, mode='refund', context=None):
256 """
257 @param cr: the current row, from the database cursor,
258@@ -95,8 +83,11 @@
259 date = False
260 period = False
261 description = False
262+ journal_id = False
263 company = res_users_obj.browse(cr, uid, uid, context=context).company_id
264- journal_id = form.get('journal_id', False)
265+ if form.get('journal_id', False):
266+ journal_id = form['journal_id'][0]
267+
268 for inv in inv_obj.browse(cr, uid, context.get('active_ids'), context=context):
269 if inv.state in ['draft', 'proforma2', 'cancel']:
270 raise osv.except_osv(_('Error !'), _('Can not %s draft/proforma/cancel invoice.') % (mode))
271@@ -217,4 +208,6 @@
272 invoice_domain.append(('id', 'in', created_inv))
273 result['domain'] = invoice_domain
274 return result
275-account_invoice_refund()
276+
277+
278+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
279
280=== modified file 'invoice_validation_wkfl/invoice_view.xml'
281--- invoice_validation_wkfl/invoice_view.xml 2011-08-29 11:34:30 +0000
282+++ invoice_validation_wkfl/invoice_view.xml 2013-06-17 09:44:27 +0000
283@@ -1,62 +1,60 @@
284+<?xml version="1.0" encoding="utf-8"?>
285 <openerp>
286-<data>
287-
288+ <data>
289+
290 <record model="ir.ui.view" id="invoice_supplier_formc2c">
291- <field name="name">account.invoice.supplier.formc2c</field>
292- <field name="model">account.invoice</field>
293- <field name="inherit_id" ref="account.invoice_supplier_form"/>
294- <field name="type">form</field>
295- <field name="arch" type="xml">
296- <xpath expr="/form/notebook/page/group/group[1]" position="replace">
297- <group col="12" colspan="4">
298- <button name="invoice_cancel" states="draft,to_valid,to_send,proforma2,sale,open" string="Cancel" icon="gtk-cancel"/>
299- <button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="terp-stock_effects-object-colorize"/>
300- <button name="%(account.action_account_invoice_refund)d" type='action' string='Refund' states='open,paid' icon="gtk-execute"/>
301- <button name="%(account.action_account_state_open)d" type='action' string='Re-Open' states='paid' icon="gtk-convert" groups="account.group_account_user"/>
302- <button name="invoice_open" states="to_send,proforma2" string="Approve" icon="terp-camera_test"/>
303- <button name="invoice_to_valid" states="draft" string="To Validation" icon="terp-camera_test"/>
304- <button name="invoice_to_send" states="to_valid" string="Invoice to send" icon="terp-camera_test"/>
305- </group>
306- </xpath>
307- </field>
308+ <field name="name">account.invoice.supplier.formc2c</field>
309+ <field name="model">account.invoice</field>
310+ <field name="inherit_id" ref="account.invoice_supplier_form"/>
311+ <field name="arch" type="xml">
312+ <xpath expr="/form/header" position="replace">
313+ <header>
314+ <button name="invoice_cancel" states="draft,to_valid,to_send,proforma2,sale,open" string="Cancel" icon="gtk-cancel"/>
315+ <button name="action_cancel_draft" states="cancel" string="Set to Drafttttt" type="object" icon="terp-stock_effects-object-colorize"/>
316+ <button name="%(account.action_account_invoice_refund)d" type='action' string='Refund' states='open,paid' icon="gtk-execute"/>
317+ <button name="%(account.action_account_state_open)d" type='action' string='Re-Open' states='paid' icon="gtk-convert" groups="account.group_account_user"/>
318+ <button name="invoice_open" states="to_send,proforma2" string="Approve" icon="terp-camera_test"/>
319+ <button name="invoice_to_valid" states="draft" string="To Validation" icon="terp-camera_test"/>
320+ <button name="invoice_to_send" states="to_valid" string="Invoice to send" icon="terp-camera_test"/>
321+ <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,paid" statusbar_colors='{"proforma":"blue","proforma2":"blue"}'/>
322+ </header>
323+ </xpath>
324+ </field>
325 </record>
326
327 <record model="ir.ui.view" id="invoice_formc2c">
328- <field name="name">account.invoice.formc2c</field>
329- <field name="model">account.invoice</field>
330- <field name="inherit_id" ref="account.invoice_form"/>
331- <field name="type">form</field>
332- <field name="arch" type="xml">
333- <xpath expr="/form/notebook/page/group/group[@groups='base.group_user']" position="replace">
334- <group col="12" colspan="4" groups="base.group_user">
335- <button name="invoice_cancel" states="to_send,to_valid,draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel"/>
336- <button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object" icon="terp-stock_effects-object-colorize"/>
337- <button name="invoice_to_send" states="to_valid" string="Invoice To Send" icon="gtk-go-forward"/>
338- <button name="invoice_to_valid" states="draft" string="To Validation" icon="terp-gtk-media-pause"/>
339- <button name="%(account.action_account_invoice_refund)d" type='action' string='Refund' states='open,paid' icon="gtk-execute"/>
340- <button name='%(account.action_account_state_open)d' type='action' string='Re-Open' states='paid' icon="gtk-convert" groups="account.group_account_user"/>
341- <button name="invoice_proforma2" states="to_send" string="PRO-FORMA" icon="terp-gtk-media-pause" />
342- <button name="invoice_open" states="to_send,proforma2" string="Validate" icon="gtk-go-forward"/>
343- <button name="%(account.account_invoices)d" string="Print Invoice" type="action" icon="gtk-print" states="open,paid,proforma,sale,proforma2"/>
344- </group>
345- </xpath>
346- </field>
347+ <field name="name">account.invoice.formc2c</field>
348+ <field name="model">account.invoice</field>
349+ <field name="inherit_id" ref="account.invoice_form"/>
350+ <field name="arch" type="xml">
351+ <xpath expr="/form/header" position="replace">
352+ <header>
353+ <button name="invoice_cancel" states="to_send,to_valid,draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel"/>
354+ <button name="action_cancel_draft" states="cancel" string="Reset to Draft" type="object" icon="terp-stock_effects-object-colorize"/>
355+ <button name="invoice_to_send" states="to_valid" string="Invoice To Send" icon="gtk-go-forward"/>
356+ <button name="invoice_to_valid" states="draft" string="To Validation" icon="terp-gtk-media-pause"/>
357+ <button name="%(account.action_account_invoice_refund)d" type='action' string='Refund' states='open,paid' icon="gtk-execute"/>
358+ <button name='%(account.action_account_state_open)d' type='action' string='Re-Open' states='paid' icon="gtk-convert" groups="account.group_account_user"/>
359+ <button name="invoice_proforma2" states="to_send" string="PRO-FORMA" icon="terp-gtk-media-pause" />
360+ <button name="invoice_open" states="to_send,proforma2" string="Validate" icon="gtk-go-forward"/>
361+ <button name="%(account.account_invoices)d" string="Print Invoice" type="action" icon="gtk-print" states="open,paid,proforma,sale,proforma2"/>
362+ <field name="state" widget="statusbar" nolabel="1" statusbar_visible="draft,open,paid" statusbar_colors='{"proforma":"blue","proforma2":"blue"}'/>
363+ </header>
364+ </xpath>
365+ </field>
366 </record>
367
368-
369 <record id="view_account_invoice_filter" model="ir.ui.view">
370- <field name="name">account.invoice.valid_wkf.select</field>
371- <field name="model">account.invoice</field>
372- <field name="type">search</field>
373- <field name="inherit_id" ref="account.view_account_invoice_filter" />
374- <field name="arch" type="xml">
375- <xpath expr="/search/group/filter[@name='proforma']" position="after">
376- <filter name="to_valid" icon="terp-camera_test" string="To Validate" domain="[('state','=','to_valid')]" help="To Validate Invoices"/>
377- <filter name="to_send" icon="terp-check" string="To Send" domain="[('state','=','to_send')]" help="To Send Invoices"/>
378- </xpath>
379- </field>
380+ <field name="name">account.invoice.valid_wkf.select</field>
381+ <field name="model">account.invoice</field>
382+ <field name="inherit_id" ref="account.view_account_invoice_filter" />
383+ <field name="arch" type="xml">
384+ <xpath expr="/search/filter[@name='proforma']" position="after">
385+ <filter name="to_valid" icon="terp-camera_test" string="To Validate" domain="[('state','=','to_valid')]" help="To Validate Invoices"/>
386+ <filter name="to_send" icon="terp-check" string="To Send" domain="[('state','=','to_send')]" help="To Send Invoices"/>
387+ </xpath>
388+ </field>
389 </record>
390
391-
392- </data>
393+ </data>
394 </openerp>
395
396=== modified file 'invoice_validation_wkfl/invoice_wkf.xml'
397--- invoice_validation_wkfl/invoice_wkf.xml 2012-02-23 09:24:17 +0000
398+++ invoice_validation_wkfl/invoice_wkf.xml 2013-06-17 09:44:27 +0000
399@@ -1,53 +1,55 @@
400+<?xml version="1.0" encoding="utf-8"?>
401 <openerp>
402-<data>
403-
404+ <data>
405+
406 <record model="workflow.activity" id="act_to_send">
407- <field name="wkf_id" ref="account.wkf"/>
408- <field name="name">to_send</field>
409- <field name="action">write({'state':'to_send'})</field>
410- <field name="kind">function</field>
411+ <field name="wkf_id" ref="account.wkf"/>
412+ <field name="name">to_send</field>
413+ <field name="action">write({'state':'to_send'})</field>
414+ <field name="kind">function</field>
415 </record>
416-
417+
418 <record model="workflow.activity" id="act_to_valid">
419- <field name="wkf_id" ref="account.wkf"/>
420- <field name="name">to_valid</field>
421- <field name="action">action_to_valid()</field>
422- <field name="kind">function</field>
423+ <field name="wkf_id" ref="account.wkf"/>
424+ <field name="name">to_valid</field>
425+ <field name="action">action_to_valid()</field>
426+ <field name="kind">function</field>
427 </record>
428-
429+
430 <record model="workflow.transition" id="t_draft_to_valid">
431- <field name="act_from" ref="account.act_draft"/>
432- <field name="act_to" ref="act_to_valid"/>
433- <field name="signal">invoice_to_valid</field>
434+ <field name="act_from" ref="account.act_draft"/>
435+ <field name="act_to" ref="act_to_valid"/>
436+ <field name="signal">invoice_to_valid</field>
437 </record>
438
439 <record model="workflow.transition" id="t_valid_to_send">
440- <field name="act_from" ref="act_to_valid"/>
441- <field name="act_to" ref="act_to_send"/>
442- <field name="signal">invoice_to_send</field>
443+ <field name="act_from" ref="act_to_valid"/>
444+ <field name="act_to" ref="act_to_send"/>
445+ <field name="signal">invoice_to_send</field>
446 </record>
447
448 <record model="workflow.transition" id="t_send_to_pro2">
449- <field name="act_from" ref="act_to_send"/>
450- <field name="act_to" ref="account.act_proforma2"/>
451- <field name="signal">invoice_proforma2</field>
452+ <field name="act_from" ref="act_to_send"/>
453+ <field name="act_to" ref="account.act_proforma2"/>
454+ <field name="signal">invoice_proforma2</field>
455 </record>
456 <record model="workflow.transition" id="account.t4">
457- <field name="act_from" ref="act_to_send"/>
458- <field name="act_to" ref="account.act_open"/>
459- <field name="signal">invoice_open</field>
460+ <field name="act_from" ref="act_to_send"/>
461+ <field name="act_to" ref="account.act_open"/>
462+ <field name="signal">invoice_open</field>
463 </record>
464-
465+
466 <record model="workflow.transition" id="account.t9">
467- <field name="act_from" ref="act_to_send"/>
468- <field name="act_to" ref="account.act_cancel"/>
469- <field name="signal">invoice_cancel</field>
470+ <field name="act_from" ref="act_to_send"/>
471+ <field name="act_to" ref="account.act_cancel"/>
472+ <field name="signal">invoice_cancel</field>
473 </record>
474+
475 <record model="workflow.transition" id="t_valid_to_cancel">
476- <field name="act_from" ref="act_to_valid"/>
477- <field name="act_to" ref="account.act_cancel"/>
478- <field name="signal">invoice_cancel</field>
479+ <field name="act_from" ref="act_to_valid"/>
480+ <field name="act_to" ref="account.act_cancel"/>
481+ <field name="signal">invoice_cancel</field>
482 </record>
483
484-</data>
485+ </data>
486 </openerp>

Subscribers

People subscribed via source and target branches