diff --git a/addons/account/models/account.py b/addons/account/models/account.py index 4d614fdaf0b..b9d1565c9b6 100644 --- a/addons/account/models/account.py +++ b/addons/account/models/account.py @@ -178,6 +178,13 @@ class AccountAccount(models.Model): for account in self: if (account.company_id.id <> vals['company_id']) and move_lines: raise UserError(_('You cannot change the owner company of an account that already contains journal items.')) + # If user change the reconcile flag, all aml should be recomputed for that account and this is very costly. + # So to prevent some bugs we add a constraint saying that you cannot change the reconcile field if there is any aml existing + # for that account. + if vals.get('reconcile'): + move_lines = self.env['account.move.line'].search([('account_id', 'in', self.ids)], limit=1) + if len(move_lines): + raise UserError(_('You cannot change the value of the reconciliation on this account as it already has some moves')) return super(AccountAccount, self).write(vals) @api.multi diff --git a/addons/account/report/account_aged_partner_balance.py b/addons/account/report/account_aged_partner_balance.py index fb5f90f96ec..737a07e298a 100644 --- a/addons/account/report/account_aged_partner_balance.py +++ b/addons/account/report/account_aged_partner_balance.py @@ -92,11 +92,12 @@ class ReportAgedPartnerBalance(models.AbstractModel): for partial_line in line.matched_credit_ids: if partial_line.create_date[:10] <= date_from: line_amount -= partial_line.amount - undue_amounts[partner_id] += line_amount - lines[partner_id].append({ - 'line': line, - 'amount': line_amount, - 'period': 6, + if not self.env.user.company_id.currency_id.is_zero(line_amount): + undue_amounts[partner_id] += line_amount + lines[partner_id].append({ + 'line': line, + 'amount': line_amount, + 'period': 6, }) # Use one query per period and store results in history (a list variable) @@ -144,12 +145,13 @@ class ReportAgedPartnerBalance(models.AbstractModel): if partial_line.create_date[:10] <= date_from: line_amount -= partial_line.amount - partners_amount[partner_id] += line_amount - lines[partner_id].append({ - 'line': line, - 'amount': line_amount, - 'period': i + 1, - }) + if not self.env.user.company_id.currency_id.is_zero(line_amount): + partners_amount[partner_id] += line_amount + lines[partner_id].append({ + 'line': line, + 'amount': line_amount, + 'period': i + 1, + }) history.append(partners_amount) for partner in partners: diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index 653d55f1a9c..f8dc372f39e 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -339,7 +339,8 @@ class HrExpense(models.Model): 'product_id': product.id, 'product_uom_id': product.uom_id.id, 'quantity': 1, - 'unit_amount': price + 'unit_amount': price, + 'company_id': employee.company_id.id, }) return super(HrExpense, self).message_new(msg_dict, custom_values) diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index 1282d35d3a9..b34e9c32290 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -1924,7 +1924,7 @@ exports.Order = Backbone.Model.extend({ }, initialize_validation_date: function () { - this.validation_date = this.validation_date || new Date(); + this.validation_date = new Date(); }, set_tip: function(tip) { diff --git a/addons/purchase_requisition/views/purchase_requisition_views.xml b/addons/purchase_requisition/views/purchase_requisition_views.xml index d5177adf924..61fac151782 100644 --- a/addons/purchase_requisition/views/purchase_requisition_views.xml +++ b/addons/purchase_requisition/views/purchase_requisition_views.xml @@ -139,7 +139,7 @@ - + diff --git a/addons/sale_margin/views/sale_margin_view.xml b/addons/sale_margin/views/sale_margin_view.xml index fa9c56fe28a..b0da87326fa 100644 --- a/addons/sale_margin/views/sale_margin_view.xml +++ b/addons/sale_margin/views/sale_margin_view.xml @@ -20,7 +20,7 @@ - + diff --git a/doc/cla/individual/tiangolo.md b/doc/cla/individual/tiangolo.md new file mode 100644 index 00000000000..dfb1c19c218 --- /dev/null +++ b/doc/cla/individual/tiangolo.md @@ -0,0 +1,11 @@ +Colombia, 2016-10-04 + +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, + +Sebastián Ramírez tiangolo@gmail.com https://github.com/tiangolo diff --git a/doc/howtos/backend.rst b/doc/howtos/backend.rst index 46891f181a5..a19e9376b9e 100644 --- a/doc/howtos/backend.rst +++ b/doc/howtos/backend.rst @@ -211,7 +211,7 @@ overridden by setting :attr:`~odoo.models.Model._rec_name`. .. only:: solutions - Edit the file ``openacademy/models.py`` to include a *Course* class. + Edit the file ``openacademy/models/models.py`` to include a *Course* class. .. patch:: @@ -255,7 +255,7 @@ be declared in the ``'data'`` list (always loaded) or in the ``'demo'`` list .. only:: solutions - Edit the file ``openacademy/demo.xml`` to include some data. + Edit the file ``openacademy/demo/demo.xml`` to include some data. .. patch:: @@ -484,7 +484,7 @@ client data; it is also related to its sale order line records. .. only:: solutions - #. Create the class *Session* in ``openacademy/models.py``. + #. Create the class *Session* in ``openacademy/models/models.py``. #. Add access to the session object in ``openacademy/view/openacademy.xml``. .. patch:: @@ -684,7 +684,7 @@ instead of a single view its ``arch`` field is composed of any number of inspect the view, find its external ID and the place to put the new field. - #. Create a file ``openacademy/partner.py`` and import it in + #. Create a file ``openacademy/models/partner.py`` and import it in ``__init__.py`` #. Create a file ``openacademy/views/partner.xml`` and add it to ``__manifest__.py`` diff --git a/odoo/addons/base/ir/ir_model.py b/odoo/addons/base/ir/ir_model.py index 79d191dce42..b4376c99467 100644 --- a/odoo/addons/base/ir/ir_model.py +++ b/odoo/addons/base/ir/ir_model.py @@ -1276,7 +1276,7 @@ class IrModelData(models.Model): self._cr.commit() - self.unlink() + datas.unlink() @api.model def _process_end(self, modules): diff --git a/odoo/models.py b/odoo/models.py index 00e69e6369f..9270782eadb 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -1728,7 +1728,7 @@ class BaseModel(object): for order_part in orderby.split(','): order_split = order_part.split() order_field = order_split[0] - if order_field in groupby_fields: + if order_field == 'id' or order_field in groupby_fields: if self._fields[order_field.split(':')[0]].type == 'many2one': order_clause = self._generate_order_by(order_part, query).replace('ORDER BY ', '') diff --git a/odoo/tools/misc.py b/odoo/tools/misc.py index 533b7277119..1c4cc68283c 100644 --- a/odoo/tools/misc.py +++ b/odoo/tools/misc.py @@ -340,13 +340,13 @@ try: # add some sanitizations to respect the excel sheet name restrictions # as the sheet name is often translatable, can not control the input class PatchedWorkbook(xlwt.Workbook): - def add_sheet(self, name): + def add_sheet(self, name, cell_overwrite_ok=False): # invalid Excel character: []:*?/\ name = re.sub(r'[\[\]:*?/\\]', '', name) # maximum size is 31 characters name = name[:31] - return super(PatchedWorkbook, self).add_sheet(name) + return super(PatchedWorkbook, self).add_sheet(name, cell_overwrite_ok=cell_overwrite_ok) xlwt.Workbook = PatchedWorkbook