diff --git a/account_statement_ext/__openerp__.py b/account_statement_ext/__openerp__.py
index 213d51c6..0eb73d8d 100644
--- a/account_statement_ext/__openerp__.py
+++ b/account_statement_ext/__openerp__.py
@@ -20,7 +20,7 @@
##############################################################################
{'name': "Bank statement extension and profiles",
- 'version': '1.3.2',
+ 'version': '1.3.3',
'author': 'Camptocamp',
'maintainer': 'Camptocamp',
'category': 'Finance',
diff --git a/account_statement_ext/statement.py b/account_statement_ext/statement.py
index bab025cd..2cbd9e8f 100644
--- a/account_statement_ext/statement.py
+++ b/account_statement_ext/statement.py
@@ -31,9 +31,10 @@ def fixed_write(self, cr, uid, ids, vals, context=None):
I will do it when I have time."""
res = super(stat_mod.account_bank_statement, self).write(cr, uid, ids,
vals, context=context)
- cr.execute("UPDATE account_bank_statement_line"
- " SET sequence = account_bank_statement_line.id + 1"
- " where statement_id in %s", (tuple(ids),))
+ if ids: # will be false for an new empty bank statement
+ cr.execute("UPDATE account_bank_statement_line"
+ " SET sequence = account_bank_statement_line.id + 1"
+ " where statement_id in %s", (tuple(ids),))
return res
stat_mod.account_bank_statement.write = fixed_write
diff --git a/account_statement_ext_point_of_sale/__init__.py b/account_statement_ext_point_of_sale/__init__.py
new file mode 100644
index 00000000..05435f81
--- /dev/null
+++ b/account_statement_ext_point_of_sale/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Alexandre Fayolle
+# Copyright 2013 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from . import point_of_sale
diff --git a/account_statement_ext_point_of_sale/__openerp__.py b/account_statement_ext_point_of_sale/__openerp__.py
new file mode 100644
index 00000000..6d4b7a8f
--- /dev/null
+++ b/account_statement_ext_point_of_sale/__openerp__.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Nicolas Bessi, Joel Grand-Guillaume
+# Copyright 2011-2013 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{'name': "Bank statement extension and profiles for Point of Sale",
+ 'version': '1.0.0',
+ 'author': 'Camptocamp',
+ 'maintainer': 'Camptocamp',
+ 'category': 'Point Of Sale',
+ 'complexity': 'normal',
+ 'depends': ['point_of_sale',
+ 'account_statement_ext',
+ ],
+ 'description': """
+ Update the point of sale code to work with improved bank statements.
+ """,
+ 'website': 'http://www.camptocamp.com',
+ 'data': [],
+ 'demo': [],
+ 'test': [],
+ 'installable': True,
+ 'images': [],
+ 'auto_install': True,
+ 'license': 'AGPL-3',
+ 'active': False,
+ }
diff --git a/account_statement_ext_point_of_sale/point_of_sale.py b/account_statement_ext_point_of_sale/point_of_sale.py
new file mode 100644
index 00000000..31e23418
--- /dev/null
+++ b/account_statement_ext_point_of_sale/point_of_sale.py
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Alexandre Fayolle
+# Copyright 2013 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+from openerp.addons.point_of_sale.point_of_sale import pos_session as std_pos_session
+from openerp.osv import orm, osv
+from openerp.tools.translate import _
+
+if not hasattr(std_pos_session, '_prepare_bank_statement'):
+ # monkey patch to fix lp:1245375
+ #
+ # We replace pos_session.create with the implementation in
+ # mp_create below which is essentially the same, only with a call
+ # to self._prepare_bank_statement.
+ #
+ # The default implementation has been extracted in
+ # mp_prepare_bank_statement below, and can be overridden in models
+ # which _inherit pos.session
+ #
+ # This change has been proposed for merging to fix lp:125375
+ def mp_prepare_bank_statement(self, cr, uid, pos_config, journal, context=None):
+ bank_values = {
+ 'journal_id' : journal.id,
+ 'user_id' : uid,
+ 'company_id' : pos_config.shop_id.company_id.id
+ }
+ return bank_values
+
+ def mp_create(self, cr, uid, values, context=None):
+ context = context or {}
+ config_id = values.get('config_id', False) or context.get('default_config_id', False)
+ if not config_id:
+ raise osv.except_osv( _('Error!'),
+ _("You should assign a Point of Sale to your session."))
+
+ # journal_id is not required on the pos_config because it does not
+ # exists at the installation. If nothing is configured at the
+ # installation we do the minimal configuration. Impossible to do in
+ # the .xml files as the CoA is not yet installed.
+ jobj = self.pool.get('pos.config')
+ pos_config = jobj.browse(cr, uid, config_id, context=context)
+ context.update({'company_id': pos_config.shop_id.company_id.id})
+ if not pos_config.journal_id:
+ jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id']
+ if jid:
+ jobj.write(cr, uid, [pos_config.id], {'journal_id': jid}, context=context)
+ else:
+ raise osv.except_osv( _('error!'),
+ _("Unable to open the session. You have to assign a sale journal to your point of sale."))
+
+ # define some cash journal if no payment method exists
+ if not pos_config.journal_ids:
+ journal_proxy = self.pool.get('account.journal')
+ cashids = journal_proxy.search(cr, uid, [('journal_user', '=', True), ('type','=','cash')], context=context)
+ if not cashids:
+ cashids = journal_proxy.search(cr, uid, [('type', '=', 'cash')], context=context)
+ if not cashids:
+ cashids = journal_proxy.search(cr, uid, [('journal_user','=',True)], context=context)
+
+ jobj.write(cr, uid, [pos_config.id], {'journal_ids': [(6,0, cashids)]})
+
+
+ pos_config = jobj.browse(cr, uid, config_id, context=context)
+ bank_statement_ids = []
+ for journal in pos_config.journal_ids:
+ bank_values = self._prepare_bank_statement(cr, uid, pos_config, journal, context)
+ statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context)
+ bank_statement_ids.append(statement_id)
+
+ values.update({
+ 'name' : pos_config.sequence_id._next(),
+ 'statement_ids' : [(6, 0, bank_statement_ids)],
+ 'config_id': config_id
+ })
+ return super(std_pos_session, self).create(cr, uid, values, context=context)
+
+ std_pos_session._prepare_bank_statement = mp_prepare_bank_statement
+ std_pos_session.create = mp_create
+
+
+class pos_session(orm.Model):
+ _inherit = 'pos.session'
+
+ def _prepare_bank_statement(self, cr, uid, pos_config, journal, context=None):
+ """ Override the function _mp_create. To add the bank profile to the statement
+
+ Function That was previously added to pos.session model using monkey patching
+
+ """
+
+ bank_values = super(pos_session, self)._prepare_bank_statement(cr, uid,
+ pos_config,
+ journal, context)
+ user_obj = self.pool.get('res.users')
+ profile_obj = self.pool.get('account.statement.profile')
+ user = user_obj.browse(cr, uid, uid, context=context)
+ defaults = self.pool['account.bank.statement'].default_get(cr, uid,
+ ['profile_id', 'period_id'],
+ context=context)
+ profile_ids = profile_obj.search(cr, uid,
+ [('company_id', '=', user.company_id.id),
+ ('journal_id', '=', bank_values['journal_id'])],
+ context=context)
+ if profile_ids:
+ defaults['profile_id'] = profile_ids[0]
+ bank_values.update(defaults)
+ return bank_values