[MERGE] forward port branch 11.0 up to 593f631e5e
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo import api, fields, models, tools
|
||||
|
||||
|
||||
class TimesheetAttendance(models.Model):
|
||||
@@ -16,6 +16,7 @@ class TimesheetAttendance(models.Model):
|
||||
|
||||
@api.model_cr
|
||||
def init(self):
|
||||
tools.drop_view_if_exists(self.env.cr, self._table)
|
||||
self._cr.execute("""CREATE OR REPLACE VIEW %s AS (
|
||||
SELECT
|
||||
max(id) AS id,
|
||||
|
||||
@@ -22,6 +22,17 @@ class AccountInvoice(models.Model):
|
||||
help='Intrastat country, delivery for sales, origin for purchases',
|
||||
domain=[('intrastat', '=', True)])
|
||||
|
||||
@api.model
|
||||
def _prepare_refund(self, invoice, date_invoice=None, date=None, description=None, journal_id=None):
|
||||
"""
|
||||
Correctly set intrastat_country_id
|
||||
@override
|
||||
"""
|
||||
values = super(AccountInvoice, self)._prepare_refund(invoice, date_invoice, date, description, journal_id)
|
||||
if 'intrastat_country_id' not in values:
|
||||
values['intrastat_country_id'] = invoice.intrastat_country_id.id
|
||||
return values
|
||||
|
||||
|
||||
class IntrastatRegion(models.Model):
|
||||
_name = 'l10n_be_intrastat.region'
|
||||
|
||||
@@ -2219,9 +2219,9 @@
|
||||
</record>
|
||||
<record id="account_common_526" model="account.account.template">
|
||||
<field name="code">526</field>
|
||||
<field name="reconcile" eval="False"/>
|
||||
<field name="reconcile" eval="True"/>
|
||||
<field name="name">Dividendo activo a pagar</field>
|
||||
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
|
||||
<field name="user_type_id" ref="account.data_account_type_payable"/>
|
||||
<field name="chart_template_id" ref="account_chart_template_common"/>
|
||||
<field name="group_id" ref="l10n_es.account_group_526" />
|
||||
</record>
|
||||
|
||||
@@ -225,6 +225,7 @@
|
||||
<field name="amount_type">group</field>
|
||||
<field name="amount" eval="100"/>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva21_sp_in_1'), ref('account_tax_template_p_iva21_sp_in_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_10_11'), ref('mod_303_14_15_purchase'), ref('mod_303_36_37'), ref('mod_303_40_41')])]"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_21"/>
|
||||
</record>
|
||||
<record id="account_tax_template_p_iva21_ic_bc_1" model="account.tax.template">
|
||||
@@ -257,7 +258,8 @@
|
||||
<field name="description">P_IVA21_IC_BC</field>
|
||||
<field name="amount_type">group</field>
|
||||
<field name="amount" eval="100"/>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva21_ic_bc_1'), ref('account_tax_template_p_iva21_ic_bc_2')])]"/>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva21_ic_bc_1'), ref('account_tax_template_p_iva21_ic_bc_2'), ])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_36_37'), ref('mod_303_40_41'), ref('mod_303_10_11'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="chart_template_id" ref="l10n_es.account_chart_template_common"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="name">IVA 21% Adquisición Intracomunitaria. Bienes corrientes</field>
|
||||
@@ -296,6 +298,7 @@
|
||||
<field name="amount_type">group</field>
|
||||
<field name="amount" eval="100"/>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva21_ic_bi_1'), ref('account_tax_template_p_iva21_ic_bi_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_38_39'), ref('mod_303_40_41'), ref('mod_303_10_11'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="chart_template_id" ref="l10n_es.account_chart_template_common"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_21"/>
|
||||
</record>
|
||||
@@ -368,6 +371,7 @@
|
||||
<field name="amount_type">group</field>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva4_sp_ex_1'), ref('account_tax_template_p_iva4_sp_ex_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_12_13'), ref('mod_303_14_15_purchase'), ref('mod_303_28_29'), ref('mod_303_40_41')])]"/>
|
||||
<field name="name">IVA 4% Adquisición de servicios extracomunitarios</field>
|
||||
<field name="tax_group_id" ref="tax_group_iva_4"/>
|
||||
</record>
|
||||
@@ -403,6 +407,7 @@
|
||||
<field name="chart_template_id" ref="l10n_es.account_chart_template_common"/>
|
||||
<field name="amount_type">group</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva10_sp_ex_1'), ref('account_tax_template_p_iva10_sp_ex_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_12_13'), ref('mod_303_14_15_purchase'), ref('mod_303_28_29'), ref('mod_303_40_41')])]"/>
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="name">IVA 10% Adquisición de servicios extracomunitarios</field>
|
||||
<field name="tax_group_id" ref="tax_group_iva_10"/>
|
||||
@@ -441,6 +446,7 @@
|
||||
<field name="chart_template_id" ref="l10n_es.account_chart_template_common"/>
|
||||
<field name="amount_type">group</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva21_sp_ex_1'), ref('account_tax_template_p_iva21_sp_ex_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_12_13'), ref('mod_303_14_15_purchase'), ref('mod_303_28_29'), ref('mod_303_40_41')])]"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_21"/>
|
||||
</record>
|
||||
<record id="account_tax_template_p_iva4_ic_bc_1" model="account.tax.template">
|
||||
@@ -477,6 +483,7 @@
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="name">IVA 4% Adquisición Intracomunitario. Bienes corrientes</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva4_ic_bc_1'), ref('account_tax_template_p_iva4_ic_bc_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_36_37'), ref('mod_303_40_41'), ref('mod_303_10_11'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_4"/>
|
||||
</record>
|
||||
<record id="account_tax_template_p_iva4_ic_bi_1" model="account.tax.template">
|
||||
@@ -514,6 +521,7 @@
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="name">IVA 4% Adquisición Intracomunitario. Bienes de inversión</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva4_ic_bi_1'), ref('account_tax_template_p_iva4_ic_bi_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_38_39'), ref('mod_303_40_41'), ref('mod_303_10_11'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_4"/>
|
||||
</record>
|
||||
<record id="account_tax_template_p_iva10_ic_bc_1" model="account.tax.template">
|
||||
@@ -550,6 +558,7 @@
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="name">IVA 10% Adquisición Intracomunitario. Bienes corrientes</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva10_ic_bc_1'), ref('account_tax_template_p_iva10_ic_bc_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_36_37'), ref('mod_303_40_41'), ref('mod_303_10_11'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_10"/>
|
||||
</record>
|
||||
<record id="account_tax_template_p_iva10_ic_bi_1" model="account.tax.template">
|
||||
@@ -586,6 +595,7 @@
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="name">IVA 10% Adquisición Intracomunitario. Bienes de inversión</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva10_ic_bi_1'), ref('account_tax_template_p_iva10_ic_bi_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_38_39'), ref('mod_303_40_41'), ref('mod_303_10_11'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_10"/>
|
||||
</record>
|
||||
<record id="account_tax_template_s_iva0_sp_i" model="account.tax.template">
|
||||
@@ -1248,6 +1258,7 @@
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="name">IVA 10% Adquisición de servicios intracomunitarios</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva10_sp_in_1'), ref('account_tax_template_p_iva10_sp_in_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_10_11'), ref('mod_303_14_15_purchase'), ref('mod_303_36_37'), ref('mod_303_40_41')])]"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_10"/>
|
||||
</record>
|
||||
<record id="account_tax_template_p_iva4_sp_in_1" model="account.tax.template">
|
||||
@@ -1284,6 +1295,7 @@
|
||||
<field name="type_tax_use">purchase</field>
|
||||
<field name="name">IVA 4% Adquisición de servicios intracomunitarios</field>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva4_sp_in_1'), ref('account_tax_template_p_iva4_sp_in_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_10_11'), ref('mod_303_14_15_purchase'), ref('mod_303_36_37'), ref('mod_303_40_41')])]"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_4"/>
|
||||
</record>
|
||||
<record id="account_tax_template_p_irpf21te" model="account.tax.template">
|
||||
@@ -1390,6 +1402,7 @@
|
||||
<field name="amount_type">group</field>
|
||||
<field name="amount" eval="100"/>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva4_isp_1'), ref('account_tax_template_p_iva4_isp_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_28_29'), ref('mod_303_40_41'), ref('mod_303_12_13'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="chart_template_id" ref="l10n_es.account_chart_template_common"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_4"/>
|
||||
</record>
|
||||
@@ -1426,6 +1439,7 @@
|
||||
<field name="amount_type">group</field>
|
||||
<field name="amount" eval="100"/>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva10_isp_1'), ref('account_tax_template_p_iva10_isp_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_28_29'), ref('mod_303_40_41'), ref('mod_303_12_13'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="chart_template_id" ref="l10n_es.account_chart_template_common"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_10"/>
|
||||
</record>
|
||||
@@ -1462,6 +1476,7 @@
|
||||
<field name="amount_type">group</field>
|
||||
<field name="amount" eval="100"/>
|
||||
<field name="children_tax_ids" eval="[(6, 0, [ref('account_tax_template_p_iva21_isp_1'), ref('account_tax_template_p_iva21_isp_2')])]"/>
|
||||
<field name="tag_ids" eval="[(6, False, [ref('mod_303_28_29'), ref('mod_303_40_41'), ref('mod_303_12_13'), ref('mod_303_14_15_purchase')])]"/>
|
||||
<field name="chart_template_id" ref="l10n_es.account_chart_template_common"/>
|
||||
<field name="tax_group_id" ref="tax_group_iva_21"/>
|
||||
</record>
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
</template>
|
||||
|
||||
<template id="message_origin_link">
|
||||
<p>This <t t-esc="self._description.lower()"/> has been <span t-if="edit">modified</span><span t-if="not edit">created</span> from:
|
||||
<p>This <t t-esc="self.env['ir.model']._get(self._name).name.lower()"/> has been <span t-if="edit">modified</span><span t-if="not edit">created</span> from:
|
||||
<t t-foreach="origin" t-as="o">
|
||||
<a href="#" t-att-data-oe-model="o._name" t-att-data-oe-id="o.id"> <t t-esc="o.display_name"/></a><span t-if="origin.ids[-1:] != o.ids">, </span>
|
||||
</t>
|
||||
@@ -74,11 +74,11 @@
|
||||
<template id="message_user_assigned">
|
||||
<p style="margin: 0px;">
|
||||
<span>Dear <t t-esc="object.user_id.sudo().name"/>,</span><br />
|
||||
<span style="margin-top: 8px;">You have been assigned to the <t t-esc="object._description.lower()"/> <t t-esc="object.name_get()[0][1]"/>.</span>
|
||||
<span style="margin-top: 8px;">You have been assigned to the <t t-esc="object.env['ir.model']._get(object._name).name.lower()"/> <t t-esc="object.name_get()[0][1]"/>.</span>
|
||||
</p>
|
||||
<p style="margin-top: 24px; margin-bottom: 16px;">
|
||||
<a t-att-href="'/mail/view?model=%s&res_id=%s' % (object._name, object.id)" style="background-color:#875A7B; padding: 10px; text-decoration: none; color: #fff; border-radius: 5px;">
|
||||
View <t t-esc="object._description.lower()"/>
|
||||
View <t t-esc="object.env['ir.model']._get(object._name).name.lower()"/>
|
||||
</a>
|
||||
</p>
|
||||
</template>
|
||||
|
||||
@@ -224,7 +224,7 @@ class AuthorizeAPI():
|
||||
etree.SubElement(customer, "email").text = partner.email or ''
|
||||
response = self._authorize_request(root)
|
||||
res = dict()
|
||||
if not response.find('customerProfileId'):
|
||||
if response.find('customerProfileId') is None: # Warning: do not use bool(etree) as the semantics is very misleading
|
||||
_logger.warning(
|
||||
'Unable to create customer payment profile, data missing from transaction. Transaction_id: %s - Partner_id: %s'
|
||||
% (transaction_id, partner)
|
||||
|
||||
@@ -829,7 +829,8 @@ class SaleOrderLine(models.Model):
|
||||
for line in self:
|
||||
fpos = line.order_id.fiscal_position_id or line.order_id.partner_id.property_account_position_id
|
||||
# If company_id is set, always filter taxes by the company
|
||||
taxes = line.product_id.taxes_id.filtered(lambda r: not line.company_id or r.company_id == line.company_id)
|
||||
line_company_id = line.company_id or line.order_id.company_id
|
||||
taxes = line.product_id.taxes_id.filtered(lambda r: not line_company_id or r.company_id == line_company_id)
|
||||
line.tax_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_shipping_id) if fpos else taxes
|
||||
|
||||
@api.model
|
||||
|
||||
@@ -196,3 +196,56 @@ class TestSaleOrder(TestCommonSaleNoChart):
|
||||
sol = so.order_line.filtered(lambda l: l.product_id == serv_cost)
|
||||
self.assertTrue(sol, 'Sale: cost invoicing does not add lines when confirming vendor invoice')
|
||||
self.assertEquals((sol.price_unit, sol.qty_delivered, sol.product_uom_qty, sol.qty_invoiced), (160, 2, 0, 0), 'Sale: line is wrong after confirming vendor invoice')
|
||||
|
||||
def test_so_create_multicompany(self):
|
||||
# Preparing test Data
|
||||
user_demo = self.env.ref('base.user_demo')
|
||||
company_1 = self.env.ref('base.main_company')
|
||||
company_2 = self.env['res.company'].create({
|
||||
'name': 'company 2',
|
||||
'parent_id': company_1.id,
|
||||
})
|
||||
user_demo.write({
|
||||
'groups_id': [(4, self.env.ref('sales_team.group_sale_manager').id, False)],
|
||||
'company_ids': [(6, False, [company_1.id])],
|
||||
'company_id': company_1.id,
|
||||
})
|
||||
|
||||
so_partner = self.env.ref('base.res_partner_2')
|
||||
so_partner.write({
|
||||
'property_account_position_id': False,
|
||||
})
|
||||
|
||||
tax_company_1 = self.env['account.tax'].create({
|
||||
'name': 'T1',
|
||||
'amount': 90,
|
||||
'company_id': company_1.id,
|
||||
})
|
||||
|
||||
tax_company_2 = self.env['account.tax'].create({
|
||||
'name': 'T2',
|
||||
'amount': 90,
|
||||
'company_id': company_2.id,
|
||||
})
|
||||
|
||||
product_shared = self.env['product.template'].create({
|
||||
'name': 'shared product',
|
||||
'taxes_id': [(6, False, [tax_company_1.id, tax_company_2.id])],
|
||||
})
|
||||
|
||||
# Use case
|
||||
so_1 = self.env['sale.order'].sudo(user_demo.id).create({
|
||||
'partner_id': so_partner.id,
|
||||
'company_id': company_1.id,
|
||||
})
|
||||
so_1.invalidate_cache()
|
||||
|
||||
# This is what is done when importing the csv lines (on sale.order):
|
||||
# id,order_line/product_id
|
||||
# __export__.sale_order_37_1bb960ba,Product name
|
||||
so_1.write({
|
||||
'order_line': [(0, False, {'product_id': product_shared.product_variant_id.id, 'order_id': so_1.id})],
|
||||
})
|
||||
|
||||
self.assertEqual(set(so_1.order_line.tax_id.ids), set([tax_company_1.id]),
|
||||
'Only taxes from the right company are put by default')
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
<field name="name">stock_move multi-company</field>
|
||||
<field name="model_id" search="[('model','=','stock.move')]" model="ir.model"/>
|
||||
<field name="global" eval="True"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
<field name="domain_force">['|','|',('company_id','=',False),('company_id','child_of',[user.company_id.id]),('location_dest_id.company_id', '=', False)]</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="stock_quant_rule">
|
||||
|
||||
@@ -196,11 +196,11 @@ def concat_xml(file_list):
|
||||
|
||||
:param list(str) file_list: list of files to check
|
||||
:returns: (concatenation_result, checksum)
|
||||
:rtype: (str, str)
|
||||
:rtype: (bytes, str)
|
||||
"""
|
||||
checksum = hashlib.new('sha1')
|
||||
if not file_list:
|
||||
return '', checksum.hexdigest()
|
||||
return b'', checksum.hexdigest()
|
||||
|
||||
root = None
|
||||
for fname in file_list:
|
||||
|
||||
@@ -737,6 +737,7 @@ var BasicModel = AbstractModel.extend({
|
||||
});
|
||||
_.each(fields, function (field) {
|
||||
var dataPoint;
|
||||
record.data[field.name] = null;
|
||||
if (field.type === 'many2one') {
|
||||
if (field.value) {
|
||||
var id = _.isArray(field.value) ? field.value[0] : field.value;
|
||||
|
||||
@@ -170,10 +170,13 @@ var WebsiteRoot = BodyManager.extend({
|
||||
* @private
|
||||
* @param {jQuery} [$stopTarget]
|
||||
* only stop the animations linked to the given element(s)
|
||||
* its descendants
|
||||
*/
|
||||
_stopAnimations: function ($stopTarget) {
|
||||
var removedAnimations = _.map(this.animations, function (animation) {
|
||||
if (!$stopTarget || $stopTarget.filter(animation.el).length) {
|
||||
if (!$stopTarget
|
||||
|| $stopTarget.filter(animation.el).length
|
||||
|| $stopTarget.find(animation.el).length) {
|
||||
animation.destroy();
|
||||
return animation;
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ var ProductWishlist = Widget.extend({
|
||||
$('input.js_product_change:checked').first().trigger('change');
|
||||
}
|
||||
else {
|
||||
$('input.js_variant_change').trigger('change');
|
||||
$('input.js_variant_change:checked').first().trigger('change');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
Vietnam, 2019-07-27
|
||||
|
||||
I hereby agree to the terms of the Odoo Individual Contributor License
|
||||
Agreement v1.0.
|
||||
|
||||
I declare that I am authorized and able to make this agreement and sign this
|
||||
declaration.
|
||||
|
||||
Signed,
|
||||
|
||||
Anh Vu <vuna2004@gmail.com> https://github.com/anhvu-sg
|
||||
@@ -0,0 +1,11 @@
|
||||
Denmark, 2019-07-24
|
||||
|
||||
I hereby agree to the terms of the Odoo Individual Contributor License
|
||||
Agreement v1.0.
|
||||
|
||||
I declare that I am authorized and able to make this agreement and sign this
|
||||
declaration.
|
||||
|
||||
Signed,
|
||||
|
||||
Stefan Andersen <stfnandersen@gmail.com> https://github.com/stfnndrsn
|
||||
Reference in New Issue
Block a user