summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-08-21 16:00:40 +0200
committerChristophe Simonis <chs@odoo.com>2018-08-21 16:00:40 +0200
commitfbfb91799eecc5297ab6c86b657bf213343f6cd8 (patch)
treed7af2e04f2667e61d887a02b2c5d205d064d8d83
parent65c2a9b70c4313af8bf80ee633e55e176df8baf0 (diff)
parent9cf0dbe22676d793971364ed31e6c28fa5329585 (diff)
[MERGE] forward port branch saas-15 up to 9cf0dbe2267
-rw-r--r--addons/base_sparse_field/models/models.py2
-rw-r--r--addons/base_sparse_field/views/views.xml2
-rw-r--r--addons/calendar/models/calendar.py6
-rw-r--r--addons/crm/models/crm_lead.py2
-rw-r--r--addons/gamification/models/badge.py8
-rw-r--r--addons/l10n_be_invoice_bba/views/account_invoice_view.xml11
-rw-r--r--addons/l10n_ch/data/account_vat2011_data.xml33
-rw-r--r--addons/l10n_fr_hr_payroll/report/report_l10n_fr_fiche_paye.xml2
-rw-r--r--addons/website_forum/models/res_users.py4
-rw-r--r--doc/cla/corporate/janus.md15
-rw-r--r--doc/cla/individual/oleksandrpaziuk.md11
-rw-r--r--odoo/addons/base/tests/test_orm.py24
-rw-r--r--odoo/models.py3
13 files changed, 109 insertions, 14 deletions
diff --git a/addons/base_sparse_field/models/models.py b/addons/base_sparse_field/models/models.py
index 77ea36a6bd8..703c6466ee9 100644
--- a/addons/base_sparse_field/models/models.py
+++ b/addons/base_sparse_field/models/models.py
@@ -9,7 +9,7 @@ class IrModelFields(models.Model):
ttype = fields.Selection(selection_add=[('serialized', 'serialized')])
serialization_field_id = fields.Many2one('ir.model.fields', string='Serialization Field',
- ondelete='cascade', domain="[('ttype','=','serialized')]",
+ ondelete='cascade', domain="[('ttype','=','serialized'), ('model_id', '=', model_id)]",
help="If set, this field will be stored in the sparse structure of the "
"serialization field, instead of having its own database column. "
"This cannot be changed after creation.",
diff --git a/addons/base_sparse_field/views/views.xml b/addons/base_sparse_field/views/views.xml
index 95c3d23634a..eaf684247af 100644
--- a/addons/base_sparse_field/views/views.xml
+++ b/addons/base_sparse_field/views/views.xml
@@ -22,7 +22,7 @@
<field name="arch" type="xml">
<field name="related" position="before">
<field name="serialization_field_id"
- domain="[('ttype','=','serialized'), ('model_id','=',model_id)]"
+ context="{'default_model_id': model_id, 'default_ttype': 'serialized'}"
attrs="{'readonly': [('state','=','base')]}"/>
</field>
</field>
diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py
index 411efd987ba..d4b30bcfee7 100644
--- a/addons/calendar/models/calendar.py
+++ b/addons/calendar/models/calendar.py
@@ -946,11 +946,13 @@ class Meeting(models.Model):
@api.onchange('start_date')
def _onchange_start_date(self):
- self.start = self.start_date
+ if self.start_date:
+ self.start = self.start_date
@api.onchange('stop_date')
def _onchange_stop_date(self):
- self.stop = self.stop_date
+ if self.stop_date:
+ self.stop = self.stop_date
####################################################
# Calendar Business, Reccurency, ...
diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py
index c8589eb43c8..4feb5c3607a 100644
--- a/addons/crm/models/crm_lead.py
+++ b/addons/crm/models/crm_lead.py
@@ -700,7 +700,7 @@ class Lead(models.Model):
def _get_duplicated_leads_by_emails(self, partner_id, email, include_lost=False):
""" Search for opportunities that have the same partner and that arent done or cancelled """
if not email:
- return []
+ return self.env['crm.lead']
partner_match_domain = []
for email in set(email_split(email) + [email]):
partner_match_domain.append(('email_from', '=ilike', email))
diff --git a/addons/gamification/models/badge.py b/addons/gamification/models/badge.py
index 3ca11577c33..0fd69631650 100644
--- a/addons/gamification/models/badge.py
+++ b/addons/gamification/models/badge.py
@@ -161,13 +161,13 @@ class GamificationBadge(models.Model):
for badge in self:
owners = badge.owner_ids
- badge.stats_my = sum(o.user_id == self.env.user for o in owners)
- badge.stats_this_month = sum(o.create_date >= first_month_day for o in owners)
- badge.stats_my_this_month = sum(
+ badge.stat_my = sum(o.user_id == self.env.user for o in owners)
+ badge.stat_this_month = sum(o.create_date >= first_month_day for o in owners)
+ badge.stat_my_this_month = sum(
o.user_id == self.env.user and o.create_date >= first_month_day
for o in owners
)
- badge.stats_my_monthly_sending = sum(
+ badge.stat_my_monthly_sending = sum(
o.create_uid == self.env.user and o.create_date >= first_month_day
for o in owners
)
diff --git a/addons/l10n_be_invoice_bba/views/account_invoice_view.xml b/addons/l10n_be_invoice_bba/views/account_invoice_view.xml
index 9ab348940a1..ee3e8470e93 100644
--- a/addons/l10n_be_invoice_bba/views/account_invoice_view.xml
+++ b/addons/l10n_be_invoice_bba/views/account_invoice_view.xml
@@ -12,4 +12,15 @@
</field>
</field>
</record>
+
+ <record id="supplier_invoice_bbacomm_form" model="ir.ui.view">
+ <field name="name">account.invoice.supplier.form</field>
+ <field name="model">account.invoice</field>
+ <field name="inherit_id" ref="account.invoice_supplier_form"/>
+ <field name="arch" type="xml">
+ <field name="reference" position="before">
+ <field name="reference_type" attrs="{'readonly':[('state','!=','draft')]}"/>
+ </field>
+ </field>
+ </record>
</odoo>
diff --git a/addons/l10n_ch/data/account_vat2011_data.xml b/addons/l10n_ch/data/account_vat2011_data.xml
index 0da193cd9ad..794a7b38ece 100644
--- a/addons/l10n_ch/data/account_vat2011_data.xml
+++ b/addons/l10n_ch/data/account_vat2011_data.xml
@@ -52,6 +52,10 @@
<field name="name">Switzerland VAT Form: grid 381 base</field>
<field name="applicability">taxes</field>
</record>
+ <record id="vat_tag_382_a" model="account.account.tag">
+ <field name="name">Switzerland VAT Form: grid 382 base</field>
+ <field name="applicability">taxes</field>
+ </record>
<record id="vat_tag_301_b" model="account.account.tag">
<field name="name">Switzerland VAT Form: grid 301 tax</field>
<field name="applicability">taxes</field>
@@ -76,6 +80,10 @@
<field name="name">Switzerland VAT Form: grid 381 tax</field>
<field name="applicability">taxes</field>
</record>
+ <record id="vat_tag_382_b" model="account.account.tag">
+ <field name="name">Switzerland VAT Form: grid 382 tax</field>
+ <field name="applicability">taxes</field>
+ </record>
<record id="vat_tag_400" model="account.account.tag">
<field name="name">Switzerland VAT Form: grid 400</field>
<field name="applicability">taxes</field>
@@ -98,7 +106,7 @@
</record>
<record id="vat_tag_dedouanement" model="account.account.tag">
- <field name="name">Switzerland VAT Form: 100% dédouanement (base in grid 400)</field>
+ <field name="name">Switzerland VAT Form: 100% dédouanement (base in grid 400)</field>
<field name="applicability">taxes</field>
</record>
@@ -411,6 +419,18 @@
<field name="tag_ids" eval="[(6,0,[ref('vat_tag_405')])]"/>
<field name="tax_group_id" ref="tax_group_tva_77"/>
</record>
+ <record model="account.tax.template" id="vat_77_purchase_return">
+ <field name="name">TVA due a 7.7% (TN) (return)</field>
+ <field name="description">7.7% achat (return)</field>
+ <field name="amount" eval="-7.7"/>
+ <field name="amount_type">percent</field>
+ <field name="sequence" eval="0"/>
+ <field name="chart_template_id" ref="l10nch_chart_template"/>
+ <field name="type_tax_use">purchase</field>
+ <field name="refund_account_id" ref="ch_coa_1170"/>
+ <field name="account_id" ref="ch_coa_1170"/>
+ <field name="tag_ids" eval="[(6,0,[ref('vat_tag_382_a'),ref('vat_tag_382_b')])]"/>
+ </record>
<record model="account.tax.template" id="vat_80">
<field name="name">TVA due a 8.0% (TN)</field>
<field name="description">8.0%</field>
@@ -534,4 +554,15 @@
<field name="tag_ids" eval="[(6,0,[ref('vat_tag_dedouanement')])]"/>
<field name="tax_group_id" ref="tax_group_tva_0"/>
</record>
+ <!--# for reverse charge or VAT on Acquisition (group of taxes)-->
+ <record model="account.tax.template" id="vat_77_purchase_reverse">
+ <field name="description">7.7% achat</field>
+ <field name="name">TVA 7.7% sur achat service a l'etranger (reverse charge)</field>
+ <field name="amount" eval="7.7"/>
+ <field name="amount_type">group</field>
+ <field name="type_tax_use">purchase</field>
+ <field name="children_tax_ids" eval="[(6, 0, [ref('vat_77_purchase_return'), ref('vat_77_purchase')])]"/>
+ <field name="chart_template_id" ref="l10nch_chart_template"/>
+ <field name="tag_ids" eval="[(6,0,[ref('vat_tag_382_a'), ref('vat_tag_382_b')])]"/>
+ </record>
</odoo>
diff --git a/addons/l10n_fr_hr_payroll/report/report_l10n_fr_fiche_paye.xml b/addons/l10n_fr_hr_payroll/report/report_l10n_fr_fiche_paye.xml
index c9fcc8ae3fd..4f6e38bee9d 100644
--- a/addons/l10n_fr_hr_payroll/report/report_l10n_fr_fiche_paye.xml
+++ b/addons/l10n_fr_hr_payroll/report/report_l10n_fr_fiche_paye.xml
@@ -12,7 +12,7 @@
<h4>Paie du <span t-field="o.date_from"/> au <span t-field="o.date_to"/></h4>
</div>
<div class="col-xs-4 pull-right">
- <table class="table table-bordered" stype="border: 2px solid black;">
+ <table class="table table-bordered" style="border: 2px solid black;">
<tr>
<td>
<div t-field="o.employee_id.company_id.partner_id"
diff --git a/addons/website_forum/models/res_users.py b/addons/website_forum/models/res_users.py
index 054e3a4d56a..77cbcd7d9e5 100644
--- a/addons/website_forum/models/res_users.py
+++ b/addons/website_forum/models/res_users.py
@@ -88,7 +88,9 @@ class Users(models.Model):
params['forum_id'] = forum_id
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
token_url = base_url + '/forum/validate_email?%s' % urls.url_encode(params)
- activation_template.sudo().with_context(token_url=token_url).send_mail(self.id, force_send=True)
+ with self._cr.savepoint():
+ activation_template.sudo().with_context(token_url=token_url).send_mail(
+ self.id, force_send=True, raise_exception=True)
return True
@api.one
diff --git a/doc/cla/corporate/janus.md b/doc/cla/corporate/janus.md
new file mode 100644
index 00000000000..4269c11aa22
--- /dev/null
+++ b/doc/cla/corporate/janus.md
@@ -0,0 +1,15 @@
+France, 2018-06-20
+
+JANUS agrees to the terms of the Odoo Corporate Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Martin Duvergey martin.duvergey@gpsante.fr https://github.com/mduvergey
+
+List of contributors:
+
+Martin Duvergey martin.duvergey@gpsante.fr https://github.com/mduvergey
diff --git a/doc/cla/individual/oleksandrpaziuk.md b/doc/cla/individual/oleksandrpaziuk.md
new file mode 100644
index 00000000000..94f0459800e
--- /dev/null
+++ b/doc/cla/individual/oleksandrpaziuk.md
@@ -0,0 +1,11 @@
+Ukraine, 2018-06-11
+
+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,
+
+Paziuk Oleksandr o.paziuk@mobilunity.com https://github.com/oleksandrpaziuk \ No newline at end of file
diff --git a/odoo/addons/base/tests/test_orm.py b/odoo/addons/base/tests/test_orm.py
index d9a358d3c1e..bbb52f8c80a 100644
--- a/odoo/addons/base/tests/test_orm.py
+++ b/odoo/addons/base/tests/test_orm.py
@@ -202,6 +202,30 @@ class TestORM(TransactionCase):
group_user.write({'users': [(3, user.id)]})
self.assertTrue(user.share)
+ @mute_logger('odoo.models')
+ def test_unlink_with_property(self):
+ """ Verify that unlink removes the related ir.property as unprivileged user """
+ user = self.env['res.users'].create({
+ 'name': 'Justine Bridou',
+ 'login': 'saucisson',
+ 'groups_id': [4, self.ref('base.group_partner_manager')],
+ })
+ p1 = self.env['res.partner'].sudo(user).create({'name': 'Zorro'})
+ p1_prop = self.env['ir.property'].sudo(user).create({
+ 'name': 'Slip en laine',
+ 'res_id': 'res.partner,{}'.format(p1.id),
+ 'fields_id': self.env['ir.model.fields'].search([
+ ('model', '=', 'res.partner'), ('name', '=', 'ref')], limit=1).id,
+ 'value_text': 'Nain poilu',
+ 'type': 'char',
+ })
+
+ # Unlink with unprivileged user
+ p1.unlink()
+
+ # ir.property is deleted
+ self.assertEqual(
+ p1_prop.exists(), self.env['ir.property'], 'p1_prop should have been deleted')
class TestInherits(TransactionCase):
""" test the behavior of the orm for models that use _inherits;
diff --git a/odoo/models.py b/odoo/models.py
index 2d49c60cb7a..6101b5a979a 100644
--- a/odoo/models.py
+++ b/odoo/models.py
@@ -2922,9 +2922,8 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
# Delete the records' properties.
with self.env.norecompute():
- self.env['ir.property'].search([('res_id', 'in', refs)]).unlink()
-
self.check_access_rule('unlink')
+ self.env['ir.property'].search([('res_id', 'in', refs)]).sudo().unlink()
cr = self._cr
Data = self.env['ir.model.data'].sudo().with_context({})