From d325c0caef433cb50a7589a69b00650be3bed56e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 30 May 2014 16:00:28 +0200 Subject: [PATCH] [REV] attempt to revert incorrect removals in f4d78ae738e474abd4e77dc8fc6cdf8a668a5d72 --- .../account_analytic_analysis.py | 9 ++- .../account_analytic_analysis_view.xml | 3 - addons/event/email_template.xml | 2 +- addons/event/event.py | 25 +++++++- addons/event/event_view.xml | 1 + addons/mass_mailing/__openerp__.py | 2 + .../mass_mailing/data/mass_mailing_data.xml | 5 ++ .../mass_mailing/data/mass_mailing_demo.xml | 8 +-- .../src/img/blocks/button_newsletter.png | Bin 0 -> 4178 bytes .../src/js/website_mass_mailing.editor.js | 40 ++++++++++++ .../static/src/js/website_mass_mailing.js | 57 ++++++++++++++++++ addons/mass_mailing/views/snippets.xml | 44 ++++++++++++++ .../views/website_mass_mailing.xml | 14 +++++ addons/website/models/ir_ui_view.py | 5 ++ .../website_forum/data/badges_moderation.xml | 2 +- addons/website_mail/data/mail_groups.xml | 4 +- .../src/img/blocks/button_group_subscribe.png | Bin 0 -> 2726 bytes .../static/src/js/website_mail.editor.js | 2 +- addons/website_mail/views/snippets.xml | 8 +-- 19 files changed, 208 insertions(+), 23 deletions(-) create mode 100644 addons/mass_mailing/static/src/img/blocks/button_newsletter.png create mode 100644 addons/mass_mailing/static/src/js/website_mass_mailing.editor.js create mode 100644 addons/mass_mailing/static/src/js/website_mass_mailing.js create mode 100644 addons/mass_mailing/views/snippets.xml create mode 100644 addons/mass_mailing/views/website_mass_mailing.xml create mode 100644 addons/website_mail/static/src/img/blocks/button_group_subscribe.png diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 6c71f940e8a..785d7cd6db0 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -542,18 +542,17 @@ class account_analytic_account(osv.osv): 'nodestroy': True, } - def on_change_template(self, cr, uid, ids, template_id, date_start=False, fix_price_invoices=False, invoice_on_timesheets=False, recurring_invoices=False, context=None): + def on_change_template(self, cr, uid, ids, template_id, date_start=False, context=None): if not template_id: return {} - obj_analytic_line = self.pool.get('account.analytic.invoice.line') res = super(account_analytic_account, self).on_change_template(cr, uid, ids, template_id, date_start=date_start, context=context) template = self.browse(cr, uid, template_id, context=context) - if not fix_price_invoices: + if not ids: res['value']['fix_price_invoices'] = template.fix_price_invoices res['value']['amount_max'] = template.amount_max - if not invoice_on_timesheets: + if not ids: res['value']['invoice_on_timesheets'] = template.invoice_on_timesheets res['value']['hours_qtt_est'] = template.hours_qtt_est @@ -561,7 +560,7 @@ class account_analytic_account(osv.osv): res['value']['to_invoice'] = template.to_invoice.id if template.pricelist_id.id: res['value']['pricelist_id'] = template.pricelist_id.id - if not recurring_invoices: + if not ids: invoice_line_ids = [] for x in template.recurring_invoice_line_ids: invoice_line_ids.append((0, 0, { diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml index 97fb15e9290..a6fe828926a 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml @@ -38,9 +38,6 @@ {'required': [('type','=','contract'),'|','|',('fix_price_invoices','=',True), ('invoice_on_timesheets', '=', True), ('recurring_invoices', '=', True)]} - - on_change_template(template_id, date_start, fix_price_invoices, invoice_on_timesheets, recurring_invoices) - diff --git a/addons/event/email_template.xml b/addons/event/email_template.xml index d99774acd3c..d4479bcfc87 100644 --- a/addons/event/email_template.xml +++ b/addons/event/email_template.xml @@ -9,7 +9,7 @@ Your registration at ${object.event_id.name} Hello ${object.name},

-

The event ${object.event_id.name} that you registered for is confirmed and will be held from ${object.event_id.date_begin} to ${object.event_id.date_end}. +

The event ${object.event_id.name} that you registered for is confirmed and will be held from ${object.event_id.date_begin_located.strftime('%Y-%m-%d %H:%M:%S (%Z)')} to ${object.event_id.date_end_located.strftime('%Y-%m-%d %H:%M:%S (%Z)')}. For any further information please contact our event department.

Thank you for your participation!

Best regards

]]>
diff --git a/addons/event/event.py b/addons/event/event.py index 5e5d1204a17..a31ec00b8c0 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -18,7 +18,8 @@ # along with this program. If not, see . # ############################################################################## - +import pytz +from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT from datetime import datetime, timedelta from openerp.osv import fields, osv from openerp.tools.translate import _ @@ -156,6 +157,22 @@ class event_event(osv.osv): for event in self.browse(cr, uid, ids, context=context) } + def _compute_date_tz(self, cr, uid, ids, fld, arg, context=None): + if context is None: + context = {} + res = {} + for event in self.browse(cr, uid, ids, context=context): + ctx = dict(context, tz=(event.date_tz or 'UTC')) + if fld == 'date_begin_located': + date_to_convert = event.date_begin + elif fld == 'date_end_located': + date_to_convert = event.date_end + res[event.id] = fields.datetime.context_timestamp(cr, uid, datetime.strptime(date_to_convert, DEFAULT_SERVER_DATETIME_FORMAT), context=ctx) + return res + + def _tz_get(self, cr, uid, context=None): + return [(x, x) for x in pytz.all_timezones] + _columns = { 'name': fields.char('Event Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}), 'user_id': fields.many2one('res.users', 'Responsible User', readonly=False, states={'done': [('readonly', True)]}), @@ -175,8 +192,11 @@ class event_event(osv.osv): store={'event.registration': (_get_events_from_registrations, ['state'], 10), 'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max', 'registration_ids'], 20)}), 'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}), + 'date_tz': fields.selection(_tz_get, string='Timezone'), 'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}), 'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}), + 'date_begin_located': fields.function(_compute_date_tz, string='Start Date Located', type="datetime"), + 'date_end_located': fields.function(_compute_date_tz, string='End Date Located', type="datetime"), 'state': fields.selection([ ('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), @@ -204,7 +224,8 @@ 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, 'organizer_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, context=c).company_id.partner_id.id, - 'address_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, context=c).company_id.partner_id.id + 'address_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, context=c).company_id.partner_id.id, + 'date_tz': lambda self, cr, uid, ctx: ctx.get('tz', "UTC"), } def _check_seats_limit(self, cr, uid, ids, context=None): diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index cc6edfbd9bd..baa553babaf 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -89,6 +89,7 @@ + diff --git a/addons/mass_mailing/__openerp__.py b/addons/mass_mailing/__openerp__.py index e96cc910920..e0a8ab041fe 100644 --- a/addons/mass_mailing/__openerp__.py +++ b/addons/mass_mailing/__openerp__.py @@ -48,6 +48,8 @@ professional emails and reuse templates in a few clicks. 'views/res_config.xml', 'views/res_partner.xml', 'views/email_template.xml', + 'views/website_mass_mailing.xml', + 'views/snippets.xml', 'security/ir.model.access.csv', 'views/mass_mailing.xml', ], diff --git a/addons/mass_mailing/data/mass_mailing_data.xml b/addons/mass_mailing/data/mass_mailing_data.xml index 6bd1df79a72..7137bfcf29b 100644 --- a/addons/mass_mailing/data/mass_mailing_data.xml +++ b/addons/mass_mailing/data/mass_mailing_data.xml @@ -33,5 +33,10 @@ 30 + + + Newsletter + + \ No newline at end of file diff --git a/addons/mass_mailing/data/mass_mailing_demo.xml b/addons/mass_mailing/data/mass_mailing_demo.xml index 569feec9c88..d5a84419f93 100644 --- a/addons/mass_mailing/data/mass_mailing_demo.xml +++ b/addons/mass_mailing/data/mass_mailing_demo.xml @@ -9,7 +9,7 @@ - + Imported Contacts @@ -17,17 +17,17 @@ Aristide Antario aa@example.com - + Beverly Bridge bb@example.com - + Carol Cartridge cc@example.com - + diff --git a/addons/mass_mailing/static/src/img/blocks/button_newsletter.png b/addons/mass_mailing/static/src/img/blocks/button_newsletter.png new file mode 100644 index 0000000000000000000000000000000000000000..46a63ef9b0021b83e9c25c575f2cb621e09c39e1 GIT binary patch literal 4178 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 literal 0 HcmV?d00001 diff --git a/addons/mass_mailing/static/src/js/website_mass_mailing.editor.js b/addons/mass_mailing/static/src/js/website_mass_mailing.editor.js new file mode 100644 index 00000000000..4caba1d29b5 --- /dev/null +++ b/addons/mass_mailing/static/src/js/website_mass_mailing.editor.js @@ -0,0 +1,40 @@ +(function () { + 'use strict'; + + var website = openerp.website; + var _t = openerp._t; + + website.snippet.options.mailing_list_subscribe = website.snippet.Option.extend({ + on_prompt: function () { + var self = this; + return website.prompt({ + id: "editor_new_mailing_list_subscribe_button", + window_title: _t("Add a Newsletter Subscribe Button"), + select: _t("Newsletter"), + init: function (field) { + return website.session.model('mail.mass_mailing.list') + .call('name_search', ['', []], { context: website.get_context() }); + }, + }).then(function (mailing_list_id) { + self.$target.attr("data-list-id", mailing_list_id); + }); + }, + drop_and_build_snippet: function() { + var self = this; + this._super(); + this.on_prompt().fail(function () { + self.editor.on_remove(); + }); + }, + start : function () { + var self = this; + this.$el.find(".js_mailing_list").on("click", _.bind(this.on_prompt, this)); + this._super(); + }, + clean_for_save: function () { + this.$target.addClass("hidden"); + }, + }); +})(); + + diff --git a/addons/mass_mailing/static/src/js/website_mass_mailing.js b/addons/mass_mailing/static/src/js/website_mass_mailing.js new file mode 100644 index 00000000000..5776fadfb3f --- /dev/null +++ b/addons/mass_mailing/static/src/js/website_mass_mailing.js @@ -0,0 +1,57 @@ +(function () { + 'use strict'; + + var website = openerp.website; + + website.snippet.animationRegistry.subscribe = website.snippet.Animation.extend({ + selector: ".js_subscribe", + start: function (editable_mode) { + var self = this; + + // set value and display button + self.$target.find("input").removeClass("hidden"); + openerp.jsonRpc('/website_mass_mailing/is_subscriber', 'call', { + list_id: this.$target.data('list-id'), + }).always(function (data) { + self.$target.find('input.js_subscribe_email') + .val(data.email ? data.email : "") + .attr("disabled", data.is_subscriber && data.email.length ? "disabled" : false); + self.$target.attr("data-subscribe", data.is_subscriber ? 'on' : 'off'); + self.$target.find('a.js_subscribe_btn') + .val(data.email ? data.email : "") + .attr("disabled", data.is_subscriber && data.email.length ? "disabled" : false); + self.$target.removeClass("hidden"); + }); + + // not if editable mode to allow designer to edit alert field + if (!editable_mode) { + $('.js_subscribe > .alert').addClass("hidden"); + $('.js_subscribe > .input-group-btn.hidden').removeClass("hidden"); + this.$target.find('.js_subscribe_btn').on('click', function (event) { + event.preventDefault(); + self.on_click(); + }); + } + }, + on_click: function () { + var self = this; + var $email = this.$target.find(".js_subscribe_email:visible"); + + if ($email.length && !$email.val().match(/.+@.+/)) { + this.$target.addClass('has-error'); + return false; + } + this.$target.removeClass('has-error'); + + openerp.jsonRpc('/website_mass_mailing/subscribe', 'call', { + 'list_id': this.$target.data('list-id'), + 'email': $email.length ? $email.val() : false, + }).then(function (subscribe) { + self.$target.find(".js_subscribe_email, .input-group-btn").addClass("hidden"); + self.$target.find(".alert").removeClass("hidden"); + self.$target.find('input.js_subscribe_email').attr("disabled", subscribe ? "disabled" : false); + self.$target.attr("data-subscribe", subscribe ? 'on' : 'off'); + }); + }, + }); +})(); diff --git a/addons/mass_mailing/views/snippets.xml b/addons/mass_mailing/views/snippets.xml new file mode 100644 index 00000000000..cefe2e7bdfd --- /dev/null +++ b/addons/mass_mailing/views/snippets.xml @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/addons/mass_mailing/views/website_mass_mailing.xml b/addons/mass_mailing/views/website_mass_mailing.xml new file mode 100644 index 00000000000..bc55f61400c --- /dev/null +++ b/addons/mass_mailing/views/website_mass_mailing.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index 9d89665c56f..3f868e0d208 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -6,6 +6,7 @@ import werkzeug from lxml import etree, html +from openerp import SUPERUSER_ID from openerp.addons.website.models import website from openerp.http import request from openerp.osv import osv, fields @@ -197,3 +198,7 @@ class view(osv.osv): self.write(cr, uid, res_id, { 'arch': self._pretty_arch(arch) }, context=context) + + view = self.browse(cr, SUPERUSER_ID, res_id, context=context) + if view.model_data_id: + view.model_data_id.write({'noupdate': True}) diff --git a/addons/website_forum/data/badges_moderation.xml b/addons/website_forum/data/badges_moderation.xml index 41f3eb7fe41..8e3c1b3dda7 100644 --- a/addons/website_forum/data/badges_moderation.xml +++ b/addons/website_forum/data/badges_moderation.xml @@ -99,7 +99,7 @@ True - user.id + user.partner_id.id Editor diff --git a/addons/website_mail/data/mail_groups.xml b/addons/website_mail/data/mail_groups.xml index 0bc8d3e81d1..b5d037ca866 100644 --- a/addons/website_mail/data/mail_groups.xml +++ b/addons/website_mail/data/mail_groups.xml @@ -3,9 +3,9 @@ - Newsletter + Discussion Group public - Public Newsletter. + Public Discussion Group diff --git a/addons/website_mail/static/src/img/blocks/button_group_subscribe.png b/addons/website_mail/static/src/img/blocks/button_group_subscribe.png new file mode 100644 index 0000000000000000000000000000000000000000..204239a8e0c50a79c13c4accc0f12e769dd2a31a GIT binary patch literal 2726 zcmV;X3R(4uP)#O(P_uh1UO@bf@(8=}}F4^OZ z5F+oB5YlPa)jJaaLI^nLojSmt49MRwy`vNV``|p!gJoH;EDMaWUJr`z`yhlMFE0(PsFmvWi2?Ap*qj_l;AcPP+ zc<=yg)~rD!5&)VZ(;u{Q2`4 z%}JYp1VMm!JdU!mGDM?MIF2J%K=M~9rQn>Sxw%;mvNwB(VHof{54x@+6biKnh^A?9 z90#*z&BEcshdU>SEMLAHA3l5l=Nx%?d9ZC8hGEFKX;~IVjvR^7(o&2bJsQzyG$-G4cgX^ zoIQIMx~`|Kc*8JITwIJ>w{D@hxcINM5&lb_!WhG*O`EW1&mLKeiLQl+BrjjS#HUZ6 zvIC^HwpOx=WcvH##}8b;ejUE=OE7YU@}^B<65TB?FUPWF%Mb)XS|MoLHtyWHlN})O zcs!+%<~R-*V_3a76!UdV+mACwBj4?DcG~oUF_i1_7bzKY^G$=bj#*7)0mNO`& zxOVLt9zJ}SvWH#S|Gi_=rcF`{CE0A-#-c@wvIAt=v}sbJNrWp(DI$>wHf-2{y1F`e zo+pLP1WnH55Z;%Z3|m@tf>^ZY`hWA_oXc^0o+l@N_wLIMG z4v>{AS4y#f-)SA^9E%n$LQPFg$^gVB(YB7{oRmqT6f7mv>;KI|sKhyrBfX)bq5>B$ zUQ7w^Li2=kjs*)ApkKd!t>0@VYC!APua^=V$)a7lu7fcK+qPkvCZf?O#*Q6}yu7@O z+`GKI95ZIjfaiIwik?}Pg&#kD;KGFq`26{Ew@V0$1>$)g;_)~d8X6Ff$5BvFkS3=g z@rW`%$++Ilv1e?m7MH_>xzN4hqDhIIuw^KU6SWSog=QL z>pJ%B+lOPvjv*S2%23f0=&cAt$@e3?K?uM3zK@?je`3p)EvT%lY%?mf35bY)@7}$` z;>C**3WcQnP-j%Lgb*xPumHPu?SkvN2!%ot7){gg3w2maQ5A_MtG(#$D_8k7Asb)kR4vbFfwD5?a}QO zY)FI;&N<$^d4tQBFQc}$7LOl4#@n}VTh#d=gkaF1K^QV*2%4IjQrMDh+j#!`x%?eM z2ue#!C36wi^E?lXF?{&&0hVQTTa#1h@D>#nVfgUjm^^thmM&e22@@uuxVSiloV1H9 zwCC*zf9mv#+91=K;^fJb*uQ^&TGKKJ0*o6s4ku2W0OuU{@88GTwQCU$hY=2k<@Zg~ zL`g{r&Ye5gBNI9y1eRsNG)*wZ+O1(s+Z*=<0D@^HSMQl%yKvz`Boc`f+DIvdVHkMz z>Xl?)M~)nk0{0@+{rdF_jg5`iyLYb)SKZxa{}UC?&(8;d4hc%P3y_wyX){gkK@gz0 zxEN(+WoaHI{`|Ui>lQfYsI9GqVHgO9!_osy(?k#i7&dHJx6|J?6{0 zswzpRf9LNOLLx(V6zyLHiH^Z{56eYXu+qc7U95{~CE7j~s(8YHp=->3|)8Tm@ z^78WFx~^1XQX&N?f-V9yW;kvFY5IN^kx?4!E z3c76=1_lls*sH&=Q3e`Q_rpix@R(RIh%(qRTx*gsfOB zhWYd7!!QgPmRd`Y`T6<19*iyrL_AI;D*tus*1>TcG&eW5`Q6IO$`-3+6|y?XeBZ~2 z5hKvAU%ytL^-3fXvPS9c*6ojy?%cUkw%l6^bJM0x17j>FM4P)65Y9O&Dk|{h%NIHM z!c&spEUYJg@yR~^(&q~e=fZv7j)*kJ!A
- - Subscribe Button + + Discussion Group
Unsubscribe Subscribe - +
@@ -529,7 +529,7 @@ data-selector-siblings="p, h1, h2, h3, blockquote, .well, .panel" >
  • - Change mailing list + Change Discussion List