From: Ludovic CHEVALIER Date: Mon, 22 Jan 2018 13:58:53 +0000 (+0100) Subject: [PYTHON][VIEW] +nrt is optionnal for each pos X-Git-Url: http://git.cyclocoop.org/?p=burette%2Fnrt_point_of_sale.git;a=commitdiff_plain;h=b6c312e573108932211f89ba69b50c517444262d [PYTHON][VIEW] +nrt is optionnal for each pos --- diff --git a/account_cash_statement.py b/account_cash_statement.py index c4155e3..1b2faec 100644 --- a/account_cash_statement.py +++ b/account_cash_statement.py @@ -35,11 +35,11 @@ class account_cash_statement(orm.Model): """ Put same closing date for account_bank_statement as pos session start_at date. """ - self.pool.get('pos.session') res = super(account_cash_statement, self).button_confirm_cash(cr, uid, ids, context=context) for statement in self.browse(cr, uid, ids, context=context): if statement.pos_session_id: - return self.write(cr, uid, [statement.id], {'closing_date': statement.pos_session_id.start_at}, context=context) + if statement.pos_session_id.config_id.nrt: + return self.write(cr, uid, [statement.id], {'closing_date': statement.pos_session_id.start_at}, context=context) return res # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/i18n/fr.po b/i18n/fr.po index 2f447bf..747fc8b 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -6,21 +6,22 @@ msgid "" msgstr "" "Project-Id-Version: OpenERP Server 7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-06-27 12:07+0200\n" -"PO-Revision-Date: 2016-06-27 12:07+0200\n" +"POT-Creation-Date: 2018-01-22 13:54+0000\n" +"PO-Revision-Date: 2018-01-22 14:56+0100\n" +"Last-Translator: Ludovic CHEVALIER \n" "Language-Team: \n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 1.8.8\n" -"Last-Translator: Ludovic CHEVALIER \n" -"Language: fr\n" +"X-Generator: Poedit 2.0.5\n" #. module: nrt_point_of_sale -#: view:pos.session:0 -msgid "Date" -msgstr "Date" +#: field:pos.config,nrt:0 +msgid "Non-real time" +msgstr "En différé" #. module: nrt_point_of_sale #: model:ir.model,name:nrt_point_of_sale.model_pos_session @@ -28,11 +29,64 @@ msgid "pos.session" msgstr "pos.session" #. module: nrt_point_of_sale -#: model:ir.model,name:nrt_point_of_sale.model_pos_order -msgid "Point of Sale" -msgstr "Point de vente" +#: help:pos.config,nrt:0 +msgid "" +"This pos move lines will be based on the session opening if this box is " +"checked. This field is readonly if the point of sale is already in use." +msgstr "" +"Ces imputations du point de vente seront basées sur l'ouverture de la " +"session si cette case est cochée. Ce champs est en lecture seule si le " +"point de vente est déjà en cours d'utilisation." + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_cash_box_out +msgid "cash.box.out" +msgstr "" #. module: nrt_point_of_sale #: view:pos.order:0 msgid "onchange_session_id(session_id, context)" msgstr "onchange_session_id(session_id, context)" + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_account_bank_statement +msgid "Bank Statement" +msgstr "Relevé bancaire" + +#. module: nrt_point_of_sale +#: field:pos.session,is_nrt_pos:0 +msgid "Is this session linked to a nrt pos?" +msgstr "" +"Est-ce que cette session est reliée à un point de vente en différé?" + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_pos_config +msgid "pos.config" +msgstr "" + +#. module: nrt_point_of_sale +#: view:pos.session:0 +#, fuzzy +#| msgid "onchange_session_id(session_id, context)" +msgid "onchange_config_id(config_id)" +msgstr "onchange_session_id(session_id, context)" + +#. module: nrt_point_of_sale +#: view:pos.session:0 +msgid "Date" +msgstr "Date" + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_pos_order +msgid "Point of Sale" +msgstr "Point de vente" + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_cash_box_in +msgid "cash.box.in" +msgstr "" + +#. module: nrt_point_of_sale +#: field:pos.config,is_pos_used:0 +msgid "Is this pos in used?" +msgstr "Ce point de vente est t-il en cours d'utilisation?" diff --git a/i18n/nrt_point_of_sale.pot b/i18n/nrt_point_of_sale.pot index 40a437e..24a7c6e 100644 --- a/i18n/nrt_point_of_sale.pot +++ b/i18n/nrt_point_of_sale.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: OpenERP Server 7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-06-27 10:05+0000\n" -"PO-Revision-Date: 2016-06-27 10:05+0000\n" +"POT-Creation-Date: 2018-01-22 13:54+0000\n" +"PO-Revision-Date: 2018-01-22 13:54+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,8 +16,8 @@ msgstr "" "Plural-Forms: \n" #. module: nrt_point_of_sale -#: view:pos.session:0 -msgid "Date" +#: field:pos.config,nrt:0 +msgid "Non-real time" msgstr "" #. module: nrt_point_of_sale @@ -26,8 +26,13 @@ msgid "pos.session" msgstr "" #. module: nrt_point_of_sale -#: model:ir.model,name:nrt_point_of_sale.model_pos_order -msgid "Point of Sale" +#: help:pos.config,nrt:0 +msgid "This pos move lines will be based on the session opening if this box is checked. This field is readonly if the point of sale is already in use." +msgstr "" + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_cash_box_out +msgid "cash.box.out" msgstr "" #. module: nrt_point_of_sale @@ -35,3 +40,43 @@ msgstr "" msgid "onchange_session_id(session_id, context)" msgstr "" +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_account_bank_statement +msgid "Bank Statement" +msgstr "" + +#. module: nrt_point_of_sale +#: field:pos.session,is_nrt_pos:0 +msgid "Is this session linked to a nrt pos?" +msgstr "" + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_pos_config +msgid "pos.config" +msgstr "" + +#. module: nrt_point_of_sale +#: view:pos.session:0 +msgid "onchange_config_id(config_id)" +msgstr "" + +#. module: nrt_point_of_sale +#: view:pos.session:0 +msgid "Date" +msgstr "" + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_pos_order +msgid "Point of Sale" +msgstr "" + +#. module: nrt_point_of_sale +#: model:ir.model,name:nrt_point_of_sale.model_cash_box_in +msgid "cash.box.in" +msgstr "" + +#. module: nrt_point_of_sale +#: field:pos.config,is_pos_used:0 +msgid "Is this pos in used?" +msgstr "" + diff --git a/point_of_sale.py b/point_of_sale.py index dcfb14e..82144c0 100644 --- a/point_of_sale.py +++ b/point_of_sale.py @@ -26,14 +26,85 @@ from openerp.osv import osv from openerp.osv import orm from openerp.osv import fields +from time import strftime +import openerp.exceptions +from openerp.tools.translate import _ + + +class pos_config(orm.Model): + _inherit = 'pos.config' + + def _is_pos_used(self, cr, uid, ids, name, args, context=None): + """Return True if the pos is already in use.""" + res = {} + session_obj = self.pool.get('pos.session') + for id in ids: + sessions = session_obj.search(cr, uid, [('config_id', 'in', ids),('state', '!=', 'closed')], context=context) + if sessions: + res[id] = True + else: + res[id] = False + return res + + _columns = { + 'nrt': fields.boolean('Non-real time', help='This pos move lines will '\ + 'be based on the session opening if this box is '\ + 'checked. This field is readonly if the point of '\ + 'sale is already in use.'), + 'is_pos_used': fields.function(_is_pos_used, + method=True, + string='Is this pos in used?', + type='boolean', + store=False), + } + + _defaults = { + 'nrt': lambda *a: True, + } class pos_session(orm.Model): _inherit = 'pos.session' + def onchange_config_id(self, cr, uid, ids, config_id, context=None): + """Return is_nrt_pos and start_at date when config_id field changes.""" + config_obj = self.pool.get('pos.config') + config = config_obj.browse(cr, uid, config_id, context=context) + start_at = strftime('%Y-%m-%d %H:%M:%S') + is_nrt_pos = False + + if config.nrt: + is_nrt_pos = True + return {'value': + { + 'start_at': start_at, + 'is_nrt_pos': is_nrt_pos, + } + } + + def _is_nrt_pos(self, cr, uid, ids, name, args, context=None): + """Return True if the current session refers to a nrt pos.""" + res = {} + sessions = self.browse(cr, uid, ids, context=context) + config_obj = self.pool.get('pos.config') + for session in sessions: + res[session.id] = False + if session.config_id.nrt: + res[session.id] = True + return res + _columns = { 'start_at': fields.datetime('Opening date'), 'stop_at': fields.datetime('Closing date'), + 'is_nrt_pos': fields.function(_is_nrt_pos, + method=True, + string='Is this session linked to a nrt pos?', + type='boolean', + store=False,), + } + + _defaults = { + 'start_at': strftime('%Y-%m-%d %H:%M:%S'), } def create(self, cr, uid, values, context=None): @@ -49,9 +120,10 @@ class pos_session(orm.Model): id = super(pos_session, self).create(cr, uid, values, context=context) for session in self.browse(cr, uid, [id], context=context): default_date = session.start_at - bank_st_ids = bank_st_obj.search(cr, uid, [('pos_session_id', '=', id)], context=context) - period = period_obj.find(cr, uid, dt=default_date, context=dict(context or {}, account_period_prefer_normal=True))[0] - bank_st_obj.write(cr, uid, bank_st_ids, {'date': default_date, 'period_id': period}, context=context) + if session.config_id.nrt: + bank_st_ids = bank_st_obj.search(cr, uid, [('pos_session_id', '=', id)], context=context) + period = period_obj.find(cr, uid, dt=default_date, context=dict(context or {}, account_period_prefer_normal=True))[0] + bank_st_obj.write(cr, uid, bank_st_ids, {'date': default_date, 'period_id': period}, context=context) return id def _confirm_orders(self, cr, uid, ids, context=None): @@ -62,18 +134,18 @@ class pos_session(orm.Model): super(pos_session, self)._confirm_orders(cr, uid, ids, context=context) for session in self.browse(cr, uid, ids, context=context): - account_move_ids = [] - order_ids = [order.id for order in session.order_ids if order.state == 'done'] - if order_ids: - company_id = order_obj.browse(cr, uid, order_ids, context=context)[0].company_id.id - else: - company_id = self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0].company_id.id - for order in order_obj.browse(cr, uid, order_ids, context=context): - if order.account_move.id not in account_move_ids: - account_move_ids.append(order.account_move.id) - period = period_obj.find(cr, uid, dt=session.start_at, context=dict(context or {}, company_id=company_id, account_period_prefer_normal=True))[0] - account_move_obj.write(cr, uid, account_move_ids, {'date': session.start_at, 'period_id': period}, context=context) - + if session.config_id.nrt: + account_move_ids = [] + order_ids = [order.id for order in session.order_ids if order.state == 'done'] + if order_ids: + company_id = order_obj.browse(cr, uid, order_ids, context=context)[0].company_id.id + else: + company_id = self.pool.get('res.users').browse(cr, uid, [uid], context=context)[0].company_id.id + for order in order_obj.browse(cr, uid, order_ids, context=context): + if order.account_move.id not in account_move_ids: + account_move_ids.append(order.account_move.id) + period = period_obj.find(cr, uid, dt=session.start_at, context=dict(context or {}, company_id=company_id, account_period_prefer_normal=True))[0] + account_move_obj.write(cr, uid, account_move_ids, {'date': session.start_at, 'period_id': period}, context=context) return True def wkf_action_closing_control(self, cr, uid, ids, context=None): @@ -82,7 +154,8 @@ class pos_session(orm.Model): """ res = super(pos_session, self).wkf_action_closing_control(cr, uid, ids, context=context) for session in self.browse(cr, uid, ids, context=context): - self.write(cr, uid, [session.id], {'stop_at': session.start_at}, context=context) + if session.config_id.nrt: + self.write(cr, uid, [session.id], {'stop_at': session.start_at}, context=context) return res def onchange_start_at(self, cr, uid, ids, start_at, context=None): @@ -91,38 +164,41 @@ class pos_session(orm.Model): return {'value': {'stop_at': start_at}} else: for session in self.browse(cr, uid, ids, context=context): - return {'value': {'stop_at': start_at}} + if session.config_id.nrt: + return {'value': {'stop_at': start_at}} class pos_order(orm.Model): _inherit = 'pos.order' def create(self, cr, uid, vals, context=None): - session_obj = self.pool.get('pos.session') - vals.update({'date_order': session_obj.browse(cr, uid, vals['session_id'], context=context).start_at}) + session = self.pool.get('pos.session').browse(cr, uid, vals['session_id'], context=context) + if session.config_id.nrt: + vals.update({'date_order': session.start_at}) res = super(pos_order, self).create(cr, uid, vals, context=context) return res - def write(self, cr, uid, ids, vals, context=None): - session_obj = self.pool.get('pos.session') for order in self.browse(cr, uid, ids, context=context): - default_date_order = order.session_id.start_at - vals.update({'date_order': default_date_order}) + if order.session_id.config_id.nrt: + default_date_order = order.session_id.start_at + vals.update({'date_order': default_date_order}) res = super(pos_order, self).write(cr, uid, ids, vals, context=context) return res def onchange_session_id(self, cr, uid, ids, session_id, context=None): """Define date order by start date of current session""" - res_obj = self.pool.get('pos.session') - data = {} + session_obj = self.pool.get('pos.session') + default_date_order = strftime('%Y-%m-%d %H:%M:%S') + if not session_id: - return {'value': data} + return {'value': {}} else: - for session in res_obj.browse(cr, uid, [session_id], + for session in session_obj.browse(cr, uid, [session_id], context=context): - default_date_order = session.start_at - return {'value': {'date_order': default_date_order}} + if session.config_id.nrt: + default_date_order = session.start_at + return {'value': {'date_order': default_date_order}} def add_payment(self, cr, uid, order_id, data, context=None): """Define payment date by the order date""" @@ -130,11 +206,13 @@ class pos_order(orm.Model): statement_ids = [] order = self.browse(cr, uid, [order_id], context=context)[0] date_order = order.date_order + super(pos_order, self).add_payment(cr, uid, order_id, data, context=context) - for statement in order.statement_ids: - statement_ids.append(statement.id) - statement_obj.write(cr, uid, statement_ids, {'date': date_order}, context=context) + if order.session_id.config_id.nrt: + for statement in order.statement_ids: + statement_ids.append(statement.id) + statement_obj.write(cr, uid, statement_ids, {'date': date_order}, context=context) return order_id # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/view/point_of_sale.xml b/view/point_of_sale.xml index 9dd2fdd..14ba782 100644 --- a/view/point_of_sale.xml +++ b/view/point_of_sale.xml @@ -1,13 +1,40 @@ + + pos.config.form + pos.config + + + + + + + + + + pos.config.tree + pos.config + + + + + + + pos.session.form pos.session + + onchange_config_id(config_id) + + + + - +