Merge lp:~openerp-commiter/openobject-addons/trunk-rpa-new into lp:~openerp/openobject-addons/old_trunk

Proposed by Rucha (Open ERP)
Status: Superseded
Proposed branch: lp:~openerp-commiter/openobject-addons/trunk-rpa-new
Merge into: lp:~openerp/openobject-addons/old_trunk
Diff against target: None lines
To merge this branch: bzr merge lp:~openerp-commiter/openobject-addons/trunk-rpa-new
Reviewer Review Type Date Requested Status
Jay Vora (Serpent Consulting Services) (community) Needs Fixing
Review via email: mp+5969@code.launchpad.net

This proposal has been superseded by a proposal from 2009-04-29.

To post a comment you must log in.
Revision history for this message
Rucha (Open ERP) (rpa-openerp) wrote :

Fixes: Missing button of Proforma in invoice view
Improvement :"Canceled" > "Cancelled"

Revision history for this message
Jay Vora (Serpent Consulting Services) (jayvora) wrote :

Please make basic checks.
thanks.

review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'account/account_bank_statement.py'
2--- account/account_bank_statement.py 2009-01-16 09:44:05 +0000
3+++ account/account_bank_statement.py 2009-04-23 06:56:53 +0000
4@@ -124,7 +124,7 @@
5 states={'confirm':[('readonly', True)]}),
6 'move_line_ids': fields.one2many('account.move.line', 'statement_id',
7 'Entry lines', states={'confirm':[('readonly',True)]}),
8- 'state': fields.selection([('draft', 'Draft'),('confirm', 'Confirm')],
9+ 'state': fields.selection([('draft', 'Draft'),('confirm', 'Confirmed')],
10 'State', required=True,
11 states={'confirm': [('readonly', True)]}, readonly="1"),
12 'currency': fields.function(_currency, method=True, string='Currency',
13
14=== modified file 'account/account_invoice_view.xml'
15--- account/account_invoice_view.xml 2009-04-17 10:37:08 +0000
16+++ account/account_invoice_view.xml 2009-04-28 08:16:35 +0000
17@@ -179,21 +179,24 @@
18 </field>
19 </group>
20 <group col="4" colspan="2">
21- <button colspan="2" name="button_reset_taxes" states="draft" string="Compute Taxes" type="object" icon="gtk-execite"/>
22+ <button colspan="2" name="button_reset_taxes" states="draft" string="Compute Taxes" type="object" icon="gtk-execute"/>
23 <field name="amount_untaxed"/>
24 <label string="" colspan="2"/>
25 <field name="amount_tax"/>
26+ <label string="" colspan="2"/>
27+ <field name="amount_total"/>
28 <field name="reconciled"/>
29- <field name="amount_total"/>
30- <field name="state" select="2"/>
31 <field name="residual"/>
32- <group col="3" colspan="4">
33- <button name="invoice_open" states="draft,proforma2" string="Validate" icon="gtk-apply"/>
34- <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel"/>
35- <button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
36- <button name='%(wizard_paid_open)d' type='action' string='Re-Open' states='paid' icon="gtk-convert"/>
37- </group>
38 </group>
39+ <separator colspan="4" string="Status"/>
40+ <group col="7" colspan="4">
41+ <field name="state" select="2"/>
42+ <button name="invoice_proforma2" states="draft" string="PRO-FORMA" icon="gtk-print"/>
43+ <button name="invoice_open" states="draft,proforma2" string="Validate" icon="gtk-apply"/>
44+ <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel"/>
45+ <button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
46+ <button name='%(wizard_paid_open)d' type='action' string='Re-Open' states='paid' icon="gtk-convert"/>
47+ </group>
48 </page>
49 <page string="Other Info">
50 <field name="company_id"/>
51@@ -264,23 +267,25 @@
52 </tree>
53 </field>
54 </group>
55- <group col="4" colspan="2">
56- <button colspan="2" name="button_reset_taxes" states="draft" string="Compute Taxes" type="object" icon="gtk-apply"/>
57+ <group col="4" colspan="2">
58+ <button colspan="2" name="button_reset_taxes" states="draft" string="Compute Taxes" type="object" icon="gtk-execute"/>
59 <field name="amount_untaxed"/>
60 <label string="" colspan="2"/>
61 <field name="amount_tax"/>
62+ <label string="" colspan="2"/>
63+ <field name="amount_total"/>
64 <field name="reconciled"/>
65- <field name="amount_total"/>
66- <field name="state" select="2"/>
67 <field name="residual"/>
68- <group col="3" colspan="4">
69- <button name="invoice_proforma2" states="draft" string="PRO-FORMA" icon="gtk-print"/>
70- <button name="invoice_open" states="draft,proforma2" string="Create" icon="gtk-execute"/>
71- <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel"/>
72- <button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
73- <button name='%(wizard_paid_open)d' type='action' string='Re-Open' states='paid' icon="gtk-convert"/>
74- </group>
75 </group>
76+ <separator colspan="4" string="Status"/>
77+ <group col="7" colspan="4">
78+ <field name="state" select="2"/>
79+ <button name="invoice_proforma2" states="draft" string="PRO-FORMA" icon="gtk-print"/>
80+ <button name="invoice_open" states="draft,proforma2" string="Validate" icon="gtk-apply"/>
81+ <button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="gtk-cancel"/>
82+ <button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
83+ <button name='%(wizard_paid_open)d' type='action' string='Re-Open' states='paid' icon="gtk-convert"/>
84+ </group>
85 </page>
86 <page string="Other Info">
87 <field name="company_id"/>
88
89=== modified file 'account/account_view.xml'
90--- account/account_view.xml 2009-04-25 13:05:19 +0000
91+++ account/account_view.xml 2009-04-27 10:55:58 +0000
92@@ -361,9 +361,13 @@
93 <field colspan="4" name="move_line_ids" nolabel="1"/>
94 </page>
95 </notebook>
96- <group col="7" colspan="4">
97+ <group col="1" colspan="2"/>
98+ <group col="2" colspan="2">
99+ <separator colspan="2" string="Total Balance"/>
100+ <field name="balance_end"/>
101+ </group>
102+ <group col="6" colspan="4">
103 <field name="state" select="2"/>
104- <field name="balance_end"/>
105 <button name="button_dummy" states="draft" string="Compute" icon="gtk-execute"/>
106 <button name="button_confirm" states="draft" string="Confirm" type="object" icon="gtk-apply"/>
107 <button name="button_cancel" states="confirm" string="Cancel" type="object" icon="gtk-cancel"/>
108@@ -723,12 +727,12 @@
109 <newline/>
110 <field name="account_tax_id" domain="[('parent_id','=',False)]"/>
111 <field name="analytic_account_id"/>
112-
113- <separator colspan="4" string="State"/>
114+ <newline/>
115 <field name="journal_id" select="2"/>
116 <field name="period_id"/>
117 <field name="reconcile_id"/>
118 <field name="reconcile_partial_id"/>
119+ <separator colspan="4" string="State"/>
120 <field name="state" select="2"/>
121 </page>
122 <page string="Analytic Lines">
123@@ -881,8 +885,8 @@
124 </field>
125
126 <separator colspan="4" string="State"/>
127- <field name="state" select="1"/>
128- <group col="2" colspan="2">
129+ <group col="4" colspan="4">
130+ <field name="state" select="1" colspan="1"/>
131 <button name="button_validate" states="draft" string="Validate" type="object" icon="gtk-execute"/>
132 <button name="button_cancel" states="posted" string="Cancel" type="object" icon="gtk-cancel"/>
133 </group>
134@@ -980,9 +984,13 @@
135 </field>
136 </page>
137 </notebook>
138+ <group col="1" colspan="2"/>
139+ <group col="2" colspan="2">
140+ <separator colspan="2" string="Total Balance"/>
141+ <field name="balance_end"/>
142+ </group>
143 <group col="7" colspan="4">
144 <field name="state" select="2"/>
145- <field name="balance_end"/>
146 <button name="button_dummy" states="draft" string="Compute" icon="gtk-execute"/>
147 <button name="button_confirm" states="draft" string="Confirm" type="object" icon="gtk-apply"/>
148 <button name="button_cancel" states="confirm" string="Cancel" type="object" icon="gtk-cancel"/>
149@@ -1253,16 +1261,14 @@
150 <field name="period_nbr"/>
151 <field name="period_type"/>
152 <field name="model_id"/>
153- <group col="2" colspan="2">
154+ <separator colspan="4" string="Subscription Lines"/>
155+ <field colspan="4" name="lines_id" widget="one2many_list"/>
156+
157+ <separator colspan="4" string="State"/>
158+ <group col="5" colspan="4">
159+ <field name="state" select="2"/>
160 <button name="compute" states="draft,running" string="Compute" type="object" icon="gtk-execute"/>
161 <button name="remove_line" states="running" string="Remove Lines" type="object" icon="gtk-remove"/>
162- </group>
163- <separator colspan="4" string="Subscription Lines"/>
164- <field colspan="4" name="lines_id" widget="one2many_list"/>
165-
166- <separator colspan="4" string="State"/>
167- <field name="state" select="2"/>
168- <group col="1" colspan="2">
169 <button name="state_draft" states="done" string="Set to Draft" type="object" icon="gtk-convert" />
170 </group>
171 </form>
172
173=== modified file 'board/board_view.xml'
174--- board/board_view.xml 2009-04-17 10:37:08 +0000
175+++ board/board_view.xml 2009-04-24 12:01:17 +0000
176@@ -49,15 +49,15 @@
177 </tree>
178 </field>
179 </record>
180+
181+
182 <record id="view_board_form" model="ir.ui.view">
183 <field name="name">board.board.form</field>
184 <field name="model">board.board</field>
185 <field name="type">form</field>
186- <field eval="1" name="priority"/>
187 <field name="arch" type="xml">
188 <form string="Dashboard">
189 <field name="name" select="1"/>
190- <button colspan="2" name="%(wizard_board_create_menu)d" string="Create Menu" type="action" icon="gtk-justify-fill"/>
191 <field colspan="4" name="line_ids">
192 <tree string="Dashboard View">
193 <field name="name"/>
194@@ -74,9 +74,11 @@
195 <field name="position"/>
196 </form>
197 </field>
198+ <button colspan="2" name="%(wizard_board_create_menu)d" string="Create Menu" type="action" icon="gtk-justify-fill"/>
199 </form>
200 </field>
201 </record>
202+
203 <record id="action_view_board_list_form" model="ir.actions.act_window">
204 <field name="name">Dashboard Definition</field>
205 <field name="res_model">board.board</field>
206
207=== modified file 'crm_configuration/report/crm_report.py'
208--- crm_configuration/report/crm_report.py 2009-01-04 22:12:50 +0000
209+++ crm_configuration/report/crm_report.py 2009-04-28 08:37:32 +0000
210@@ -26,7 +26,7 @@
211 AVAILABLE_STATES = [
212 ('draft','Draft'),
213 ('open','Open'),
214- ('cancel', 'Canceled'),
215+ ('cancel', 'Cancelled'),
216 ('done', 'Closed'),
217 ('pending','Pending')
218 ]
219
220=== modified file 'crm_profiling/crm_profiling_view.xml'
221--- crm_profiling/crm_profiling_view.xml 2009-04-17 10:37:08 +0000
222+++ crm_profiling/crm_profiling_view.xml 2009-04-27 08:47:41 +0000
223@@ -65,9 +65,11 @@
224 <form string="Questionnaires">
225 <field name="name" select="1" />
226 <newline/>
227- <field name="description" select="1" />
228+ <separator string="Questions List" colspan="4"/>
229+ <field name="questions_ids" colspan="4" nolabel="1"/>
230 <newline/>
231- <field name="questions_ids" colspan="4"/>
232+ <separator string="Description" colspan="4"/>
233+ <field name="description" colspan="4" select="1" nolabel="1"/>
234 </form>
235 </field>
236 </record>
237
238=== modified file 'document_ics/__init__.py'
239--- document_ics/__init__.py 2009-03-06 23:50:10 +0000
240+++ document_ics/__init__.py 2009-04-23 13:46:21 +0000
241@@ -21,4 +21,6 @@
242 ##############################################################################
243
244 import document
245+import document_ics_config_wizard
246+
247 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
248
249=== modified file 'document_ics/__terp__.py'
250--- document_ics/__terp__.py 2009-02-03 17:02:20 +0000
251+++ document_ics/__terp__.py 2009-04-23 13:46:21 +0000
252@@ -30,7 +30,7 @@
253 'website': 'http://www.openerp.com',
254 'depends': ['document', 'crm_configuration'],
255 'init_xml': ['document_data.xml'],
256- 'update_xml': ['document_view.xml', 'security/ir.model.access.csv'],
257+ 'update_xml': ['document_view.xml', 'security/ir.model.access.csv','document_ics_config_wizard.xml'],
258 'demo_xml': ['document_demo.xml'],
259 'installable': True,
260 'active': False,
261
262=== modified file 'document_ics/document.py'
263--- document_ics/document.py 2009-01-05 13:49:37 +0000
264+++ document_ics/document.py 2009-04-27 12:42:32 +0000
265@@ -28,6 +28,7 @@
266 import datetime
267 import time
268 import random
269+import tools
270
271 ICS_TAGS = {
272 'summary':'normal',
273@@ -35,7 +36,7 @@
274 'dtstart':'date' ,
275 'dtend':'date' ,
276 'created':'date' ,
277- 'dt-stamp':'date' ,
278+ 'dtstamp':'date' ,
279 'last-modified':'normal' ,
280 'url':'normal' ,
281 'attendee':'multiple',
282@@ -50,7 +51,7 @@
283 _name = 'document.directory.ics.fields'
284 _columns = {
285 'field_id': fields.many2one('ir.model.fields', 'Open ERP Field', required=True),
286- 'name': fields.selection(map(lambda x: (x,x), ICS_TAGS.keys()),'ICS Value', required=True),
287+ 'name': fields.selection(map(lambda x: (x, x), ICS_TAGS.keys()), 'ICS Value', required=True),
288 'content_id': fields.many2one('document.directory.content', 'Content', required=True, ondelete='cascade')
289 }
290 document_directory_ics_fields()
291@@ -87,7 +88,7 @@
292 uuid = event.value
293 if event.name.lower() in fields:
294 if ICS_TAGS[event.name.lower()]=='normal':
295- result[fields[event.name.lower()]] = event.value.encode('utf8')
296+ result[fields[event.name.lower()]] = event.value
297 elif ICS_TAGS[event.name.lower()]=='date':
298 result[fields[event.name.lower()]] = event.value.strftime('%Y-%m-%d %H:%M:%S')
299 if not uuid:
300@@ -105,6 +106,12 @@
301 return True
302
303 def process_read_ics(self, cr, uid, node, context={}):
304+ def ics_datetime(idate, short=False):
305+ if short:
306+ return datetime.date.fromtimestamp(time.mktime(time.strptime(idate, '%Y-%m-%d')))
307+ else:
308+ return datetime.datetime.strptime(idate, '%Y-%m-%d %H:%M:%S')
309+
310 import vobject
311 obj_class = self.pool.get(node.content.ics_object_id.model)
312 # Can be improved to use context and active_id !
313@@ -113,21 +120,30 @@
314 cal = vobject.iCalendar()
315 for obj in obj_class.browse(cr, uid, ids, context):
316 event = cal.add('vevent')
317+ # Fix dtstamp et last-modified with create and write date on the object line
318+ perm = obj_class.perm_read(cr, uid, [obj.id], context)
319+ event.add('dtstamp').value = ics_datetime(perm[0]['create_date'][:19])
320+ if perm[0]['write_date']:
321+ event.add('last-modified').value = ics_datetime(perm[0]['write_date'][:19])
322 for field in node.content.ics_field_ids:
323 value = getattr(obj, field.field_id.name)
324 if (not value) and field.name=='uid':
325- value = 'OpenERP-'+str(random.randint(1999999999, 9999999999))
326+ value = 'OpenERP-%s_%s@%s' % (node.content.ics_object_id.model, str(obj.id), cr.dbname,)
327 obj_class.write(cr, uid, [obj.id], {field.field_id.name: value})
328 if ICS_TAGS[field.name]=='normal':
329 if type(value)==type(obj):
330 value=value.name
331 value = value or ''
332 event.add(field.name).value = value or ''
333- elif ICS_TAGS[field.name]=='date':
334- dt = value or time.strftime('%Y-%m-%d %H:%M:%S')
335- if len(dt)==10:
336- dt = dt+' 09:00:00'
337- value = datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')
338+ elif ICS_TAGS[field.name]=='date' and value:
339+ if field.name == 'dtstart':
340+ date_start = start_date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(value , "%Y-%m-%d %H:%M:%S")))
341+ if field.name == 'dtend' and isinstance(value, float):
342+ value = (start_date + datetime.timedelta(hours=value)).strftime('%Y-%m-%d %H:%M:%S')
343+ if len(value)==10:
344+ value = ics_datetime(value, True)
345+ else:
346+ value = ics_datetime(value)
347 event.add(field.name).value = value
348 s= StringIO.StringIO(cal.serialize().encode('utf8'))
349 s.name = node
350@@ -138,8 +154,36 @@
351 class crm_case(osv.osv):
352 _inherit = 'crm.case'
353 _columns = {
354- 'code': fields.char('Calendar Code', size=64)
355- }
356+ 'code': fields.char('Calendar Code', size=64),
357+ 'date_deadline': fields.datetime('Deadline', help="Deadline Date is automatically computed from Start Date + Duration"),
358+ }
359+
360+ _defaults = {
361+ 'code': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'crm.case'),
362+ }
363+
364+ def copy(self, cr, uid, id, default=None, context=None):
365+ """
366+ code field must be unique in ICS file
367+ """
368+ if not default: default = {}
369+ if not context: context = {}
370+ default.update({'code': self.pool.get('ir.sequence').get(cr, uid, 'crm.case'), 'id': False})
371+ return super(crm_case, self).copy(cr, uid, id, default, context)
372+
373+ def on_change_duration(self, cr, uid, id, date, duration):
374+ if not date:
375+ return {}
376+ start_date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(date, "%Y-%m-%d %H:%M:%S")))
377+ if duration >= 0 :
378+ end = start_date + datetime.timedelta(hours=duration)
379+ if duration < 0:
380+ raise osv.except_osv(_('Warning !'),
381+ _('You can not set negative Duration.'))
382+
383+ res = {'value' : {'date_deadline' : end.strftime('%Y-%m-%d %H:%M:%S')}}
384+ return res
385+
386 crm_case()
387
388 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
389
390=== modified file 'document_ics/document_data.xml'
391--- document_ics/document_data.xml 2008-10-28 08:38:03 +0000
392+++ document_ics/document_data.xml 2009-04-24 08:40:05 +0000
393@@ -6,6 +6,21 @@
394 <field name="code">.ics</field>
395 <field name="name">ICS Calendar</field>
396 </record>
397-
398 </data>
399-</openerp>
400+
401+
402+ <data noupdate="1">
403+ <!-- Sequences for sale.order -->
404+ <record id="seq_type_crm_case_code" model="ir.sequence.type">
405+ <field name="name">CRM Case Code</field>
406+ <field name="code">crm.case</field>
407+ </record>
408+ <record id="seq_sale_order" model="ir.sequence">
409+ <field name="name">CRM Case</field>
410+ <field name="code">crm.case</field>
411+ <field name="prefix">CASE</field>
412+ <field name="padding">3</field>
413+ </record>
414+ </data>
415+
416+</openerp>
417\ No newline at end of file
418
419=== modified file 'document_ics/document_demo.xml'
420--- document_ics/document_demo.xml 2009-04-20 12:04:38 +0000
421+++ document_ics/document_demo.xml 2009-04-23 13:46:21 +0000
422@@ -26,6 +26,11 @@
423 <field name="field_id" ref="crm.field_crm_case_date"/>
424 <field name="content_id" ref="dir_content_calendar"/>
425 </record>
426+ <record model="document.directory.ics.fields" id="dir_field6">
427+ <field name="name">dtend</field>
428+ <field name="field_id" ref="crm.field_crm_case_date_deadline"/>
429+ <field name="content_id" ref="dir_content_calendar"/>
430+ </record>
431 <record model="document.directory.ics.fields" id="dir_field2">
432 <field name="name">summary</field>
433 <field name="field_id" ref="crm.field_crm_case_name"/>
434
435=== added file 'document_ics/document_ics_config_wizard.py'
436--- document_ics/document_ics_config_wizard.py 1970-01-01 00:00:00 +0000
437+++ document_ics/document_ics_config_wizard.py 2009-04-27 08:43:00 +0000
438@@ -0,0 +1,137 @@
439+ # -*- encoding: utf-8 -*-
440+##############################################################################
441+#
442+# OpenERP, Open Source Management Solution
443+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
444+# $Id$
445+#
446+# This program is free software: you can redistribute it and/or modify
447+# it under the terms of the GNU General Public License as published by
448+# the Free Software Foundation, either version 3 of the License, or
449+# (at your option) any later version.
450+#
451+# This program is distributed in the hope that it will be useful,
452+# but WITHOUT ANY WARRANTY; without even the implied warranty of
453+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
454+# GNU General Public License for more details.
455+#
456+# You should have received a copy of the GNU General Public License
457+# along with this program. If not, see <http://www.gnu.org/licenses/>.
458+#
459+##############################################################################
460+
461+import time
462+import tools
463+from osv import fields, osv, orm
464+import os
465+import mx.DateTime
466+import base64
467+import pooler
468+
469+SECTION_NAME = {
470+ 'meeting' : 'Meetings',
471+ 'lead':'Prospects',
472+ 'opportunity':'Opportunities',
473+ 'jobs':'Jobs',
474+ 'bugs':'Bug Tracking',
475+ 'fund':'Fund Raising',
476+ 'helpdesk':'HelpDesk',
477+ 'claims':'Claims',
478+ 'phonecall':'Phone Calls',
479+ }
480+
481+ICS_TAGS = {
482+ 'summary':'Description',
483+ 'uid':'Calendar Code' ,
484+ 'dtstart':'Date' ,
485+ 'dtend':'Deadline' ,
486+ 'url':'Partner Email' ,
487+ 'description':'Your action',
488+ }
489+
490+class document_ics_crm_wizard(osv.osv_memory):
491+ _name='document.ics.crm.wizard'
492+ _columns = {
493+ 'name':fields.char('Name', size=64),
494+ 'meeting' : fields.boolean('Calendar of Meetings', help="Manages the calendar of meetings of the users."),
495+ 'lead' : fields.boolean('Prospect', help="Allows you to track and manage prospects which are pre-sales requests or contacts, the very first contact with a customer request."),
496+ 'opportunity' : fields.boolean('Business Opportunities', help="Tracks identified business opportunities for your sales pipeline."),
497+ 'jobs' : fields.boolean('Jobs Hiring Process', help="Help you to organise the jobs hiring process: evaluation, meetings, email integration..."),
498+ 'document_ics':fields.boolean('Shared Calendar', help=" Will allow you to synchronise your Open ERP calendars with your phone, outlook, Sunbird, ical, ..."),
499+ 'bugs' : fields.boolean('Bug Tracking', help="Used by companies to track bugs and support requests on softwares"),
500+ 'helpdesk': fields.boolean('Helpdesk', help="Manages an Helpdesk service."),
501+ 'fund' : fields.boolean('Fund Raising Operations', help="This may help associations in their fund raising process and tracking."),
502+ 'claims' : fields.boolean('Claims', help="Manages the supplier and customers claims, including your corrective or preventive actions."),
503+ 'phonecall' : fields.boolean('Phone Calls', help="Help you to encode the result of a phone call or to planify a list of phone calls to process."),
504+ }
505+ _defaults = {
506+ 'meeting': lambda *args: True,
507+ 'opportunity': lambda *args: True,
508+ 'phonecall': lambda *args: True,
509+ }
510+
511+ def action_create(self, cr, uid, ids, context=None):
512+ data=self.read(cr, uid, ids, [])[0]
513+ dir_obj = self.pool.get('document.directory')
514+ dir_cont_obj = self.pool.get('document.directory.content')
515+ parent_dir = dir_obj.search(cr, uid, [('name', '=', 'Calendars')])
516+ if parent_dir:
517+ parent_dir = parent_dir[0]
518+ else:
519+ parent_dir = dir_obj.create(cr, uid, {'name': 'Calendars' ,'user_id' : uid, 'type': 'directory'})
520+ for section in ['meeting', 'lead', 'opportunity', 'jobs', 'bugs', 'fund', 'helpdesk', 'claims', 'phonecall']:
521+ if (not data[section]):
522+ continue
523+ else:
524+ vals = {
525+ 'name':SECTION_NAME[section]+' Calendars',
526+ 'parent_id': parent_dir,
527+ 'type' : 'directory',
528+ 'user_id' : uid
529+ }
530+ dir_id = dir_obj.create(cr, uid, vals)
531+ object_id=self.pool.get('ir.model').search(cr, uid, [('name', '=', 'Case')])[0]
532+ section_id=self.pool.get('crm.case.section').search(cr, uid, [('name', '=', SECTION_NAME[section])])[0]
533+ vals_cont={
534+ 'name': SECTION_NAME[section],
535+ 'sequence': 1,
536+ 'directory_id': dir_id,
537+ 'suffix': section,
538+ 'extension': '.ics',
539+ 'ics_object_id': object_id,
540+ 'ics_domain': [('section_id', '=', section_id)],
541+ 'include_name' : False
542+ }
543+
544+ content_id = dir_cont_obj.create(cr, uid, vals_cont)
545+
546+ ics_obj=self.pool.get('document.directory.ics.fields')
547+ for tag in ['description', 'url', 'summary', 'dtstart', 'dtend', 'uid']:
548+ field_id = self.pool.get('ir.model.fields').search(cr, uid, [('model_id.name', '=', 'Case'), ('field_description', '=', ICS_TAGS[tag])])[0]
549+ vals_ics={
550+ 'field_id': field_id ,
551+ 'name': tag ,
552+ 'content_id': content_id ,
553+ }
554+ ics_obj.create(cr, uid, vals_ics)
555+
556+ return {
557+ 'view_type': 'form',
558+ "view_mode": 'form',
559+ 'res_model': 'ir.actions.configuration.wizard',
560+ 'type': 'ir.actions.act_window',
561+ 'target':'new',
562+ }
563+ def action_cancel(self, cr, uid, ids, conect=None):
564+ return {
565+ 'view_type': 'form',
566+ "view_mode": 'form',
567+ 'res_model': 'ir.actions.configuration.wizard',
568+ 'type': 'ir.actions.act_window',
569+ 'target':'new',
570+ }
571+
572+document_ics_crm_wizard()
573+
574+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
575+
576
577=== added file 'document_ics/document_ics_config_wizard.xml'
578--- document_ics/document_ics_config_wizard.xml 1970-01-01 00:00:00 +0000
579+++ document_ics/document_ics_config_wizard.xml 2009-04-23 13:46:21 +0000
580@@ -0,0 +1,50 @@
581+<?xml version="1.0" encoding="utf-8"?>
582+<openerp>
583+ <data>
584+
585+ <record id="view_document_ics_config_directories" model="ir.ui.view">
586+ <field name="name">Configure Directory for Sections</field>
587+ <field name="model">document.ics.crm.wizard</field>
588+ <field name="type">form</field>
589+ <field name="arch" type="xml">
590+ <form string="Configure CRM Sections">
591+ <separator colspan="4" string="Create Pre-Configured Directories"/>
592+ <newline/>
593+ <field name="meeting"/>
594+ <field name="opportunity"/>
595+ <field name="phonecall"/>
596+ <field name="lead"/>
597+ <field name="claims"/>
598+ <field name="bugs"/>
599+ <field name="helpdesk"/>
600+ <field name="jobs"/>
601+ <field name="fund"/>
602+ <newline/>
603+ <group col="4" colspan="4">
604+ <button icon="gtk-cancel" name="action_cancel" type="object" special="cancel" string="Cancel"/>
605+ <button icon="gtk-go-forward" name="action_create" string="Next" type="object"/>
606+ </group>
607+ </form>
608+ </field>
609+ </record>
610+
611+ <record id="action_view_document_ics_config_directories" model="ir.actions.act_window">
612+ <field name="name">Configure Directory for Sections </field>
613+ <field name="type">ir.actions.act_window</field>
614+ <field name="res_model">document.ics.crm.wizard</field>
615+ <field name="view_type">form</field>
616+ <field name="view_mode">form</field>
617+ <field name="target">new</field>
618+ </record>
619+
620+ <!-- register configuration wizard -->
621+ <record id="config_wizard_step_case_section_menu" model="ir.actions.todo">
622+ <field name="name">Create Directories for CRM Case Section</field>
623+ <field name="note">This Configuration step use to create Directories in document for all Case Sections</field>
624+ <field name="action_id" ref="action_view_document_ics_config_directories"/>
625+ </record>
626+
627+
628+ </data>
629+</openerp>
630+
631
632=== modified file 'document_ics/document_view.xml'
633--- document_ics/document_view.xml 2008-10-28 10:07:10 +0000
634+++ document_ics/document_view.xml 2009-04-27 12:42:32 +0000
635@@ -20,6 +20,31 @@
636 </field>
637 </field>
638 </record>
639-
640+
641+ <record model="ir.ui.view" id="view_case_inherit_form">
642+ <field name="name">crm.case.code.form</field>
643+ <field name="model">crm.case</field>
644+ <field name="type">form</field>
645+ <field name="inherit_id" ref="crm.crm_case-view"/>
646+ <field name="arch" type="xml">
647+ <field name="priority" position="after">
648+ <field name="code"/>
649+ </field>
650+ </field>
651+ </record>
652+
653+ <record model="ir.ui.view" id="view_case_inherit_form1">
654+ <field name="name">crm.case.inherit.form1</field>
655+ <field name="model">crm.case</field>
656+ <field name="type">form</field>
657+ <field name="inherit_id" ref="crm.crm_case-view"/>
658+ <field name="arch" type="xml">
659+ <field name="date" position="replace">
660+ <field name="date" on_change="on_change_duration(date, duration)" required="1"/>
661+ <field name="duration" string="Duration(In Hour)" on_change="on_change_duration(date, duration)" widget="float_time"/>
662+ </field>
663+ </field>
664+ </record>
665+
666 </data>
667 </openerp>
668
669=== modified file 'event/event.py'
670--- event/event.py 2009-03-06 23:50:10 +0000
671+++ event/event.py 2009-04-28 08:37:32 +0000
672@@ -131,7 +131,7 @@
673 'register_prospect': fields.function(_get_prospect, method=True, string='Unconfirmed Registrations'),
674 'date_begin': fields.datetime('Beginning date', required=True),
675 'date_end': fields.datetime('Ending date', required=True),
676- 'state': fields.selection([('draft','Draft'),('confirm','Confirmed'),('done','Done'),('cancel','Canceled')], 'Status', readonly=True, required=True),
677+ 'state': fields.selection([('draft','Draft'),('confirm','Confirmed'),('done','Done'),('cancel','Cancelled')], 'Status', readonly=True, required=True),
678 'mail_auto_registr':fields.boolean('Mail Auto Register',help='Check this box if you want to use the automatic mailing for new registration'),
679 'mail_auto_confirm':fields.boolean('Mail Auto Confirm',help='Check this box if you want ot use the automatic confirmation emailing or the reminder'),
680 'mail_registr':fields.text('Registration Email',help='This email will be sent when someone subscribes to the event.'),
681
682=== modified file 'hr_holidays/hr.py'
683--- hr_holidays/hr.py 2009-03-19 15:56:46 +0000
684+++ hr_holidays/hr.py 2009-04-28 08:37:32 +0000
685@@ -110,7 +110,7 @@
686
687 _columns = {
688 'name' : fields.char('Description', required=True, readonly=True, size=64, states={'draft':[('readonly',False)]}),
689- 'state': fields.selection([('draft', 'draft'), ('confirm', 'Waiting Validation'), ('refuse', 'Refused'), ('validate', 'Validate'), ('cancel', 'Cancel')], 'Status', readonly=True),
690+ 'state': fields.selection([('draft', 'Draft'), ('confirm', 'Waiting Validation'), ('refuse', 'Refused'), ('validate', 'Validated'), ('cancel', 'Cancelled')], 'Status', readonly=True),
691 'date_from' : fields.datetime('Vacation start day', required=True, readonly=True, states={'draft':[('readonly',False)]}),
692 'date_to' : fields.datetime('Vacation end day',required=True,readonly=True, states={'draft':[('readonly',False)]}),
693 'holiday_status' : fields.many2one("hr.holidays.status", "Holiday's Status", required=True,readonly=True, states={'draft':[('readonly',False)]}),
694
695=== modified file 'hr_timesheet_invoice/hr_timesheet_invoice.py'
696--- hr_timesheet_invoice/hr_timesheet_invoice.py 2009-01-04 22:12:50 +0000
697+++ hr_timesheet_invoice/hr_timesheet_invoice.py 2009-04-27 10:55:58 +0000
698@@ -67,6 +67,24 @@
699 _defaults = {
700 'pricelist_id': lambda self,cr, uid, ctx: ctx.get('pricelist_id', False),
701 }
702+
703+ def action_open(self, cr, uid, id, context={}):
704+ self.write(cr, uid, id, {'state' : 'open'})
705+ return True
706+
707+ def action_close(self, cr, uid, id, context={}):
708+ self.write(cr, uid, id, {'state' : 'close'})
709+ return True
710+
711+ def action_pending(self, cr, uid, id, context={}):
712+ self.write(cr, uid, id, {'state' : 'pending'})
713+ return True
714+
715+ def action_draft(self, cr, uid, id, context={}):
716+ self.write(cr, uid, id, {'state' : 'draft'})
717+ return True
718+
719+
720 account_analytic_account()
721
722
723
724=== modified file 'hr_timesheet_invoice/hr_timesheet_invoice_view.xml'
725--- hr_timesheet_invoice/hr_timesheet_invoice_view.xml 2008-10-27 15:29:13 +0000
726+++ hr_timesheet_invoice/hr_timesheet_invoice_view.xml 2009-04-27 10:55:58 +0000
727@@ -16,7 +16,13 @@
728 <field name="amount_max"/>
729 <field name="amount_invoiced"/>
730 <separator colspan="4" string="Status"/>
731- <field name="state"/>
732+ <group col="6" colspan="4">
733+ <field name="state" readonly="1"/>
734+ <button name="action_open" states="draft" string="Open" type="object" icon="gtk-go-forward"/>
735+ <button name="action_pending" states="open" string="Pending" type="object" icon="gtk-media-pause"/>
736+ <button name="action_draft" states="close,pending" string="Set to Draft" type="object" icon="gtk-convert"/>
737+ <button name="action_close" states="draft,open,pending" string="Close" type="object" icon="gtk-close"/>
738+ </group>
739 </group>
740 </field>
741 </field>
742
743=== modified file 'idea/idea.py'
744--- idea/idea.py 2009-01-04 22:12:50 +0000
745+++ idea/idea.py 2009-04-28 08:37:32 +0000
746@@ -120,7 +120,7 @@
747 'count_votes' : fields.function(_vote_count, method=True, string="Count of votes", type="integer"),
748 'count_comments': fields.function(_comment_count, method=True, string="Count of comments", type="integer"),
749 'category_id': fields.many2one('idea.category', 'Category', required=True ),
750- 'state': fields.selection([('draft','Draft'),('open','Opened'),('close','Accepted'),('cancel','Canceled')], 'Status', readonly=True),
751+ 'state': fields.selection([('draft','Draft'),('open','Opened'),('close','Accepted'),('cancel','Cancelled')], 'Status', readonly=True),
752 'stat_vote_ids': fields.one2many('idea.vote.stat', 'idea_id', 'Statistics', readonly=True),
753 }
754
755
756=== modified file 'membership/membership.py'
757--- membership/membership.py 2009-03-11 13:41:51 +0000
758+++ membership/membership.py 2009-04-28 08:37:32 +0000
759@@ -483,158 +483,158 @@
760 _rec_name = 'year'
761 _columns = {
762 'year': fields.char('Year', size='4', readonly=True, select=1),
763- 'canceled_number': fields.integer('Canceled', readonly=True),
764- 'waiting_number': fields.integer('Waiting', readonly=True),
765- 'invoiced_number': fields.integer('Invoiced', readonly=True),
766- 'paid_number': fields.integer('Paid', readonly=True),
767- 'canceled_amount': fields.float('Canceled', digits=(16, 2), readonly=True),
768- 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
769- 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
770- 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
771- 'currency': fields.many2one('res.currency', 'Currency', readonly=True,
772- select=2),
773- }
774-
775- def init(self, cr):
776- '''Create the view'''
777- cr.execute("""
778- CREATE OR REPLACE VIEW report_partner_member_year AS (
779- SELECT
780- MIN(id) AS id,
781- COUNT(ncanceled) as canceled_number,
782- COUNT(npaid) as paid_number,
783- COUNT(ninvoiced) as invoiced_number,
784- COUNT(nwaiting) as waiting_number,
785- SUM(acanceled) as canceled_amount,
786- SUM(apaid) as paid_amount,
787- SUM(ainvoiced) as invoiced_amount,
788- SUM(awaiting) as waiting_amount,
789- year,
790- currency
791- FROM (SELECT
792- CASE WHEN ai.state = 'cancel' THEN ml.id END AS ncanceled,
793- CASE WHEN ai.state = 'paid' THEN ml.id END AS npaid,
794- CASE WHEN ai.state = 'open' THEN ml.id END AS ninvoiced,
795- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
796- THEN ml.id END AS nwaiting,
797- CASE WHEN ai.state = 'cancel'
798- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
799- ELSE 0 END AS acanceled,
800- CASE WHEN ai.state = 'paid'
801- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
802- ELSE 0 END AS apaid,
803- CASE WHEN ai.state = 'open'
804- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
805- ELSE 0 END AS ainvoiced,
806- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
807- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
808- ELSE 0 END AS awaiting,
809- TO_CHAR(ml.date_from, 'YYYY') AS year,
810- ai.currency_id AS currency,
811- MIN(ml.id) AS id
812- FROM membership_membership_line ml
813- JOIN (account_invoice_line ail
814- LEFT JOIN account_invoice ai
815- ON (ail.invoice_id = ai.id))
816- ON (ml.account_invoice_line = ail.id)
817- JOIN res_partner p
818- ON (ml.partner = p.id)
819- GROUP BY TO_CHAR(ml.date_from, 'YYYY'), ai.state,
820- ai.currency_id, ml.id) AS foo
821- GROUP BY year, currency)
822- """)
823-
824-ReportPartnerMemberYear()
825-
826-
827-class ReportPartnerMemberYearNew(osv.osv):
828- '''New Membership by Years'''
829-
830- _name = 'report.partner_member.year_new'
831- _description = __doc__
832- _auto = False
833- _rec_name = 'year'
834-
835- _columns = {
836- 'year': fields.char('Year', size='4', readonly=True, select=1),
837- 'canceled_number': fields.integer('Canceled', readonly=True),
838- 'waiting_number': fields.integer('Waiting', readonly=True),
839- 'invoiced_number': fields.integer('Invoiced', readonly=True),
840- 'paid_number': fields.integer('Paid', readonly=True),
841- 'canceled_amount': fields.float('Canceled', digits=(16, 2), readonly=True),
842- 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
843- 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
844- 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
845- 'currency': fields.many2one('res.currency', 'Currency', readonly=True,
846- select=2),
847- }
848-
849- def init(self, cr):
850- '''Create the view'''
851- cr.execute("""
852- CREATE OR REPLACE VIEW report_partner_member_year AS (
853- SELECT
854- MIN(id) AS id,
855- COUNT(ncanceled) as canceled_number,
856- COUNT(npaid) as paid_number,
857- COUNT(ninvoiced) as invoiced_number,
858- COUNT(nwaiting) as waiting_number,
859- SUM(acanceled) as canceled_amount,
860- SUM(apaid) as paid_amount,
861- SUM(ainvoiced) as invoiced_amount,
862- SUM(awaiting) as waiting_amount,
863- year,
864- currency
865- FROM (SELECT
866- CASE WHEN ai.state = 'cancel' THEN ml.id END AS ncanceled,
867- CASE WHEN ai.state = 'paid' THEN ml.id END AS npaid,
868- CASE WHEN ai.state = 'open' THEN ml.id END AS ninvoiced,
869- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
870- THEN ml.id END AS nwaiting,
871- CASE WHEN ai.state = 'cancel'
872- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
873- ELSE 0 END AS acanceled,
874- CASE WHEN ai.state = 'paid'
875- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
876- ELSE 0 END AS apaid,
877- CASE WHEN ai.state = 'open'
878- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
879- ELSE 0 END AS ainvoiced,
880- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
881- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
882- ELSE 0 END AS awaiting,
883- TO_CHAR(ml.date_from, 'YYYY') AS year,
884- ai.currency_id AS currency,
885- MIN(ml.id) AS id
886- FROM membership_membership_line ml
887- JOIN (account_invoice_line ail
888- LEFT JOIN account_invoice ai
889- ON (ail.invoice_id = ai.id))
890- ON (ml.account_invoice_line = ail.id)
891- JOIN res_partner p
892- ON (ml.partner = p.id)
893- GROUP BY TO_CHAR(ml.date_from, 'YYYY'), ai.state,
894- ai.currency_id, ml.id) AS foo
895- GROUP BY year, currency)
896- """)
897-
898-ReportPartnerMemberYear()
899-
900-
901-class ReportPartnerMemberYearNew(osv.osv):
902- '''New Membership by Years'''
903-
904- _name = 'report.partner_member.year_new'
905- _description = __doc__
906- _auto = False
907- _rec_name = 'year'
908- _columns = {
909- 'year': fields.char('Year', size='4', readonly=True, select=1),
910- 'canceled_number': fields.integer('Canceled', readonly=True),
911- 'waiting_number': fields.integer('Waiting', readonly=True),
912- 'invoiced_number': fields.integer('Invoiced', readonly=True),
913- 'paid_number': fields.integer('Paid', readonly=True),
914- 'canceled_amount': fields.float('Canceled', digits=(16, 2), readonly=True),
915+ 'canceled_number': fields.integer('Cancelled', readonly=True),
916+ 'waiting_number': fields.integer('Waiting', readonly=True),
917+ 'invoiced_number': fields.integer('Invoiced', readonly=True),
918+ 'paid_number': fields.integer('Paid', readonly=True),
919+ 'canceled_amount': fields.float('Cancelled', digits=(16, 2), readonly=True),
920+ 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
921+ 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
922+ 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
923+ 'currency': fields.many2one('res.currency', 'Currency', readonly=True,
924+ select=2),
925+ }
926+
927+ def init(self, cr):
928+ '''Create the view'''
929+ cr.execute("""
930+ CREATE OR REPLACE VIEW report_partner_member_year AS (
931+ SELECT
932+ MIN(id) AS id,
933+ COUNT(ncanceled) as canceled_number,
934+ COUNT(npaid) as paid_number,
935+ COUNT(ninvoiced) as invoiced_number,
936+ COUNT(nwaiting) as waiting_number,
937+ SUM(acanceled) as canceled_amount,
938+ SUM(apaid) as paid_amount,
939+ SUM(ainvoiced) as invoiced_amount,
940+ SUM(awaiting) as waiting_amount,
941+ year,
942+ currency
943+ FROM (SELECT
944+ CASE WHEN ai.state = 'cancel' THEN ml.id END AS ncanceled,
945+ CASE WHEN ai.state = 'paid' THEN ml.id END AS npaid,
946+ CASE WHEN ai.state = 'open' THEN ml.id END AS ninvoiced,
947+ CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
948+ THEN ml.id END AS nwaiting,
949+ CASE WHEN ai.state = 'cancel'
950+ THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
951+ ELSE 0 END AS acanceled,
952+ CASE WHEN ai.state = 'paid'
953+ THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
954+ ELSE 0 END AS apaid,
955+ CASE WHEN ai.state = 'open'
956+ THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
957+ ELSE 0 END AS ainvoiced,
958+ CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
959+ THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
960+ ELSE 0 END AS awaiting,
961+ TO_CHAR(ml.date_from, 'YYYY') AS year,
962+ ai.currency_id AS currency,
963+ MIN(ml.id) AS id
964+ FROM membership_membership_line ml
965+ JOIN (account_invoice_line ail
966+ LEFT JOIN account_invoice ai
967+ ON (ail.invoice_id = ai.id))
968+ ON (ml.account_invoice_line = ail.id)
969+ JOIN res_partner p
970+ ON (ml.partner = p.id)
971+ GROUP BY TO_CHAR(ml.date_from, 'YYYY'), ai.state,
972+ ai.currency_id, ml.id) AS foo
973+ GROUP BY year, currency)
974+ """)
975+
976+ReportPartnerMemberYear()
977+
978+
979+class ReportPartnerMemberYearNew(osv.osv):
980+ '''New Membership by Years'''
981+
982+ _name = 'report.partner_member.year_new'
983+ _description = __doc__
984+ _auto = False
985+ _rec_name = 'year'
986+
987+ _columns = {
988+ 'year': fields.char('Year', size='4', readonly=True, select=1),
989+ 'canceled_number': fields.integer('Cancelled', readonly=True),
990+ 'waiting_number': fields.integer('Waiting', readonly=True),
991+ 'invoiced_number': fields.integer('Invoiced', readonly=True),
992+ 'paid_number': fields.integer('Paid', readonly=True),
993+ 'canceled_amount': fields.float('Cancelled', digits=(16, 2), readonly=True),
994+ 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
995+ 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
996+ 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
997+ 'currency': fields.many2one('res.currency', 'Currency', readonly=True,
998+ select=2),
999+ }
1000+
1001+ def init(self, cr):
1002+ '''Create the view'''
1003+ cr.execute("""
1004+ CREATE OR REPLACE VIEW report_partner_member_year AS (
1005+ SELECT
1006+ MIN(id) AS id,
1007+ COUNT(ncanceled) as canceled_number,
1008+ COUNT(npaid) as paid_number,
1009+ COUNT(ninvoiced) as invoiced_number,
1010+ COUNT(nwaiting) as waiting_number,
1011+ SUM(acanceled) as canceled_amount,
1012+ SUM(apaid) as paid_amount,
1013+ SUM(ainvoiced) as invoiced_amount,
1014+ SUM(awaiting) as waiting_amount,
1015+ year,
1016+ currency
1017+ FROM (SELECT
1018+ CASE WHEN ai.state = 'cancel' THEN ml.id END AS ncanceled,
1019+ CASE WHEN ai.state = 'paid' THEN ml.id END AS npaid,
1020+ CASE WHEN ai.state = 'open' THEN ml.id END AS ninvoiced,
1021+ CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
1022+ THEN ml.id END AS nwaiting,
1023+ CASE WHEN ai.state = 'cancel'
1024+ THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
1025+ ELSE 0 END AS acanceled,
1026+ CASE WHEN ai.state = 'paid'
1027+ THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
1028+ ELSE 0 END AS apaid,
1029+ CASE WHEN ai.state = 'open'
1030+ THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
1031+ ELSE 0 END AS ainvoiced,
1032+ CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
1033+ THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
1034+ ELSE 0 END AS awaiting,
1035+ TO_CHAR(ml.date_from, 'YYYY') AS year,
1036+ ai.currency_id AS currency,
1037+ MIN(ml.id) AS id
1038+ FROM membership_membership_line ml
1039+ JOIN (account_invoice_line ail
1040+ LEFT JOIN account_invoice ai
1041+ ON (ail.invoice_id = ai.id))
1042+ ON (ml.account_invoice_line = ail.id)
1043+ JOIN res_partner p
1044+ ON (ml.partner = p.id)
1045+ GROUP BY TO_CHAR(ml.date_from, 'YYYY'), ai.state,
1046+ ai.currency_id, ml.id) AS foo
1047+ GROUP BY year, currency)
1048+ """)
1049+
1050+ReportPartnerMemberYear()
1051+
1052+
1053+class ReportPartnerMemberYearNew(osv.osv):
1054+ '''New Membership by Years'''
1055+
1056+ _name = 'report.partner_member.year_new'
1057+ _description = __doc__
1058+ _auto = False
1059+ _rec_name = 'year'
1060+ _columns = {
1061+ 'year': fields.char('Year', size='4', readonly=True, select=1),
1062+ 'canceled_number': fields.integer('Cancelled', readonly=True),
1063+ 'waiting_number': fields.integer('Waiting', readonly=True),
1064+ 'invoiced_number': fields.integer('Invoiced', readonly=True),
1065+ 'paid_number': fields.integer('Paid', readonly=True),
1066+ 'canceled_amount': fields.float('Cancelled', digits=(16, 2), readonly=True),
1067 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
1068 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
1069 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
1070
1071=== modified file 'mrp/mrp.py'
1072--- mrp/mrp.py 2009-04-03 07:17:39 +0000
1073+++ mrp/mrp.py 2009-04-28 08:37:32 +0000
1074@@ -425,7 +425,7 @@
1075 'product_lines': fields.one2many('mrp.production.product.line', 'production_id', 'Scheduled goods'),
1076 'workcenter_lines': fields.one2many('mrp.production.workcenter.line', 'production_id', 'Workcenters Utilisation'),
1077
1078- 'state': fields.selection([('draft','Draft'),('picking_except', 'Packing Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','In Production'),('cancel','Canceled'),('done','Done')],'Status', readonly=True),
1079+ 'state': fields.selection([('draft','Draft'),('picking_except', 'Packing Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','In Production'),('cancel','Cancelled'),('done','Done')],'Status', readonly=True),
1080 'hour_total': fields.function(_production_calc, method=True, type='float', string='Total Hours', multi='workorder'),
1081 'cycle_total': fields.function(_production_calc, method=True, type='float', string='Total Cycles', multi='workorder'),
1082
1083
1084=== modified file 'mrp/mrp_view.xml'
1085--- mrp/mrp_view.xml 2009-04-17 10:37:08 +0000
1086+++ mrp/mrp_view.xml 2009-04-27 08:47:41 +0000
1087@@ -17,8 +17,9 @@
1088 <field name="arch" type="xml">
1089 <form string="Properties categories">
1090 <separator colspan="4" string="General Information"/>
1091- <field colspan="4" name="name" select="1"/>
1092- <field colspan="4" name="description"/>
1093+ <field name="name" select="1"/>
1094+ <newline/>
1095+ <field name="description"/>
1096 </form>
1097 </field>
1098 </record>
1099
1100=== modified file 'mrp_operations/mrp_operations.py'
1101--- mrp_operations/mrp_operations.py 2009-03-06 23:50:10 +0000
1102+++ mrp_operations/mrp_operations.py 2009-04-28 08:37:32 +0000
1103@@ -42,7 +42,7 @@
1104 class mrp_production_workcenter_line(osv.osv):
1105 _inherit = 'mrp.production.workcenter.line'
1106 _columns = {
1107- 'state': fields.selection([('draft','Draft'),('startworking', 'In Progress'),('pause','Pause'),('cancel','Canceled'),('done','Finished')],'Status', readonly=True),
1108+ 'state': fields.selection([('draft','Draft'),('startworking', 'In Progress'),('pause','Paused'),('cancel','Cancelled'),('done','Finished')],'Status', readonly=True),
1109 'date_planned': fields.related('production_id', 'date_planned', type='datetime', string='Date Planned'),
1110 'date_start': fields.datetime('Start Date'),
1111 'date_finnished': fields.datetime('End Date'),
1112@@ -226,7 +226,7 @@
1113 raise osv.except_osv(_('Sorry!'),_('You cannot finish the operation without Starting/Resuming it !'))
1114 return False
1115 if 'cancel' in code_lst:
1116- raise osv.except_osv(_('Sorry!'),_('Operation is Already Cancelled !'))
1117+ raise osv.except_osv(_('Sorry!'),_('Operation is Already Canceled !'))
1118 return False
1119 if code.start_stop=='cancel':
1120 if not 'start' in code_lst :
1121
1122=== modified file 'mrp_repair/mrp_repair.py'
1123--- mrp_repair/mrp_repair.py 2009-03-25 04:55:54 +0000
1124+++ mrp_repair/mrp_repair.py 2009-04-28 08:37:32 +0000
1125@@ -504,7 +504,7 @@
1126 'location_id': fields.many2one('stock.location', 'Source Location', required=True, select=True),
1127 'location_dest_id': fields.many2one('stock.location', 'Dest. Location', required=True, select=True),
1128 'move_id': fields.many2one('stock.move', 'Inventory Move', readonly=True),
1129- 'state': fields.selection([('draft','Draft'),('confirmed','Confirmed'),('done','Done'),('cancel','Canceled')], 'Status', required=True, readonly=True),
1130+ 'state': fields.selection([('draft','Draft'),('confirmed','Confirmed'),('done','Done'),('cancel','Cancelled')], 'Status', required=True, readonly=True),
1131 }
1132 _defaults = {
1133 'state': lambda *a: 'draft',
1134
1135=== modified file 'project/project_view.xml'
1136--- project/project_view.xml 2009-04-17 10:37:08 +0000
1137+++ project/project_view.xml 2009-04-24 12:01:17 +0000
1138@@ -298,7 +298,7 @@
1139 <button name="do_open" states="pending,draft" string="Start Task" type="object" icon="gtk-execute"/>
1140 <button name="do_reopen" states="done,cancelled" string="Reactivate" type="object" icon="gtk-convert"/>
1141 <button name="do_pending" states="open" string="Pending" type="object" icon="gtk-media-pause"/>
1142- <button groups="base.group_extended" name="%(wizard_delegate_task)d" states="pending,open" string="Delegate" type="action" icon="gtk-sort-descending"/>
1143+ <button groups="base.group_extended" name="%(wizard_delegate_task)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending"/>
1144 <button name="%(wizard_close_task)d" states="pending,open" string="Done" type="action" icon="gtk-jump-to"/>
1145 <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel"/>
1146
1147
1148=== modified file 'report_analytic_planning/report_analytic_planning.py'
1149--- report_analytic_planning/report_analytic_planning.py 2009-01-04 22:12:50 +0000
1150+++ report_analytic_planning/report_analytic_planning.py 2009-04-27 10:55:58 +0000
1151@@ -29,11 +29,11 @@
1152 _name = "report_account_analytic.planning"
1153 _description = "Planning"
1154 _columns = {
1155- 'name': fields.char('Planning Name', size=32, required=True),
1156- 'user_id': fields.many2one('res.users', 'Responsible', required=True),
1157- 'date_from':fields.date('Start Date', required=True),
1158- 'date_to':fields.date('End Date', required=True),
1159- 'line_ids': fields.one2many('report_account_analytic.planning.line', 'planning_id', 'Planning lines'),
1160+ 'name': fields.char('Planning Name', size=32, required=True, readonly=True, states={'open':[('readonly',False)]}),
1161+ 'user_id': fields.many2one('res.users', 'Responsible', required=True, readonly=True, states={'open':[('readonly',False)]}),
1162+ 'date_from':fields.date('Start Date', required=True, readonly=True, states={'open':[('readonly',False)]}),
1163+ 'date_to':fields.date('End Date', required=True, readonly=True, states={'open':[('readonly',False)]}),
1164+ 'line_ids': fields.one2many('report_account_analytic.planning.line', 'planning_id', 'Planning lines', readonly=True, states={'open':[('readonly',False)]}),
1165 'stat_ids': fields.one2many('report_account_analytic.planning.stat', 'planning_id', 'Planning analysis', readonly=True),
1166 'stat_user_ids': fields.one2many('report_account_analytic.planning.stat.user', 'planning_id', 'Planning by user', readonly=True),
1167 'stat_account_ids': fields.one2many('report_account_analytic.planning.stat.account', 'planning_id', 'Planning by account', readonly=True),
1168@@ -47,6 +47,15 @@
1169 'state': lambda *args: 'open'
1170 }
1171 _order = 'date_from desc'
1172+
1173+ def action_open(self, cr, uid, id, context={}):
1174+ self.write(cr, uid, id, {'state' : 'open'})
1175+ return True
1176+
1177+ def action_done(self, cr, uid, id, context={}):
1178+ self.write(cr, uid, id, {'state' : 'done'})
1179+ return True
1180+
1181 report_account_analytic_planning()
1182
1183 class report_account_analytic_planning_line(osv.osv):
1184
1185=== modified file 'report_analytic_planning/report_analytic_planning_view.xml'
1186--- report_analytic_planning/report_analytic_planning_view.xml 2009-01-27 11:15:46 +0000
1187+++ report_analytic_planning/report_analytic_planning_view.xml 2009-04-27 10:55:58 +0000
1188@@ -36,8 +36,20 @@
1189 <field name="amount_unit"/>
1190 <field name="note"/>
1191 </tree>
1192+ <form string="Planning Line">
1193+ <field name="user_id"/>
1194+ <field name="account_id"/>
1195+ <field name="amount"/>
1196+ <field name="amount_unit"/>
1197+ <separator string="Notes" colspan="4" />
1198+ <field name="note" colspan="4" nolabel="1"/>
1199+ </form>
1200 </field>
1201- <field name="state" select="1"/>
1202+ <group col="4" colspan="4">
1203+ <field name="state" select="1" readonly="1"/>
1204+ <button name="action_open" states="done" string="Re-Open" type="object" icon="gtk-convert"/>
1205+ <button name="action_done" states="open" string="Done" type="object" icon="gtk-jump-to"/>
1206+ </group>
1207 </page>
1208 <page string="Analysis">
1209 <field colspan="4" name="stat_ids" nolabel="1" readonly="1">
1210
1211=== modified file 'report_crm/report_crm.py'
1212--- report_crm/report_crm.py 2009-03-20 11:28:18 +0000
1213+++ report_crm/report_crm.py 2009-04-28 08:37:32 +0000
1214@@ -25,7 +25,7 @@
1215 AVAILABLE_STATES = [
1216 ('draft','Draft'),
1217 ('open','Open'),
1218- ('cancel', 'Canceled'),
1219+ ('cancel', 'Cancelled'),
1220 ('done', 'Closed'),
1221 ('pending','Pending')
1222 ]
1223
1224=== modified file 'sale/sale.py'
1225--- sale/sale.py 2009-03-19 15:56:46 +0000
1226+++ sale/sale.py 2009-04-28 08:37:32 +0000
1227@@ -729,7 +729,7 @@
1228 'number_packages': fields.function(_number_packages, method=True, type='integer', string='Number Packages'),
1229 'notes': fields.text('Notes'),
1230 'th_weight' : fields.float('Weight'),
1231- 'state': fields.selection([('draft','Draft'),('confirmed','Confirmed'),('done','Done'),('cancel','Canceled'),('exception','Exception')], 'Status', required=True, readonly=True),
1232+ 'state': fields.selection([('draft','Draft'),('confirmed','Confirmed'),('done','Done'),('cancel','Cancelled'),('exception','Exception')], 'Status', required=True, readonly=True),
1233 'order_partner_id': fields.related('order_id', 'partner_id', type='many2one', relation='res.partner', string='Customer')
1234 }
1235 _order = 'sequence, id'
1236
1237=== modified file 'scrum/scrum_view.xml'
1238--- scrum/scrum_view.xml 2008-10-27 15:29:13 +0000
1239+++ scrum/scrum_view.xml 2009-04-27 08:47:41 +0000
1240@@ -16,12 +16,12 @@
1241 <field name="type">form</field>
1242 <field name="inherit_id" ref="project.edit_project"/>
1243 <field name="arch" type="xml">
1244- <field name="state" position="after">
1245+ <group col="9" colspan="8" position="before">
1246 <separator string="Scrum Data" colspan="4"/>
1247 <field name="product_owner_id" required="1" select="1"/>
1248- <field name="sprint_size"/>
1249- <newline/>
1250- </field>
1251+ <field name="sprint_size" colspan="2"/>
1252+ <separator string="State" colspan="4"/>
1253+ </group>
1254 </field>
1255 </record>
1256
1257@@ -99,10 +99,12 @@
1258 <field name="user_id" select="1"/>
1259 <field name="active" select="1"/>
1260 <field colspan="4" name="note"/>
1261+ <field name="progress"/>
1262+ <field name="effective_hours" widget="float_time"/>
1263+ <field name="planned_hours" widget="float_time"/>
1264+ <newline/>
1265+ <separator colspan="4" string="Status"/>
1266 <field name="state" select="1"/>
1267- <field name="progress"/>
1268- <field name="effective_hours" widget="float_time"/>
1269- <field name="planned_hours" widget="float_time"/>
1270 </page>
1271 <page string="Tasks">
1272 <field colspan="4" name="tasks_id" nolabel="1" widget="one2many_list"/>
1273@@ -289,7 +291,7 @@
1274 <separator colspan="4" string="Is there anything blocking you ?"/>
1275 <field colspan="4" name="question_blocks" nolabel="1"/>
1276 </page>
1277- <page string="Optionnal Info">
1278+ <page string="Optional Info">
1279 <field name="date"/>
1280 <newline/>
1281 <separator colspan="4" string="Are your Sprint Backlog estimate accurate ?"/>
1282@@ -393,13 +395,47 @@
1283 </field>
1284 </field>
1285 </record>
1286+
1287+ <record id="view_task_tree2" model="ir.ui.view">
1288+ <field name="name">scrum.task.tree</field>
1289+ <field name="model">scrum.task</field>
1290+ <field name="type">tree</field>
1291+ <field name="arch" type="xml">
1292+ <tree string="Tasks">
1293+ <field name="sequence"/>
1294+ <field name="name" select="1"/>
1295+ <field name="project_id" select="1"/>
1296+ <field name="user_id" select="1"/>
1297+ <field name="date_deadline" select="2"/>
1298+ <field name="progress" widget="progressbar"/>
1299+ <field name="product_backlog_id"/>
1300+ <field name="state" select="2"/>
1301+ </tree>
1302+ </field>
1303+ </record>
1304+
1305
1306 <record id="action_view_task" model="ir.actions.act_window">
1307 <field name="name">All Tasks</field>
1308 <field name="res_model">scrum.task</field>
1309 <field name="view_type">form</field>
1310+ <field name="view_id" ref="view_task_tree2" />
1311 <field name="domain">[('scrum','=',1)]</field>
1312 </record>
1313+
1314+ <record id="action_view_task_view1" model="ir.actions.act_window.view">
1315+ <field eval="1" name="sequence" />
1316+ <field name="view_mode">tree</field>
1317+ <field name="view_id" ref="view_task_tree2" />
1318+ <field name="act_window_id" ref="action_view_task" />
1319+ </record>
1320+
1321+ <record id="action_view_task_view2" model="ir.actions.act_window.view">
1322+ <field eval="2" name="sequence" />
1323+ <field name="view_mode">form</field>
1324+ <field name="view_id" ref="view_task_form2" />
1325+ <field name="act_window_id" ref="action_view_task" />
1326+ </record>
1327 <menuitem action="action_view_task" id="menu_action_view_task" parent="scrum.next_id_67"/>
1328
1329 <record id="action_view_task4" model="ir.actions.act_window">
1330@@ -409,6 +445,21 @@
1331 <field name="view_mode">tree,form</field>
1332 <field name="domain">[('user_id', '=', uid),('scrum','=',1)]</field>
1333 </record>
1334+
1335+ <record id="action_view_task4_view1" model="ir.actions.act_window.view">
1336+ <field eval="1" name="sequence" />
1337+ <field name="view_mode">tree</field>
1338+ <field name="view_id" ref="view_task_tree2" />
1339+ <field name="act_window_id" ref="action_view_task4" />
1340+ </record>
1341+
1342+ <record id="action_view_task4_view2" model="ir.actions.act_window.view">
1343+ <field eval="2" name="sequence" />
1344+ <field name="view_mode">form</field>
1345+ <field name="view_id" ref="view_task_form2" />
1346+ <field name="act_window_id" ref="action_view_task4" />
1347+ </record>
1348+
1349 <menuitem action="action_view_task4" id="menu_action_view_task4" parent="scrum.menu_action_view_task"/>
1350
1351 <record id="action_view_task5" model="ir.actions.act_window">
1352@@ -418,6 +469,20 @@
1353 <field name="view_mode">tree,form</field>
1354 <field name="domain">[('user_id','=',uid),('state','=','open'),('scrum','=',1)]</field>
1355 </record>
1356+
1357+ <record id="action_view_task5_view1" model="ir.actions.act_window.view">
1358+ <field eval="1" name="sequence" />
1359+ <field name="view_mode">tree</field>
1360+ <field name="view_id" ref="view_task_tree2" />
1361+ <field name="act_window_id" ref="action_view_task5" />
1362+ </record>
1363+
1364+ <record id="action_view_task5_view2" model="ir.actions.act_window.view">
1365+ <field eval="2" name="sequence" />
1366+ <field name="view_mode">form</field>
1367+ <field name="view_id" ref="view_task_form2" />
1368+ <field name="act_window_id" ref="action_view_task5" />
1369+ </record>
1370 <menuitem action="action_view_task5" id="menu_tasks_yours" parent="scrum.menu_action_view_task4"/>
1371
1372 <record id="action_view_task6" model="ir.actions.act_window">
1373@@ -427,6 +492,20 @@
1374 <field name="view_mode">tree,form</field>
1375 <field name="domain">[('state','=','open'),('scrum','=',1)]</field>
1376 </record>
1377+
1378+ <record id="action_view_task6_view1" model="ir.actions.act_window.view">
1379+ <field eval="1" name="sequence" />
1380+ <field name="view_mode">tree</field>
1381+ <field name="view_id" ref="view_task_tree2" />
1382+ <field name="act_window_id" ref="action_view_task6" />
1383+ </record>
1384+
1385+ <record id="action_view_task6_view2" model="ir.actions.act_window.view">
1386+ <field eval="2" name="sequence" />
1387+ <field name="view_mode">form</field>
1388+ <field name="view_id" ref="view_task_form2" />
1389+ <field name="act_window_id" ref="action_view_task6" />
1390+ </record>
1391 <menuitem action="action_view_task6" id="menu_action_view_task6" parent="project.menu_action_view_task"/>
1392
1393 </data>
1394
1395=== modified file 'stock/stock.py'
1396--- stock/stock.py 2009-04-20 07:05:10 +0000
1397+++ stock/stock.py 2009-04-28 08:37:32 +0000
1398@@ -926,7 +926,7 @@
1399
1400 'note': fields.text('Notes'),
1401
1402- 'state': fields.selection([('draft','Draft'),('waiting','Waiting'),('confirmed','Confirmed'),('assigned','Available'),('done','Done'),('cancel','Canceled')], 'Status', readonly=True, select=True),
1403+ 'state': fields.selection([('draft','Draft'),('waiting','Waiting'),('confirmed','Confirmed'),('assigned','Available'),('done','Done'),('cancel','Cancelled')], 'Status', readonly=True, select=True),
1404 'price_unit': fields.float('Unit Price',
1405 digits=(16, int(config['price_accuracy']))),
1406 }