Merge lp:~openerp-dev/openobject-addons/trunk-x2many-action-field-sgo into lp:openobject-addons

Proposed by Sanjay Gohel (Open ERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openobject-addons/trunk-x2many-action-field-sgo
Merge into: lp:openobject-addons
Diff against target: 1090 lines (+210/-133)
52 files modified
account/account_view.xml (+1/-1)
account/partner.py (+5/-1)
account/partner_view.xml (+10/-12)
account_analytic_default/account_analytic_default_view.xml (+2/-2)
account_asset/account_asset_view.xml (+1/-1)
account_payment/account_payment_view.xml (+1/-1)
account_voucher/account_voucher_view.xml (+1/-1)
auth_signup/res_users_view.xml (+1/-1)
claim_from_delivery/claim_delivery_view.xml (+1/-1)
crm/crm_lead_view.xml (+3/-2)
crm/res_partner_view.xml (+12/-7)
crm_claim/res_partner_view.xml (+3/-3)
email_template/email_template_view.xml (+3/-3)
event/event_view.xml (+2/-1)
fleet/fleet_view.xml (+14/-5)
hr/hr_view.xml (+2/-0)
hr_contract/hr_contract_view.xml (+3/-1)
hr_evaluation/hr_evaluation_view.xml (+5/-5)
hr_holidays/hr_holidays.py (+1/-0)
hr_holidays/hr_holidays_view.xml (+2/-1)
hr_payroll/hr_payroll_view.xml (+3/-2)
hr_recruitment/hr_recruitment_view.xml (+4/-4)
hr_timesheet/hr_timesheet_view.xml (+1/-1)
hr_timesheet_sheet/hr_timesheet_sheet_view.xml (+4/-3)
mail/mail_alias_view.xml (+1/-1)
marketing_campaign/marketing_campaign.py (+4/-0)
marketing_campaign/marketing_campaign_view.xml (+12/-11)
mrp/mrp_view.xml (+7/-4)
point_of_sale/point_of_sale_view.xml (+2/-2)
procurement/procurement_view.xml (+3/-1)
product/product_view.xml (+2/-0)
project/project.py (+12/-12)
project/project_view.xml (+5/-2)
project/res_partner_view.xml (+3/-3)
project/tests/test_project_flow.py (+4/-4)
project_issue/project_issue.py (+9/-2)
project_issue/project_issue_view.xml (+5/-4)
project_long_term/project_long_term_view.xml (+5/-4)
project_long_term/test/task_process.yml (+1/-1)
project_timesheet/project_timesheet_view.xml (+2/-2)
purchase/partner_view.xml (+8/-4)
purchase/purchase.py (+5/-0)
purchase/purchase_view.xml (+3/-1)
purchase/stock_view.xml (+2/-2)
purchase_requisition/purchase_requisition_view.xml (+1/-1)
sale/res_partner_view.xml (+3/-2)
sale/sale.py (+6/-0)
sale/sale_view.xml (+3/-1)
stock/product.py (+1/-0)
stock/product_view.xml (+7/-2)
stock/stock_view.xml (+5/-3)
survey/survey_view.xml (+4/-5)
To merge this branch: bzr merge lp:~openerp-dev/openobject-addons/trunk-x2many-action-field-sgo
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+198030@code.launchpad.net

Description of the change

Hello,
    Change in button behaviour which lies in button_box class set oe_link and also set x2many widget where is needed on one2many field. If one2many field is not found for x2many widget than add new one2many field For looks like in kanban view. And set all action button on top and all fields below action button.

Thank You.
Sanjay Gohel

To post a comment you must log in.
9014. By Sanjay Gohel (Open ERP)

[MERGE]sync with trunk

9015. By Sanjay Gohel (Open ERP)

[IMP]resove conflict

Unmerged revisions

9015. By Sanjay Gohel (Open ERP)

[IMP]resove conflict

9014. By Sanjay Gohel (Open ERP)

[MERGE]sync with trunk

9013. By Sanjay Gohel (Open ERP)

[MERGE]with trunk

9012. By Sanjay Gohel (Open ERP)

[IMP]add sheet on serial number form view

9011. By Sanjay Gohel (Open ERP)

[IMP]campaign view improve

9010. By Sanjay Gohel (Open ERP)

[IMP]improve view

9009. By Sanjay Gohel (Open ERP)

[IMP]improve view add css class

9008. By Sanjay Gohel (Open ERP)

[IMP]improve

9007. By Sanjay Gohel (Open ERP)

[IMP]set 2 groups in all form view for differentiate actions and fields

9006. By Sanjay Gohel (Open ERP)

[MERGE]merge lp:~openerp-dev/openobject-addons/trunk-add-x2many-widget-sgo

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'account/account_view.xml'
2--- account/account_view.xml 2014-02-07 15:12:35 +0000
3+++ account/account_view.xml 2014-02-10 06:51:31 +0000
4@@ -631,7 +631,7 @@
5 <field name="arch" type="xml">
6 <xpath expr="//div[@name='import_buttons']" position="inside">
7 <button name="button_journal_entries"
8- string="Journal Items" type="object"
9+ string="Journal Items" type="object" class="oe_link oe_vertical_separator"
10 attrs="{'invisible':[('state','!=','confirm')]}"/>
11 </xpath>
12 </field>
13
14=== modified file 'account/partner.py'
15--- account/partner.py 2013-11-27 15:32:57 +0000
16+++ account/partner.py 2014-02-10 06:51:31 +0000
17@@ -222,7 +222,11 @@
18 help="This payment term will be used instead of the default one for purchase orders and supplier invoices"),
19 'ref_companies': fields.one2many('res.company', 'partner_id',
20 'Companies that refers to partner'),
21- 'last_reconciliation_date': fields.datetime('Latest Full Reconciliation Date', help='Date on which the partner accounting entries were fully reconciled last time. It differs from the last date where a reconciliation has been made for this partner, as here we depict the fact that nothing more was to be reconciled at this date. This can be achieved in 2 different ways: either the last unreconciled debit/credit entry of this partner was reconciled, either the user pressed the button "Nothing more to reconcile" during the manual reconciliation process.')
22+ 'last_reconciliation_date': fields.datetime('Latest Full Reconciliation Date', help='Date on which the partner accounting entries were fully reconciled last time. It differs from the last date where a reconciliation has been made for this partner, as here we depict the fact that nothing more was to be reconciled at this date. This can be achieved in 2 different ways: either the last unreconciled debit/credit entry of this partner was reconciled, either the user pressed the button "Nothing more to reconcile" during the manual reconciliation process.'),
23+ 'ref_companies': fields.one2many('res.company', 'partner_id',
24+ 'Companies that refers to partner'),
25+ 'invoice_ids': fields.one2many('account.invoice', 'partner_id', 'Invoices'),
26+ 'contract_ids': fields.one2many('account.analytic.account', 'partner_id', 'Contracts'),
27 }
28
29 def _commercial_fields(self, cr, uid, context=None):
30
31=== modified file 'account/partner_view.xml'
32--- account/partner_view.xml 2013-10-27 12:31:04 +0000
33+++ account/partner_view.xml 2014-02-10 06:51:31 +0000
34@@ -50,26 +50,24 @@
35 </field>
36 </record>
37
38- <record id="action_open_partner_analytic_accounts" model="ir.actions.act_window">
39- <field name="context">{'search_default_partner_id': [active_id], 'default_partner_id': active_id}</field>
40- <field name="name">Contracts/Analytic Accounts</field>
41- <field name="res_model">account.analytic.account</field>
42- <field name="view_id" ref="view_account_analytic_account_tree"/>
43- <field name="search_view_id" ref="view_account_analytic_account_search"/>
44- </record>
45 <record model="ir.ui.view" id="partner_view_buttons">
46 <field name="name">partner.view.buttons</field>
47 <field name="model">res.partner</field>
48 <field name="inherit_id" ref="base.view_partner_form" />
49 <field name="priority" eval="20"/>
50 <field name="arch" type="xml">
51+ <xpath expr="//div[@name='action_buttons']" position="inside">
52+ <button type="action" string="Journal Items" class="oe_link"
53+ name="%(account.action_account_moves_all_tree)d" groups="account.group_account_user"/>
54+ </xpath>
55 <xpath expr="//div[@name='buttons']" position="inside">
56- <button type="action" string="Invoices"
57- name="%(account.action_invoice_tree)d"
58+ <field name="invoice_ids"
59+ widget="x2many_counter" class="oe_vertical_separator"
60+ options='{"views": [[false, "list"], [false, "form"]]}'
61 context="{'search_default_partner_id': active_id,'default_partner_id': active_id}" groups="account.group_account_invoice"/>
62- <button type="action" string="Journal Items" name="%(account.action_account_moves_all_tree)d" groups="account.group_account_user"/>
63- <button type="action" string="Contracts" name="%(account.action_open_partner_analytic_accounts)d"
64- groups="analytic.group_analytic_accounting"/>
65+ <field name="contract_ids" groups="analytic.group_analytic_accounting"
66+ widget="x2many_counter" class="oe_vertical_separator"
67+ options='{"views": [[false, "list"], [false, "form"]]}'/>
68 </xpath>
69 </field>
70 </record>
71
72=== modified file 'account_analytic_default/account_analytic_default_view.xml'
73--- account_analytic_default/account_analytic_default_view.xml 2013-10-27 12:31:04 +0000
74+++ account_analytic_default/account_analytic_default_view.xml 2014-02-10 06:51:31 +0000
75@@ -79,8 +79,8 @@
76 <field name="model">product.product</field>
77 <field name="inherit_id" ref="product.product_normal_form_view"/>
78 <field name="arch" type="xml">
79- <xpath expr="//div[@name='buttons']" position="inside">
80- <button string="Analytic Rules" name= "%(action_product_default_list)d" type="action" groups="analytic.group_analytic_accounting" />
81+ <xpath expr="//div[@name='action_buttons']" position="inside">
82+ <button string="Analytic Rules" class="oe_link oe_vertical_separator" name= "%(action_product_default_list)d" type="action" groups="analytic.group_analytic_accounting" />
83 </xpath>
84 </field>
85 </record>
86
87=== modified file 'account_asset/account_asset_view.xml'
88--- account_asset/account_asset_view.xml 2013-10-27 12:31:04 +0000
89+++ account_asset/account_asset_view.xml 2014-02-10 06:51:31 +0000
90@@ -84,7 +84,7 @@
91 </header>
92 <sheet>
93 <div class="oe_button_box oe_right">
94- <button name="open_entries" string="Entries" type="object" class="oe_inline"/>
95+ <button name="open_entries" string="Entries" type="object" class="oe_inline oe_link"/>
96 </div>
97 <div class="oe_title">
98 <label for="name" class="oe_edit_only"/>
99
100=== modified file 'account_payment/account_payment_view.xml'
101--- account_payment/account_payment_view.xml 2013-12-20 16:55:19 +0000
102+++ account_payment/account_payment_view.xml 2014-02-10 06:51:31 +0000
103@@ -70,7 +70,7 @@
104 </header>
105 <sheet string="Payment order">
106 <div class="oe_button_box">
107- <button name="%(action_create_payment_order)d" string="Select Invoices to Pay"
108+ <button class="oe_link oe_vertical_separator" name="%(action_create_payment_order)d" string="Select Invoices to Pay"
109 type="action" attrs="{'invisible':[('state','=','done')]}" icon="gtk-find"/>
110 </div>
111 <div class="oe_title">
112
113=== modified file 'account_voucher/account_voucher_view.xml'
114--- account_voucher/account_voucher_view.xml 2013-10-27 12:31:04 +0000
115+++ account_voucher/account_voucher_view.xml 2014-02-10 06:51:31 +0000
116@@ -201,7 +201,7 @@
117 <field name="arch" type="xml">
118 <xpath expr="//div[@name='import_buttons']" position="inside">
119 <button name="%(action_view_account_statement_from_invoice_lines)d"
120- string="Import Invoices" type="action"
121+ string="Import Invoices" type="action" class="oe_link oe_vertical_separator"
122 attrs="{'invisible':[('state','=','confirm')]}"/>
123 </xpath>
124 </field>
125
126=== modified file 'auth_signup/res_users_view.xml'
127--- auth_signup/res_users_view.xml 2013-11-27 15:32:57 +0000
128+++ auth_signup/res_users_view.xml 2014-02-10 06:51:31 +0000
129@@ -30,7 +30,7 @@
130 type="object" name="action_reset_password"
131 attrs="{'invisible': [('state', '!=', 'active')]}"/>
132 <button string="Send an Invitation Email"
133- class="oe_link"
134+ class="oe_link oe_vertical_separator"
135 type="object" name="action_reset_password" context="{'create_user': 1}"
136 attrs="{'invisible': [('state', '!=', 'new')]}"/>
137 </xpath>
138
139=== modified file 'claim_from_delivery/claim_delivery_view.xml'
140--- claim_from_delivery/claim_delivery_view.xml 2012-11-29 22:26:45 +0000
141+++ claim_from_delivery/claim_delivery_view.xml 2014-02-10 06:51:31 +0000
142@@ -17,7 +17,7 @@
143 <field name="arch" type="xml">
144 <xpath expr="/form/sheet/h1" position="before">
145 <div class="oe_right oe_button_box">
146- <button name="%(action_claim_from_delivery)d" string="Claims" type="action"/>
147+ <button name="%(action_claim_from_delivery)d" class="oe_link" string="Claims" type="action"/>
148 </div>
149 </xpath>
150 </field>
151
152=== modified file 'crm/crm_lead_view.xml'
153--- crm/crm_lead_view.xml 2014-01-16 14:43:26 +0000
154+++ crm/crm_lead_view.xml 2014-02-10 06:51:31 +0000
155@@ -105,6 +105,7 @@
156 <sheet>
157 <div class="oe_right oe_button_box" name="buttons">
158 <button string="Schedule/Log Call"
159+ class="oe_link"
160 name="%(opportunity2phonecall_act)d"
161 type="action"/>
162 </div>
163@@ -389,9 +390,9 @@
164 <sheet>
165 <div class="oe_right oe_button_box">
166 <button string="Schedule/Log Call" type="action"
167- name="%(opportunity2phonecall_act)d"/>
168+ name="%(opportunity2phonecall_act)d" class="oe_link"/>
169 <button string="Meeting" type="object"
170- name="action_makeMeeting"
171+ name="action_makeMeeting" class="oe_link oe_vertical_separator"
172 context="{'search_default_attendee_id': active_id, 'default_attendee_id' : active_id}"/>
173 </div>
174 <div class="oe_title">
175
176=== modified file 'crm/res_partner_view.xml'
177--- crm/res_partner_view.xml 2014-01-15 09:38:05 +0000
178+++ crm/res_partner_view.xml 2014-02-10 06:51:31 +0000
179@@ -90,16 +90,21 @@
180 <field name="section_id" completion="1" groups="base.group_multi_salesteams"/>
181 </field>
182 <xpath expr="//div[@name='buttons']" position="inside">
183- <button class="oe_inline" type="action" string="Opportunities"
184+ <field string="Opportunities"
185 attrs="{'invisible': [('customer', '=', False)]}"
186- name="%(crm.crm_case_category_act_oppor11)d"
187+ name="opportunity_ids"
188+ widget="x2many_counter" class="oe_vertical_separator"
189+ options='{"views": [[false, "kanban"], [false, "list"], [false, "form"], [false, "calendar"], [false, "graph"]]}'
190 context="{'search_default_partner_id': active_id}"/>
191- <button class="oe_inline" type="action"
192- string="Meetings"
193- name="%(calendar.action_calendar_event)d"
194+ <field string="Meetings"
195+ name="meeting_ids"
196+ widget="x2many_counter" class="oe_vertical_separator"
197+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"], [false, "gantt"]]}'
198 context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/>
199- <button class="oe_inline" type="action" string="Calls"
200- name="%(crm.crm_case_categ_phone_incoming0)d"
201+ <field string="Calls"
202+ name="phonecall_ids"
203+ widget="x2many_counter" class="oe_vertical_separator"
204+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"]]}'
205 context="{'search_default_partner_id': active_id, 'default_duration': 1.0}" />
206 </xpath>
207 </data>
208
209=== modified file 'crm_claim/res_partner_view.xml'
210--- crm_claim/res_partner_view.xml 2013-06-14 12:10:20 +0000
211+++ crm_claim/res_partner_view.xml 2014-02-10 06:51:31 +0000
212@@ -9,9 +9,9 @@
213 <field name="priority" eval="50"/>
214 <field name="arch" type="xml">
215 <xpath expr="//div[@name='buttons']" position="inside">
216- <button class="oe_inline" type="action"
217- name="%(crm_case_categ_claim0)d"
218- string="Claims"
219+ <field name="claims_ids"
220+ widget="x2many_counter" class="oe_vertical_separator"
221+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"]]}'
222 context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
223 groups="base.group_sale_salesman" />
224 </xpath>
225
226=== modified file 'email_template/email_template_view.xml'
227--- email_template/email_template_view.xml 2013-10-27 12:31:04 +0000
228+++ email_template/email_template_view.xml 2014-02-10 06:51:31 +0000
229@@ -15,13 +15,13 @@
230 <div class="oe_right oe_button_box" name="buttons">
231 <field name="ref_ir_act_window" invisible="1"/>
232 <button name="create_action" string="Add context action" type="object"
233- attrs="{'invisible':[('ref_ir_act_window','!=',False)]}"
234+ attrs="{'invisible':[('ref_ir_act_window','!=',False)]}" class="oe_link"
235 help="Display an option on related documents to open a composition wizard with this template"/>
236 <button name="unlink_action" string="Remove context action" type="object"
237- attrs="{'invisible':[('ref_ir_act_window','=',False)]}"
238+ attrs="{'invisible':[('ref_ir_act_window','=',False)]}" class="oe_link"
239 help="Remove the contextual action to use this template on related documents"/>
240 <button name="%(wizard_email_template_preview)d" string="Preview"
241- type="action" target="new"
242+ type="action" target="new" class="oe_link oe_vertical_separator"
243 context="{'template_id':active_id}"/>
244 </div>
245 <notebook>
246
247=== modified file 'event/event_view.xml'
248--- event/event_view.xml 2014-01-28 17:58:35 +0000
249+++ event/event_view.xml 2014-02-10 06:51:31 +0000
250@@ -66,7 +66,8 @@
251 </header>
252 <sheet>
253 <div class="oe_right oe_button_box" groups="base.group_user">
254- <button name="%(event.act_event_list_register_event)d" type="action" string="Registrations" help="Register with this event"/>
255+ <field name="registration_ids" widget="x2many_counter"
256+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"], [false, "graph"]]}'/>
257 </div>
258 <div class="oe_title">
259 <label for="name" class="oe_edit_only"/>
260
261=== modified file 'fleet/fleet_view.xml'
262--- fleet/fleet_view.xml 2014-01-30 10:51:40 +0000
263+++ fleet/fleet_view.xml 2014-02-10 06:51:31 +0000
264@@ -210,12 +210,21 @@
265 <label for="tag_ids" class="oe_edit_only"/>
266 <field name="tag_ids" widget="many2many_tags" />
267 </div>
268+ <div class="oe_right oe_button_box" name="action_buttons">
269+ <button name="act_show_log_cost" type="object" class="oe_link" string="Costs"
270+ help="show all the costs for this vehicle" groups="fleet.group_fleet_manager"/>
271+ <button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_log_fuel_act'}"
272+ class="oe_link oe_vertical_separator" string="Fuel Logs" help="show the fuel logs for this vehicle" />
273+ <button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_odometer_act'}"
274+ class="oe_link oe_vertical_separator" string="Odometer Logs" help="show the odometer logs for this vehicle" />
275+ </div>
276 <div class="oe_right oe_button_box">
277- <button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_log_contract_act'}" string="Contracts" help="show the contract for this vehicle" />
278- <button name="act_show_log_cost" type="object" string="Costs" help="show all the costs for this vehicle" groups="fleet.group_fleet_manager"/>
279- <button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_log_services_act'}" string="Services" help="show the services logs for this vehicle" />
280- <button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_log_fuel_act'}" string="Fuel Logs" help="show the fuel logs for this vehicle" />
281- <button name="return_action_to_open" type="object" context="{'xml_id':'fleet_vehicle_odometer_act'}" string="Odometer Logs" help="show the odometer logs for this vehicle" />
282+ <field name="log_contracts" widget="x2many_counter" class="oe_vertical_separator"
283+ options='{"views": [[false, "list"], [false, "form"], [false, "graph"]]}'
284+ string="Contracts" help="show the contract for this vehicle" />
285+ <field name="log_services" class="oe_vertical_separator" string="Services"
286+ options='{"views": [[false, "list"], [false, "form"], [false, "graph"]]}' widget="x2many_counter"
287+ help="show the services logs for this vehicle" />
288 </div>
289 <group col="2" string="General Properties">
290 <group >
291
292=== modified file 'hr/hr_view.xml'
293--- hr/hr_view.xml 2014-01-29 02:19:16 +0000
294+++ hr/hr_view.xml 2014-02-10 06:51:31 +0000
295@@ -32,6 +32,8 @@
296 <label for="work_phone" class="oe_edit_only"/>
297 <field name="work_phone"/>
298 </div>
299+ <div class="oe_right oe_button_box" name="action_buttons">
300+ </div>
301 <div class="oe_right oe_button_box" name="button_box">
302 <!-- Put here related buttons -->
303 </div>
304
305=== modified file 'hr_contract/hr_contract_view.xml'
306--- hr_contract/hr_contract_view.xml 2013-10-27 12:31:04 +0000
307+++ hr_contract/hr_contract_view.xml 2014-02-10 06:51:31 +0000
308@@ -21,7 +21,9 @@
309 <field name="arch" type="xml">
310 <data>
311 <xpath expr="//div[@name='button_box']" position="inside">
312- <button name="%(act_hr_employee_2_hr_contract)d" string="Contracts" type="action" groups="base.group_hr_manager"/>
313+ <field name="contract_ids" string="Contracts" widget="x2many_counter"
314+ groups="base.group_hr_manager" class="oe_vertical_separator"
315+ options='{"views": [[false, "list"], [false, "form"]]}'/>
316 </xpath>
317 <xpath expr="//field[@name='coach_id']" position="after">
318 <field name="manager"/>
319
320=== modified file 'hr_evaluation/hr_evaluation_view.xml'
321--- hr_evaluation/hr_evaluation_view.xml 2013-12-12 09:32:34 +0000
322+++ hr_evaluation/hr_evaluation_view.xml 2014-02-10 06:51:31 +0000
323@@ -144,8 +144,8 @@
324 <field name="evaluation_date"/>
325 </group>
326 </xpath>
327- <xpath expr="//div[@name='button_box']" position="inside">
328- <button name="%(act_hr_employee_2_hr__evaluation_interview)d" string="Appraisal Interviews" type="action"/>
329+ <xpath expr="//div[@name='action_buttons']" position="inside">
330+ <button name="%(act_hr_employee_2_hr__evaluation_interview)d" class="oe_link oe_vertical_separator" string="Appraisal Interviews" type="action"/>
331 </xpath>
332 </field>
333 </record>
334@@ -183,8 +183,8 @@
335 <field nolabel="1" name="survey_request_ids" attrs="{'readonly': [('state', '=', 'done')]}">
336 <form string="Interview Appraisal" version="7.0">
337 <div class="oe_right oe_button_box">
338- <button name="%(survey.action_view_survey_question_message)d" string="Answer Survey" type="action" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response,'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
339- <button name="%(survey.survey_browse_response)d" string="Print Interview" type="action" states="done" icon="gtk-print" context="{'survey_id': survey_id, 'response_id' : [response], 'response_no':0,}" attrs="{'readonly':[('response','=',False)]}" />
340+ <button name="%(survey.action_view_survey_question_message)d" class="oe_link" string="Answer Survey" type="action" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response,'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
341+ <button name="%(survey.survey_browse_response)d" class="oe_link oe_vertical_separator" string="Print Interview" type="action" states="done" icon="gtk-print" context="{'survey_id': survey_id, 'response_id' : [response], 'response_no':0,}" attrs="{'readonly':[('response','=',False)]}" />
342 </div>
343 <group>
344 <group>
345@@ -305,7 +305,7 @@
346 <sheet>
347 <div class="oe_right oe_button_box" name="button_box">
348 <button string="Send Reminder Email" name="%(mail.action_email_compose_message_wizard)d" type="action"
349- states="waiting_answer"
350+ states="waiting_answer" class="oe_link"
351 context="{'default_body_text': 'Hello,\n\nKindly post your response for the survey interview.\n\nThanks',
352 'default_subject': 'Reminder to fill up Survey' }"/>
353 </div>
354
355=== modified file 'hr_holidays/hr_holidays.py'
356--- hr_holidays/hr_holidays.py 2014-01-15 09:38:05 +0000
357+++ hr_holidays/hr_holidays.py 2014-02-10 06:51:31 +0000
358@@ -556,6 +556,7 @@
359 'current_leave_id': fields.function(_get_leave_status, multi="leave_status", string="Current Leave Type",type='many2one', relation='hr.holidays.status'),
360 'leave_date_from': fields.function(_get_leave_status, multi='leave_status', type='date', string='From Date'),
361 'leave_date_to': fields.function(_get_leave_status, multi='leave_status', type='date', string='To Date'),
362+ 'leave_ids': fields.one2many('hr.holidays','employee_id',string="Leaves")
363 }
364
365
366
367=== modified file 'hr_holidays/hr_holidays_view.xml'
368--- hr_holidays/hr_holidays_view.xml 2014-01-15 09:38:05 +0000
369+++ hr_holidays/hr_holidays_view.xml 2014-02-10 06:51:31 +0000
370@@ -483,7 +483,8 @@
371 </group>
372 </xpath>
373 <xpath expr="//div[@name='button_box']" position="inside">
374- <button name="%(act_hr_employee_holiday_request)d" string="Leaves" type="action" groups="base.group_hr_user"/>
375+ <field name="leave_ids" widget="x2many_counter" groups="base.group_hr_user" class="oe_vertical_separator"
376+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"]]}'/>
377 </xpath>
378 </field>
379 </record>
380
381=== modified file 'hr_payroll/hr_payroll_view.xml'
382--- hr_payroll/hr_payroll_view.xml 2013-10-27 12:31:04 +0000
383+++ hr_payroll/hr_payroll_view.xml 2014-02-10 06:51:31 +0000
384@@ -222,7 +222,7 @@
385 </header>
386 <sheet>
387 <div class="oe_right oe_button_box">
388- <button name="%(act_payslip_lines)d" string="Payslip Computation Details" type="action"/>
389+ <button name="%(act_payslip_lines)d" class="oe_link" string="Payslip Computation Details" type="action"/>
390 </div>
391 <div class="oe_title">
392 <label for="employee_id" class="oe_edit_only"/>
393@@ -387,7 +387,8 @@
394 <field name="arch" type="xml">
395 <data>
396 <xpath expr="//div[@name='button_box']" position="inside">
397- <button name="%(act_hr_employee_payslip_list)d" string="Payslips" type="action" groups="base.group_hr_user"/>
398+ <field name="slip_ids" string="Payslips" widget="x2many_counter" class="oe_vertical_separator"
399+ groups="base.group_hr_user" options='{"views": [[false, "list"], [false, "form"]]}'/>
400 </xpath>
401 </data>
402 </field>
403
404=== modified file 'hr_recruitment/hr_recruitment_view.xml'
405--- hr_recruitment/hr_recruitment_view.xml 2014-01-28 17:58:35 +0000
406+++ hr_recruitment/hr_recruitment_view.xml 2014-02-10 06:51:31 +0000
407@@ -74,13 +74,13 @@
408 </header>
409 <sheet>
410 <div class="oe_right oe_button_box">
411- <button name="action_makeMeeting" type="object"
412+ <button name="action_makeMeeting" class="oe_link" type="object"
413 string="Schedule Meeting" help="Schedule interview with this applicant"/>
414- <button name="%(survey.action_view_survey_question_message)d" type="action"
415+ <button name="%(survey.action_view_survey_question_message)d" class="oe_link oe_vertical_separator" type="action"
416 string="Start Interview" help="Answer related job question"
417 context="{'survey_id': survey, 'response_id': [response], 'response_no':0 ,'active' : response, 'object' : 'hr.applicant'}"
418- attrs="{'invisible':[('survey','=',False)]}"/>
419- <button name="action_print_survey" type="object"
420+ attrs="{'invisible':[('survey','=',False)]}"/>
421+ <button name="action_print_survey" type="object" class="oe_link oe_vertical_separator"
422 string="Print Interview" help="Print interview report"
423 attrs="{'invisible':[('survey','=',False)]}"/>
424 <button name="action_get_attachment_tree_view" string="Documents" type="object"/>
425
426=== modified file 'hr_timesheet/hr_timesheet_view.xml'
427--- hr_timesheet/hr_timesheet_view.xml 2013-11-27 15:32:57 +0000
428+++ hr_timesheet/hr_timesheet_view.xml 2014-02-10 06:51:31 +0000
429@@ -119,7 +119,7 @@
430 </xpath>
431 <xpath expr='//div[@name="buttons"]' position='inside'>
432 <button string="Costs and Revenues"
433- name="%(act_analytic_cost_revenue)d"
434+ name="%(act_analytic_cost_revenue)d" class="oe_link oe_vertical_separator"
435 type="action"/>
436
437 </xpath>
438
439=== modified file 'hr_timesheet_sheet/hr_timesheet_sheet_view.xml'
440--- hr_timesheet_sheet/hr_timesheet_sheet_view.xml 2012-12-17 11:14:02 +0000
441+++ hr_timesheet_sheet/hr_timesheet_sheet_view.xml 2014-02-10 06:51:31 +0000
442@@ -71,10 +71,11 @@
443 </header>
444 <sheet>
445 <div class="oe_right oe_button_box" name="buttons">
446- <button type="action"
447+ <button type="action" class="oe_link"
448 name="%(act_hr_timesheet_sheet_sheet_2_hr_analytic_timesheet)d"
449 string="Timesheet Activities" />
450 <button type="action" groups="base.group_hr_attendance"
451+ class="oe_link oe_vertical_separator"
452 name="%(act_hr_timesheet_sheet_sheet_2_hr_attendance)d"
453 string="Attendances" />
454 </div>
455@@ -364,8 +365,8 @@
456 <field name="model">hr.employee</field>
457 <field name="inherit_id" ref="hr_timesheet.hr_timesheet_employee_extd_form"/>
458 <field name="arch" type="xml">
459- <xpath expr="//div[@name='button_box']" position="inside">
460- <button name="%(act_hr_employee_2_hr_timesheet)d" string="Timesheets" type="action" groups="base.group_hr_manager"/>
461+ <xpath expr="//div[@name='action_buttons']" position="inside">
462+ <button name="%(act_hr_employee_2_hr_timesheet)d" string="Timesheets" class="oe_link oe_vertical_separator" type="action" groups="base.group_hr_manager"/>
463 </xpath>
464 </field>
465 </record>
466
467=== modified file 'mail/mail_alias_view.xml'
468--- mail/mail_alias_view.xml 2013-10-27 12:31:04 +0000
469+++ mail/mail_alias_view.xml 2014-02-10 06:51:31 +0000
470@@ -15,7 +15,7 @@
471 type="object" class="oe_link"
472 attrs="{'invisible': ['|', ('alias_model_id', '=', False), ('alias_force_thread_id', '=', 0)]}"/>
473 <button name="open_parent_document" string="Open Parent Document"
474- type="object" class="oe_link"
475+ type="object" class="oe_link oe_vertical_separator"
476 attrs="{'invisible': ['|', ('alias_parent_model_id', '=', False), ('alias_parent_thread_id', '=', 0)]}"/>
477 </div>
478 <group>
479
480=== modified file 'marketing_campaign/marketing_campaign.py'
481--- marketing_campaign/marketing_campaign.py 2013-11-27 15:32:57 +0000
482+++ marketing_campaign/marketing_campaign.py 2014-02-10 06:51:31 +0000
483@@ -120,6 +120,10 @@
484 'Status',),
485 'activity_ids': fields.one2many('marketing.campaign.activity',
486 'campaign_id', 'Activities'),
487+ 'segment_ids': fields.one2many('marketing.campaign.segment',
488+ 'campaign_id', 'Segments'),
489+ 'followup_ids': fields.one2many('marketing.campaign.workitem',
490+ 'campaign_id', 'Follow-Up'),
491 'fixed_cost': fields.float('Fixed Cost', help="Fixed cost for running this campaign. You may also specify variable cost and revenue on each campaign activity. Cost and Revenue statistics are included in Campaign Reporting.", digits_compute=dp.get_precision('Product Price')),
492 }
493
494
495=== modified file 'marketing_campaign/marketing_campaign_view.xml'
496--- marketing_campaign/marketing_campaign_view.xml 2014-01-15 21:44:54 +0000
497+++ marketing_campaign/marketing_campaign_view.xml 2014-02-10 06:51:31 +0000
498@@ -61,21 +61,22 @@
499 <field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,running,done"/>
500 </header>
501 <sheet string="Campaign">
502- <div class="oe_right oe_button_box" name="button_box">
503- <button type="action"
504- name="%(act_marketing_campaing_stat)d"
505- string="Campaign Statistics"/>
506- <button type="action"
507- name="%(act_marketing_campaing_segment_opened)d"
508- string="Segments"/>
509- <button type="action"
510- name="%(act_marketing_campaing_followup)d"
511- string="Follow-Up"/>
512- </div>
513 <div class="oe_title">
514 <label for="name" class="oe_edit_only"/>
515 <h1><field name="name" class="oe_inline"/></h1>
516 </div>
517+ <div class="oe_right oe_button_box" name="action_buttons">
518+ <button type="action"
519+ name="%(act_marketing_campaing_stat)d" class="oe_link"
520+ string="Campaign Statistics"/>
521+ </div>
522+
523+ <div class="oe_right oe_button_box" name="button_box">
524+ <field name="segment_ids" widget="x2many_counter"
525+ options='{"views": [[false, "list"], [false, "form"]]}'/>
526+ <field name="followup_ids" widget="x2many_counter" class="oe_vertical_separator"
527+ options='{"views": [[false, "list"], [false, "form"]]}'/>
528+ </div>
529 <group>
530 <group>
531 <field name="mode"/>
532
533=== modified file 'mrp/mrp_view.xml'
534--- mrp/mrp_view.xml 2014-01-29 18:47:03 +0000
535+++ mrp/mrp_view.xml 2014-02-10 06:51:31 +0000
536@@ -1040,10 +1040,13 @@
537 <field name="model">product.product</field>
538 <field name="inherit_id" ref="product.product_normal_form_view"/>
539 <field name="arch" type="xml">
540- <xpath expr="//div[@name='buttons']" position="inside">
541- <button string="Bill of Materials" name="%(product_open_bom)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}"/>
542- <button string="BoM Structure" name="%(act_product_mrp_bom_open)d" type="action" groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}"/>
543- <button string="Manufacturing Orders" name="%(act_product_mrp_production)d" type="action" groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}"/>
544+ <xpath expr="//div[@name='action_buttons']" position="inside">
545+ <button string="Bill of Materials" name="%(product_open_bom)d" type="action"
546+ attrs="{'invisible':[('type', '=', 'service')]}" class="oe_link oe_vertical_separator"/>
547+ <button string="BoM Structure" name="%(act_product_mrp_bom_open)d" type="action" class="oe_link oe_vertical_separator"
548+ groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}"/>
549+ <button string="Manufacturing Orders" name="%(act_product_mrp_production)d" type="action" class="oe_link oe_vertical_separator"
550+ groups="mrp.group_mrp_user" attrs="{'invisible':[('type', '=', 'service')]}"/>
551 </xpath>
552 </field>
553 </record>
554
555=== modified file 'point_of_sale/point_of_sale_view.xml'
556--- point_of_sale/point_of_sale_view.xml 2014-01-27 16:09:46 +0000
557+++ point_of_sale/point_of_sale_view.xml 2014-02-10 06:51:31 +0000
558@@ -843,8 +843,8 @@
559 </header>
560 <sheet>
561 <div class="oe_right oe_button_box">
562- <button name="%(action_pos_box_in)d" string="Put Money In" type="action" states="opened,closing_control"/>
563- <button name="%(action_pos_box_out)d" string="Take Money Out" type="action" states="opened,closing_control"/>
564+ <button name="%(action_pos_box_in)d" class="oe_link" string="Put Money In" type="action" states="opened,closing_control"/>
565+ <button name="%(action_pos_box_out)d" class="oe_link oe_vertical_separator" string="Take Money Out" type="action" states="opened,closing_control"/>
566 </div>
567 <h1 class="oe_title">
568 Session:
569
570=== modified file 'procurement/procurement_view.xml'
571--- procurement/procurement_view.xml 2014-01-22 09:58:26 +0000
572+++ procurement/procurement_view.xml 2014-02-10 06:51:31 +0000
573@@ -357,7 +357,9 @@
574 <button string="⇒ Request Procurement" name="%(act_make_procurement)d" type="action" class="oe_link"/>
575 </xpath>
576 <xpath expr="//div[@name='buttons']" position="inside">
577- <button string="Orderpoints" name="%(product_open_orderpoint)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}"/>
578+ <field string="Orderpoints" name="orderpoint_ids" widget="x2many_counter"
579+ class="oe_vertical_separator" options='{"views": [[false, "list"], [false, "form"]]}'
580+ attrs="{'invisible':[('type', '=', 'service')]}"/>
581 </xpath>
582 <xpath expr="//field[@name='cost_method']" position="before">
583 <field name="procure_method" groups="base.group_user"
584
585=== modified file 'product/product_view.xml'
586--- product/product_view.xml 2014-01-27 10:29:28 +0000
587+++ product/product_view.xml 2014-02-10 06:51:31 +0000
588@@ -95,6 +95,8 @@
589 <label for="sale_ok"/>
590 </div>
591 </div>
592+ <div class="oe_right oe_button_box" name="action_buttons">
593+ </div>
594 <div class="oe_right oe_button_box" name="buttons">
595 </div>
596 <notebook>
597
598=== modified file 'project/project.py'
599--- project/project.py 2014-01-15 21:44:54 +0000
600+++ project/project.py 2014-02-10 06:51:31 +0000
601@@ -167,7 +167,7 @@
602 alias_ids = []
603 mail_alias = self.pool.get('mail.alias')
604 for proj in self.browse(cr, uid, ids, context=context):
605- if proj.tasks:
606+ if proj.task_ids:
607 raise osv.except_osv(_('Invalid Action!'),
608 _('You cannot delete a project containing tasks. You can either delete all the project\'s tasks and then delete the project or simply deactivate the project.'))
609 elif proj.alias_id:
610@@ -242,25 +242,25 @@
611 help="Gives the sequence order when displaying the list of projects"),
612 'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members',
613 help="Project's members are users who can have an access to the tasks related to this project.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
614- 'tasks': fields.one2many('project.task', 'project_id', "Task Activities"),
615+ 'task_ids': fields.one2many('project.task', 'project_id', "Task Activities"),
616 'planned_hours': fields.function(_progress_rate, multi="progress", string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.",
617 store = {
618- 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10),
619+ 'project.project': (_get_project_and_parents, ['task_ids', 'parent_id', 'child_ids'], 10),
620 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20),
621 }),
622 'effective_hours': fields.function(_progress_rate, multi="progress", string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects.",
623 store = {
624- 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10),
625+ 'project.project': (_get_project_and_parents, ['task_ids', 'parent_id', 'child_ids'], 10),
626 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20),
627 }),
628 'total_hours': fields.function(_progress_rate, multi="progress", string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.",
629 store = {
630- 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10),
631+ 'project.project': (_get_project_and_parents, ['task_ids', 'parent_id', 'child_ids'], 10),
632 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20),
633 }),
634 'progress_rate': fields.function(_progress_rate, multi="progress", string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo.",
635 store = {
636- 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10),
637+ 'project.project': (_get_project_and_parents, ['task_ids', 'parent_id', 'child_ids'], 10),
638 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20),
639 }),
640 'resource_calendar_id': fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report", states={'close':[('readonly',True)]} ),
641@@ -342,9 +342,9 @@
642 map_task_id = {}
643 task_obj = self.pool.get('project.task')
644 proj = self.browse(cr, uid, old_project_id, context=context)
645- for task in proj.tasks:
646+ for task in proj.task_ids:
647 map_task_id[task.id] = task_obj.copy(cr, uid, task.id, {}, context=context)
648- self.write(cr, uid, [new_project_id], {'tasks':[(6,0, map_task_id.values())]})
649+ self.write(cr, uid, [new_project_id], {'task_ids':[(6,0, map_task_id.values())]})
650 task_obj.duplicate_task(cr, uid, map_task_id, context=context)
651 return True
652
653@@ -357,7 +357,7 @@
654 context['active_test'] = False
655 default['state'] = 'open'
656 default['line_ids'] = []
657- default['tasks'] = []
658+ default['task_ids'] = []
659 proj = self.browse(cr, uid, id, context=context)
660 if not default.get('name', False):
661 default.update(name=_("%s (copy)") % (proj.name))
662@@ -446,7 +446,7 @@
663 u_ids = [i.id for i in project.members]
664 if project.user_id and (project.user_id.id not in u_ids):
665 u_ids.append(project.user_id.id)
666- for task in project.tasks:
667+ for task in project.task_ids:
668 if task.user_id and (task.user_id.id not in u_ids):
669 u_ids.append(task.user_id.id)
670 calendar_id = project.resource_calendar_id and project.resource_calendar_id.id or False
671@@ -502,7 +502,7 @@
672 result = self._schedule_header(cr, uid, ids, False, context=context)
673 for project in projects:
674 result += self._schedule_project(cr, uid, project, context=context)
675- result += self.pool.get('project.task')._generate_task(cr, uid, project.tasks, ident=4, context=context)
676+ result += self.pool.get('project.task')._generate_task(cr, uid, project.task_ids, ident=4, context=context)
677
678 local_dict = {}
679 exec result in local_dict
680@@ -510,7 +510,7 @@
681
682 for project in projects:
683 project_gantt = getattr(projects_gantt, 'Project_%d' % (project.id,))
684- for task in project.tasks:
685+ for task in project.task_ids:
686 if task.stage_id and task.stage_id.fold:
687 continue
688
689
690=== modified file 'project/project_view.xml'
691--- project/project_view.xml 2013-12-24 10:29:22 +0000
692+++ project/project_view.xml 2014-02-10 06:51:31 +0000
693@@ -92,9 +92,12 @@
694 <label for="use_tasks"/>
695 </div>
696 </div>
697+ <div class="oe_right oe_button_box" name="action_buttons" groups="base.group_user">
698+ <button name="attachment_tree_view" class="oe_link" string="Documents" type="object"/>
699+ </div>
700 <div class="oe_right oe_button_box" name="buttons" groups="base.group_user">
701- <field name="tasks" widget="x2many_counter" string="Tasks" attrs="{'invisible':[('use_tasks','=', False)]}" options='{"views": [[false, "kanban"], [false, "tree"], [false, "form"], [false, "calendar"], [false, "gantt"], [false, "graph"]]}'/>
702- <button name="attachment_tree_view" string="Documents" type="object"/>
703+ <field name="task_ids" widget="x2many_counter" string="Tasks" attrs="{'invisible':[('use_tasks','=', False)]}"
704+ options='{"views": [[false, "kanban"], [false, "list"], [false, "form"], [false, "calendar"], [false, "gantt"], [false, "graph"]]}'/>
705 </div>
706 <group>
707 <group>
708
709=== modified file 'project/res_partner_view.xml'
710--- project/res_partner_view.xml 2013-10-27 12:31:04 +0000
711+++ project/res_partner_view.xml 2014-02-10 06:51:31 +0000
712@@ -10,9 +10,9 @@
713 <field name="priority" eval="50"/>
714 <field name="arch" type="xml">
715 <xpath expr="//div[@name='buttons']" position="inside">
716- <button class="oe_inline" type="action"
717- name="%(action_view_task)d"
718- string="Tasks"
719+ <field name="task_ids"
720+ string="Tasks" widget="x2many_counter" class="oe_vertical_separator"
721+ options='{"views": [[false, "kanban"], [false, "list"], [false, "form"], [false, "calendar"], [false, "gantt"], [false, "graph"]]}'
722 context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
723 groups="project.group_project_user" />
724 </xpath>
725
726=== modified file 'project/tests/test_project_flow.py'
727--- project/tests/test_project_flow.py 2013-12-06 12:57:51 +0000
728+++ project/tests/test_project_flow.py 2014-02-10 06:51:31 +0000
729@@ -67,19 +67,19 @@
730 self.project_project.set_template(cr, user_projectmanager_id, [project_pigs_id])
731 project.refresh()
732 self.assertEqual(project.state, 'template', 'project: set_template: project state should be template')
733- self.assertEqual(len(project.tasks), 0, 'project: set_template: project tasks should have been set inactive')
734+ self.assertEqual(len(project.task_ids), 0, 'project: set_template: project tasks should have been set inactive')
735
736 # Duplicate template
737 new_template_act = self.project_project.duplicate_template(cr, user_projectmanager_id, [project_pigs_id])
738 new_project = self.project_project.browse(cr, user_projectmanager_id, new_template_act['res_id'])
739 self.assertEqual(new_project.state, 'open', 'project: incorrect duplicate_template')
740- self.assertEqual(len(new_project.tasks), 2, 'project: duplicating a project template should duplicate its tasks')
741+ self.assertEqual(len(new_project.task_ids), 2, 'project: duplicating a project template should duplicate its tasks')
742
743 # Convert into real project
744 self.project_project.reset_project(cr, user_projectmanager_id, [project_pigs_id])
745 project.refresh()
746 self.assertEqual(project.state, 'open', 'project: resetted project should be in open state')
747- self.assertEqual(len(project.tasks), 2, 'project: reset_project: project tasks should have been set active')
748+ self.assertEqual(len(project.task_ids), 2, 'project: reset_project: project tasks should have been set active')
749
750 # Put as pending
751 self.project_project.set_pending(cr, user_projectmanager_id, [project_pigs_id])
752@@ -107,7 +107,7 @@
753 # Copy the project
754 new_project_id = self.project_project.copy(cr, user_projectmanager_id, project_pigs_id)
755 new_project = self.project_project.browse(cr, user_projectmanager_id, new_project_id)
756- self.assertEqual(len(new_project.tasks), 2, 'project: copied project should have copied task')
757+ self.assertEqual(len(new_project.task_ids), 2, 'project: copied project should have copied task')
758
759 # Cancel the project
760 self.project_project.set_cancel(cr, user_projectmanager_id, [project_pigs_id])
761
762=== modified file 'project_issue/project_issue.py'
763--- project_issue/project_issue.py 2013-12-02 15:09:25 +0000
764+++ project_issue/project_issue.py 2014-02-10 06:51:31 +0000
765@@ -505,8 +505,8 @@
766 states={'close': [('readonly', True)], 'cancelled': [('readonly', True)]}),
767 'issue_count': fields.function(_issue_count, type='integer', string="Unclosed Issues",
768 deprecated="This field will be removed in OpenERP v8. Use issue_ids one2many field instead."),
769- 'issue_ids': fields.one2many('project.issue', 'project_id',
770- domain=[('stage_id.fold', '=', False)])
771+ 'issue_ids': fields.one2many('project.issue', 'project_id', 'Issues',
772+ domain=[('stage_id.fold', '=', False)])
773 }
774
775 def _check_escalation(self, cr, uid, ids, context=None):
776@@ -574,5 +574,12 @@
777 self._check_create_write_values(cr, uid, vals, context=context)
778 return super(project_project, self).write(cr, uid, ids, vals, context=context)
779
780+class res_partner(osv.osv):
781+
782+ """ Inherits partner and adds Issues information in the partner form """
783+ _inherit = 'res.partner'
784+ _columns = {
785+ 'issue_ids': fields.one2many('project.issue', 'partner_id', 'Issues'),
786+ }
787
788 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
789
790=== modified file 'project_issue/project_issue_view.xml'
791--- project_issue/project_issue_view.xml 2013-11-29 09:46:10 +0000
792+++ project_issue/project_issue_view.xml 2014-02-10 06:51:31 +0000
793@@ -305,7 +305,8 @@
794 <label for="use_issues"/>
795 </xpath>
796 <xpath expr='//div[@name="buttons"]' position='inside'>
797- <button name="%(act_project_project_2_project_issue_all)d" string="Issues" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"/>
798+ <field name="issue_ids" widget="x2many_counter" class="oe_vertical_separator" string="Issues" attrs="{'invisible':[('use_issues','=', 0)]}"
799+ options='{"views": [[false, "kanban"], [false, "list"], [false, "form"], [false, "calendar"], [false, "graph"]]}'/>
800 </xpath>
801 <xpath expr='//page[@name="project_stages"]' position="attributes">
802 <attribute name="attrs">{'invisible': [('use_tasks', '=', False),('use_issues','=',False)]}</attribute>
803@@ -374,9 +375,9 @@
804 <field name="priority" eval="50"/>
805 <field name="arch" type="xml">
806 <xpath expr="//div[@name='buttons']" position="inside">
807- <button class="oe_inline" type="action" string="Issues"
808- attrs="{'invisible': [('customer', '=', False)]}"
809- name="%(action_view_issues)d"
810+ <field name="issue_ids" attrs="{'invisible': [('customer', '=', False)]}"
811+ options='{"views": [[false, "kanban"], [false, "list"], [false, "form"], [false, "calendar"], [false, "graph"]]}'
812+ widget="x2many_counter" class="oe_vertical_separator"
813 context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
814 groups="project.group_project_user"/>
815 </xpath>
816
817=== modified file 'project_long_term/project_long_term_view.xml'
818--- project_long_term/project_long_term_view.xml 2013-10-27 12:31:04 +0000
819+++ project_long_term/project_long_term_view.xml 2014-02-10 06:51:31 +0000
820@@ -102,9 +102,8 @@
821 <label for="use_phases"/>
822 </xpath>
823 <xpath expr="//div[@name='buttons']" position='inside'>
824- <button name="%(act_project_phases)d"
825- string="Phases" type="action"
826- attrs="{'invisible':[('use_phases','=', 0)]}"/>
827+ <field name="phase_ids" class="oe_vertical_separator" widget="x2many_counter" attrs="{'invisible':[('use_phases','=', 0)]}"
828+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"]]}'/>
829 </xpath>
830 </field>
831 </record>
832@@ -151,7 +150,9 @@
833 <field name="state" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/>
834 </header>
835 <sheet>
836- <button name="%(project_phase_task_list)d" string="Related Tasks" type="action" class="oe_right"/>
837+ <div class="oe_right oe_button_box">
838+ <button name="%(project_phase_task_list)d" string="Related Tasks" type="action" class="oe_link"/>
839+ </div>
840 <div class="oe_title">
841 <label for="name" class="oe_edit_only"/>
842 <h1><field name="name"/></h1>
843
844=== modified file 'project_long_term/test/task_process.yml'
845--- project_long_term/test/task_process.yml 2013-10-27 12:31:04 +0000
846+++ project_long_term/test/task_process.yml 2014-02-10 06:51:31 +0000
847@@ -13,7 +13,7 @@
848 -
849 !python {model: project.project}: |
850 prj = self.browse(cr, uid, [ref("project.project_project_1")])[0]
851- for task in prj.tasks:
852+ for task in prj.task_ids:
853 if task.stage_id and task.stage_id.fold:
854 continue
855 assert task.user_id and task.date_start and task.date_end, "Project tasks not scheduled"
856
857=== modified file 'project_timesheet/project_timesheet_view.xml'
858--- project_timesheet/project_timesheet_view.xml 2013-10-27 12:31:04 +0000
859+++ project_timesheet/project_timesheet_view.xml 2014-02-10 06:51:31 +0000
860@@ -29,8 +29,8 @@
861 <field name="use_timesheets" class="oe_inline"/>
862 <label for="use_timesheets"/>
863 </xpath>
864- <xpath expr='//div[@name="buttons"]' position="inside">
865- <button name="open_timesheets" string="Timesheets" type="object" attrs="{'invisible':[('use_timesheets','=', 0)]}"/>
866+ <xpath expr='//div[@name="action_buttons"]' position="inside">
867+ <button name="open_timesheets" string="Timesheets" class="oe_link oe_vertical_separator" type="object" attrs="{'invisible':[('use_timesheets','=', 0)]}"/>
868 </xpath>
869 </field>
870 </record>
871
872=== modified file 'purchase/partner_view.xml'
873--- purchase/partner_view.xml 2013-10-27 12:31:04 +0000
874+++ purchase/partner_view.xml 2014-02-10 06:51:31 +0000
875@@ -73,14 +73,18 @@
876 <field name="inherit_id" ref="base.view_partner_form" />
877 <field name="priority" eval="20"/>
878 <field name="arch" type="xml">
879+ <xpath expr="//div[@name='action_buttons']" position="inside">
880+ <button name="%(purchase.act_res_partner_2_supplier_invoices)d" type="action"
881+ attrs="{'invisible': [('supplier', '=', False)]}"
882+ string="Supplier Invoices" class="oe_link oe_vertical_separator"/>
883+ </xpath>
884 <xpath expr="//div[@name='buttons']" position="inside">
885- <button name="%(purchase.act_res_partner_2_purchase_order)d" type="action"
886+ <field name="purchase_order_ids"
887 string="Purchase Orders"
888+ widget="x2many_counter" class="oe_vertical_separator"
889+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"]]}'
890 attrs="{'invisible': [('supplier', '=', False)]}"
891 groups="purchase.group_purchase_user"/>
892- <button name="%(purchase.act_res_partner_2_supplier_invoices)d" type="action"
893- attrs="{'invisible': [('supplier', '=', False)]}"
894- string="Supplier Invoices"/>
895 </xpath>
896 </field>
897 </record>
898
899=== modified file 'purchase/purchase.py'
900--- purchase/purchase.py 2014-01-29 19:08:34 +0000
901+++ purchase/purchase.py 2014-02-10 06:51:31 +0000
902@@ -1323,4 +1323,9 @@
903 readonly=True),
904 }
905
906+class product_product(osv.Model):
907+ _inherit = "product.product"
908+ _columns = {
909+ 'purchase_ids': fields.one2many('purchase.order', 'product_id', 'Purchases'),
910+ }
911 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
912
913=== modified file 'purchase/purchase_view.xml'
914--- purchase/purchase_view.xml 2014-01-29 19:08:34 +0000
915+++ purchase/purchase_view.xml 2014-02-10 06:51:31 +0000
916@@ -631,7 +631,9 @@
917 <field name="inherit_id" ref="account.product_normal_form_view"/>
918 <field name="arch" type="xml">
919 <xpath expr="//div[@name='buttons']" position="inside">
920- <button string="Purchases" name="%(action_purchase_line_product_tree)d" type="action" groups="purchase.group_purchase_user"/>
921+ <field name="purchase_ids" class="oe_vertical_separator" widget="x2many_counter"
922+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"], [false, "graph"]]}'
923+ groups="purchase.group_purchase_user"/>
924 </xpath>
925 <field name="property_account_expense" position="replace" >
926 <field name="property_account_expense" domain="[('type','&lt;&gt;','view'),('type','&lt;&gt;','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" groups="account.group_account_user"/>
927
928=== modified file 'purchase/stock_view.xml'
929--- purchase/stock_view.xml 2013-10-27 12:31:04 +0000
930+++ purchase/stock_view.xml 2014-02-10 06:51:31 +0000
931@@ -46,9 +46,9 @@
932 <xpath expr="//div[contains(@class, 'oe_title')]" position="before">
933 <div class="oe_right oe_button_box" name="buttons">
934 <button type="object"
935- name="view_picking"
936+ name="view_picking" class="oe_link"
937 string="Incoming Shipments" states="approved"/>
938- <button type="object" name="invoice_open"
939+ <button type="object" name="invoice_open" class="oe_link oe_vertical_separator"
940 string="Invoices" attrs="{'invisible': [('state', 'in', ['draft','sent'])]}"/>
941 </div>
942 </xpath>
943
944=== modified file 'purchase_requisition/purchase_requisition_view.xml'
945--- purchase_requisition/purchase_requisition_view.xml 2013-10-27 12:31:04 +0000
946+++ purchase_requisition/purchase_requisition_view.xml 2014-02-10 06:51:31 +0000
947@@ -77,7 +77,7 @@
948 </field>
949 <div class="oe_right oe_button_box" style="margin-top: 10px">
950 <button name="%(action_purchase_requisition_partner)d" type="action"
951- string="Request a Quotation" icon="gtk-execute"
952+ string="Request a Quotation" class="oe_link"
953 attrs="{'invisible': [('line_ids','=',False),('state', 'not in', ('in_progress'))]}"/>
954 </div>
955 <separator string="Quotations"/>
956
957=== modified file 'sale/res_partner_view.xml'
958--- sale/res_partner_view.xml 2013-10-27 12:31:04 +0000
959+++ sale/res_partner_view.xml 2014-02-10 06:51:31 +0000
960@@ -48,9 +48,10 @@
961 <field name="priority" eval="20"/>
962 <field name="arch" type="xml">
963 <xpath expr="//div[@name='buttons']" position="inside">
964- <button name="%(sale.act_res_partner_2_sale_order)d" type="action"
965- string="Quotations and Sales"
966+ <field name="sale_order_ids"
967+ string="Sales" widget="x2many_counter" class="oe_vertical_separator"
968 attrs="{'invisible': [('customer', '=', False)]}"
969+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"], [false, "graph"]]}'
970 groups="base.group_sale_salesman"/>
971 </xpath>
972 </field>
973
974=== modified file 'sale/sale.py'
975--- sale/sale.py 2014-01-16 10:39:10 +0000
976+++ sale/sale.py 2014-02-10 06:51:31 +0000
977@@ -1029,4 +1029,10 @@
978 workflow.trg_validate(uid, 'account.invoice', id, 'invoice_cancel', cr)
979 return super(account_invoice, self).unlink(cr, uid, ids, context=context)
980
981+class product_product(osv.Model):
982+ _inherit = "product.product"
983+ _columns = {
984+ 'sale_ids': fields.one2many('sale.order.line', 'product_id', 'Sales'),
985+ }
986+
987 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
988
989=== modified file 'sale/sale_view.xml'
990--- sale/sale_view.xml 2014-02-05 16:03:47 +0000
991+++ sale/sale_view.xml 2014-02-10 06:51:31 +0000
992@@ -499,7 +499,9 @@
993 <field name="inherit_id" ref="product.product_normal_form_view"/>
994 <field name="arch" type="xml">
995 <xpath expr="//div[@name='buttons']" position="inside">
996- <button string="Sales" name="%(action_order_line_product_tree)d" type="action" groups="base.group_sale_salesman"/>
997+ <field name="sale_ids" class="oe_vertical_separator" widget="x2many_counter"
998+ options='{"views": [[false, "list"], [false, "form"]]}'
999+ type="action" groups="base.group_sale_salesman"/>
1000 </xpath>
1001 </field>
1002 </record>
1003
1004=== modified file 'stock/product.py'
1005--- stock/product.py 2014-01-29 18:47:03 +0000
1006+++ stock/product.py 2014-02-10 06:51:31 +0000
1007@@ -421,6 +421,7 @@
1008 help="If real-time valuation is enabled for a product, the system will automatically write journal entries corresponding to stock moves." \
1009 "The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products."
1010 , required=True),
1011+ 'move_ids': fields.one2many('stock.move', 'product_id', 'Moves'),
1012 }
1013
1014 _defaults = {
1015
1016=== modified file 'stock/product_view.xml'
1017--- stock/product_view.xml 2014-01-28 11:18:40 +0000
1018+++ stock/product_view.xml 2014-02-10 06:51:31 +0000
1019@@ -72,9 +72,14 @@
1020 <field name="model">product.product</field>
1021 <field name="inherit_id" ref="product.product_normal_form_view"/>
1022 <field name="arch" type="xml">
1023+ <xpath expr="//div[@name='action_buttons']" position="inside">
1024+ <button string="Inventory" name="%(action_product_location_tree)d" class="oe_link oe_vertical_separator"
1025+ type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_locations"/>
1026+ </xpath>
1027 <xpath expr="//div[@name='buttons']" position="inside">
1028- <button string="Inventory" name="%(action_product_location_tree)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_locations"/>
1029- <button string="Moves" name= "%(act_product_stock_move_open)d" type="action" attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_stock_user"/>
1030+ <field name= "move_ids" class="oe_vertical_separator" widget="x2many_counter"
1031+ options='{"views": [[false, "list"], [false, "form"], [false, "calendar"]]}'
1032+ attrs="{'invisible':[('type', '=', 'service')]}" groups="stock.group_stock_user"/>
1033 </xpath>
1034 <group name="procurement_uom" position="before">
1035 <group name="delay" string="Delays">
1036
1037=== modified file 'stock/stock_view.xml'
1038--- stock/stock_view.xml 2014-01-08 09:36:59 +0000
1039+++ stock/stock_view.xml 2014-02-10 06:51:31 +0000
1040@@ -120,7 +120,7 @@
1041 </header>
1042 <sheet>
1043 <div class="oe_right oe_button_box">
1044- <button name="%(action_view_stock_fill_inventory)d" string="Fill Inventory" states="draft,confirm" type="action" />
1045+ <button name="%(action_view_stock_fill_inventory)d" class="oe_link" string="Fill Inventory" states="draft,confirm" type="action" />
1046 </div>
1047 <group>
1048 <group>
1049@@ -343,9 +343,10 @@
1050 <field name="model">stock.production.lot</field>
1051 <field name="arch" type="xml">
1052 <form string="Serial Number" version="7.0">
1053+ <sheet>
1054 <div class="oe_button_box oe_right">
1055- <button name="action_traceability" string="Upstream Traceability" type="object" context="{'type': 'move_history_ids2', 'field': 'prodlot_id'}"/>
1056- <button name="action_traceability" string="Downstream Traceability" type="object" context="{'type': 'move_history_ids', 'field': 'prodlot_id'}"/>
1057+ <button name="action_traceability" string="Upstream Traceability" class="oe_link" type="object" context="{'type': 'move_history_ids2', 'field': 'prodlot_id'}"/>
1058+ <button name="action_traceability" string="Downstream Traceability" class="oe_link" type="object" context="{'type': 'move_history_ids', 'field': 'prodlot_id'}"/>
1059 </div>
1060 <div class="oe_title">
1061 <label for="name" class="oe_edit_only"/>
1062@@ -386,6 +387,7 @@
1063 </field>
1064 </page>
1065 </notebook>
1066+ </sheet>
1067 </form>
1068 </field>
1069 </record>
1070
1071=== modified file 'survey/survey_view.xml'
1072--- survey/survey_view.xml 2013-11-27 15:32:57 +0000
1073+++ survey/survey_view.xml 2014-02-10 06:51:31 +0000
1074@@ -28,12 +28,11 @@
1075 </header>
1076 <sheet>
1077 <div class="oe_button_box oe_right">
1078- <button name="test_survey" states="open,draft,close,cancel" string="Test Survey" type="object" icon="gtk-new" context="{'survey_id': active_id}" attrs="{'invisible':[('id','=',0)]}"/>
1079- <button name="fill_survey" states="open" string="Answer Survey" type="object" icon="gtk-execute" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/>
1080- <button name="action_print_survey" states="open,draft,close,cancel" string="Print Answer" type="object"/>
1081- <button name="edit_survey" states="open,draft,close,cancel"
1082+ <button name="test_survey" class="oe_link" states="open,draft,close,cancel" string="Test Survey" type="object" context="{'survey_id': active_id}" attrs="{'invisible':[('id','=',0)]}"/>
1083+ <button name="fill_survey" class="oe_link oe_vertical_separator" states="open" string="Answer Survey" type="object" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/>
1084+ <button name="action_print_survey" class="oe_link oe_vertical_separator" states="open,draft,close,cancel" string="Print Answer" type="object"/>
1085+ <button name="edit_survey" class="oe_link oe_vertical_separator" states="open,draft,close,cancel"
1086 string="Edit Survey" type="object" context="{'active':True,'edit' : True,'survey_id': active_id}"/>
1087-
1088 </div>
1089 <div class="oe_title">
1090 <label for="title" class="oe_edit_only"/>

Subscribers

People subscribed via source and target branches

to all changes: