[MERGE] forward port branch 9.0 up to 6faf232
This commit is contained in:
@@ -160,6 +160,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
|
||||
|
||||
@@ -314,7 +314,7 @@ class account_journal(models.Model):
|
||||
})
|
||||
ir_model_obj = self.pool['ir.model.data']
|
||||
model, action_id = ir_model_obj.get_object_reference(self._cr, self._uid, 'account', action_name)
|
||||
action = self.pool[model].read(self._cr, self._uid, action_id, context=self._context)
|
||||
action = self.pool[model].read(self._cr, self._uid, [action_id], context=self._context)[0]
|
||||
action['context'] = ctx
|
||||
action['domain'] = self._context.get('use_domain', [])
|
||||
return action
|
||||
@@ -357,7 +357,7 @@ class account_journal(models.Model):
|
||||
ctx.pop('group_by', None)
|
||||
ir_model_obj = self.pool['ir.model.data']
|
||||
model, action_id = ir_model_obj.get_object_reference(self._cr, self._uid, 'account', action_name)
|
||||
action = self.pool[model].read(self._cr, self._uid, action_id, context=self._context)
|
||||
action = self.pool[model].read(self._cr, self._uid, [action_id], context=self._context)[0]
|
||||
action['context'] = ctx
|
||||
if ctx.get('use_domain', False):
|
||||
action['domain'] = ['|', ('journal_id', '=', self.id), ('journal_id', '=', False)]
|
||||
|
||||
@@ -14,7 +14,7 @@ class AccountJournal(models.Model):
|
||||
action_name = 'action_account_bank_statement_import'
|
||||
ir_model_obj = self.pool['ir.model.data']
|
||||
model, action_id = ir_model_obj.get_object_reference(self._cr, self._uid, 'account_bank_statement_import', action_name)
|
||||
action = self.pool[model].read(self._cr, self._uid, action_id, context=self.env.context)
|
||||
action = self.pool[model].read(self._cr, self._uid, [action_id], context=self.env.context)[0]
|
||||
# Note: this drops action['context'], which is a dict stored as a string, which is not easy to update
|
||||
action.update({'context': (u"{'journal_id': " + str(self.id) + u"}")})
|
||||
return action
|
||||
|
||||
@@ -1810,7 +1810,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) {
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
<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="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'))]}"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -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
|
||||
@@ -211,7 +211,7 @@ overridden by setting :attr:`~openerp.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
|
||||
``__openerp__.py``
|
||||
|
||||
+1
-1
@@ -2022,7 +2022,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 ', '')
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user