[MERGE] forward port of branch 8.0 up to ed1c173
[odoo/odoo.git] / addons / point_of_sale / point_of_sale_view.xml
1 <?xml version="1.0"?>
2 <openerp>
3     <data>
4
5         <!-- Top menu item -->
6         <menuitem name="Point of Sale"
7             id="menu_point_root"
8             groups="group_pos_manager,group_pos_user"
9             sequence="30"/>
10
11         <record model="ir.ui.view" id="view_pos_pos_form">
12             <field name="name">pos.order</field>
13             <field name="model">pos.order</field>
14             <field name="arch" type="xml">
15                 <form string="Point of Sale Orders">
16                     <header>
17                         <button name="%(action_pos_payment)d" string="Payment" class="oe_highlight" type="action" states="draft" context="{'pos_session_id' : session_id}"/>
18                         <button name="action_invoice" string="Invoice" type="object" states="paid" attrs="{'readonly': [('partner_id','=',False)]}"/>
19                         <button name="refund" string="Return Products" type="object" 
20                             attrs="{'invisible':[('state','=','draft')]}"/>
21                         <button name="%(action_report_pos_receipt)d" string="Reprint" type="action" states="paid,done,invoiced"/>
22                         <field name="state" widget="statusbar" statusbar_visible="draft,paid,done" statusbar_colors='{"cancel":"red"}'/>
23                     </header>
24                     <sheet>
25                     <group col="4" colspan="4">
26                         <field name="name"/>
27                         <field name="date_order"/>
28                         <field name="session_id" required="1"/>
29                         <field name="partner_id" on_change="onchange_partner_id(partner_id, context)" context="{'search_default_customer':1}" attrs="{'readonly': [('state','=','invoiced')]}"/>
30                     </group>
31                     <notebook colspan="4">
32                         <page string="Products">
33                             <field name="lines" colspan="4" nolabel="1">
34                                 <tree string="Order lines" editable="bottom">
35                                     <field name="product_id" on_change="onchange_product_id(parent.pricelist_id,product_id,qty,parent.partner_id)"/>
36                                     <field name="qty" on_change="onchange_qty(product_id, discount, qty, price_unit, context)"/>
37                                     <field name="price_unit" on_change="onchange_qty(product_id, discount, qty, price_unit, context)"/>
38                                     <field name="discount"  on_change="onchange_qty(product_id, discount, qty, price_unit, context)"/>
39                                     <field name="price_subtotal"/>
40                                     <field name="price_subtotal_incl"/>
41                                 </tree>
42                                 <form string="Order lines">
43                                     <group col="4">
44                                         <field name="product_id" on_change="onchange_product_id(parent.pricelist_id,product_id,qty,parent.partner_id)"/>
45                                         <field name="qty" on_change="onchange_qty(product_id, discount, qty, price_unit, context)"/>
46                                         <field name="discount"  on_change="onchange_qty(product_id, discount, qty, price_unit, context)"/>
47                                         <field name="price_unit" on_change="onchange_qty(product_id, discount, qty, price_unit, context)"/>
48                                         <field name="price_subtotal" invisible="1"/>
49                                         <field name="price_subtotal_incl" invisible="1"/>
50                                         <field name="notice"/>
51                                     </group>
52                                 </form>
53                             </field>
54                             <group class="oe_subtotal_footer oe_right" colspan="2" name="order_total">
55                                 <field name="amount_tax"/>
56                                 <div class="oe_subtotal_footer_separator oe_inline">
57                                     <label for="amount_total" />
58                                     <button name="button_dummy"
59                                         states="draft" string="(update)" class="oe_edit_only oe_link"/>
60                                 </div>
61                                 <field name="amount_total" nolabel="1" class="oe_subtotal_footer_separator"/>
62                             </group>
63                             <div class="oe_clear"/>
64                         </page>
65                         <page string="Payments">
66                             <field name="statement_ids" colspan="4" nolabel="1">
67                                 <tree editable="bottom" string="Statement lines">
68                                     <field name="journal_id"/>
69                                     <field name="statement_id"/>
70                                     <field name="amount"/>
71                                 </tree>
72                             </field>
73                         </page>
74                         <page string="Extra Info">
75                             <group string="General Information">
76                                 <field name="company_id" groups="base.group_multi_company"/>
77                                 <field name="location_id" widget="selection" groups="stock.group_locations"/>
78                                 <field name="user_id" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'point_of_sale.group_pos_user']}"/>
79                                 <field name="pricelist_id" groups="product.group_sale_pricelist" domain="[('type','=','sale')]"/>
80                                 <field name="picking_id" readonly="1"/>
81                                 <field name="pos_reference"/>
82                             </group>
83                             <group string="Accounting Information">
84                                 <field name="sale_journal" domain="[('type','=','sale')]"/>
85                                 <field name="invoice_id" readonly="1"
86                                     attrs="{'invisible':[('state','&lt;&gt;','invoiced')]}"/>
87                                 <button name="%(pos_invoice_report)d" string="Re-Print"
88                                     icon="gtk-print" type="action" attrs="{'invisible':[('state','&lt;&gt;','invoiced')]}"/>
89                                 <field name="account_move" readonly="1"
90                                     attrs="{'invisible':[('state','&lt;&gt;','done')]}"/>
91                             </group>
92                         </page>
93                         <page string="Notes" >
94                             <field name="note"/>
95                         </page>
96                     </notebook>
97                 </sheet>
98                 </form>
99             </field>
100         </record>
101         <record model="ir.actions.act_window" id="action_pos_pos_form">
102             <field name="name">Orders</field>
103             <field name="type">ir.actions.act_window</field>
104             <field name="res_model">pos.order</field>
105             <field name="view_type">form</field>
106             <field name="view_mode">tree,form</field>
107             <field name="view_id" eval="False"/>
108             <field name="domain">[]</field>
109             <field name="help" type="html">
110               <p class="oe_view_nocontent_create">
111                 Click to create a new order.
112               </p><p>
113                 Use this menu to browse previous orders. To record new
114                 orders, you may use the menu <i>Your Session</i> for
115                 the touchscreen interface.
116               </p>
117             </field>
118         </record>
119         <record model="ir.ui.view" id="view_pos_order_tree">
120             <field name="name">Orders</field>
121             <field name="model">pos.order</field>
122             <field name="arch" type="xml">
123                 <tree string="POS Orders" colors="blue:state == 'draft';gray:state in ('done','cancel');black:state not in('done','cancel')">
124                     <field name="name"/>
125                     <field name="pos_reference"/>
126                     <field name="partner_id"/>
127                     <field name="date_order"/>
128                     <field name="user_id"/>
129                     <field name="invoice_id"/>
130                     <field name="amount_total" sum="Amount total"/>
131                     <field name="company_id" groups="base.group_multi_company"/>
132                     <field name="state"/>
133                     <field name="session_id" />
134                 </tree>
135             </field>
136         </record>
137         <record id="view_pos_order_filter" model="ir.ui.view">
138             <field name="name">pos.order.list.select</field>
139             <field name="model">pos.order</field>
140             <field name="arch" type="xml">
141                 <search string="Search Sales Order">
142                     <field name="name" string="Sales Order"/>
143                     <field name="date_order"/>
144                     <field name="pos_reference"/>
145                     <filter icon="terp-document-new" string="New" domain="[('state','=','draft')]"/>
146                     <filter icon="gtk-apply" string="Done" domain="[('state','in',('paid','invoiced','done'))]"/>
147                     <filter icon="terp-check" string="Invoiced" domain="[('state','=','invoiced')]"/>
148                     <filter icon="gtk-convert" string="Posted" domain="[('state','=','done')]"/>
149                     <field name="user_id"/>
150                     <group expand="0" string="Group By">
151                         <filter string="Customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
152                         <filter string="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
153                         <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
154                         <filter string="Order Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
155                     </group>
156                 </search>
157             </field>
158         </record>
159
160         <menuitem name="Daily Operations" id="menu_point_of_sale" parent="menu_point_root" sequence="10"/>
161         <menuitem parent="menu_point_of_sale" id="menu_point_ofsale" action="action_pos_pos_form" sequence="2" groups="group_pos_manager,group_pos_user"/>
162         <menuitem name="Products" id="menu_point_of_sale_product" parent="menu_point_root" sequence="15" />
163
164         <record id="product_template_action" model="ir.actions.act_window">
165             <field name="name">Products</field>
166             <field name="type">ir.actions.act_window</field>
167             <field name="res_model">product.template</field>
168             <field name="view_type">form</field>
169             <field name="view_mode">tree,form,kanban</field>
170             <field name="context" eval="{}"/>
171             <field name="domain" eval="[('available_in_pos','&lt;&gt;',False)]"/>
172             <field name="help" type="html">
173               <p class="oe_view_nocontent_create">
174                 Click to add a new product.
175               </p><p>
176                 You must define a product for everything you sell through
177                 the point of sale interface.
178               </p><p>
179                 Do not forget to set the price and the point of sale category
180                 in which it should appear. If a product has no point of sale
181                 category, you can not sell it through the point of sale
182                 interface.
183               </p>
184             </field>
185         </record>
186         <menuitem
187             action="product_template_action"
188             id="menu_pos_products"
189             parent="menu_point_of_sale_product" sequence="2"/>
190
191         <record model="ir.ui.view" id="view_pos_order_line">
192             <field name="name">Sale lines</field>
193             <field name="model">pos.order.line</field>
194             <field name="arch" type="xml">
195                 <tree string="POS Order lines">
196                     <field name="product_id" readonly="1"/>
197                     <field name="qty" readonly="1" sum="Total qty"/>
198                     <field name="discount" readonly="1"/>
199                     <field name="price_unit" readonly="1"/>
200                     <field name="price_subtotal" readonly="1" sum="Sum of subtotals"/>
201                     <field name="price_subtotal_incl" readonly="1" sum="Sum of subtotals"/>
202                     <field name="create_date" readonly="1"/>
203                 </tree>
204             </field>
205         </record>
206
207         <record model="ir.ui.view" id="view_pos_order_line_form">
208             <field name="name">Sale line</field>
209             <field name="model">pos.order.line</field>
210             <field name="arch" type="xml">
211                 <form string="POS Order line">
212                     <group col="4">
213                         <field name="product_id" />
214                         <field name="qty" />
215                         <field name="discount" />
216                         <field name="price_unit" />
217                         <field name="create_date" />
218                     </group>
219                 </form>
220             </field>
221         </record>
222
223         <record model="ir.actions.act_window" id="action_pos_order_line">
224             <field name="name">Sale line</field>
225             <field name="type">ir.actions.act_window</field>
226             <field name="res_model">pos.order.line</field>
227             <field name="view_type">form</field>
228             <field name="view_mode">tree</field>
229             <field name="view_id" ref="view_pos_order_line"/>
230         </record>
231
232         <record model="ir.actions.act_window" id="action_pos_order_line_form">
233             <field name="name">Sale line</field>
234             <field name="type">ir.actions.act_window</field>
235             <field name="res_model">pos.order.line</field>
236             <field name="view_type">form</field>
237             <field name="view_mode">form,tree</field>
238             <field name="view_id" ref="view_pos_order_line_form"/>
239         </record>
240
241         <record model="ir.actions.act_window" id="action_pos_order_line_day">
242             <field name="name">Sale line</field>
243             <field name="type">ir.actions.act_window</field>
244             <field name="res_model">pos.order.line</field>
245             <field name="view_type">form</field>
246             <field name="view_mode">tree</field>
247             <field name="view_id" ref="view_pos_order_line"/>
248             <field name="domain">[('create_date', '&gt;=', time.strftime('%Y-%m-%d 00:00:00')),('create_date', '&lt;=', time.strftime('%Y-%m-%d 23:59:59'))]</field>
249         </record>
250
251
252
253         <!-- report -->
254
255         <record model="ir.ui.view" id="view_pos_trans_user_form">
256             <field name="name">report.trans.pos.user.form</field>
257             <field name="model">report.transaction.pos</field>
258             <field name="arch" type="xml">
259                 <form string="POS ">
260                     <group col="4">
261                         <field name="user_id"/>
262                         <field name="journal_id"/>
263                         <field name="jl_id"/>
264                         <field name="date_create" widget="date"/>
265                         <field name="no_trans"/>
266                         <field name="amount"/>
267                         <field name="invoice_id"/>
268                     </group>
269                 </form>
270             </field>
271         </record>
272
273
274         <record model="ir.ui.view" id="view_trans_pos_user_tree">
275             <field name="name">Sales by user</field>
276             <field name="model">report.transaction.pos</field>
277             <field name="arch" type="xml">
278                 <tree string="POS">
279                     <field name="date_create" widget="date" />
280                     <field name="user_id"/>
281                     <field name="journal_id"/>
282                     <field name="jl_id"/>
283                     <field name="no_trans" sum="Total Transaction"/>
284                     <field name="amount" sum="Amount total"/>
285                     <field name="product_nb" />
286                     <field name="invoice_id"/>
287                     <field name="disc"/>
288                 </tree>
289             </field>
290         </record>
291
292         <record model="ir.ui.view" id="view_report_transaction_pos_calendar">
293             <field name="name">report.transaction.pos.calendar</field>
294             <field name="model">report.transaction.pos</field>
295             <field eval="2" name="priority"/>
296             <field name="arch" type="xml">
297                 <calendar color="user_id" date_start="date_create" string="POS Report">
298                     <field name="journal_id"/>
299                     <field name="amount"/>
300                 </calendar>
301             </field>
302          </record>
303
304          <record model="ir.ui.view" id="view_report_transaction_pos_graph">
305             <field name="name">report.transaction.pos.graph</field>
306             <field name="model">report.transaction.pos</field>
307             <field eval="2" name="priority"/>
308             <field name="arch" type="xml">
309                 <graph  type="bar" string="POS Report">
310                     <field name="user_id" />
311                     <field name="amount"/>
312                     <field group="True" name="journal_id"/>
313                 </graph>
314             </field>
315          </record>
316
317         <record model="ir.actions.act_window" id="action_trans_pos_tree_today">
318             <field name="name">Sales by day</field>
319             <field name="res_model">report.transaction.pos</field>
320             <field name="view_type">form</field>
321             <field name="view_mode">tree,calendar,form,graph</field>
322             <field name="domain">[('date_create','=',time.strftime('%Y-%m-%d'))]</field>
323         </record>
324
325
326         <record model="ir.actions.act_window" id="action_trans_pos_tree_month">
327             <field name="name">Sales by month</field>
328             <field name="res_model">report.transaction.pos</field>
329             <field name="view_type">form</field>
330             <field name="view_mode">tree,calendar,form,graph</field>
331             <field name="domain">[('date_create','like',time.strftime('%Y-%m'))]</field>
332         </record>
333
334
335         <record model="ir.actions.act_window" id="action_trans_pos_tree">
336             <field name="name">Sales by user</field>
337             <field name="res_model">report.transaction.pos</field>
338             <field name="view_type">form</field>
339             <field name="view_mode">tree,calendar,form,graph</field>
340             <field name="view_id" ref="view_trans_pos_user_tree"/>
341         </record>
342
343
344         <record model="ir.ui.view" id="view_report_sales_by_user_pos_form">
345             <field name="name">report.sales.by.user.pos.form</field>
346             <field name="model">report.sales.by.user.pos</field>
347             <field name="arch" type="xml">
348                 <form string="POS ">
349                     <group col="4">
350                         <field name="date_order" widget="date"/>
351                         <field name="qty"/>
352                         <field name="amount"/>
353                         <field name="user_id"/>
354                     </group>
355                 </form>
356             </field>
357         </record>
358
359
360         <record model="ir.ui.view" id="view_report_sales_by_user_pos_tree">
361             <field name="name">report.sales.by.user.pos.tree</field>
362             <field name="model">report.sales.by.user.pos</field>
363             <field name="arch" type="xml">
364                 <tree string="POS">
365                     <field name="date_order" widget="date"/>
366                     <field name="qty"/>
367                     <field name="amount"/>
368                     <field name="user_id"/>
369                 </tree>
370             </field>
371         </record>
372
373         <record model="ir.ui.view" id="view_report_sales_by_user_pos_calendar">
374             <field name="name">report.sales.by.user.pos.calendar</field>
375             <field name="model">report.sales.by.user.pos</field>
376             <field eval="2" name="priority"/>
377             <field name="arch" type="xml">
378                 <calendar color="user_id" date_start="date_order" string="POS Report">
379                     <field name="qty"/>
380                     <field name="amount" />
381                 </calendar>
382             </field>
383          </record>
384
385         <record model="ir.ui.view" id="view_report_sales_by_user_pos_graph">
386             <field name="name">report.sales.by.user.pos.graph</field>
387             <field name="model">report.sales.by.user.pos</field>
388             <field eval="2" name="priority"/>
389             <field name="arch" type="xml">
390                 <graph  type="bar" string="Sales by User">
391                     <field name="user_id" />
392                     <field name="amount"/>
393                 </graph>
394             </field>
395          </record>
396
397          <record model="ir.actions.act_window" id="action_report_sales_by_user_pos_today">
398             <field name="name">Sales by User</field>
399             <field name="res_model">report.sales.by.user.pos</field>
400             <field name="view_type">form</field>
401             <field name="view_mode">tree,calendar,form,graph</field>
402             <field name="domain">[('date_order','=',time.strftime('%Y-%m-%d'))]</field>
403          </record>
404
405
406         <!-- Sales of user by month -->
407
408         <record model="ir.ui.view" id="view_report_sales_by_user_pos_month_form">
409             <field name="name">report.sales.by.user.pos.month.form</field>
410             <field name="model">report.sales.by.user.pos.month</field>
411             <field name="arch" type="xml">
412                 <form string="POS ">
413                     <group col="4">
414                         <field name="date_order" widget="date"/>
415                         <field name="qty"/>
416                         <field name="amount"/>
417                         <field name="user_id"/>
418                     </group>
419                 </form>
420             </field>
421         </record>
422
423
424         <record model="ir.ui.view" id="view_report_sales_by_user_pos_month_tree">
425             <field name="name">report.sales.by.user.pos.month.tree</field>
426             <field name="model">report.sales.by.user.pos.month</field>
427             <field name="arch" type="xml">
428                 <tree string="POS">
429                     <field name="date_order" widget="date"/>
430                     <field name="qty"/>
431                     <field name="amount"/>
432                     <field name="user_id"/>
433                 </tree>
434             </field>
435         </record>
436
437         <record model="ir.ui.view" id="view_report_sales_by_user_pos_month_calendar">
438             <field name="name">report.sales.by.user.pos.month.calendar</field>
439             <field name="model">report.sales.by.user.pos.month</field>
440             <field eval="2" name="priority"/>
441             <field name="arch" type="xml">
442                 <calendar color="user_id" date_start="date_order" string="POS Report">
443                     <field name="qty"/>
444                     <field name="amount" />
445                 </calendar>
446             </field>
447          </record>
448
449         <record model="ir.ui.view" id="view_report_sales_by_user_pos_month_graph">
450             <field name="name">report.sales.by.user.pos.month.graph</field>
451             <field name="model">report.sales.by.user.pos.month</field>
452             <field eval="2" name="priority"/>
453             <field name="arch" type="xml">
454                 <graph  type="bar" string="Sales by User">
455                     <field name="user_id" />
456                     <field name="amount"/>
457                 </graph>
458             </field>
459          </record>
460
461
462          <record model="ir.actions.act_window" id="action_report_sales_by_user_pos_month">
463             <field name="name">Sales by User Monthly</field>
464             <field name="res_model">report.sales.by.user.pos.month</field>
465             <field name="view_type">form</field>
466             <field name="view_mode">tree,calendar,form,graph</field>
467             <field name="domain">[('date_order','like',time.strftime('%Y-%m'))]</field>
468         </record>
469
470
471
472         <!-- Product Public Categories -->
473         <record id="product_pos_category_form_view" model="ir.ui.view">
474             <field name="name">pos.category.form</field>
475             <field name="model">pos.category</field>
476             <field name="arch" type="xml">
477                 <form string="Pos Categories">
478                     <sheet>
479                         <field name="image_medium" widget='image' class="oe_avatar oe_right"/>
480                         <div class="oe_left">
481                             <group>
482                                 <field name="name"/>
483                                 <field name="parent_id"/>
484                                 <field name="sequence"/>
485                             </group>
486                         </div>
487                     </sheet>
488                 </form>
489             </field>
490         </record>
491         <record id="product_pos_category_tree_view" model="ir.ui.view">
492             <field name="name">pos.category.tree</field>
493             <field name="model">pos.category</field>
494             <field name="field_parent" eval="False"/>
495             <field name="arch" type="xml">
496                 <tree string="Product Product Categories">
497                     <field name="sequence" invisible="1"/>
498                     <field name="complete_name"/>
499                 </tree>
500             </field>
501         </record>
502         <record id="product_pos_category_action" model="ir.actions.act_window">
503             <field name="name">Pos Product Categories</field>
504             <field name="type">ir.actions.act_window</field>
505             <field name="res_model">pos.category</field>
506             <field name="view_type">form</field>
507             <field name="view_mode">tree,form</field>
508             <field name="view_id" eval="False"/>
509             <field name="help" type="html">
510               <p class="oe_view_nocontent_create">
511                 Click to define a new category.
512               </p><p>
513                 Categories are used to browse your products through the
514                 touchscreen interface.
515               </p><p>
516                 If you put a photo on the category, the layout of the
517                 touchscreen interface will automatically. We suggest not to put
518                 a photo on categories for small (1024x768) screens.
519               </p>
520             </field>
521         </record>
522         <menuitem action="product_pos_category_action" id="menu_product_pos_category" parent="menu_point_of_sale_product" sequence="0" />
523         <!-- END -->
524
525         <record id="action_edit_ean" model="ir.actions.act_window">
526             <field name="name">Edit Ean</field>
527             <field name="res_model">pos.ean_wizard</field>
528             <field name="target">new</field>
529             <field name="view_type">form</field>
530             <field name="view_mode">form</field>
531         </record>
532
533         <record id="product_template_form_view" model="ir.ui.view">
534             <field name="name">product.template.form.inherit</field>
535             <field name="model">product.template</field>
536             <field name="inherit_id" ref="product.product_template_form_view"/>
537             <field name="arch" type="xml">
538                 <group name="website_and_pos" position="inside">
539                     <group name="pos" string="Point of Sale">
540                         <field name="pos_categ_id"/>
541                         <field name="available_in_pos"/>
542                         <field name="to_weight" />
543                         <field name="income_pdt"/>
544                         <field name="expense_pdt"/>
545                     </group>
546                 </group>
547                 <field name="ean13" position="after">
548                     <button colspan="2" name="%(action_edit_ean)d" type="action" string="Set a Custom EAN" class="oe_link oe_edit_only"/>
549                 </field>
550             </field>
551         </record>
552         <!-- END -->
553
554         <menuitem name="Configuration" parent="menu_point_root"
555             id="menu_point_config_product" sequence="25" groups="group_pos_manager"/>
556
557         <record id="action_account_journal_form" model="ir.actions.act_window">
558             <field name="name">Payment Methods</field>
559             <field name="res_model">account.journal</field>
560             <field name="view_type">form</field>
561             <field name="view_mode">tree,form</field>
562             <field name="context" eval="{'default_journal_user': 1, 'default_type': 'cash'}"/>
563             <field name="domain">[('journal_user','=', 1)]</field>
564             <field name="help" type="html">
565               <p class="oe_view_nocontent_create">
566                 Click to add a payment method.
567               </p><p>
568                 Payment methods are defined by accounting journals having the
569                 field <i>PoS Payment Method</i> checked. In order to be useable
570                 from the touchscreen interface, you must set the payment method
571                 on the <i>Point of Sale</i> configuration.
572               </p>
573             </field>
574         </record>
575
576         <menuitem action="action_account_journal_form"
577             id="menu_action_account_journal_form_open"
578             parent="menu_point_config_product"
579             sequence="20"/>
580
581         <record model="ir.ui.view" id="view_pos_order_tree_all_sales_lines">
582             <field name="name">POS Sales Lines</field>
583             <field name="model">pos.order.line</field>
584             <field name="arch" type="xml">
585                 <tree string="POS Orders lines">
586                     <field name="order_id" />
587                     <field name="create_date" />
588                     <field name="product_id" />
589                     <field name="qty" />
590                     <field name="price_unit" />
591                 </tree>
592             </field>
593         </record>
594          <record model="ir.actions.act_window" id="action_pos_all_sales_lines">
595             <field name="name">All sales lines</field>
596             <field name="type">ir.actions.act_window</field>
597             <field name="res_model">pos.order.line</field>
598             <field name="view_type">form</field>
599             <field name="view_id" ref="view_pos_order_tree_all_sales_lines" />
600         </record>
601
602         <!--  Miscellaneous Operations/Reporting -->
603         <menuitem name="Point of Sale" parent="base.menu_reporting" id="menu_point_rep" sequence="50" groups="group_pos_manager"/>
604         <!-- Invoice -->
605
606         <record model="ir.actions.act_window" id="action_pos_invoice">
607             <field name="name">Invoices</field>
608             <field name="type">ir.actions.act_window</field>
609             <field name="res_model">account.invoice</field>
610             <field name="view_type">form</field>
611             <field name="view_mode">tree,form</field>
612             <field name="domain">[('origin','like','POS')]</field>
613         </record>
614
615         <menuitem icon="STOCK_PRINT" action="action_report_pos_details"
616                 id="menu_pos_details" parent="menu_point_rep" sequence="6" />
617
618         <record model="ir.actions.act_url" id="action_pos_pos">
619             <field name="name">Start Point of Sale</field>
620             <field name="url">/pos/web/</field>
621             <field name="target">self</field>
622         </record>
623
624         <!-- Top menu item -->
625         <record model="ir.ui.view" id="view_pos_config_form">
626             <field name="name">pos.config.form.view</field>
627             <field name="model">pos.config</field>
628             <field name="arch" type="xml">
629                 <form string="Point of Sale Configuration">
630                     <header>
631                         <button string="Set to Active" name="set_active" type="object" states="inactive,deprecated"/>
632                         <button string="Set to Inactive" name="set_inactive" type="object" states="active" />
633                         <button string="Set to Deprecated" name="set_deprecate" type="object" states="active,inactive" />
634                         <div class="oe_right">
635                             <field name="state" widget="statusbar" statusbar_visible="active,inactive,deprecated" statusbar_colors='{"deprecated" : "red"}' nolabel="1"/>
636                         </div>
637                     </header>
638
639                     <sheet>
640                         <label for="name" class="oe_edit_only"/>
641                         <h1>
642                             <field name="name"/>
643                         </h1>
644                         <group col="4">
645                             <field name="picking_type_id" widget="selection" groups="stock.group_locations" 
646                                 on_change="onchange_picking_type_id(picking_type_id)"/>
647                             <field name="stock_location_id" groups="stock.group_locations"/>
648                             <field name="pricelist_id" groups="product.group_sale_pricelist"/>
649                             <field name="currency_id" invisible="1"/>
650                             <field name="journal_id" widget="selection"/>
651                             <field name="group_by" groups="account.group_account_user"/>
652                             <field name="sequence_id" readonly="1" groups="base.group_no_one"/>
653                         </group>
654                         <separator string="Available Payment Methods" colspan="4"/>
655                         <field name="journal_ids" colspan="4" nolabel="1">
656                             <tree string="Journals">
657                                 <field name="code" />
658                                 <field name="name" />
659                                 <field name="type" />
660                                 <field name="cash_control" />
661                             </tree>
662                         </field>
663                         <group string="Features" >
664                             <group>
665                                 <field name="iface_vkeyboard" />
666                                 <field name="iface_invoicing" />
667                             </group>
668                             <group>
669                                 <field name="iface_fullscreen" />
670                                 <field name="iface_big_scrollbars" />
671                             </group>
672                         </group>
673                         <group string="Hardware Proxy" >
674                             <field name="proxy_ip" />
675                             <field name="iface_print_via_proxy" />
676                             <field name="iface_scan_via_proxy" />
677                             <field name="iface_electronic_scale" />
678                             <field name="iface_cashdrawer" />
679                         </group>
680                         <group string="Receipt" >
681                             <field name="receipt_header" placeholder="A custom receipt header message"/>
682                             <field name="receipt_footer" placeholder="A custom receipt header footage"/>
683                         </group>
684                         <group string="Barcode Types" col="1">
685                             <p>
686                                 Barcode Patterns allow to match barcodes to actions or to embed information such as price and quantity in the barcode.
687                                 Barcode Patterns only work with EAN13 barcodes.
688                             </p>
689                             <p> 
690                                 Each type of barcode accepts a list of patterns seprated by commas. A scanned 
691                                 barcode will be attributed to a type if it matches one of its patterns. 
692                                 The patterns take the form of EAN13 barcodes. Numbers in the pattern must match
693                                 the number in the scanned barcode. A 'x' or a '*' in a pattern will match
694                                 any one number. If the patterns are shorter than EAN13 barcodes, they are assumed
695                                 to be prefixes and match at the beginning. Weight, Price and Discount patterns also
696                                 tell how the weight, price or discount is encoded in the barcode. 'N' indicate the
697                                 positions where the integer part is en encoded, and 'D' where the decimals are encoded.
698                                 If multiple pattern match one barcode, the longest pattern with the less 'x' or '*' is
699                                 considered the matching one. If a barcode matches no pattern it will not be found in
700                                 the POS.
701                             </p>
702                             <group col="4">
703
704                                 <field name="barcode_product" />
705                                 <field name="barcode_cashier" />
706                                 <field name="barcode_customer" />
707                                 <field name="barcode_weight" />
708                                 <field name="barcode_discount" />
709                                 <field name="barcode_price" />
710                             </group>
711                         </group>
712                     </sheet>
713
714                 </form>
715             </field>
716         </record>
717
718         <record model="ir.ui.view" id="view_pos_config_tree">
719             <field name="name">pos.config.tree.view</field>
720             <field name="model">pos.config</field>
721             <field name="arch" type="xml">
722                 <tree string="Point of Sale Configuration" colors="grey:state == 'inactive'">
723                     <field name="name" />
724                     <field name="stock_location_id" groups="stock.group_locations"/>
725                     <field name="state" />
726                 </tree>
727             </field>
728         </record>
729
730         <record model="ir.ui.view" id="view_pos_config_search">
731             <field name="name">pos.config.search.view</field>
732             <field name="model">pos.config</field>
733             <field name="arch" type="xml">
734                 <search string="Point of Sale Config">
735                     <field name="name" />
736                     <filter string="Active" domain="[('state', '=', 'active')]" />
737                     <filter string="Inactive" domain="[('state', '=', 'inactive')]" />
738                     <field name="stock_location_id" groups="stock.group_locations" />
739                 </search>
740             </field>
741         </record>
742
743         <!-- Sessions -->
744
745         <act_window
746             id="act_pos_config_sessions"
747             name="Sessions"
748             src_model="pos.config"
749             res_model="pos.session"
750             domain="[('config_id', '=', active_id)]" />
751
752         <record model="ir.actions.act_window" id="action_pos_config_pos">
753             <field name="name">Point of Sales</field>
754             <field name="type">ir.actions.act_window</field>
755             <field name="res_model">pos.config</field>
756             <field name="view_type">form</field>
757             <field name="view_mode">tree,form</field>
758             <field name="search_view_id" ref="view_pos_config_search" />
759         </record>
760
761         <menuitem
762             parent="menu_point_config_product"
763             action="action_pos_config_pos"
764             id="menu_pos_config_pos"
765             groups="group_pos_manager"/>
766
767         <act_window
768             id="act_pos_session_orders"
769             name="Orders"
770             src_model="pos.session"
771             res_model="pos.order"
772             context="{'search_default_session_id': active_id, 'default_session_id' : active_id }" />
773
774
775
776         <record model="ir.ui.view" id="view_pos_session_form">
777             <field name="name">pos.session.form.view</field>
778             <field name="model">pos.session</field>
779             <field name="arch" type="xml">
780                 <form string="Point of Sale Session">
781                     <header>
782                         <button name="open_cb" type="object" string="Validate &amp; Open Session" states="opening_control" class="oe_highlight"/>
783                         <button name="open_frontend_cb" type="object" string="Continue Selling" states="opened"
784                             class="oe_highlight"/>
785                         <button name="cashbox_control" type="workflow" string="End of Session"
786                             attrs="{'invisible' : ['|', ('cash_control', '=', False),('state', '!=', 'opened')]}" 
787                             class="oe_highlight" />
788                         <button name="close" type="workflow" string="Validate Closing &amp; Post Entries"
789                             attrs="{'invisible' : ['|', ('cash_control', '=', True),('state', '!=', 'opened')]}"
790                             class="oe_highlight" />
791                         <button name="close" type="workflow" string="Validate Closing &amp; Post Entries" states="closing_control"
792                             class="oe_highlight" />
793                         
794                         <field name="state" widget="statusbar" statusbar_visible="opening_control,opened,closing_control,closed" nolabel="1" />
795                         
796                     </header>
797                     <sheet>
798                         <div class="oe_right oe_button_box">
799                             <button class="oe_stat_button" name="%(action_pos_box_in)d"
800                                 type="action" states="opened,closing_control" icon="fa-level-down">
801                                 <div>Put<br/>Money In</div>
802                             </button>
803                             <button class="oe_stat_button" name="%(action_pos_box_out)d"
804                                 type="action" states="opened,closing_control" icon="fa-level-up">
805                                 <div>Take<br/>Money Out</div>
806                             </button>
807                         </div>
808                         <h1 class="oe_title">
809                             Session:
810                             <field name="name" attrs="{'invisible': [('name','=','/')]}" class="oe_inline"/>
811                         </h1>
812                         <group>
813                             <field name="cash_control" invisible="1" />
814                             <group>
815                                 <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']}"/>
816                                 <field name="currency_id" invisible="1"/>
817                                 <field name="config_id"/>
818                             </group>
819                             <group>
820                                 <field name="start_at" attrs="{'invisible' : [('state', '=', 'opening_control')]}"/>
821                                 <field name="stop_at" attrs="{'invisible' : [('state', '!=', 'closed')]}"/>
822                             </group>
823                             <newline/>
824                             <group string="Opening Cash Control" attrs="{'invisible' : [('cash_control', '=', False)]}">
825                                 <field name="opening_details_ids" nolabel="1" colspan="2" attrs="{'readonly' : [('state', '!=', 'opening_control')]}">
826                                     <tree string="Opening Cashbox Lines" editable="bottom">
827                                         <field name="pieces" readonly="1" />
828                                         <field name="number_opening" on_change="on_change_sub_opening(pieces, number_opening)" />
829                                         <field name="subtotal_opening" string="Opening Subtotal" sum="Total"/>
830                                     </tree>
831                                 </field>
832                             </group>
833                             <group string="Closing Cash Control" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '=', 'opening_control')]}">
834                                 <field name="details_ids" nolabel="1" colspan="2" attrs="{'readonly' : [('state', '=', 'closed')]}">
835                                     <tree string="Cashbox Lines" editable="bottom">
836                                         <field name="pieces" readonly="1" />
837                                         <field name="number_closing" on_change="on_change_sub_closing(pieces, number_closing)"/>
838                                         <field name="subtotal_closing" string="Closing Subtotal" sum="Total"/>
839                                     </tree>
840                                 </field>
841                             </group>
842
843                             <div attrs="{'invisible' : [('cash_control', '=', False)]}">
844                                 <group class="oe_subtotal_footer oe_right">
845                                     <field name="cash_register_balance_start" readonly="1" string="Opening Balance" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
846                                     <label for="cash_register_total_entry_encoding" attrs="{'invisible' : [('state', '=', 'opening_control')]}" string="+ Transactions" class="oe_force_bold oe_opening_total"/>
847                                     <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'}"/>
848                                     <label for="cash_register_balance_end" attrs="{'invisible' : [('state', '=', 'opening_control')]}" string="= Theoretical Closing Balance" class="oe_force_bold oe_opening_total"/>
849                                     <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'}"/>
850                                 </group>
851                                 <div class="oe_clear"/>
852                                 <div attrs="{'invisible' : ['|', ('cash_journal_id', '=', False), ('state', '!=', 'opening_control')]}" class="oe_view_nocontent" groups="point_of_sale.group_pos_manager">
853                                     <p class="oe_view_nocontent_create">
854                                     You can define another list of available currencies on the
855                                     <i>Cash Registers</i> tab of the <b><field name="cash_journal_id" class="oe_inline"/></b>
856                                     payment method.
857                                     </p>
858                                 </div>
859                             </div>
860                             <div>
861                                 <group class="oe_subtotal_footer oe_right" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '=', 'opening_control')]}">
862                                     <field name="cash_register_balance_end_real" string="Real Closing Balance" class="oe_subtotal_footer_separator" widget="monetary" options="{'currency_field': 'currency_id'}"/>
863                                 </group>
864                                 <group/>
865                                 <group/>
866                                 <group class="oe_subtotal_footer oe_right" attrs="{'invisible': ['|', ('cash_control', '=', False), ('state', '=', 'opening_control')]}">
867                                     <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'}"/>
868                                 </group>
869                             </div>
870                         </group>
871                         <separator string="Summary by Payment Methods" attrs="{'invisible' : [('state', '=', 'opening_control')]}"/>
872                         <field name="statement_ids" attrs="{'invisible' : [('state', '=', 'opening_control')]}">
873                             <tree string="Statements">
874                                 <field name="name" />
875                                 <field name="journal_id" />
876                                 <field name="balance_start" />
877                                 <field name="total_entry_encoding" />
878                                 <field name="balance_end_real" />
879                                 <field name="difference" />
880                                 <field name="currency" groups="base.group_multi_currency" />
881                                 <field name="state" />
882                             </tree>
883                         </field>
884
885                     </sheet>
886                 </form>
887             </field>
888         </record>
889
890         <record model="ir.ui.view" id="view_pos_session_tree">
891             <field name="name">pos.session.tree.view</field>
892             <field name="model">pos.session</field>
893             <field name="arch" type="xml">
894                 <tree string="Point of Sale Session">
895                     <field name="config_id" />
896                     <field name="name" />
897                     <field name="user_id" />
898                     <field name="start_at" />
899                     <field name="stop_at" />
900                     <field name="state" />
901                 </tree>
902             </field>
903         </record>
904
905         <record model="ir.ui.view" id="view_pos_session_search">
906             <field name="name">pos.session.search.view</field>
907             <field name="model">pos.session</field>
908             <field name="arch" type="xml">
909                 <search string="Point of Sale Session">
910                     <field name="name" />
911                     <filter string="Open" domain="[('state', '=', 'opened')]" />
912                     <separator/>
913                     <filter string="Today" domain="[('start_at', '>=', time.strftime('%%Y-%%m-%%d 00:00:00'))]" />
914                     <field name="config_id" />
915                     <field name="user_id" />
916                     <group expand="0" string="Group By">
917                         <filter string="User" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}" />
918                         <filter string="Point of Sales" domain="[]" context="{'group_by': 'user_id'}" />
919                     </group>
920                 </search>
921             </field>
922         </record>
923
924
925         <record model="ir.actions.act_window" id="action_pos_session">
926             <field name="name">All Sessions</field>
927             <field name="type">ir.actions.act_window</field>
928             <field name="res_model">pos.session</field>
929             <field name="view_type">form</field>
930             <field name="view_mode">tree,form</field>
931             <field name="search_view_id" ref="view_pos_session_search" />
932             <field name="help" type="html">
933               <p class="oe_view_nocontent_create">
934                 Click to start a new session.
935               </p><p>
936                 A session is a period of time, usually one day, during which
937                 you sell through the point of sale. The user has to check the
938                 currencies in your cash registers at the beginning and the end
939                 of each session.
940               </p><p>
941                 Note that you may use the menu <i>Your Session</i>
942                 to quickly open a new session.
943               </p>
944             </field>
945         </record>
946
947         <menuitem
948             parent="menu_point_of_sale"
949             action="action_pos_session"
950             id="menu_pos_session_all"
951             sequence="1"
952             groups="group_pos_manager"/>
953
954         <record id="view_pos_order_filter" model="ir.ui.view">
955             <field name="name">pos.order.list.select</field>
956             <field name="model">pos.order</field>
957             <field name="arch" type="xml">
958                 <search string="Search Sales Order">
959                     <field name="name"/>
960                     <field name="date_order"/>
961                     <filter icon="terp-document-new" string="New" domain="[('state','=','draft')]"/>
962                     <filter icon="gtk-apply" string="Done" domain="[('state','in',('paid','invoiced','done'))]"/>
963                     <filter icon="terp-check" string="Invoiced" domain="[('state','=','invoiced')]"/>
964                     <filter icon="gtk-convert" string="Posted" domain="[('state','=','done')]"/>
965                     <field name="user_id"/>
966                     <field name="session_id"/>
967                     <group expand="0" string="Group By">
968                         <filter string="Customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
969                         <filter string="Salesman" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
970                         <filter string="Session" icon="terp-personal" domain="[]" context="{'group_by':'session_id'}"/>
971                         <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
972                         <filter string="Order Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
973                     </group>
974                 </search>
975             </field>
976         </record>
977
978         <menuitem action="action_pos_session_opening"
979             parent="menu_point_of_sale"
980             id="menu_pos_session_opening" sequence="0"/>
981
982         <record model="ir.ui.view" id="pos_ean13_generator">
983             <field name="name">pos.ean_wizard</field>
984             <field name="model">pos.ean_wizard</field>
985             <field name="arch" type="xml">
986                 <form string="Ean13 Generator">  
987                     <p class="oe_grey">
988                         Enter a reference, it will be converted
989                         automatically to a valid EAN number.
990                     </p>
991                     <group>
992                         <field name="ean13_pattern" class="oe_inline"/>
993                     </group>
994                     <footer>
995                         <button name="sanitize_ean13" type="object" string="Apply" class="oe_highlight"/> or 
996                          <button icon="gtk-stop" special="cancel"
997                             string="Cancel" class="oe_link"/>
998                     </footer>
999                 </form>
1000             </field>
1001         </record>
1002
1003
1004     </data>
1005 </openerp>
1006