← Back to team overview

banking-addons-team team mailing list archive

lp:~camptocamp/banking-addons/bank-statement-reconcile-70-pos_compat-afe into lp:banking-addons/bank-statement-reconcile-7.0

 

Alexandre Fayolle - camptocamp has proposed merging lp:~camptocamp/banking-addons/bank-statement-reconcile-70-pos_compat-afe into lp:banking-addons/bank-statement-reconcile-7.0.

Requested reviews:
  Banking Addons Core Editors (banking-addons-team)
Related bugs:
  Bug #1245391 in Banking Addons: "point_of_sale incompatible with  bank-statement-reconcile-7.0"
  https://bugs.launchpad.net/banking-addons/+bug/1245391
  Bug #1247876 in Banking Addons: "account_statement_ext: crash when creating an empty statement"
  https://bugs.launchpad.net/banking-addons/+bug/1247876

For more details, see:
https://code.launchpad.net/~camptocamp/banking-addons/bank-statement-reconcile-70-pos_compat-afe/+merge/193807

fix issue when creating empty statement (lp:124876) and add a module which enables bank statement creation from the point of sale with the banking framework installed. 
-- 
https://code.launchpad.net/~camptocamp/banking-addons/bank-statement-reconcile-70-pos_compat-afe/+merge/193807
Your team Banking Addons Core Editors is requested to review the proposed merge of lp:~camptocamp/banking-addons/bank-statement-reconcile-70-pos_compat-afe into lp:banking-addons/bank-statement-reconcile-7.0.
=== modified file 'account_statement_ext/statement.py'
--- account_statement_ext/statement.py	2013-10-16 08:58:12 +0000
+++ account_statement_ext/statement.py	2013-11-04 15:51:13 +0000
@@ -31,9 +31,10 @@
     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
 

=== added directory 'account_statement_ext_point_of_sale'
=== added file 'account_statement_ext_point_of_sale/__init__.py'
--- account_statement_ext_point_of_sale/__init__.py	1970-01-01 00:00:00 +0000
+++ account_statement_ext_point_of_sale/__init__.py	2013-11-04 15:51:13 +0000
@@ -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 <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import point_of_sale

=== added file 'account_statement_ext_point_of_sale/__openerp__.py'
--- account_statement_ext_point_of_sale/__openerp__.py	1970-01-01 00:00:00 +0000
+++ account_statement_ext_point_of_sale/__openerp__.py	2013-11-04 15:51:13 +0000
@@ -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 <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+{'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,
+ }

=== added file 'account_statement_ext_point_of_sale/point_of_sale.py'
--- account_statement_ext_point_of_sale/point_of_sale.py	1970-01-01 00:00:00 +0000
+++ account_statement_ext_point_of_sale/point_of_sale.py	2013-11-04 15:51:13 +0000
@@ -0,0 +1,95 @@
+# -*- 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 <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+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
+    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 = []
+        print pos_config.journal_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):
+        bank_values = super(pos_session, self)._prepare_bank_statement(cr, uid, pos_config, journal, context)
+        defaults = self.pool['account.bank.statement'].default_get(cr, uid, ['profile_id', 'period_id'], context=context)
+        bank_values.update(defaults)
+        return bank_values


Follow ups