diff options
| author | Xavier Morel <xmo@openerp.com> | 2014-05-30 17:00:52 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2014-05-30 17:00:52 +0200 |
| commit | 46712acaecb58954f5dac375445e4556d45c5f0b (patch) | |
| tree | 53b3763c98a95fd3e426481778013c17b65bf114 | |
| parent | 8d822419e74969ff032db653a3797affeccace1b (diff) | |
| parent | d325c0caef433cb50a7589a69b00650be3bed56e (diff) | |
[FIX] bunch of changes lost in incorrect merge f4d78ae738e474abd4e77dc8fc6cdf8a668a5d72
17 files changed, 202 insertions, 17 deletions
diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 4b2352bc880..6c710dc2c04 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -553,18 +553,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 @@ -572,7 +571,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 af6eb47ffa4..af4caae608f 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 @@ <field name="partner_id" position="attributes"> <attribute name="attrs">{'required': [('type','=','contract'),'|','|',('fix_price_invoices','=',True), ('invoice_on_timesheets', '=', True), ('recurring_invoices', '=', True)]}</attribute> </field> - <field name="template_id" position="attributes"> - <attribute name="on_change">on_change_template(template_id, date_start, fix_price_invoices, invoice_on_timesheets, recurring_invoices)</attribute> - </field> <xpath expr='//group[@name="invoice_on_timesheets"]' position="replace"> </xpath> <xpath expr='//separator[@name="description"]' position='before'> 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 @@ <field name="subject">Your registration at ${object.event_id.name}</field> <field name="body_html"><![CDATA[ <p>Hello ${object.name},</p> - <p>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}. + <p>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.</p> <p>Thank you for your participation!</p> <p>Best regards</p>]]></field> 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 <http://www.gnu.org/licenses/>. # ############################################################################## - +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 @@ <field name="type" on_change="onchange_event_type(type,context)" /> <field name="date_begin" on_change="onchange_start_date(date_begin,date_end)"/> <field name="date_end"/> + <field name="date_tz" /> </group> </group> <notebook> 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 @@ <field name="sequence">30</field> </record> + <!-- Create mailing lists --> + <record id="mass_mail_list_1" model="mail.mass_mailing.list"> + <field name="name">Newsletter</field> + </record> + </data> </openerp>
\ 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 @@ </record> <!-- Create mailing lists --> - <record id="mass_mail_list_1" model="mail.mass_mailing.list"> + <record id="mass_mail_list_2" model="mail.mass_mailing.list"> <field name="name">Imported Contacts</field> </record> @@ -17,17 +17,17 @@ <record id="mass_mail_contact_1" model="mail.mass_mailing.contact"> <field name="name">Aristide Antario</field> <field name="email">aa@example.com</field> - <field name="list_id" ref="mass_mailing.mass_mail_list_1"/> + <field name="list_id" ref="mass_mailing.mass_mail_list_2"/> </record> <record id="mass_mail_contact_2" model="mail.mass_mailing.contact"> <field name="name">Beverly Bridge</field> <field name="email">bb@example.com</field> - <field name="list_id" ref="mass_mailing.mass_mail_list_1"/> + <field name="list_id" ref="mass_mailing.mass_mail_list_2"/> </record> <record id="mass_mail_contact_3" model="mail.mass_mailing.contact"> <field name="name">Carol Cartridge</field> <field name="email">cc@example.com</field> - <field name="list_id" ref="mass_mailing.mass_mail_list_1"/> + <field name="list_id" ref="mass_mailing.mass_mail_list_2"/> <field name="opt_out" eval="True"/> </record> diff --git a/addons/mass_mailing/static/src/img/blocks/button_newsletter.png b/addons/mass_mailing/static/src/img/blocks/button_newsletter.png Binary files differnew file mode 100644 index 00000000000..46a63ef9b00 --- /dev/null +++ b/addons/mass_mailing/static/src/img/blocks/button_newsletter.png 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + +<template id="mailing_list_subscribe" inherit_id="website.snippets" name="Subscribe to Newsletter"> + + <xpath expr="//div[@id='snippet_content']" position="inside"> + <div> + <div class="oe_snippet_thumbnail"> + <img class="oe_snippet_thumbnail_img" src="/mass_mailing/static/src/img/blocks/button_newsletter.png"/> + <span class="oe_snippet_thumbnail_title">Newsletter</span> + </div> + + <div class="oe_snippet_body input-group js_subscribe" + data-list-id="0"> + <input + type="email" + name="email" + class="js_subscribe_email form-control" + placeholder="your email..."/> + <span class="input-group-btn"> + <a href="#" class="btn btn-primary js_subscribe_btn">Subscribe</a> + </span> + <div class="alert alert-success hidden">Thanks for your subscription!</div> + </div> + + </div> + </xpath> + + <xpath expr="//div[@id='snippet_options']" position="inside"> + <div data-snippet-option-id='mailing_list_subscribe' + data-selector=".js_subscribe" + data-selector-siblings="p, h1, h2, h3, blockquote, .well, .panel" + > + <li> + <a href="#" class="button js_mailing_list">Change Newsletter</a> + </li> + </div> + </xpath> + +</template> + +</data> +</openerp> 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> +<data> + +<template id="head" inherit_id="website.layout" name="Mail customization"> + <xpath expr="//head" position="inside"> + <script type="text/javascript" src="/mass_mailing/static/src/js/website_mass_mailing.editor.js" groups="base.group_website_publisher"></script> + <script type="text/javascript" src="/mass_mailing/static/src/js/website_mass_mailing.js"></script> + <link rel='stylesheet' href='/website_mail/static/src/css/website_mail.css'/> + </xpath> +</template> + +</data> +</openerp> diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index 398bbb6a87b..c94281a4487 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 @@ -206,3 +207,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 @@ <field name="domain" eval="[('model', '=', 'forum.post'), ('subtype_id', 'in', [ref('website_forum.mt_answer_edit'), ref('website_forum.mt_question_edit')])]"/> <field name="batch_mode">True</field> <field name="batch_distinctive_field" eval="ref('mail.field_mail_message_author_id')" /> - <field name="batch_user_expression">user.id</field> + <field name="batch_user_expression">user.partner_id.id</field> </record> <record model="gamification.challenge" id="challenge_editor"> <field name="name">Editor</field> 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 Binary files differnew file mode 100644 index 00000000000..204239a8e0c --- /dev/null +++ b/addons/website_mail/static/src/img/blocks/button_group_subscribe.png diff --git a/addons/website_mail_group/static/src/js/website_mail_group.editor.js b/addons/website_mail_group/static/src/js/website_mail_group.editor.js index 7a26920682b..fdfb948121f 100644 --- a/addons/website_mail_group/static/src/js/website_mail_group.editor.js +++ b/addons/website_mail_group/static/src/js/website_mail_group.editor.js @@ -10,7 +10,7 @@ return website.prompt({ id: "editor_new_subscribe_button", window_title: _t("Add a Subscribe Button"), - select: _t("Mailing List"), + select: _t("Discussion List"), init: function (field) { return website.session.model('mail.group') .call('name_search', ['', [['public','=','public']]], { context: website.get_context() }); |
