From df107e19ec3e51827721f96557dd97927c23126d Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Mon, 3 Sep 2012 14:16:25 +0530 Subject: [PATCH 01/80] [FIX] pass context in search and name_get method inside name_search. bzr revid: tpa@tinyerp.com-20120903084625-nnkl9k2ljaauv4bh --- openerp/addons/base/res/res_users.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index ca45f03258c..012ab8a116a 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -310,10 +310,10 @@ class res_users(osv.osv): context={} ids = [] if name: - ids = self.search(cr, user, [('login','=',name)]+ args, limit=limit) + ids = self.search(cr, user, [('login','=',name)]+ args, limit=limit, context=context) if not ids: - ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit) - return self.name_get(cr, user, ids) + ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit, context=context) + return self.name_get(cr, user, ids, context=context) def copy(self, cr, uid, id, default=None, context=None): user2copy = self.read(cr, uid, [id], ['login','name'])[0] From e6178297dfea0f56c887467f0c5486c06243719f Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Tue, 18 Sep 2012 10:40:18 +0530 Subject: [PATCH 02/80] [IMP]all : set appropriate method on action for mark read as well as unread for fix the issue of read and unread bzr revid: mma@tinyerp.com-20120918051018-ghdv7tk80g5pqlq6 --- addons/base_calendar/crm_meeting_view.xml | 4 ++-- addons/crm/crm_lead_view.xml | 4 ++-- addons/crm/crm_phonecall_view.xml | 4 ++-- addons/event/event_view.xml | 8 ++++---- addons/hr_holidays/hr_holidays_view.xml | 4 ++-- addons/hr_recruitment/hr_recruitment_view.xml | 4 ++-- addons/project/project_view.xml | 8 ++++---- addons/project_issue/project_issue_view.xml | 4 ++-- addons/purchase/purchase_view.xml | 4 ++-- addons/sale/sale_view.xml | 4 ++-- 10 files changed, 24 insertions(+), 24 deletions(-) diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml index 928f8d94d5c..50ea749bff1 100644 --- a/addons/base_calendar/crm_meeting_view.xml +++ b/addons/base_calendar/crm_meeting_view.xml @@ -10,7 +10,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_crm_meeting_read @@ -28,7 +28,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_crm_meeting_unread diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index f018a355579..bca64f863cf 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -9,7 +9,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_crm_lead_unread @@ -27,7 +27,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_crm_lead_read diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml index 2f885e09b61..4b6352bb86e 100644 --- a/addons/crm/crm_phonecall_view.xml +++ b/addons/crm/crm_phonecall_view.xml @@ -9,7 +9,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_crm_phonecall_unread @@ -27,7 +27,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_crm_phonecall_read diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index e2ff2e67e87..36bdbef75b2 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -65,7 +65,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_event_event_unread @@ -83,7 +83,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_event_event_read @@ -387,7 +387,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_event_registration_unread @@ -405,7 +405,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_event_registration_read diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 5a2e0603b88..92ebebc5d5c 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -8,7 +8,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_holidays_unread @@ -26,7 +26,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_holidays_read diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 098a8aec210..838bda35db7 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -42,7 +42,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_project_unread @@ -60,7 +60,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_project_read diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index ff8ac943a67..466472d7324 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -27,7 +27,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_project_unread @@ -45,7 +45,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_project_read @@ -354,7 +354,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_project_task_unread @@ -372,7 +372,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_project_task_read diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index fea22c519a8..1683256673b 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -11,7 +11,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_project_issue_unread @@ -29,7 +29,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_project_issue_read diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 53f27245e7e..e020092eb40 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -118,7 +118,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_purchase_order_unread @@ -136,7 +136,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_purchase_order_read diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 651454ef73d..0c71a1961b4 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -77,7 +77,7 @@ ir.actions.server code - self.message_check_and_set_unread(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_unread(cr, uid, context.get('active_ids'), context=context) action_sale_order_unread @@ -95,7 +95,7 @@ ir.actions.server code - self.message_check_and_set_read(cr, uid, context.get('active_ids'), context=context) + self.message_mark_as_read(cr, uid, context.get('active_ids'), context=context) action_sale_order_read From 98681b7a12787743b4d22f8e641f211791c2387c Mon Sep 17 00:00:00 2001 From: "Amit (OpenERP)" Date: Fri, 28 Sep 2012 15:54:10 +0530 Subject: [PATCH 03/80] [FIX] Add company rule for res_partner_bank object lp bug: https://launchpad.net/bugs/1057924 fixed bzr revid: amp@tinyerp.com-20120928102410-ir8xwhmeqntxlcr9 --- openerp/addons/base/security/base_security.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openerp/addons/base/security/base_security.xml b/openerp/addons/base/security/base_security.xml index 3cb8f7044b2..aeb2ab153c6 100644 --- a/openerp/addons/base/security/base_security.xml +++ b/openerp/addons/base/security/base_security.xml @@ -83,6 +83,13 @@ [('user_id','=',user.id)] + + Partner bank company rule + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + From fd6da42e301f8061fbc9657a2d76dc664e7ca9d0 Mon Sep 17 00:00:00 2001 From: "Divyesh Makwana (Open ERP)" Date: Wed, 3 Oct 2012 16:53:19 +0530 Subject: [PATCH 04/80] [IMP] project_timesheet : Click on timesheet button from a new project. You will get this 'Record your timesheets for the project '%s''.Instead of name of the project. bzr revid: mdi@tinyerp.com-20121003112319-ancbub1h7u5mtylk --- addons/project_timesheet/project_timesheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py index 4036217b886..87699401e09 100644 --- a/addons/project_timesheet/project_timesheet.py +++ b/addons/project_timesheet/project_timesheet.py @@ -50,7 +50,7 @@ class project_project(osv.osv): 'search_default_account_id': [project.analytic_account_id.id], 'default_account_id': project.analytic_account_id.id, } - help = _("""

Record your timesheets for the project '%s'.

""") + help = _("""

Record your timesheets for the project '%s'.

""") % (project.name,) try: if project.to_invoice and project.partner_id: help+= _("""

Timesheets on this project may be invoiced to %s, according to the terms defined in the contract.

""" ) % (project.partner_id.name,) From 6401dc03d76021030c9b686cb1ea2e4fd990a40a Mon Sep 17 00:00:00 2001 From: "Divyesh Makwana (Open ERP)" Date: Wed, 3 Oct 2012 17:39:55 +0530 Subject: [PATCH 05/80] [IMP] project : 'Task Stages' tab should be visible only if 'tasks' is checked. bzr revid: mdi@tinyerp.com-20121003120955-vhxaey5fdhzkk89q --- addons/project/project_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index bd63eec84c5..442efd4660e 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -144,7 +144,7 @@ - + From c8a093941d6e8da9223def633354cd86b82df6a5 Mon Sep 17 00:00:00 2001 From: "Divyesh Makwana (Open ERP)" Date: Wed, 3 Oct 2012 17:54:46 +0530 Subject: [PATCH 06/80] [IMP] project : Added 'date_start' on project form view. bzr revid: mdi@tinyerp.com-20121003122446-e4iwfe3ctrzq2yt5 --- addons/project/project_view.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 442efd4660e..b07fb17614f 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -135,6 +135,7 @@ + From 64229a2a93a25c57ddc4ed421827c6a06e72675d Mon Sep 17 00:00:00 2001 From: Vijaykumar Baladaniya Date: Thu, 4 Oct 2012 12:13:47 +0530 Subject: [PATCH 07/80] Employee create time, not have a default email address. bzr revid: vba@tinyerp.com-20121004064347-b6oiab179q4smhs1 --- addons/hr/hr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hr/hr.py b/addons/hr/hr.py index eafe5d09844..d2214f5e14f 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -231,7 +231,7 @@ class hr_employee(osv.osv): def onchange_address_id(self, cr, uid, ids, address, context=None): if address: address = self.pool.get('res.partner').browse(cr, uid, address, context=context) - return {'value': {'work_email': address.email, 'work_phone': address.phone, 'mobile_phone': address.mobile}} + return {'value': {'work_phone': address.phone, 'mobile_phone': address.mobile}} return {'value': {}} def onchange_company(self, cr, uid, ids, company, context=None): From 1c243a435f0256bddf7dabd8a087b8c881ed9e38 Mon Sep 17 00:00:00 2001 From: Vijaykumar Baladaniya Date: Thu, 4 Oct 2012 13:03:32 +0530 Subject: [PATCH 08/80] View improvement of autometed action form. bzr revid: vba@tinyerp.com-20121004073332-1bdvfmsc18ev8r1e --- addons/base_action_rule/base_action_rule.py | 2 +- .../base_action_rule_view.xml | 27 +++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 7e9bbacab13..fa606fdeefc 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -117,7 +117,7 @@ this if you want the rule to send a reminder by email to the user."), the rule to mark CC(mail to any other person defined in actions)."), 'act_mail_to_email': fields.char('Mail to these Emails', size=128, \ help="Email-id of the persons whom mail is to be sent"), - 'act_mail_body': fields.text('Mail body', help="Content of mail"), + 'act_mail_body': fields.text('Mail body', translate=True, help="Content of mail"), 'regex_name': fields.char('Regex on Resource Name', size=128, help="Regular expression for matching name of the resource\ \ne.g.: 'urgent.*' will search for records having name starting with the string 'urgent'\ \nNote: This is case sensitive search."), diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index 0d268438a41..64d65434cfc 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -56,21 +56,20 @@ - - - - - - - + + + + + + + + + + + + + - - - - - - - From b273232b71865369f4be306e496b471423b0e299 Mon Sep 17 00:00:00 2001 From: "Divyesh Makwana (Open ERP)" Date: Thu, 4 Oct 2012 17:10:21 +0530 Subject: [PATCH 09/80] [FIX] project_timesheet : Fix the integrity error when we embeded 'Timesheet Line' created through project. bzr revid: mdi@tinyerp.com-20121004114021-rgbzhr84uditlhhj --- addons/project_timesheet/project_timesheet.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py index 41478d60210..6125d59c621 100644 --- a/addons/project_timesheet/project_timesheet.py +++ b/addons/project_timesheet/project_timesheet.py @@ -46,6 +46,9 @@ class project_project(osv.osv): def open_timesheets(self, cr, uid, ids, context=None): """ open Timesheets view """ + mod_obj = self.pool.get('ir.model.data') + act_obj = self.pool.get('ir.actions.act_window') + project = self.browse(cr, uid, ids[0], context) view_context = { 'search_default_account_id': [project.analytic_account_id.id], @@ -59,16 +62,13 @@ class project_project(osv.osv): # if the user do not have access rights on the partner pass - return { - 'type': 'ir.actions.act_window', - 'name': _('Timesheets'), - 'res_model': 'hr.analytic.timesheet', - 'view_type': 'form', - 'view_mode': 'tree,form', - 'context': view_context, - 'nodestroy': True, - 'help': help - } + result = mod_obj.get_object_reference(cr, uid, 'hr_timesheet', 'act_hr_timesheet_line_evry1_all_form') + id = result and result[1] or False + result = act_obj.read(cr, uid, [id], context=context)[0] + result['name'] = _('Timesheets') + result['context'] = view_context + result['help'] = help + return result project_project() From b33ca4139a77a87de36e6a20e1682c1fd80148f1 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Thu, 4 Oct 2012 17:37:19 +0530 Subject: [PATCH 10/80] [IMP] base_action_rule: reminder by email: remove fields related to remainder. for that we can configure email server action watchers emails: remove fields related to CC,TO. added followers to set as a followers of documents improve view of action rule bzr revid: hmo@tinyerp.com-20121004120719-5btx7h1jp2398jra --- addons/base_action_rule/base_action_rule.py | 223 +++--------------- .../base_action_rule_view.xml | 116 ++++----- addons/base_status/base_stage.py | 40 +--- addons/crm/crm_action_rule.py | 40 +--- addons/crm/crm_action_rule_view.xml | 50 +--- 5 files changed, 88 insertions(+), 381 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index fa606fdeefc..cb2239f76a7 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -19,15 +19,16 @@ # ############################################################################## -from osv import fields, osv, orm -from tools.translate import _ from datetime import datetime from datetime import timedelta +import re +import time + +from osv import fields, osv, orm +from tools.translate import _ from tools.safe_eval import safe_eval from tools import ustr import pooler -import re -import time import tools @@ -48,32 +49,20 @@ class base_action_rule(osv.osv): _description = 'Action Rules' def _state_get(self, cr, uid, context=None): - """ Get State - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param context: A standard dictionary for contextual values """ + """ Get State """ return self.state_get(cr, uid, context=context) def state_get(self, cr, uid, context=None): - """ Get State - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param context: A standard dictionary for contextual values """ + """ Get State """ return [('', '')] def priority_get(self, cr, uid, context=None): - """ Get Priority - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param context: A standard dictionary for contextual values """ + """ Get Priority """ return [('', '')] _columns = { 'name': fields.char('Rule Name', size=64, required=True), - 'model_id': fields.many2one('ir.model', 'Object', required=True), + 'model_id': fields.many2one('ir.model', 'Related Document Model', required=True, domain=[('osv_memory','=', False)]), 'create_date': fields.datetime('Create Date', readonly=1), 'active': fields.boolean('Active', help="If the active field is set to False,\ it will allow you to hide the rule without removing it."), @@ -98,35 +87,14 @@ trigger date, like sending a reminder 15 minutes before a meeting."), 'trg_state_from': fields.selection(_state_get, 'Status', size=16), 'trg_state_to': fields.selection(_state_get, 'Button Pressed', size=16), - 'act_method': fields.char('Call Object Method', size=64), 'act_user_id': fields.many2one('res.users', 'Set Responsible to'), 'act_state': fields.selection(_state_get, 'Set State to', size=16), - 'act_email_cc': fields.char('Add Watchers (Cc)', size=250, help="\ -These people will receive a copy of the future communication between partner \ -and users by email"), - 'act_remind_partner': fields.boolean('Remind Partner', help="Check \ -this if you want the rule to send a reminder by email to the partner."), - 'act_remind_user': fields.boolean('Remind Responsible', help="Check \ -this if you want the rule to send a reminder by email to the user."), - 'act_reply_to': fields.char('Reply-To', size=64), - 'act_remind_attach': fields.boolean('Remind with Attachment', help="Check this if you want that all documents attached to the object be attached to the reminder email sent."), - 'act_mail_to_user': fields.boolean('Mail to Responsible', help="Check\ - this if you want the rule to send an email to the responsible person."), - 'act_mail_to_watchers': fields.boolean('Mail to Watchers (CC)', - help="Check this if you want \ -the rule to mark CC(mail to any other person defined in actions)."), - 'act_mail_to_email': fields.char('Mail to these Emails', size=128, \ - help="Email-id of the persons whom mail is to be sent"), - 'act_mail_body': fields.text('Mail body', translate=True, help="Content of mail"), + 'act_followers': fields.many2many("res.partner", string="Set Followers"), 'regex_name': fields.char('Regex on Resource Name', size=128, help="Regular expression for matching name of the resource\ \ne.g.: 'urgent.*' will search for records having name starting with the string 'urgent'\ \nNote: This is case sensitive search."), 'server_action_id': fields.many2one('ir.actions.server', 'Server Action', help="Describes the action name.\neg:on which object which action to be taken on basis of which condition"), - 'filter_id':fields.many2one('ir.filters', 'Filter', required=False), - 'act_email_from' : fields.char('Email From', size=64, required=False, - help="Use a python expression to specify the right field on which one than we will use for the 'From' field of the header"), - 'act_email_to' : fields.char('Email To', size=64, required=False, - help="Use a python expression to specify the right field on which one than we will use for the 'To' field of the header"), + 'filter_id':fields.many2one('ir.filters', 'Filter', required=False), #TODO: set domain [('model_id','=',model)] 'last_run': fields.datetime('Last Run', readonly=1), } @@ -134,42 +102,24 @@ the rule to mark CC(mail to any other person defined in actions)."), 'active': lambda *a: True, 'trg_date_type': lambda *a: 'none', 'trg_date_range_type': lambda *a: 'day', - 'act_mail_to_user': lambda *a: 0, - 'act_remind_partner': lambda *a: 0, - 'act_remind_user': lambda *a: 0, - 'act_mail_to_watchers': lambda *a: 0, } _order = 'sequence' - def onchange_model_id(self, cr, uid, ids, name): - #This is not a good solution as it will affect the domain only on onchange - res = {'domain':{'filter_id':[]}} - if name: - model_name = self.pool.get('ir.model').read(cr, uid, [name], ['model']) - if model_name: - mod_name = model_name[0]['model'] - res['domain'] = {'filter_id': [('model_id','=',mod_name)]} - else: - res['value'] = {'filter_id':False} - return res def post_action(self, cr, uid, ids, model, context=None): # Searching for action rules cr.execute("SELECT model.model, rule.id FROM base_action_rule rule \ LEFT JOIN ir_model model on (model.id = rule.model_id) \ - WHERE active") + WHERE active and model = %%s", model) res = cr.fetchall() # Check if any rule matching with current object for obj_name, rule_id in res: - if not (model == obj_name): - continue # TODO add this condition in the WHERE clause above. - else: - obj = self.pool.get(obj_name) - # If the rule doesn't involve a time condition, run it immediately - # Otherwise we let the scheduler run the action - if self.browse(cr, uid, rule_id, context=context).trg_date_type == 'none': - self._action(cr, uid, [rule_id], obj.browse(cr, uid, ids, context=context), context=context) + obj = self.pool.get(obj_name) + # If the rule doesn't involve a time condition, run it immediately + # Otherwise we let the scheduler run the action + if self.browse(cr, uid, rule_id, context=context).trg_date_type == 'none': + self._action(cr, uid, [rule_id], obj.browse(cr, uid, ids, context=context), context=context) return True def _create(self, old_create, model, context=None): @@ -279,58 +229,8 @@ the rule to mark CC(mail to any other person defined in actions)."), rule_pool.write(cr, uid, [rule.id], {'last_run': now}, context=context) - def format_body(self, body): - """ Foramat Action rule's body - @param self: The object pointer """ - return body and tools.ustr(body) or '' - - def format_mail(self, obj, body): - data = { - 'object_id': obj.id, - 'object_subject': hasattr(obj, 'name') and obj.name or False, - 'object_date': hasattr(obj, 'date') and obj.date or False, - 'object_description': hasattr(obj, 'description') and obj.description or False, - 'object_user': hasattr(obj, 'user_id') and (obj.user_id and obj.user_id.name) or '/', - 'object_user_email': hasattr(obj, 'user_id') and (obj.user_id and \ - obj.user_id.email) or '/', - 'object_user_phone': hasattr(obj, 'partner_address_id') and (obj.partner_address_id and \ - obj.partner_address_id.phone) or '/', - 'partner': hasattr(obj, 'partner_id') and (obj.partner_id and obj.partner_id.name) or '/', - 'partner_email': hasattr(obj, 'partner_address_id') and (obj.partner_address_id and\ - obj.partner_address_id.email) or '/', - } - return self.format_body(body % data) - - def email_send(self, cr, uid, obj, emails, body, emailfrom=None, context=None): - if not emailfrom: - emailfrom = tools.config.get('email_from') - body = self.format_mail(obj, body) - if not emailfrom and hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email: - emailfrom = obj.user_id.email - emailfrom = tools.ustr(emailfrom) - reply_to = emailfrom - if not emailfrom: - raise osv.except_osv(_('Error!'), - _("Missing default email address or missing email on responsible user")) - return self.pool.get('mail.mail').create(cr, uid, - { 'email_from': emailfrom, - 'email_to': emails.join(','), - 'reply_to': reply_to, - 'state': 'outgoing', - 'subject': '[%d] %s' % (obj.id, tools.ustr(obj.name)), - 'body_html': '
%s
' % body, - 'res_id': obj.id, - 'model': obj._table_name, - 'auto_delete': True - }, context=context) - - def do_check(self, cr, uid, action, obj, context=None): - """ check Action - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param context: A standard dictionary for contextual values """ + """ check Action """ if context is None: context = {} ok = True @@ -373,79 +273,32 @@ the rule to mark CC(mail to any other person defined in actions)."), return ok def do_action(self, cr, uid, action, model_obj, obj, context=None): - """ Do Action - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param action: pass action - @param model_obj: pass Model object - @param context: A standard dictionary for contextual values """ + """ Do Action """ if context is None: context = {} if action.server_action_id: context.update({'active_id':obj.id, 'active_ids':[obj.id]}) self.pool.get('ir.actions.server').run(cr, uid, [action.server_action_id.id], context) - write = {} + write = {} if hasattr(obj, 'user_id') and action.act_user_id: - obj.user_id = action.act_user_id write['user_id'] = action.act_user_id.id if hasattr(obj, 'date_action_last'): write['date_action_last'] = time.strftime('%Y-%m-%d %H:%M:%S') if hasattr(obj, 'state') and action.act_state: - obj.state = action.act_state write['state'] = action.act_state - - if hasattr(obj, 'categ_id') and action.act_categ_id: - obj.categ_id = action.act_categ_id - write['categ_id'] = action.act_categ_id.id - + model_obj.write(cr, uid, [obj.id], write, context) - - if hasattr(model_obj, 'remind_user') and action.act_remind_user: - model_obj.remind_user(cr, uid, [obj.id], context, attach=action.act_remind_attach) - if hasattr(model_obj, 'remind_partner') and action.act_remind_partner: - model_obj.remind_partner(cr, uid, [obj.id], context, attach=action.act_remind_attach) - if action.act_method: - getattr(model_obj, 'act_method')(cr, uid, [obj.id], action, context) - - emails = [] - if hasattr(obj, 'user_id') and action.act_mail_to_user: - if obj.user_id: - emails.append(obj.user_id.email) - - if action.act_mail_to_watchers: - emails += (action.act_email_cc or '').split(',') - if action.act_mail_to_email: - emails += (action.act_mail_to_email or '').split(',') - - locals_for_emails = { - 'user' : self.pool.get('res.users').browse(cr, uid, uid, context=context), - 'obj' : obj, - } - - if action.act_email_to: - emails.append(safe_eval(action.act_email_to, {}, locals_for_emails)) - - emails = filter(None, emails) - if len(emails) and action.act_mail_body: - emails = list(set(emails)) - email_from = safe_eval(action.act_email_from, {}, locals_for_emails) - emails = tools.email_split(','.join(filter(None, emails))) - email_froms = tools.email_split(email_from) - if email_froms: - self.email_send(cr, uid, obj, emails, action.act_mail_body, emailfrom=email_froms[0]) + if hasattr(obj, 'state') and hasattr(obj, 'message_post') and action.act_state: + model_obj.message_post(cr, uid, [obj], _(action.act_state), context=context) + + if hasattr(obj, 'message_subscribe') and action.act_followers: + model_obj.message_subscribe(cr, uid, [obj.id], [x.id for x in action.act_followers], context=context) return True def _action(self, cr, uid, ids, objects, scrit=None, context=None): - """ Do Action - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of Basic Action Rule’s IDs, - @param objects: pass objects - @param context: A standard dictionary for contextual values """ + """ Do Action """ if context is None: context = {} @@ -462,28 +315,6 @@ the rule to mark CC(mail to any other person defined in actions)."), context.update({'action': False}) return True - def _check_mail(self, cr, uid, ids, context=None): - """ Check Mail - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of Action Rule’s IDs - @param context: A standard dictionary for contextual values """ - - empty = orm.browse_null() - rule_obj = self.pool.get('base.action.rule') - for rule in self.browse(cr, uid, ids, context=context): - if rule.act_mail_body: - try: - rule_obj.format_mail(empty, rule.act_mail_body) - except (ValueError, KeyError, TypeError): - return False - return True - - _constraints = [ - (_check_mail, 'Error ! The mail is not well formated.', ['act_mail_body']), - ] - base_action_rule() diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index 64d65434cfc..b35818ee8d9 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -12,81 +12,53 @@ base.action.rule
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +
diff --git a/addons/base_status/base_stage.py b/addons/base_status/base_stage.py index 617af125215..999da23c560 100644 --- a/addons/base_status/base_stage.py +++ b/addons/base_status/base_stage.py @@ -302,50 +302,14 @@ class base_stage(object): rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])], context=context) return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context) - def remind_partner(self, cr, uid, ids, context=None, attach=False): - return self.remind_user(cr, uid, ids, context, attach, - destination=False) - - def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True): - if hasattr(self, 'message_post'): - for case in self.browse(cr, uid, ids, context=context): - if destination: - recipient_id = case.user_id.partner_id.id - else: - if not case.email_from: - return False - recipient_id = self.pool.get('res.partner').find_or_create(cr, uid, case.email_from, context=context) - - body = case.description or "" - for message in case.message_ids: - if message.type == 'email' and message.body: - body = message.body - break - body = self.format_body(body) - attach_to_send = {} - if attach: - attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', case.id)]) - attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname', 'datas']) - attach_to_send = dict(map(lambda x: (x['datas_fname'], x['datas'].decode('base64')), attach_to_send)) - - subject = "Reminder: [%s] %s" % (case.id, case.name) - self.message_post(cr, uid, case.id, body=body, - subject=subject, attachments=attach_to_send, - partner_ids=[recipient_id], context=context) - return True - + def _check(self, cr, uid, ids=False, context=None): """ Function called by the scheduler to process cases for date actions. Must be overriden by inheriting classes. """ return True - def format_body(self, body): - return self.pool.get('base.action.rule').format_body(body) - - def format_mail(self, obj, body): - return self.pool.get('base.action.rule').format_mail(obj, body) - + # ****************************** # Notifications # ****************************** diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py index 8b1ba655afc..49af2f74eeb 100644 --- a/addons/crm/crm_action_rule.py +++ b/addons/crm/crm_action_rule.py @@ -41,24 +41,15 @@ class base_action_rule(osv.osv): 'regex_history' : fields.char('Regular Expression on Case History', size=128), 'act_section_id': fields.many2one('crm.case.section', 'Set Team to'), 'act_categ_id': fields.many2one('crm.case.categ', 'Set Category to'), - 'act_mail_to_partner': fields.boolean('Mail to Partner', - help="Check this if you want the rule to send an email to the partner."), } - def email_send(self, cr, uid, obj, emails, body, emailfrom=tools.config.get('email_from', False), context=None): - mail_id = super(base_action_rule, self).email_send(cr, uid, obj, emails, body, emailfrom=emailfrom, context=context) - if mail_id and hasattr(obj, 'section_id') and obj.section_id and obj.section_id.alias_id: - reply_to = obj.section_id.alias_id.name_get()[0][1] - self.pool.get('mail.mail').write(cr, uid, [mail_id], {'reply_to': reply_to}, context=context) - return mail_id - def do_check(self, cr, uid, action, obj, context=None): ok = super(base_action_rule, self).do_check(cr, uid, action, obj, context=context) if hasattr(obj, 'section_id'): ok = ok and (not action.trg_section_id or action.trg_section_id.id == obj.section_id.id) - if hasattr(obj, 'categ_id'): - ok = ok and (not action.trg_categ_id or action.trg_categ_id.id == obj.categ_id.id) + if hasattr(obj, 'categ_ids'): + ok = ok and (not action.trg_categ_id or action.trg_categ_id.id in [x.id for x in obj.categ_ids]) #Cheking for history regex = action.regex_history @@ -81,35 +72,16 @@ class base_action_rule(osv.osv): return ok def do_action(self, cr, uid, action, model_obj, obj, context=None): + res = super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context) write = {} if hasattr(action, 'act_section_id') and action.act_section_id: - obj.section_id = action.act_section_id write['section_id'] = action.act_section_id.id - if hasattr(obj, 'email_cc') and action.act_email_cc: - if '@' in (obj.email_cc or ''): - emails = obj.email_cc.split(",") - if obj.act_email_cc not in emails:# and '<'+str(action.act_email_cc)+">" not in emails: - write['email_cc'] = obj.email_cc + ',' + obj.act_email_cc - else: - write['email_cc'] = obj.act_email_cc - - # Put state change by rule in communication history - if hasattr(obj, 'state') and hasattr(obj, 'message_post') and action.act_state: - model_obj.message_post(cr, uid, [obj], _(action.act_state), context=context) + if hasattr(action, 'act_categ_id') and action.act_categ_id: + write['categ_ids'] = [4, action.act_categ_id] model_obj.write(cr, uid, [obj.id], write, context) - super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context) - emails = [] - - if hasattr(obj, 'email_from') and action.act_mail_to_partner: - emails.append(obj.email_from) - emails = filter(None, emails) - if len(emails) and action.act_mail_body: - emails = list(set(emails)) - self.email_send(cr, uid, obj, emails, action.act_mail_body) - return True - + return res def state_get(self, cr, uid, context=None): """Gets available states for crm""" diff --git a/addons/crm/crm_action_rule_view.xml b/addons/crm/crm_action_rule_view.xml index f2a5f57702d..b7ac5037c31 100644 --- a/addons/crm/crm_action_rule_view.xml +++ b/addons/crm/crm_action_rule_view.xml @@ -7,53 +7,21 @@ base.action.rule - - - + + + + + + - - - - - - base.action.rule.form2.inherit - base.action.rule - - - - - - - - - - - - - - base.action.rule.form3.inherit - base.action.rule - - - + + - + - - - base.action.rule.form4.inherit - base.action.rule - - - - - - - - From 5738c0cca8a3247de8e4b064c372d7c8ee06a941 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Thu, 4 Oct 2012 18:13:52 +0530 Subject: [PATCH 11/80] [FIX] base_action_rule: fix bzr revid: hmo@tinyerp.com-20121004124352-r0nz9mihc5cmbh34 --- addons/base_action_rule/base_action_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index cb2239f76a7..2328bf94cfd 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -111,7 +111,7 @@ trigger date, like sending a reminder 15 minutes before a meeting."), # Searching for action rules cr.execute("SELECT model.model, rule.id FROM base_action_rule rule \ LEFT JOIN ir_model model on (model.id = rule.model_id) \ - WHERE active and model = %%s", model) + WHERE active and model = %s", (model,)) res = cr.fetchall() # Check if any rule matching with current object for obj_name, rule_id in res: From ca052f42357a87de6e4756377e646049d57a29e4 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Fri, 5 Oct 2012 12:42:29 +0530 Subject: [PATCH 12/80] [IMP] base_action_rule: now able to run multiple server actions in rule bzr revid: hmo@tinyerp.com-20121005071229-6jmrghoz1nkcnnwh --- addons/base_action_rule/base_action_rule.py | 11 ++++++----- addons/base_action_rule/base_action_rule_view.xml | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 2328bf94cfd..dc56b85439c 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -93,7 +93,7 @@ trigger date, like sending a reminder 15 minutes before a meeting."), 'regex_name': fields.char('Regex on Resource Name', size=128, help="Regular expression for matching name of the resource\ \ne.g.: 'urgent.*' will search for records having name starting with the string 'urgent'\ \nNote: This is case sensitive search."), - 'server_action_id': fields.many2one('ir.actions.server', 'Server Action', help="Describes the action name.\neg:on which object which action to be taken on basis of which condition"), + 'server_action_ids': fields.many2many('ir.actions.server', 'Server Action', help="Define Server actions.\neg:Email Reminders, Call Object Service, etc.."), 'filter_id':fields.many2one('ir.filters', 'Filter', required=False), #TODO: set domain [('model_id','=',model)] 'last_run': fields.datetime('Last Run', readonly=1), } @@ -276,10 +276,11 @@ trigger date, like sending a reminder 15 minutes before a meeting."), """ Do Action """ if context is None: context = {} - - if action.server_action_id: - context.update({'active_id':obj.id, 'active_ids':[obj.id]}) - self.pool.get('ir.actions.server').run(cr, uid, [action.server_action_id.id], context) + ctx = dict(context) + action_server_obj = self.pool.get('ir.actions.server') + if action.server_action_ids: + ctx.update({'active_id':obj.id, 'active_ids':[obj.id]}) + action_server_obj.run(cr, uid, [x.id for x in action.server_action_ids], context=ctx) write = {} if hasattr(obj, 'user_id') and action.act_user_id: diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index b35818ee8d9..bd5b868e3f9 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -52,7 +52,7 @@
- + From ac4a1375765760d800b32ace2e0d51eee87c67b8 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Fri, 5 Oct 2012 12:50:01 +0530 Subject: [PATCH 13/80] [FIX] base_action_rule: do not subscribe again if already follow document bzr revid: hmo@tinyerp.com-20121005072001-6qy5yusrpw4n5xno --- addons/base_action_rule/base_action_rule.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index dc56b85439c..13617cd42d9 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -295,7 +295,10 @@ trigger date, like sending a reminder 15 minutes before a meeting."), model_obj.message_post(cr, uid, [obj], _(action.act_state), context=context) if hasattr(obj, 'message_subscribe') and action.act_followers: - model_obj.message_subscribe(cr, uid, [obj.id], [x.id for x in action.act_followers], context=context) + exits_followers = [x.id for x in obj.message_follower_ids] + new_followers = [x.id for x in action.act_followers if x.id not in exits_followers] + if new_followers: + model_obj.message_subscribe(cr, uid, [obj.id], new_followers, context=context) return True def _action(self, cr, uid, ids, objects, scrit=None, context=None): From 82ab8bf9a3294a95debfc8f6f2fca2d4ded6decb Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Fri, 5 Oct 2012 13:33:25 +0530 Subject: [PATCH 14/80] [IMP] base_action_rule: improve view and server action should be one2many instead of many2many bzr revid: hmo@tinyerp.com-20121005080325-3vcja1mog3yfthtr --- addons/base_action_rule/base_action_rule.py | 8 ++++++- .../base_action_rule_view.xml | 21 ++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 13617cd42d9..ebc4c02a938 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -93,7 +93,7 @@ trigger date, like sending a reminder 15 minutes before a meeting."), 'regex_name': fields.char('Regex on Resource Name', size=128, help="Regular expression for matching name of the resource\ \ne.g.: 'urgent.*' will search for records having name starting with the string 'urgent'\ \nNote: This is case sensitive search."), - 'server_action_ids': fields.many2many('ir.actions.server', 'Server Action', help="Define Server actions.\neg:Email Reminders, Call Object Service, etc.."), + 'server_action_ids': fields.one2many('ir.actions.server', 'action_rule_id', 'Server Action', help="Define Server actions.\neg:Email Reminders, Call Object Service, etc.."), 'filter_id':fields.many2one('ir.filters', 'Filter', required=False), #TODO: set domain [('model_id','=',model)] 'last_run': fields.datetime('Last Run', readonly=1), } @@ -321,6 +321,12 @@ trigger date, like sending a reminder 15 minutes before a meeting."), base_action_rule() +class actions_server(osv.osv): + _inherit = 'ir.actions.server' + _columns = { + 'action_rule_id': fields.many2one("base.action.rule", string="Action Rule") + } +actions_server() class ir_cron(osv.osv): _inherit = 'ir.cron' diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index bd5b868e3f9..7c1b6c43b0e 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -15,7 +15,7 @@ - + @@ -47,16 +47,23 @@
- + + + + - - - - - + + + + + + + + + From 4dc1a8b348999ab94eabd4c46ddef27ae12717ee Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Fri, 5 Oct 2012 13:38:41 +0530 Subject: [PATCH 15/80] [FIX] crm: typo bzr revid: hmo@tinyerp.com-20121005080841-bti2swdj7kosxse7 --- addons/crm/crm_action_rule_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/crm/crm_action_rule_view.xml b/addons/crm/crm_action_rule_view.xml index b7ac5037c31..e21b74de382 100644 --- a/addons/crm/crm_action_rule_view.xml +++ b/addons/crm/crm_action_rule_view.xml @@ -8,11 +8,11 @@ - + - + From 54c66ff0ff9e4ab3aca0a58a31e9a3cd47039640 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Fri, 5 Oct 2012 14:04:24 +0530 Subject: [PATCH 16/80] [IMP] base_action_rule: improve view bzr revid: hmo@tinyerp.com-20121005083424-pback5jfsvjb0dlo --- addons/base_action_rule/base_action_rule_view.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index 7c1b6c43b0e..2bffbf5b92c 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -36,10 +36,8 @@ - - - - + + From d79f2cb7b8d6fc2510607f2f3aa7fe8c2690c8dd Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Mon, 8 Oct 2012 12:23:16 +0530 Subject: [PATCH 17/80] [FIX]warning:Field res.partner.address is deprecated bzr revid: tch@tinyerp.com-20121008065316-fblbc7ycbhmv0w1s --- openerp/addons/base/test/test_osv_expression.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/test/test_osv_expression.yml b/openerp/addons/base/test/test_osv_expression.yml index 3843d374e64..39712fb08dd 100644 --- a/openerp/addons/base/test/test_osv_expression.yml +++ b/openerp/addons/base/test/test_osv_expression.yml @@ -83,7 +83,7 @@ Test one2many operator with False - !assert {model: res.partner, search: "[('child_ids', '=', False)]"}: - - address in (False, None, []) + - child_ids in (False, None, []) - Test many2many operator with empty search list - From 92d7b599cf9dd9087b57386cbb7514dc2f9d91b7 Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Mon, 8 Oct 2012 16:00:13 +0530 Subject: [PATCH 18/80] [IMP]base : improve manu string and demo data bzr revid: mma@tinyerp.com-20121008103013-bis8xilyyqjv6far --- openerp/addons/base/res/res_country_view.xml | 2 +- openerp/addons/base/res/res_partner_demo.xml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/res/res_country_view.xml b/openerp/addons/base/res/res_country_view.xml index c8046d34eb2..a5c846fb8ee 100644 --- a/openerp/addons/base/res/res_country_view.xml +++ b/openerp/addons/base/res/res_country_view.xml @@ -45,7 +45,7 @@ Display and manage the list of all countries that can be assigned to your partner records. You can create or delete countries to make sure the ones you are working on will be maintained. - + diff --git a/openerp/addons/base/res/res_partner_demo.xml b/openerp/addons/base/res/res_partner_demo.xml index e51c4dc2e6b..28c8fe34cc2 100644 --- a/openerp/addons/base/res/res_partner_demo.xml +++ b/openerp/addons/base/res/res_partner_demo.xml @@ -116,7 +116,7 @@ 1 Fremont - CA 94538 + 94538 3661 Station Street @@ -148,7 +148,7 @@ 1 Chicago - IL 60623 + 60623 23 Rockwell Lane @@ -206,7 +206,7 @@ 1 Miami - FL 33169 + 33169 contact@jackson.com @@ -270,7 +270,7 @@ 1 Detroit - MI 48212 + 48212 60, Rosewood Court @@ -327,7 +327,7 @@ 1 Boston - MA 02203 + 02203 info@thinkbig.com +1 857 349 3049 From e84b3f24932fee41e00ba3605cab3b043351d2f4 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Tue, 9 Oct 2012 13:23:40 +0530 Subject: [PATCH 19/80] [IMP] crm: demo data of action rule bzr revid: hmo@tinyerp.com-20121009075340-ogm51x9z2irmzijt --- addons/base_action_rule/base_action_rule.py | 14 ++-- .../base_action_rule_view.xml | 3 +- addons/crm/__openerp__.py | 1 + addons/crm/crm_action_rule_demo.xml | 73 +++++++++++++++++++ 4 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 addons/crm/crm_action_rule_demo.xml diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index ebc4c02a938..8b56bb9c909 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -63,6 +63,7 @@ class base_action_rule(osv.osv): _columns = { 'name': fields.char('Rule Name', size=64, required=True), 'model_id': fields.many2one('ir.model', 'Related Document Model', required=True, domain=[('osv_memory','=', False)]), + 'model': fields.related('model_id', 'model', type="char", size=256, string='Model'), 'create_date': fields.datetime('Create Date', readonly=1), 'active': fields.boolean('Active', help="If the active field is set to False,\ it will allow you to hide the rule without removing it."), @@ -71,6 +72,7 @@ when displaying a list of rules."), 'trg_date_type': fields.selection([ ('none', 'None'), ('create', 'Creation Date'), + ('write', 'Last Modified Date'), ('action_last', 'Last Action Date'), ('date', 'Date'), ('deadline', 'Deadline'), @@ -93,15 +95,15 @@ trigger date, like sending a reminder 15 minutes before a meeting."), 'regex_name': fields.char('Regex on Resource Name', size=128, help="Regular expression for matching name of the resource\ \ne.g.: 'urgent.*' will search for records having name starting with the string 'urgent'\ \nNote: This is case sensitive search."), - 'server_action_ids': fields.one2many('ir.actions.server', 'action_rule_id', 'Server Action', help="Define Server actions.\neg:Email Reminders, Call Object Service, etc.."), - 'filter_id':fields.many2one('ir.filters', 'Filter', required=False), #TODO: set domain [('model_id','=',model)] + 'server_action_ids': fields.one2many('ir.actions.server', 'action_rule_id', 'Server Action', help="Define Server actions.\neg:Email Reminders, Call Object Service, etc.."), #TODO: set domain [('model_id','=',model_id)] + 'filter_id':fields.many2one('ir.filters', 'Filter', required=False), #TODO: set domain [('model_id','=',model_id.model)] 'last_run': fields.datetime('Last Run', readonly=1), } _defaults = { - 'active': lambda *a: True, - 'trg_date_type': lambda *a: 'none', - 'trg_date_range_type': lambda *a: 'day', + 'active': True, + 'trg_date_type': 'none', + 'trg_date_range_type': 'day', } _order = 'sequence' @@ -200,6 +202,8 @@ trigger date, like sending a reminder 15 minutes before a meeting."), base = False if rule.trg_date_type=='create' and hasattr(obj, 'create_date'): base = obj.create_date + elif rule.trg_date_type=='write' and hasattr(obj, 'write_date'): + base = obj.write_date elif (rule.trg_date_type=='action_last' and hasattr(obj, 'create_date')): if hasattr(obj, 'date_action_last') and obj.date_action_last: diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index 2bffbf5b92c..64b1dd4fe32 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -15,7 +15,8 @@ - + + diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index dd36aa19041..ddeded0926e 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -107,6 +107,7 @@ Dashboard for CRM will include: 'crm_demo.xml', 'crm_lead_demo.xml', 'crm_phonecall_demo.xml', + 'crm_action_rule_demo.xml', ], 'test': [ 'test/process/communication_with_customer.yml', diff --git a/addons/crm/crm_action_rule_demo.xml b/addons/crm/crm_action_rule_demo.xml new file mode 100644 index 00000000000..e1cafbc76a6 --- /dev/null +++ b/addons/crm/crm_action_rule_demo.xml @@ -0,0 +1,73 @@ + + + + + + Reminder to User + + True + ir.actions.server + email + object.user_id.email + Reminder on Lead: [[object.name ]] of [[object.partner_id.name]] + Hello [[object.user_id.name]], +can you check following lead, it's inactive since 5 days ? + +Lead Id: [[object.id ]] +Customer: [[object.partner_id.name]] + + [[object.description]] + +Thanks, + + + + + Reminder to Customer + + True + ir.actions.server + email + object.email_from + Reminder on Lead: [[object.name ]] + Hello [[object.partner_id.name]], +your following lead inactive since 5 days. + +Lead Id: [[object.id ]] +Customer: [[object.partner_id.name]] + + [[object.description]] + +Thanks, + + + + + + Set Auto Reminder on leads which are inactive since 5 days. + + 1 + write + 5 + day + + + + + Filter on leads which come from USA. + crm.lead + [('country_id','=','United States')] + + + + Set Auto Followers on leads which are come from USA. + + 2 + urgent.* + + + + + + + From 76d93f251e679c14ab8d8d9a2a1b1a90f1961c06 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Tue, 9 Oct 2012 16:13:14 +0530 Subject: [PATCH 20/80] [IMP] base_action_rule: clean _check function and demo data. bzr revid: hmo@tinyerp.com-20121009104314-ers6tznkwiyeb3v1 --- addons/base_action_rule/base_action_rule.py | 52 ++++++++++----------- addons/crm/crm_action_rule.py | 5 +- addons/crm/crm_action_rule_demo.xml | 13 ++++-- 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 8b56bb9c909..d749415f0d0 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -184,20 +184,24 @@ trigger date, like sending a reminder 15 minutes before a meeting."), """ This Function is call by scheduler. """ - rule_pool = self.pool.get('base.action.rule') - rule_ids = rule_pool.search(cr, uid, [], context=context) + rule_ids = self.search(cr, uid, [], context=context) self._register_hook(cr, uid, rule_ids, context=context) - - rules = self.browse(cr, uid, rule_ids, context=context) - for rule in rules: + if context is None: + context = {} + for rule in self.browse(cr, uid, rule_ids, context=context): model = rule.model_id.model model_pool = self.pool.get(model) last_run = False if rule.last_run: last_run = get_datetime(rule.last_run) now = datetime.now() - for obj_id in model_pool.search(cr, uid, [], context=context): - obj = model_pool.browse(cr, uid, obj_id, context=context) + ctx = dict(context) + if rule.filter_id and rule.model_id.model == rule.filter_id.model_id: + ctx.update(eval(rule.filter_id.context)) + obj_ids = model_pool.search(cr, uid, eval(rule.filter_id.domain), context=ctx) + else: + obj_ids = model_pool.search(cr, uid, [], context=ctx) + for obj in model_pool.browse(cr, uid, obj_ids, context=ctx): # Calculate when this action should next occur for this object base = False if rule.trg_date_type=='create' and hasattr(obj, 'create_date'): @@ -229,23 +233,21 @@ trigger date, like sending a reminder 15 minutes before a meeting."), delay = fnct[rule.trg_date_range_type](rule.trg_date_range) action_date = base + delay if (not last_run or (last_run <= action_date < now)): - self._action(cr, uid, [rule.id], [obj], context=context) - rule_pool.write(cr, uid, [rule.id], {'last_run': now}, - context=context) + try: + self._action(cr, uid, rule, obj, context=ctx) + self.write(cr, uid, [rule.id], {'last_run': now}, context=context) + except Exception, e: + import traceback + print traceback.format_exc() + + def do_check(self, cr, uid, action, obj, context=None): """ check Action """ if context is None: context = {} ok = True - if action.filter_id: - if action.model_id.model == action.filter_id.model_id: - context.update(eval(action.filter_id.context)) - obj_ids = obj._table.search(cr, uid, eval(action.filter_id.domain), context=context) - if not obj.id in obj_ids: - ok = False - else: - ok = False + if getattr(obj, 'user_id', False): ok = ok and (not action.trg_user_id.id or action.trg_user_id.id==obj.user_id.id) if getattr(obj, 'partner_id', False): @@ -276,14 +278,15 @@ trigger date, like sending a reminder 15 minutes before a meeting."), ok = ok and regex_n return ok - def do_action(self, cr, uid, action, model_obj, obj, context=None): + def do_action(self, cr, uid, action, obj, context=None): """ Do Action """ if context is None: context = {} ctx = dict(context) + model_obj = self.pool.get(action.model_id.model) action_server_obj = self.pool.get('ir.actions.server') if action.server_action_ids: - ctx.update({'active_id':obj.id, 'active_ids':[obj.id]}) + ctx.update({'active_model': action.model_id.model, 'active_id':obj.id, 'active_ids':[obj.id]}) action_server_obj.run(cr, uid, [x.id for x in action.server_action_ids], context=ctx) write = {} @@ -305,7 +308,7 @@ trigger date, like sending a reminder 15 minutes before a meeting."), model_obj.message_subscribe(cr, uid, [obj.id], new_followers, context=context) return True - def _action(self, cr, uid, ids, objects, scrit=None, context=None): + def _action(self, cr, uid, action, obj, scrit=None, context=None): """ Do Action """ if context is None: context = {} @@ -314,11 +317,8 @@ trigger date, like sending a reminder 15 minutes before a meeting."), if not scrit: scrit = [] - for action in self.browse(cr, uid, ids, context=context): - for obj in objects: - if self.do_check(cr, uid, action, obj, context=context): - model_obj = self.pool.get(action.model_id.model) - self.do_action(cr, uid, action, model_obj, obj, context=context) + if self.do_check(cr, uid, action, obj, context=context): + self.do_action(cr, uid, action, obj, context=context) context.update({'action': False}) return True diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py index 49af2f74eeb..c923d37aa28 100644 --- a/addons/crm/crm_action_rule.py +++ b/addons/crm/crm_action_rule.py @@ -71,8 +71,9 @@ class base_action_rule(osv.osv): ok = ok and res_count return ok - def do_action(self, cr, uid, action, model_obj, obj, context=None): - res = super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context) + def do_action(self, cr, uid, action, obj, context=None): + res = super(base_action_rule, self).do_action(cr, uid, action, obj, context=context) + model_obj = self.pool.get(action.model_id.model) write = {} if hasattr(action, 'act_section_id') and action.act_section_id: write['section_id'] = action.act_section_id.id diff --git a/addons/crm/crm_action_rule_demo.xml b/addons/crm/crm_action_rule_demo.xml index e1cafbc76a6..4adefee407d 100644 --- a/addons/crm/crm_action_rule_demo.xml +++ b/addons/crm/crm_action_rule_demo.xml @@ -9,11 +9,11 @@ ir.actions.server email object.user_id.email - Reminder on Lead: [[object.name ]] of [[object.partner_id.name]] + Reminder on Lead: [[object.id ]] of [[object.partner_id.name]] Hello [[object.user_id.name]], can you check following lead, it's inactive since 5 days ? -Lead Id: [[object.id ]] +Lead: [[object.id ]] Customer: [[object.partner_id.name]] [[object.description]] @@ -29,11 +29,11 @@ Thanks, ir.actions.server email object.email_from - Reminder on Lead: [[object.name ]] + Reminder on Lead: [[object.id ]] Hello [[object.partner_id.name]], your following lead inactive since 5 days. -Lead Id: [[object.id ]] +Lead: [[object.id ]] Customer: [[object.partner_id.name]] [[object.description]] @@ -60,7 +60,7 @@ Thanks, - Set Auto Followers on leads which are come from USA. + Set Auto Followers on leads which are urgent and come from USA. 2 urgent.* @@ -68,6 +68,9 @@ Thanks, + create + 0 + minutes From 2bacc70085275b15b74a2b84038e1571d6f01367 Mon Sep 17 00:00:00 2001 From: "Divyesh Makwana (Open ERP)" Date: Tue, 9 Oct 2012 16:41:24 +0530 Subject: [PATCH 21/80] [IMP] project_timesheet : Improved the code. bzr revid: mdi@tinyerp.com-20121009111124-sdii9no8mui4zopz --- addons/project_timesheet/project_timesheet.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py index 6125d59c621..c6513e75942 100644 --- a/addons/project_timesheet/project_timesheet.py +++ b/addons/project_timesheet/project_timesheet.py @@ -62,8 +62,8 @@ class project_project(osv.osv): # if the user do not have access rights on the partner pass - result = mod_obj.get_object_reference(cr, uid, 'hr_timesheet', 'act_hr_timesheet_line_evry1_all_form') - id = result and result[1] or False + res = mod_obj.get_object_reference(cr, uid, 'hr_timesheet', 'act_hr_timesheet_line_evry1_all_form') + id = res and res[1] or False result = act_obj.read(cr, uid, [id], context=context)[0] result['name'] = _('Timesheets') result['context'] = view_context From 257b3974b55059e693b83eafb62f4e5ad8454669 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Tue, 9 Oct 2012 16:42:21 +0530 Subject: [PATCH 22/80] [FIX] base_action_rule: argument in _action bzr revid: hmo@tinyerp.com-20121009111221-dris93pcszjj11es --- addons/base_action_rule/base_action_rule.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index d749415f0d0..9440716815c 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -234,7 +234,7 @@ trigger date, like sending a reminder 15 minutes before a meeting."), action_date = base + delay if (not last_run or (last_run <= action_date < now)): try: - self._action(cr, uid, rule, obj, context=ctx) + self._action(cr, uid, [rule.id], obj, context=ctx) self.write(cr, uid, [rule.id], {'last_run': now}, context=context) except Exception, e: import traceback @@ -308,7 +308,7 @@ trigger date, like sending a reminder 15 minutes before a meeting."), model_obj.message_subscribe(cr, uid, [obj.id], new_followers, context=context) return True - def _action(self, cr, uid, action, obj, scrit=None, context=None): + def _action(self, cr, uid, ids, objects, scrit=None, context=None): """ Do Action """ if context is None: context = {} @@ -316,9 +316,12 @@ trigger date, like sending a reminder 15 minutes before a meeting."), context.update({'action': True}) if not scrit: scrit = [] - - if self.do_check(cr, uid, action, obj, context=context): - self.do_action(cr, uid, action, obj, context=context) + if not isinstance(objects, list): + objects = [objects] + for action in self.browse(cr, uid, ids, context=context): + for obj in objects: + if self.do_check(cr, uid, action, obj, context=context): + self.do_action(cr, uid, action, obj, context=context) context.update({'action': False}) return True From 4b8898028283e0f1893bce3e97e129d4671de602 Mon Sep 17 00:00:00 2001 From: "Jalpesh Patel (OpenERP)" Date: Tue, 9 Oct 2012 17:29:28 +0530 Subject: [PATCH 23/80] [IMP]hr dashboard and fix problem of creating timesheet lines (user is employee + partner manager + sales manager) bzr revid: pja@tinyerp.com-20121009115928-t7cnt9pox8hy2cs6 --- .../board_hr_recruitment_statistical_view.xml | 7 ++++--- addons/hr_timesheet_invoice/hr_timesheet_invoice.py | 13 ++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml index 461ccdf0bbe..73168d27927 100644 --- a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml +++ b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml @@ -6,12 +6,13 @@ applicants.status.tree hr.applicant - + - + + @@ -32,7 +33,7 @@ - + diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py index b9574b553d1..f2f1d2a0074 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py @@ -129,15 +129,18 @@ class account_analytic_line(osv.osv): def _default_journal(self, cr, uid, context=None): proxy = self.pool.get('hr.employee') record_ids = proxy.search(cr, uid, [('user_id', '=', uid)], context=context) - employee = proxy.browse(cr, uid, record_ids[0], context=context) - return employee.journal_id and employee.journal_id.id or False + if record_ids: + employee = proxy.browse(cr, uid, record_ids[0], context=context) + return employee.journal_id and employee.journal_id.id or False + return False def _default_general_account(self, cr, uid, context=None): proxy = self.pool.get('hr.employee') record_ids = proxy.search(cr, uid, [('user_id', '=', uid)], context=context) - employee = proxy.browse(cr, uid, record_ids[0], context=context) - if employee.product_id and employee.product_id.property_account_income: - return employee.product_id.property_account_income.id + if record_ids: + employee = proxy.browse(cr, uid, record_ids[0], context=context) + if employee.product_id and employee.product_id.property_account_income: + return employee.product_id.property_account_income.id return False _defaults = { From 1b319e527d7fdf7d617a438c3ff92441c1ef93ad Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Tue, 9 Oct 2012 17:47:12 +0530 Subject: [PATCH 24/80] [IMP] base_action_rule: improve demo data bzr revid: hmo@tinyerp.com-20121009121712-r6to5oia4ikiutpi --- addons/base_action_rule/base_action_rule.py | 6 ++++- addons/crm/crm_action_rule_demo.xml | 25 +++++++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 9440716815c..683a247c8d1 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -247,7 +247,11 @@ trigger date, like sending a reminder 15 minutes before a meeting."), if context is None: context = {} ok = True - + if action.filter_id and action.model_id.model == action.filter_id.model_id: + ctx = dict(context) + ctx.update(eval(action.filter_id.context)) + obj_ids = self.pool.get(action.model_id.model).search(cr, uid, eval(action.filter_id.domain), context=ctx) + ok = ok and obj.id in obj_ids if getattr(obj, 'user_id', False): ok = ok and (not action.trg_user_id.id or action.trg_user_id.id==obj.user_id.id) if getattr(obj, 'partner_id', False): diff --git a/addons/crm/crm_action_rule_demo.xml b/addons/crm/crm_action_rule_demo.xml index 4adefee407d..85cb8de1ac9 100644 --- a/addons/crm/crm_action_rule_demo.xml +++ b/addons/crm/crm_action_rule_demo.xml @@ -9,17 +9,17 @@ ir.actions.server email object.user_id.email - Reminder on Lead: [[object.id ]] of [[object.partner_id.name]] + Reminder on Lead: [[object.id ]] [[object.partner_id and 'of ' +object.partner_id.name or '']] Hello [[object.user_id.name]], -can you check following lead, it's inactive since 5 days ? +can you check following lead, it's not open since 5 days ? Lead: [[object.id ]] -Customer: [[object.partner_id.name]] +Description: [[object.description]] Thanks, - + @@ -30,11 +30,11 @@ Thanks, email object.email_from Reminder on Lead: [[object.id ]] - Hello [[object.partner_id.name]], -your following lead inactive since 5 days. + Hello [[object.partner_id and object.partner_id.name or '']], +your following lead is not open since 5 days. Lead: [[object.id ]] -Customer: [[object.partner_id.name]] +Description: [[object.description]] @@ -42,12 +42,19 @@ Thanks, + + Filter on leads which are draft. + crm.lead + [('state','=','draft')] + + - Set Auto Reminder on leads which are inactive since 5 days. + Set Auto Reminder on leads which are not open since 5 days. 1 - write + + create 5 day From 5e4ddf78dacb9fa0349da31567b30b34f906a7c4 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Tue, 9 Oct 2012 17:57:39 +0530 Subject: [PATCH 25/80] [IMP] base_action_rule: action rule view should in sheet bzr revid: hmo@tinyerp.com-20121009122739-89dolzmm73o1nar5 --- .../base_action_rule_view.xml | 100 +++++++++--------- 1 file changed, 51 insertions(+), 49 deletions(-) diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index 64b1dd4fe32..fe8ff9b181f 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -12,59 +12,61 @@ base.action.rule
- - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - - + + + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + +
From 4eec1b454e809495e082ef98a484d34bdf636367 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Wed, 10 Oct 2012 11:37:17 +0530 Subject: [PATCH 26/80] [FIX]remove warning res.partner.address deprecated bzr revid: tch@tinyerp.com-20121010060717-qmelz3oaxitw3laf --- openerp/addons/base/test/test_osv_expression.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/test/test_osv_expression.yml b/openerp/addons/base/test/test_osv_expression.yml index 39712fb08dd..2325bd83301 100644 --- a/openerp/addons/base/test/test_osv_expression.yml +++ b/openerp/addons/base/test/test_osv_expression.yml @@ -82,7 +82,7 @@ - Test one2many operator with False - - !assert {model: res.partner, search: "[('child_ids', '=', False)]"}: + !assert {model: res.partner, search: "[('child_ids', '=',False)]"}: - child_ids in (False, None, []) - Test many2many operator with empty search list From 64041577076e37c76488be2f3ad3f0923c7f45d0 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Wed, 10 Oct 2012 11:41:27 +0530 Subject: [PATCH 27/80] [FIX]remove warning res.partner.address deprecated bzr revid: tch@tinyerp.com-20121010061127-8e27icb0kqzsyoa5 --- openerp/addons/base/test/test_osv_expression.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/test/test_osv_expression.yml b/openerp/addons/base/test/test_osv_expression.yml index 2325bd83301..39712fb08dd 100644 --- a/openerp/addons/base/test/test_osv_expression.yml +++ b/openerp/addons/base/test/test_osv_expression.yml @@ -82,7 +82,7 @@ - Test one2many operator with False - - !assert {model: res.partner, search: "[('child_ids', '=',False)]"}: + !assert {model: res.partner, search: "[('child_ids', '=', False)]"}: - child_ids in (False, None, []) - Test many2many operator with empty search list From 4034afc923547d01a2c3d4c85c20fe9acaf0ecbe Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Wed, 10 Oct 2012 12:52:44 +0530 Subject: [PATCH 28/80] [FIX] crm: fix bzr revid: hmo@tinyerp.com-20121010072244-5wsnaqwpydx59dmg --- addons/crm/crm_action_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py index c923d37aa28..910a1fca169 100644 --- a/addons/crm/crm_action_rule.py +++ b/addons/crm/crm_action_rule.py @@ -79,7 +79,7 @@ class base_action_rule(osv.osv): write['section_id'] = action.act_section_id.id if hasattr(action, 'act_categ_id') and action.act_categ_id: - write['categ_ids'] = [4, action.act_categ_id] + write['categ_ids'] = [4, action.act_categ_id.id] model_obj.write(cr, uid, [obj.id], write, context) return res From 2f8236bdd117277a9faa0ad9a3eb6a752e107d71 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Thu, 11 Oct 2012 14:32:32 +0530 Subject: [PATCH 29/80] [FIX]Fix warning:no translation for language en_US bzr revid: tch@tinyerp.com-20121011090232-i0lo4eelz74seja9 --- openerp/addons/base/ir/ir_translation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index 3ed61a7ddb3..4565bb79d16 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -408,7 +408,7 @@ class ir_translation(osv.osv): if trans_file: _logger.info('module %s: loading translation file (%s) for language %s', module_name, lang_code, lang) tools.trans_load(cr, trans_file, lang, verbose=False, module_name=module_name, context=context) - elif lang_code != 'en': + elif lang_code != 'en_US': _logger.warning('module %s: no translation for language %s', module_name, lang_code) return True From 92dd592b5f3c69d946a2b96a460f91d84b164908 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Thu, 11 Oct 2012 15:37:41 +0530 Subject: [PATCH 30/80] [FIX]Fix warning:ir.field.converter has no access rules bzr revid: tch@tinyerp.com-20121011100741-2r4pz9qcqjljxf0l --- openerp/addons/base/security/ir.model.access.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/security/ir.model.access.csv b/openerp/addons/base/security/ir.model.access.csv index 2b498877b9d..8e9134ff070 100644 --- a/openerp/addons/base/security/ir.model.access.csv +++ b/openerp/addons/base/security/ir.model.access.csv @@ -8,6 +8,7 @@ "access_ir_default_group_system","ir_default group_system","model_ir_default",,1,1,1,1 "access_ir_exports_group_system","ir_exports group_system","model_ir_exports","base.group_user",1,1,1,1 "access_ir_exports_line_group_system","ir_exports_line group_system","model_ir_exports_line","base.group_user",1,1,1,1 +"access_ir_fields_converter_group_system","ir_fields_converter","model_ir_fields_converter","base.group_user",1,1,1,1 "access_ir_model_group_erp_manager","ir_model group_erp_manager","model_ir_model","group_erp_manager",1,1,1,1 "access_ir_model_constraint_group_erp_manager","ir_model_constraint group_erp_manager","model_ir_model_constraint","group_erp_manager",1,1,1,1 "access_ir_model_relation_group_erp_manager","ir_model_relation group_erp_manager","model_ir_model_relation","group_erp_manager",1,1,1,1 From 7bef5e5162deb800191994c0e6925a980c9cef11 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Fri, 12 Oct 2012 11:40:35 +0530 Subject: [PATCH 31/80] [FIX]fix test case warning bzr revid: tch@tinyerp.com-20121012061035-xfuez2o9x9k1m5r4 --- openerp/tests/addons/test_impex/tests/test_load.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/tests/addons/test_impex/tests/test_load.py b/openerp/tests/addons/test_impex/tests/test_load.py index 066fea62942..8dac916b0d0 100644 --- a/openerp/tests/addons/test_impex/tests/test_load.py +++ b/openerp/tests/addons/test_impex/tests/test_load.py @@ -1088,7 +1088,7 @@ class test_datetime(ImporterCase): ['value'], [['2012-02-03 11:11:11']]) self.assertFalse(result['messages']) self.assertEqual( - values(self.read(domain=[('id', '=', result['ids'])])), + values(self.read(domain=[('id', 'in', result['ids'])])), ['2012-02-03 01:11:11']) def test_notz(self): @@ -1098,5 +1098,5 @@ class test_datetime(ImporterCase): result = self.import_(['value'], [['2012-02-03 11:11:11']]) self.assertFalse(result['messages']) self.assertEqual( - values(self.read(domain=[('id', '=', result['ids'])])), + values(self.read(domain=[('id', 'in', result['ids'])])), ['2012-02-03 11:11:11']) From 78d52f14aae412dffdcc8f4a30c11d032ed702da Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Fri, 12 Oct 2012 13:03:08 +0530 Subject: [PATCH 32/80] [FIX] do not read depricated fields. bzr revid: tpa@tinyerp.com-20121012073308-3eewtgihpnr6ri1z --- openerp/osv/orm.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index cf9dc024dcb..0c2b662f239 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3562,6 +3562,10 @@ class BaseModel(object): self.check_access_rights(cr, user, 'read') if not fields: fields = list(set(self._columns.keys() + self._inherit_fields.keys())) + #remove depricated fields from field list + for field in fields: + if getattr(self._columns[field], 'deprecated'): + fields.remove(field) if isinstance(ids, (int, long)): select = [ids] else: From 4a66def0caba4aa28d4d564b9d004d679f758698 Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Fri, 12 Oct 2012 15:11:21 +0530 Subject: [PATCH 33/80] [IMP]base: imporve zip code of partner demo data bzr revid: mma@tinyerp.com-20121012094121-3gsp3826l9uh1il9 --- openerp/addons/base/res/res_partner_demo.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/res/res_partner_demo.xml b/openerp/addons/base/res/res_partner_demo.xml index 28c8fe34cc2..dadf8aba7fe 100644 --- a/openerp/addons/base/res/res_partner_demo.xml +++ b/openerp/addons/base/res/res_partner_demo.xml @@ -343,7 +343,7 @@ 1 Cupertino - CA 95014 + 95014 10200 S. De Anza Blvd @@ -403,7 +403,7 @@ 3rd Floor, Room 3-C, Carretera Panamericana, Km 1, Urb. Delgado Chalbaud Caracas - CP 1090 + 1090 info@vauxoo.com +58 212 681 0538 From 8e3c3af132a4637035060458746408d727fe9dd1 Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Fri, 12 Oct 2012 15:24:53 +0530 Subject: [PATCH 34/80] [IMP] improved code. bzr revid: tpa@tinyerp.com-20121012095453-svqmnkq9e60hqast --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 0c2b662f239..717e58aff3c 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3563,7 +3563,7 @@ class BaseModel(object): if not fields: fields = list(set(self._columns.keys() + self._inherit_fields.keys())) #remove depricated fields from field list - for field in fields: + for field in self._columns.keys(): if getattr(self._columns[field], 'deprecated'): fields.remove(field) if isinstance(ids, (int, long)): From e1dfd1fadcb6460fbfdb3e8534260a6ac74af019 Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Fri, 12 Oct 2012 17:54:19 +0530 Subject: [PATCH 35/80] [IMP]all: imporve string state to status bzr revid: mma@tinyerp.com-20121012122419-mtiw3wpxlcbl4y1r --- openerp/addons/base/ir/ir_actions.py | 2 +- openerp/addons/base/ir/ir_translation.py | 2 +- openerp/addons/base/ir/workflow/workflow.py | 4 ++-- openerp/addons/base/ir/workflow/workflow_view.xml | 2 +- openerp/addons/base/module/module.py | 4 ++-- openerp/addons/base/module/wizard/base_language_install.py | 2 +- openerp/addons/base/module/wizard/base_module_import.py | 2 +- openerp/addons/base/module/wizard/base_module_update.py | 2 +- openerp/addons/base/res/res_request.py | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index 8ec1bea2d02..8e406519d15 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -766,7 +766,7 @@ class ir_actions_todo(osv.osv): 'action_id': fields.many2one( 'ir.actions.actions', 'Action', select=True, required=True), 'sequence': fields.integer('Sequence'), - 'state': fields.selection(TODO_STATES, string='State', required=True), + 'state': fields.selection(TODO_STATES, string='Status', required=True), 'name': fields.char('Name', size=64), 'type': fields.selection(TODO_TYPES, 'Type', required=True, help="""Manual: Launched manually. diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index 3ed61a7ddb3..4e275f902cc 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -167,7 +167,7 @@ class ir_translation(osv.osv): [('to_translate','To Translate'), ('inprogress','Translation in Progress'), ('translated','Translated')], - string="State", + string="Status", help="Automatically set to let administators find new terms that might need to be translated"), # aka gettext extracted-comments - we use them to flag openerp-web translation diff --git a/openerp/addons/base/ir/workflow/workflow.py b/openerp/addons/base/ir/workflow/workflow.py index ce9adfd8ecc..46884c5035b 100644 --- a/openerp/addons/base/ir/workflow/workflow.py +++ b/openerp/addons/base/ir/workflow/workflow.py @@ -136,7 +136,7 @@ class wkf_instance(osv.osv): 'wkf_id': fields.many2one('workflow', 'Workflow', ondelete='cascade', select=True), 'res_id': fields.integer('Resource ID'), 'res_type': fields.char('Resource Object', size=64), - 'state': fields.char('State', size=32), + 'state': fields.char('Status', size=32), } def _auto_init(self, cr, context=None): super(wkf_instance, self)._auto_init(cr, context) @@ -159,7 +159,7 @@ class wkf_workitem(osv.osv): 'wkf_id': fields.related('act_id','wkf_id', type='many2one', relation='workflow', string='Workflow'), 'subflow_id': fields.many2one('workflow.instance', 'Subflow', ondelete="cascade", select=True), 'inst_id': fields.many2one('workflow.instance', 'Instance', required=True, ondelete="cascade", select=True), - 'state': fields.char('State', size=64, select=True), + 'state': fields.char('Status', size=64, select=True), } wkf_workitem() diff --git a/openerp/addons/base/ir/workflow/workflow_view.xml b/openerp/addons/base/ir/workflow/workflow_view.xml index d174928556f..5c262299917 100644 --- a/openerp/addons/base/ir/workflow/workflow_view.xml +++ b/openerp/addons/base/ir/workflow/workflow_view.xml @@ -344,7 +344,7 @@ workflow.workitem - + diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index e86bcc15d74..5fbb28d36db 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -223,7 +223,7 @@ class module(osv.osv): ('to upgrade','To be upgraded'), ('to remove','To be removed'), ('to install','To be installed') - ], string='State', readonly=True, select=True), + ], string='Status', readonly=True, select=True), 'demo': fields.boolean('Demo Data', readonly=True), 'license': fields.selection([ ('GPL-2', 'GPL Version 2'), @@ -671,7 +671,7 @@ class module_dependency(osv.osv): ('to remove','To be removed'), ('to install','To be installed'), ('unknown', 'Unknown'), - ], string='State', readonly=True, select=True), + ], string='Status', readonly=True, select=True), } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/addons/base/module/wizard/base_language_install.py b/openerp/addons/base/module/wizard/base_language_install.py index ab65159f0d4..fd25a84f196 100644 --- a/openerp/addons/base/module/wizard/base_language_install.py +++ b/openerp/addons/base/module/wizard/base_language_install.py @@ -31,7 +31,7 @@ class base_language_install(osv.osv_memory): _columns = { 'lang': fields.selection(tools.scan_languages(),'Language', required=True), 'overwrite': fields.boolean('Overwrite Existing Terms', help="If you check this box, your customized translations will be overwritten and replaced by the official ones."), - 'state':fields.selection([('init','init'),('done','done')], 'state', readonly=True), + 'state':fields.selection([('init','init'),('done','done')], 'Status', readonly=True), } _defaults = { 'state': 'init', diff --git a/openerp/addons/base/module/wizard/base_module_import.py b/openerp/addons/base/module/wizard/base_module_import.py index 34f22bf82f0..8734a5e0032 100644 --- a/openerp/addons/base/module/wizard/base_module_import.py +++ b/openerp/addons/base/module/wizard/base_module_import.py @@ -38,7 +38,7 @@ class base_module_import(osv.osv_memory): _columns = { 'module_file': fields.binary('Module .ZIP file', required=True), 'state':fields.selection([('init','init'),('done','done')], - 'state', readonly=True), + 'Status', readonly=True), 'module_name': fields.char('Module Name', size=128), } diff --git a/openerp/addons/base/module/wizard/base_module_update.py b/openerp/addons/base/module/wizard/base_module_update.py index 0893761cd28..fc9b0749cb3 100644 --- a/openerp/addons/base/module/wizard/base_module_update.py +++ b/openerp/addons/base/module/wizard/base_module_update.py @@ -29,7 +29,7 @@ class base_module_update(osv.osv_memory): _columns = { 'update': fields.integer('Number of modules updated', readonly=True), 'add': fields.integer('Number of modules added', readonly=True), - 'state':fields.selection([('init','init'),('done','done')], 'state', readonly=True), + 'state':fields.selection([('init','init'),('done','done')], 'Status', readonly=True), } _defaults = { diff --git a/openerp/addons/base/res/res_request.py b/openerp/addons/base/res/res_request.py index 7c2c4697ef0..3b576c84162 100644 --- a/openerp/addons/base/res/res_request.py +++ b/openerp/addons/base/res/res_request.py @@ -73,7 +73,7 @@ class res_request(osv.osv): 'ref_partner_id':fields.many2one('res.partner', 'Partner Ref.', states={'closed':[('readonly',True)]}), 'ref_doc1':fields.reference('Document Ref 1', selection=_links_get, size=128, states={'closed':[('readonly',True)]}), 'ref_doc2':fields.reference('Document Ref 2', selection=_links_get, size=128, states={'closed':[('readonly',True)]}), - 'state': fields.selection([('draft','draft'),('waiting','waiting'),('active','active'),('closed','closed')], 'State', required=True, readonly=True), + 'state': fields.selection([('draft','draft'),('waiting','waiting'),('active','active'),('closed','closed')], 'Status', required=True, readonly=True), 'history': fields.one2many('res.request.history','req_id', 'History') } _defaults = { From 564c9066fa8520c9363f7607151b285deff88519 Mon Sep 17 00:00:00 2001 From: "RGA(OpenERP)" <> Date: Mon, 15 Oct 2012 17:22:14 +0530 Subject: [PATCH 36/80] [FIX] diagram view record not reload on refresh bzr revid: rgaopenerp-20121015115214-cdw5ca6d24fgakir --- addons/web_diagram/static/src/js/diagram.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 4bae1aed3db..9617bdbafb3 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -116,9 +116,20 @@ instance.web.DiagramView = instance.web.View.extend({ if(id_record) { this.id = id_record; this.get_diagram_info(); + this.do_push_state({id:record.id}); } }, + do_load_state: function(state, warm) { + if (state && !this.dataset.get_id_index(state.id)) { + this.dataset.ids.push(state.id); + } + this.dataset.select_id(state.id); + if (warm) { + this.do_show(); + } + }, + // Set-up the drawing elements of the diagram draw_diagram: function(result) { var self = this; From 3c38b1c4d1332aefeacd9c7a703802315d9e5729 Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Wed, 17 Oct 2012 15:29:59 +0530 Subject: [PATCH 37/80] [REVERT] Reverted the changes of depricated fieldread changes of the Revision#4482 bzr revid: jam@tinyerp.com-20121017095959-jlztk0qjg85qplvr --- openerp/osv/orm.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 199d86b6527..62d12ef20ee 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3565,10 +3565,6 @@ class BaseModel(object): self.check_access_rights(cr, user, 'read') if not fields: fields = list(set(self._columns.keys() + self._inherit_fields.keys())) - #remove depricated fields from field list - for field in self._columns.keys(): - if getattr(self._columns[field], 'deprecated'): - fields.remove(field) if isinstance(ids, (int, long)): select = [ids] else: From 38067dffc9be8a14010118132c622f3749a7edc0 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 17 Oct 2012 12:28:21 +0200 Subject: [PATCH 38/80] [FIX] osv/orm: compute the _fct_inv() of stored functional fields at the record creation. Compute also the _fct_inv() of related fields (because there is no reason not to do it). That last patch revert a 'fix' of lp bug 544087 introduced in revision 4182, i don't get the purpose of it but that bug is not repdocutible anymore... bzr revid: qdp-launchpad@openerp.com-20121017102821-tjx7gqiz86v7sn54 --- openerp/osv/orm.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 62d12ef20ee..1db2feeca88 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -4357,9 +4357,12 @@ class BaseModel(object): upd0 = upd0 + ',"' + field + '"' upd1 = upd1 + ',' + self._columns[field]._symbol_set[0] upd2.append(self._columns[field]._symbol_set[1](vals[field])) - else: - if not isinstance(self._columns[field], fields.related): + #for the function fields that receive a value, we set them directly in the database + #(they may be required), but we also need to trigger the _fct_inv() + if (hasattr(self._columns[field], '_fnct_inv')): upd_todo.append(field) + else: + upd_todo.append(field) if field in self._columns \ and hasattr(self._columns[field], 'selection') \ and vals[field]: From 2c46e9e8d16ed0d4ad3eae37b89ee45672f1dcc6 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 17 Oct 2012 13:57:18 +0200 Subject: [PATCH 39/80] [FIX] base_crypt: allow empty password to be set on res.users bzr revid: qdp-launchpad@openerp.com-20121017115718-y5wln78yq6097qt6 --- addons/base_crypt/crypt.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/addons/base_crypt/crypt.py b/addons/base_crypt/crypt.py index 81a60a5dd5f..3accc2740e9 100644 --- a/addons/base_crypt/crypt.py +++ b/addons/base_crypt/crypt.py @@ -140,15 +140,18 @@ class users(osv.osv): # Add handlers for 'input_pw' field. def set_pw(self, cr, uid, id, name, value, args, context): - if not value: - raise osv.except_osv(_('Error!'), _("You have to specify a password.")) + if value: + obj = pooler.get_pool(cr.dbname).get('res.users') + if not hasattr(obj, "_salt_cache"): + obj._salt_cache = {} - obj = pooler.get_pool(cr.dbname).get('res.users') - if not hasattr(obj, "_salt_cache"): - obj._salt_cache = {} + salt = obj._salt_cache[id] = gen_salt() + encrypted = encrypt_md5(value, salt) - salt = obj._salt_cache[id] = gen_salt() - encrypted = encrypt_md5(value, salt) + else: + #setting a password to '' is allowed. It can be used to inactivate the classic log-in of the user + #while the access can still be granted by another login method (openid...) + encrypted = '' cr.execute('update res_users set password=%s where id=%s', (encrypted.encode('utf-8'), int(id))) cr.commit() From d0c38a833ce7955b548ec46c7b17ca9c480fedfe Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 17 Oct 2012 14:38:14 +0200 Subject: [PATCH 40/80] [FIX] event_sale: fix stupid recursion error in definition of fields.related bzr revid: qdp-launchpad@openerp.com-20121017123814-qjcee8z1ftgzouqq --- addons/event_sale/event_sale.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/event_sale/event_sale.py b/addons/event_sale/event_sale.py index f37dea3f075..2dd40a7c285 100644 --- a/addons/event_sale/event_sale.py +++ b/addons/event_sale/event_sale.py @@ -40,7 +40,7 @@ class sale_order_line(osv.osv): 'event_id': fields.many2one('event.event', 'Event', help="Choose an event and it will automatically create a registration for this event."), #those 2 fields are used for dynamic domains and filled by onchange 'event_type_id': fields.related('event_type_id', type='many2one', relation="event.type", string="Event Type"), - 'event_ok': fields.related('event_ok', string='event_ok', type='boolean'), + 'event_ok': fields.related('product_id', 'event_ok', string='event_ok', type='boolean'), } def product_id_change(self, cr, uid, ids, From ece82902a45bc3c503f1071a831903aec92553c8 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 09:27:33 +0200 Subject: [PATCH 41/80] [TEST] attempt to detect what the hell that crazy bug is coming from bzr revid: qdp-launchpad@openerp.com-20121018072733-78g195u6yeq0m7jj --- openerp/osv/orm.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 62d12ef20ee..13d508d48a3 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -4358,8 +4358,7 @@ class BaseModel(object): upd1 = upd1 + ',' + self._columns[field]._symbol_set[0] upd2.append(self._columns[field]._symbol_set[1](vals[field])) else: - if not isinstance(self._columns[field], fields.related): - upd_todo.append(field) + upd_todo.append(field) if field in self._columns \ and hasattr(self._columns[field], 'selection') \ and vals[field]: From 3d1defaa681381eeade85bc7ec236d7be4a2d876 Mon Sep 17 00:00:00 2001 From: "Amit (OpenERP)" Date: Thu, 18 Oct 2012 13:27:59 +0530 Subject: [PATCH 42/80] [IMP] Imporved the indentation problem bzr revid: amp@tinyerp.com-20121018075759-70m5yv1yrotnuhao --- openerp/addons/base/security/base_security.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/security/base_security.xml b/openerp/addons/base/security/base_security.xml index aeb2ab153c6..b7d4fb0e9ee 100644 --- a/openerp/addons/base/security/base_security.xml +++ b/openerp/addons/base/security/base_security.xml @@ -83,12 +83,12 @@ [('user_id','=',user.id)] - - Partner bank company rule - - - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] - + + Partner bank company rule + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + From 4dfb95b46e7bdb0573a7631bf86c490e01039227 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 10:49:27 +0200 Subject: [PATCH 43/80] [FIX] mail: attempt to fix crazy bug bzr revid: qdp-launchpad@openerp.com-20121018084927-yr1mp6svwq55eayn --- addons/mail/mail_group.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 3febe34be51..eb53cf96078 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -61,7 +61,7 @@ class mail_group(osv.Model): 'image_medium': fields.function(_get_image, fnct_inv=_set_image, string="Medium-sized photo", type="binary", multi="_get_image", store={ - 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), + 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image', 'image_medium'], 10), }, help="Medium-sized photo of the group. It is automatically "\ "resized as a 128x128px image, with aspect ratio preserved. "\ @@ -69,7 +69,7 @@ class mail_group(osv.Model): 'image_small': fields.function(_get_image, fnct_inv=_set_image, string="Small-sized photo", type="binary", multi="_get_image", store={ - 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), + 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image', 'image_small'], 10), }, help="Small-sized photo of the group. It is automatically "\ "resized as a 64x64px image, with aspect ratio preserved. "\ From 47bed5e14f717f36e35e89d7e56b39ac74c008c6 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 12:02:22 +0200 Subject: [PATCH 44/80] [FIX] removing a cr.commit() bzr revid: qdp-launchpad@openerp.com-20121018100222-jttfkv4e8rq7a4pa --- addons/base_crypt/crypt.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/base_crypt/crypt.py b/addons/base_crypt/crypt.py index 3accc2740e9..14e029eb988 100644 --- a/addons/base_crypt/crypt.py +++ b/addons/base_crypt/crypt.py @@ -154,7 +154,6 @@ class users(osv.osv): encrypted = '' cr.execute('update res_users set password=%s where id=%s', (encrypted.encode('utf-8'), int(id))) - cr.commit() del value def get_pw( self, cr, uid, ids, name, args, context ): From 5795a34ec4e65980e7229fbfeb274cb5428df149 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 14:49:49 +0200 Subject: [PATCH 45/80] [FIX] project: state is not draft by default, but given by the stage bzr revid: qdp-launchpad@openerp.com-20121018124949-97x6tc5tlvskfh3f --- addons/project/project.py | 1 - addons/project/project_demo.xml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project/project.py b/addons/project/project.py index 9a022fffa90..8aa09065705 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -777,7 +777,6 @@ class task(base_stage, osv.osv): _defaults = { 'stage_id': _get_default_stage_id, 'project_id': _get_default_project_id, - 'state': 'draft', 'kanban_state': 'normal', 'priority': '2', 'progress': 0, diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index cd22bad67d4..c9b6dce7cd8 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -129,6 +129,7 @@ Budget Planning + pending 4 From 3555be5c5630f5b29c6be925a0207a91b6ff4546 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 14:54:23 +0200 Subject: [PATCH 46/80] [FIX] project: when delegating a task, do copy the task state too bzr revid: qdp-launchpad@openerp.com-20121018125423-8qj0j380j7odvaz0 --- addons/project/project.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/project/project.py b/addons/project/project.py index 8aa09065705..56d7fef0e49 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -1029,7 +1029,6 @@ class task(base_stage, osv.osv): 'user_id': delegate_data['user_id'] and delegate_data['user_id'][0] or False, 'planned_hours': delegate_data['planned_hours'] or 0.0, 'parent_ids': [(6, 0, [task.id])], - 'state': 'draft', 'description': delegate_data['new_task_description'] or '', 'child_ids': [], 'work_ids': [] From ed7ea104b87bd767e6aee14d06a2a0024698844d Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 15:00:26 +0200 Subject: [PATCH 47/80] [FIX] account, overdue report: fixed error 'partner has no attribute named partner_id' bzr revid: qdp-launchpad@openerp.com-20121018130026-m76e7xja21v1stbm --- addons/account/report/account_print_overdue.rml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/report/account_print_overdue.rml b/addons/account/report/account_print_overdue.rml index 8b8238030fe..1755f0a334d 100644 --- a/addons/account/report/account_print_overdue.rml +++ b/addons/account/report/account_print_overdue.rml @@ -129,7 +129,7 @@ [[ o.title.name or '' ]] [[ o.name ]] - [[ display_address(o.partner_id) ]] + [[ display_address(o.id) ]] From e25d11022f24c76f9c9903bdc9572ead018de423 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 15:42:12 +0200 Subject: [PATCH 48/80] [FIX] hr_recruitment: fixed yaml test that was creating records with inconsistent data (stage & state should be syncro as state is a fields.related) bzr revid: qdp-launchpad@openerp.com-20121018134212-z4o0qmuleubx70zt --- addons/hr_recruitment/hr_recruitment_demo.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/addons/hr_recruitment/hr_recruitment_demo.yml b/addons/hr_recruitment/hr_recruitment_demo.yml index 3f00c7e643b..2554c690c15 100644 --- a/addons/hr_recruitment/hr_recruitment_demo.yml +++ b/addons/hr_recruitment/hr_recruitment_demo.yml @@ -17,7 +17,6 @@ priority: '3' user_id: base.user_demo partner_name: 'Marie Justine' - state: 'open' partner_mobile: '9988774455' job_id: hr.job_developer stage_id: stage_job4 @@ -41,7 +40,6 @@ type_id: degree_bac5 user_id: base.user_root partner_name: 'Sandra Elvis' - state: 'cancel' stage_id: stage_job6 name: 'More than 5 yrs Experience in PHP' - @@ -50,7 +48,6 @@ type_id: degree_licenced user_id: base.user_demo partner_name: 'John Bruno' - state: 'done' job_id: hr.job_developer color: 5 stage_id: stage_job5 @@ -61,8 +58,6 @@ type_id: degree_licenced priority: '4' partner_name: 'David Armstrong' - state: 'pending' - state: open partner_mobile: '9966332214' job_id: hr.job_developer stage_id: stage_job2 @@ -73,7 +68,6 @@ date: !eval time.strftime('%Y-%m-12 17:49:19') type_id: degree_bac5 partner_name: 'Tina Augustie' - state: 'open' partner_mobile: '9898745745' job_id: hr.job_developer stage_id: stage_job4 @@ -85,7 +79,6 @@ date: !eval time.strftime('%Y-%m-12 17:49:19') type_id: degree_bac5 partner_name: 'Shane Williams' - state: 'open' partner_mobile: '9812398524' stage_id: stage_job4 name: 'Programmer' From a292f894ef68fbd8efac9b492635f91e607aef68 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 15:57:28 +0200 Subject: [PATCH 49/80] [FIX] project_issue: fix inconsistent data (stage & state should be syncro as state is a fields.related) bzr revid: qdp-launchpad@openerp.com-20121018135728-jaynrxb88550ydgt --- addons/project_issue/project_issue.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 9e434078d2f..1cb5b20edbd 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -275,7 +275,6 @@ class project_issue(base_stage, osv.osv): 'active': 1, 'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c), 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), - 'state': 'draft', 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c), 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), @@ -332,7 +331,7 @@ class project_issue(base_stage, osv.osv): }) vals = { 'task_id': new_task_id, - 'state':'pending' + 'stage_id': self.stage_find(cr, uid, [bug], bug.project_id.id, [('state', '=', 'pending')], context=context), } self.convert_to_task_send_note(cr, uid, [bug.id], context=context) case_obj.write(cr, uid, [bug.id], vals, context=context) From e5ea70b4c26b9e7d45339c42ef391f41ac1ff1f0 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 15:59:49 +0200 Subject: [PATCH 50/80] [FIX] point_of_sale: typo in report bzr revid: qdp-launchpad@openerp.com-20121018135949-b08zihsoo7s0km05 --- addons/point_of_sale/report/pos_payment_report_user.rml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/point_of_sale/report/pos_payment_report_user.rml b/addons/point_of_sale/report/pos_payment_report_user.rml index 1d89d28c5f9..3671408b760 100644 --- a/addons/point_of_sale/report/pos_payment_report_user.rml +++ b/addons/point_of_sale/report/pos_payment_report_user.rml @@ -194,7 +194,7 @@ Total: - [[ formatLang(pos_payment_user_total(data['form'], currency_obj = company.currency_id)) or removeParentNode('blockTable')]] + [[ formatLang(pos_payment_user_total(data['form']), currency_obj = company.currency_id) or removeParentNode('blockTable')]] From b4fbe43de11dfc4801d34fd5f3bbfcf15b08b24f Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 16:26:01 +0200 Subject: [PATCH 51/80] [REV] reverting some useless patches before merge in feature branch bzr revid: qdp-launchpad@openerp.com-20121018142601-trgb2kbgrvzl4jk2 --- addons/mail/mail_group.py | 4 ++-- addons/project/project_demo.xml | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index eb53cf96078..3febe34be51 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -61,7 +61,7 @@ class mail_group(osv.Model): 'image_medium': fields.function(_get_image, fnct_inv=_set_image, string="Medium-sized photo", type="binary", multi="_get_image", store={ - 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image', 'image_medium'], 10), + 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Medium-sized photo of the group. It is automatically "\ "resized as a 128x128px image, with aspect ratio preserved. "\ @@ -69,7 +69,7 @@ class mail_group(osv.Model): 'image_small': fields.function(_get_image, fnct_inv=_set_image, string="Small-sized photo", type="binary", multi="_get_image", store={ - 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image', 'image_small'], 10), + 'mail.group': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10), }, help="Small-sized photo of the group. It is automatically "\ "resized as a 64x64px image, with aspect ratio preserved. "\ diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index c9b6dce7cd8..cd22bad67d4 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -129,7 +129,6 @@ Budget Planning - pending 4 From 4b426887fff69340bcd79e0e4d4a024f9b51dd06 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 16:33:32 +0200 Subject: [PATCH 52/80] [FIX] account: print overdue report bzr revid: qdp-launchpad@openerp.com-20121018143332-rwbydw558m1jgp13 --- addons/account/report/account_print_overdue.rml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/report/account_print_overdue.rml b/addons/account/report/account_print_overdue.rml index 1755f0a334d..3e8b9b04b62 100644 --- a/addons/account/report/account_print_overdue.rml +++ b/addons/account/report/account_print_overdue.rml @@ -129,7 +129,7 @@ [[ o.title.name or '' ]] [[ o.name ]] - [[ display_address(o.id) ]] + [[ display_address(o) ]] From 536cb8775c7f5511f7e70595c19a0260dfbc1937 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 18 Oct 2012 20:43:23 +0200 Subject: [PATCH 53/80] [TEST] removing values at record creation in yaml bzr revid: qdp-launchpad@openerp.com-20121018184323-5kq9fb54slij3ioo --- openerp/tools/yaml_import.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/openerp/tools/yaml_import.py b/openerp/tools/yaml_import.py index 7e1c7152b0f..1a81db949ee 100644 --- a/openerp/tools/yaml_import.py +++ b/openerp/tools/yaml_import.py @@ -425,7 +425,19 @@ class YamlInterpreter(object): continue field_value = self._eval_field(model, field_name, expression, default=False) record_dict[field_name] = field_value - + if 'line_cr_ids' in record_dict and record_dict['line_cr_ids']: + for item in record_dict['line_cr_ids']: + if item[2] and 'date_original' in item[2]: + del(item[2]['date_original']) + if item[2] and 'date_original' in item[2]: + del(item[2]['date_due']) + if 'line_dr_ids' in record_dict and record_dict['line_dr_ids']: + for item in record_dict['line_dr_ids']: + if item[2] and 'date_original' in item[2]: + del(item[2]['date_original']) + if item[2] and 'date_original' in item[2]: + del(item[2]['date_due']) + print "ICICICICICICI", record_dict return record_dict def process_ref(self, node, column=None): From 96254074d75c2420eebc43bba5ca4f24ee536eb7 Mon Sep 17 00:00:00 2001 From: "RGA(OpenERP)" <> Date: Fri, 19 Oct 2012 16:23:04 +0530 Subject: [PATCH 54/80] [FIX] reconcile view: use backbone event architecture, remove .add bzr revid: rgaopenerp-20121019105304-9ddz8q763prmxdg0 --- .../static/src/js/account_move_reconciliation.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/account/static/src/js/account_move_reconciliation.js b/addons/account/static/src/js/account_move_reconciliation.js index e8bf24fb27f..100ac3b66b9 100644 --- a/addons/account/static/src/js/account_move_reconciliation.js +++ b/addons/account/static/src/js/account_move_reconciliation.js @@ -11,15 +11,15 @@ openerp.account = function (instance) { this._super.apply(this, arguments); var self = this; this.current_partner = null; - this.do_select.add(function() { - if (self.get_selected_ids().length === 0) { + this.on('record_selected', this, function(ids, records) { + if (ids.length === 0) { self.$(".oe_account_recon_reconcile").attr("disabled", ""); } else { self.$(".oe_account_recon_reconcile").removeAttr("disabled"); } }); }, - on_loaded: function() { + load_list: function() { var self = this; var tmp = this._super.apply(this, arguments); if (this.partners) { @@ -121,6 +121,10 @@ openerp.account = function (instance) { self.do_search(self.last_domain, self.last_context, self.last_group_by); }); }, + do_select: function (ids, records) { + this.trigger('record_selected', ids, records) + this._super.apply(this, arguments); + }, }); }; From 820c2551bba2332677e64899950c53ed9f0e4b1d Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 19 Oct 2012 13:06:04 +0200 Subject: [PATCH 55/80] [IMP] tools, yaml_import: the values given to the creation should only include the fields that aren't readonly in the view. Because that's what clients do bzr revid: qdp-launchpad@openerp.com-20121019110604-1gvfcgqvwd1izh71 --- openerp/tools/yaml_import.py | 56 +++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/openerp/tools/yaml_import.py b/openerp/tools/yaml_import.py index 1a81db949ee..501ab30d879 100644 --- a/openerp/tools/yaml_import.py +++ b/openerp/tools/yaml_import.py @@ -330,7 +330,7 @@ class YamlInterpreter(object): def _create_record(self, model, fields, view_info=False, parent={}, default=True): """This function processes the !record tag in yalm files. It simulates the record creation through an xml view (either specified on the !record tag or the default one for this object), including the calls to - on_change() functions. + on_change() functions, and sending only values for fields that aren't set as readonly. :param model: model instance :param fields: dictonary mapping the field names and their values :param view_info: result of fields_view_get() called on the object @@ -339,6 +339,13 @@ class YamlInterpreter(object): :return: dictionary mapping the field names and their values, ready to use when calling the create() function :rtype: dict """ + def _get_right_one2many_view(fg, field_name, view_type): + one2many_view = fg[field_name]['views'].get(view_type) + # if the view is not defined inline, we call fields_view_get() + if not one2many_view: + one2many_view = self.pool.get(fg[field_name]['relation']).fields_view_get(self.cr, SUPERUSER_ID, False, view_type, self.context) + return one2many_view + def process_val(key, val): if fg[key]['type']=='many2one': if type(val) in (tuple,list): @@ -347,7 +354,28 @@ class YamlInterpreter(object): if val is False: val = [] if len(val) and type(val[0]) == dict: + #we want to return only the fields that aren't readonly + #For that, we need to first get the right tree view to consider for the field `key´ + one2many_tree_view = _get_right_one2many_view(fg, key, 'tree') + for rec in val: + #make a copy for the iteration, as we will alterate the size of `rec´ dictionary + rec_copy = rec.copy() + for field_key in rec_copy: + #seek in the view for the field `field_key´ and removing it from `key´ values, as this column is readonly in the tree view + subfield_obj = etree.fromstring(one2many_tree_view['arch'].encode('utf-8')).xpath("//field[@name='%s']"%(field_key)) + if subfield_obj and (subfield_obj[0].get('modifiers', '{}').find('"readonly": true') >= 0): + #TODO: currently we only support if readonly is True in the modifiers. Some improvement may be done in + #order to support also modifiers that look like {"readonly": [["state", "not in", ["draft", "confirm"]]]} + del(rec[field_key]) + + #now that unwanted values have been removed from val, we can encapsulate it in a tuple as returned value val = map(lambda x: (0,0,x), val) + + #we want to return only the fields that aren't readonly + if el.get('modifiers', '{}').find('"readonly": true') >= 0: + #TODO: currently we only support if readonly is True in the modifiers. Some improvement may be done in + #order to support also modifiers that look like {"readonly": [["state", "not in", ["draft", "confirm"]]]} + return False return val view = view_info and etree.fromstring(view_info['arch'].encode('utf-8')) or False @@ -373,13 +401,14 @@ class YamlInterpreter(object): one2many_form_view = None if (view is not False) and (fg[field_name]['type']=='one2many'): # for one2many fields, we want to eval them using the inline form view defined on the parent - one2many_form_view = view_info['fields'][field_name]['views'].get('form') - # if the form view is not defined inline, we call fields_view_get() - if not one2many_form_view: - one2many_form_view = self.pool.get(fg[field_name]['relation']).fields_view_get(self.cr, SUPERUSER_ID, False, 'form', self.context) + one2many_form_view = _get_right_one2many_view(fg, field_name, 'form') field_value = self._eval_field(model, field_name, fields[field_name], one2many_form_view or view_info, parent=record_dict, default=default) - record_dict[field_name] = field_value + + #call process_val to not update record_dict if values were given for readonly fields + val = process_val(field_name, field_value) + if val: + record_dict[field_name] = val #if (field_name in defaults) and defaults[field_name] == field_value: # print '*** You can remove these lines:', field_name, field_value @@ -405,7 +434,7 @@ class YamlInterpreter(object): ctx['parent'] = parent2(parent) for a in fg: if a not in ctx: - ctx[a]=process_val(a, defaults.get(a, False)) + ctx[a] = process_val(a, defaults.get(a, False)) # Evaluation args args = map(lambda x: eval(x, ctx), match.group(2).split(',')) @@ -425,19 +454,6 @@ class YamlInterpreter(object): continue field_value = self._eval_field(model, field_name, expression, default=False) record_dict[field_name] = field_value - if 'line_cr_ids' in record_dict and record_dict['line_cr_ids']: - for item in record_dict['line_cr_ids']: - if item[2] and 'date_original' in item[2]: - del(item[2]['date_original']) - if item[2] and 'date_original' in item[2]: - del(item[2]['date_due']) - if 'line_dr_ids' in record_dict and record_dict['line_dr_ids']: - for item in record_dict['line_dr_ids']: - if item[2] and 'date_original' in item[2]: - del(item[2]['date_original']) - if item[2] and 'date_original' in item[2]: - del(item[2]['date_due']) - print "ICICICICICICI", record_dict return record_dict def process_ref(self, node, column=None): From 8ca8f50656740a3204e85358683f6c93671182a8 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 19 Oct 2012 13:07:20 +0200 Subject: [PATCH 56/80] [FIX] account_voucher: fixed yaml test in order to reflect what the client are really sending as information bzr revid: qdp-launchpad@openerp.com-20121019110720-xhkhzd04caczsz41 --- addons/account_voucher/account_voucher.py | 2 +- addons/account_voucher/test/account_voucher.yml | 1 - addons/account_voucher/test/sales_payment.yml | 5 ++++- addons/account_voucher/test/sales_receipt.yml | 1 - 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 648576443a0..3ae421308b5 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -1422,7 +1422,7 @@ class account_voucher_line(osv.osv): } def onchange_reconcile(self, cr, uid, ids, reconcile, amount, amount_unreconciled, context=None): - vals = { 'amount': 0.0} + vals = {'amount': 0.0} if reconcile: vals = { 'amount': amount_unreconciled} return {'value': vals} diff --git a/addons/account_voucher/test/account_voucher.yml b/addons/account_voucher/test/account_voucher.yml index f8e20f496e5..c9270dc695c 100644 --- a/addons/account_voucher/test/account_voucher.yml +++ b/addons/account_voucher/test/account_voucher.yml @@ -53,7 +53,6 @@ account_id: account.cash amount: 1000.0 company_id: base.main_company - currency_id: base.EUR journal_id: account.bank_journal name: Voucher Axelor narration: PC Assemble SC234 diff --git a/addons/account_voucher/test/sales_payment.yml b/addons/account_voucher/test/sales_payment.yml index 88f10e55918..b71e42add0b 100644 --- a/addons/account_voucher/test/sales_payment.yml +++ b/addons/account_voucher/test/sales_payment.yml @@ -45,7 +45,6 @@ 'account_id': ref('account.cash'), 'amount': 450.0, 'company_id': ref('base.main_company'), - 'currency_id': ref('base.EUR'), 'journal_id': ref('account.bank_journal'), 'partner_id': ref('base.res_partner_19'), 'period_id': ref('account.period_8'), @@ -53,6 +52,10 @@ } if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] + #clients aren't sending value of readonly fields in the view, and there is a good reason for that, so here the + #create should only use values of fields that are not readonly. That's why i'm removing some of these values + del(res['value']['line_cr_ids'][0]['date_original']) + del(res['value']['line_cr_ids'][0]['date_due']) res['value']['line_cr_ids'][0]['amount'] = 450.0 vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] id = self.create(cr, uid, vals) diff --git a/addons/account_voucher/test/sales_receipt.yml b/addons/account_voucher/test/sales_receipt.yml index 7cd82eecaff..cf4bc5c46d3 100644 --- a/addons/account_voucher/test/sales_receipt.yml +++ b/addons/account_voucher/test/sales_receipt.yml @@ -53,7 +53,6 @@ 'account_id': ref('account.cash'), 'amount': 30000.0, 'company_id': ref('base.main_company'), - 'currency_id': ref('base.EUR'), 'journal_id': ref('account.bank_journal'), 'partner_id': ref('base.res_partner_19'), 'period_id': ref('account.period_8'), From b5f8932458fb35c51e26c090df0fad6f50f2acd5 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 19 Oct 2012 13:54:25 +0200 Subject: [PATCH 57/80] [FIX] hr_timesheet: fixed yaml test that as giving a value for a related readonly field bzr revid: qdp-launchpad@openerp.com-20121019115425-97fxn854e3icp3dm --- addons/hr_timesheet/test/test_hr_timesheet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hr_timesheet/test/test_hr_timesheet.yml b/addons/hr_timesheet/test/test_hr_timesheet.yml index cc04bed734d..59d688f183b 100644 --- a/addons/hr_timesheet/test/test_hr_timesheet.yml +++ b/addons/hr_timesheet/test/test_hr_timesheet.yml @@ -23,7 +23,7 @@ import time uid = ref('base.user_demo') new_id = self.create(cr, uid, {'emp_id': ref('hr.employee_qdp'), 'name': 'Quentin Paolino', - 'server_date': time.strftime('%Y-%m-%d %H:%M:%S'), 'state': 'present'}) + 'server_date': time.strftime('%Y-%m-%d %H:%M:%S')}) self.sign_in_result(cr, uid, [new_id], context) - I change my project "Thymbra" and I click on the "Change Work" button of this wizard From 5b4fde2485f7c4f1b93dc1634c7929404fdcdaeb Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 19 Oct 2012 15:30:50 +0200 Subject: [PATCH 58/80] [FIX] account: the readonly fields aren't send to the server at the record creation bzr revid: qdp-launchpad@openerp.com-20121019133050-7h8gx3beir992xlw --- addons/account/account.py | 3 +++ addons/account/account_move_line.py | 9 ++++++--- addons/account/test/account_validate_account_move.yml | 7 ++----- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index fa2b10a7478..3e07f151de3 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -1431,6 +1431,9 @@ class account_move(osv.osv): if 'line_id' in vals: c = context.copy() c['novalidate'] = True + c['period_id'] = vals['period_id'] + c['journal_id'] = vals['journal_id'] + c['date'] = vals['date'] result = super(account_move, self).create(cr, uid, vals, c) self.validate(cr, uid, [result], context) else: diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index f9388706e97..67a55d8f451 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -1234,16 +1234,16 @@ class account_move_line(osv.osv): vals['company_id'] = company_id[0] if ('account_id' in vals) and not account_obj.read(cr, uid, vals['account_id'], ['active'])['active']: raise osv.except_osv(_('Bad Account!'), _('You cannot use an inactive account.')) - if 'journal_id' in vals: + if 'journal_id' in vals and vals['journal_id']: context['journal_id'] = vals['journal_id'] - if 'period_id' in vals: + if 'period_id' in vals and vals['period_id']: context['period_id'] = vals['period_id'] if ('journal_id' not in context) and ('move_id' in vals) and vals['move_id']: m = move_obj.browse(cr, uid, vals['move_id']) context['journal_id'] = m.journal_id.id context['period_id'] = m.period_id.id #we need to treat the case where a value is given in the context for period_id as a string - if 'period_id' not in context or not isinstance(context.get('period_id', ''), (int, long)): + if 'period_id' in context and not isinstance(context.get('period_id', ''), (int, long)): period_candidate_ids = self.pool.get('account.period').name_search(cr, uid, name=context.get('period_id','')) if len(period_candidate_ids) != 1: raise osv.except_osv(_('Error!'), _('No period found or more than one period found for the given date.')) @@ -1253,6 +1253,9 @@ class account_move_line(osv.osv): self._update_journal_check(cr, uid, context['journal_id'], context['period_id'], context) move_id = vals.get('move_id', False) journal = journal_obj.browse(cr, uid, context['journal_id'], context=context) + vals['journal_id'] = vals.get('journal_id') or context.get('journal_id') + vals['period_id'] = vals.get('period_id') or context.get('period_id') + vals['date'] = vals.get('date') or context.get('date') if not move_id: if journal.centralisation: #Check for centralisation diff --git a/addons/account/test/account_validate_account_move.yml b/addons/account/test/account_validate_account_move.yml index 65ae2877125..df58da6dfea 100644 --- a/addons/account/test/account_validate_account_move.yml +++ b/addons/account/test/account_validate_account_move.yml @@ -11,21 +11,18 @@ - !record {model: account.move, id: account_move_0}: date: !eval time.strftime('%Y-%m-%d') + period_id: account.period_6 journal_id: account.bank_journal line_id: - account_id: account.cash amount_currency: 0.0 credit: 2000.0 - date: !eval time.strftime('%Y-%m-%d') debit: 0.0 - journal_id: account.bank_journal name: Basic Computer partner_id: base.res_partner_12 - period_id: account.period_6 ref: '2011010' tax_amount: 0.0 name: / - period_id: account.period_6 ref: '2011010' state: draft - @@ -110,4 +107,4 @@ partial_reconcile = self.trans_rec_reconcile_partial_reconcile(cr, uid, [ref('account_move_line_reconcile0')], {'lang': u'en_US', 'active_model': 'account.move.line', 'active_ids': ids, 'tz': False, 'active_id': ids[0]}) move_line = move_line_obj.browse(cr, uid, ids) - assert move_line[0].reconcile_partial_id, "Partial reconcilation is not done" \ No newline at end of file + assert move_line[0].reconcile_partial_id, "Partial reconcilation is not done" From b8ba7b389c1e477e9b2970099390e42428a82a42 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 22 Oct 2012 10:35:38 +0200 Subject: [PATCH 60/80] [IMP] Improved state in diagram bzr revid: fme@openerp.com-20121022083538-ua6fq20x5qkdwcwy --- addons/web_diagram/static/src/js/diagram.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 9617bdbafb3..2e0e5881378 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -113,20 +113,24 @@ instance.web.DiagramView = instance.web.View.extend({ on_diagram_loaded: function(record) { var id_record = record['id']; - if(id_record) { + if (id_record) { this.id = id_record; this.get_diagram_info(); - this.do_push_state({id:record.id}); + this.do_push_state({id: id_record}); + } else { + this.do_push_state({}); } }, do_load_state: function(state, warm) { - if (state && !this.dataset.get_id_index(state.id)) { - this.dataset.ids.push(state.id); - } - this.dataset.select_id(state.id); - if (warm) { - this.do_show(); + if (state && state.id) { + if (!this.dataset.get_id_index(state.id)) { + this.dataset.ids.push(state.id); + } + this.dataset.select_id(state.id); + if (warm) { + this.do_show(); + } } }, From d6f262da378803224902ab852364c69bb6c49529 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 22 Oct 2012 12:08:00 +0200 Subject: [PATCH 61/80] [FIX] methods renamed in web client but not fixed in addons bzr revid: xmo@openerp.com-20121022100800-yft9a5itqgb2ohhy --- addons/base_import/static/src/js/import.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_import/static/src/js/import.js b/addons/base_import/static/src/js/import.js index 043630afc48..407d38dacd7 100644 --- a/addons/base_import/static/src/js/import.js +++ b/addons/base_import/static/src/js/import.js @@ -38,7 +38,7 @@ openerp.base_import = function (instance) { // if true, the 'Import', 'Export', etc... buttons will be shown instance.web.ListView.prototype.defaults.import_enabled = true; instance.web.ListView.include({ - on_loaded: function () { + load_list: function () { var self = this; var add_button = false; if (!this.$buttons) { From 8a3a92bbfc9a432311b0d2399fa043daab1adcf9 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 22 Oct 2012 12:39:35 +0200 Subject: [PATCH 62/80] [IMP] readonly sortable o2m The making of the column invisible would happen after the header was rendered (?), and the header would not be re-rendered afterwards. So there would be a missing chunk of table. Make the cells invisible instead. It's all going to be changed looks-wise anyway so meh. bzr revid: xmo@openerp.com-20121022103935-78bm40gfotpt1ds6 --- addons/web/static/src/js/view_form.js | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index bc171ef1d6e..c2514e4a195 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3351,23 +3351,13 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({ controller.on('edit:before', self, function (e) { e.cancel = true; }); - var has_handle = _(controller.columns).find(function (column) { + _(controller.columns).find(function (column) { if (!column instanceof instance.web.list.Handle) { return false; } - column.modifiers.tree_invisible = true; - column.invisible = '1'; - // remove from visibles - controller.visible_columns.splice( - controller.visible_columns.indexOf(column), - 1); + column.modifiers.invisible = true; return true; }); - if (has_handle) { - // recompute aggregates - controller.aggregate_columns = - _(controller.visible_columns).invoke('to_aggregate'); - } } } else if (view_type === "form") { if (self.get("effective_readonly")) { From 0244001069c4ed96a93c3820440b61c1e0188460 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 22 Oct 2012 12:41:44 +0200 Subject: [PATCH 63/80] [FIX] fixed another bug in reconciliation javascript part bzr revid: nicolas.vanhoren@openerp.com-20121022104144-6xsiekhp2mflkgs5 --- addons/account/static/src/js/account_move_reconciliation.js | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/account/static/src/js/account_move_reconciliation.js b/addons/account/static/src/js/account_move_reconciliation.js index bc758179636..8e72e24eb22 100644 --- a/addons/account/static/src/js/account_move_reconciliation.js +++ b/addons/account/static/src/js/account_move_reconciliation.js @@ -102,7 +102,6 @@ openerp.account = function (instance) { action_id: result[1], context: additional_context }).then(function (result) { - result = result.result; result.context = _.extend(result.context || {}, additional_context); result.flags = result.flags || {}; result.flags.new_window = true; From 50e0b17662f2da7dd23bed9b482849d9d52a0002 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 22 Oct 2012 12:45:29 +0200 Subject: [PATCH 64/80] [FIX] pos closing bzr revid: al@openerp.com-20121022104529-9wq22t76fj6zqxu6 --- addons/point_of_sale/static/src/js/widgets.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js index 47a527a010d..3f0e439cfba 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -1055,8 +1055,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa this.pos.barcode_reader.disconnect(); return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_client_pos_menu']], ['res_id']).pipe( _.bind(function(res) { - return this.rpc('/web/action/load', {'action_id': res[0]['res_id']}).pipe(_.bind(function(result) { - var action = result.result; + return this.rpc('/web/action/load', {'action_id': res[0]['res_id']}).pipe(_.bind(function(action) { action.context = _.extend(action.context || {}, {'cancel_action': {type: 'ir.actions.client', tag: 'reload'}}); //self.destroy(); this.do_action(action); From 815100e53593652ae1be68439b08f6db207266e9 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Mon, 22 Oct 2012 13:37:00 +0200 Subject: [PATCH 65/80] [IMP] res.partner ir.rule: made the rule similar to the one for res.partner. bzr revid: vmt@openerp.com-20121022113700-hn65uabpd0ttuxyt --- openerp/addons/base/security/base_security.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openerp/addons/base/security/base_security.xml b/openerp/addons/base/security/base_security.xml index b7d4fb0e9ee..02323a635df 100644 --- a/openerp/addons/base/security/base_security.xml +++ b/openerp/addons/base/security/base_security.xml @@ -87,7 +87,10 @@ Partner bank company rule - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)] From e6e4e8d4c102f477c95415154a1411be54126f2a Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Mon, 22 Oct 2012 14:31:00 +0200 Subject: [PATCH 66/80] [REV] osv/orm: revert of a previous patch that was unifying the behavior for fields.related and fields.function at creation time because it's a bit dangereous to treat it right now, and may need the add of a new field attribute. "I'll be back", said the patch bzr revid: qdp-launchpad@openerp.com-20121022123100-wwr7lnmpqebddxon --- openerp/osv/orm.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 1db2feeca88..4c3330c97b7 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -4359,10 +4359,20 @@ class BaseModel(object): upd2.append(self._columns[field]._symbol_set[1](vals[field])) #for the function fields that receive a value, we set them directly in the database #(they may be required), but we also need to trigger the _fct_inv() - if (hasattr(self._columns[field], '_fnct_inv')): + if (hasattr(self._columns[field], '_fnct_inv')) and not isinstance(self._columns[field], fields.related): + #TODO: this way to special case the related fields is really creepy but it shouldn't be changed at + #one week of the release candidate. It seems the only good way to handle correctly this is to add an + #attribute to make a field `really readonly´ and thus totally ignored by the create()... otherwise + #if, for example, the related has a default value (for usability) then the fct_inv is called and it + #may raise some access rights error. Changing this is a too big change for now, and is thus postponed + #after the release but, definitively, the behavior shouldn't be different for related and function + #fields. upd_todo.append(field) else: - upd_todo.append(field) + #TODO: this `if´ statement should be removed because there is no good reason to special case the fields + #related. See the above TODO comment for further explanations. + if not isinstance(self._columns[field], fields.related): + upd_todo.append(field) if field in self._columns \ and hasattr(self._columns[field], 'selection') \ and vals[field]: From b631b13742aa68465f6090368ad9fd4e7f4bfad3 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 22 Oct 2012 14:41:35 +0200 Subject: [PATCH 67/80] [FIX] Forgot two occurencies during do_action() refactoring refactoring was done in Revision: 3261 revid:fme@openerp.com-20121017145548-oc9s6oadhwzbr78m bzr revid: fme@openerp.com-20121022124135-ifaj0mm1vd2zjxyo --- addons/web/static/src/js/views.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index d4b676f2c7a..2a5e1c4587e 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -1068,9 +1068,11 @@ instance.web.Sidebar = instance.web.Widget.extend({ additional_context); result.flags = result.flags || {}; result.flags.new_window = true; - self.do_action(result, function () { - // reload view - self.getParent().reload(); + self.do_action(result, { + on_close: function() { + // reload view + self.getParent().reload(); + }, }); }); }); @@ -1216,7 +1218,9 @@ instance.web.View = instance.web.Widget.extend({ /* niv: previously we were overriding once more with action_data.context, * I assumed this was not a correct behavior and removed it */ - return self.do_action(action, result_handler); + return self.do_action(action, { + on_close: result_handler, + }); }, null); } else { return result_handler(); From c6eaa8beb8518abef184d84d074cec882980b8ca Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 22 Oct 2012 14:49:35 +0200 Subject: [PATCH 68/80] [FIX] problem in read_group, caused an exception "cannot read 'lang' in undefined" in a lot of views bzr revid: nicolas.vanhoren@openerp.com-20121022124935-mxfzx2wg431bqhm9 --- addons/web/static/src/js/data.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index 0bc2848fe0b..e279ade6fb3 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -135,6 +135,8 @@ instance.web.Query = instance.web.Class.extend({ }).pipe(function (results) { return _(results).map(function (result) { // FIX: querygroup initialization + result.__context = result.__context || {}; + result.__context.group_by = result.__context.group_by || []; _.defaults(result.__context, ctx); return new instance.web.QueryGroup( self._model.name, grouping[0], result); From 955ebc8c6715d756d9873715be6ddb59406553c6 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 22 Oct 2012 15:16:24 +0200 Subject: [PATCH 69/80] [FIX] reorderable listview clone/placeholder positioning In some cases (tables?) jquery-ui sortable apparently breaks down if any parent of the element being positioned (and the generated helper element) is in position: relative. Remove all of the position:relative in the way, they seem to not be used anymore (including the one in jquery-ui, testing in IE9 doesn't seem to expose any bug and jquery-ui references one, might have been an issue in IE<=8 which was fixed since). Maybe an assertion should be added to the code, which would call #getComputedStyle() on all the #parents() of the element being made sortable and error out if one of them has #getPropertyValue('position') == 'relative'? bzr revid: xmo@openerp.com-20121022131624-n8a43vgl8k4gsqk9 --- addons/web/static/src/css/base.css | 7 +++---- addons/web/static/src/css/base.sass | 6 ++++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index e4b8885b1a1..eba41b23776 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -27,7 +27,6 @@ } .openerp.openerp_webclient_container { height: 100%; - position: relative; } .text-tag .text-button { @@ -198,6 +197,9 @@ .openerp .oe_bounce_container { display: inline-block; } +.openerp .ui-tabs { + position: static; +} .openerp.ui-dialog { display: none; padding: 6px; @@ -2621,9 +2623,6 @@ .openerp .oe_list_buttons.oe_editing .oe_alternative { visibility: visible; } -.openerp .oe_list { - position: relative; -} .openerp .oe_list .oe_form .oe_form_nosheet { margin: 0; padding: 0; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index a128fcec24b..5140f3ceb3e 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -144,7 +144,6 @@ $sheet-max-width: 860px .openerp.openerp_webclient_container height: 100% - position: relative // jQueryUI css bug fixing .text-tag .text-button @@ -253,6 +252,10 @@ $sheet-max-width: 860px .oe_bounce_container display: inline-block + // bug noted in jquery ui CSS doesn't seem to occur in IE9, + // so remove position:relative + .ui-tabs + position: static // Modal box &.ui-dialog display: none @@ -2078,7 +2081,6 @@ $sheet-max-width: 860px visibility: visible .oe_list - position: relative .oe_form .oe_form_nosheet margin: 0 // FIXME: either class or border should not be by default From a1364bde2098b94ace57d640aff1421eddd8ca65 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 22 Oct 2012 16:24:59 +0200 Subject: [PATCH 70/80] [FIX] m2m kanban use it's own value as is in order to fill dataset.ids bzr revid: fme@openerp.com-20121022142459-9so19ypfwhxwhuc3 --- addons/web/static/src/js/view_form.js | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c2514e4a195..87673865ee8 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -4187,7 +4187,6 @@ instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend( }, render_value: function() { var self = this; - this.dataset.set_ids(this.get("value")); this.is_loaded = this.is_loaded.pipe(function() { return self.kanban_view.do_search(self.build_domain(), self.dataset.get_context(), []); }); From d38b276168c2d0597ce87e6756c846a47bd9f3fb Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Mon, 22 Oct 2012 16:35:22 +0200 Subject: [PATCH 71/80] [FIX] mail: use the right web.base.url bzr revid: stw@openerp.com-20121022143522-sv07qt5txqjwim6a --- addons/mail/update.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/mail/update.py b/addons/mail/update.py index 9e35391bf52..f571a59440d 100644 --- a/addons/mail/update.py +++ b/addons/mail/update.py @@ -22,7 +22,7 @@ check the logs to see if a message we just received was already logged. """ _PREVIOUS_LOG_CHECK = datetime.timedelta(days=365) -def get_sys_logs(cr, uid): +def get_sys_logs(self, cr, uid): """ Utility method to send a publisher warranty get logs messages. """ @@ -42,7 +42,7 @@ def get_sys_logs(cr, uid): nbr_active_share_users = pool.get("res.users").search(cr, uid, [("share", "=", True), ("date", ">=", limit_date_str)], count=True) user = pool.get("res.users").browse(cr, uid, uid) - web_base_url = safe_eval(self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', 'False')) + web_base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', 'False') msg = { "dbuuid": dbuuid, "nbr_users": nbr_users, @@ -62,6 +62,7 @@ def get_sys_logs(cr, uid): arguments_raw = urllib.urlencode(arguments) url = config.get("publisher_warranty_url") + uo = urllib2.urlopen(url, arguments_raw, **add_arg) result = {} try: @@ -84,8 +85,8 @@ class publisher_warranty_contract(osv.osv): """ try: try: - result = get_sys_logs(cr, uid) - except Exception: + result = get_sys_logs(self, cr, uid) + except Exception, ex: if cron_mode: # we don't want to see any stack trace in cron return False _logger.debug("Exception while sending a get logs messages", exc_info=1) From 1da06f3bfe14be5bece5116bdd88b7077cf01604 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 22 Oct 2012 16:40:21 +0200 Subject: [PATCH 72/80] [FIX] better fix for previous m2m kanban problem bzr revid: nicolas.vanhoren@openerp.com-20121022144021-h1oqgb0d0h6aepfl --- addons/web/static/src/js/view_form.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 87673865ee8..dc6c4d0f0b3 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -4160,6 +4160,9 @@ instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend( } this._super(value_); }, + get_value: function() { + return [commands.replace_with(this.get('value'))]; + }, load_view: function() { var self = this; this.kanban_view = new instance.web.form.Many2ManyKanbanView(this, this.dataset, false, { @@ -4187,12 +4190,13 @@ instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend( }, render_value: function() { var self = this; + this.dataset.set_ids(this.get("value")); this.is_loaded = this.is_loaded.pipe(function() { return self.kanban_view.do_search(self.build_domain(), self.dataset.get_context(), []); }); }, dataset_changed: function() { - this.set({'value': [commands.replace_with(this.dataset.ids)]}); + this.set({'value': this.dataset.ids}); }, open_popup: function(type, unused) { if (type !== "form") From db54c70650f0cedc703bb48cde521baa0da303c8 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 22 Oct 2012 17:22:57 +0200 Subject: [PATCH 73/80] [FIX] resolved problem with buttons in views, also removed default Close button in wizards bzr revid: nicolas.vanhoren@openerp.com-20121022152257-yxcz0j73b4azeqr1 --- addons/web/static/src/js/view_form.js | 1 - addons/web/static/src/js/views.js | 1 - 2 files changed, 2 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index dc6c4d0f0b3..506e0f199fe 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -168,7 +168,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM this.$buttons = $(QWeb.render("FormView.buttons", {'widget':self})); if (this.options.$buttons) { - this.options.$buttons.children().remove(); this.$buttons.appendTo(this.options.$buttons); } else { this.$el.find('.oe_form_buttons').replaceWith(this.$buttons); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 2a5e1c4587e..103ad7a2661 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -300,7 +300,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ this.dialog_widget.destroy(); if (this.dialog === null || this.dialog.isDestroyed()) { this.dialog = new instance.web.Dialog(this, { - buttons: {"Close": function() {$(this).dialog("close")}}, dialogClass: executor.klass, }); this.dialog.on("closing", null, options.on_close); From 6972b3402946b5641a073a1405995ac7c76a9199 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 22 Oct 2012 18:01:34 +0200 Subject: [PATCH 74/80] [REM] stuff in list view, may or may not still work. It's all fme's fault anyway FME MA TUER bzr revid: xmo@openerp.com-20121022160134-yaze6n43h98c193t --- addons/web/static/src/js/view_list.js | 41 ++++++--------------------- addons/web/static/src/js/views.js | 4 +-- 2 files changed, 11 insertions(+), 34 deletions(-) diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 29bc81ea9ec..fe577c91840 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -145,7 +145,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi */ start: function() { this.$el.addClass('oe_list'); - return this.reload_view(null, null, true); + return this.start(); }, /** * Returns the style for the provided record in the current view (from the @@ -219,7 +219,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi * @param {Object} data.fields_view.arch current list view descriptor * @param {Boolean} grouped Is the list view grouped */ - load_list: function(data, grouped) { + load_list: function(data) { var self = this; this.fields_view = data; this.name = "" + this.fields_view.arch.attrs.string; @@ -245,7 +245,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi }).value(); } - this.setup_columns(this.fields_view.fields, grouped); + this.setup_columns(this.fields_view.fields, this.grouped); this.$el.html(QWeb.render(this._template, this)); this.$el.addClass(this.fields_view.arch.attrs['class']); @@ -282,7 +282,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi // Add button if (!this.$buttons) { - this.$buttons = $(QWeb.render("ListView.buttons", {'widget':self})); + this.$buttons = $(QWeb.render("ListView.buttons", {'widget':this})); if (this.options.$buttons) { this.$buttons.appendTo(this.options.$buttons); } else { @@ -290,12 +290,12 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi } this.$buttons.find('.oe_list_add') .click(this.proxy('do_add_record')) - .prop('disabled', grouped); + .prop('disabled', this.grouped); } // Pager if (!this.$pager) { - this.$pager = $(QWeb.render("ListView.pager", {'widget':self})); + this.$pager = $(QWeb.render("ListView.pager", {'widget':this})); if (this.options.$buttons) { this.$pager.appendTo(this.options.$pager); } else { @@ -359,7 +359,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi this.sidebar.add_toolbar(this.fields_view.toolbar); this.sidebar.$el.hide(); } - this.trigger('list_view_loaded', data, grouped); + this.trigger('list_view_loaded', data, this.grouped); }, /** * Configures the ListView pager based on the provided dataset's information @@ -461,29 +461,6 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi } this._super(); }, - /** - * Reloads the list view based on the current settings (dataset & al) - * - * @param {Boolean} [grouped] Should the list be displayed grouped - * @param {Object} [context] context to send the server while loading the view - */ - reload_view: function (grouped, context, initial) { - var self = this; - var callback = function (field_view_get) { - self.load_list(field_view_get, grouped); - }; - if (this.embedded_view) { - return $.Deferred().then(callback).resolve(this.embedded_view); - } else { - return this.rpc('/web/view/load', { - model: this.model, - view_id: this.view_id, - view_type: "tree", - context: this.dataset.get_context(context), - toolbar: !!this.options.$sidebar - }).then(callback); - } - }, /** * re-renders the content of the list view * @@ -564,9 +541,9 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi group_by = null; } this.no_leaf = !!context['group_by_no_leaf']; + this.grouped = !!group_by; - this.reload_view(!!group_by, context).then( - this.proxy('reload_content')); + this.load_view(context).then(this.proxy('reload_content')); }, /** * Handles the signal to delete lines from the records list diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 103ad7a2661..f110b368196 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -1142,7 +1142,7 @@ instance.web.View = instance.web.Widget.extend({ start: function () { return this.load_view(); }, - load_view: function() { + load_view: function(context) { var self = this; if (this.embedded_view) { var def = $.Deferred(); @@ -1151,7 +1151,7 @@ instance.web.View = instance.web.Widget.extend({ self.trigger('view_loaded', r); }); } else { - var context = new instance.web.CompoundContext(this.dataset.get_context()); + var context = this.dataset.get_context(context || {}); if (! this.view_type) console.warn("view_type is not defined", this); return this.rpc("/web/view/load", { From 3b5b24b72e7a695898ef51f431c741a4e104e96c Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 22 Oct 2012 18:14:26 +0200 Subject: [PATCH 75/80] [FIX] m2o switches correctly its button bzr revid: nicolas.vanhoren@openerp.com-20121022161426-1oqwa8e3n6kh7pba --- addons/web/static/src/js/view_form.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 506e0f199fe..850a334c40b 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3119,8 +3119,10 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc if (!this.get("effective_readonly")) { this.$input.val(str.split("\n")[0]); this.current_display = this.$input.val(); - if(this.is_false()){ + if (this.is_false()) { this.$('.oe_m2o_cm_button').css({'display':'none'}); + } else { + this.$('.oe_m2o_cm_button').css({'display':'inline'}); } } else { var lines = _.escape(str).split("\n"); From 6280e223be743674b85cb1bc8c1e4dbdcf1a7e75 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 22 Oct 2012 18:16:11 +0200 Subject: [PATCH 76/80] [REV] Not my fault afterall. bzr revid: fme@openerp.com-20121022161611-d4gik77mk1fvtojb --- addons/web/static/src/js/view_list.js | 41 +++++++++++++++++++++------ addons/web/static/src/js/views.js | 4 +-- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index fe577c91840..29bc81ea9ec 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -145,7 +145,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi */ start: function() { this.$el.addClass('oe_list'); - return this.start(); + return this.reload_view(null, null, true); }, /** * Returns the style for the provided record in the current view (from the @@ -219,7 +219,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi * @param {Object} data.fields_view.arch current list view descriptor * @param {Boolean} grouped Is the list view grouped */ - load_list: function(data) { + load_list: function(data, grouped) { var self = this; this.fields_view = data; this.name = "" + this.fields_view.arch.attrs.string; @@ -245,7 +245,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi }).value(); } - this.setup_columns(this.fields_view.fields, this.grouped); + this.setup_columns(this.fields_view.fields, grouped); this.$el.html(QWeb.render(this._template, this)); this.$el.addClass(this.fields_view.arch.attrs['class']); @@ -282,7 +282,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi // Add button if (!this.$buttons) { - this.$buttons = $(QWeb.render("ListView.buttons", {'widget':this})); + this.$buttons = $(QWeb.render("ListView.buttons", {'widget':self})); if (this.options.$buttons) { this.$buttons.appendTo(this.options.$buttons); } else { @@ -290,12 +290,12 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi } this.$buttons.find('.oe_list_add') .click(this.proxy('do_add_record')) - .prop('disabled', this.grouped); + .prop('disabled', grouped); } // Pager if (!this.$pager) { - this.$pager = $(QWeb.render("ListView.pager", {'widget':this})); + this.$pager = $(QWeb.render("ListView.pager", {'widget':self})); if (this.options.$buttons) { this.$pager.appendTo(this.options.$pager); } else { @@ -359,7 +359,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi this.sidebar.add_toolbar(this.fields_view.toolbar); this.sidebar.$el.hide(); } - this.trigger('list_view_loaded', data, this.grouped); + this.trigger('list_view_loaded', data, grouped); }, /** * Configures the ListView pager based on the provided dataset's information @@ -461,6 +461,29 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi } this._super(); }, + /** + * Reloads the list view based on the current settings (dataset & al) + * + * @param {Boolean} [grouped] Should the list be displayed grouped + * @param {Object} [context] context to send the server while loading the view + */ + reload_view: function (grouped, context, initial) { + var self = this; + var callback = function (field_view_get) { + self.load_list(field_view_get, grouped); + }; + if (this.embedded_view) { + return $.Deferred().then(callback).resolve(this.embedded_view); + } else { + return this.rpc('/web/view/load', { + model: this.model, + view_id: this.view_id, + view_type: "tree", + context: this.dataset.get_context(context), + toolbar: !!this.options.$sidebar + }).then(callback); + } + }, /** * re-renders the content of the list view * @@ -541,9 +564,9 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi group_by = null; } this.no_leaf = !!context['group_by_no_leaf']; - this.grouped = !!group_by; - this.load_view(context).then(this.proxy('reload_content')); + this.reload_view(!!group_by, context).then( + this.proxy('reload_content')); }, /** * Handles the signal to delete lines from the records list diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index f110b368196..103ad7a2661 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -1142,7 +1142,7 @@ instance.web.View = instance.web.Widget.extend({ start: function () { return this.load_view(); }, - load_view: function(context) { + load_view: function() { var self = this; if (this.embedded_view) { var def = $.Deferred(); @@ -1151,7 +1151,7 @@ instance.web.View = instance.web.Widget.extend({ self.trigger('view_loaded', r); }); } else { - var context = this.dataset.get_context(context || {}); + var context = new instance.web.CompoundContext(this.dataset.get_context()); if (! this.view_type) console.warn("view_type is not defined", this); return this.rpc("/web/view/load", { From b5b19a7a01402b9e344ffd6cee023231ce2f14fd Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Mon, 22 Oct 2012 18:24:21 +0200 Subject: [PATCH 77/80] [FIX] generate_tracking_message_id: use more randomness to avoid duplicates When several message IDs had to be generated for the same record at the same time, there was a high chance to get non-unique results. This possibly lead to data loss because some mail implementations might ignore multiple mails with the same ID (including OpenERP itself). On most operating systems the available time resolution precision is better than what we used (due to the float rounding of `%s`). Adding a bit of randomness doesn't hurt, as OpenERP will be used in increasingly distributed environments, so we now add an extra random part as well. bzr revid: odo@openerp.com-20121022162421-qr7nq8idihp5781u --- openerp/tools/misc.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index c9283a839d4..ba6ea1137d1 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -27,12 +27,11 @@ Miscellaneous tools used by OpenERP. """ from functools import wraps -import inspect import subprocess import logging import os +import random import re -import smtplib import socket import sys import threading @@ -40,13 +39,6 @@ import time import zipfile from collections import defaultdict from datetime import datetime -from email.MIMEText import MIMEText -from email.MIMEBase import MIMEBase -from email.MIMEMultipart import MIMEMultipart -from email.Header import Header -from email.Utils import formatdate, COMMASPACE -from email import Utils -from email import Encoders from itertools import islice, izip from lxml import etree from which import which @@ -363,7 +355,12 @@ def generate_tracking_message_id(res_id): Used to track the replies related to a given object thanks to the "In-Reply-To" or "References" fields that Mail User Agents will set. """ - return "<%s-openerp-%s@%s>" % (time.time(), res_id, socket.gethostname()) + try: + rnd = random.SystemRandom().random() + except NotImplementedError: + rnd = random.random() + rndstr = ("%.15f" % rnd)[2:] + return "<%.15f.%s-openerp-%s@%s>" % (time.time(), rndstr, res_id, socket.gethostname()) def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, openobject_id=False, debug=False, subtype='plain', headers=None, From c88b77a7c84be7a72913409bb1ee9ee6eb9a898e Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Mon, 22 Oct 2012 18:27:08 +0200 Subject: [PATCH 78/80] [IMP] remove whitespaces bzr revid: abo@openerp.com-20121022162708-a3q25ul0rnbtfnqv --- addons/web/static/src/css/base.sass | 41 +++++++++++++---------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 5140f3ceb3e..37830a8b109 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -120,7 +120,7 @@ $sheet-max-width: 860px font-size: 1px letter-spacing: -1px color: transparent - font-weight: normal + font-weight: normal &:before font: 21px "mnmliconsRegular" content: $icon-name @@ -130,7 +130,7 @@ $sheet-max-width: 860px font-size: 1px letter-spacing: -1px color: transparent - font-weight: normal + font-weight: normal &:before font: $size "entypoRegular" content: $icon-name @@ -611,7 +611,7 @@ $sheet-max-width: 860px vertical-align: top margin-top: 8px //margin-left set at 3px to avoid a strange overflow - margin-left: 3px + margin-left: 3px border-left: 4px solid transparent border-right: 4px solid transparent border-top: 4px solid#404040 @@ -804,7 +804,7 @@ $sheet-max-width: 860px display: none // }}} // Top Menu {{{ - + .oe_topbar width: 100% height: 32px @@ -977,7 +977,7 @@ $sheet-max-width: 860px .oe_menu_counter float: right text-shadow: 0 1px 1px rgba(0,0,0,0.2) - margin: 1px + margin: 1px padding: 1px 4px border: none &:hover @@ -1069,7 +1069,7 @@ $sheet-max-width: 860px // ViewManager common {{{ .oe_view_manager .oe_view_manager_body - height: inherit + height: inherit .oe_view_manager_view_kanban height: inherit @@ -1579,7 +1579,7 @@ $sheet-max-width: 860px display: none !important .oe_form .oe_form_field_date width: auto - // Sheet and padding + // Sheet and padding .oe_form_nosheet margin: 16px > header @@ -1625,7 +1625,7 @@ $sheet-max-width: 860px margin-left: 6px // }}} // FormView.custom tags and classes {{{ - .oe_form + .oe_form header .oe_tags margin: 5px 0 0 5px @@ -1788,7 +1788,7 @@ $sheet-max-width: 860px display: none .oe_datepicker_root display: inline-block - .oe_form_required + .oe_form_required input:not([disabled]):not([readonly]), select:not([disabled]):not([readonly]), textarea:not([disabled]):not([readonly]) background-color: #D2D2FF !important .oe_form_invalid @@ -1824,10 +1824,10 @@ $sheet-max-width: 860px position: relative width: 600px margin-left: 130px - margin-top: 32px + margin-top: 32px margin-bottom: 32px text-align: justify - + .oe_form_editable .oe_form .oe_form_field_integer input @@ -1905,7 +1905,7 @@ $sheet-max-width: 860px display: inline-block margin: 0 padding: 0 18px 0 0 - li + li display: inline-block list-style-type: none // It is probably a bad idea to modify this margin @@ -1935,7 +1935,7 @@ $sheet-max-width: 860px vertical-align: top overflow: hidden margin-left: -5px - span + span position: relative width: 24px height: 24px @@ -1948,7 +1948,7 @@ $sheet-max-width: 860px @include transform(rotate(45deg)) li.oe_active @include vertical-gradient(#729fcf, #3465a4) - .arrow span + .arrow span @include skew-gradient(#729fcf, #3465a4) .label color: white @@ -1956,20 +1956,20 @@ $sheet-max-width: 860px ul.oe_form_status_clickable li cursor: pointer - &:hover + &:hover @include vertical-gradient(darken(#fcfcfc, 8%), darken(#dedede, 8%)) .label text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede - .arrow span + .arrow span @include vertical-gradient(darken(#fcfcfc, 8%), darken(#dedede, 8%)) .label color: $link-color li.oe_active - &:hover + &:hover @include vertical-gradient(darken(#729fcf, 10%), darken(#3465a4, 10%)) .label text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4 - .arrow span + .arrow span @include skew-gradient(darken(#729fcf, 10%), darken(#3465a4, 10%)) // }}} // FormView.one2many {{{ @@ -2186,7 +2186,6 @@ $sheet-max-width: 860px .oe_list_cannot_delete .oe_list_record_delete display: none !important - // }}} // Tree view {{{ .tree_header @@ -2237,7 +2236,6 @@ $sheet-max-width: 860px background-image: url(/web/static/src/img/collapse.gif) .treeview-tr.oe-treeview-first span, .treeview-td.oe-treeview-first span margin-left: 16px - // }}} // Debugging stuff {{{ .oe_layout_debugging @@ -2280,7 +2278,6 @@ $sheet-max-width: 860px background-attachment: fixed >* opacity: 0.70 - // }}} // The jQuery-ui overlay and Autocomplete are outside the .openerp div, please don't add indentation !!! @@ -2302,7 +2299,7 @@ div.ui-widget-overlay width: 100% padding: 0 a - padding: 1px 16px + padding: 1px 16px a.ui-corner-all @include radius(0) a.ui-state-active From 9ed87abad0c2272d04a57f0aa52e3e7980c7981c Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Mon, 22 Oct 2012 18:46:42 +0200 Subject: [PATCH 79/80] [IMP] add a rule to hide the create incentive in list view this patch would deserve to be extented to the kanban view bzr revid: abo@openerp.com-20121022164642-csadhjemb8zyzag6 --- addons/web/static/src/css/base.sass | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 37830a8b109..568db634815 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -2178,7 +2178,9 @@ $sheet-max-width: 860px .oe_list_handle @include text-to-entypo-icon("}",#E0E0E0,18px) margin-right: 7px - + .oe_list_cannot_create + .oe_view_nocontent_create + display: none .oe_list_cannot_edit .oe_list_header_handle, .oe_list_field_handle display: none !important From 2f4bf4641e35d4dff70c6af5e490b60030624afb Mon Sep 17 00:00:00 2001 From: Antonin Bourguignon Date: Mon, 22 Oct 2012 18:49:14 +0200 Subject: [PATCH 80/80] [IMP] parse SASS and update CSS bzr revid: abo@openerp.com-20121022164914-vqaivy1eyplo13e8 --- addons/web/static/src/css/base.css | 5204 +++++++++++++--------------- 1 file changed, 2335 insertions(+), 2869 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index eba41b23776..565bf9c12f5 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1,4 +1,4 @@ -@charset "utf-8"; +@charset "UTF-8"; @font-face { font-family: "mnmliconsRegular"; src: url("/web/static/src/font/mnmliconsv21-webfont.eot") format("eot"); @@ -6,8 +6,7 @@ src: url("/web/static/src/font/mnmliconsv21-webfont.ttf") format("truetype"); src: url("/web/static/src/font/mnmliconsv21-webfont.svg") format("svg") active; font-weight: normal; - font-style: normal; -} + font-style: normal; } @font-face { font-family: "EntypoRegular"; @@ -17,22 +16,17 @@ src: url("/web/static/src/font/entypo-webfont.ttf") format("truetype"); src: url("/web/static/src/font/entypo-webfont.svg") format("svg") active; font-weight: normal; - font-style: normal; -} + font-style: normal; } @media print { .oe_topbar, .oe_leftbar, .oe_loading { - display: none !important; - } -} + display: none !important; } } .openerp.openerp_webclient_container { - height: 100%; -} + height: 100%; } .text-tag .text-button { height: auto !important; - min-height: 16px; -} + min-height: 16px; } .openerp { padding: 0; @@ -44,2853 +38,2332 @@ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); /* http://www.quirksmode.org/dom/inputfile.html * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image - */ -} -.openerp :-moz-placeholder { - color: #afafb6 !important; - font-style: italic !important; -} -.openerp ::-webkit-input-placeholder { - color: #afafb6 !important; - font-style: italic !important; -} -.openerp a { - text-decoration: none; - cursor: pointer !important; -} -.openerp table { - padding: 0; - border-collapse: collapse; -} -.openerp thead { - font-weight: bold; - background-color: #f0f0f0; -} -.openerp thead th { - border-left: 1px solid #dfdfdf; -} -.openerp thead th:first-child { - border-left: none; -} -.openerp thead th.null { - border-left: none; -} -.openerp th, .openerp td { - padding: 0; - text-align: left; -} -.openerp th { - font-weight: bold; - vertical-align: middle; -} -.openerp td { - vertical-align: top; -} -.openerp .zebra tbody tr:nth-child(odd) td { - background-color: #f0f0fa; - background-color: #f0f0fa; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); - background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); -} -.openerp .zebra tbody tr:hover td { - background-color: #eeeeee; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eeeeee), to(#dedede)); - background-image: -webkit-linear-gradient(top, #eeeeee, #dedede); - background-image: -moz-linear-gradient(top, #eeeeee, #dedede); - background-image: -ms-linear-gradient(top, #eeeeee, #dedede); - background-image: -o-linear-gradient(top, #eeeeee, #dedede); - background-image: linear-gradient(to bottom, #eeeeee, #dedede); -} -.openerp input, .openerp textarea, .openerp select { - padding: 2px 4px; - border: 1px solid #cccccc; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - background: white; -} -.openerp img { - vertical-align: middle; -} -.openerp h4 { - margin: 4px 0; -} -.openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp input[type='submit'], .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { - display: inline-block; - border: 1px solid rgba(0, 0, 0, 0.4); - color: #4c4c4c; - margin: 0; - padding: 3px 12px; - font-size: 13px; - text-align: center; - background-color: #efefef; - background-image: -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); - background-image: -webkit-linear-gradient(top, #efefef, #d8d8d8); - background-image: -moz-linear-gradient(top, #efefef, #d8d8d8); - background-image: -ms-linear-gradient(top, #efefef, #d8d8d8); - background-image: -o-linear-gradient(top, #efefef, #d8d8d8); - background-image: linear-gradient(to bottom, #efefef, #d8d8d8); - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); - -webkit-font-smoothing: antialiased; - outline: none; -} -.openerp a.button:hover, .openerp button:hover, .openerp input[type='submit']:hover, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-hover { - background-color: #f6f6f6; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); - background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); - cursor: pointer; - background-position: 0; -} -.openerp a.button:focus, .openerp button:focus, .openerp input[type='submit']:focus, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-focus { - border: 1px solid #80bfff; - background-position: 0; - background-color: #f6f6f6; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); - background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); - -moz-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; - -webkit-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; -} -.openerp a.button:active, .openerp a.button.active, .openerp button:active, .openerp button.active, .openerp input[type='submit']:active, .openerp input[type='submit'].active, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-active { - background-color: #e3e3e3; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); - background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -moz-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -ms-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -o-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: linear-gradient(to bottom, #e3e3e3, #f6f6f6); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp a.button.disabled, .openerp button:disabled, .openerp input[type='submit']:disabled { - background: #efefef !important; - border: 1px solid #d1d1d1 !important; - -moz-box-shadow: none !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - color: #aaaaaa !important; - cursor: default; - text-shadow: 0 1px 1px white !important; -} -.openerp .ui-widget-content a { - color: #7c7bad; -} -.openerp .oe_bounce_container { - display: inline-block; -} -.openerp .ui-tabs { - position: static; -} -.openerp.ui-dialog { - display: none; - padding: 6px; - background-color: rgba(60, 60, 60, 0.7); - border: 1px solid; - border-color: #888888 #555555 #444444; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - -webkit-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.openerp.ui-dialog .ui-dialog-content { - padding: 0px; -} -.openerp.ui-dialog .ui-dialog-titlebar, .openerp.ui-dialog .ui-dialog-content, .openerp.ui-dialog .ui-dialog-buttonpane { - padding: 16px; -} -.openerp.ui-dialog .ui-dialog-titlebar { - border-bottom: 1px solid #cacaca; - -moz-border-radius: 2px 2px 0 0; - -webkit-border-radius: 2px 2px 0 0; - border-radius: 2px 2px 0 0; - background-color: #fcfcfc; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp.ui-dialog .ui-dialog-titlebar .ui-dialog-title { - margin: 0; - padding: 0; -} -.openerp.ui-dialog .ui-widget-header { - border: none; -} -.openerp.ui-dialog .ui-dialog-content { - background: white; -} -.openerp.ui-dialog .ui-dialog-buttonpane { - border-top: 1px solid #e0e0e0; - background: #f5f7f9; - margin: 0; - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .ui-dialog-buttonpane button { - margin: 0 4px 0 0; -} -.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: left; -} -.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { - margin-right: 4px; -} -.openerp.ui-dialog .ui-dialog-titlebar-close { - padding: 0; -} -.openerp.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick { - display: none; -} -.openerp.ui-dialog .ui-dialog-titlebar-close:before { - content: "×"; - font-size: 18px; - font-weight: bold; - line-height: 16px; - color: black; - text-shadow: 0 1px 0 white; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.openerp.ui-dialog .ui-dialog-titlebar-close:before:hover { - color: black; - text-decoration: none; -} -.openerp.ui-dialog .oe_about { - background-color: white; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .oe_about a { - color: #7c7bad; -} -.openerp.ui-dialog .oe_about a:hover { - text-decoration: underline; -} -.openerp.ui-dialog .oe_about a:focus { - outline: none; -} -.openerp.ui-dialog .oe_about .oe_logo { - margin-left: -6px; -} -.openerp.ui-dialog .oe_about .oe_bottom { - position: absolute; - top: 50%; - left: 0; - right: 0; - bottom: 0; - text-shadow: 0 1px 1px #999999; - background-color: #b41616; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); - background-image: -webkit-linear-gradient(top, #b41616, #600606); - background-image: -moz-linear-gradient(top, #b41616, #600606); - background-image: -ms-linear-gradient(top, #b41616, #600606); - background-image: -o-linear-gradient(top, #b41616, #600606); - background-image: linear-gradient(to bottom, #b41616, #600606); - color: #eeeeee; - padding: 0 16px; - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .oe_about .oe_bottom a { - color: #eeeeee; -} -.openerp.ui-dialog.oe_act_window .ui-dialog-content { - padding: 0px; -} -.openerp .modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: black; - filter: alpha(opacity=30); - opacity: 0.3; -} -.openerp .oe_i { - font-family: "mnmliconsRegular" !important; - font-size: 21px; - font-weight: 300 !important; -} -.openerp .oe_e { - font-family: "entypoRegular" !important; - font-size: 34px; - font-weight: 300 !important; -} -.openerp .oe_left { - float: left; - margin-right: 8px; -} -.openerp .oe_right { - float: right; - margin-left: 8px; -} -.openerp .oe_text_right { - text-align: right; -} -.openerp .oe_clear { - clear: both; -} -.openerp .oe_wait { - cursor: wait; -} -.openerp .oe_fade { - color: #888888; - font-weight: normal; -} -.openerp .oe_bold { - font-weight: bold; -} -.openerp .oe_inline { - width: auto !important; -} -.openerp .oe_highlight { - color: white; - background: #dc5f59; -} -.openerp button.oe_highlight { - background-color: #df3f3f; - background-image: -webkit-gradient(linear, left top, left bottom, from(#df3f3f), to(#a21a1a)); - background-image: -webkit-linear-gradient(top, #df3f3f, #a21a1a); - background-image: -moz-linear-gradient(top, #df3f3f, #a21a1a); - background-image: -ms-linear-gradient(top, #df3f3f, #a21a1a); - background-image: -o-linear-gradient(top, #df3f3f, #a21a1a); - background-image: linear-gradient(to bottom, #df3f3f, #a21a1a); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; -} -.openerp button.oe_highlight:hover { - background-color: #e25858; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e25858), to(#ab1b1b)); - background-image: -webkit-linear-gradient(top, #e25858, #ab1b1b); - background-image: -moz-linear-gradient(top, #e25858, #ab1b1b); - background-image: -ms-linear-gradient(top, #e25858, #ab1b1b); - background-image: -o-linear-gradient(top, #e25858, #ab1b1b); - background-image: linear-gradient(to bottom, #e25858, #ab1b1b); -} -.openerp button.oe_highlight:active { - background-color: #c52020; - background-image: -webkit-gradient(linear, left top, left bottom, from(#c52020), to(#d22323)); - background-image: -webkit-linear-gradient(top, #c52020, #d22323); - background-image: -moz-linear-gradient(top, #c52020, #d22323); - background-image: -ms-linear-gradient(top, #c52020, #d22323); - background-image: -o-linear-gradient(top, #c52020, #d22323); - background-image: linear-gradient(to bottom, #c52020, #d22323); -} -.openerp .oe_background_grey { - background: #eeeeee !important; -} -.openerp .oe_form_dirty .oe_highlight_on_dirty { - color: white; - background: #dc5f59; - font-weight: bold; -} -.openerp .oe_form_dirty button.oe_highlight_on_dirty { - background-color: #dc5f59; - background-image: -webkit-gradient(linear, left top, left bottom, from(#dc5f59), to(#b33630)); - background-image: -webkit-linear-gradient(top, #dc5f59, #b33630); - background-image: -moz-linear-gradient(top, #dc5f59, #b33630); - background-image: -ms-linear-gradient(top, #dc5f59, #b33630); - background-image: -o-linear-gradient(top, #dc5f59, #b33630); - background-image: linear-gradient(to bottom, #dc5f59, #b33630); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_form_dirty button.oe_highlight_on_dirty:hover { - background: #ed6f6a; -} -.openerp .oe_title { - width: 50%; - float: left; -} -.openerp .oe_title:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} -.openerp .oe_button_box { - width: 270px; - text-align: right; -} -.openerp .oe_button_box button { - margin: 4px; -} -.openerp .oe_avatar > img { - max-height: 90px; - max-width: 90px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); - border: none; - margin-bottom: 10px; -} -.openerp .oe_avatar + div { - margin-left: 5px; -} -.openerp .oe_image_small > img { - max-width: 50px; - max-height: 50px; -} -.openerp .oe_image_medium > img { - max-width: 180px; - max-height: 180px; -} -.openerp .oe_button.oe_link { - border: none; - padding: 0; - margin: 0; - background: none; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_button.oe_link img { - display: none; -} -.openerp .oe_button.oe_link span { - border: none; - padding: 0; - margin: 0; - background: none; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - color: #7c7bad; - font-weight: bold; -} -.openerp .oe_button.oe_link span:hover { - text-decoration: underline; -} -.openerp .oe_webclient .oe_star_on, .openerp .oe_webclient .oe_star_off { - color: #cccccc; - text-shadow: 0 0 2px black; - vertical-align: top; - position: relative; - top: -5px; -} -.openerp .oe_webclient .oe_star_on:hover, .openerp .oe_webclient .oe_star_off:hover { - text-decoration: none; -} -.openerp .oe_webclient .oe_star_on { - color: gold; -} -.openerp p.oe_grey { - max-width: 650px; -} -.openerp .oe_grey { - color: #aaaaaa; -} -.openerp .oe_tag { - border: 1px solid #afafb6; - font-size: 11px; - padding: 2px 4px; - margin: 0 2px 2px 0; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - background: #f0f0fa; - color: #4c4c4c; -} -.openerp .oe_tag_dark { - background: #7c7bad; - color: #eeeeee; -} -.openerp .oe_tags { - margin-bottom: 1px; -} -.openerp .oe_tags.oe_inline { - min-width: 250px; -} -.openerp .oe_tags .text-wrap { - width: 100% !important; -} -.openerp .oe_tags .text-wrap textarea { - width: 100% !important; -} -.openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { - font-style: italic; - text-decoration: none; -} -.openerp.oe_tooltip { - font-size: 12px; -} -.openerp.oe_tooltip .oe_tooltip_string { - color: #ffdd55; - font-weight: bold; - font-size: 13px; -} -.openerp.oe_tooltip .oe_tooltip_help { - white-space: pre-wrap; -} -.openerp.oe_tooltip .oe_tooltip_technical { - padding: 0 0 4px 0; - margin: 5px 0 0 15px; -} -.openerp.oe_tooltip .oe_tooltip_technical li { - list-style: circle; -} -.openerp.oe_tooltip .oe_tooltip_technical_title { - font-weight: bold; -} -.openerp.oe_tooltip .oe_tooltip_close { - margin: -5px 0 0 2px; - cursor: default; - float: right; - color: white; -} -.openerp.oe_tooltip .oe_tooltip_close:hover { - color: #999999; - cursor: pointer; -} -.openerp.oe_tooltip .oe_tooltip_message { - max-width: 310px; -} -.openerp .oe_notebook { - margin: 8px 0; - padding: 0 16px; - list-style: none; - zoom: 1; -} -.openerp .oe_notebook.ui-corner-all { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.openerp .oe_notebook:before, .openerp .oe_notebook:after { - display: table; - content: ""; - zoom: 1; -} -.openerp .oe_notebook:after { - clear: both; -} -.openerp .oe_notebook > li { - float: left; -} -.openerp .oe_notebook > li > a { - display: block; - color: #4c4c4c; -} -.openerp .oe_notebook { - border-color: #dddddd; - border-style: solid; - border-width: 0 0 1px; -} -.openerp .oe_notebook > li { - position: relative; -} -.openerp .oe_notebook > li > a { - padding: 0 12px; - margin-right: 2px; - line-height: 30px; - border: 1px solid transparent; - -moz-border-radius: 4px 4px 0 0; - -webkit-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.openerp .oe_notebook > li > a:hover { - text-decoration: none; - background-color: #eeeeee; - border-color: #eeeeee #eeeeee #dddddd; -} -.openerp .oe_notebook > li.ui-state-active > a, .openerp .oe_notebook > li.ui-state-active > a:hover { - background-color: white; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.openerp .oe_notebook_page { - padding: 0; -} -.openerp div.ui-tabs { - padding: 3px 0px 3px 0px; -} -.openerp .ui-tabs-hide { - display: none; -} -.openerp .oe_dropdown, .openerp .oe_dropdown_hover, .openerp .oe_dropdown_toggle { - position: relative; - cursor: pointer; -} -.openerp .oe_dropdown_toggle { - color: rgba(0, 0, 0, 0.5); - font-weight: normal; -} -.openerp .oe_dropdown_hover:hover .oe_dropdown_menu, .openerp .oe_dropdown_menu.oe_opened { - display: block; -} -.openerp .oe_dropdown_menu { - display: none; - position: absolute; - top: 26px; - left: 0; - z-index: 3; - margin: 0; - padding: 0; - border: 1px solid #afafb6; - background: white; - padding: 4px 0; - min-width: 140px; - text-align: left; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); -} -.openerp .oe_dropdown_menu > li { - list-style-type: none; - float: none; - display: block; - position: relative; - margin: 0; - padding: 2px 8px; -} -.openerp .oe_dropdown_menu > li:hover { - background-color: #f0f0fa; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); - background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_dropdown_menu > li > a { - white-space: nowrap; - display: block; - color: #4c4c4c; - text-decoration: none; -} -.openerp .oe_dropdown_menu > li > a:hover { - text-decoration: none; -} -.openerp .oe_dropdown_arrow:after { - width: 0; - height: 0; - display: inline-block; - content: "&darr"; - text-indent: -99999px; - vertical-align: top; - margin-top: 8px; - margin-left: 3px; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #404040; - filter: alpha(opacity=50); - opacity: 0.5; -} -.openerp .oe_sidebar { - white-space: nowrap; -} -.openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment { - height: 20px; - cursor: pointer; - padding-left: 6px; - margin-top: 6px; -} -.openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment span { - font-weight: bold; -} -.openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment .oe_hidden_input_file { - width: 200px; -} -.openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment:hover { - background-color: #f0f0fa; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); - background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_sidebar .oe_dropdown_menu li .oe_sidebar_delete_item { - position: absolute; - top: 4px; - right: 4px; - display: none; - width: 12px; - height: 12px; - padding: 1px; - color: #8786b7; - line-height: 8px; - text-align: center; - font-weight: bold; - text-shadow: 0 1px 1px white; -} -.openerp .oe_sidebar .oe_dropdown_menu li .oe_sidebar_delete_item:hover { - text-decoration: none; - color: white; - background: #8786b7; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} -.openerp .oe_sidebar .oe_dropdown_menu li:hover .oe_sidebar_delete_item { - display: inline-block; -} -.openerp .oe_loading { - display: none; - z-index: 100; - position: fixed; - top: 0; - right: 50%; - padding: 4px 12px; - background: #a61300; - color: white; - text-align: center; - border: 1px solid #990000; - border-top: none; - -moz-border-radius-bottomright: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.openerp .oe_notification { - z-index: 1050; -} -.openerp .oe_login { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); - text-align: center; - font-size: 14px; - height: 100%; -} -.openerp .oe_login ul, .openerp .oe_login li { - margin: 0; - list-style-type: none; - padding: 0 0 4px 0; -} -.openerp .oe_login button { - float: right; - display: inline-block; - cursor: pointer; - padding: 6px 16px; - border: 1px solid #222222; - color: white; - margin: 0; - background-color: #b92020; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b92020), to(#600606)); - background-image: -webkit-linear-gradient(top, #b92020, #600606); - background-image: -moz-linear-gradient(top, #b92020, #600606); - background-image: -ms-linear-gradient(top, #b92020, #600606); - background-image: -o-linear-gradient(top, #b92020, #600606); - background-image: linear-gradient(to bottom, #b92020, #600606); - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; -} -.openerp .oe_login input, .openerp .oe_login select { - width: 252px; - font-family: "Lucida Grande", Helvetica, Verdana, Arial; - border: 1px solid #999999; - background: whitesmoke; - -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); - -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); - box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} -.openerp .oe_login input { - margin-bottom: 9px; - padding: 5px 6px; -} -.openerp .oe_login select { - padding: 1px; -} -.openerp .oe_login .oe_login_dbpane { - position: fixed; - top: 0; - right: 8px; - padding: 5px 10px; - color: #eeeeee; - border: solid 1px #333333; - background: #1e1e1e; - background: rgba(30, 30, 30, 0.94); - -moz-border-radius: 0 0 8px 8px; - -webkit-border-radius: 0 0 8px 8px; - border-radius: 0 0 8px 8px; -} -.openerp .oe_login .oe_login_dbpane input { - padding: 2px 4px; - margin: 4px 0; -} -.openerp .oe_login .oe_login_bottom { - position: absolute; - top: 50%; - left: 0; - right: 0; - bottom: 0; - text-shadow: 0 1px 1px #999999; - background-color: #b41616; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); - background-image: -webkit-linear-gradient(top, #b41616, #600606); - background-image: -moz-linear-gradient(top, #b41616, #600606); - background-image: -ms-linear-gradient(top, #b41616, #600606); - background-image: -o-linear-gradient(top, #b41616, #600606); - background-image: linear-gradient(to bottom, #b41616, #600606); -} -.openerp .oe_login .oe_login_pane { - position: absolute; - top: 50%; - left: 50%; - margin: -160px -166px; - border: solid 1px #333333; - background: #1e1e1e; - background: rgba(30, 30, 30, 0.94); - padding: 22px 32px; - color: #eeeeee; - text-align: left; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); - -webkit-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); - box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); -} -.openerp .oe_login .oe_login_pane h2 { - margin-top: 0; - font-size: 18px; -} -.openerp .oe_login .oe_login_logo { - position: absolute; - top: -70px; - left: 0; - width: 100%; - margin: 0 auto; - text-align: center; -} -.openerp .oe_login .oe_login_footer { - position: absolute; - bottom: -40px; - left: 0; - width: 100%; - text-align: center; -} -.openerp .oe_login .oe_login_footer a { - color: #eeeeee; - margin: 0 8px; -} -.openerp .oe_login .oe_login_footer a:hover { - text-decoration: underline; -} -.openerp .oe_login .oe_login_footer span { - font-weight: bold; - font-size: 16px; -} -.openerp .oe_login .oe_login_error_message { - display: none; - background-color: #b41616; - color: #eeeeee; - padding: 14px 18px; - margin-top: 15px; - text-align: center; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); -} -.openerp .oe_login_invalid .oe_login_error_message { - display: inline-block; -} -.openerp .oe_database_manager { - background: white; - color: black; - text-align: left; -} -.openerp .oe_database_manager .oe_database_manager_menu { - color: black; -} -.openerp .oe_webclient { - width: 100%; - height: 100%; - border-spacing: 0px; -} -.openerp .oe_content_full_screen .oe_application { - top: 0; - left: 0; -} -.openerp .oe_content_full_screen .oe_topbar, .openerp .oe_content_full_screen .oe_leftbar { - display: none; -} -.openerp .oe_topbar { - width: 100%; - height: 32px; - background-color: #414141; - background-color: #646060; - background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626)); - background-image: -webkit-linear-gradient(top, #646060, #262626); - background-image: -moz-linear-gradient(top, #646060, #262626); - background-image: -ms-linear-gradient(top, #646060, #262626); - background-image: -o-linear-gradient(top, #646060, #262626); - background-image: linear-gradient(to bottom, #646060, #262626); -} -.openerp .oe_topbar .oe_topbar_item { - display: block; - padding: 5px 10px 7px; - line-height: 20px; - height: 20px; - text-decoration: none; - color: #eeeeee; - vertical-align: top; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -webkit-transition: all 0.2s ease-out; - -moz-transition: all 0.2s ease-out; - -ms-transition: all 0.2s ease-out; - -o-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; -} -.openerp .oe_topbar .oe_topbar_item:hover { - background: rgba(0, 0, 0, 0.2); - text-shadow: black 0px 0px 3px; - color: white; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; -} -.openerp .oe_topbar .oe_topbar_avatar { - width: 24px; - height: 24px; - margin: -2px 2px 0 0; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} -.openerp .oe_topbar .oe_topbar_avatar { - vertical-align: top; -} -.openerp .oe_topbar .oe_dropdown_arrow:after { - border-top: 4px solid white; -} -.openerp .oe_topbar .oe_dropdown_menu { - top: 32px; - background: #333333; - background: rgba(37, 37, 37, 0.9); - border-color: #999999; - border-color: rgba(0, 0, 0, 0.2); - border-style: solid; - border-width: 0 1px 1px; - -moz-border-radius: 0 0 6px 6px; - -webkit-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.openerp .oe_topbar .oe_dropdown_menu li { - float: none; - padding: 3px 12px; -} -.openerp .oe_topbar .oe_dropdown_menu li a { - color: #eeeeee; -} -.openerp .oe_topbar .oe_dropdown_menu li:hover { - background-color: #292929; - background-image: -webkit-gradient(linear, left top, left bottom, from(#292929), to(#191919)); - background-image: -webkit-linear-gradient(top, #292929, #191919); - background-image: -moz-linear-gradient(top, #292929, #191919); - background-image: -ms-linear-gradient(top, #292929, #191919); - background-image: -o-linear-gradient(top, #292929, #191919); - background-image: linear-gradient(to bottom, #292929, #191919); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_menu { - float: left; - padding: 0; - margin: 0; - font-size: 13px; -} -.openerp .oe_menu > li { - list-style-type: none; - padding: 0; - margin: 0; - float: left; - display: block; - color: #eeeeee; -} -.openerp .oe_menu > li > a { - display: block; - padding: 5px 10px 7px; - line-height: 20px; - height: 20px; - text-decoration: none; - color: #eeeeee; - vertical-align: top; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -webkit-transition: all 0.2s ease-out; - -moz-transition: all 0.2s ease-out; - -ms-transition: all 0.2s ease-out; - -o-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; -} -.openerp .oe_menu > li > a:hover { - background: rgba(0, 0, 0, 0.2); - text-shadow: black 0px 0px 3px; - color: white; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; -} -.openerp .oe_menu > li > .oe_active { - background: rgba(0, 0, 0, 0.3); - text-shadow: black 0px 0px 3px; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; -} -.openerp .oe_user_menu { - float: right; - padding: 0; - margin: 0; -} -.openerp .oe_user_menu li { - list-style-type: none; - float: left; -} -.openerp .oe_user_menu .oe_dropdown_menu { - right: -1px; -} -.openerp .oe_systray > div { - float: left; - padding: 0 4px 0 4px; -} -.openerp .oe_systray { - float: right; -} -.openerp .oe_leftbar { - display: none; - width: 220px; - background: #f0eeee; - border-right: 1px solid #afafb6; - text-shadow: 0 1px 1px white; - padding-bottom: 16px; -} -.openerp a.oe_logo { - width: 220px; - display: block; - text-align: center; - height: 70px; - line-height: 70px; -} -.openerp a.oe_logo img { - height: 40px; - width: 157px; - margin: 14px 0; -} -.openerp .oe_footer { - position: fixed; - bottom: 0; - padding: 4px 0; - background: #f0eeee; - width: 220px; - text-align: center; -} -.openerp .oe_footer a { - font-weight: 800; - font-family: serif; - font-size: 16px; - color: black; -} -.openerp .oe_footer a span { - color: #c81010; - font-style: italic; -} -.openerp .oe_secondary_menu_section { - font-weight: bold; - margin-left: 8px; - color: #7c7bad; -} -.openerp .oe_secondary_submenu { - padding: 2px 0 8px 0; - margin: 0; - width: 100%; - display: inline-block; -} -.openerp .oe_secondary_submenu li { - position: relative; - margin: 0; - padding: 1px 0 1px 20px !important; - list-style-type: none; -} -.openerp .oe_secondary_submenu li a { - display: block; - color: #4c4c4c; - padding: 2px 4px 2px 0; -} -.openerp .oe_secondary_submenu li .oe_menu_label { - position: absolute; - top: 1px; - right: 1px; - font-size: 10px; - background: #7c7bad; - color: white; - padding: 2px 4px; - margin: 1px 6px 0 0; - border: 1px solid lightGray; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); -} -.openerp .oe_secondary_submenu .oe_menu_counter { - float: right; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - margin: 1px; - padding: 1px 4px; - border: none; -} -.openerp .oe_secondary_submenu .oe_menu_counter:hover { - cursor: pointer; - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - -ms-transform: scale(1.1); - -o-transform: scale(1.1); - transform: scale(1.1); -} -.openerp .oe_secondary_submenu .oe_active { - border-top: 1px solid lightGray; - border-bottom: 1px solid #dedede; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); - background: #7c7bad; -} -.openerp .oe_secondary_submenu .oe_active a { - color: white; -} -.openerp .oe_secondary_submenu .oe_active .oe_menu_label { - background: #eeeeee; - color: #7c7bad; - text-shadow: 0 1px 1px white; - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -} -.openerp .oe_secondary_submenu .oe_active .oe_menu_counter { - background: #eeeeee; - color: #7c7bad; - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); -} -.openerp .oe_secondary_submenu .oe_menu_toggler:before { - width: 0; - height: 0; - display: inline-block; - content: "&darr"; - text-indent: -99999px; - vertical-align: top; - margin-left: -12px; - margin-top: 4px; - margin-right: 4px; - border-top: 4px solid transparent; - border-bottom: 4px solid transparent; - border-left: 4px solid #4c4c4c; - filter: alpha(opacity=50); - opacity: 0.5; -} -.openerp .oe_secondary_submenu .oe_menu_opened:before { - margin-top: 6px; - margin-left: -16px; - margin-right: 4px; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #4c4c4c; -} -.openerp .oe_about { - background-color: white; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp .oe_about a { - color: #7c7bad; -} -.openerp .oe_about a:hover { - text-decoration: underline; -} -.openerp .oe_about a:focus { - outline: none; -} -.openerp .oe_about .oe_logo { - margin-left: -6px; -} -.openerp .oe_about .oe_bottom { - position: absolute; - top: 50%; - left: 0; - right: 0; - bottom: 0; - text-shadow: 0 1px 1px #999999; - background-color: #b41616; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); - background-image: -webkit-linear-gradient(top, #b41616, #600606); - background-image: -moz-linear-gradient(top, #b41616, #600606); - background-image: -ms-linear-gradient(top, #b41616, #600606); - background-image: -o-linear-gradient(top, #b41616, #600606); - background-image: linear-gradient(to bottom, #b41616, #600606); - color: #eeeeee; - padding: 0 16px; - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp .oe_about .oe_bottom a { - color: #eeeeee; -} -.openerp .oe_application { - width: 100%; -} -.openerp .oe_application a { - color: #7c7bad; -} -.openerp .oe_application a:hover { - text-decoration: underline; -} -.openerp .oe_application > div { - height: 100%; -} -.openerp .oe_application .oe_breadcrumb_item:not(:last-child) { - display: inline-block; - max-width: 7em; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.openerp .oe_view_manager .oe_view_manager_body { - height: inherit; -} -.openerp .oe_view_manager .oe_view_manager_view_kanban { - height: inherit; -} -.openerp .oe_view_manager table.oe_view_manager_header { - width: 100%; - table-layout: fixed; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row { - clear: both; - text-shadow: 0 1px 1px white; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:last-child td { - padding-top: 0; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:first-child td { - padding-top: 8px; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_sidebar { - margin: 0px auto; - text-align: center; -} -.openerp .oe_view_manager table.oe_view_manager_header td { - line-height: 26px; -} -.openerp .oe_view_manager table.oe_view_manager_header h2 { - font-size: 18px; - margin: 0; - float: left; -} -.openerp .oe_view_manager table.oe_view_manager_header h2 a { - color: #7c7bad; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_dropdown_menu { - line-height: normal; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group { - display: inline-block; - border: 1px solid #ababab; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li { - float: left; - border-right: 1px solid #ababab; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li:last-child { - border: none; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a { - color: #4c4c4c; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a:hover { - text-decoration: none; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active { - background: #999999; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active a { - color: white; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_buttons { - white-space: nowrap; -} -.openerp .oe_view_manager .oe_view_manager_pager { - line-height: 26px; -} -.openerp .oe_view_manager .oe_view_manager_pager .oe_list_pager_single_page .oe_pager_group { - display: none; -} -.openerp .oe_view_manager .oe_pager_value { - float: left; - margin-right: 8px; -} -.openerp .oe_view_manager ul.oe_pager_group { - padding: 0; - margin: 0; -} -.openerp .oe_view_manager .oe_pager_group { - float: left; - height: 24px; - line-height: 24px; - display: inline-block; - border: 1px solid #ababab; - cursor: pointer; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; -} -.openerp .oe_view_manager .oe_pager_group li { - height: 24px; - line-height: 24px; - padding: 0; - margin: 0; - list-style-type: none; - float: left; - border-right: 1px solid #ababab; -} -.openerp .oe_view_manager .oe_pager_group li:last-child { - border: none; -} -.openerp .oe_view_manager .oe_pager_group a { - color: #4c4c4c; - padding: 0 8px; -} -.openerp .oe_view_manager .oe_pager_group a:hover { - text-decoration: none; -} -.openerp .oe_view_manager .oe_pager_group .active { - background: #999999; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; -} -.openerp .oe_view_manager .oe_pager_group .active a { - color: white; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); -} -.openerp .oe_view_manager .oe_view_manager_switch { - padding: 0; - margin: 0 0 0 8px; -} -.openerp .oe_view_manager .oe_view_manager_switch li { - margin: 0; - width: 24px; - height: 24px; - line-height: 16px; - padding: 0; - text-align: center; - list-style-type: none; -} -.openerp .oe_view_manager .oe_view_manager_switch li a { - position: relative; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_list:after, .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_tree:after { - padding: 2px; - content: "i"; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_form:after { - content: "m"; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_graph:after { - font-family: "mnmliconsRegular" !important; - font-size: 21px; - font-weight: 300 !important; - content: "}"; - top: -2px; - position: relative; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_gantt:after { - font-family: "mnmliconsRegular" !important; - font-size: 21px; - font-weight: 300 !important; - content: "y"; - top: -2px; - position: relative; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_calendar:after { - content: "P"; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_kanban:after { - content: "k"; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_diagram:after { - content: "f"; -} -.openerp .oe_view_manager_current { - height: 100%; -} -.openerp .oe_view_manager_current > .oe_view_manager_header { - border-bottom: 1px solid #cacaca; - background-color: #fcfcfc; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); - -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); - -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); -} -.openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row td { - padding: 8px; -} -.openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row:first-child td { - padding-top: 8px; -} -.openerp .oe_view_manager_inline, .openerp .oe_view_manager_inlineview { - height: 100%; -} -.openerp .oe_view_manager_inline > .oe_view_manager_header, .openerp .oe_view_manager_inlineview > .oe_view_manager_header { - display: none; -} -.openerp .oe_popup_form > .oe_formview > .oe_form_pager { - display: none !important; -} -.openerp .oe_searchview { - cursor: text; - position: relative; - float: right; - padding: 1px 0; - line-height: 18px; - width: 400px; - border: 1px solid #ababab; - background: white; - -moz-border-radius: 13px; - -webkit-border-radius: 13px; - border-radius: 13px; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; -} -.openerp .oe_searchview input, .openerp .oe_searchview textarea { - padding: 3px; - height: 14px; - font-size: 12px; - line-height: 18px; -} -.openerp .oe_searchview.oe_focused { - border-color: #a6a6fe; - -moz-box-shadow: 0 1px 2px #a6a6fe inset; - -webkit-box-shadow: 0 1px 2px #a6a6fe inset; - box-shadow: 0 1px 2px #a6a6fe inset; -} -.openerp .oe_searchview .oe_searchview_clear { - cursor: pointer; - position: absolute; - top: 0; - right: 18px; - width: 15px; - height: 100%; - background: url(../img/search_reset.gif) center center no-repeat; -} -.openerp .oe_searchview .oe_searchview_unfold_drawer { - position: absolute; - top: 0; - right: 0; - height: 100%; - padding: 0 7px 0 4px; - color: #cccccc; - cursor: pointer; -} -.openerp .oe_searchview .oe_searchview_unfold_drawer:hover { - color: #999999; -} -.openerp .oe_searchview .oe_searchview_unfold_drawer:before { - position: absolute; - top: 10px; - right: 7px; - width: 0; - height: 0; - display: inline-block; - content: ""; - vertical-align: top; - border-top: 5px solid #4c4c4c; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - filter: alpha(opacity=50); - opacity: 0.5; -} -.openerp .oe_searchview .oe_searchview_search { - font-size: 1px; - letter-spacing: -1px; - color: transparent; - font-weight: normal; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - position: absolute; - left: 3px; - top: 1px; - padding: 0; - border: none; - background: transparent; -} -.openerp .oe_searchview .oe_searchview_search:before { - font: 21px "mnmliconsRegular"; - content: "r"; - color: #a3a3a3; -} -.openerp .oe_searchview .oe_searchview_facets { - min-height: 22px; - margin-left: 15px; -} -.openerp .oe_searchview .oe_searchview_facets * { - vertical-align: top; - display: inline-block; - line-height: 17px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { - height: 18px; - margin: 1px 0; - font-size: 11px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet:focus { - outline: none; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_input { - padding: 0 0 0 6px; - font-size: 12px; - height: 16px; - margin-top: 3px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_input:focus { - outline: none; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { - position: relative; - cursor: pointer; - padding: 0; - -webkit-font-smoothing: auto; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet:focus { - border-color: #a6a6fe; - -moz-box-shadow: 0 0 3px 1px #a6a6fe; - -webkit-box-shadow: 0 0 3px 1px #a6a6fe; - box-shadow: 0 0 3px 1px #a6a6fe; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_values { - background: #f0f0fa; - -moz-border-radius: 0 3px 3px 0; - -webkit-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category, .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value { - height: 18px; - padding: 0 4px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category { - color: white; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category.oe_i { - font-size: 16px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value { - border-left: 1px solid #afafb6; - text-shadow: 0 1px 1px white; - color: #4c4c4c; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value:last-child { - padding-right: 16px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_remove { - position: absolute; - top: 3px; - right: 3px; - color: #8786b7; - line-height: 8px; - width: 12px; - height: 12px; - padding-top: 1px; - text-align: center; - font-weight: bold; - cursor: pointer; - text-shadow: 0 1px 1px white; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_remove:hover { - color: white; - background: #8786b7; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} -.openerp .oe_searchview.oe_searchview_open_drawer .oe_searchview_drawer { - display: block; -} -.openerp .oe_searchview .oe_searchview_drawer { - position: absolute; - z-index: 100; - margin-top: 4px; - top: 100%; - right: -1px; - background-color: white; - min-width: 100%; - display: none; - border: 1px solid #afafb6; - text-align: left; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); -} -.openerp .oe_searchview .oe_searchview_drawer > div { - border-top: 1px solid #cccccc; - margin: 0; - padding: 8px; -} -.openerp .oe_searchview .oe_searchview_drawer > div:first-child { - border-top: none; - margin: 0; -} -.openerp .oe_searchview .oe_searchview_drawer h3 { - margin: 8px 4px 4px 12px; - color: #7c7bad; - font-size: 13px; -} -.openerp .oe_searchview .oe_searchview_drawer h4, .openerp .oe_searchview .oe_searchview_drawer h4 * { - margin: 0; - cursor: pointer; - font-weight: normal; - display: inline-block; -} -.openerp .oe_searchview .oe_searchview_drawer h4:hover, .openerp .oe_searchview .oe_searchview_drawer h4 *:hover { - background-color: #f0f0fa; -} -.openerp .oe_searchview .oe_searchview_drawer h4:before { - content: "▸ "; - color: #a3a3a3; -} -.openerp .oe_searchview .oe_searchview_drawer button { - margin: 4px 0; -} -.openerp .oe_searchview .oe_searchview_drawer .button { - border: none; - background: transparent; - padding: 0 2px; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section { - display: table; - width: 100%; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section > div { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - display: table-cell; - width: 50%; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section ul { - margin: 0 8px 8px; - padding: 0; - list-style: none; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li { - list-style: none; - padding: 2px 4px 2px 20px; - line-height: 14px; - color: inherit; - cursor: pointer; - position: relative; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li.oe_selected:before { - content: "W"; - font-family: "entypoRegular" !important; - font-size: 24px; - font-weight: 300 !important; - color: #a3a3a3; - position: absolute; - left: 4px; - top: -2px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li:hover { - background-color: #f0f0fa; -} -.openerp .oe_searchview .oe_searchview_drawer form { - margin-left: 12px; -} -.openerp .oe_searchview .oe_searchview_drawer form p { - margin: 4px 0; - line-height: 18px; -} -.openerp .oe_searchview .oe_searchview_drawer form button { - margin: 0 0 8px 0; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom { - padding: 0 8px 8px 8px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom form { - display: none; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li { - cursor: pointer; - position: relative; - line-height: 14px; - padding: 2px 4px 2px 20px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li:hover { - background-color: #f0f0fa; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li button { - position: absolute; - top: 0; - right: 5px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_dashboard form { - display: none; - margin-top: 2px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced form { - display: none; - margin-top: 8px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced button.oe_add_condition:before { - content: "Z"; - font-family: "entypoRegular" !important; - font-size: 24px; - font-weight: 300 !important; - margin-right: 4px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced ul { - list-style: none; - padding: 0; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li { - position: relative; - list-style: none; - margin: 0; - white-space: nowrap; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li:first-child .searchview_extended_prop_or { - visibility: hidden; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced .searchview_extended_prop_or { - opacity: 0.5; - margin-left: -14px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_opened h4:before { - content: "▾ "; - position: relative; - top: -1px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_opened form { - display: block; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete, .openerp .oe_searchview .oe_searchview_drawer .searchview_extended_delete_prop { - display: inline-block; - width: 12px; - height: 12px; - line-height: 12px; - padding: 1px; - color: #8786b7; - line-height: 8px; - text-align: center; - font-weight: bold; - text-shadow: 0 1px 1px white; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete:hover, .openerp .oe_searchview .oe_searchview_drawer .searchview_extended_delete_prop:hover { - text-decoration: none; - color: white; - background: #8786b7; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete { - display: none; - position: absolute; - bottom: 1px; - right: 4px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_private:hover .oe_searchview_custom_delete, .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_public:hover .oe_searchview_custom_delete { - display: inline-block; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_public:after { - content: ","; - font-family: "entypoRegular" !important; - font-size: 22px; - font-weight: 300 !important; - margin: 0 0 0 4px; - padding: 0; -} -.openerp .oe_view_nocontent { - padding: 15px; - margin-top: 0; - color: #777777; - font-size: 125%; - max-width: 700px; -} -.openerp .oe_view_nocontent .oe_view_nocontent_create { - background: transparent url(/web/static/src/img/view_empty_arrow.png) no-repeat 7px 0; - margin-top: 0; - padding-top: 35px; - min-height: 28px; - color: #4c4c4c; -} -.openerp .oe_view_nocontent > p { - padding-left: 95px; -} -.openerp .oe_view_nocontent .oe_empty_custom_dashboard { - background: transparent url(/web/static/src/img/graph_background.png) no-repeat 0 0; - margin-top: -15px; - padding: 100px 0 0 137px; - min-height: 327px; - margin-left: -15px; -} -.openerp .oe_formview { - background: white; -} -.openerp .oe_form_dropdown_section { - position: relative; - display: inline-block; -} -.openerp .oe_form_invalid input, .openerp .oe_form_invalid select, .openerp .oe_form_invalid textarea { - background-color: #ff6666 !important; - border: 1px solid #dd0000 !important; -} -.openerp .oe_view_manager_current .oe_form_editable .oe_highlight { - color: #404040; - background: none; -} -.openerp .oe_view_manager_current .oe_form_editable button.oe_highlight { - background-color: #efefef; - background-image: -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); - background-image: -webkit-linear-gradient(top, #efefef, #d8d8d8); - background-image: -moz-linear-gradient(top, #efefef, #d8d8d8); - background-image: -ms-linear-gradient(top, #efefef, #d8d8d8); - background-image: -o-linear-gradient(top, #efefef, #d8d8d8); - background-image: linear-gradient(to bottom, #efefef, #d8d8d8); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; -} -.openerp .oe_view_manager_current .oe_form_editable button.oe_highlight:active { - background-color: #e3e3e3; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); - background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -moz-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -ms-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -o-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: linear-gradient(to bottom, #e3e3e3, #f6f6f6); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_view_manager_current .oe_form_editable button.oe_highlight:hover { - background-color: #f6f6f6; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); - background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; -} -.openerp .oe_form_invisible { - display: none !important; -} -.openerp .oe_form_readonly .oe_edit_only, .openerp .oe_form_readonly .oe_form_field:empty { - display: none !important; -} -.openerp .oe_form_readonly .oe_form .oe_form_field_date { - width: auto; -} -.openerp .oe_form_nosheet { - margin: 16px; -} -.openerp .oe_form_nosheet > header { - margin: -16px -16px 0 -16px; - padding: 0; -} -.openerp .oe_form_sheetbg { - padding: 16px 0; -} -.openerp .oe_form_sheet_width { - min-width: 650px; - max-width: 860px; - margin: 0 auto; -} -.openerp .oe_form_sheet { - background: white; - min-height: 330px; - padding: 16px; -} -.openerp .oe_application .oe_form_sheetbg { - background: url(/web/static/src/img/form_sheetbg.png); - border-bottom: 1px solid #dddddd; -} -.openerp .oe_application .oe_form_sheet { - border: 1px solid #c8c8d3; - -moz-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); - -webkit-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); -} -.openerp .oe_application .oe_form_sheet .ui-tabs { - margin: 0 -16px; -} -.openerp .oe_application .oe_form_sheet .oe_notebook_page { - padding: 0 16px; -} -.openerp .oe_form header { - position: relative; - border-bottom: 1px solid #cacaca; - padding-left: 2px; - background-color: #fcfcfc; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp .oe_form header > span { - margin-left: 4px; -} -.openerp .oe_form header ul { - display: inline-block; - float: right; -} -.openerp .oe_form header .oe_button { - margin: 3px 2px 1px; -} -.openerp .oe_form header .oe_button:first-child { - margin-left: 6px; -} -.openerp .oe_form header .oe_tags { - margin: 5px 0 0 5px; - width: 400px; - padding-bottom: 0; -} -.openerp .oe_form div.oe_chatter { - min-width: 650px; - max-width: 860px; - margin: 0 auto; - padding: 16px 0 48px; -} -.openerp .oe_form div.oe_form_configuration p, .openerp .oe_form div.oe_form_configuration ul, .openerp .oe_form div.oe_form_configuration ol { - color: #aaaaaa; - max-width: 650px; -} -.openerp .oe_form div.oe_form_configuration label { - min-width: 150px; -} -.openerp .oe_form div.oe_form_configuration .oe_form_group_cell_label { - padding: 1px 0; -} -.openerp .oe_form div.oe_form_configuration .oe_form_group_cell div div { - padding: 1px 0; -} -.openerp .oe_form .oe_subtotal_footer { - width: 1% !important; -} -.openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell { - text-align: right; - padding: 0 !important; -} -.openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell_label { - border-right: none; -} -.openerp .oe_form .oe_subtotal_footer .oe_subtotal_footer_separator { - width: 108px; - border-top: 1px solid #cacaca; - margin-top: 4px; - padding-top: 4px; - font-weight: bold; - font-size: 18px; -} -.openerp .oe_form .oe_subtotal_footer label:after { - content: ":"; -} -.openerp .oe_form .oe_subtotal_footer label.oe_subtotal_footer_separator { - font-weight: bold !important; - padding: 2px 11px 2px 0px !important; -} -.openerp .oe_form .oe_subtotal_footer label.oe_form_label_help { - font-weight: normal; -} -.openerp .oe_form .oe_form_button { - margin: 2px; -} -.openerp .oe_form td.oe_form_group_cell_label { - border-right: 1px solid #dddddd; - padding: 2px 0px; -} -.openerp .oe_form td.oe_form_group_cell_label label { - line-height: 18px; - display: block; - min-width: 140px; -} -.openerp .oe_form td.oe_form_group_cell + .oe_form_group_cell { - padding: 2px 0 2px 8px; -} -.openerp .oe_form .oe_form_group { - width: 100%; - margin: 9px 0 9px 0; -} -.openerp .oe_form .oe_form_group .oe_form_group_cell.oe_group_right { - padding-left: 20px; -} -.openerp .oe_form .oe_form_label_help[for], .openerp .oe_form .oe_form_label[for] { - font-weight: bold; - white-space: nowrap; - padding-right: 8px; -} -.openerp .oe_form .oe_form_label_help[for] span, .openerp .oe_form .oe_form_label[for] span { - font-size: 80%; - color: darkGreen; - vertical-align: top; - position: relative; - top: -4px; - padding: 0 2px; -} -.openerp .oe_horizontal_border { - border-bottom: 1px solid black; -} -.openerp .oe_horizontal_separator { - font-weight: bold; - font-size: 20px; - margin: 15px 0px 10px 0px; - color: #7c7bad; -} -.openerp .oe_horizontal_separator:empty { - height: 5px; -} -.openerp .oe_vertical_separator { - border-left: 1px solid #666666; - padding: 0 4px 0 4px; -} -.openerp .oe_form_field_progressbar { - display: inline-block; - min-width: 70px; -} -.openerp .oe_form_field_progressbar.ui-progressbar { - height: 22px; - font-size: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #999999; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - background: white; - min-width: 50px; -} -.openerp .oe_form_field_progressbar.ui-progressbar span { - position: absolute; - margin-left: 10px; - font-weight: bold; -} -.openerp .oe_form_field_progressbar.ui-progressbar .ui-widget-header { - background: #cccccc url(/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; -} -.openerp .oe_form .oe_form_field_text { - width: 100%; -} -.openerp .oe_form .oe_form_field_char input, -.openerp .oe_form .oe_form_field_url input, -.openerp .oe_form .oe_form_field_email input, -.openerp .oe_form .oe_form_field_text textarea, -.openerp .oe_form .oe_form_field_selection select { - width: 100%; -} -.openerp .oe_form .oe_form_field_text.oe_inline, .openerp .oe_form .oe_form_field_text.oe_inline > textarea { - width: 500px; -} -.openerp .oe_form h1, .openerp .oe_form h2, .openerp .oe_form h3, .openerp .oe_form h4, .openerp .oe_form h5, .openerp .oe_form h6 { - margin: 0 0 4px 0; -} -.openerp .oe_form h1 input, .openerp .oe_form h2 input, .openerp .oe_form h3 input, .openerp .oe_form h4 input, .openerp .oe_form h5 input, .openerp .oe_form h6 input { - height: inherit !important; - font-size: inherit; -} -.openerp .oe_form .oe_form_field { - width: 100%; - display: inline-block; - padding: 2px 2px 2px 0px; -} -.openerp .oe_form .oe_form_field input { - margin: 0px; -} -.openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select { - height: 22px; - padding-top: 2px; -} -.openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select, .openerp .oe_form textarea { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - background: white; - min-width: 60px; - color: #1f1f1f; -} -.openerp .oe_form input[readonly], .openerp .oe_form select[readonly], .openerp .oe_form textarea[readonly], .openerp .oe_form input[disabled], .openerp .oe_form select[disabled] { - background: #e5e5e5 !important; - color: #666666; -} -.openerp .oe_form textarea[disabled] { - border: none; - padding-left: 8px; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; -} -.openerp .oe_form textarea.oe_inline[disabled] { - border-left: 8px solid #eeeeee; -} -.openerp .oe_form .oe_form_field_url button img { - vertical-align: top; -} -.openerp .oe_form .oe_form_field_date, -.openerp .oe_form .oe_form_field_datetime { - white-space: nowrap; -} -.openerp .oe_form .oe_form_field_boolean { - padding-top: 4px; - width: auto; -} -.openerp .oe_form .oe_datepicker_container { - display: none; -} -.openerp .oe_form .oe_datepicker_root { - display: inline-block; -} -.openerp .oe_form .oe_form_required input:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required select:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required textarea:not([disabled]):not([readonly]) { - background-color: #d2d2ff !important; -} -.openerp .oe_form .oe_form_invalid input, .openerp .oe_form .oe_form_invalid select, .openerp .oe_form .oe_form_invalid textarea { - background-color: #ff6666 !important; - border: 1px solid #dd0000 !important; -} -.openerp .oe_form .oe_input_icon { - cursor: pointer; - margin: 3px 0 0 -21px; - vertical-align: top; -} -.openerp .oe_form .oe_input_icon_disabled { - position: absolute; - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50); - right: 5px; - top: 3px; -} -.openerp .oe_form .oe_form_field_with_button.oe_no_button > .oe_button { - display: none; -} -.openerp .oe_form .oe_form_field_with_button:not(.oe_no_button) > .oe_button { - float: right; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - border-bottom-left-radius: 0px; - height: 22px; -} -.openerp .oe_form .oe_form_field_with_button input { - width: 100%; -} -.openerp .oe_form .oe_form_field_with_button > div { - position: relative; - overflow: hidden; -} -.openerp .oe_form .oe_form_embedded_html { - position: relative; - width: 600px; - margin-left: 130px; - margin-top: 32px; - margin-bottom: 32px; - text-align: justify; -} -.openerp .oe_form_editable .oe_form .oe_form_field_integer input { - width: 6em !important; -} -.openerp .oe_form_editable .oe_form .oe_form_field_float input { - width: 7em !important; -} -.openerp .oe_form_editable .oe_form .oe_form_field_date input { - width: 7.5em !important; -} -.openerp .oe_form_editable .oe_form .oe_form_field_datetime input { - width: 11.5em !important; -} -.openerp .oe_hidden_input_file { - position: relative; -} -.openerp .oe_hidden_input_file input.oe_form_binary_file { - z-index: 0; - line-height: 0; - font-size: 12px; - position: absolute; - top: 1px; - left: 0; - right: 0; - opacity: 0; - filter: alpha(opacity=0); - -ms-filter: "alpha(opacity=0)"; - margin: 0; - padding: 0; -} -.openerp .oe_form .oe_form_field_image { - padding: 0; - position: relative; - display: inline-block; - width: auto; - vertical-align: top; -} -.openerp .oe_form .oe_form_field_image .oe_form_field_image_controls { - position: absolute; - top: 1px; - padding: 4px; - width: 100%; - display: none; - text-align: center; - color: #eeeeee; - background: rgba(37, 37, 37, 0.9); - -moz-border-radius: 3px 3px 0 0; - -webkit-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -.openerp .oe_form .oe_form_field_image:hover .oe_form_field_image_controls { - display: block; -} -.openerp .oe_form_field_many2one td:first-child { - position: relative; -} -.openerp .oe_form_field_many2one span.oe_m2o_drop_down_button { - position: absolute; - top: 2px; - right: 0px; -} -.openerp .oe_form_field_many2one .oe_m2o_cm_button { - line-height: 14px; - float: right; - padding-left: 2px; -} -.openerp.ui-autocomplete li.oe_m2o_dropdown_option a { - font-style: italic; - padding-left: 2em; -} -.openerp.ui-autocomplete li:not(.oe_m2o_dropdown_option) + li.oe_m2o_dropdown_option { - margin-top: 10px; -} -.openerp ul.oe_form_status, .openerp ul.oe_form_status_clickable { - display: inline-block; - margin: 0; - padding: 0 18px 0 0; -} -.openerp ul.oe_form_status li, .openerp ul.oe_form_status_clickable li { - display: inline-block; - list-style-type: none; - margin: 0 -18px 0 0; - padding: 0; - background-color: #fcfcfc; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp ul.oe_form_status li:first-child .label, .openerp ul.oe_form_status_clickable li:first-child .label { - border-left: 1px solid #cacaca; - padding-left: 14px; -} -.openerp ul.oe_form_status li:last-child, .openerp ul.oe_form_status_clickable li:last-child { - border-right: 1px solid #cacaca; -} -.openerp ul.oe_form_status li:last-child .label, .openerp ul.oe_form_status_clickable li:last-child .label { - padding-right: 14px; -} -.openerp ul.oe_form_status li:last-child .arrow, .openerp ul.oe_form_status_clickable li:last-child .arrow { - display: none; -} -.openerp ul.oe_form_status li .label, .openerp ul.oe_form_status_clickable li .label { - color: #4c4c4c; - text-shadow: 0 1px 1px #fcfcfc, 0 -1px 1px #dedede; - padding: 7px; - display: inline-block; - padding-left: 24px; - margin: 0; - position: relative; -} -.openerp ul.oe_form_status li .arrow, .openerp ul.oe_form_status_clickable li .arrow { - width: 17px; - display: inline-block; - vertical-align: top; - overflow: hidden; - margin-left: -5px; -} -.openerp ul.oe_form_status li .arrow span, .openerp ul.oe_form_status_clickable li .arrow span { - position: relative; - width: 24px; - height: 24px; - display: inline-block; - margin-left: -12px; - margin-top: 3px; - box-shadow: -1px 1px 2px rgba(255, 255, 255, 0.2), inset -1px 1px 1px rgba(0, 0, 0, 0.2); - background-color: #dedede; - background: -moz-linear-gradient(135deg, #dedede, #fcfcfc); - background: -o-linear-gradient(135deg, #fcfcfc, #dedede); - background: -webkit-gradient(linear, left top, right bottom, from(#fcfcfc), to(#dedede)); - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.openerp ul.oe_form_status li.oe_active, .openerp ul.oe_form_status_clickable li.oe_active { - background-color: #729fcf; - background-image: -webkit-gradient(linear, left top, left bottom, from(#729fcf), to(#3465a4)); - background-image: -webkit-linear-gradient(top, #729fcf, #3465a4); - background-image: -moz-linear-gradient(top, #729fcf, #3465a4); - background-image: -ms-linear-gradient(top, #729fcf, #3465a4); - background-image: -o-linear-gradient(top, #729fcf, #3465a4); - background-image: linear-gradient(to bottom, #729fcf, #3465a4); -} -.openerp ul.oe_form_status li.oe_active .arrow span, .openerp ul.oe_form_status_clickable li.oe_active .arrow span { - background-color: #3465a4; - background: -moz-linear-gradient(135deg, #3465a4, #729fcf); - background: -o-linear-gradient(135deg, #729fcf, #3465a4); - background: -webkit-gradient(linear, left top, right bottom, from(#729fcf), to(#3465a4)); -} -.openerp ul.oe_form_status li.oe_active .label, .openerp ul.oe_form_status_clickable li.oe_active .label { - color: white; - text-shadow: 0 1px 1px #729fcf, 0 -1px 1px #3465a4; -} -.openerp ul.oe_form_status_clickable li { - cursor: pointer; -} -.openerp ul.oe_form_status_clickable li:hover { - background-color: #e8e8e8; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca)); - background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -o-linear-gradient(top, #e8e8e8, #cacaca); - background-image: linear-gradient(to bottom, #e8e8e8, #cacaca); -} -.openerp ul.oe_form_status_clickable li:hover .label { - text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede; -} -.openerp ul.oe_form_status_clickable li:hover .arrow span { - background-color: #e8e8e8; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca)); - background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -o-linear-gradient(top, #e8e8e8, #cacaca); - background-image: linear-gradient(to bottom, #e8e8e8, #cacaca); -} -.openerp ul.oe_form_status_clickable li .label { - color: #7c7bad; -} -.openerp ul.oe_form_status_clickable li.oe_active:hover { - background-color: #4c85c2; - background-image: -webkit-gradient(linear, left top, left bottom, from(#4c85c2), to(#284d7d)); - background-image: -webkit-linear-gradient(top, #4c85c2, #284d7d); - background-image: -moz-linear-gradient(top, #4c85c2, #284d7d); - background-image: -ms-linear-gradient(top, #4c85c2, #284d7d); - background-image: -o-linear-gradient(top, #4c85c2, #284d7d); - background-image: linear-gradient(to bottom, #4c85c2, #284d7d); -} -.openerp ul.oe_form_status_clickable li.oe_active:hover .label { - text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4; -} -.openerp ul.oe_form_status_clickable li.oe_active:hover .arrow span { - background-color: #284d7d; - background: -moz-linear-gradient(135deg, #284d7d, #4c85c2); - background: -o-linear-gradient(135deg, #4c85c2, #284d7d); - background: -webkit-gradient(linear, left top, right bottom, from(#4c85c2), to(#284d7d)); -} -.openerp .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page { - display: none; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page, .openerp .oe_form_field_many2many > .oe_view_manager .oe_list_pager_single_page { - display: none !important; -} -.openerp .oe_form_field_one2many .oe_form_field_one2many_list_row_add, .openerp .oe_form_field_many2many .oe_form_field_one2many_list_row_add { - font-weight: bold; -} -.openerp .oe_form_field_one2many .oe_list_content > thead, .openerp .oe_form_field_many2many .oe_list_content > thead { - border-bottom: 1px; -} -.openerp .oe_form_field_one2many .oe_list_content > tbody tr:nth-child(odd), .openerp .oe_form_field_many2many .oe_list_content > tbody tr:nth-child(odd) { - background: transparent; -} -.openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save { - background: url(/web/static/src/img/iconset-b-remove.png) 50% 50% no-repeat; -} -.openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save:before, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save:before { - visibility: hidden; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_header_row_top, .openerp .oe_form_field_many2many > .oe_view_manager .oe_header_row_top { - display: none; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td { - padding: 0px 8px; - line-height: 16px; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_i, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_i { - font-size: 13px; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group { - height: auto; - line-height: 16px; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li { - height: auto; - line-height: 16px; -} -.openerp .oe_form_field_one2many .oe_list_buttons.oe_editing .oe_list_save, .openerp .oe_form_field_many2many .oe_list_buttons.oe_editing .oe_list_save { - visibility: hidden; -} -.openerp .oe_form_editable .oe_list_editable .oe_list_content td.oe_required { - background-color: #d2d2ff; -} -.openerp .oe_form_editable .oe_list_editable .oe_list_content td.oe_readonly { - background-color: #eeeeee; -} -.openerp .oe_list_editable .oe_list_content td.oe_list_field_cell { - padding: 4px 6px 3px 6px; -} -.openerp .oe_list.oe_list_editable td.oe_list_record_delete { - position: absolute; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_edition .oe_list_field_cell:not(.oe_readonly) { - color: transparent; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_edition .oe_list_field_cell:not(.oe_readonly) * { - visibility: hidden; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_drop_down_button { - top: 5px; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_cm_button { - display: none; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea { - height: 27px; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - border: 1px solid #aaaaff; - margin: 0; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_float input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_view_integer input { - text-align: right; - width: 100% !important; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime > span, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date > span { - width: 100% !important; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime input.oe_datepicker_master, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date input.oe_datepicker_master { - width: 100% !important; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field .oe_form_field_float, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field .oe_form_view_integer, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date { - min-width: 0 !important; - max-width: none !important; -} -.openerp .oe_list_group_name { - white-space: nowrap; -} -.openerp .oe_form .oe_form_field_many2many > .oe_list .oe_list_pager_single_page { - display: none; -} -.openerp .oe_list_buttons .oe_alternative { - visibility: hidden; -} -.openerp .oe_list_buttons .oe_list_save, .openerp .oe_list_buttons .oe_list_discard { - display: none; -} -.openerp .oe_list_buttons.oe_editing .oe_list_add { - display: none; -} -.openerp .oe_list_buttons.oe_editing .oe_list_save { - display: inline-block; -} -.openerp .oe_list_buttons.oe_editing .oe_list_discard { - display: inline; -} -.openerp .oe_list_buttons.oe_editing .oe_alternative { - visibility: visible; -} -.openerp .oe_list .oe_form .oe_form_nosheet { - margin: 0; - padding: 0; - border: none; -} -.openerp .oe_list .oe_form .oe_form_field { - width: auto; - position: absolute; - margin: 0 !important; - padding: 0; -} -.openerp .oe_list .oe_list_content .oe_group_header { - background-color: #fcfcfc; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp .oe_list_content { - width: 100%; -} -.openerp .oe_list_content td:first-child:after, .openerp .oe_list_content th:first-child:after { - border-width: 0; -} -.openerp .oe_list_content td.oe_number { - text-align: right !important; - max-width: 100px; -} -.openerp .oe_list_content > thead { - border-bottom: 2px solid #cacaca; - background: #eeeeee; - vertical-align: top; -} -.openerp .oe_list_content td, .openerp .oe_list_content th { - padding: 3px 6px; - line-height: 18px; -} -.openerp .oe_list_content th.oe_sortable, .openerp .oe_list_content th.oe_sortable div { - cursor: pointer; -} -.openerp .oe_list_content th.oe_sortable div { - position: relative; -} -.openerp .oe_list_content th.oe_sortable div:after { - position: absolute; - right: 6px; - content: ""; - margin-top: 7px; - border-width: 0 4px 4px; - border-style: solid; - border-color: black transparent; - visibility: hidden; -} -.openerp .oe_list_content th.sortup div:after { - visibility: visible; - filter: alpha(opacity=60); - opacity: 0.6; -} -.openerp .oe_list_content th.sortdown div:after { - border-bottom: none; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid black; - visibility: visible; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - filter: alpha(opacity=60); - opacity: 0.6; -} -.openerp .oe_list_content > tbody { - cursor: pointer; -} -.openerp .oe_list_content > tbody > tr { - height: 27px; - border-top: 1px solid #dddddd; -} -.openerp .oe_list_content > tbody > tr > td.oe_list_field_cell { - padding: 3px 6px; - white-space: pre-line; -} -.openerp .oe_list_content > tbody > tr > td > button, .openerp .oe_list_content > tbody > tr > th > button { - border: none; - background: transparent; - padding: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child { - width: 17px; -} -.openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child:after, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child:after { - border-width: 0; -} -.openerp .oe_list_content > tbody > tr:nth-child(odd) { - background-color: #f0f0fa; - background-color: #f0f0fa; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); - background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); -} -.openerp .oe_list_content > tfoot { - border-top: 2px solid #cacaca; - border-bottom: 1px solid #cacaca; - background: #eeeeee; - font-weight: bold; -} -.openerp .oe_list_content .numeric { - text-align: right; - width: 82px; -} -.openerp .oe_list_content .numeric input { - text-align: right; -} -.openerp .oe_list_content th.oe_list_header_handle { - font-size: 1px; - overflow: hidden; - text-indent: -9001px; -} -.openerp .oe_list_content td.oe_list_field_handle { - width: 1em; - padding: 0 !important; - cursor: ns-resize; -} -.openerp .oe_list_content td.oe_list_field_handle .oe_list_handle { - font-size: 1px; - letter-spacing: -1px; - color: transparent; - font-weight: normal; - margin-right: 7px; -} -.openerp .oe_list_content td.oe_list_field_handle .oe_list_handle:before { - font: 18px "entypoRegular"; - content: "}"; - color: #e0e0e0; -} -.openerp .oe_list_cannot_edit .oe_list_header_handle, .openerp .oe_list_cannot_edit .oe_list_field_handle { - display: none !important; - padding: 0 !important; -} -.openerp .oe_list_cannot_delete .oe_list_record_delete { - display: none !important; -} -.openerp .tree_header { - background-color: #f0f0f0; - border-bottom: 1px solid #cacaca; - color: #4c4c4c; - padding: 5px; - height: 25px; -} -.openerp .tree_header button { - float: right; - height: 27px; - margin-right: 5px; -} -.openerp .oe-treeview-table { - width: 100%; - background-color: white; - border-spacing: 0; - color: #4c4c4c; -} -.openerp .oe-treeview-table th { - padding: 10px; - font-weight: bold; - background-color: #f0f0f0; - border-bottom: 2px solid #cacaca; -} -.openerp .oe-treeview-table td { - cursor: pointer; - vertical-align: middle; - text-align: left; - vertical-align: middle; - height: 20px; - padding-left: 4px; - padding-right: 4px; - border-right: 1px solid #e7e7e7; -} -.openerp .oe-treeview-table td.oe_number { - text-align: right !important; -} -.openerp .oe-treeview-table tr { - border-bottom: 1px solid #d6d6d6; -} -.openerp .oe-treeview-table tr:hover { - background-color: #e7e7e7; -} -.openerp .oe-treeview-table span { - font-size: 90%; - font-weight: normal; - white-space: nowrap; - display: block; -} -.openerp .oe-treeview-table .treeview-tr.oe-treeview-first { - background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat; -} -.openerp .oe-treeview-table .oe_open .treeview-tr.oe-treeview-first { - background-image: url(/web/static/src/img/collapse.gif); -} -.openerp .oe-treeview-table .treeview-tr.oe-treeview-first span, .openerp .oe-treeview-table .treeview-td.oe-treeview-first span { - margin-left: 16px; -} -.openerp .oe_layout_debugging .oe_form_group { - outline: 2px dashed green; -} -.openerp .oe_layout_debugging .oe_form_group_cell { - outline: 1px solid blue; -} -.openerp .oe_layout_debugging .oe_form_group:hover, .openerp .oe_layout_debugging .oe_form_group_cell:hover { - outline-color: red; -} -.openerp .oe_layout_debugging .oe_form_group_row_incomplete > td:last-child:after { - content: "[Incomplete Row]"; - background: red; - padding: 2px; - font-weight: bold; - color: white; - float: right; -} -.openerp .oe_layout_debugging .oe_form_group_row_incomplete.oe_form_group_row_newline > td:last-child:after { - content: "[newline]"; -} -.openerp .oe_debug_view { - float: left; -} -.openerp .oe_debug_view_log { - font-size: 95%; -} -.openerp .oe_debug_view_log label { - display: block; - width: 49%; - text-align: right; - float: left; - font-weight: bold; - color: #000099; -} -.openerp .oe_debug_view_log span { - display: block; - width: 49%; - float: right; - color: #333333; -} + */ } + .openerp :-moz-placeholder { + color: #afafb6 !important; + font-style: italic !important; } + .openerp ::-webkit-input-placeholder { + color: #afafb6 !important; + font-style: italic !important; } + .openerp a { + text-decoration: none; + cursor: pointer !important; } + .openerp table { + padding: 0; + border-collapse: collapse; } + .openerp thead { + font-weight: bold; + background-color: #f0f0f0; } + .openerp thead th { + border-left: 1px solid #dfdfdf; } + .openerp thead th:first-child { + border-left: none; } + .openerp thead th.null { + border-left: none; } + .openerp th, .openerp td { + padding: 0; + text-align: left; } + .openerp th { + font-weight: bold; + vertical-align: middle; } + .openerp td { + vertical-align: top; } + .openerp .zebra tbody tr:nth-child(odd) td { + background-color: #f0f0fa; + background-color: #f0f0fa; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); + background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); } + .openerp .zebra tbody tr:hover td { + background-color: #eeeeee; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eeeeee), to(#dedede)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dedede); + background-image: -moz-linear-gradient(top, #eeeeee, #dedede); + background-image: -ms-linear-gradient(top, #eeeeee, #dedede); + background-image: -o-linear-gradient(top, #eeeeee, #dedede); + background-image: linear-gradient(to bottom, #eeeeee, #dedede); } + .openerp input, .openerp textarea, .openerp select { + padding: 2px 4px; + border: 1px solid #cccccc; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: white; } + .openerp img { + vertical-align: middle; } + .openerp h4 { + margin: 4px 0; } + .openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp input[type='submit'], .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { + display: inline-block; + border: 1px solid rgba(0, 0, 0, 0.4); + color: #4c4c4c; + margin: 0; + padding: 3px 12px; + font-size: 13px; + text-align: center; + background-color: #efefef; + background-image: -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); + background-image: -webkit-linear-gradient(top, #efefef, #d8d8d8); + background-image: -moz-linear-gradient(top, #efefef, #d8d8d8); + background-image: -ms-linear-gradient(top, #efefef, #d8d8d8); + background-image: -o-linear-gradient(top, #efefef, #d8d8d8); + background-image: linear-gradient(to bottom, #efefef, #d8d8d8); + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); + -webkit-font-smoothing: antialiased; + outline: none; } + .openerp a.button:hover, .openerp button:hover, .openerp input[type='submit']:hover, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-hover { + background-color: #f6f6f6; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); + background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); + cursor: pointer; + background-position: 0; } + .openerp a.button:focus, .openerp button:focus, .openerp input[type='submit']:focus, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-focus { + border: 1px solid #80bfff; + background-position: 0; + background-color: #f6f6f6; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); + background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); + -moz-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; + -webkit-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; + box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; } + .openerp a.button:active, .openerp a.button.active, .openerp button:active, .openerp button.active, .openerp input[type='submit']:active, .openerp input[type='submit'].active, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-active { + background-color: #e3e3e3; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); + background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -moz-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -ms-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -o-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: linear-gradient(to bottom, #e3e3e3, #f6f6f6); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp a.button.disabled, .openerp button:disabled, .openerp input[type='submit']:disabled { + background: #efefef !important; + border: 1px solid #d1d1d1 !important; + -moz-box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + color: #aaaaaa !important; + cursor: default; + text-shadow: 0 1px 1px white !important; } + .openerp .ui-widget-content a { + color: #7c7bad; } + .openerp .oe_bounce_container { + display: inline-block; } + .openerp .ui-tabs { + position: static; } + .openerp.ui-dialog { + display: none; + padding: 6px; + background-color: rgba(60, 60, 60, 0.7); + border: 1px solid; + border-color: #888888 #555555 #444444; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + -moz-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); + -webkit-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); + box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; } + .openerp.ui-dialog .ui-dialog-content { + padding: 0px; } + .openerp.ui-dialog .ui-dialog-titlebar, .openerp.ui-dialog .ui-dialog-content, .openerp.ui-dialog .ui-dialog-buttonpane { + padding: 16px; } + .openerp.ui-dialog .ui-dialog-titlebar { + border-bottom: 1px solid #cacaca; + -moz-border-radius: 2px 2px 0 0; + -webkit-border-radius: 2px 2px 0 0; + border-radius: 2px 2px 0 0; + background-color: #fcfcfc; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } + .openerp.ui-dialog .ui-dialog-titlebar .ui-dialog-title { + margin: 0; + padding: 0; } + .openerp.ui-dialog .ui-widget-header { + border: none; } + .openerp.ui-dialog .ui-dialog-content { + background: white; } + .openerp.ui-dialog .ui-dialog-buttonpane { + border-top: 1px solid #e0e0e0; + background: #f5f7f9; + margin: 0; + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp.ui-dialog .ui-dialog-buttonpane button { + margin: 0 4px 0 0; } + .openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: left; } + .openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { + margin-right: 4px; } + .openerp.ui-dialog .ui-dialog-titlebar-close { + padding: 0; } + .openerp.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick { + display: none; } + .openerp.ui-dialog .ui-dialog-titlebar-close:before { + content: "×"; + font-size: 18px; + font-weight: bold; + line-height: 16px; + color: black; + text-shadow: 0 1px 0 white; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; } + .openerp.ui-dialog .ui-dialog-titlebar-close:before:hover { + color: black; + text-decoration: none; } + .openerp.ui-dialog .oe_about { + background-color: white; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp.ui-dialog .oe_about a { + color: #7c7bad; } + .openerp.ui-dialog .oe_about a:hover { + text-decoration: underline; } + .openerp.ui-dialog .oe_about a:focus { + outline: none; } + .openerp.ui-dialog .oe_about .oe_logo { + margin-left: -6px; } + .openerp.ui-dialog .oe_about .oe_bottom { + position: absolute; + top: 50%; + left: 0; + right: 0; + bottom: 0; + text-shadow: 0 1px 1px #999999; + background-color: #b41616; + background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); + background-image: -webkit-linear-gradient(top, #b41616, #600606); + background-image: -moz-linear-gradient(top, #b41616, #600606); + background-image: -ms-linear-gradient(top, #b41616, #600606); + background-image: -o-linear-gradient(top, #b41616, #600606); + background-image: linear-gradient(to bottom, #b41616, #600606); + color: #eeeeee; + padding: 0 16px; + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp.ui-dialog .oe_about .oe_bottom a { + color: #eeeeee; } + .openerp.ui-dialog.oe_act_window .ui-dialog-content { + padding: 0px; } + .openerp .modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: black; + filter: alpha(opacity=30); + opacity: 0.3; } + .openerp .oe_i { + font-family: "mnmliconsRegular" !important; + font-size: 21px; + font-weight: 300 !important; } + .openerp .oe_e { + font-family: "entypoRegular" !important; + font-size: 34px; + font-weight: 300 !important; } + .openerp .oe_left { + float: left; + margin-right: 8px; } + .openerp .oe_right { + float: right; + margin-left: 8px; } + .openerp .oe_text_right { + text-align: right; } + .openerp .oe_clear { + clear: both; } + .openerp .oe_wait { + cursor: wait; } + .openerp .oe_fade { + color: #888888; + font-weight: normal; } + .openerp .oe_bold { + font-weight: bold; } + .openerp .oe_inline { + width: auto !important; } + .openerp .oe_highlight { + color: white; + background: #dc5f59; } + .openerp button.oe_highlight { + background-color: #df3f3f; + background-image: -webkit-gradient(linear, left top, left bottom, from(#df3f3f), to(#a21a1a)); + background-image: -webkit-linear-gradient(top, #df3f3f, #a21a1a); + background-image: -moz-linear-gradient(top, #df3f3f, #a21a1a); + background-image: -ms-linear-gradient(top, #df3f3f, #a21a1a); + background-image: -o-linear-gradient(top, #df3f3f, #a21a1a); + background-image: linear-gradient(to bottom, #df3f3f, #a21a1a); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; } + .openerp button.oe_highlight:hover { + background-color: #e25858; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e25858), to(#ab1b1b)); + background-image: -webkit-linear-gradient(top, #e25858, #ab1b1b); + background-image: -moz-linear-gradient(top, #e25858, #ab1b1b); + background-image: -ms-linear-gradient(top, #e25858, #ab1b1b); + background-image: -o-linear-gradient(top, #e25858, #ab1b1b); + background-image: linear-gradient(to bottom, #e25858, #ab1b1b); } + .openerp button.oe_highlight:active { + background-color: #c52020; + background-image: -webkit-gradient(linear, left top, left bottom, from(#c52020), to(#d22323)); + background-image: -webkit-linear-gradient(top, #c52020, #d22323); + background-image: -moz-linear-gradient(top, #c52020, #d22323); + background-image: -ms-linear-gradient(top, #c52020, #d22323); + background-image: -o-linear-gradient(top, #c52020, #d22323); + background-image: linear-gradient(to bottom, #c52020, #d22323); } + .openerp .oe_background_grey { + background: #eeeeee !important; } + .openerp .oe_form_dirty .oe_highlight_on_dirty { + color: white; + background: #dc5f59; + font-weight: bold; } + .openerp .oe_form_dirty button.oe_highlight_on_dirty { + background-color: #dc5f59; + background-image: -webkit-gradient(linear, left top, left bottom, from(#dc5f59), to(#b33630)); + background-image: -webkit-linear-gradient(top, #dc5f59, #b33630); + background-image: -moz-linear-gradient(top, #dc5f59, #b33630); + background-image: -ms-linear-gradient(top, #dc5f59, #b33630); + background-image: -o-linear-gradient(top, #dc5f59, #b33630); + background-image: linear-gradient(to bottom, #dc5f59, #b33630); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_form_dirty button.oe_highlight_on_dirty:hover { + background: #ed6f6a; } + .openerp .oe_title { + width: 50%; + float: left; } + .openerp .oe_title:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; } + .openerp .oe_button_box { + width: 270px; + text-align: right; } + .openerp .oe_button_box button { + margin: 4px; } + .openerp .oe_avatar > img { + max-height: 90px; + max-width: 90px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + border: none; + margin-bottom: 10px; } + .openerp .oe_avatar + div { + margin-left: 5px; } + .openerp .oe_image_small > img { + max-width: 50px; + max-height: 50px; } + .openerp .oe_image_medium > img { + max-width: 180px; + max-height: 180px; } + .openerp .oe_button.oe_link { + border: none; + padding: 0; + margin: 0; + background: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_button.oe_link img { + display: none; } + .openerp .oe_button.oe_link span { + border: none; + padding: 0; + margin: 0; + background: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #7c7bad; + font-weight: bold; } + .openerp .oe_button.oe_link span:hover { + text-decoration: underline; } + .openerp .oe_webclient .oe_star_on, .openerp .oe_webclient .oe_star_off { + color: #cccccc; + text-shadow: 0 0 2px black; + vertical-align: top; + position: relative; + top: -5px; } + .openerp .oe_webclient .oe_star_on:hover, .openerp .oe_webclient .oe_star_off:hover { + text-decoration: none; } + .openerp .oe_webclient .oe_star_on { + color: gold; } + .openerp p.oe_grey { + max-width: 650px; } + .openerp .oe_grey { + color: #aaaaaa; } + .openerp .oe_tag { + border: 1px solid #afafb6; + font-size: 11px; + padding: 2px 4px; + margin: 0 2px 2px 0; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #f0f0fa; + color: #4c4c4c; } + .openerp .oe_tag_dark { + background: #7c7bad; + color: #eeeeee; } + .openerp .oe_tags { + margin-bottom: 1px; } + .openerp .oe_tags.oe_inline { + min-width: 250px; } + .openerp .oe_tags .text-wrap { + width: 100% !important; } + .openerp .oe_tags .text-wrap textarea { + width: 100% !important; } + .openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { + font-style: italic; + text-decoration: none; } + .openerp.oe_tooltip { + font-size: 12px; } + .openerp.oe_tooltip .oe_tooltip_string { + color: #ffdd55; + font-weight: bold; + font-size: 13px; } + .openerp.oe_tooltip .oe_tooltip_help { + white-space: pre-wrap; } + .openerp.oe_tooltip .oe_tooltip_technical { + padding: 0 0 4px 0; + margin: 5px 0 0 15px; } + .openerp.oe_tooltip .oe_tooltip_technical li { + list-style: circle; } + .openerp.oe_tooltip .oe_tooltip_technical_title { + font-weight: bold; } + .openerp.oe_tooltip .oe_tooltip_close { + margin: -5px 0 0 2px; + cursor: default; + float: right; + color: white; } + .openerp.oe_tooltip .oe_tooltip_close:hover { + color: #999999; + cursor: pointer; } + .openerp.oe_tooltip .oe_tooltip_message { + max-width: 310px; } + .openerp .oe_notebook { + margin: 8px 0; + padding: 0 16px; + list-style: none; + zoom: 1; } + .openerp .oe_notebook.ui-corner-all { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; } + .openerp .oe_notebook:before, .openerp .oe_notebook:after { + display: table; + content: ""; + zoom: 1; } + .openerp .oe_notebook:after { + clear: both; } + .openerp .oe_notebook > li { + float: left; } + .openerp .oe_notebook > li > a { + display: block; + color: #4c4c4c; } + .openerp .oe_notebook { + border-color: #dddddd; + border-style: solid; + border-width: 0 0 1px; } + .openerp .oe_notebook > li { + position: relative; } + .openerp .oe_notebook > li > a { + padding: 0 12px; + margin-right: 2px; + line-height: 30px; + border: 1px solid transparent; + -moz-border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; } + .openerp .oe_notebook > li > a:hover { + text-decoration: none; + background-color: #eeeeee; + border-color: #eeeeee #eeeeee #dddddd; } + .openerp .oe_notebook > li.ui-state-active > a, .openerp .oe_notebook > li.ui-state-active > a:hover { + background-color: white; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; } + .openerp .oe_notebook_page { + padding: 0; } + .openerp div.ui-tabs { + padding: 3px 0px 3px 0px; } + .openerp .ui-tabs-hide { + display: none; } + .openerp .oe_dropdown, .openerp .oe_dropdown_hover, .openerp .oe_dropdown_toggle { + position: relative; + cursor: pointer; } + .openerp .oe_dropdown_toggle { + color: rgba(0, 0, 0, 0.5); + font-weight: normal; } + .openerp .oe_dropdown_hover:hover .oe_dropdown_menu, .openerp .oe_dropdown_menu.oe_opened { + display: block; } + .openerp .oe_dropdown_menu { + display: none; + position: absolute; + top: 26px; + left: 0; + z-index: 3; + margin: 0; + padding: 0; + border: 1px solid #afafb6; + background: white; + padding: 4px 0; + min-width: 140px; + text-align: left; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } + .openerp .oe_dropdown_menu > li { + list-style-type: none; + float: none; + display: block; + position: relative; + margin: 0; + padding: 2px 8px; } + .openerp .oe_dropdown_menu > li:hover { + background-color: #f0f0fa; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); + background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_dropdown_menu > li > a { + white-space: nowrap; + display: block; + color: #4c4c4c; + text-decoration: none; } + .openerp .oe_dropdown_menu > li > a:hover { + text-decoration: none; } + .openerp .oe_dropdown_arrow:after { + width: 0; + height: 0; + display: inline-block; + content: "&darr"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 3px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #404040; + filter: alpha(opacity=50); + opacity: 0.5; } + .openerp .oe_sidebar { + white-space: nowrap; } + .openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment { + height: 20px; + cursor: pointer; + padding-left: 6px; + margin-top: 6px; } + .openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment span { + font-weight: bold; } + .openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment .oe_hidden_input_file { + width: 200px; } + .openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment:hover { + background-color: #f0f0fa; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); + background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_sidebar .oe_dropdown_menu li .oe_sidebar_delete_item { + position: absolute; + top: 4px; + right: 4px; + display: none; + width: 12px; + height: 12px; + padding: 1px; + color: #8786b7; + line-height: 8px; + text-align: center; + font-weight: bold; + text-shadow: 0 1px 1px white; } + .openerp .oe_sidebar .oe_dropdown_menu li .oe_sidebar_delete_item:hover { + text-decoration: none; + color: white; + background: #8786b7; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; } + .openerp .oe_sidebar .oe_dropdown_menu li:hover .oe_sidebar_delete_item { + display: inline-block; } + .openerp .oe_loading { + display: none; + z-index: 100; + position: fixed; + top: 0; + right: 50%; + padding: 4px 12px; + background: #a61300; + color: white; + text-align: center; + border: 1px solid #990000; + border-top: none; + -moz-border-radius-bottomright: 8px; + -moz-border-radius-bottomleft: 8px; + border-bottom-right-radius: 8px; + border-bottom-left-radius: 8px; } + .openerp .oe_notification { + z-index: 1050; } + .openerp .oe_login { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); + text-align: center; + font-size: 14px; + height: 100%; } + .openerp .oe_login ul, .openerp .oe_login li { + margin: 0; + list-style-type: none; + padding: 0 0 4px 0; } + .openerp .oe_login button { + float: right; + display: inline-block; + cursor: pointer; + padding: 6px 16px; + border: 1px solid #222222; + color: white; + margin: 0; + background-color: #b92020; + background-image: -webkit-gradient(linear, left top, left bottom, from(#b92020), to(#600606)); + background-image: -webkit-linear-gradient(top, #b92020, #600606); + background-image: -moz-linear-gradient(top, #b92020, #600606); + background-image: -ms-linear-gradient(top, #b92020, #600606); + background-image: -o-linear-gradient(top, #b92020, #600606); + background-image: linear-gradient(to bottom, #b92020, #600606); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; } + .openerp .oe_login input, .openerp .oe_login select { + width: 252px; + font-family: "Lucida Grande", Helvetica, Verdana, Arial; + border: 1px solid #999999; + background: whitesmoke; + -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); + -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .openerp .oe_login input { + margin-bottom: 9px; + padding: 5px 6px; } + .openerp .oe_login select { + padding: 1px; } + .openerp .oe_login .oe_login_dbpane { + position: fixed; + top: 0; + right: 8px; + padding: 5px 10px; + color: #eeeeee; + border: solid 1px #333333; + background: #1e1e1e; + background: rgba(30, 30, 30, 0.94); + -moz-border-radius: 0 0 8px 8px; + -webkit-border-radius: 0 0 8px 8px; + border-radius: 0 0 8px 8px; } + .openerp .oe_login .oe_login_dbpane input { + padding: 2px 4px; + margin: 4px 0; } + .openerp .oe_login .oe_login_bottom { + position: absolute; + top: 50%; + left: 0; + right: 0; + bottom: 0; + text-shadow: 0 1px 1px #999999; + background-color: #b41616; + background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); + background-image: -webkit-linear-gradient(top, #b41616, #600606); + background-image: -moz-linear-gradient(top, #b41616, #600606); + background-image: -ms-linear-gradient(top, #b41616, #600606); + background-image: -o-linear-gradient(top, #b41616, #600606); + background-image: linear-gradient(to bottom, #b41616, #600606); } + .openerp .oe_login .oe_login_pane { + position: absolute; + top: 50%; + left: 50%; + margin: -160px -166px; + border: solid 1px #333333; + background: #1e1e1e; + background: rgba(30, 30, 30, 0.94); + padding: 22px 32px; + color: #eeeeee; + text-align: left; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + -moz-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); + -webkit-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); + box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); } + .openerp .oe_login .oe_login_pane h2 { + margin-top: 0; + font-size: 18px; } + .openerp .oe_login .oe_login_logo { + position: absolute; + top: -70px; + left: 0; + width: 100%; + margin: 0 auto; + text-align: center; } + .openerp .oe_login .oe_login_footer { + position: absolute; + bottom: -40px; + left: 0; + width: 100%; + text-align: center; } + .openerp .oe_login .oe_login_footer a { + color: #eeeeee; + margin: 0 8px; } + .openerp .oe_login .oe_login_footer a:hover { + text-decoration: underline; } + .openerp .oe_login .oe_login_footer span { + font-weight: bold; + font-size: 16px; } + .openerp .oe_login .oe_login_error_message { + display: none; + background-color: #b41616; + color: #eeeeee; + padding: 14px 18px; + margin-top: 15px; + text-align: center; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); } + .openerp .oe_login_invalid .oe_login_error_message { + display: inline-block; } + .openerp .oe_database_manager { + background: white; + color: black; + text-align: left; } + .openerp .oe_database_manager .oe_database_manager_menu { + color: black; } + .openerp .oe_webclient { + width: 100%; + height: 100%; + border-spacing: 0px; } + .openerp .oe_content_full_screen .oe_application { + top: 0; + left: 0; } + .openerp .oe_content_full_screen .oe_topbar, .openerp .oe_content_full_screen .oe_leftbar { + display: none; } + .openerp .oe_topbar { + width: 100%; + height: 32px; + background-color: #414141; + background-color: #646060; + background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626)); + background-image: -webkit-linear-gradient(top, #646060, #262626); + background-image: -moz-linear-gradient(top, #646060, #262626); + background-image: -ms-linear-gradient(top, #646060, #262626); + background-image: -o-linear-gradient(top, #646060, #262626); + background-image: linear-gradient(to bottom, #646060, #262626); } + .openerp .oe_topbar .oe_topbar_item { + display: block; + padding: 5px 10px 7px; + line-height: 20px; + height: 20px; + text-decoration: none; + color: #eeeeee; + vertical-align: top; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; } + .openerp .oe_topbar .oe_topbar_item:hover { + background: rgba(0, 0, 0, 0.2); + text-shadow: black 0px 0px 3px; + color: white; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; } + .openerp .oe_topbar .oe_topbar_avatar { + width: 24px; + height: 24px; + margin: -2px 2px 0 0; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .openerp .oe_topbar .oe_topbar_avatar { + vertical-align: top; } + .openerp .oe_topbar .oe_dropdown_arrow:after { + border-top: 4px solid white; } + .openerp .oe_topbar .oe_dropdown_menu { + top: 32px; + background: #333333; + background: rgba(37, 37, 37, 0.9); + border-color: #999999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + -moz-border-radius: 0 0 6px 6px; + -webkit-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; } + .openerp .oe_topbar .oe_dropdown_menu li { + float: none; + padding: 3px 12px; } + .openerp .oe_topbar .oe_dropdown_menu li a { + color: #eeeeee; } + .openerp .oe_topbar .oe_dropdown_menu li:hover { + background-color: #292929; + background-image: -webkit-gradient(linear, left top, left bottom, from(#292929), to(#191919)); + background-image: -webkit-linear-gradient(top, #292929, #191919); + background-image: -moz-linear-gradient(top, #292929, #191919); + background-image: -ms-linear-gradient(top, #292929, #191919); + background-image: -o-linear-gradient(top, #292929, #191919); + background-image: linear-gradient(to bottom, #292929, #191919); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_menu { + float: left; + padding: 0; + margin: 0; + font-size: 13px; } + .openerp .oe_menu > li { + list-style-type: none; + padding: 0; + margin: 0; + float: left; + display: block; + color: #eeeeee; } + .openerp .oe_menu > li > a { + display: block; + padding: 5px 10px 7px; + line-height: 20px; + height: 20px; + text-decoration: none; + color: #eeeeee; + vertical-align: top; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; } + .openerp .oe_menu > li > a:hover { + background: rgba(0, 0, 0, 0.2); + text-shadow: black 0px 0px 3px; + color: white; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; } + .openerp .oe_menu > li > .oe_active { + background: rgba(0, 0, 0, 0.3); + text-shadow: black 0px 0px 3px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; } + .openerp .oe_user_menu { + float: right; + padding: 0; + margin: 0; } + .openerp .oe_user_menu li { + list-style-type: none; + float: left; } + .openerp .oe_user_menu .oe_dropdown_menu { + right: -1px; } + .openerp .oe_systray > div { + float: left; + padding: 0 4px 0 4px; } + .openerp .oe_systray { + float: right; } + .openerp .oe_leftbar { + display: none; + width: 220px; + background: #f0eeee; + border-right: 1px solid #afafb6; + text-shadow: 0 1px 1px white; + padding-bottom: 16px; } + .openerp a.oe_logo { + width: 220px; + display: block; + text-align: center; + height: 70px; + line-height: 70px; } + .openerp a.oe_logo img { + height: 40px; + width: 157px; + margin: 14px 0; } + .openerp .oe_footer { + position: fixed; + bottom: 0; + padding: 4px 0; + background: #f0eeee; + width: 220px; + text-align: center; } + .openerp .oe_footer a { + font-weight: 800; + font-family: serif; + font-size: 16px; + color: black; } + .openerp .oe_footer a span { + color: #c81010; + font-style: italic; } + .openerp .oe_secondary_menu_section { + font-weight: bold; + margin-left: 8px; + color: #7c7bad; } + .openerp .oe_secondary_submenu { + padding: 2px 0 8px 0; + margin: 0; + width: 100%; + display: inline-block; } + .openerp .oe_secondary_submenu li { + position: relative; + margin: 0; + padding: 1px 0 1px 20px !important; + list-style-type: none; } + .openerp .oe_secondary_submenu li a { + display: block; + color: #4c4c4c; + padding: 2px 4px 2px 0; } + .openerp .oe_secondary_submenu li .oe_menu_label { + position: absolute; + top: 1px; + right: 1px; + font-size: 10px; + background: #7c7bad; + color: white; + padding: 2px 4px; + margin: 1px 6px 0 0; + border: 1px solid lightGray; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); } + .openerp .oe_secondary_submenu .oe_menu_counter { + float: right; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + margin: 1px; + padding: 1px 4px; + border: none; } + .openerp .oe_secondary_submenu .oe_menu_counter:hover { + cursor: pointer; + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); } + .openerp .oe_secondary_submenu .oe_active { + border-top: 1px solid lightGray; + border-bottom: 1px solid #dedede; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); + background: #7c7bad; } + .openerp .oe_secondary_submenu .oe_active a { + color: white; } + .openerp .oe_secondary_submenu .oe_active .oe_menu_label { + background: #eeeeee; + color: #7c7bad; + text-shadow: 0 1px 1px white; + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); } + .openerp .oe_secondary_submenu .oe_active .oe_menu_counter { + background: #eeeeee; + color: #7c7bad; + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); } + .openerp .oe_secondary_submenu .oe_menu_toggler:before { + width: 0; + height: 0; + display: inline-block; + content: "&darr"; + text-indent: -99999px; + vertical-align: top; + margin-left: -12px; + margin-top: 4px; + margin-right: 4px; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px solid #4c4c4c; + filter: alpha(opacity=50); + opacity: 0.5; } + .openerp .oe_secondary_submenu .oe_menu_opened:before { + margin-top: 6px; + margin-left: -16px; + margin-right: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #4c4c4c; } + .openerp .oe_about { + background-color: white; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp .oe_about a { + color: #7c7bad; } + .openerp .oe_about a:hover { + text-decoration: underline; } + .openerp .oe_about a:focus { + outline: none; } + .openerp .oe_about .oe_logo { + margin-left: -6px; } + .openerp .oe_about .oe_bottom { + position: absolute; + top: 50%; + left: 0; + right: 0; + bottom: 0; + text-shadow: 0 1px 1px #999999; + background-color: #b41616; + background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); + background-image: -webkit-linear-gradient(top, #b41616, #600606); + background-image: -moz-linear-gradient(top, #b41616, #600606); + background-image: -ms-linear-gradient(top, #b41616, #600606); + background-image: -o-linear-gradient(top, #b41616, #600606); + background-image: linear-gradient(to bottom, #b41616, #600606); + color: #eeeeee; + padding: 0 16px; + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp .oe_about .oe_bottom a { + color: #eeeeee; } + .openerp .oe_application { + width: 100%; } + .openerp .oe_application a { + color: #7c7bad; } + .openerp .oe_application a:hover { + text-decoration: underline; } + .openerp .oe_application > div { + height: 100%; } + .openerp .oe_application .oe_breadcrumb_item:not(:last-child) { + display: inline-block; + max-width: 7em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + .openerp .oe_view_manager .oe_view_manager_body { + height: inherit; } + .openerp .oe_view_manager .oe_view_manager_view_kanban { + height: inherit; } + .openerp .oe_view_manager table.oe_view_manager_header { + width: 100%; + table-layout: fixed; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_header_row { + clear: both; + text-shadow: 0 1px 1px white; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:last-child td { + padding-top: 0; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:first-child td { + padding-top: 8px; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_sidebar { + margin: 0px auto; + text-align: center; } + .openerp .oe_view_manager table.oe_view_manager_header td { + line-height: 26px; } + .openerp .oe_view_manager table.oe_view_manager_header h2 { + font-size: 18px; + margin: 0; + float: left; } + .openerp .oe_view_manager table.oe_view_manager_header h2 a { + color: #7c7bad; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_dropdown_menu { + line-height: normal; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group { + display: inline-block; + border: 1px solid #ababab; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li { + float: left; + border-right: 1px solid #ababab; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li:last-child { + border: none; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a { + color: #4c4c4c; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a:hover { + text-decoration: none; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active { + background: #999999; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active a { + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); } + .openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_buttons { + white-space: nowrap; } + .openerp .oe_view_manager .oe_view_manager_pager { + line-height: 26px; } + .openerp .oe_view_manager .oe_view_manager_pager .oe_list_pager_single_page .oe_pager_group { + display: none; } + .openerp .oe_view_manager .oe_pager_value { + float: left; + margin-right: 8px; } + .openerp .oe_view_manager ul.oe_pager_group { + padding: 0; + margin: 0; } + .openerp .oe_view_manager .oe_pager_group { + float: left; + height: 24px; + line-height: 24px; + display: inline-block; + border: 1px solid #ababab; + cursor: pointer; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; } + .openerp .oe_view_manager .oe_pager_group li { + height: 24px; + line-height: 24px; + padding: 0; + margin: 0; + list-style-type: none; + float: left; + border-right: 1px solid #ababab; } + .openerp .oe_view_manager .oe_pager_group li:last-child { + border: none; } + .openerp .oe_view_manager .oe_pager_group a { + color: #4c4c4c; + padding: 0 8px; } + .openerp .oe_view_manager .oe_pager_group a:hover { + text-decoration: none; } + .openerp .oe_view_manager .oe_pager_group .active { + background: #999999; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; } + .openerp .oe_view_manager .oe_pager_group .active a { + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); } + .openerp .oe_view_manager .oe_view_manager_switch { + padding: 0; + margin: 0 0 0 8px; } + .openerp .oe_view_manager .oe_view_manager_switch li { + margin: 0; + width: 24px; + height: 24px; + line-height: 16px; + padding: 0; + text-align: center; + list-style-type: none; } + .openerp .oe_view_manager .oe_view_manager_switch li a { + position: relative; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_list:after, .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_tree:after { + padding: 2px; + content: "i"; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_form:after { + content: "m"; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_graph:after { + font-family: "mnmliconsRegular" !important; + font-size: 21px; + font-weight: 300 !important; + content: "}"; + top: -2px; + position: relative; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_gantt:after { + font-family: "mnmliconsRegular" !important; + font-size: 21px; + font-weight: 300 !important; + content: "y"; + top: -2px; + position: relative; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_calendar:after { + content: "P"; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_kanban:after { + content: "k"; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_diagram:after { + content: "f"; } + .openerp .oe_view_manager_current { + height: 100%; } + .openerp .oe_view_manager_current > .oe_view_manager_header { + border-bottom: 1px solid #cacaca; + background-color: #fcfcfc; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); } + .openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row td { + padding: 8px; } + .openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row:first-child td { + padding-top: 8px; } + .openerp .oe_view_manager_inline, .openerp .oe_view_manager_inlineview { + height: 100%; } + .openerp .oe_view_manager_inline > .oe_view_manager_header, .openerp .oe_view_manager_inlineview > .oe_view_manager_header { + display: none; } + .openerp .oe_popup_form > .oe_formview > .oe_form_pager { + display: none !important; } + .openerp .oe_searchview { + cursor: text; + position: relative; + float: right; + padding: 1px 0; + line-height: 18px; + width: 400px; + border: 1px solid #ababab; + background: white; + -moz-border-radius: 13px; + -webkit-border-radius: 13px; + border-radius: 13px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; } + .openerp .oe_searchview input, .openerp .oe_searchview textarea { + padding: 3px; + height: 14px; + font-size: 12px; + line-height: 18px; } + .openerp .oe_searchview.oe_focused { + border-color: #a6a6fe; + -moz-box-shadow: 0 1px 2px #a6a6fe inset; + -webkit-box-shadow: 0 1px 2px #a6a6fe inset; + box-shadow: 0 1px 2px #a6a6fe inset; } + .openerp .oe_searchview .oe_searchview_clear { + cursor: pointer; + position: absolute; + top: 0; + right: 18px; + width: 15px; + height: 100%; + background: url(../img/search_reset.gif) center center no-repeat; } + .openerp .oe_searchview .oe_searchview_unfold_drawer { + position: absolute; + top: 0; + right: 0; + height: 100%; + padding: 0 7px 0 4px; + color: #cccccc; + cursor: pointer; } + .openerp .oe_searchview .oe_searchview_unfold_drawer:hover { + color: #999999; } + .openerp .oe_searchview .oe_searchview_unfold_drawer:before { + position: absolute; + top: 10px; + right: 7px; + width: 0; + height: 0; + display: inline-block; + content: ""; + vertical-align: top; + border-top: 5px solid #4c4c4c; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + filter: alpha(opacity=50); + opacity: 0.5; } + .openerp .oe_searchview .oe_searchview_search { + font-size: 1px; + letter-spacing: -1px; + color: transparent; + font-weight: normal; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + position: absolute; + left: 3px; + top: 1px; + padding: 0; + border: none; + background: transparent; } + .openerp .oe_searchview .oe_searchview_search:before { + font: 21px "mnmliconsRegular"; + content: "r"; + color: #a3a3a3; } + .openerp .oe_searchview .oe_searchview_facets { + min-height: 22px; + margin-left: 15px; } + .openerp .oe_searchview .oe_searchview_facets * { + vertical-align: top; + display: inline-block; + line-height: 17px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { + height: 18px; + margin: 1px 0; + font-size: 11px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet:focus { + outline: none; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_input { + padding: 0 0 0 6px; + font-size: 12px; + height: 16px; + margin-top: 3px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_input:focus { + outline: none; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { + position: relative; + cursor: pointer; + padding: 0; + -webkit-font-smoothing: auto; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet:focus { + border-color: #a6a6fe; + -moz-box-shadow: 0 0 3px 1px #a6a6fe; + -webkit-box-shadow: 0 0 3px 1px #a6a6fe; + box-shadow: 0 0 3px 1px #a6a6fe; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_values { + background: #f0f0fa; + -moz-border-radius: 0 3px 3px 0; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category, .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value { + height: 18px; + padding: 0 4px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category { + color: white; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category.oe_i { + font-size: 16px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value { + border-left: 1px solid #afafb6; + text-shadow: 0 1px 1px white; + color: #4c4c4c; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value:last-child { + padding-right: 16px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_remove { + position: absolute; + top: 3px; + right: 3px; + color: #8786b7; + line-height: 8px; + width: 12px; + height: 12px; + padding-top: 1px; + text-align: center; + font-weight: bold; + cursor: pointer; + text-shadow: 0 1px 1px white; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_remove:hover { + color: white; + background: #8786b7; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; } + .openerp .oe_searchview.oe_searchview_open_drawer .oe_searchview_drawer { + display: block; } + .openerp .oe_searchview .oe_searchview_drawer { + position: absolute; + z-index: 100; + margin-top: 4px; + top: 100%; + right: -1px; + background-color: white; + min-width: 100%; + display: none; + border: 1px solid #afafb6; + text-align: left; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } + .openerp .oe_searchview .oe_searchview_drawer > div { + border-top: 1px solid #cccccc; + margin: 0; + padding: 8px; } + .openerp .oe_searchview .oe_searchview_drawer > div:first-child { + border-top: none; + margin: 0; } + .openerp .oe_searchview .oe_searchview_drawer h3 { + margin: 8px 4px 4px 12px; + color: #7c7bad; + font-size: 13px; } + .openerp .oe_searchview .oe_searchview_drawer h4, .openerp .oe_searchview .oe_searchview_drawer h4 * { + margin: 0; + cursor: pointer; + font-weight: normal; + display: inline-block; } + .openerp .oe_searchview .oe_searchview_drawer h4:hover, .openerp .oe_searchview .oe_searchview_drawer h4 *:hover { + background-color: #f0f0fa; } + .openerp .oe_searchview .oe_searchview_drawer h4:before { + content: "▸ "; + color: #a3a3a3; } + .openerp .oe_searchview .oe_searchview_drawer button { + margin: 4px 0; } + .openerp .oe_searchview .oe_searchview_drawer .button { + border: none; + background: transparent; + padding: 0 2px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section { + display: table; + width: 100%; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section > div { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + display: table-cell; + width: 50%; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section ul { + margin: 0 8px 8px; + padding: 0; + list-style: none; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li { + list-style: none; + padding: 2px 4px 2px 20px; + line-height: 14px; + color: inherit; + cursor: pointer; + position: relative; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li.oe_selected:before { + content: "W"; + font-family: "entypoRegular" !important; + font-size: 24px; + font-weight: 300 !important; + color: #a3a3a3; + position: absolute; + left: 4px; + top: -2px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li:hover { + background-color: #f0f0fa; } + .openerp .oe_searchview .oe_searchview_drawer form { + margin-left: 12px; } + .openerp .oe_searchview .oe_searchview_drawer form p { + margin: 4px 0; + line-height: 18px; } + .openerp .oe_searchview .oe_searchview_drawer form button { + margin: 0 0 8px 0; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom { + padding: 0 8px 8px 8px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom form { + display: none; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li { + cursor: pointer; + position: relative; + line-height: 14px; + padding: 2px 4px 2px 20px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li:hover { + background-color: #f0f0fa; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li button { + position: absolute; + top: 0; + right: 5px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_dashboard form { + display: none; + margin-top: 2px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced form { + display: none; + margin-top: 8px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced button.oe_add_condition:before { + content: "Z"; + font-family: "entypoRegular" !important; + font-size: 24px; + font-weight: 300 !important; + margin-right: 4px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced ul { + list-style: none; + padding: 0; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li { + position: relative; + list-style: none; + margin: 0; + white-space: nowrap; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li:first-child .searchview_extended_prop_or { + visibility: hidden; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced .searchview_extended_prop_or { + opacity: 0.5; + margin-left: -14px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_opened h4:before { + content: "▾ "; + position: relative; + top: -1px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_opened form { + display: block; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete, .openerp .oe_searchview .oe_searchview_drawer .searchview_extended_delete_prop { + display: inline-block; + width: 12px; + height: 12px; + line-height: 12px; + padding: 1px; + color: #8786b7; + line-height: 8px; + text-align: center; + font-weight: bold; + text-shadow: 0 1px 1px white; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete:hover, .openerp .oe_searchview .oe_searchview_drawer .searchview_extended_delete_prop:hover { + text-decoration: none; + color: white; + background: #8786b7; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete { + display: none; + position: absolute; + bottom: 1px; + right: 4px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_private:hover .oe_searchview_custom_delete, .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_public:hover .oe_searchview_custom_delete { + display: inline-block; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_public:after { + content: ","; + font-family: "entypoRegular" !important; + font-size: 22px; + font-weight: 300 !important; + margin: 0 0 0 4px; + padding: 0; } + .openerp .oe_view_nocontent { + padding: 15px; + margin-top: 0; + color: #777777; + font-size: 125%; + max-width: 700px; } + .openerp .oe_view_nocontent .oe_view_nocontent_create { + background: transparent url(/web/static/src/img/view_empty_arrow.png) no-repeat 7px 0; + margin-top: 0; + padding-top: 35px; + min-height: 28px; + color: #4c4c4c; } + .openerp .oe_view_nocontent > p { + padding-left: 95px; } + .openerp .oe_view_nocontent .oe_empty_custom_dashboard { + background: transparent url(/web/static/src/img/graph_background.png) no-repeat 0 0; + margin-top: -15px; + padding: 100px 0 0 137px; + min-height: 327px; + margin-left: -15px; } + .openerp .oe_formview { + background: white; } + .openerp .oe_form_dropdown_section { + position: relative; + display: inline-block; } + .openerp .oe_form_invalid input, .openerp .oe_form_invalid select, .openerp .oe_form_invalid textarea { + background-color: #ff6666 !important; + border: 1px solid #dd0000 !important; } + .openerp .oe_view_manager_current .oe_form_editable .oe_highlight { + color: #404040; + background: none; } + .openerp .oe_view_manager_current .oe_form_editable button.oe_highlight { + background-color: #efefef; + background-image: -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); + background-image: -webkit-linear-gradient(top, #efefef, #d8d8d8); + background-image: -moz-linear-gradient(top, #efefef, #d8d8d8); + background-image: -ms-linear-gradient(top, #efefef, #d8d8d8); + background-image: -o-linear-gradient(top, #efefef, #d8d8d8); + background-image: linear-gradient(to bottom, #efefef, #d8d8d8); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; } + .openerp .oe_view_manager_current .oe_form_editable button.oe_highlight:active { + background-color: #e3e3e3; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); + background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -moz-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -ms-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -o-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: linear-gradient(to bottom, #e3e3e3, #f6f6f6); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_view_manager_current .oe_form_editable button.oe_highlight:hover { + background-color: #f6f6f6; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); + background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; } + .openerp .oe_form_invisible { + display: none !important; } + .openerp .oe_form_readonly .oe_edit_only, .openerp .oe_form_readonly .oe_form_field:empty { + display: none !important; } + .openerp .oe_form_readonly .oe_form .oe_form_field_date { + width: auto; } + .openerp .oe_form_nosheet { + margin: 16px; } + .openerp .oe_form_nosheet > header { + margin: -16px -16px 0 -16px; + padding: 0; } + .openerp .oe_form_sheetbg { + padding: 16px 0; } + .openerp .oe_form_sheet_width { + min-width: 650px; + max-width: 860px; + margin: 0 auto; } + .openerp .oe_form_sheet { + background: white; + min-height: 330px; + padding: 16px; } + .openerp .oe_application .oe_form_sheetbg { + background: url(/web/static/src/img/form_sheetbg.png); + border-bottom: 1px solid #dddddd; } + .openerp .oe_application .oe_form_sheet { + border: 1px solid #c8c8d3; + -moz-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + -webkit-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); } + .openerp .oe_application .oe_form_sheet .ui-tabs { + margin: 0 -16px; } + .openerp .oe_application .oe_form_sheet .oe_notebook_page { + padding: 0 16px; } + .openerp .oe_form header { + position: relative; + border-bottom: 1px solid #cacaca; + padding-left: 2px; + background-color: #fcfcfc; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } + .openerp .oe_form header > span { + margin-left: 4px; } + .openerp .oe_form header ul { + display: inline-block; + float: right; } + .openerp .oe_form header .oe_button { + margin: 3px 2px 1px; } + .openerp .oe_form header .oe_button:first-child { + margin-left: 6px; } + .openerp .oe_form header .oe_tags { + margin: 5px 0 0 5px; + width: 400px; + padding-bottom: 0; } + .openerp .oe_form div.oe_chatter { + min-width: 650px; + max-width: 860px; + margin: 0 auto; + padding: 16px 0 48px; } + .openerp .oe_form div.oe_form_configuration p, .openerp .oe_form div.oe_form_configuration ul, .openerp .oe_form div.oe_form_configuration ol { + color: #aaaaaa; + max-width: 650px; } + .openerp .oe_form div.oe_form_configuration label { + min-width: 150px; } + .openerp .oe_form div.oe_form_configuration .oe_form_group_cell_label { + padding: 1px 0; } + .openerp .oe_form div.oe_form_configuration .oe_form_group_cell div div { + padding: 1px 0; } + .openerp .oe_form .oe_subtotal_footer { + width: 1% !important; } + .openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell { + text-align: right; + padding: 0 !important; } + .openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell_label { + border-right: none; } + .openerp .oe_form .oe_subtotal_footer .oe_subtotal_footer_separator { + width: 108px; + border-top: 1px solid #cacaca; + margin-top: 4px; + padding-top: 4px; + font-weight: bold; + font-size: 18px; } + .openerp .oe_form .oe_subtotal_footer label:after { + content: ":"; } + .openerp .oe_form .oe_subtotal_footer label.oe_subtotal_footer_separator { + font-weight: bold !important; + padding: 2px 11px 2px 0px !important; } + .openerp .oe_form .oe_subtotal_footer label.oe_form_label_help { + font-weight: normal; } + .openerp .oe_form .oe_form_button { + margin: 2px; } + .openerp .oe_form td.oe_form_group_cell_label { + border-right: 1px solid #dddddd; + padding: 2px 0px; } + .openerp .oe_form td.oe_form_group_cell_label label { + line-height: 18px; + display: block; + min-width: 140px; } + .openerp .oe_form td.oe_form_group_cell + .oe_form_group_cell { + padding: 2px 0 2px 8px; } + .openerp .oe_form .oe_form_group { + width: 100%; + margin: 9px 0 9px 0; } + .openerp .oe_form .oe_form_group .oe_form_group_cell.oe_group_right { + padding-left: 20px; } + .openerp .oe_form .oe_form_label_help[for], .openerp .oe_form .oe_form_label[for] { + font-weight: bold; + white-space: nowrap; + padding-right: 8px; } + .openerp .oe_form .oe_form_label_help[for] span, .openerp .oe_form .oe_form_label[for] span { + font-size: 80%; + color: darkGreen; + vertical-align: top; + position: relative; + top: -4px; + padding: 0 2px; } + .openerp .oe_horizontal_border { + border-bottom: 1px solid black; } + .openerp .oe_horizontal_separator { + font-weight: bold; + font-size: 20px; + margin: 15px 0px 10px 0px; + color: #7c7bad; } + .openerp .oe_horizontal_separator:empty { + height: 5px; } + .openerp .oe_vertical_separator { + border-left: 1px solid #666666; + padding: 0 4px 0 4px; } + .openerp .oe_form_field_progressbar { + display: inline-block; + min-width: 70px; } + .openerp .oe_form_field_progressbar.ui-progressbar { + height: 22px; + font-size: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #999999; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: white; + min-width: 50px; } + .openerp .oe_form_field_progressbar.ui-progressbar span { + position: absolute; + margin-left: 10px; + font-weight: bold; } + .openerp .oe_form_field_progressbar.ui-progressbar .ui-widget-header { + background: #cccccc url(/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; } + .openerp .oe_form .oe_form_field_text { + width: 100%; } + .openerp .oe_form .oe_form_field_char input, + .openerp .oe_form .oe_form_field_url input, + .openerp .oe_form .oe_form_field_email input, + .openerp .oe_form .oe_form_field_text textarea, + .openerp .oe_form .oe_form_field_selection select { + width: 100%; } + .openerp .oe_form .oe_form_field_text.oe_inline, .openerp .oe_form .oe_form_field_text.oe_inline > textarea { + width: 500px; } + .openerp .oe_form h1, .openerp .oe_form h2, .openerp .oe_form h3, .openerp .oe_form h4, .openerp .oe_form h5, .openerp .oe_form h6 { + margin: 0 0 4px 0; } + .openerp .oe_form h1 input, .openerp .oe_form h2 input, .openerp .oe_form h3 input, .openerp .oe_form h4 input, .openerp .oe_form h5 input, .openerp .oe_form h6 input { + height: inherit !important; + font-size: inherit; } + .openerp .oe_form .oe_form_field { + width: 100%; + display: inline-block; + padding: 2px 2px 2px 0px; } + .openerp .oe_form .oe_form_field input { + margin: 0px; } + .openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select { + height: 22px; + padding-top: 2px; } + .openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select, .openerp .oe_form textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: white; + min-width: 60px; + color: #1f1f1f; } + .openerp .oe_form input[readonly], .openerp .oe_form select[readonly], .openerp .oe_form textarea[readonly], .openerp .oe_form input[disabled], .openerp .oe_form select[disabled] { + background: #e5e5e5 !important; + color: #666666; } + .openerp .oe_form textarea[disabled] { + border: none; + padding-left: 8px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; } + .openerp .oe_form textarea.oe_inline[disabled] { + border-left: 8px solid #eeeeee; } + .openerp .oe_form .oe_form_field_url button img { + vertical-align: top; } + .openerp .oe_form .oe_form_field_date, + .openerp .oe_form .oe_form_field_datetime { + white-space: nowrap; } + .openerp .oe_form .oe_form_field_boolean { + padding-top: 4px; + width: auto; } + .openerp .oe_form .oe_datepicker_container { + display: none; } + .openerp .oe_form .oe_datepicker_root { + display: inline-block; } + .openerp .oe_form .oe_form_required input:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required select:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required textarea:not([disabled]):not([readonly]) { + background-color: #d2d2ff !important; } + .openerp .oe_form .oe_form_invalid input, .openerp .oe_form .oe_form_invalid select, .openerp .oe_form .oe_form_invalid textarea { + background-color: #ff6666 !important; + border: 1px solid #dd0000 !important; } + .openerp .oe_form .oe_input_icon { + cursor: pointer; + margin: 3px 0 0 -21px; + vertical-align: top; } + .openerp .oe_form .oe_input_icon_disabled { + position: absolute; + cursor: default; + opacity: 0.5; + filter: alpha(opacity=50); + right: 5px; + top: 3px; } + .openerp .oe_form .oe_form_field_with_button.oe_no_button > .oe_button { + display: none; } + .openerp .oe_form .oe_form_field_with_button:not(.oe_no_button) > .oe_button { + float: right; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + border-bottom-left-radius: 0px; + height: 22px; } + .openerp .oe_form .oe_form_field_with_button input { + width: 100%; } + .openerp .oe_form .oe_form_field_with_button > div { + position: relative; + overflow: hidden; } + .openerp .oe_form .oe_form_embedded_html { + position: relative; + width: 600px; + margin-left: 130px; + margin-top: 32px; + margin-bottom: 32px; + text-align: justify; } + .openerp .oe_form_editable .oe_form .oe_form_field_integer input { + width: 6em !important; } + .openerp .oe_form_editable .oe_form .oe_form_field_float input { + width: 7em !important; } + .openerp .oe_form_editable .oe_form .oe_form_field_date input { + width: 7.5em !important; } + .openerp .oe_form_editable .oe_form .oe_form_field_datetime input { + width: 11.5em !important; } + .openerp .oe_hidden_input_file { + position: relative; } + .openerp .oe_hidden_input_file input.oe_form_binary_file { + z-index: 0; + line-height: 0; + font-size: 12px; + position: absolute; + top: 1px; + left: 0; + right: 0; + opacity: 0; + filter: alpha(opacity=0); + -ms-filter: "alpha(opacity=0)"; + margin: 0; + padding: 0; } + .openerp .oe_form .oe_form_field_image { + padding: 0; + position: relative; + display: inline-block; + width: auto; + vertical-align: top; } + .openerp .oe_form .oe_form_field_image .oe_form_field_image_controls { + position: absolute; + top: 1px; + padding: 4px; + width: 100%; + display: none; + text-align: center; + color: #eeeeee; + background: rgba(37, 37, 37, 0.9); + -moz-border-radius: 3px 3px 0 0; + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; } + .openerp .oe_form .oe_form_field_image:hover .oe_form_field_image_controls { + display: block; } + .openerp .oe_form_field_many2one td:first-child { + position: relative; } + .openerp .oe_form_field_many2one span.oe_m2o_drop_down_button { + position: absolute; + top: 2px; + right: 0px; } + .openerp .oe_form_field_many2one .oe_m2o_cm_button { + line-height: 14px; + float: right; + padding-left: 2px; } + .openerp.ui-autocomplete li.oe_m2o_dropdown_option a { + font-style: italic; + padding-left: 2em; } + .openerp.ui-autocomplete li:not(.oe_m2o_dropdown_option) + li.oe_m2o_dropdown_option { + margin-top: 10px; } + .openerp ul.oe_form_status, .openerp ul.oe_form_status_clickable { + display: inline-block; + margin: 0; + padding: 0 18px 0 0; } + .openerp ul.oe_form_status li, .openerp ul.oe_form_status_clickable li { + display: inline-block; + list-style-type: none; + margin: 0 -18px 0 0; + padding: 0; + background-color: #fcfcfc; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } + .openerp ul.oe_form_status li:first-child .label, .openerp ul.oe_form_status_clickable li:first-child .label { + border-left: 1px solid #cacaca; + padding-left: 14px; } + .openerp ul.oe_form_status li:last-child, .openerp ul.oe_form_status_clickable li:last-child { + border-right: 1px solid #cacaca; } + .openerp ul.oe_form_status li:last-child .label, .openerp ul.oe_form_status_clickable li:last-child .label { + padding-right: 14px; } + .openerp ul.oe_form_status li:last-child .arrow, .openerp ul.oe_form_status_clickable li:last-child .arrow { + display: none; } + .openerp ul.oe_form_status li .label, .openerp ul.oe_form_status_clickable li .label { + color: #4c4c4c; + text-shadow: 0 1px 1px #fcfcfc, 0 -1px 1px #dedede; + padding: 7px; + display: inline-block; + padding-left: 24px; + margin: 0; + position: relative; } + .openerp ul.oe_form_status li .arrow, .openerp ul.oe_form_status_clickable li .arrow { + width: 17px; + display: inline-block; + vertical-align: top; + overflow: hidden; + margin-left: -5px; } + .openerp ul.oe_form_status li .arrow span, .openerp ul.oe_form_status_clickable li .arrow span { + position: relative; + width: 24px; + height: 24px; + display: inline-block; + margin-left: -12px; + margin-top: 3px; + box-shadow: -1px 1px 2px rgba(255, 255, 255, 0.2), inset -1px 1px 1px rgba(0, 0, 0, 0.2); + background-color: #dedede; + background: -moz-linear-gradient(135deg, #dedede, #fcfcfc); + background: -o-linear-gradient(135deg, #fcfcfc, #dedede); + background: -webkit-gradient(linear, left top, right bottom, from(#fcfcfc), to(#dedede)); + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); } + .openerp ul.oe_form_status li.oe_active, .openerp ul.oe_form_status_clickable li.oe_active { + background-color: #729fcf; + background-image: -webkit-gradient(linear, left top, left bottom, from(#729fcf), to(#3465a4)); + background-image: -webkit-linear-gradient(top, #729fcf, #3465a4); + background-image: -moz-linear-gradient(top, #729fcf, #3465a4); + background-image: -ms-linear-gradient(top, #729fcf, #3465a4); + background-image: -o-linear-gradient(top, #729fcf, #3465a4); + background-image: linear-gradient(to bottom, #729fcf, #3465a4); } + .openerp ul.oe_form_status li.oe_active .arrow span, .openerp ul.oe_form_status_clickable li.oe_active .arrow span { + background-color: #3465a4; + background: -moz-linear-gradient(135deg, #3465a4, #729fcf); + background: -o-linear-gradient(135deg, #729fcf, #3465a4); + background: -webkit-gradient(linear, left top, right bottom, from(#729fcf), to(#3465a4)); } + .openerp ul.oe_form_status li.oe_active .label, .openerp ul.oe_form_status_clickable li.oe_active .label { + color: white; + text-shadow: 0 1px 1px #729fcf, 0 -1px 1px #3465a4; } + .openerp ul.oe_form_status_clickable li { + cursor: pointer; } + .openerp ul.oe_form_status_clickable li:hover { + background-color: #e8e8e8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca)); + background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -o-linear-gradient(top, #e8e8e8, #cacaca); + background-image: linear-gradient(to bottom, #e8e8e8, #cacaca); } + .openerp ul.oe_form_status_clickable li:hover .label { + text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede; } + .openerp ul.oe_form_status_clickable li:hover .arrow span { + background-color: #e8e8e8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca)); + background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -o-linear-gradient(top, #e8e8e8, #cacaca); + background-image: linear-gradient(to bottom, #e8e8e8, #cacaca); } + .openerp ul.oe_form_status_clickable li .label { + color: #7c7bad; } + .openerp ul.oe_form_status_clickable li.oe_active:hover { + background-color: #4c85c2; + background-image: -webkit-gradient(linear, left top, left bottom, from(#4c85c2), to(#284d7d)); + background-image: -webkit-linear-gradient(top, #4c85c2, #284d7d); + background-image: -moz-linear-gradient(top, #4c85c2, #284d7d); + background-image: -ms-linear-gradient(top, #4c85c2, #284d7d); + background-image: -o-linear-gradient(top, #4c85c2, #284d7d); + background-image: linear-gradient(to bottom, #4c85c2, #284d7d); } + .openerp ul.oe_form_status_clickable li.oe_active:hover .label { + text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4; } + .openerp ul.oe_form_status_clickable li.oe_active:hover .arrow span { + background-color: #284d7d; + background: -moz-linear-gradient(135deg, #284d7d, #4c85c2); + background: -o-linear-gradient(135deg, #4c85c2, #284d7d); + background: -webkit-gradient(linear, left top, right bottom, from(#4c85c2), to(#284d7d)); } + .openerp .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page { + display: none; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page, .openerp .oe_form_field_many2many > .oe_view_manager .oe_list_pager_single_page { + display: none !important; } + .openerp .oe_form_field_one2many .oe_form_field_one2many_list_row_add, .openerp .oe_form_field_many2many .oe_form_field_one2many_list_row_add { + font-weight: bold; } + .openerp .oe_form_field_one2many .oe_list_content > thead, .openerp .oe_form_field_many2many .oe_list_content > thead { + border-bottom: 1px; } + .openerp .oe_form_field_one2many .oe_list_content > tbody tr:nth-child(odd), .openerp .oe_form_field_many2many .oe_list_content > tbody tr:nth-child(odd) { + background: transparent; } + .openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save { + background: url(/web/static/src/img/iconset-b-remove.png) 50% 50% no-repeat; } + .openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save:before, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save:before { + visibility: hidden; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_header_row_top, .openerp .oe_form_field_many2many > .oe_view_manager .oe_header_row_top { + display: none; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td { + padding: 0px 8px; + line-height: 16px; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_i, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_i { + font-size: 13px; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group { + height: auto; + line-height: 16px; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li { + height: auto; + line-height: 16px; } + .openerp .oe_form_field_one2many .oe_list_buttons.oe_editing .oe_list_save, .openerp .oe_form_field_many2many .oe_list_buttons.oe_editing .oe_list_save { + visibility: hidden; } + .openerp .oe_form_editable .oe_list_editable .oe_list_content td.oe_required { + background-color: #d2d2ff; } + .openerp .oe_form_editable .oe_list_editable .oe_list_content td.oe_readonly { + background-color: #eeeeee; } + .openerp .oe_list_editable .oe_list_content td.oe_list_field_cell { + padding: 4px 6px 3px 6px; } + .openerp .oe_list.oe_list_editable td.oe_list_record_delete { + position: absolute; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_edition .oe_list_field_cell:not(.oe_readonly) { + color: transparent; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_edition .oe_list_field_cell:not(.oe_readonly) * { + visibility: hidden; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_drop_down_button { + top: 5px; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_cm_button { + display: none; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea { + height: 27px; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + border: 1px solid #aaaaff; + margin: 0; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_float input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_view_integer input { + text-align: right; + width: 100% !important; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime > span, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date > span { + width: 100% !important; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime input.oe_datepicker_master, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date input.oe_datepicker_master { + width: 100% !important; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field .oe_form_field_float, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field .oe_form_view_integer, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date { + min-width: 0 !important; + max-width: none !important; } + .openerp .oe_list_group_name { + white-space: nowrap; } + .openerp .oe_form .oe_form_field_many2many > .oe_list .oe_list_pager_single_page { + display: none; } + .openerp .oe_list_buttons .oe_alternative { + visibility: hidden; } + .openerp .oe_list_buttons .oe_list_save, .openerp .oe_list_buttons .oe_list_discard { + display: none; } + .openerp .oe_list_buttons.oe_editing .oe_list_add { + display: none; } + .openerp .oe_list_buttons.oe_editing .oe_list_save { + display: inline-block; } + .openerp .oe_list_buttons.oe_editing .oe_list_discard { + display: inline; } + .openerp .oe_list_buttons.oe_editing .oe_alternative { + visibility: visible; } + .openerp .oe_list .oe_form .oe_form_nosheet { + margin: 0; + padding: 0; + border: none; } + .openerp .oe_list .oe_form .oe_form_field { + width: auto; + position: absolute; + margin: 0 !important; + padding: 0; } + .openerp .oe_list .oe_list_content .oe_group_header { + background-color: #fcfcfc; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } + .openerp .oe_list_content { + width: 100%; } + .openerp .oe_list_content td:first-child:after, .openerp .oe_list_content th:first-child:after { + border-width: 0; } + .openerp .oe_list_content td.oe_number { + text-align: right !important; + max-width: 100px; } + .openerp .oe_list_content > thead { + border-bottom: 2px solid #cacaca; + background: #eeeeee; + vertical-align: top; } + .openerp .oe_list_content td, .openerp .oe_list_content th { + padding: 3px 6px; + line-height: 18px; } + .openerp .oe_list_content th.oe_sortable, .openerp .oe_list_content th.oe_sortable div { + cursor: pointer; } + .openerp .oe_list_content th.oe_sortable div { + position: relative; } + .openerp .oe_list_content th.oe_sortable div:after { + position: absolute; + right: 6px; + content: ""; + margin-top: 7px; + border-width: 0 4px 4px; + border-style: solid; + border-color: black transparent; + visibility: hidden; } + .openerp .oe_list_content th.sortup div:after { + visibility: visible; + filter: alpha(opacity=60); + opacity: 0.6; } + .openerp .oe_list_content th.sortdown div:after { + border-bottom: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid black; + visibility: visible; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + filter: alpha(opacity=60); + opacity: 0.6; } + .openerp .oe_list_content > tbody { + cursor: pointer; } + .openerp .oe_list_content > tbody > tr { + height: 27px; + border-top: 1px solid #dddddd; } + .openerp .oe_list_content > tbody > tr > td.oe_list_field_cell { + padding: 3px 6px; + white-space: pre-line; } + .openerp .oe_list_content > tbody > tr > td > button, .openerp .oe_list_content > tbody > tr > th > button { + border: none; + background: transparent; + padding: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child { + width: 17px; } + .openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child:after, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child:after { + border-width: 0; } + .openerp .oe_list_content > tbody > tr:nth-child(odd) { + background-color: #f0f0fa; + background-color: #f0f0fa; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); + background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); } + .openerp .oe_list_content > tfoot { + border-top: 2px solid #cacaca; + border-bottom: 1px solid #cacaca; + background: #eeeeee; + font-weight: bold; } + .openerp .oe_list_content .numeric { + text-align: right; + width: 82px; } + .openerp .oe_list_content .numeric input { + text-align: right; } + .openerp .oe_list_content th.oe_list_header_handle { + font-size: 1px; + overflow: hidden; + text-indent: -9001px; } + .openerp .oe_list_content td.oe_list_field_handle { + width: 1em; + padding: 0 !important; + cursor: ns-resize; } + .openerp .oe_list_content td.oe_list_field_handle .oe_list_handle { + font-size: 1px; + letter-spacing: -1px; + color: transparent; + font-weight: normal; + margin-right: 7px; } + .openerp .oe_list_content td.oe_list_field_handle .oe_list_handle:before { + font: 18px "entypoRegular"; + content: "}"; + color: #e0e0e0; } + .openerp .oe_list_cannot_create .oe_view_nocontent_create { + display: none; } + .openerp .oe_list_cannot_edit .oe_list_header_handle, .openerp .oe_list_cannot_edit .oe_list_field_handle { + display: none !important; + padding: 0 !important; } + .openerp .oe_list_cannot_delete .oe_list_record_delete { + display: none !important; } + .openerp .tree_header { + background-color: #f0f0f0; + border-bottom: 1px solid #cacaca; + color: #4c4c4c; + padding: 5px; + height: 25px; } + .openerp .tree_header button { + float: right; + height: 27px; + margin-right: 5px; } + .openerp .oe-treeview-table { + width: 100%; + background-color: white; + border-spacing: 0; + color: #4c4c4c; } + .openerp .oe-treeview-table th { + padding: 10px; + font-weight: bold; + background-color: #f0f0f0; + border-bottom: 2px solid #cacaca; } + .openerp .oe-treeview-table td { + cursor: pointer; + vertical-align: middle; + text-align: left; + vertical-align: middle; + height: 20px; + padding-left: 4px; + padding-right: 4px; + border-right: 1px solid #e7e7e7; } + .openerp .oe-treeview-table td.oe_number { + text-align: right !important; } + .openerp .oe-treeview-table tr { + border-bottom: 1px solid #d6d6d6; } + .openerp .oe-treeview-table tr:hover { + background-color: #e7e7e7; } + .openerp .oe-treeview-table span { + font-size: 90%; + font-weight: normal; + white-space: nowrap; + display: block; } + .openerp .oe-treeview-table .treeview-tr.oe-treeview-first { + background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat; } + .openerp .oe-treeview-table .oe_open .treeview-tr.oe-treeview-first { + background-image: url(/web/static/src/img/collapse.gif); } + .openerp .oe-treeview-table .treeview-tr.oe-treeview-first span, .openerp .oe-treeview-table .treeview-td.oe-treeview-first span { + margin-left: 16px; } + .openerp .oe_layout_debugging .oe_form_group { + outline: 2px dashed green; } + .openerp .oe_layout_debugging .oe_form_group_cell { + outline: 1px solid blue; } + .openerp .oe_layout_debugging .oe_form_group:hover, .openerp .oe_layout_debugging .oe_form_group_cell:hover { + outline-color: red; } + .openerp .oe_layout_debugging .oe_form_group_row_incomplete > td:last-child:after { + content: "[Incomplete Row]"; + background: red; + padding: 2px; + font-weight: bold; + color: white; + float: right; } + .openerp .oe_layout_debugging .oe_form_group_row_incomplete.oe_form_group_row_newline > td:last-child:after { + content: "[newline]"; } + .openerp .oe_debug_view { + float: left; } + .openerp .oe_debug_view_log { + font-size: 95%; } + .openerp .oe_debug_view_log label { + display: block; + width: 49%; + text-align: right; + float: left; + font-weight: bold; + color: #000099; } + .openerp .oe_debug_view_log span { + display: block; + width: 49%; + float: right; + color: #333333; } .kitten-mode-activated { background-image: url(http://placekitten.com/g/1365/769); background-size: cover; - background-attachment: fixed; -} -.kitten-mode-activated > * { - opacity: 0.7; -} + background-attachment: fixed; } + .kitten-mode-activated > * { + opacity: 0.7; } div.ui-widget-overlay { background: black; filter: alpha(opacity=30); - opacity: 0.3; -} + opacity: 0.3; } .ui-widget { font-family: "Lucida Grande", Helvetica, Verdana, Arial, sans-serif; color: #4c4c4c; - font-size: 13px; -} + font-size: 13px; } .ui-menu { padding: 2px 0; @@ -2898,29 +2371,22 @@ div.ui-widget-overlay { -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); margin-top: 4px; - border: 1px solid #afafb6; -} -.ui-menu .ui-menu-item { - width: 100%; - padding: 0; -} -.ui-menu .ui-menu-item a { - padding: 1px 16px; -} -.ui-menu .ui-menu-item a.ui-corner-all { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.ui-menu .ui-menu-item a.ui-state-active { - background: #f0f0fa; -} -.ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { - background: #7c7bad; -} + border: 1px solid #afafb6; } + .ui-menu .ui-menu-item { + width: 100%; + padding: 0; } + .ui-menu .ui-menu-item a { + padding: 1px 16px; } + .ui-menu .ui-menu-item a.ui-corner-all { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; } + .ui-menu .ui-menu-item a.ui-state-active { + background: #f0f0fa; } + .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { + background: #7c7bad; } .ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; - border-radius: 3px; -} + border-radius: 3px; }