From 8085156454ed92a5d31fa6bbc348ee5064ebb620 Mon Sep 17 00:00:00 2001 From: "Amit (OpenERP)" Date: Tue, 6 Mar 2012 12:19:02 +0530 Subject: [PATCH 01/43] [ADD]:event:added kanban view for event and realted changes for that. bzr revid: apa@tinyerp.com-20120306064902-rdx250ihctkpjph8 --- addons/event/__openerp__.py | 1 + addons/event/event.py | 54 ++++++++++++++++- addons/event/event_view.xml | 71 ++++++++++++++++++++++- addons/event/static/src/css/event.css | 83 +++++++++++++++++++++++++++ 4 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 addons/event/static/src/css/event.css diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py index 06252001c83..ea0e4316ef5 100644 --- a/addons/event/__openerp__.py +++ b/addons/event/__openerp__.py @@ -53,6 +53,7 @@ Note that: ], 'demo_xml': ['event_demo.xml'], 'test': ['test/process/event_draft2done.yml'], + 'css': ['static/src/css/event.css'], 'installable': True, 'application': True, 'auto_install': False, diff --git a/addons/event/event.py b/addons/event/event.py index 133d29281f1..1b92b995239 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -148,8 +148,30 @@ class event_event(osv.osv): number = reg_done elif field == 'register_prospect': number = reg_draft + elif field == 'register_avail': + number = event.register_max-reg_open res[event.id][field] = number return res + + def _subscribe_fnc(self, cr, uid, ids, fields, args, context=None): + """Get Confirm or uncofirm register value. + @param ids: List of Event registration type's id + @param fields: List of function fields(register_current and register_prospect). + @param context: A standard dictionary for contextual values + @return: Dictionary of function fields value. + """ + register_pool = self.pool.get('event.registration') + res = {} + for event in self.browse(cr, uid, ids, context=context): + curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',event.id)]) + if not curr_reg_id:res[event.id] = False + if curr_reg_id: + for reg in register_pool.browse(cr,uid,curr_reg_id,context=context): + if not reg.subscribe: + res[event.id]=False + else: + res[event.id]=True + return res _columns = { 'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}), @@ -158,6 +180,7 @@ class event_event(osv.osv): 'register_max': fields.integer('Maximum Registrations', help="You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}), 'register_min': fields.integer('Minimum Registrations', help="You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}), 'register_current': fields.function(_get_register, string='Confirmed Registrations', multi='register_numbers'), + 'register_avail': fields.function(_get_register, string='Available Registrations', multi='register_numbers',type='integer'), 'register_prospect': fields.function(_get_register, string='Unconfirmed Registrations', multi='register_numbers'), 'register_attended': fields.function(_get_register, string='Attended Registrations', multi='register_numbers'), 'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}), @@ -182,6 +205,7 @@ class event_event(osv.osv): type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}), 'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}), 'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}), + 'subscribe' : fields.function(_subscribe_fnc, type="boolean", string='Subscribe'), } _defaults = { @@ -189,6 +213,33 @@ class event_event(osv.osv): 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'event.event', context=c), 'user_id': lambda obj, cr, uid, context: uid, } + + def subscribe_to_event(self,cr,uid,ids,context=None): + register_pool = self.pool.get('event.registration') + curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) + if not curr_reg_id: + register_pool.create(cr, uid, {'state':'open', + 'event_id':ids[0], + 'subscribe':True, + }) + else: + register_pool.write(cr, uid, curr_reg_id,{'state':'open','subscribe':True, + 'event_id':ids[0], + }) + + self.write(cr,uid,ids,{'subscribe':True}) + return True + + def unsubscribe_to_event(self,cr,uid,ids,context=None): + register_pool = self.pool.get('event.registration') + curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) + if curr_reg_id: + register_pool.write(cr, uid, curr_reg_id,{'state':'draft', + 'event_id':ids[0], + 'subscribe':False + }) + self.write(cr,uid,ids,{'subscribe':False}) + return True def _check_closing_date(self, cr, uid, ids, context=None): for event in self.browse(cr, uid, ids, context=context): @@ -239,7 +290,8 @@ class event_registration(osv.osv): ('open', 'Confirmed'), ('cancel', 'Cancelled'), ('done', 'Attended')], 'State', - size=16, readonly=True) + size=16, readonly=True), + 'subscribe': fields.boolean('Subscribe'), } _defaults = { diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 88be188080e..5aacf7a2845 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -156,6 +156,70 @@ + + + + + event.event.kanban + event.event + kanban + + + + + + + + + + + + +
+ +
+
+ + +
+
+
+
+

+

+ @
+ Organized by
+ + + + + seats + seat available. + + + +

