[MERGE] forward port branch 11.0 up to 3513e599a7
This commit is contained in:
@@ -1470,6 +1470,10 @@ class Meeting(models.Model):
|
||||
|
||||
@api.multi
|
||||
def write(self, values):
|
||||
# FIXME: neverending recurring events
|
||||
if 'rrule' in values:
|
||||
values['rrule'] = self._fix_rrule(values)
|
||||
|
||||
# compute duration, only if start and stop are modified
|
||||
if not 'duration' in values and 'start' in values and 'stop' in values:
|
||||
values['duration'] = self._get_duration(values['start'], values['stop'])
|
||||
@@ -1538,6 +1542,10 @@ class Meeting(models.Model):
|
||||
|
||||
@api.model
|
||||
def create(self, values):
|
||||
# FIXME: neverending recurring events
|
||||
if 'rrule' in values:
|
||||
values['rrule'] = self._fix_rrule(values)
|
||||
|
||||
if not 'user_id' in values: # Else bug with quick_create when we are filter on an other user
|
||||
values['user_id'] = self.env.user.id
|
||||
|
||||
@@ -1742,3 +1750,13 @@ class Meeting(models.Model):
|
||||
activity_values['user_id'] = values['user_id']
|
||||
if activity_values.keys():
|
||||
self.mapped('activity_ids').write(activity_values)
|
||||
|
||||
@api.model
|
||||
def _fix_rrule(self, values):
|
||||
rule_str = values.get('rrule')
|
||||
if rule_str:
|
||||
rule = rrule.rrulestr(rule_str)
|
||||
if not rule._until and not rule._count:
|
||||
rule._count = 100
|
||||
rule_str = str(rule).split('RRULE:')[-1]
|
||||
return rule_str
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -531,7 +531,7 @@ class PurchaseOrder(models.Model):
|
||||
This function returns an action that display existing picking orders of given purchase order ids.
|
||||
When only one found, show the picking immediately.
|
||||
'''
|
||||
action = self.env.ref('stock.action_picking_tree')
|
||||
action = self.env.ref('stock.action_picking_tree_all')
|
||||
result = action.read()[0]
|
||||
|
||||
#override the context to get rid of the default filtering on operation type
|
||||
|
||||
@@ -3,8 +3,7 @@ access_repair_fee_user,Repair Fee user,model_repair_fee,stock.group_stock_user,1
|
||||
access_repair_fee_manager,Repair Fee manager,model_repair_fee,stock.group_stock_manager,1,0,0,0
|
||||
access_repair_user,Repair user,model_repair_order,stock.group_stock_user,1,1,1,1
|
||||
access_repair_manager,Repair manager,model_repair_order,stock.group_stock_manager,1,0,0,0
|
||||
access_product_pricelist_manager,product.pricelist manager,product.model_product_pricelist,stock.group_stock_manager,1,0,0,0
|
||||
access_product_pricelist_user,product.pricelist user,product.model_product_pricelist,stock.group_stock_user,1,1,1,1
|
||||
access_product_pricelist_user,product.pricelist user,product.model_product_pricelist,stock.group_stock_user,1,0,0,0
|
||||
access_stock_production_lot_user,stock.production.lot user,stock.model_stock_production_lot,stock.group_stock_user,1,1,1,1
|
||||
access_stock_production_lot_manager,stock.production.lot manager,stock.model_stock_production_lot,stock.group_stock_manager,1,0,0,0
|
||||
access_repair_line_user,repair.line user,model_repair_line,stock.group_stock_user,1,1,1,1
|
||||
|
||||
|
@@ -25,7 +25,7 @@ HOURS_PER_DAY = 8
|
||||
def float_to_time(float_hour):
|
||||
if float_hour == 24.0:
|
||||
return datetime.time.max
|
||||
return datetime.time(int(math.modf(float_hour)[1]), int(60 * math.modf(float_hour)[0]), 0)
|
||||
return datetime.time(int(math.modf(float_hour)[1]), int(float_round(60 * math.modf(float_hour)[0], precision_digits=0)), 0)
|
||||
|
||||
|
||||
def to_naive_user_tz(datetime, record):
|
||||
|
||||
@@ -329,7 +329,8 @@ class ProcurementGroup(models.Model):
|
||||
|
||||
for orderpoint in orderpoints:
|
||||
key = self._procurement_from_orderpoint_get_grouping_key([orderpoint.id])
|
||||
location_data[key] = makedefault()
|
||||
if not location_data.get(key):
|
||||
location_data[key] = makedefault()
|
||||
location_data[key]['products'] += orderpoint.product_id
|
||||
location_data[key]['orderpoints'] += orderpoint
|
||||
location_data[key]['groups'] = self._procurement_from_orderpoint_get_groups([orderpoint.id])
|
||||
|
||||
@@ -578,6 +578,11 @@ class StockMove(models.Model):
|
||||
res.append((0, 0, price_diff_line))
|
||||
return res
|
||||
|
||||
def _prepare_move_split_vals(self, uom_qty):
|
||||
vals = super(StockMove, self)._prepare_move_split_vals(uom_qty)
|
||||
vals['to_refund'] = self.to_refund
|
||||
return vals
|
||||
|
||||
def _create_account_move_line(self, credit_account_id, debit_account_id, journal_id):
|
||||
self.ensure_one()
|
||||
AccountMove = self.env['account.move']
|
||||
|
||||
@@ -801,7 +801,7 @@
|
||||
<t t-foreach="elements" t-as="el">
|
||||
<t t-set="color" t-value="el[colorField] || 0"/>
|
||||
<span t-attf-class="badge dropdown o_tag_color_#{color}" t-att-data-color="color" t-att-data-index="el_index" t-att-data-id="el.id">
|
||||
<span class="o_badge_text"><t t-esc="el.display_name"/></span>
|
||||
<span class="o_badge_text" t-att-title="el.display_name"><t t-esc="el.display_name"/></span>
|
||||
<span t-if="!readonly" class="fa fa-times o_delete"/>
|
||||
</span>
|
||||
</t>
|
||||
|
||||
@@ -10583,6 +10583,31 @@ QUnit.module('relational_fields', {
|
||||
form.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('widget many2many_tags', function (assert) {
|
||||
assert.expect(1);
|
||||
this.data.turtle.records[0].partner_ids = [2];
|
||||
|
||||
var form = createView({
|
||||
View: FormView,
|
||||
model: 'turtle',
|
||||
data: this.data,
|
||||
arch:'<form string="Turtles">' +
|
||||
'<sheet>' +
|
||||
'<field name="display_name"/>' +
|
||||
'<field name="partner_ids" widget="many2many_tags"/>' +
|
||||
'</sheet>' +
|
||||
'</form>',
|
||||
res_id: 1,
|
||||
});
|
||||
|
||||
assert.deepEqual(
|
||||
form.$('.o_field_many2manytags.o_field_widget .badge .o_badge_text').attr('title'),
|
||||
'second record', 'the title should be filled in'
|
||||
);
|
||||
|
||||
form.destroy();
|
||||
});
|
||||
|
||||
QUnit.module('FieldStatus');
|
||||
|
||||
QUnit.test('static statusbar widget on many2one field', function (assert) {
|
||||
|
||||
@@ -248,6 +248,10 @@ function applyOverDescendants(node, func) {
|
||||
func(node);
|
||||
applyOverDescendants(node, func);
|
||||
}
|
||||
var $node = $(node);
|
||||
if (node.nodeName === 'A' && $node.hasClass('btn') && !$node.children().length && $(node).parents('.o_outlook_hack').length) {
|
||||
node = $(node).parents('.o_outlook_hack')[0];
|
||||
}
|
||||
node = node.nextSibling;
|
||||
}
|
||||
}
|
||||
@@ -283,7 +287,7 @@ function classToStyle($editable) {
|
||||
|
||||
// Outlook
|
||||
if (node.nodeName === 'A' && $target.hasClass('btn') && !$target.hasClass('btn-link') && !$target.children().length) {
|
||||
var $hack = $('<table class="o_outlook_hack" style="display: inline-table;"><tr><td></td></tr></table>');
|
||||
var $hack = $('<table class="o_outlook_hack" style="display: inline-table;vertical-align:middle"><tr><td></td></tr></table>');
|
||||
$hack.find('td')
|
||||
.attr('height', $target.outerHeight())
|
||||
.css({
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -550,7 +550,11 @@ class IrModelFields(models.Model):
|
||||
failed_dependencies = []
|
||||
for rec in self:
|
||||
model = self.env[rec.model]
|
||||
field = model._fields[rec.name]
|
||||
if rec.name in model._fields:
|
||||
field = model._fields[rec.name]
|
||||
else:
|
||||
# field hasn't been loaded (yet?)
|
||||
continue
|
||||
for dependant, path in model._field_triggers.get(field, ()):
|
||||
if dependant.manual:
|
||||
failed_dependencies.append((field, dependant))
|
||||
@@ -747,6 +751,7 @@ class IrModelFields(models.Model):
|
||||
'readonly': bool(field.readonly),
|
||||
'required': bool(field.required),
|
||||
'selectable': bool(field.search or field.store),
|
||||
'size': getattr(field, 'size', None),
|
||||
'translate': bool(field.translate),
|
||||
'relation_field': field.inverse_name if field.type == 'one2many' else None,
|
||||
'relation_table': field.relation if field.type == 'many2many' else None,
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ class _Cleaner(clean.Cleaner):
|
||||
_style_whitelist = [
|
||||
'font-size', 'font-family', 'font-weight', 'background-color', 'color', 'text-align',
|
||||
'line-height', 'letter-spacing', 'text-transform', 'text-decoration',
|
||||
'float', 'vertical-align',
|
||||
'float', 'vertical-align', 'display',
|
||||
'padding', 'padding-top', 'padding-left', 'padding-bottom', 'padding-right',
|
||||
'margin', 'margin-top', 'margin-left', 'margin-bottom', 'margin-right',
|
||||
# box model
|
||||
|
||||
Reference in New Issue
Block a user