[MERGE] forward port branch saas-12 up to 27dc061

This commit is contained in:
Christophe Simonis
2016-10-12 17:03:55 +02:00
11 changed files with 44 additions and 23 deletions
+7
View File
@@ -178,6 +178,13 @@ class AccountAccount(models.Model):
for account in self: for account in self:
if (account.company_id.id <> vals['company_id']) and move_lines: 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.')) 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) return super(AccountAccount, self).write(vals)
@api.multi @api.multi
@@ -92,11 +92,12 @@ class ReportAgedPartnerBalance(models.AbstractModel):
for partial_line in line.matched_credit_ids: for partial_line in line.matched_credit_ids:
if partial_line.create_date[:10] <= date_from: if partial_line.create_date[:10] <= date_from:
line_amount -= partial_line.amount line_amount -= partial_line.amount
undue_amounts[partner_id] += line_amount if not self.env.user.company_id.currency_id.is_zero(line_amount):
lines[partner_id].append({ undue_amounts[partner_id] += line_amount
'line': line, lines[partner_id].append({
'amount': line_amount, 'line': line,
'period': 6, 'amount': line_amount,
'period': 6,
}) })
# Use one query per period and store results in history (a list variable) # 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: if partial_line.create_date[:10] <= date_from:
line_amount -= partial_line.amount line_amount -= partial_line.amount
partners_amount[partner_id] += line_amount if not self.env.user.company_id.currency_id.is_zero(line_amount):
lines[partner_id].append({ partners_amount[partner_id] += line_amount
'line': line, lines[partner_id].append({
'amount': line_amount, 'line': line,
'period': i + 1, 'amount': line_amount,
}) 'period': i + 1,
})
history.append(partners_amount) history.append(partners_amount)
for partner in partners: for partner in partners:
+2 -1
View File
@@ -339,7 +339,8 @@ class HrExpense(models.Model):
'product_id': product.id, 'product_id': product.id,
'product_uom_id': product.uom_id.id, 'product_uom_id': product.uom_id.id,
'quantity': 1, 'quantity': 1,
'unit_amount': price 'unit_amount': price,
'company_id': employee.company_id.id,
}) })
return super(HrExpense, self).message_new(msg_dict, custom_values) return super(HrExpense, self).message_new(msg_dict, custom_values)
+1 -1
View File
@@ -1924,7 +1924,7 @@ exports.Order = Backbone.Model.extend({
}, },
initialize_validation_date: function () { initialize_validation_date: function () {
this.validation_date = this.validation_date || new Date(); this.validation_date = new Date();
}, },
set_tip: function(tip) { set_tip: function(tip) {
@@ -139,7 +139,7 @@
<field name="ordering_date" attrs="{'readonly': [('state','not in',('draft','in_progress','open'))]}"/> <field name="ordering_date" attrs="{'readonly': [('state','not in',('draft','in_progress','open'))]}"/>
<field name="schedule_date" attrs="{'readonly': [('state','not in',('draft','in_progress','open'))]}"/> <field name="schedule_date" attrs="{'readonly': [('state','not in',('draft','in_progress','open'))]}"/>
<field name="origin" placeholder="e.g. PO0025" attrs="{'readonly': [('state', '!=', 'draft')]}"/> <field name="origin" placeholder="e.g. PO0025" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="picking_type_id" widget="selection" groups="stock.group_stock_adv_location" attrs="{'readonly': [('state', '!=', 'draft')]}"/> <field name="picking_type_id" widget="selection" groups="stock.group_adv_location" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}" attrs="{'readonly': [('state','not in',('draft'))]}"/> <field name="company_id" groups="base.group_multi_company" options="{'no_create': True}" attrs="{'readonly': [('state','not in',('draft'))]}"/>
</group> </group>
</group> </group>
@@ -20,7 +20,7 @@
<field name="inherit_id" ref="sale.view_order_form"/> <field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='order_line']/form//field[@name='price_unit']" position="after"> <xpath expr="//field[@name='order_line']/form//field[@name='price_unit']" position="after">
<field name="purchase_price" groups="base.group_user" invisible="True"/> <field name="purchase_price" groups="base.group_user"/>
</xpath> </xpath>
</field> </field>
</record> </record>
+11
View File
@@ -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
+4 -4
View File
@@ -211,7 +211,7 @@ overridden by setting :attr:`~odoo.models.Model._rec_name`.
.. only:: solutions .. 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:: .. patch::
@@ -255,7 +255,7 @@ be declared in the ``'data'`` list (always loaded) or in the ``'demo'`` list
.. only:: solutions .. only:: solutions
Edit the file ``openacademy/demo.xml`` to include some data. Edit the file ``openacademy/demo/demo.xml`` to include some data.
.. patch:: .. patch::
@@ -484,7 +484,7 @@ client data; it is also related to its sale order line records.
.. only:: solutions .. 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``. #. Add access to the session object in ``openacademy/view/openacademy.xml``.
.. patch:: .. 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 inspect the view, find its external ID and the place to put the
new field. 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`` ``__init__.py``
#. Create a file ``openacademy/views/partner.xml`` and add it to #. Create a file ``openacademy/views/partner.xml`` and add it to
``__manifest__.py`` ``__manifest__.py``
+1 -1
View File
@@ -1276,7 +1276,7 @@ class IrModelData(models.Model):
self._cr.commit() self._cr.commit()
self.unlink() datas.unlink()
@api.model @api.model
def _process_end(self, modules): def _process_end(self, modules):
+1 -1
View File
@@ -1728,7 +1728,7 @@ class BaseModel(object):
for order_part in orderby.split(','): for order_part in orderby.split(','):
order_split = order_part.split() order_split = order_part.split()
order_field = order_split[0] 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': if self._fields[order_field.split(':')[0]].type == 'many2one':
order_clause = self._generate_order_by(order_part, query).replace('ORDER BY ', '') order_clause = self._generate_order_by(order_part, query).replace('ORDER BY ', '')
+2 -2
View File
@@ -340,13 +340,13 @@ try:
# add some sanitizations to respect the excel sheet name restrictions # add some sanitizations to respect the excel sheet name restrictions
# as the sheet name is often translatable, can not control the input # as the sheet name is often translatable, can not control the input
class PatchedWorkbook(xlwt.Workbook): class PatchedWorkbook(xlwt.Workbook):
def add_sheet(self, name): def add_sheet(self, name, cell_overwrite_ok=False):
# invalid Excel character: []:*?/\ # invalid Excel character: []:*?/\
name = re.sub(r'[\[\]:*?/\\]', '', name) name = re.sub(r'[\[\]:*?/\\]', '', name)
# maximum size is 31 characters # maximum size is 31 characters
name = name[:31] 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 xlwt.Workbook = PatchedWorkbook