+ + + + + + + + +
+
+
+
+
+
+
@@ -199,6 +263,10 @@ + @@ -229,7 +297,8 @@ ir.actions.act_window event.event form - calendar,tree,form,graph + kanban,calendar,tree,form,graph + {"search_default_upcoming":1} Event is the low level object used by meeting and others documents that should be synchronized with mobile devices or calendar applications through caldav. Most of the users should work in the Calendar menu, and not in the list of events. diff --git a/addons/event/static/src/css/event.css b/addons/event/static/src/css/event.css new file mode 100644 index 00000000000..f3d60fcee26 --- /dev/null +++ b/addons/event/static/src/css/event.css @@ -0,0 +1,83 @@ +.oe_event_date{ + border-top-left-radius:3px; + border-top-right-radius:3px; + font-size: 48px; + height: auto; + font-weight: bold; + text-align: center; + margin-bottom:-7px; + color: #FFFFFF; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + background-color: #8A89BA; +} +.oe_event_time{ + border-bottom-left-radius:3px; + border-bottom-right-radius:3px; + font-size: 12px; + text-align: center; + font-weight: bold; + color: #8A89BA; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + background-color: #FFFFFF; +} +.oe_event_month_year{ + border-bottom-left-radius:3px; + border-bottom-right-radius:3px; + font-size: 12px; + text-align: center; + font-weight: bold; + color: #FFFFFF; + background-color: #8A89BA; +} +div.oe_fold_column{ + padding:0px !important; +} +.oe_event_button_subscribe{ + display: block; + border: 1px solid #404040; + color: #404040; + font-size: 10px; + text-align: center; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -o-border-radius: 3px; + -ms-border-radius: 3px; + border-radius: 3px; +} +.oe_event_button_unsubscribe{ + display: block; + border: 1px solid #404040; + color: #FFFFFF; + background-color:#DC5F59; + font-size: 10px; + text-align: center; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -o-border-radius: 3px; + -ms-border-radius: 3px; + border-radius: 3px; +} +.oe_event_button_subscribe:hover { + cursor: pointer; + background-color: #DC5F59; +} +.oe_event_button_unsubscribe:hover { + cursor: pointer; + background-color: #404040; +} +.subscribe, .subscribe_button:hover span { + display: none; + background-color: #DC5F59; +} +.subscribe_button:hover .subscribe { + display: inline; + background-color: #DC5F59; +} +.unsubscribe, .unsubscribe_button:hover span { + display: none; +} +.unsubscribe_button:hover .unsubscribe { + display: inline; + background-color: #404040; +} + From 43c887aff7c7cd0b991decc23420589b1785d62e Mon Sep 17 00:00:00 2001 From: "Dharti Ratani (OpenERP)" Date: Wed, 7 Mar 2012 12:30:04 +0530 Subject: [PATCH 02/43] [IMP]changes in css for buttons bzr revid: dhr@tinyerp.com-20120307070004-wvmtqmqu8ybj0uz3 --- addons/event/event_view.xml | 11 ++-- addons/event/static/src/css/event.css | 92 ++++++++++++++++++--------- 2 files changed, 68 insertions(+), 35 deletions(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 5aacf7a2845..79e8193134c 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -189,7 +189,7 @@

@
Organized by
- + Only @@ -197,20 +197,19 @@ seat available. - +

diff --git a/addons/event/static/src/css/event.css b/addons/event/static/src/css/event.css index f3d60fcee26..61ea2da3be3 100644 --- a/addons/event/static/src/css/event.css +++ b/addons/event/static/src/css/event.css @@ -32,52 +32,86 @@ div.oe_fold_column{ padding:0px !important; } -.oe_event_button_subscribe{ - display: block; - border: 1px solid #404040; +.oe_event_button_subscribe { + display: inline-block; + border: 1px solid #ababab; color: #404040; - font-size: 10px; + font-size: 12px; + padding: 3px 10px; text-align: center; + -o-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -webkit-background-size: auto auto !important; + background-size: 100% 100%; + background: #d8d8d8 none; + background: none, -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); + background: none, -webkit-linear-gradient(#efefef, #d8d8d8); + background: none, -moz-linear-gradient(#efefef, #d8d8d8); + background: none, -o-linear-gradient(top, #efefef, #d8d8d8); + background: none, -khtml-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); + background: -ms-linear-gradient(top, #efefef, #d8d8d8); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#efefef', endColorstr='#d8d8d8',GradientType=0 ); -moz-border-radius: 3px; -webkit-border-radius: 3px; -o-border-radius: 3px; -ms-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; + -o-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; } -.oe_event_button_unsubscribe{ - display: block; - border: 1px solid #404040; - color: #FFFFFF; - background-color:#DC5F59; - font-size: 10px; +.oe_event_button_unsubscribe { + display: inline-block; + border: 1px solid #ababab; + color: #404040; + font-size: 12px; + padding: 3px 10px; text-align: center; + -o-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -webkit-background-size: auto auto !important; + background-size: 100% 100%; + background: #8A89BA none; + background: none, -webkit-gradient(linear, left top, left bottom, from(#8A89BA), to(#8A89BA)); + background: none, -webkit-linear-gradient(#8A89BA, #8A89BA); + background: none, -moz-linear-gradient(#8A89BA, #8A89BA); + background: none, -o-linear-gradient(top, #8A89BA, #8A89BA); + background: none, -khtml-gradient(linear, left top, left bottom, from(#8A89BA), to(#8A89BA)); + background: -ms-linear-gradient(top, #8A89BA, #8A89BA); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8A89BA, endColorstr='#8A89BA',GradientType=0 ); -moz-border-radius: 3px; -webkit-border-radius: 3px; -o-border-radius: 3px; -ms-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; + -o-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; } .oe_event_button_subscribe:hover { cursor: pointer; - background-color: #DC5F59; + background-size: 100% 100%; + background: #DC5F59 none; } .oe_event_button_unsubscribe:hover { - cursor: pointer; - background-color: #404040; -} -.subscribe, .subscribe_button:hover span { - display: none; - background-color: #DC5F59; -} -.subscribe_button:hover .subscribe { - display: inline; - background-color: #DC5F59; -} -.unsubscribe, .unsubscribe_button:hover span { - display: none; -} -.unsubscribe_button:hover .unsubscribe { - display: inline; - background-color: #404040; -} + cursor: pointer; + background-size: 100% 100%; + background: #DC5F59 none; + } + .unsubscribe, .unsubscribe_button:hover span { + display: none; + background-color: #DC5F59 + } + .unsubscribe_button:hover .unsubscribe { + display: inline; + background-color: #DC5F59; + } From 456b417f0bd3650d145f9cb94ec8e6f13faf179a Mon Sep 17 00:00:00 2001 From: "Dharti Ratani (OpenERP)" Date: Wed, 7 Mar 2012 14:14:18 +0530 Subject: [PATCH 03/43] [IMP] bzr revid: dhr@tinyerp.com-20120307084418-uaemwhxf24f95fkw --- addons/event/event_view.xml | 9 ++++++--- addons/event/static/src/css/event.css | 18 +++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 79e8193134c..21c2e020098 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -172,6 +172,7 @@ + @@ -187,14 +188,16 @@

+ Status:
@
Organized by
- Only + Only + No ticket available. - seats - seat available. + tickets + ticket available. diff --git a/addons/event/static/src/css/event.css b/addons/event/static/src/css/event.css index 61ea2da3be3..bd73d67f20a 100644 --- a/addons/event/static/src/css/event.css +++ b/addons/event/static/src/css/event.css @@ -66,7 +66,7 @@ div.oe_fold_column{ } .oe_event_button_unsubscribe { display: inline-block; - border: 1px solid #ababab; + border: 1px solid #AAA; color: #404040; font-size: 12px; padding: 3px 10px; @@ -75,14 +75,14 @@ div.oe_fold_column{ -moz-background-size: 100% 100%; -webkit-background-size: auto auto !important; background-size: 100% 100%; - background: #8A89BA none; - background: none, -webkit-gradient(linear, left top, left bottom, from(#8A89BA), to(#8A89BA)); - background: none, -webkit-linear-gradient(#8A89BA, #8A89BA); - background: none, -moz-linear-gradient(#8A89BA, #8A89BA); - background: none, -o-linear-gradient(top, #8A89BA, #8A89BA); - background: none, -khtml-gradient(linear, left top, left bottom, from(#8A89BA), to(#8A89BA)); - background: -ms-linear-gradient(top, #8A89BA, #8A89BA); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8A89BA, endColorstr='#8A89BA',GradientType=0 ); + background: #AAA none; + background: none, -webkit-gradient(linear, left top, left bottom, from(#AAA), to(#AAA)); + background: none, -webkit-linear-gradient(#AAA, #AAA); + background: none, -moz-linear-gradient(#AAA, #AAA); + background: none, -o-linear-gradient(top, #AAA, #AAA); + background: none, -khtml-gradient(linear, left top, left bottom, from(#AAA), to(#AAA)); + background: -ms-linear-gradient(top, #AAA, #AAA); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#AAA, endColorstr='#AAA',GradientType=0 ); -moz-border-radius: 3px; -webkit-border-radius: 3px; -o-border-radius: 3px; From 5bc638ec841424fc23d48bd1b254cab4b06c80ac Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Wed, 7 Mar 2012 15:23:36 +0530 Subject: [PATCH 04/43] [IMP]:event:removed status from kanban view. bzr revid: apa@tinyerp.com-20120307095336-c2w2o2dg7i81m38c --- addons/event/event_view.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 21c2e020098..0b9c893b881 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -188,8 +188,7 @@

- Status:
- @
+ @
Organized by
Only No ticket available. From ce5483e4c447494f92b9b42852a37c93e3785ff6 Mon Sep 17 00:00:00 2001 From: "Purnendu Singh (OpenERP)" Date: Fri, 16 Mar 2012 12:29:27 +0530 Subject: [PATCH 05/43] [IMP] mail: add a feature to call _hook_message_sent method of the related module with will trigger the workflow and set state accordingly bzr revid: psi@tinyerp.com-20120316065927-1m4ns7gpe5bwr4pk --- addons/mail/mail_message.py | 4 +++- addons/mail/wizard/mail_compose_message.py | 5 +++-- addons/mail/wizard/mail_compose_message_view.xml | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index b41f1213791..66d8441e564 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -517,7 +517,9 @@ class mail_message(osv.osv): message.write({'state':'sent', 'message_id': res}) else: message.write({'state':'exception'}) - + model_pool = self.pool.get(message.model) + if hasattr(model_pool, '_hook_message_sent'): + model_pool._hook_message_sent(cr, uid, message.res_id, context=context) # if auto_delete=True then delete that sent messages as well as attachments message.refresh() if message.state == 'sent' and message.auto_delete: diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index e68bd70a739..2010d7d0f5a 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -100,6 +100,7 @@ class mail_compose_message(osv.osv_memory): if not result.get('email_from'): current_user = self.pool.get('res.users').browse(cr, uid, uid, context) result['email_from'] = current_user.user_email or False + result['subtype'] = 'html' return result _columns = { @@ -158,8 +159,9 @@ class mail_compose_message(osv.osv_memory): if not (subject.startswith('Re:') or subject.startswith(re_prefix)): subject = "%s %s" % (re_prefix, subject) result.update({ - 'subtype' : 'plain', # default to the text version due to quoting + 'subtype' : message_data.subtype or 'plain', # default to the text version due to quoting 'body_text' : body, + 'body_html' : message_data.body_html, 'subject' : subject, 'attachment_ids' : [], 'model' : message_data.model or False, @@ -238,7 +240,6 @@ class mail_compose_message(osv.osv_memory): subtype=mail.subtype, headers=headers, context=context) # in normal mode, we send the email immediately, as the user expects us to (delay should be sufficiently small) mail_message.send(cr, uid, [msg_id], context=context) - return {'type': 'ir.actions.act_window_close'} def render_template(self, cr, uid, template, model, res_id, context=None): diff --git a/addons/mail/wizard/mail_compose_message_view.xml b/addons/mail/wizard/mail_compose_message_view.xml index d559d679c8b..3a44b040139 100644 --- a/addons/mail/wizard/mail_compose_message_view.xml +++ b/addons/mail/wizard/mail_compose_message_view.xml @@ -23,6 +23,7 @@ + From 00f7fbe5504f7a1b2783072f4e7b7f542fc08017 Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Tue, 20 Mar 2012 15:52:17 +0530 Subject: [PATCH 06/43] [IMP]:event:remove mouse hover for subscribe button. bzr revid: apa@tinyerp.com-20120320102217-80icy0kj5ronpfq4 --- addons/event/static/src/css/event.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/event/static/src/css/event.css b/addons/event/static/src/css/event.css index bd73d67f20a..4a54d6cbe9e 100644 --- a/addons/event/static/src/css/event.css +++ b/addons/event/static/src/css/event.css @@ -99,7 +99,7 @@ div.oe_fold_column{ .oe_event_button_subscribe:hover { cursor: pointer; background-size: 100% 100%; - background: #DC5F59 none; + /*background: #DC5F59 none;*/ } .oe_event_button_unsubscribe:hover { cursor: pointer; From 4606fe32b7729583228124f8a29f6718eeef9002 Mon Sep 17 00:00:00 2001 From: "Khushboo Bhatt (Open ERP)" Date: Tue, 20 Mar 2012 15:54:54 +0530 Subject: [PATCH 07/43] [IMP]help changed. bzr revid: kbh@tinyerp.com-20120320102454-4q2hvlbg2rsouj1r --- addons/event/event_view.xml | 6 +++--- addons/event/static/src/css/event.css | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 0b9c893b881..6f80299f02c 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -265,9 +265,9 @@ + name="upcoming" + domain="[('date_begin','>=', time.strftime('%%Y-%%m-%%d 00:00:00'))]" + help="Up Coming Events form today" /> diff --git a/addons/event/static/src/css/event.css b/addons/event/static/src/css/event.css index bd73d67f20a..4a0a286140d 100644 --- a/addons/event/static/src/css/event.css +++ b/addons/event/static/src/css/event.css @@ -99,7 +99,6 @@ div.oe_fold_column{ .oe_event_button_subscribe:hover { cursor: pointer; background-size: 100% 100%; - background: #DC5F59 none; } .oe_event_button_unsubscribe:hover { cursor: pointer; From 57c3460598edf0467755cdcc1c46f2b50936ab50 Mon Sep 17 00:00:00 2001 From: "Khushboo Bhatt (Open ERP)" Date: Tue, 20 Mar 2012 16:14:34 +0530 Subject: [PATCH 08/43] [IMP] bzr revid: kbh@tinyerp.com-20120320104434-1tkt040qzvukmsgc --- addons/event/event_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 6f80299f02c..c766201805e 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -267,7 +267,7 @@ + help="Up coming events form today" /> From 7f982abc8581b60a45727fb60922b3ab37a3f4dc Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Tue, 20 Mar 2012 16:41:58 +0530 Subject: [PATCH 09/43] [IMP] bzr revid: apa@tinyerp.com-20120320111158-4w449qdomaa29oqa --- addons/event/event_view.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index c766201805e..a6c00934fa5 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -265,9 +265,9 @@ + name="upcoming" + domain="[('date_begin','>=', time.strftime('%%Y-%%m-%%d 00:00:00'))]" + help="Up coming events form today" /> From 15249d4ce1eed0db3b0fd94006ddf5c3a6174707 Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Wed, 21 Mar 2012 10:51:26 +0530 Subject: [PATCH 10/43] [IMP] bzr revid: apa@tinyerp.com-20120321052126-j5p0itn5ij5gdnia --- addons/event/event.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/event/event.py b/addons/event/event.py index 1b92b995239..340719e99a8 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -216,10 +216,15 @@ class event_event(osv.osv): def subscribe_to_event(self,cr,uid,ids,context=None): register_pool = self.pool.get('event.registration') + user_pool = self.pool.get('res.users') curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) + user = user_pool.browse(cr,uid,uid,context) + print user.user_email if not curr_reg_id: register_pool.create(cr, uid, {'state':'open', 'event_id':ids[0], + 'email':user.user_email, + 'name':user.name, 'subscribe':True, }) else: @@ -234,7 +239,7 @@ class event_event(osv.osv): register_pool = self.pool.get('event.registration') curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) if curr_reg_id: - register_pool.write(cr, uid, curr_reg_id,{'state':'draft', + register_pool.write(cr, uid, curr_reg_id,{'state':'cancel', 'event_id':ids[0], 'subscribe':False }) From 94c68ff9382b5a9ead79e2f00240861a68b3f9cc Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Wed, 21 Mar 2012 11:13:56 +0530 Subject: [PATCH 11/43] [IMP] bzr revid: apa@tinyerp.com-20120321054356-t3t96j0kunsi4924 --- addons/event/event.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/addons/event/event.py b/addons/event/event.py index 340719e99a8..82b06bc8d48 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -221,17 +221,20 @@ class event_event(osv.osv): user = user_pool.browse(cr,uid,uid,context) print user.user_email if not curr_reg_id: - register_pool.create(cr, uid, {'state':'open', - 'event_id':ids[0], - 'email':user.user_email, - 'name':user.name, - 'subscribe':True, - }) + curr_reg_id = register_pool.create(cr, uid, {'event_id':ids[0], + 'email':user.user_email, + 'name':user.name, + 'subscribe':True, + }) + + else: register_pool.write(cr, uid, curr_reg_id,{'state':'open','subscribe':True, 'event_id':ids[0], }) - + if isinstance(curr_reg_id, (int, long)): + curr_reg_id = [curr_reg_id] + register_pool.confirm_registration(cr,uid,curr_reg_id,context) self.write(cr,uid,ids,{'subscribe':True}) return True @@ -239,11 +242,13 @@ class event_event(osv.osv): register_pool = self.pool.get('event.registration') curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) if curr_reg_id: - register_pool.write(cr, uid, curr_reg_id,{'state':'cancel', - 'event_id':ids[0], + if isinstance(curr_reg_id, (int, long)): + curr_reg_id = [curr_reg_id] + register_pool.write(cr, uid, curr_reg_id,{'event_id':ids[0], 'subscribe':False }) - self.write(cr,uid,ids,{'subscribe':False}) + register_pool.button_reg_cancel(cr,uid,curr_reg_id,context) + self.write(cr,uid,ids,{'subscribe':False}) return True def _check_closing_date(self, cr, uid, ids, context=None): From a1f79bde2a20981cec417e3ce3cd91ffdeece4b5 Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Wed, 21 Mar 2012 12:34:08 +0530 Subject: [PATCH 12/43] [IMP] bzr revid: apa@tinyerp.com-20120321070408-gy02ke9mzh6xzkl0 --- addons/event/event.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/event/event.py b/addons/event/event.py index 82b06bc8d48..7d2c18a01bc 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -219,7 +219,6 @@ class event_event(osv.osv): user_pool = self.pool.get('res.users') curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) user = user_pool.browse(cr,uid,uid,context) - print user.user_email if not curr_reg_id: curr_reg_id = register_pool.create(cr, uid, {'event_id':ids[0], 'email':user.user_email, From 7f8b27131b658b2936e26777d996e5f2b96012ea Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Wed, 21 Mar 2012 15:33:57 +0530 Subject: [PATCH 13/43] [IMP] bzr revid: apa@tinyerp.com-20120321100357-0u42rph6fovo3cth --- addons/event/event_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index a6c00934fa5..338c2dd9ba8 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -267,7 +267,7 @@ + help="Up coming events from today" /> From 0d59afa455ef124252a865b22cbd82b30191bd8a Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Wed, 21 Mar 2012 18:24:58 +0530 Subject: [PATCH 14/43] [IMP] bzr revid: apa@tinyerp.com-20120321125458-4qu5opgtlogtpq2h --- addons/event/event.py | 11 ++++++----- addons/event/event_demo.xml | 3 --- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/addons/event/event.py b/addons/event/event.py index 7d2c18a01bc..baa14de9bbe 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -221,9 +221,10 @@ class event_event(osv.osv): user = user_pool.browse(cr,uid,uid,context) if not curr_reg_id: curr_reg_id = register_pool.create(cr, uid, {'event_id':ids[0], - 'email':user.user_email, - 'name':user.name, - 'subscribe':True, + 'email':user.user_email, + 'name':user.name, + 'user_id':uid, + 'subscribe':True, }) @@ -293,7 +294,7 @@ class event_registration(osv.osv): 'log_ids': fields.one2many('mail.message', 'res_id', 'Logs', domain=[('email_from', '=', False),('model','=',_name)]), 'event_end_date': fields.related('event_id','date_end', type='datetime', string="Event End Date", readonly=True), 'event_begin_date': fields.related('event_id', 'date_begin', type='datetime', string="Event Start Date", readonly=True), - 'user_id': fields.many2one('res.users', 'Responsible', states={'done': [('readonly', True)]}), + 'user_id': fields.many2one('res.users', 'Attendee', states={'done': [('readonly', True)]}), 'company_id': fields.related('event_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True, states={'draft':[('readonly',False)]}), 'state': fields.selection([('draft', 'Unconfirmed'), ('open', 'Confirmed'), @@ -306,7 +307,7 @@ class event_registration(osv.osv): _defaults = { 'nb_register': 1, 'state': 'draft', - 'user_id': lambda self, cr, uid, ctx: uid, + #'user_id': lambda self, cr, uid, ctx: uid, } _order = 'name, create_date desc' diff --git a/addons/event/event_demo.xml b/addons/event/event_demo.xml index 0dfbbf6de18..5b4654342c9 100644 --- a/addons/event/event_demo.xml +++ b/addons/event/event_demo.xml @@ -32,7 +32,6 @@ Concert of Bon Jovi - 500 @@ -42,7 +41,6 @@ - 50 350 @@ -52,7 +50,6 @@ 200 - From ef409154e6ad620c287c7bd3971993328742d497 Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Thu, 22 Mar 2012 11:15:23 +0530 Subject: [PATCH 15/43] [IMP] bzr revid: apa@tinyerp.com-20120322054523-650x1m4vynflsfii --- addons/event/event_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 338c2dd9ba8..48fa1b9cc8b 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -264,7 +264,7 @@ - From 9f137659c4ca5405a0a3f42fc8e606822bb44ce7 Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Thu, 22 Mar 2012 15:23:52 +0530 Subject: [PATCH 16/43] [FIX]:ValueError: No such external ID currently defined in the system: event.event_type_4 bzr revid: apa@tinyerp.com-20120322095352-duinua5esddclxw5 --- addons/event_sale/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/event_sale/__openerp__.py b/addons/event_sale/__openerp__.py index f92a9eb5617..d8f689986e2 100644 --- a/addons/event_sale/__openerp__.py +++ b/addons/event_sale/__openerp__.py @@ -37,8 +37,8 @@ It defines a new kind of service products that offers you the possibility to cho 'depends': ['event','sale','sale_crm'], 'update_xml': [ 'event_sale_view.xml', - 'event_demo.xml', ], + 'demo_xml': ['event_demo.xml'], 'test':['test/confirm.yml'], 'installable': True, 'active': False, From 3dbea7ec59865cb1d9034c61d0e698ae9fd8f0df Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Fri, 23 Mar 2012 10:25:55 +0530 Subject: [PATCH 17/43] [IMP] bzr revid: apa@tinyerp.com-20120323045555-qab1wjnq4dbymwbq --- addons/event/event_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 8032bd7a504..4b4f2b1e44d 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -299,7 +299,7 @@ event.event form kanban,calendar,tree,form,graph - {"search_default_upcoming":1,"search_default_section_id": section_id} + {"search_default_upcoming":1} Event is the low level object used by meeting and others documents that should be synchronized with mobile devices or calendar applications through caldav. Most of the users should work in the Calendar menu, and not in the list of events. From 388b85c751826aefde73b9afae9d19a9f60342fa Mon Sep 17 00:00:00 2001 From: "Meera Trambadia (OpenERP)" Date: Mon, 26 Mar 2012 15:26:51 +0530 Subject: [PATCH 18/43] [IMP] base:-corrected typo-dashboard bzr revid: mtr@tinyerp.com-20120326095651-47a4xwmoun01qjp8 --- openerp/addons/base/base_menu.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/base_menu.xml b/openerp/addons/base/base_menu.xml index c3ad5982f28..050b1e5adf1 100644 --- a/openerp/addons/base/base_menu.xml +++ b/openerp/addons/base/base_menu.xml @@ -28,7 +28,7 @@ /> - + From 7c354067b22a3181c4775c576d9fcc23578a6fd1 Mon Sep 17 00:00:00 2001 From: "Meera Trambadia (OpenERP)" Date: Mon, 26 Mar 2012 15:45:14 +0530 Subject: [PATCH 19/43] [IMP] account,auction,crm,document,event,hr,mrp,project_*,purchase,sale,stock:-improved the parent menu name for dashboard menus bzr revid: mtr@tinyerp.com-20120326101514-mkfubco6ngi9lzr0 --- addons/account/board_account_view.xml | 2 +- addons/auction/board_auction_view.xml | 2 +- addons/crm/board_crm_statistical_view.xml | 4 ++-- addons/document/board_document_view.xml | 2 +- addons/event/board_association_view.xml | 2 +- addons/hr/hr_board.xml | 2 +- addons/mrp/board_manufacturing_view.xml | 2 +- addons/project/board_project_view.xml | 6 +++--- addons/project_issue/board_project_issue_view.xml | 2 +- addons/project_planning/project_planning_view.xml | 4 ++-- addons/project_scrum/board_project_scrum_view.xml | 2 +- addons/purchase/board_purchase_view.xml | 2 +- addons/sale/board_sale_view.xml | 4 ++-- addons/stock/board_warehouse_view.xml | 2 +- 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/addons/account/board_account_view.xml b/addons/account/board_account_view.xml index 0ec75e7b5c8..6417bb99d88 100644 --- a/addons/account/board_account_view.xml +++ b/addons/account/board_account_view.xml @@ -61,7 +61,7 @@ - + diff --git a/addons/auction/board_auction_view.xml b/addons/auction/board_auction_view.xml index cb5ed07804c..360d8f38116 100644 --- a/addons/auction/board_auction_view.xml +++ b/addons/auction/board_auction_view.xml @@ -93,7 +93,7 @@ - + - + diff --git a/addons/event/board_association_view.xml b/addons/event/board_association_view.xml index b9187227b1c..96db3db6781 100644 --- a/addons/event/board_association_view.xml +++ b/addons/event/board_association_view.xml @@ -63,7 +63,7 @@ + parent="base.menu_reporting_dashboard" sequence="25"/> - + diff --git a/addons/mrp/board_manufacturing_view.xml b/addons/mrp/board_manufacturing_view.xml index 1815c4ceb12..cb81d51d439 100644 --- a/addons/mrp/board_manufacturing_view.xml +++ b/addons/mrp/board_manufacturing_view.xml @@ -29,7 +29,7 @@ + parent="base.menu_reporting_dashboard" sequence="15"/> menu - diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml index 3beb5ad39a9..d12b62dbf18 100644 --- a/addons/project_planning/project_planning_view.xml +++ b/addons/project_planning/project_planning_view.xml @@ -292,11 +292,11 @@ - + + parent="project.menu_project_dashboard"/> diff --git a/addons/project_scrum/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml index 7d993dd90c9..924a1cbf5cc 100644 --- a/addons/project_scrum/board_project_scrum_view.xml +++ b/addons/project_scrum/board_project_scrum_view.xml @@ -98,7 +98,7 @@ diff --git a/addons/purchase/board_purchase_view.xml b/addons/purchase/board_purchase_view.xml index 74f34a45cb6..4c9e776b96b 100644 --- a/addons/purchase/board_purchase_view.xml +++ b/addons/purchase/board_purchase_view.xml @@ -5,7 +5,7 @@ + parent="base.menu_reporting_dashboard" sequence="5"/> Request for Quotations diff --git a/addons/sale/board_sale_view.xml b/addons/sale/board_sale_view.xml index 57eee7f184b..8a6caf1a849 100644 --- a/addons/sale/board_sale_view.xml +++ b/addons/sale/board_sale_view.xml @@ -30,8 +30,8 @@ - - + + diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml index 5c52c6412f3..b8de9cf445e 100644 --- a/addons/stock/board_warehouse_view.xml +++ b/addons/stock/board_warehouse_view.xml @@ -68,7 +68,7 @@ - + From 15296eb4586fd987937c58e989d758c83279f6a7 Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Mon, 26 Mar 2012 16:01:01 +0530 Subject: [PATCH 20/43] [IMP]:improved code bzr revid: apa@tinyerp.com-20120326103101-bupq777xei3h8ilv --- addons/event/event.py | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/addons/event/event.py b/addons/event/event.py index baa14de9bbe..1bdbade2e46 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -154,9 +154,9 @@ class event_event(osv.osv): return res def _subscribe_fnc(self, cr, uid, ids, fields, args, context=None): - """Get Confirm or uncofirm register value. + """Get Subscribe or Unsubscribe registration value. @param ids: List of Event registration type's id - @param fields: List of function fields(register_current and register_prospect). + @param fields: List of function fields(subscribe). @param context: A standard dictionary for contextual values @return: Dictionary of function fields value. """ @@ -167,10 +167,8 @@ class event_event(osv.osv): if not curr_reg_id:res[event.id] = False if curr_reg_id: for reg in register_pool.browse(cr,uid,curr_reg_id,context=context): - if not reg.subscribe: - res[event.id]=False - else: - res[event.id]=True + res[event.id] = False + if reg.subscribe:res[event.id]= True return res _columns = { @@ -229,26 +227,18 @@ class event_event(osv.osv): else: - register_pool.write(cr, uid, curr_reg_id,{'state':'open','subscribe':True, - 'event_id':ids[0], - }) - if isinstance(curr_reg_id, (int, long)): - curr_reg_id = [curr_reg_id] + register_pool.write(cr, uid, curr_reg_id,{'subscribe':True}) + if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id] register_pool.confirm_registration(cr,uid,curr_reg_id,context) - self.write(cr,uid,ids,{'subscribe':True}) return True def unsubscribe_to_event(self,cr,uid,ids,context=None): register_pool = self.pool.get('event.registration') curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) if curr_reg_id: - if isinstance(curr_reg_id, (int, long)): - curr_reg_id = [curr_reg_id] - register_pool.write(cr, uid, curr_reg_id,{'event_id':ids[0], - 'subscribe':False - }) + if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id] + register_pool.write(cr, uid, curr_reg_id,{'subscribe':False}) register_pool.button_reg_cancel(cr,uid,curr_reg_id,context) - self.write(cr,uid,ids,{'subscribe':False}) return True def _check_closing_date(self, cr, uid, ids, context=None): From ef54b4df2e50e479e61cd69a47b569120260730d Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Mon, 26 Mar 2012 16:02:12 +0530 Subject: [PATCH 21/43] [IMP]:improved code bzr revid: apa@tinyerp.com-20120326103212-hdqu509fxbocjvil --- addons/event/event.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/addons/event/event.py b/addons/event/event.py index 1bdbade2e46..6cd42843194 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -222,10 +222,7 @@ class event_event(osv.osv): 'email':user.user_email, 'name':user.name, 'user_id':uid, - 'subscribe':True, - }) - - + 'subscribe':True}) else: register_pool.write(cr, uid, curr_reg_id,{'subscribe':True}) if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id] From 035e9c9ee081afba130735aca356a02b131b8c8d Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Mon, 26 Mar 2012 16:15:31 +0530 Subject: [PATCH 22/43] [ADD]:added event share module bzr revid: apa@tinyerp.com-20120326104531-nzsg2lyy6up8ost7 --- addons/event_share/__init__.py | 24 ++++++++++++ addons/event_share/__openerp__.py | 35 +++++++++++++++++ addons/event_share/wizard/__init__.py | 24 ++++++++++++ addons/event_share/wizard/wizard_share.py | 47 +++++++++++++++++++++++ 4 files changed, 130 insertions(+) create mode 100644 addons/event_share/__init__.py create mode 100644 addons/event_share/__openerp__.py create mode 100644 addons/event_share/wizard/__init__.py create mode 100644 addons/event_share/wizard/wizard_share.py diff --git a/addons/event_share/__init__.py b/addons/event_share/__init__.py new file mode 100644 index 00000000000..8dbeda71145 --- /dev/null +++ b/addons/event_share/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import wizard +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/event_share/__openerp__.py b/addons/event_share/__openerp__.py new file mode 100644 index 00000000000..f6ad583364a --- /dev/null +++ b/addons/event_share/__openerp__.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + + +{ + 'name': 'Events Share', + 'version': '0.1', + 'category': 'Tools', + 'complexity': "easy", + 'description': """ """, + 'author': 'OpenERP SA', + 'depends': ['event','share'], + 'installable': True, + #'application': True, + 'auto_install': False, +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event_share/wizard/__init__.py b/addons/event_share/wizard/__init__.py new file mode 100644 index 00000000000..d62c6170854 --- /dev/null +++ b/addons/event_share/wizard/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import wizard_share +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/event_share/wizard/wizard_share.py b/addons/event_share/wizard/wizard_share.py new file mode 100644 index 00000000000..02b5ae26009 --- /dev/null +++ b/addons/event_share/wizard/wizard_share.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2011 OpenERP S.A (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import osv, fields +from tools.translate import _ + +UID_ROOT = 1 +EVENT_ACCESS = ('perm_read', 'perm_write', 'perm_create') + +class share_wizard_event(osv.osv_memory): + """Inherited share wizard to automatically create appropriate + menus in the selected portal upon sharing with a portal group.""" + _inherit = "share.wizard" + + def _add_access_rights_for_share_group(self, cr, uid, group_id, mode, fields_relations, context=None): + print "Calling _add_access_rights_for_share_group.....!!!" + """Adds access rights to group_id on object models referenced in ``fields_relations``, + intersecting with access rights of current user to avoid granting too much rights + """ + res = super(share_wizard_event, self)._add_access_rights_for_share_group(cr, uid, group_id, mode, fields_relations, context=context) + access_model = self.pool.get('ir.model.access') + access_ids = access_model.search(cr,uid,[('group_id','=',group_id)],context = context) + access_model.write(cr, uid, access_ids, {'perm_read': True, 'perm_write': True}) + return res + +share_wizard_event() + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file From afe3ea9e46c6ba85b9e03d1452b7e7dcaf64fea0 Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Mon, 26 Mar 2012 16:52:21 +0530 Subject: [PATCH 23/43] [IMP] bzr revid: apa@tinyerp.com-20120326112221-jupd2mmjc504iu2x --- addons/event/event.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/addons/event/event.py b/addons/event/event.py index 6cd42843194..b9ca4d3276f 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -223,20 +223,14 @@ class event_event(osv.osv): 'name':user.name, 'user_id':uid, 'subscribe':True}) - else: - register_pool.write(cr, uid, curr_reg_id,{'subscribe':True}) if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id] - register_pool.confirm_registration(cr,uid,curr_reg_id,context) - return True + return register_pool.confirm_registration(cr,uid,curr_reg_id,context) def unsubscribe_to_event(self,cr,uid,ids,context=None): register_pool = self.pool.get('event.registration') curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) - if curr_reg_id: - if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id] - register_pool.write(cr, uid, curr_reg_id,{'subscribe':False}) - register_pool.button_reg_cancel(cr,uid,curr_reg_id,context) - return True + if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id] + return register_pool.button_reg_cancel(cr,uid,curr_reg_id,context) def _check_closing_date(self, cr, uid, ids, context=None): for event in self.browse(cr, uid, ids, context=context): @@ -304,7 +298,7 @@ class event_registration(osv.osv): def confirm_registration(self, cr, uid, ids, context=None): self.message_append(cr, uid, ids,_('State set to open'),body_text= _('Open')) - return self.write(cr, uid, ids, {'state': 'open'}, context=context) + return self.write(cr, uid, ids, {'state': 'open','subscribe':True}, context=context) def registration_open(self, cr, uid, ids, context=None): @@ -331,7 +325,7 @@ class event_registration(osv.osv): def button_reg_cancel(self, cr, uid, ids, context=None, *args): self.message_append(cr, uid, ids,_('State set to Cancel'),body_text= _('Cancel')) - return self.write(cr, uid, ids, {'state': 'cancel'}) + return self.write(cr, uid, ids, {'state': 'cancel','subscribe':False}) def mail_user(self, cr, uid, ids, context=None): """ From ea7cedc96d857d6e842427d770f734e492de1e9d Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Mon, 26 Mar 2012 17:01:32 +0530 Subject: [PATCH 24/43] [IMP] bzr revid: apa@tinyerp.com-20120326113132-bnodi8lyzwohf5v3 --- addons/event/event.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/event/event.py b/addons/event/event.py index b9ca4d3276f..a69e17aa269 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -215,14 +215,13 @@ class event_event(osv.osv): def subscribe_to_event(self,cr,uid,ids,context=None): register_pool = self.pool.get('event.registration') user_pool = self.pool.get('res.users') - curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])]) user = user_pool.browse(cr,uid,uid,context) + curr_reg_id = register_pool.search(cr,uid,[('user_id','=',user.id),('event_id','=',ids[0])]) if not curr_reg_id: - curr_reg_id = register_pool.create(cr, uid, {'event_id':ids[0], - 'email':user.user_email, - 'name':user.name, - 'user_id':uid, - 'subscribe':True}) + curr_reg_id = register_pool.create(cr, uid, {'event_id':ids[0],'email':user.user_email, + 'name':user.name,'user_id':user.id, + 'subscribe':True + }) if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id] return register_pool.confirm_registration(cr,uid,curr_reg_id,context) From b79985289aaa717c2c7b886ffdf0f70150e01adf Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Mon, 26 Mar 2012 17:08:47 +0530 Subject: [PATCH 25/43] [IMP] bzr revid: apa@tinyerp.com-20120326113847-rcw09e4bp87sn6fh --- addons/event/event.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/event/event.py b/addons/event/event.py index a69e17aa269..8aca855cc0a 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -287,7 +287,6 @@ class event_registration(osv.osv): _defaults = { 'nb_register': 1, 'state': 'draft', - #'user_id': lambda self, cr, uid, ctx: uid, } _order = 'name, create_date desc' From 928171ffe79bc8db58e138db1e3ffabeb2cc82da Mon Sep 17 00:00:00 2001 From: "Sanjay Gohel (Open ERP)" Date: Mon, 26 Mar 2012 17:15:56 +0530 Subject: [PATCH 26/43] [IMP]give rights to registration bzr revid: sgo@tinyerp.com-20120326114556-5hfi4wga6y7w455p --- addons/event_share/wizard/wizard_share.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/event_share/wizard/wizard_share.py b/addons/event_share/wizard/wizard_share.py index 02b5ae26009..8179781f432 100644 --- a/addons/event_share/wizard/wizard_share.py +++ b/addons/event_share/wizard/wizard_share.py @@ -37,9 +37,11 @@ class share_wizard_event(osv.osv_memory): """ res = super(share_wizard_event, self)._add_access_rights_for_share_group(cr, uid, group_id, mode, fields_relations, context=context) access_model = self.pool.get('ir.model.access') + access_ids = access_model.search(cr,uid,[('group_id','=',group_id)],context = context) - access_model.write(cr, uid, access_ids, {'perm_read': True, 'perm_write': True}) - return res + for record in access_model.browse(cr,uid,access_ids,context = context): + if record.model_id.model == 'event.registration': + access_model.write(cr, uid, record.id, {'perm_read': True, 'perm_write': True,'perm_create':True}) share_wizard_event() From 4f69e02d1c7c92e554af40c7e7d9f835399ebaba Mon Sep 17 00:00:00 2001 From: "Sanjay Gohel (Open ERP)" Date: Mon, 26 Mar 2012 18:18:25 +0530 Subject: [PATCH 27/43] [IMP]add share access to registration and changes in security view bzr revid: sgo@tinyerp.com-20120326124825-xewmd0qc82k9hk11 --- addons/event/event_demo.xml | 2 +- addons/event/event_view.xml | 4 ++-- addons/event/security/event_security.xml | 16 ++++++++++++---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/addons/event/event_demo.xml b/addons/event/event_demo.xml index 5b4654342c9..b76055cd0ff 100644 --- a/addons/event/event_demo.xml +++ b/addons/event/event_demo.xml @@ -45,7 +45,7 @@ 350 - Conference on ERP Buisness + Conference on ERP Business diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 4b4f2b1e44d..ff605297944 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -63,7 +63,7 @@ - + @@ -484,7 +484,7 @@ + action="action_registration" groups="event.group_event_manager,event.group_event_user"/> diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml index e7a84337bac..c0eb37d7b84 100644 --- a/addons/event/security/event_security.xml +++ b/addons/event/security/event_security.xml @@ -2,12 +2,20 @@ - - Event Manager + + Event + Helps you manage your Events. + 3 + + + + User + - - Event User + + Manager + From cc88233248b6f4bd9e088d6ed832adb66c02e439 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 27 Mar 2012 12:05:18 +0200 Subject: [PATCH 28/43] [FIX] Reference to legacy Widget#widget_parent bzr revid: fme@openerp.com-20120327100518-p64ada2s831exv52 --- addons/web/static/src/js/chrome.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 0aaa0398e20..4a449d1152c 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -393,7 +393,7 @@ openerp.web.Database = openerp.web.OldWidget.extend(/** @lends openerp.web.Datab if (self.db_list) { self.db_list.push(self.to_object(fields)['db_name']); self.db_list.sort(); - self.widget_parent.set_db_list(self.db_list); + self.getParent().set_db_list(self.db_list); } var form_obj = self.to_object(fields); From 3666c8515e0c1d15bdaf1012947603b4bdf16e04 Mon Sep 17 00:00:00 2001 From: "Amit Patel (OpenERP)" Date: Tue, 27 Mar 2012 16:40:58 +0530 Subject: [PATCH 29/43] [IMP]:improved help bzr revid: apa@tinyerp.com-20120327111058-b2gvgfe75ahsd813 --- addons/event/event_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index f4a30a45a47..89be60ea95b 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -267,7 +267,7 @@ + help="Upcoming events from today" /> From f268241d7ab5ce00d8f498759e7b8f6fc0401066 Mon Sep 17 00:00:00 2001 From: "Purnendu Singh (OpenERP)" Date: Tue, 27 Mar 2012 17:28:00 +0530 Subject: [PATCH 30/43] [IMP] mail: split out the send method and define a new method for post-processing of sent messages bzr revid: psi@tinyerp.com-20120327115800-mjcwrzz31sjytld0 --- addons/mail/mail_message.py | 27 +++++++++++-------- addons/mail/wizard/mail_compose_message.py | 2 -- .../mail/wizard/mail_compose_message_view.xml | 1 - 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index f2565decb79..db67751b017 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -464,6 +464,20 @@ class mail_message(osv.osv): msg['sub_type'] = msg['subtype'] or 'plain' return msg + def _postprocess_sent_message(self, cr, uid, message, context=None): + """ + if message is set to auto_delete=True then delete that sent messages as well as attachments + + :param message: the message to parse + """ + if message.auto_delete: + self.pool.get('ir.attachment').unlink(cr, uid, + [x.id for x in message.attachment_ids \ + if x.res_model == self._name and \ + x.res_id == message.id], + context=context) + message.unlink() + return True def send(self, cr, uid, ids, auto_commit=False, context=None): """Sends the selected emails immediately, ignoring their current @@ -521,18 +535,9 @@ class mail_message(osv.osv): message.write({'state':'sent', 'message_id': res}) else: message.write({'state':'exception'}) - model_pool = self.pool.get(message.model) - if hasattr(model_pool, '_hook_message_sent'): - model_pool._hook_message_sent(cr, uid, message.res_id, context=context) - # if auto_delete=True then delete that sent messages as well as attachments message.refresh() - if message.state == 'sent' and message.auto_delete: - self.pool.get('ir.attachment').unlink(cr, uid, - [x.id for x in message.attachment_ids \ - if x.res_model == self._name and \ - x.res_id == message.id], - context=context) - message.unlink() + if message.state == 'sent': + self._postprocess_sent_message(cr, uid, message, context=context) except Exception: _logger.exception('failed sending mail.message %s', message.id) message.write({'state':'exception'}) diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index 4f1163c0d69..f82132a2842 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -100,7 +100,6 @@ class mail_compose_message(osv.osv_memory): if not result.get('email_from'): current_user = self.pool.get('res.users').browse(cr, uid, uid, context) result['email_from'] = current_user.user_email or False - result['subtype'] = 'html' return result _columns = { @@ -161,7 +160,6 @@ class mail_compose_message(osv.osv_memory): result.update({ 'subtype' : message_data.subtype or 'plain', # default to the text version due to quoting 'body_text' : body, - 'body_html' : message_data.body_html, 'subject' : subject, 'attachment_ids' : [], 'model' : message_data.model or False, diff --git a/addons/mail/wizard/mail_compose_message_view.xml b/addons/mail/wizard/mail_compose_message_view.xml index 3a44b040139..d559d679c8b 100644 --- a/addons/mail/wizard/mail_compose_message_view.xml +++ b/addons/mail/wizard/mail_compose_message_view.xml @@ -23,7 +23,6 @@ - From 94c7dff4eafb5b64ae6326d31e12fda03b209b74 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 27 Mar 2012 17:13:57 +0200 Subject: [PATCH 31/43] [FIX] usage issue of py.eval: in py.js 0.4, it returns a JS object not a PY object, so .toJSON should not be called on the result bzr revid: xmo@openerp.com-20120327151357-4en4skjqb66b816c --- addons/web/static/src/js/view_form.js | 2 +- addons/web/static/src/js/view_page.js | 2 +- addons/web/static/src/js/views.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 8b1ec3098a6..b6788d979a5 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1605,7 +1605,7 @@ openerp.web.form.FieldFloat = openerp.web.form.FieldChar.extend({ init: function (view, node) { this._super(view, node); if (node.attrs.digits) { - this.digits = py.eval(node.attrs.digits).toJSON(); + this.digits = py.eval(node.attrs.digits); } else { this.digits = view.fields_view.fields[node.attrs.name].digits; } diff --git a/addons/web/static/src/js/view_page.js b/addons/web/static/src/js/view_page.js index 50cc95cdea6..1e7c570abdf 100644 --- a/addons/web/static/src/js/view_page.js +++ b/addons/web/static/src/js/view_page.js @@ -93,7 +93,7 @@ openerp.web.page = function (openerp) { init: function (view, node) { this._super(view, node); if (node.attrs.digits) { - this.digits = py.eval(node.attrs.digits).toJSON(); + this.digits = py.eval(node.attrs.digits); } else { this.digits = view.fields_view.fields[node.attrs.name].digits; } diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 5be0fad74f0..43ecc8444fc 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -763,7 +763,7 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner _(log_records.reverse()).each(function (record) { var context = {}; if (record.context) { - try { context = py.eval(record.context).toJSON(); } + try { context = py.eval(record.context); } catch (e) { /* TODO: what do I do now? */ } } $(_.str.sprintf('

  • %s
  • ', record.name)) From c86b24b4c3a7206f3725ed83200270191dfc9dd6 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 27 Mar 2012 21:32:12 +0200 Subject: [PATCH 32/43] [FIX] Add 'More...' feature to main menu bzr revid: fme@openerp.com-20120327193212-kflgwnvxp89lkqmb --- addons/web/static/src/css/base.css | 615 +++++++++++++++------------- addons/web/static/src/css/base.sass | 14 + addons/web/static/src/js/chrome.js | 29 ++ addons/web/static/src/xml/base.xml | 6 + 4 files changed, 388 insertions(+), 276 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index dab8e6070af..8bf4208ba72 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -5,279 +5,342 @@ color: #4c4c4c; font-size: 13px; background: white; - position: relative; } - .openerp2 a { - text-decoration: none; } - .openerp2 .oe_webclient { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; } - .openerp2 .oe_webclient .oe_application { - position: absolute; - top: 32px; - bottom: 0; - left: 206px; - right: 0; } - .openerp2 .oe_content_full_screen .oe_application { - top: 0; - left: 0; } - .openerp2 .oe_content_full_screen .topbar, .openerp2 .oe_content_full_screen .leftbar { - display: none; } - .openerp2 .oe_topbar { - width: 100%; - height: 31px; - border-top: solid 1px #d3d3d3; - border-bottom: solid 1px black; - 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); } - .openerp2 .oe_topbar .oe_systray { - float: right; } - .openerp2 .oe_topbar .oe_systray > div { - float: left; - padding: 0 4px 0 4px; } - .openerp2 .oe_topbar .oe_topbar_item li { - float: left; } - .openerp2 .oe_topbar .oe_topbar_item li a { - display: block; - padding: 5px 10px 7px; - line-height: 20px; - height: 20px; - color: #eeeeee; - vertical-align: top; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); } - .openerp2 .oe_topbar .oe_topbar_item li a:hover { - background: #303030; - color: white; - -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; - -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; - -box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; } - .openerp2 .oe_topbar .oe_topbar_item .oe_active { - background: #303030; - font-weight: bold; - color: white; - -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; - -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; - -box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; } - .openerp2 .oe_topbar .oe_topbar_avatar { - width: 24px; - height: 24px; - margin: -2px 2px 0 0; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; } - .openerp2 .oe_topbar .oe_topbar_avatar { - vertical-align: top; } - .openerp2 .oe_leftbar { - width: 205px; - height: 100%; - background: #f0eeee; - border-right: 1px solid #afafb6; - overflow: auto; - text-shadow: 0 1px 1px white; } - .openerp2 .oe_leftbar .oe_footer { - position: absolute; - width: 205px; - text-align: center; - bottom: 8px; } - .openerp2 a.oe_logo { - display: block; - text-align: center; - height: 70px; - line-height: 70px; } - .openerp2 a.oe_logo img { - height: 40px; - width: 157px; - margin: 14px 0; } - .openerp2 .oe_footer { - position: absolute; - width: 205px; - text-align: center; - bottom: 8px; } - .openerp2 .oe_footer a { - font-weight: 800; - font-family: serif; - font-size: 16px; - color: black; } - .openerp2 .oe_footer a span { - color: #c81010; - font-style: italic; } - .openerp2 .oe_menu { - float: left; - padding: 0; - margin: 0; } - .openerp2 .oe_menu li { - list-style-type: none; - float: left; } - .openerp2 .oe_menu a { - display: block; - padding: 5px 10px 7px; - line-height: 20px; - height: 20px; - color: #eeeeee; - vertical-align: top; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); } - .openerp2 .oe_menu a:hover { - background: #303030; - color: white; - -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; - -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; - -box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; } - .openerp2 .oe_menu .oe_active { - background: #303030; - font-weight: bold; - color: white; - -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; - -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; - -box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; } - .openerp2 .oe_secondary_menu_section { - font-weight: bold; - margin-left: 8px; - color: #8a89ba; } - .openerp2 .oe_secondary_submenu { - padding: 2px 0 8px 0; - margin: 0; - width: 100%; - display: inline-block; } - .openerp2 .oe_secondary_submenu li { - position: relative; - padding: 1px 0 1px 16px; - list-style-type: none; } - .openerp2 .oe_secondary_submenu li a { - display: block; - color: #4c4c4c; - padding: 2px 4px 2px 0; } - .openerp2 .oe_secondary_submenu li .oe_menu_label { - position: absolute; - top: 1px; - right: 1px; - font-size: 10px; - background: #8a89ba; - 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); } - .openerp2 .oe_secondary_submenu .oe_active { - background: #8a89ba; - border-top: 1px solid lightGray; - border-bottom: 1px solid lightGray; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -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); } - .openerp2 .oe_secondary_submenu .oe_active a { - color: white; } - .openerp2 .oe_secondary_submenu .oe_active .oe_menu_label { - background: #eeeeee; - color: #8a89ba; - 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); } - .openerp2 .oe_secondary_submenu .oe_menu_toggler:before { - width: 0; - height: 0; - display: inline-block; - content: "&darr"; - text-indent: -99999px; - vertical-align: top; - margin-left: -8px; - 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; } - .openerp2 .oe_secondary_submenu .oe_menu_opened:before { - margin-top: 6px; - margin-left: -12px; - margin-right: 4px; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #4c4c4c; } - .openerp2 .oe_user_menu { - float: right; - padding: 0; - margin: 0; } - .openerp2 .oe_user_menu li { - list-style-type: none; - float: left; } - .openerp2 .oe_user_menu .oe_dropdown { - position: relative; } - .openerp2 .oe_user_menu .oe_dropdown_toggle:after { - width: 0; - height: 0; - display: inline-block; - content: "&darr"; - text-indent: -99999px; - vertical-align: top; - margin-top: 8px; - margin-left: 4px; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid white; - filter: alpha(opacity=50); - opacity: 0.5; } - .openerp2 .oe_user_menu .oe_dropdown_options { - float: left; - background: #333333; - background: rgba(37, 37, 37, 0.9); - display: none; - position: absolute; - top: 32px; - right: -1px; - border: 0; - z-index: 900; - margin-left: 0; - margin-right: 0; - padding: 6px 0; - zoom: 1; - 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; - -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); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; } - .openerp2 .oe_user_menu .oe_dropdown_options li { - float: none; - display: block; - background-color: none; } - .openerp2 .oe_user_menu .oe_dropdown_options li a { - display: block; - padding: 4px 15px; - clear: both; - font-weight: normal; - line-height: 18px; - color: #eeeeee; } - .openerp2 .oe_user_menu .oe_dropdown_options li a: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; } + position: relative; +} +.openerp2 a { + text-decoration: none; +} +.openerp2 .oe_webclient { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} +.openerp2 .oe_webclient .oe_application { + position: absolute; + top: 32px; + bottom: 0; + left: 206px; + right: 0; +} +.openerp2 .oe_content_full_screen .oe_application { + top: 0; + left: 0; +} +.openerp2 .oe_content_full_screen .topbar, .openerp2 .oe_content_full_screen .leftbar { + display: none; +} +.openerp2 .oe_topbar { + width: 100%; + height: 31px; + border-top: solid 1px #d3d3d3; + border-bottom: solid 1px black; + 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); +} +.openerp2 .oe_topbar .oe_systray { + float: right; +} +.openerp2 .oe_topbar .oe_systray > div { + float: left; + padding: 0 4px 0 4px; +} +.openerp2 .oe_topbar .oe_topbar_item li { + float: left; +} +.openerp2 .oe_topbar .oe_topbar_item li a { + display: block; + padding: 5px 10px 7px; + line-height: 20px; + height: 20px; + color: #eeeeee; + vertical-align: top; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); +} +.openerp2 .oe_topbar .oe_topbar_item li a:hover { + background: #303030; + color: white; + -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; + -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; + -box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; +} +.openerp2 .oe_topbar .oe_topbar_item .oe_active { + background: #303030; + font-weight: bold; + color: white; + -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; + -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; + -box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; +} +.openerp2 .oe_topbar .oe_topbar_avatar { + width: 24px; + height: 24px; + margin: -2px 2px 0 0; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} +.openerp2 .oe_topbar .oe_topbar_avatar { + vertical-align: top; +} +.openerp2 .oe_leftbar { + width: 205px; + height: 100%; + background: #f0eeee; + border-right: 1px solid #afafb6; + overflow: auto; + text-shadow: 0 1px 1px white; +} +.openerp2 .oe_leftbar .oe_footer { + position: absolute; + width: 205px; + text-align: center; + bottom: 8px; +} +.openerp2 a.oe_logo { + display: block; + text-align: center; + height: 70px; + line-height: 70px; +} +.openerp2 a.oe_logo img { + height: 40px; + width: 157px; + margin: 14px 0; +} +.openerp2 .oe_footer { + position: absolute; + width: 205px; + text-align: center; + bottom: 8px; +} +.openerp2 .oe_footer a { + font-weight: 800; + font-family: serif; + font-size: 16px; + color: black; +} +.openerp2 .oe_footer a span { + color: #c81010; + font-style: italic; +} +.openerp2 .oe_menu { + float: left; + padding: 0; + margin: 0; +} +.openerp2 .oe_menu li { + list-style-type: none; + float: left; +} +.openerp2 .oe_menu a { + display: block; + padding: 5px 10px 7px; + line-height: 20px; + height: 20px; + color: #eeeeee; + vertical-align: top; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); +} +.openerp2 .oe_menu a:hover { + background: #303030; + color: white; + -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; + -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; + -box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; +} +.openerp2 .oe_menu .oe_active { + background: #303030; + font-weight: bold; + color: white; + -moz-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; + -webkit-box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; + -box-shadow: 0 1px 2px rgba(255, 255, 255, 0.3) inset; +} +.openerp2 .oe_menu_more_container { + position: relative; +} +.openerp2 .oe_menu_more_container .oe_menu_more { + position: absolute; + padding: 0; + background-color: #646060; + z-index: 1; + border: 1px solid black; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +.openerp2 .oe_menu_more_container .oe_menu_more li { + float: none; +} +.openerp2 .oe_menu_more_container .oe_menu_more li a { + white-space: nowrap; +} +.openerp2 .oe_secondary_menu_section { + font-weight: bold; + margin-left: 8px; + color: #8a89ba; +} +.openerp2 .oe_secondary_submenu { + padding: 2px 0 8px 0; + margin: 0; + width: 100%; + display: inline-block; +} +.openerp2 .oe_secondary_submenu li { + position: relative; + padding: 1px 0 1px 16px; + list-style-type: none; +} +.openerp2 .oe_secondary_submenu li a { + display: block; + color: #4c4c4c; + padding: 2px 4px 2px 0; +} +.openerp2 .oe_secondary_submenu li .oe_menu_label { + position: absolute; + top: 1px; + right: 1px; + font-size: 10px; + background: #8a89ba; + 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); +} +.openerp2 .oe_secondary_submenu .oe_active { + background: #8a89ba; + border-top: 1px solid lightGray; + border-bottom: 1px solid lightGray; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -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); +} +.openerp2 .oe_secondary_submenu .oe_active a { + color: white; +} +.openerp2 .oe_secondary_submenu .oe_active .oe_menu_label { + background: #eeeeee; + color: #8a89ba; + 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); +} +.openerp2 .oe_secondary_submenu .oe_menu_toggler:before { + width: 0; + height: 0; + display: inline-block; + content: "&darr"; + text-indent: -99999px; + vertical-align: top; + margin-left: -8px; + 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; +} +.openerp2 .oe_secondary_submenu .oe_menu_opened:before { + margin-top: 6px; + margin-left: -12px; + margin-right: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #4c4c4c; +} +.openerp2 .oe_user_menu { + float: right; + padding: 0; + margin: 0; +} +.openerp2 .oe_user_menu li { + list-style-type: none; + float: left; +} +.openerp2 .oe_user_menu .oe_dropdown { + position: relative; +} +.openerp2 .oe_user_menu .oe_dropdown_toggle:after { + width: 0; + height: 0; + display: inline-block; + content: "&darr"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid white; + filter: alpha(opacity=50); + opacity: 0.5; +} +.openerp2 .oe_user_menu .oe_dropdown_options { + float: left; + background: #333333; + background: rgba(37, 37, 37, 0.9); + display: none; + position: absolute; + top: 32px; + right: -1px; + border: 0; + z-index: 900; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + 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; + -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); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.openerp2 .oe_user_menu .oe_dropdown_options li { + float: none; + display: block; + background-color: none; +} +.openerp2 .oe_user_menu .oe_dropdown_options li a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #eeeeee; +} +.openerp2 .oe_user_menu .oe_dropdown_options li a: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; +} diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 56a735c98fd..89d4c785967 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -194,6 +194,20 @@ $colour4: #8a89ba font-weight: bold color: white @include box-shadow(0 1px 2px rgba(255,255,255,0.3) inset) + .oe_menu_more_container + position: relative + .oe_menu_more + position: absolute + padding: 0 + background-color: #646060 + z-index: 1 + border: 1px solid black + border-bottom-left-radius: 5px + border-bottom-right-radius: 5px + li + float: none + a + white-space: nowrap .oe_secondary_menu_section font-weight: bold margin-left: 8px diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 4a449d1152c..25d41c37257 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -635,11 +635,13 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ init: function() { this._super.apply(this, arguments); this.has_been_loaded = $.Deferred(); + this.maximum_visible_links = 'auto'; // # of menu to show. 0 = do not crop, 'auto' = algo }, start: function() { this._super.apply(this, arguments); this.$secondary_menus = this.getParent().$element.find('.oe_secondary_menus_container'); this.$secondary_menus.on('click', 'a[data-menu]', this.on_menu_click); + $('html').bind('click', this.do_hide_more); }, do_reload: function() { var self = this; @@ -650,14 +652,40 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ }); }, on_loaded: function(data) { + var self = this; this.data = data; this.renderElement(); + this.limit_entries(); this.$element.on('click', 'a[data-menu]', this.on_menu_click); + this.$element.on('click', 'a.oe_menu_more_link', function() { + self.$element.find('.oe_menu_more').toggle(); + return false; + }); this.$secondary_menus.html(QWeb.render("Menu.secondary", { widget : this })); // Hide second level submenus this.$secondary_menus.find('.oe_menu_toggler').siblings('.oe_secondary_submenu').hide(); this.has_been_loaded.resolve(); }, + limit_entries: function() { + var maximum_visible_links = this.maximum_visible_links; + if (maximum_visible_links === 'auto') { + maximum_visible_links = this.auto_limit_entries(); + } + if (maximum_visible_links) { + var $more = $(QWeb.render('Menu.more')), + $index = this.$element.find('li').eq(maximum_visible_links - 1); + $index.after($more); + $more.find('.oe_menu_more').append($index.next().nextAll()); + } + }, + auto_limit_entries: function() { + // TODO: auto detect overflow and bind window on resize + var width = $(window).width(); + return Math.floor(width / 125); + }, + do_hide_more: function() { + this.$element.find('.oe_menu_more').hide(); + }, /** * Opens a given menu by id, as if a user had browsed to that menu by hand * except does not trigger any event on the way @@ -702,6 +730,7 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{ } }, on_menu_click: function(ev, id) { + this.do_hide_more(); id = id || 0; var $clicked_menu, manual = false; diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index c8a6762ab34..5b3a79391a7 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -332,6 +332,12 @@ + +
  • + More... +