[PYTHON][VIEW] +nrt is optionnal for each pos
authorLudovic CHEVALIER <ludovic.chevalier@heureux-cyclage.org>
Mon, 22 Jan 2018 13:58:53 +0000 (14:58 +0100)
committerLudovic CHEVALIER <ludovic.chevalier@heureux-cyclage.org>
Mon, 22 Jan 2018 13:58:53 +0000 (14:58 +0100)
account_cash_statement.py
i18n/fr.po
i18n/nrt_point_of_sale.pot
point_of_sale.py
view/point_of_sale.xml

index c4155e3..1b2faec 100644 (file)
@@ -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:
index 2f447bf..747fc8b 100644 (file)
@@ -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 <ludovic.chevalier@heureux-cyclage."
+"org>\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 <ludovic.chevalier@heureux-cyclage.org>\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?"
index 40a437e..24a7c6e 100644 (file)
@@ -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 ""
+
index dcfb14e..82144c0 100644 (file)
 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:
index 9dd2fdd..14ba782 100644 (file)
@@ -1,13 +1,40 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <openerp>
     <data>
+        <record id="view_pos_config_form" model="ir.ui.view">
+            <field name="name">pos.config.form</field>
+            <field name="model">pos.config</field>
+            <field name="inherit_id" ref="point_of_sale.view_pos_config_form"/>
+            <field name="arch" type="xml">
+                <xpath expr="//field[@name='group_by']" position="after">
+                    <field name="is_pos_used" invisible="1"/>
+                    <field name="nrt" attrs="{'readonly': [('is_pos_used','=', True)]}"/>
+                </xpath>
+            </field>
+        </record>
+        <record id="view_pos_config_tree" model="ir.ui.view">
+            <field name="name">pos.config.tree</field>
+            <field name="model">pos.config</field>
+            <field name="inherit_id" ref="point_of_sale.view_pos_config_tree"/>
+            <field name="arch" type="xml">
+                <xpath expr="//field[@name='shop_id']" position="after">
+                    <field name="nrt"/>
+                </xpath>
+            </field>
+        </record>
         <record id="view_pos_session_form" model="ir.ui.view">
             <field name="name">pos.session.form</field>
             <field name="model">pos.session</field>
             <field name="inherit_id" ref="point_of_sale.view_pos_session_form"/>
             <field name="arch" type="xml">
+                <xpath expr="//field[@name='config_id']" position="attributes">
+                    <attribute name="on_change">onchange_config_id(config_id)</attribute>
+                </xpath>
+                <xpath expr="//field[@name='start_at']" position="before">
+                    <field name="is_nrt_pos" invisible="1"/>
+                </xpath>
                 <xpath expr="//field[@name='start_at']" position="replace">
-                    <field name="start_at" required="1" string="Date" on_change="onchange_start_at(start_at, context)" attrs="{'readonly': [('state','!=', 'opening_control')]}"/>
+                    <field name="start_at" required="1" string="Date" on_change="onchange_start_at(start_at, context)" attrs="{'readonly': ['|', ('state','!=', 'opening_control'), ('is_nrt_pos', '!=', True)]}"/>
                 </xpath>
                 <xpath expr="//field[@name='stop_at']" position="replace">
                     <field name="stop_at" required="1" invisible="1"/>