diff --git a/addons/account/account.py b/addons/account/account.py index 45909b6c920..8c8d58002a8 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -2145,8 +2145,8 @@ class account_tax(osv.osv): @api.v8 def compute_all(self, price_unit, quantity, product=None, partner=None, force_excluded=False): - return self._model.compute_all( - self._cr, self._uid, self, price_unit, quantity, + return account_tax.compute_all( + self._model, self._cr, self._uid, self, price_unit, quantity, product=product, partner=partner, force_excluded=force_excluded) def compute(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None): diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index d9feea7dcf6..9b9973730a0 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1206,7 +1206,7 @@ class account_invoice(models.Model): def pay_and_reconcile(self, cr, uid, ids, pay_amount, pay_account_id, period_id, pay_journal_id, writeoff_acc_id, writeoff_period_id, writeoff_journal_id, context=None, name=''): recs = self.browse(cr, uid, ids, context) - return recs.pay_and_reconcile(pay_amount, pay_account_id, period_id, pay_journal_id, + return account_invoice.pay_and_reconcile(recs, pay_amount, pay_account_id, period_id, pay_journal_id, writeoff_acc_id, writeoff_period_id, writeoff_journal_id, name=name) class account_invoice_line(models.Model): @@ -1614,7 +1614,7 @@ class account_invoice_tax(models.Model): def compute(self, cr, uid, invoice_id, context=None): recs = self.browse(cr, uid, [], context) invoice = recs.env['account.invoice'].browse(invoice_id) - return recs.compute(invoice) + return account_invoice_tax.compute(recs, invoice) @api.model def move_line_get(self, invoice_id): diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py index 4b0b8e53d6a..82a6db228eb 100644 --- a/addons/marketing_campaign/marketing_campaign.py +++ b/addons/marketing_campaign/marketing_campaign.py @@ -821,4 +821,4 @@ class report_xml(osv.osv): if object_id: model = self.pool.get('ir.model').browse(cr, uid, object_id, context=context).model args.append(('model', '=', model)) - return super(report_xml, self).search(cr, uid, args, offset, limit, order, context, count) + return super(report_xml, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count) diff --git a/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh b/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh index 11f6d18eae4..681732ae714 100755 --- a/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh +++ b/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh @@ -7,6 +7,7 @@ function connect () { WPA_PASS_FILE="/tmp/wpa_pass.txt" PERSISTENT_WIFI_NETWORK_FILE="/home/pi/wifi_network.txt" CURRENT_WIFI_NETWORK_FILE="/tmp/current_wifi_network.txt" # used to repair connection when we lose it + LOST_WIFI_FILE="/tmp/lost_wifi.txt" ESSID="${1}" PASSWORD="${2}" PERSIST="${3}" @@ -15,6 +16,7 @@ function connect () { sleep 3 sudo pkill -f keep_wifi_alive.sh + WIFI_WAS_LOST=$? # make network choice persistent if [ -n "${ESSID}" ] ; then @@ -54,13 +56,24 @@ function connect () { # give dhcp some time timeout 30 sh -c 'until ifconfig wlan0 | grep "inet addr:" ; do sleep 0.1 ; done' + TIMEOUT_RETURN=$? - if [ $? -eq 124 ] && [ -z "${NO_AP}" ] ; then + if [ ${TIMEOUT_RETURN} -eq 124 ] && [ -z "${NO_AP}" ] ; then logger -t posbox_connect_to_wifi "Failed to connect, forcing Posbox AP" sudo /home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/wireless_ap.sh "force" & else - logger -t posbox_connect_to_wifi "Restarting odoo" - sudo service odoo restart + if [ ${TIMEOUT_RETURN} -ne 124 ] ; then + rm -f "${LOST_WIFI_FILE}" + fi + + if [ ! -f "${LOST_WIFI_FILE}" ] ; then + logger -t posbox_connect_to_wifi "Restarting odoo" + sudo service odoo restart + fi + + if [ ${WIFI_WAS_LOST} -eq 0 ] ; then + touch "${LOST_WIFI_FILE}" + fi logger -t posbox_connect_to_wifi "Starting wifi keep alive script" /home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/keep_wifi_alive.sh & diff --git a/addons/report/models/report.py b/addons/report/models/report.py index 5dffb409101..9bda6203d00 100644 --- a/addons/report/models/report.py +++ b/addons/report/models/report.py @@ -175,8 +175,8 @@ class Report(osv.Model): @api.v8 def get_html(self, records, report_name, data=None): - return self._model.get_html(self._cr, self._uid, records.ids, report_name, - data=data, context=self._context) + return Report.get_html(self._model, self._cr, self._uid, records.ids, + report_name, data=data, context=self._context) @api.v7 def get_pdf(self, cr, uid, ids, report_name, html=None, data=None, context=None): @@ -275,8 +275,8 @@ class Report(osv.Model): @api.v8 def get_pdf(self, records, report_name, html=None, data=None): - return self._model.get_pdf(self._cr, self._uid, records.ids, report_name, - html=html, data=data, context=self._context) + return Report.get_pdf(self._model, self._cr, self._uid, records.ids, + report_name, html=html, data=data, context=self._context) @api.v7 def get_action(self, cr, uid, ids, report_name, data=None, context=None): @@ -309,8 +309,8 @@ class Report(osv.Model): @api.v8 def get_action(self, records, report_name, data=None): - return self._model.get_action(self._cr, self._uid, records.ids, report_name, - data=data, context=self._context) + return Report.get_action(self._model, self._cr, self._uid, records.ids, + report_name, data=data, context=self._context) #-------------------------------------------------------------------------- # Report generation helpers @@ -356,8 +356,8 @@ class Report(osv.Model): @api.v8 def _check_attachment_use(self, records, report): - return self._model._check_attachment_use( - self._cr, self._uid, records.ids, report, context=self._context) + return Report._check_attachment_use( + self._model, self._cr, self._uid, records.ids, report, context=self._context) def _check_wkhtmltopdf(self): return wkhtmltopdf_state diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 4fab346e176..54a093d6943 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -1042,22 +1042,23 @@ class ir_model_data(osv.osv): else: if mode=='init' or (mode=='update' and xml_id): inherit_xml_ids = [] - for table, field_name in model_obj._inherits.items(): - xml_ids = self.pool['ir.model.data'].search(cr, uid, [ - ('module', '=', module), - ('name', '=', xml_id + '_' + table.replace('.', '_')), - ], context=context) - # XML ID found in the database, try to recover an existing record - if xml_ids: - found_xml_id = self.pool['ir.model.data'].browse(cr, uid, xml_ids[0], context=context) - record = self.pool[found_xml_id.model].browse(cr, uid, [found_xml_id.res_id], context=context)[0] - # The record exists, store the id and don't recreate the XML ID - if record.exists(): - inherit_xml_ids.append(found_xml_id.model) - values[field_name] = found_xml_id.res_id - # Orphan XML ID, delete it - else: - found_xml_id.unlink() + if xml_id: + for table, field_name in model_obj._inherits.items(): + xml_ids = self.pool['ir.model.data'].search(cr, uid, [ + ('module', '=', module), + ('name', '=', xml_id + '_' + table.replace('.', '_')), + ], context=context) + # XML ID found in the database, try to recover an existing record + if xml_ids: + found_xml_id = self.pool['ir.model.data'].browse(cr, uid, xml_ids[0], context=context) + record = self.pool[found_xml_id.model].browse(cr, uid, [found_xml_id.res_id], context=context)[0] + # The record exists, store the id and don't recreate the XML ID + if record.exists(): + inherit_xml_ids.append(found_xml_id.model) + values[field_name] = found_xml_id.res_id + # Orphan XML ID, delete it + else: + found_xml_id.unlink() res_id = model_obj.create(cr, uid, values, context=context) if xml_id: diff --git a/openerp/api.py b/openerp/api.py index edd2238fb9c..5e19457b5c1 100644 --- a/openerp/api.py +++ b/openerp/api.py @@ -608,6 +608,16 @@ def v7(method_v7): def foo(self): ... + Special care must be taken if one method calls the other one, because + the method may be overridden! In that case, one should call the method + from the current class (say ``MyClass``), for instance:: + + @api.v7 + def foo(self, cr, uid, ids, context=None): + # Beware: records.foo() may call an overriding of foo() + records = self.browse(cr, uid, ids, context) + return MyClass.foo(records) + Note that the wrapper method uses the docstring of the first method. """ # retrieve method_v8 from the caller's frame diff --git a/openerp/models.py b/openerp/models.py index 0ec370e88ee..4c055bab3a6 100644 --- a/openerp/models.py +++ b/openerp/models.py @@ -3885,7 +3885,7 @@ class BaseModel(object): self._check_selection_field_value(cr, user, field, vals[field], context=context) if column._classic_write and not hasattr(column, '_fnct_inv'): if (not totranslate) or not column.translate: - updates.append((field, '%s', column._symbol_set[1](vals[field]))) + updates.append((field, column._symbol_set[0], column._symbol_set[1](vals[field]))) direct.append(field) else: upd_todo.append(field) @@ -4198,7 +4198,7 @@ class BaseModel(object): for field in vals: current_field = self._columns[field] if current_field._classic_write: - updates.append((field, '%s', current_field._symbol_set[1](vals[field]))) + updates.append((field, current_field._symbol_set[0], current_field._symbol_set[1](vals[field]))) #for the function fields that receive a value, we set them directly in the database #(they may be required), but we also need to trigger the _fct_inv() @@ -4424,7 +4424,7 @@ class BaseModel(object): value[v] = value[v][0] except: pass - updates.append((v, '%s', column._symbol_set[1](value[v]))) + updates.append((v, column._symbol_set[0], column._symbol_set[1](value[v]))) if updates: query = 'UPDATE "%s" SET %s WHERE id = %%s' % ( self._table, ','.join('"%s"=%s' % u[:2] for u in updates), @@ -4448,8 +4448,8 @@ class BaseModel(object): value = value[0] except: pass - query = 'UPDATE "%s" SET "%s"=%%s WHERE id = %%s' % ( - self._table, f, + query = 'UPDATE "%s" SET "%s"=%s WHERE id = %%s' % ( + self._table, f, column._symbol_set[0], ) cr.execute(query, (column._symbol_set[1](value), id))