Merge lp:~sylvain-legal/openupgrade-addons/7.0_point_of_sale into lp:openupgrade-addons

Proposed by Sylvain LE GAL (GRAP)
Status: Work in progress
Proposed branch: lp:~sylvain-legal/openupgrade-addons/7.0_point_of_sale
Merge into: lp:openupgrade-addons
Diff against target: 416 lines (+397/-0)
4 files modified
point_of_sale/migrations/7.0.1.0.1/openupgrade_analysis_work.txt (+169/-0)
point_of_sale/migrations/7.0.1.0.1/post-migration.py (+180/-0)
point_of_sale/migrations/7.0.1.0.1/pre-migration.py (+34/-0)
point_of_sale/migrations/7.0.1.0.1/user_notes.txt (+14/-0)
To merge this branch: bzr merge lp:~sylvain-legal/openupgrade-addons/7.0_point_of_sale
Reviewer Review Type Date Requested Status
OpenUpgrade Committers Pending
Review via email: mp+187221@code.launchpad.net

Description of the change

This branch will manage 'point_of_sale' migration.
Work in progress.
Please don't review until the state changes.
Merge Proposal just to inform to community i'm working on the module.

To post a comment you must log in.
8137. By Sylvain LE GAL (GRAP)

[ADD] First version Beta for 'point_of_sale' migration.

Revision history for this message
Sylvain LE GAL (GRAP) (sylvain-legal) wrote :

My apologize for the mistake.

2013/10/15 Sylvain LE GAL (GRAP) <email address hidden>

> The proposal to merge
> lp:~sylvain-legal/openupgrade-addons/7.0_point_of_sale into
> lp:openupgrade-addons has been updated.
>
> Status: Merged => Work in progress
>
> For more details, see:
>
> https://code.launchpad.net/~sylvain-legal/openupgrade-addons/7.0_point_of_sale/+merge/187221
> --
>
> https://code.launchpad.net/~sylvain-legal/openupgrade-addons/7.0_point_of_sale/+merge/187221
> You are the owner of
> lp:~sylvain-legal/openupgrade-addons/7.0_point_of_sale.
>

Revision history for this message
Pedro Manuel Baeza (pedro.baeza) wrote :

How is this work going, Sylvain?

Revision history for this message
Sylvain LE GAL (GRAP) (sylvain-legal) wrote :

Hi,

I realized a migration 6.1 -> 7.0 in November 2013 with this script. I did'nt marked this MP as 'ready to review' because this script was experimental and I think that other developpers have to work on it to make it more correct maybe.
I kept it in the state 'work in progress' because maybe this script can be usefull for any people.

Regards.

Unmerged revisions

8137. By Sylvain LE GAL (GRAP)

