[MERGE] forward port of branch saas-4 up to 7ecaab9
This commit is contained in:
commit
0739bc4eda
|
@ -8,7 +8,6 @@
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "EntypoRegular";
|
font-family: "EntypoRegular";
|
||||||
src: url("/web/static/src/font/entypo-webfont.eot") format("eot");
|
src: url("/web/static/src/font/entypo-webfont.eot") format("eot");
|
||||||
|
@ -19,7 +18,6 @@
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.openerp {
|
.openerp {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -1366,6 +1364,9 @@
|
||||||
.openerp .oe_view_manager_inline > .oe_view_manager_header, .openerp .oe_view_manager_inlineview > .oe_view_manager_header {
|
.openerp .oe_view_manager_inline > .oe_view_manager_header, .openerp .oe_view_manager_inlineview > .oe_view_manager_header {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.openerp .oe_popup_form {
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
.openerp .oe_popup_form .oe_formview .oe_form_pager {
|
.openerp .oe_popup_form .oe_formview .oe_form_pager {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
@ -3087,7 +3088,6 @@
|
||||||
top: 0px;
|
top: 0px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.kitten-mode-activated {
|
.kitten-mode-activated {
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-attachment: fixed;
|
background-attachment: fixed;
|
||||||
|
|
|
@ -1134,6 +1134,7 @@ $sheet-padding: 16px
|
||||||
// }}}
|
// }}}
|
||||||
// FormPopup {{{
|
// FormPopup {{{
|
||||||
.oe_popup_form
|
.oe_popup_form
|
||||||
|
display: table
|
||||||
.oe_formview .oe_form_pager
|
.oe_formview .oe_form_pager
|
||||||
display: none !important
|
display: none !important
|
||||||
// Customize label weight for popup wizard appear from another wizard according bootstrap3
|
// Customize label weight for popup wizard appear from another wizard according bootstrap3
|
||||||
|
|
|
@ -5684,6 +5684,20 @@ instance.web.form.FieldBinaryImage = instance.web.form.FieldBinary.extend({
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
this.render_value();
|
this.render_value();
|
||||||
this.set_filename('');
|
this.set_filename('');
|
||||||
|
},
|
||||||
|
set_value: function(value_){
|
||||||
|
var changed = value_ !== this.get_value();
|
||||||
|
this._super.apply(this, arguments);
|
||||||
|
// By default, on binary images read, the server returns the binary size
|
||||||
|
// This is possible that two images have the exact same size
|
||||||
|
// Therefore we trigger the change in case the image value hasn't changed
|
||||||
|
// So the image is re-rendered correctly
|
||||||
|
if (!changed){
|
||||||
|
this.trigger("change:value", this, {
|
||||||
|
oldValue: value_,
|
||||||
|
newValue: value_
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -420,8 +420,8 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
|
||||||
stop: function(event, ui) {
|
stop: function(event, ui) {
|
||||||
var stop_index = ui.item.index();
|
var stop_index = ui.item.index();
|
||||||
if (start_index !== stop_index) {
|
if (start_index !== stop_index) {
|
||||||
var $start_column = $('.oe_kanban_groups_records .oe_kanban_column').eq(start_index);
|
var $start_column = self.$('.oe_kanban_groups_records .oe_kanban_column').eq(start_index);
|
||||||
var $stop_column = $('.oe_kanban_groups_records .oe_kanban_column').eq(stop_index);
|
var $stop_column = self.$('.oe_kanban_groups_records .oe_kanban_column').eq(stop_index);
|
||||||
var method = (start_index > stop_index) ? 'insertBefore' : 'insertAfter';
|
var method = (start_index > stop_index) ? 'insertBefore' : 'insertAfter';
|
||||||
$start_column[method]($stop_column);
|
$start_column[method]($stop_column);
|
||||||
var tmp_group = self.groups.splice(start_index, 1)[0];
|
var tmp_group = self.groups.splice(start_index, 1)[0];
|
||||||
|
@ -1143,7 +1143,7 @@ instance.web_kanban.KanbanRecord = instance.web.Widget.extend({
|
||||||
*/
|
*/
|
||||||
instance.web_kanban.QuickCreate = instance.web.Widget.extend({
|
instance.web_kanban.QuickCreate = instance.web.Widget.extend({
|
||||||
template: 'KanbanView.quick_create',
|
template: 'KanbanView.quick_create',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* close_btn: If true, the widget will display a "Close" button able to trigger
|
* close_btn: If true, the widget will display a "Close" button able to trigger
|
||||||
* a "close" event.
|
* a "close" event.
|
||||||
|
|
|
@ -359,14 +359,12 @@ class Website(openerp.addons.web.controllers.main.Home):
|
||||||
@http.route(['/website/seo_suggest/<keywords>'], type='http', auth="public", website=True)
|
@http.route(['/website/seo_suggest/<keywords>'], type='http', auth="public", website=True)
|
||||||
def seo_suggest(self, keywords):
|
def seo_suggest(self, keywords):
|
||||||
url = "http://google.com/complete/search"
|
url = "http://google.com/complete/search"
|
||||||
param = {
|
try:
|
||||||
'ie': 'utf8',
|
req = urllib2.Request("%s?%s" % (url, werkzeug.url_encode({
|
||||||
'oe': 'utf8',
|
'ie': 'utf8', 'oe': 'utf8', 'output': 'toolbar', 'q': keywords})))
|
||||||
'output': 'toolbar',
|
request = urllib2.urlopen(req)
|
||||||
'q': keywords
|
except (urllib2.HTTPError, urllib2.URLError):
|
||||||
}
|
return []
|
||||||
req = urllib2.Request("%s?%s" % (url, werkzeug.url_encode(param)))
|
|
||||||
request = urllib2.urlopen(req)
|
|
||||||
xmlroot = ET.fromstring(request.read())
|
xmlroot = ET.fromstring(request.read())
|
||||||
return json.dumps([sugg[0].attrib['data'] for sugg in xmlroot if len(sugg) and sugg[0].attrib['data']])
|
return json.dumps([sugg[0].attrib['data'] for sugg in xmlroot if len(sugg) and sugg[0].attrib['data']])
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,10 @@ import time
|
||||||
import psycopg2
|
import psycopg2
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
|
import pytz
|
||||||
|
|
||||||
import openerp
|
import openerp
|
||||||
from openerp import netsvc
|
from openerp import netsvc, SUPERUSER_ID
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
|
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
|
||||||
from openerp.tools.safe_eval import safe_eval as eval
|
from openerp.tools.safe_eval import safe_eval as eval
|
||||||
|
@ -158,8 +159,8 @@ class ir_cron(osv.osv):
|
||||||
must not be committed/rolled back!
|
must not be committed/rolled back!
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
now = datetime.now()
|
now = fields.datetime.context_timestamp(job_cr, SUPERUSER_ID, datetime.now())
|
||||||
nextcall = datetime.strptime(job['nextcall'], DEFAULT_SERVER_DATETIME_FORMAT)
|
nextcall = fields.datetime.context_timestamp(job_cr, SUPERUSER_ID, datetime.strptime(job['nextcall'], DEFAULT_SERVER_DATETIME_FORMAT))
|
||||||
numbercall = job['numbercall']
|
numbercall = job['numbercall']
|
||||||
|
|
||||||
ok = False
|
ok = False
|
||||||
|
@ -175,7 +176,7 @@ class ir_cron(osv.osv):
|
||||||
if not numbercall:
|
if not numbercall:
|
||||||
addsql = ', active=False'
|
addsql = ', active=False'
|
||||||
cron_cr.execute("UPDATE ir_cron SET nextcall=%s, numbercall=%s"+addsql+" WHERE id=%s",
|
cron_cr.execute("UPDATE ir_cron SET nextcall=%s, numbercall=%s"+addsql+" WHERE id=%s",
|
||||||
(nextcall.strftime(DEFAULT_SERVER_DATETIME_FORMAT), numbercall, job['id']))
|
(nextcall.astimezone(pytz.UTC).strftime(DEFAULT_SERVER_DATETIME_FORMAT), numbercall, job['id']))
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
job_cr.commit()
|
job_cr.commit()
|
||||||
|
|
|
@ -451,7 +451,7 @@ class YamlInterpreter(object):
|
||||||
# do not shadow values explicitly set in yaml.
|
# do not shadow values explicitly set in yaml.
|
||||||
record_dict[key] = process_val(key, val)
|
record_dict[key] = process_val(key, val)
|
||||||
else:
|
else:
|
||||||
_logger.warning("The returning field '%s' from your on_change call '%s'"
|
_logger.debug("The returning field '%s' from your on_change call '%s'"
|
||||||
" does not exist either on the object '%s', either in"
|
" does not exist either on the object '%s', either in"
|
||||||
" the view '%s'",
|
" the view '%s'",
|
||||||
key, match.group(1), model._name, view_info['name'])
|
key, match.group(1), model._name, view_info['name'])
|
||||||
|
|
Loading…
Reference in New Issue