[IMP] point_of_sale, hw_scale: various small fixes and improvements for the scale...
[odoo/odoo.git] / addons / point_of_sale / point_of_sale_view.xml
index ef7f0fe..15d2dc6 100644 (file)
@@ -6,11 +6,7 @@
         <menuitem name="Point of Sale"
             id="menu_point_root"
             groups="group_pos_manager,group_pos_user"
-            sequence="140"/>
-
-        <record id="categ_others" model="pos.category">
-            <field name="name">Others</field>
-        </record>
+            sequence="30"/>
 
         <record model="ir.ui.view" id="view_pos_pos_form">
             <field name="name">pos.order</field>
@@ -30,7 +26,7 @@
                         <field name="name"/>
                         <field name="date_order"/>
                         <field name="session_id" required="1"/>
-                        <field name="partner_id" on_change="onchange_partner_id(partner_id)" context="{'search_default_customer':1}" attrs="{'readonly': [('state','=','invoiced')]}"/>
+                        <field name="partner_id" on_change="onchange_partner_id(partner_id, context)" context="{'search_default_customer':1}" attrs="{'readonly': [('state','=','invoiced')]}"/>
                     </group>
                     <notebook colspan="4">
                         <page string="Products">
@@ -60,7 +56,7 @@
                                 <div class="oe_subtotal_footer_separator oe_inline">
                                     <label for="amount_total" />
                                     <button name="button_dummy"
-                                        states="draft" string="(update)" type="object" class="oe_edit_only oe_link"/>
+                                        states="draft" string="(update)" class="oe_edit_only oe_link"/>
                                 </div>
                                 <field name="amount_total" nolabel="1" class="oe_subtotal_footer_separator"/>
                             </group>
                         <page string="Extra Info">
                             <group string="General Information">
                                 <field name="company_id" groups="base.group_multi_company"/>
-                                <field name="shop_id" widget="selection"/>
-                                <field name="user_id"/>
+                                <field name="warehouse_id" widget="selection" groups="stock.group_locations"/>
+                                <field name="user_id" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'point_of_sale.group_pos_user']}"/>
                                 <field name="pricelist_id" groups="product.group_sale_pricelist" domain="[('type','=','sale')]"/>
                                 <field name="picking_id" readonly="1"/>
+                                <field name="pos_reference"/>
                             </group>
                             <group string="Accounting Information">
                                 <field name="sale_journal" domain="[('type','=','sale')]"/>
               <p class="oe_view_nocontent_create">
                 Click to create a new order.
               </p><p>
-                Use this menu to browse your preceeding orders. To record new
-                orders, you should better use the menu <i>Your Session</i> for
+                Use this menu to browse previous orders. To record new
+                orders, you may use the menu <i>Your Session</i> for
                 the touchscreen interface.
               </p>
             </field>
             <field name="arch" type="xml">
                 <tree string="POS Orders" colors="blue:state == 'draft';gray:state in ('done','cancel');black:state not in('done','cancel')">
                     <field name="name"/>
+                    <field name="pos_reference"/>
                     <field name="partner_id"/>
                     <field name="date_order"/>
                     <field name="user_id"/>
                 <search string="Search Sales Order">
                     <field name="name" string="Sales Order"/>
                     <field name="date_order"/>
+                    <field name="pos_reference"/>
                     <filter icon="terp-document-new" string="New" domain="[('state','=','draft')]"/>
                     <filter icon="gtk-apply" string="Done" domain="[('state','in',('paid','invoiced','done'))]"/>
                     <filter icon="terp-check" string="Invoiced" domain="[('state','=','invoiced')]"/>
                         <filter string="Customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
                         <filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
                         <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
-                        <filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
+                        <filter string="Order Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
                     </group>
                 </search>
             </field>
             <field name="res_model">product.product</field>
             <field name="view_type">form</field>
             <field name="view_mode">tree,form,kanban</field>