[ADD] First version Beta for 'point_of_sale' migration.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'point_of_sale/migrations/7.0.1.0.1/openupgrade_analysis_work.txt'
2--- point_of_sale/migrations/7.0.1.0.1/openupgrade_analysis_work.txt 1970-01-01 00:00:00 +0000
3+++ point_of_sale/migrations/7.0.1.0.1/openupgrade_analysis_work.txt 2013-10-14 23:49:02 +0000
4@@ -0,0 +1,169 @@
5+# - se faire une base de référence de point of sale en 6.1
6+# passer une migration V7 avec rien, pour voir comment ça réagit.
7+
8+
9+---Fields in module 'point_of_sale'---
10+### Create an session for each bank statement.
11+point_of_sale / account.bank.statement / pos_session_id (many2one) : NEW relation: pos.session
12+
13+### Deleting a field related. Nothing to do.
14+point_of_sale / account.bank.statement.line / journal_id (char) : DEL mode: modify
15+
16+
17+### This concept are lost in V7. Nothing to do.
18+point_of_sale / account.journal / auto_cash (boolean) : DEL
19+point_of_sale / account.journal / check_dtls (boolean) : DEL
20+### New concept, use default
21+point_of_sale / account.journal / amount_authorized_diff (float): NEW
22+point_of_sale / account.journal / self_checkout_payment_method (boolean): NEW
23+
24+### New concept. hypothesis : create au new pos_config object for each shop_id / sale_journal / user_id
25+point_of_sale / pos.config / group_by (boolean) : NEW
26+point_of_sale / pos.config / iface_cashdrawer (boolean) : NEW
27+point_of_sale / pos.config / iface_electronic_scale (boolean): NEW
28+point_of_sale / pos.config / iface_payment_terminal (boolean): NEW
29+point_of_sale / pos.config / iface_print_via_proxy (boolean): NEW
30+point_of_sale / pos.config / iface_self_checkout (boolean) : NEW
31+point_of_sale / pos.config / iface_vkeyboard (boolean) : NEW
32+point_of_sale / pos.config / journal_id (many2one) : NEW relation: account.journal
33+point_of_sale / pos.config / journal_ids (many2many) : NEW relation: account.journal
34+point_of_sale / pos.config / name (char) : NEW required: required
35+point_of_sale / pos.config / sequence_id (many2one) : NEW relation: ir.sequence
36+point_of_sale / pos.config / session_ids (one2many) : NEW relation: pos.session
37+point_of_sale / pos.config / shop_id (many2one) : NEW relation: sale.shop, required: required, req_default: function
38+point_of_sale / pos.config / state (selection) : NEW required: required, selection_keys: ['active', 'deprecated', 'inactive'], req_default: active
39+
40+# Pour les pos_order faire un select shop_id, sale_journal. Créer un pos_config & des pos_sessions associés. !!!! Attention aussi aux users.
41+
42+# New optional value. Nothing to do.
43+point_of_sale / pos.order / pos_reference (char) : NEW
44+### The script migration will associate a pos.order to a new 'pos.session'. (associated to sale_journal).
45+# No Data loss neither, data Change. Nothing to do.
46+point_of_sale / pos.order / sale_journal (many2one) : now a function
47+# The script migration will associate a pos.order to a new 'pos.session'.
48+point_of_sale / pos.order / session_id (many2one) : NEW relation: pos.session
49+### The script migration will associate a pos.order to a new 'pos.session'. (associated to shop_id).
50+# No Data loss neither, data Change. Nothing to do.
51+point_of_sale / pos.order / shop_id (many2one) : now a function
52+
53+
54+point_of_sale / pos.session / config_id (many2one) : NEW relation: pos.config, required: required
55+point_of_sale / pos.session / name (char) : NEW required: required, req_default: /
56+point_of_sale / pos.session / order_ids (one2many) : NEW relation: pos.order
57+point_of_sale / pos.session / start_at (datetime) : NEW
58+point_of_sale / pos.session / state (selection) : NEW required: required, selection_keys: ['closed', 'closing_control', 'opened', 'opening_control'], req_default: opening_control
59+point_of_sale / pos.session / statement_ids (one2many) : NEW relation: account.bank.statement
60+point_of_sale / pos.session / stop_at (datetime) : NEW
61+point_of_sale / pos.session / user_id (many2one) : NEW relation: res.users, required: required, req_default: function
62+
63+### 'available_in_pos' is a new concept. If checked, the product will be available to sale in the point of sale.
64+# In 6.1, the product was available if the product had a pos_categ_id defined.
65+# The script migration will set to True the 'available_in_pos' value for all product with a pos_categ_id defined.
66+point_of_sale / product.product / available_in_pos (boolean) : NEW
67+
68+### 'to_weight' is a a new concept. We assume that all products that have a unit 'uos_id' (or 'uom_id') which 'uom_categ_id' is 'product_uom_categ_kgm' can be weight.
69+# The script migration will set to True the 'to_weight' value for that products.
70+## USE : uom_categ, uom_categ_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'product', 'product_uom_categ_kgm')
71+point_of_sale / product.product / to_weight (boolean) : NEW
72+
73+# New Concept for 'pos.category'. Nothing to do.
74+point_of_sale / pos.category / image (binary) : NEW
75+
76+# New Concept for 'res_user'. Nothing to do.
77+point_of_sale / res.users / ean13 (char) : NEW
78+
79+# Script migration will associate a new 'pos.config' to each sale user.
80+point_of_sale / res.users / pos_config (many2one) : NEW relation: pos.config
81+
82+---XML records in module 'point_of_sale'---
83+### Ignore interface and access records
84+NEW ir.actions.act_window: point_of_sale.act_pos_config_sessions
85+NEW ir.actions.act_window: point_of_sale.act_pos_session_orders
86+NEW ir.actions.act_window: point_of_sale.action_pos_box_in
87+NEW ir.actions.act_window: point_of_sale.action_pos_box_out
88+NEW ir.actions.act_window: point_of_sale.action_pos_config_pos
89+NEW ir.actions.act_window: point_of_sale.action_pos_session
90+NEW ir.actions.act_window: point_of_sale.action_pos_session_opening
91+DEL ir.actions.act_window: point_of_sale.action_box_entries
92+DEL ir.actions.act_window: point_of_sale.action_box_out
93+DEL ir.actions.act_window: point_of_sale.action_pos_close_statement
94+DEL ir.actions.act_window: point_of_sale.action_pos_confirm
95+DEL ir.actions.act_window: point_of_sale.action_pos_sale_all
96+DEL ir.actions.act_window: point_of_sale.action_product_input
97+DEL ir.actions.act_window: point_of_sale.action_product_output
98+DEL ir.actions.act_window: point_of_sale.action_report_cash_register_all
99+NEW ir.actions.client: point_of_sale.action_client_pos_menu
100+NEW ir.actions.report.xml: point_of_sale.report_user_label
101+NEW ir.actions.todo: base.open_menu
102+NEW ir.model.access: point_of_sale.access_account_journal_cashbox_line
103+NEW ir.model.access: point_of_sale.access_ir_sequence_manager
104+NEW ir.model.access: point_of_sale.access_pos_config_user
105+NEW ir.model.access: point_of_sale.access_pos_session_user
106+DEL ir.model.access: point_of_sale.access_account_journal_column
107+DEL ir.model.access: point_of_sale.access_account_journal_column_manager
108+DEL ir.model.access: point_of_sale.access_account_journal_view
109+DEL ir.model.access: point_of_sale.access_account_journal_view_manager
110+DEL ir.model.access: point_of_sale.access_pos_config_journal
111+DEL ir.model.access: point_of_sale.access_pos_config_journal_manager
112+DEL ir.model.access: point_of_sale.access_report_check_register
113+NEW ir.rule: point_of_sale.rule_pos_multi_company
114+NEW ir.ui.menu: point_of_sale.menu_pos_config_pos
115+NEW ir.ui.menu: point_of_sale.menu_pos_session_all
116+NEW ir.ui.menu: point_of_sale.menu_pos_session_opening
117+DEL ir.ui.menu: point_of_sale.menu_all_menu_all_register
118+DEL ir.ui.menu: point_of_sale.menu_close_statement
119+DEL ir.ui.menu: point_of_sale.menu_open_statement
120+DEL ir.ui.menu: point_of_sale.menu_point_ofsale_all
121+DEL ir.ui.menu: point_of_sale.menu_point_open_config
122+DEL ir.ui.menu: point_of_sale.menu_point_root_touchscreen
123+DEL ir.ui.menu: point_of_sale.menu_report_cash_register_all
124+DEL ir.ui.menu: point_of_sale.menu_wizard_enter_jrnl
125+DEL ir.ui.menu: point_of_sale.menu_wizard_enter_jrnl2
126+DEL ir.ui.menu: point_of_sale.menu_wizard_pos_confirm
127+DEL ir.ui.menu: point_of_sale.products_for_input_operations
128+DEL ir.ui.menu: point_of_sale.products_for_output_operations
129+NEW ir.ui.view: point_of_sale.pos_ean13_generator
130+NEW ir.ui.view: point_of_sale.pos_session_opening_form_view
131+NEW ir.ui.view: point_of_sale.res_users_form_preference_view
132+NEW ir.ui.view: point_of_sale.res_users_form_view
133+NEW ir.ui.view: point_of_sale.view_partner_property_form
134+NEW ir.ui.view: point_of_sale.view_pos_config_form
135+NEW ir.ui.view: point_of_sale.view_pos_config_search
136+NEW ir.ui.view: point_of_sale.view_pos_config_tree
137+NEW ir.ui.view: point_of_sale.view_pos_session_form
138+NEW ir.ui.view: point_of_sale.view_pos_session_search
139+NEW ir.ui.view: point_of_sale.view_pos_session_tree
140+DEL ir.ui.view: point_of_sale.product_normal_form_pos_view
141+DEL ir.ui.view: point_of_sale.view_box_entries
142+DEL ir.ui.view: point_of_sale.view_pos_box_out
143+DEL ir.ui.view: point_of_sale.view_pos_close_statement
144+DEL ir.ui.view: point_of_sale.view_report_cash_register_search
145+DEL ir.ui.view: point_of_sale.view_report_cash_register_tree
146+
147+### Ignore new sequence records
148+NEW ir.sequence: point_of_sale.seq_pos_session
149+NEW ir.sequence.type: point_of_sale.seq_type_pos_session
150+
151+### Ignore added chatter configuration
152+NEW mail.message: point_of_sale.module_install_notification
153+
154+### New pos_config. script migration will set it in a obsolete state.
155+NEW pos.config: point_of_sale.pos_config_main
156+
157+### New product. Nothing to do.
158+NEW product.product: point_of_sale.unreferenced_product
159+
160+### Completely new workflow for 'pos.dession'. Nothing to do.
161+NEW workflow: point_of_sale.wkf_pos_session
162+NEW workflow.activity: point_of_sale.act_close
163+NEW workflow.activity: point_of_sale.act_closing_control
164+NEW workflow.activity: point_of_sale.act_open
165+NEW workflow.activity: point_of_sale.act_opening_control
166+NEW workflow.activity: point_of_sale.act_start
167+NEW workflow.transition: point_of_sale.trans_closing_control_to_close
168+NEW workflow.transition: point_of_sale.trans_closing_control_to_close_no_control
169+NEW workflow.transition: point_of_sale.trans_open_to_close
170+NEW workflow.transition: point_of_sale.trans_open_to_closing_control
171+NEW workflow.transition: point_of_sale.trans_opening_control_to_open
172+NEW workflow.transition: point_of_sale.trans_start_to_open
173+NEW workflow.transition: point_of_sale.trans_start_to_opening_control
174
175=== added file 'point_of_sale/migrations/7.0.1.0.1/post-migration.py'
176--- point_of_sale/migrations/7.0.1.0.1/post-migration.py 1970-01-01 00:00:00 +0000
177+++ point_of_sale/migrations/7.0.1.0.1/post-migration.py 2013-10-14 23:49:02 +0000
178@@ -0,0 +1,180 @@
179+# -*- coding: utf-8 -*-
180+##############################################################################
181+#
182+# OpenERP, Open Source Management Solution
183+# This module copyright (C) 2013 Sylvain LE GAL
184+#
185+# This program is free software: you can redistribute it and/or modify
186+# it under the terms of the GNU Affero General Public License as
187+# published by the Free Software Foundation, either version 3 of the
188+# License, or (at your option) any later version.
189+#
190+# This program is distributed in the hope that it will be useful,
191+# but WITHOUT ANY WARRANTY; without even the implied warranty of
192+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
193+# GNU Affero General Public License for more details.
194+#
195+# You should have received a copy of the GNU Affero General Public License
196+# along with this program. If not, see <http://www.gnu.org/licenses/>.
197+#
198+##############################################################################
199+from openerp import pooler, SUPERUSER_ID
200+from openerp.openupgrade import openupgrade, openupgrade_70
201+
202+def migrate_product_available_in_pos(cr, pool):
203+ """
204+ Initialize product that available_in_pos, using old behaviour of
205+ 6.1 version. (In 6.1, product with pos_categ_id set are available in pos)
206+ """
207+ cr.execute("""UPDATE product_product
208+ SET available_in_pos = True
209+ WHERE pos_categ_id is not Null""")
210+
211+def migrate_product_to_weight(cr, pool):
212+ """
213+ Initialize product_to_weight value in 'product.product', assuming that
214+ product that have an uom weightable will be 'product_to_weight'.
215+ """
216+ product_product_obj = pool.get('product.product')
217+ uom_categ, uom_categ_id = pool.get('ir.model.data').get_object_reference(
218+ cr, SUPERUSER_ID, 'product', 'product_uom_categ_kgm')
219+ uom_ids = pool.get('product.uom').search(cr, SUPERUSER_ID,
220+ [('category_id', '=', uom_categ_id)])
221+ product_ids = product_product_obj.search(cr, SUPERUSER_ID,
222+ [('uom_id', 'in', uom_ids)])
223+ product_product_obj.write(cr, SUPERUSER_ID,
224+ product_ids,
225+ {'to_weight' : True,})
226+
227+def create_pos_config(cr, pool):
228+ """
229+ pos_config is totally new concept.
230+ Script migration will create pos_config based on datas in point_of_sale (6.1)
231+ (One pos_config by shop and sale_journal in 6.1.)
232+ Script migration will create too on pos_config by sale user because it's not
233+ possible to create 2 pos.session active with the same 'pos.config'.
234+ """
235+ pos_config_obj = pool.get('pos.config')
236+ shop_obj = pool.get('sale.shop')
237+ journal_obj = pool.get('account.journal')
238+ user_obj = pool.get('res.users')
239+ pos_session_obj = pool.get('pos.session')
240+ pos_order_obj = pool.get('pos.order')
241+ # Create a pos config by shop, and sale_journal
242+ cr.execute("""
243+ SELECT shop_id, sale_journal sale_journal_id, user_id
244+ FROM pos_order
245+ GROUP BY shop_id, sale_journal, user_id;""")
246+
247+ for shop_id, sale_journal_id, user_id in cr.fetchall():
248+ # Generate a readable name
249+ name = shop_obj.read(cr, SUPERUSER_ID, [shop_id], ['name'])[0]['name']
250+ name += " - " + journal_obj.read(cr, SUPERUSER_ID, [sale_journal_id], ['code'])[0]['code']
251+ name += " - " + user_obj.read(cr, SUPERUSER_ID, [user_id], ['login'])[0]['login']
252+
253+ # Get the bank_journal related to new pos_config, using the history of pos_orders.
254+ cr.execute("""
255+ SELECT abs.journal_id bank_journal_id
256+ FROM account_bank_statement_line absl
257+ INNER JOIN account_bank_statement abs ON abs.id = absl.statement_id
258+ INNER JOIN pos_order po ON absl.pos_statement_id= po.id
259+ WHERE po.shop_id = {0} and po.sale_journal = {1}
260+ GROUP BY abs.journal_id; """.format(shop_id, sale_journal_id))
261+
262+ bank_journal_ids = []
263+ for bank_journal_id in cr.fetchall():
264+ bank_journal_ids.append(bank_journal_id[0])
265+ pos_config_id = pos_config_obj.create(cr, SUPERUSER_ID, {
266+ 'name' : name,
267+ 'journal_id': sale_journal_id,
268+ 'shop_id': shop_id,
269+ 'journal_ids' : [(6,0,bank_journal_ids)],
270+ })
271+
272+ # associate user to new pos_config.
273+ user_obj.write(cr, SUPERUSER_ID, [user_id], {'pos_config' : pos_config_id})
274+
275+ # Get all statement_id associated to a pos.session.
276+ cr.execute("""
277+ SELECT absl.statement_id from account_bank_statement_line absl
278+ INNER JOIN pos_order po on po.id = absl.pos_statement_id
279+ WHERE po.shop_id={0} AND po.user_id={1} AND po.sale_journal={2}
280+ GROUP BY absl.statement_id;
281+ """.format(shop_id, sale_journal_id, user_id))
282+ statement_ids = []
283+ for statement_id in cr.fetchall():
284+ statement_ids.append(statement_id[0])
285+
286+ # create pos session by sql, to avoid automatic creation of account bank statement
287+ # and other behaviours not wished
288+ cr.execute("""
289+ INSERT INTO pos_session(
290+ create_uid, create_date, write_uid, write_date,
291+ config_id, user_id, name, state,
292+ start_at, stop_at, cash_journal_id, cash_register_id
293+ )
294+ VALUES (
295+ {0}, {1}, {0}, {1},
296+ {2}, {0}, '{3}', 'closed',
297+ Null, Null, Null, Null)
298+ RETURNING id;
299+ """.format(user_id,
300+ "(now() at time zone 'UTC')",
301+ pos_config_id,
302+ name.encode('utf-8').strip(),
303+ ))
304+ pos_session_id = cr.fetchone()[0]
305+ if statement_ids !=[]:
306+ #import pdb; pdb.set_trace()
307+ for sub_ids in cr.split_for_in_conditions(statement_ids):
308+ cr.execute("""
309+ UPDATE account_bank_statement
310+ SET pos_session_id = %s
311+ WHERE id in %%s
312+ """ % (pos_session_id), [tuple(sub_ids)])
313+# pos_session_id = pos_session_obj.create(cr, SUPERUSER_ID, {
314+# 'config_id' : pos_config_id,
315+# 'start_at' : None,
316+# 'state' : 'closed',
317+# 'statement_ids' : [(6,0,statement_ids)],
318+# 'stop_at' : None,
319+# 'user_id' : user_id,
320+# })
321+
322+ # associate pos.order to the new pos.session
323+ cr.execute("""
324+ UPDATE pos_order
325+ SET session_id={3}
326+ WHERE shop_id={0} AND sale_journal={1} AND user_id={2};
327+ """.format(shop_id, sale_journal_id, user_id, pos_session_id))
328+
329+# cr.execute("""
330+# SELECT id
331+# FROM pos_order
332+# WHERE shop_id={0} AND sale_journal={1} AND user_id={2};
333+# """.format(shop_id, sale_journal_id, user_id))
334+# pos_order_ids = []
335+# for pos_order_id in cr.fetchall():
336+# pos_order_ids.append(pos_order_id[0])
337+#
338+# pos_order_obj.write(cr, SUPERUSER_ID, pos_order_ids, {'session_id' : pos_session_id})
339+
340+def disable_default_pos_config(cr, pool):
341+ pass
342+ pos_config, pos_config_id = pool.get('ir.model.data').get_object_reference(
343+ cr, SUPERUSER_ID, 'point_of_sale', 'pos_config_main')
344+ pool.get('pos.config').write(cr, SUPERUSER_ID,
345+ [pos_config_id],
346+ {'state' : 'inactive'})
347+
348+
349+@openupgrade.migrate()
350+def migrate(cr, version):
351+ pool = pooler.get_pool(cr.dbname)
352+ migrate_product_available_in_pos(cr, pool)
353+ migrate_product_to_weight(cr, pool)
354+ # create new pos_config
355+ create_pos_config(cr, pool)
356+
357+ # disable old default pos_config
358+ disable_default_pos_config(cr, pool)
359
360=== added file 'point_of_sale/migrations/7.0.1.0.1/pre-migration.py'
361--- point_of_sale/migrations/7.0.1.0.1/pre-migration.py 1970-01-01 00:00:00 +0000
362+++ point_of_sale/migrations/7.0.1.0.1/pre-migration.py 2013-10-14 23:49:02 +0000
363@@ -0,0 +1,34 @@
364+# -*- coding: utf-8 -*-
365+##############################################################################
366+#
367+# OpenERP, Open Source Management Solution
368+# This module copyright (C) 2013 Sylvain LE GAL
369+#
370+# This program is free software: you can redistribute it and/or modify
371+# it under the terms of the GNU Affero General Public License as
372+# published by the Free Software Foundation, either version 3 of the
373+# License, or (at your option) any later version.
374+#
375+# This program is distributed in the hope that it will be useful,
376+# but WITHOUT ANY WARRANTY; without even the implied warranty of
377+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
378+# GNU Affero General Public License for more details.
379+#
380+# You should have received a copy of the GNU Affero General Public License
381+# along with this program. If not, see <http://www.gnu.org/licenses/>.
382+#
383+##############################################################################
384+
385+from openerp.openupgrade import openupgrade
386+
387+column_renames = {
388+}
389+
390+xmlid_renames = [
391+]
392+
393+
394+@openupgrade.migrate()
395+def migrate(cr, version):
396+ openupgrade.rename_columns(cr, column_renames)
397+ openupgrade.rename_xmlids(cr, xmlid_renames)
398
399=== added file 'point_of_sale/migrations/7.0.1.0.1/user_notes.txt'
400--- point_of_sale/migrations/7.0.1.0.1/user_notes.txt 1970-01-01 00:00:00 +0000
401+++ point_of_sale/migrations/7.0.1.0.1/user_notes.txt 2013-10-14 23:49:02 +0000
402@@ -0,0 +1,14 @@
403+Point of Sale V7 change the behaviour of the close of bank_statement.
404+It's not possible in V7 to close a session if there is some unpaid pos order in the session.
405+
406+
407+Point of sale V7 is very different. So The script migration will assume that
408+The users have used the point of sale V6.1 like a point of sale V7. Specially for the following things :
409+- a user can not sale (use a pos.config) if the pos.config is in use by an other user.
410+So script migration will create a pos.config for each sale user.
411+
412+-
413+
414+WARNING : standart V7 doesn't allow to close a pos.session (and so associated account.bank.statement) if a pos.order is not paid in the pos.session.
415+
416+

Subscribers

People subscribed via source and target branches