-            <field name="context" eval="{'default_pos_categ_id': ref('point_of_sale.categ_others')}"/>
-            <field name="domain" eval="[('pos_categ_id','&lt;&gt;',False)]"/>
+            <field name="context" eval="{}"/>
+            <field name="domain" eval="[('available_in_pos','&lt;&gt;',False)]"/>
             <field name="view_id" ref="product.product_product_tree_view"/>
             <field name="search_view_id" ref="product.product_search_form_view"/>
             <field name="help" type="html">
             <field name="domain">[('date_order','like',time.strftime('%Y-%m'))]</field>
         </record>
 
-        <record id="product_normal_form_pos_view" model="ir.ui.view">
-            <field name="name">product.normal.pos.form.inherit</field>
-            <field name="model">product.product</field>
-            <field name="inherit_id" ref="product.product_normal_form_view"/>
-            <field name="arch" type="xml">
-                  <group name="status" position="after">
-                      <group name="pos" string="Point of Sale">
-                          <field name="pos_categ_id"/>
-                          <field name="to_weight" />
-                      </group>
-                  </group>
-            </field>
-        </record>
-
-
         <record id="product_normal_form_view" model="ir.ui.view">
             <field name="name">product.normal.form.inherit</field>
             <field name="model">product.product</field>
             <field name="inherit_id" ref="stock.view_normal_procurement_locations_form"/>
             <field name="arch" type="xml">
-                <group name="misc" position="after">
-                    <group name="pos" colspan="2" col="2">
-                        <separator string="Point of Sale" colspan="2"/>
+                <group name="sale" position="inside">
+                    <group name="pos" string="Point of Sale">
+                        <field name="available_in_pos"/>
+                        <field name="to_weight" />
                         <field name="income_pdt"/>
                         <field name="expense_pdt"/>
                     </group>
                 </group>
                 <field name="ean13" position="after">
-                    <button name="edit_ean" type="object" string="Edit" />
+                    <button name="edit_ean" type="object" string="Set a Custom EAN" class="oe_link oe_edit_only"/>
                 </field>
             </field>
         </record>
 
         <!-- Categories tree view -->
-        <record id="pos_category_form_view" model="ir.ui.view">
-            <field name="name">pos.category.form</field>
-            <field name="model">pos.category</field>
-            <field name="arch" type="xml">
-                <form string="Product PoS Categories" version="7.0">
-                    <sheet>
-                        <field name="image_medium" widget='image' class="oe_avatar oe_right"/>
-                        <div class="oe_left">
-                            <group>
-                                <field name="name"/>
-                                <field name="parent_id"/>
-                                <field name="sequence"/>
-                            </group>
-                        </div>
-                    </sheet>
-                </form>
-            </field>
-        </record>
-        <record id="pos_category_tree_view" model="ir.ui.view">
-            <field name="name">pos.category.tree</field>
-            <field name="model">pos.category</field>
-            <field name="field_parent" eval="False"/>
-            <field name="arch" type="xml">
-                <tree string="Product PoS Categories">
-                    <field name="sequence" invisible="1"/>
-                    <field name="complete_name"/>
-                </tree>
-            </field>
-        </record>
-        <record id="pos_category_action" model="ir.actions.act_window">
-            <field name="name">Product Categories</field>
-            <field name="type">ir.actions.act_window</field>
-            <field name="res_model">pos.category</field>
-            <field name="view_type">form</field>
-            <field name="view_mode">tree,form</field>
-            <field name="view_id" eval="False"/>
-            <field name="help" type="html">
-              <p class="oe_view_nocontent_create">
-                Click to define a new category.
-              </p><p>
-                Categories are used to browse your products through the
-                touchscreen interface.
-              </p><p>
-                If you put a photo on the category, the layout of the
-                touchscreen interface will automatically. We suggest not to put
-                a photo on categories for small (1024x768) screens.
-              </p>
-            </field>
-        </record>
-        <menuitem action="pos_category_action" id="menu_pos_category" parent="menu_point_of_sale_product" sequence="0" />
+        <menuitem action="product.product_public_category_action" id="menu_product_public_category" parent="menu_point_of_sale_product" sequence="0" />
         <!-- END -->
 
         <menuitem name="Configuration" parent="menu_point_root"
         <menuitem icon="STOCK_PRINT" action="action_report_pos_details"
                 id="menu_pos_details" parent="menu_point_rep" sequence="6" />
 
-        <record model="ir.actions.client" id="action_pos_pos">
+        <record model="ir.actions.act_url" id="action_pos_pos">
             <field name="name">Start Point of Sale</field>
-            <field name="tag">pos.ui</field>
+            <field name="url">/pos/web/</field>
+            <field name="target">self</field>
         </record>
 
         <!-- Top menu item -->
                     </header>
 
                     <sheet>
-                        <group>
-                        <field name="name"/>
-                        <field name="shop_id" widget="selection" groups="stock.group_locations" />
-                        <field name="journal_id" widget="selection" />
-                        <field name="sequence_id" readonly="1" groups="base.group_no_one" />
-                        <field name="group_by" groups="account.group_account_user"  />
+                        <label for="name" class="oe_edit_only"/>
+                        <h1>
+                            <field name="name"/>
+                        </h1>
+                        <group col="4">
+                            <field name="warehouse_id" widget="selection" groups="stock.group_locations" />
+                            <field name="pricelist_id" groups="product.group_sale_pricelist"/>
+                            <field name="currency_id" invisible="1"/>
+                            <field name="journal_id" widget="selection"/>
+                            <field name="group_by" groups="account.group_account_user"/>
+                            <field name="sequence_id" readonly="1" groups="base.group_no_one"/>
                         </group>
                         <separator string="Available Payment Methods" colspan="4"/>
                         <field name="journal_ids" colspan="4" nolabel="1">
                                 <field name="cash_control" />
                             </tree>
                         </field>
-                        <group string="Material Interfaces" >
+                        <group string="Features" >
                             <group>
-                                <field name="iface_self_checkout" />
-                                <field name="iface_cashdrawer" />
-                                <field name="iface_payment_terminal" />
+                                <field name="iface_vkeyboard" />
+                                <field name="iface_invoicing" />
                             </group>
                             <group>
-                                <field name="iface_electronic_scale" />
-                                <field name="iface_vkeyboard" />
-                                <field name="iface_print_via_proxy" />
+                                <field name="iface_big_scrollbars" />
                             </group>
                         </group>
+                        <group string="Hardware Proxy" >
+                            <field name="proxy_ip" />
+                            <field name="iface_print_via_proxy" />
+                            <field name="iface_scan_via_proxy" />
+                            <field name="iface_electronic_scale" />
+                            <field name="iface_cashdrawer" />
+                        </group>
+                        <group string="Receipt" >
+                            <field name="receipt_header" placeholder="A custom receipt header message"/>
+                            <field name="receipt_footer" placeholder="A custom receipt header footage"/>
+                        </group>
                     </sheet>
 
                 </form>
             <field name="arch" type="xml">
                 <tree string="Point of Sale Configuration" colors="grey:state == 'inactive'">
                     <field name="name" />
-                    <field name="shop_id" />
+                    <field name="warehouse_id" groups="stock.group_locations"/>
                     <field name="state" />
                 </tree>
             </field>
                     <field name="name" />
                     <filter string="Active" domain="[('state', '=', 'active')]" />
                     <filter string="Inactive" domain="[('state', '=', 'inactive')]" />
-                    <field name="shop_id" />
+                    <field name="warehouse_id" groups="stock.group_locations" />
                 </search>
             </field>
         </record>
             <field name="arch" type="xml">
                 <form string="Point of Sale Session" version="7.0">
                     <header>
-                        <button name="open" type="workflow" string="Validate &amp; Open Session" states="opening_control" class="oe_highlight"/>
+                        <button name="open_cb" type="object" string="Validate &amp; Open Session" states="opening_control" class="oe_highlight"/>
+                        <button name="open_frontend_cb" type="object" string="Continue Selling" states="opened"
+                            class="oe_highlight"/>
                         <button name="cashbox_control" type="workflow" string="End of Session"
                             attrs="{'invisible' : ['|', ('cash_control', '=', False),('state', '!=', 'opened')]}" 
                             class="oe_highlight" />
                             class="oe_highlight" />
                         <button name="close" type="workflow" string="Validate Closing &amp; Post Entries" states="closing_control"
                             class="oe_highlight" />
-                        <button name="open_frontend_cb" type="object" string="Continue Selling" states="opened"/>
-                        <div class="oe_right">
-                            <field name="state" widget="statusbar" statusbar_visible="opening_control,opened,closing_control,closed" nolabel="1" />
-                        </div>
+                        
+                        <field name="state" widget="statusbar" statusbar_visible="opening_control,opened,closing_control,closed" nolabel="1" />
+                        
                     </header>
                     <sheet>
                         <div class="oe_right oe_button_box">
                         <group>
                             <field name="cash_control" invisible="1" />
                             <group>
-                                <field name="user_id"/>
-                                <field name="config_id" attrs="{'invisible' : [('config_id', '&lt;&gt;', False)]}"/>
+                                <field name="user_id" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'point_of_sale.group_pos_manager', 'base.group_sale_manager']}"/>
+                                <field name="currency_id" invisible="1"/>
+                                <field name="config_id"/>
                             </group>
                             <group>
                                 <field name="start_at" attrs="{'invisible' : [('state', '=', 'opening_control')]}"/>
                                 <field name="stop_at" attrs="{'invisible' : [('state', '!=', 'closed')]}"/>
                             </group>
                             <newline/>
-
-                            <group string="Opening Cash Control" attrs="{'invisible' : ['|', ('cash_control', '=', False),('state', '=', 'closed')]}">
-                                <field name="opening_details_ids" nolabel="1" colspan="2" attrs="{'readonly' : [('state', 'not in', ('opening_control',))]}">
+                            <group string="Opening Cash Control" attrs="{'invisible' : [('cash_control', '=', False)]}">
+                                <field name="opening_details_ids" nolabel="1" colspan="2" attrs="{'readonly' : [('state', '!=', 'opening_control')]}">
                                     <tree string="Opening Cashbox Lines" editable="bottom">
                                         <field name="pieces" readonly="1" />
                                         <field name="number_opening" on_change="on_change_sub_opening(pieces, number_opening)" />
                                     </tree>
                                 </field>
                             </group>
-                            <group string="Closing Cash Control" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '!=', 'closing_control')]}">
-                                <field name="details_ids" nolabel="1" colspan="2">
+                            <group string="Closing Cash Control" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '=', 'opening_control')]}">
+                                <field name="details_ids" nolabel="1" colspan="2" attrs="{'readonly' : [('state', '=', 'closed')]}">
                                     <tree string="Cashbox Lines" editable="bottom">
                                         <field name="pieces" readonly="1" />
-                                        <field name="number_closing" />
-                                        <field name="subtotal_closing"/>
+                                        <field name="number_closing" on_change="on_change_sub_closing(pieces, number_closing)"/>
+                                        <field name="subtotal_closing" string="Closing Subtotal" sum="Total"/>
                                     </tree>
                                 </field>
                             </group>
 
-                            <div attrs="{'invisible': [('state', '=', 'closed')]}">
+                            <div attrs="{'invisible' : [('cash_control', '=', False)]}">
                                 <group class="oe_subtotal_footer oe_right">
-                                    <field name="cash_register_balance_start" readonly="1" string="Opening Balance" class="oe_subtotal_footer_separator"/>
-                                    <field name="cash_register_total_entry_encoding"  attrs="{'invisible' : [('state', '=', 'opening_control')]}" string="+ Transactions"/>
-                                    <field name="cash_register_balance_end" attrs="{'invisible' : [('state', '=', 'opening_control')]}" string="= Theorical Balance"/>
+                                    <field name="cash_register_balance_start" readonly="1" string="Opening Balance" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
+                                    <label for="cash_register_total_entry_encoding" attrs="{'invisible' : [('state', '=', 'opening_control')]}" string="+ Transactions" class="oe_force_bold oe_opening_total"/>
+                                    <field name="cash_register_total_entry_encoding" nolabel="1" attrs="{'invisible' : [('state', '=', 'opening_control')]}" class="oe_bold oe_pos_total" widget="monetary" options="{'currency_field': 'currency_id'}"/>
+                                    <label for="cash_register_balance_end" attrs="{'invisible' : [('state', '=', 'opening_control')]}" string="= Theoretical Closing Balance" class="oe_force_bold oe_opening_total"/>
+                                    <field name="cash_register_balance_end" nolabel="1" attrs="{'invisible' : [('state', '=', 'opening_control')]}" class="oe_bold oe_pos_total" widget="monetary" options="{'currency_field': 'currency_id'}"/>
                                 </group>
                                 <div class="oe_clear"/>
-                                <div attrs="{'invisible' : [('cash_journal_id', '=', False)]}" class="oe_view_nocontent" groups="point_of_sale.group_pos_manager">
+                                <div attrs="{'invisible' : ['|', ('cash_journal_id', '=', False), ('state', '!=', 'opening_control')]}" class="oe_view_nocontent" groups="point_of_sale.group_pos_manager">
                                     <p class="oe_view_nocontent_create">
                                     You can define another list of available currencies on the
                                     <i>Cash Registers</i> tab of the <b><field name="cash_journal_id" class="oe_inline"/></b>
                                     </p>
                                 </div>
                             </div>
-
-
-                            <group class="oe_subtotal_footer oe_right" attrs="{'invisible' : [('state', 'in', ('opening_control', 'closed'))]}">
-                                <field name="cash_register_balance_end_real" class="oe_subtotal_footer_separator"/>
-                                <field name="cash_register_difference"  class="oe_subtotal_footer_separator"/>
-                            </group>
+                            <div>
+                                <group class="oe_subtotal_footer oe_right" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '=', 'opening_control')]}">
+                                    <field name="cash_register_balance_end_real" string="Real Closing Balance" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
+                                </group>
+                                <group/>
+                                <group/>
+                                <group class="oe_subtotal_footer oe_right" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '=', 'opening_control')]}">
+                                    <field name="cash_register_difference" class="oe_subtotal_footer_separator oe_right oe_pos_total oe_pos_difference" widget="monetary" options="{'currency_field': 'currency_id'}"/>
+                                </group>
+                            </div>
                         </group>
-
                         <separator string="Summary by Payment Methods" attrs="{'invisible' : [('state', '=', 'opening_control')]}"/>
                         <field name="statement_ids" attrs="{'invisible' : [('state', '=', 'opening_control')]}">
                             <tree string="Statements">
                 currencies in your cash registers at the beginning and the end
                 of each session.
               </p><p>
-                Note that you should better to use the menu <i>Your Session</i>
+                Note that you may use the menu <i>Your Session</i>
                 to quickly open a new session.
               </p>
             </field>
                     <filter icon="gtk-convert" string="Posted" domain="[('state','=','done')]"/>
                     <field name="user_id"/>
                     <field name="session_id"/>
-                    <group expand="0" string="Group By..." groups="base.group_extended">
+                    <group expand="0" string="Group By...">
                         <filter string="Customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
                         <filter string="Salesman" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
                         <filter string="Session" icon="terp-personal" domain="[]" context="{'group_by':'session_id'}"/>
-                        <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
-                        <filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
+                        <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
+                        <filter string="Order Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
                     </group>
                 </search>
             </field>
         <record model="ir.ui.view" id="pos_ean13_generator">
             <field name="name">pos.ean_wizard</field>
             <field name="model">pos.ean_wizard</field>
-            <field name="type">form</field>
             <field name="arch" type="xml">
                 <form string="Ean13 Generator" version="7.0">  
-                    <field name="ean13_pattern"/>
+                    <p class="oe_grey">
+                        Enter a reference, it will be converted
+                        automatically to a valid EAN number.
+                    </p>
+                    <group>
+                        <field name="ean13_pattern" class="oe_inline"/>
+                    </group>
                     <footer>
-                        <button name="sanitize_ean13" type="object" string="Apply"/>
+                        <button name="sanitize_ean13" type="object" string="Apply" class="oe_highlight"/> or 
+                         <button icon="gtk-stop" special="cancel"
+                            string="Cancel" class="oe_link"/>
                     </footer>
                 </form>
             </field>