1 <?xml version="1.0" encoding="UTF-8"?>
4 <templates id="template" xml:space="preserve">
6 <div id="oe_loading" class="loading"></div>
7 <div id="oe_notification" class="oe_notification">
8 <div id="oe_notification_default">
9 <a class="ui-notify-cross ui-notify-close" href="#">x</a>
13 <div id="oe_notification_alert" class="ui-state-error">
14 <a class="ui-notify-cross ui-notify-close" href="#">x</a>
15 <span style="float:left; margin:2px 5px 0 0;" class="ui-icon ui-icon-alert"></span>
20 <div id="oe_login" class="login"></div>
21 <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" class="main_table">
24 <div id="oe_header" class="header"></div>
25 <div id="oe_menu" class="menu"></div>
29 <td valign="top" id="oe_secondary_menu" class="secondary_menu">
32 <div id="oe_app" class="oe-application">
33 <div style="width:100%;">&nbsp;</div>
39 <div id="oe_footer" class="oe_footer">
40 <p class="oe_footer_powered">Powered by <a href="http://www.openerp.com">openerp.com</a>.</p>
51 Database: <input type="text" name="db" value="trunk"/><br/>
52 Login: <input type="text" name="login" value="admin"/><br/>
53 Password: <input type="password" name="password" value="a"/><br/>
54 <input type="submit" name="submit" value="Login"/>
58 <a href="/" class="company_logo_link">
59 <div class="company_logo" />
61 <h1 class="header_title" t-if="session.session_is_valid()">
62 <span class="company">$company</span> - (<span class="database">$database</span>)<br/>
63 <small class="username">$username session_id: <t t-esc="session.session_id"/></small>
65 <div class="header_corner">
66 <ul class="block" t-if="session.session_is_valid()">
68 <a href="#home" title="Home" class="home"><img src="/base/static/src/img/header-home.png" width="16" height="16" border="0"/></a>
71 <a href="#requests" title="Requests" class="requests"><img src="/base/static/src/img/header-requests.png" width="16" height="16" border="0"/><small>1</small></a>
73 <li class="preferences">
74 <a href="#preferences" title="Preferences" class="preferences"><img src="/base/static/src/img/header-preferences.png" width="16" height="16" border="0"/></a>
77 <a href="#about" title="About" class="about"><img src="/base/static/src/img/header-about.png" width="16" height="16" border="0"/></a>
80 <a href="http://doc.openerp.com/v6.0/book?version=$version" title="Help" target="_blank" class="help"><img src="/base/static/src/img/header-help.png" width="16" height="16" border="0"/></a>
84 <a href="#logout" class="logout">LOGOUT</a>
90 <table align="center">
92 <t t-foreach="data.children" t-as="menu">
94 <a href="#" t-att-data-menu="menu.id">
95 <span><t t-esc="menu.name"/></span>
102 <t t-name="Menu.secondary">
103 <div style="display: none" class="menu_accordion" t-att-data-menu-parent="menu.id">
104 <t t-foreach="menu.children" t-as="menu">
105 <t t-set="header">h3</t>
106 <t t-call="Menu.secondary.children"/>
110 <t t-name="Menu.secondary.children">
111 <<t t-esc="header"/>>
112 <a href="#" t-attf-id="menu_#{menu.id}">
113 <span><t t-esc="menu.name"/></span>
115 </<t t-esc="header"/>>
116 <div class="menu_content">
117 <t t-foreach="menu.children" t-as="menu">
118 <t t-if="!menu.children.length">
119 <a href="#" class="leaf" t-att-data-menu="menu.id">
120 <span><t t-esc="menu.name"/></span>
123 <t t-if="menu.children.length">
124 <div class="submenu_accordion">
125 <t t-call="Menu.secondary.children">
126 <t t-set="header">h4</t>
133 <t t-name="ViewManager">
134 <table class="view-manager-main-table">
136 <td class="view-manager-main-content">
137 <!-- TODO prefix id with the element_id of the controller t-attf-id="#{prefix}_localid" -->
138 <div class="oe_vm_switch">
139 <t t-if="views.length != 1" t-foreach="views" t-as="view">
140 <button type="button" t-att-data-view-type="view[1]">
145 <div t-attf-id="#{prefix}_search" t-opentag="true"/>
146 <t t-foreach="views" t-as="view">
147 <div t-attf-id="#{prefix}_view_#{view[1]}"/>
150 <td class="view-manager-main-sidebar">
155 <table t-name="ListView">
156 <t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/>
157 <t t-set="actions_span" t-value="Math.floor((options.deletable or options.addable) ? columns_count/2 : 0)"/>
158 <thead class="ui-widget-header">
159 <tr t-if="options.selectable">
160 <th t-if="actions_span" t-att-colspan="actions_span"
162 <t t-if="view_manager.action.flags.action_buttons !== false">
163 <button type="button" id="oe-list-add"
164 t-if="options.addable">
165 <t t-esc="options.addable"/>
167 <button type="button" id="oe-list-delete"
168 t-if="options.deletable">
173 <th t-att-colspan="columns_count - actions_span"
174 class="oe-list-pager">
175 <t t-if="view_manager.action.flags.pager !== false">
176 <button type="button" data-pager-action="first">First</button>
177 <button type="button" data-pager-action="previous"
180 <span class="oe-pager-first">1</span>
181 to <span class="oe-pager-last">1</span>
182 of <span class="oe-pager-total">1</span>
184 <button type="button" data-pager-action="next">>></button>
185 <button type="button" data-pager-action="last">Last</button>
189 <tr t-if="options.header">
190 <th t-if="options.selectable"/>
191 <t t-foreach="columns" t-as="column">
192 <th t-if="column.invisible !== '1'" t-att-data-id="column.id"
193 t-att-class="((options.sortable and column.tag !== 'button') ? 'oe-sortable' : null)">
194 <t t-if="column.tag !== 'button'">
195 <t t-esc="column.string"/>
196 <span t-att-class="(fields_view.sorted.field === column.id) ? ('ui-icon' + (fields_view.sorted.reversed ? ' ui-icon-triangle-1-n' : ' ui-icon-triangle-1-s')) : ''"/>
200 <th t-if="options.deletable"/>
204 <t t-name="ListView.rows" t-foreach="rows" t-as="row">
205 <t t-call="ListView.row">
206 <t t-set="style" t-value="null"/>
207 <t-if test="row.color">
208 <t t-set="style" t-value="'color: ' + row.color"/>
212 <tr t-name="ListView.row" t-att-style="style" t-att-class="row_parity">
213 <th t-if="options.selectable" class="oe-record-selector">
214 <input type="checkbox"/>
216 <t t-foreach="columns" t-as="column">
217 <t t-set="attrs" t-value="column.attrs_for(row.data)"/>
218 <td t-if="column.invisible !== '1'" t-att-title="column.help"
219 class="oe-field-cell" t-att-data-field="column.id">
220 <t t-if="!attrs.invisible">
221 <t t-set="is_button" t-value="column.tag === 'button'"/>
222 <!-- TODO: get correct widget from form -->
223 <t t-if="!is_button and row['data'][column.id].value">
224 <t t-set="value" t-value="row['data'][column.id].value"/>
225 <t t-esc="value instanceof Array ? value[1] : value"/>
227 <button type="button" t-att-title="column.help"
229 <img t-att-src="'/base/static/src/img/icons/' + column.icon + '.png'"
230 t-att-alt="column.string"/>
235 <td t-if="options.deletable" class='oe-record-delete'>
236 <button type="button" name="delete">â™»</button>
239 <t t-name="FormView">
240 <h2 class="oe_view_title"><t t-esc="view.fields_view.arch.attrs.string"/></h2>
241 <div class="oe_form_header" t-att-id="view.element_id + '_header'">
242 <div class="oe_form_buttons" t-if="view.view_manager.action.flags.action_buttons !== false">
243 <!--<button type="button" class="oe_form_button_save">Save</button>-->
244 <button type="button" class="oe_form_button_save_edit">Save & Edit</button>
245 <!--<button type="button" class="oe_form_button_cancel">Cancel</button>-->
246 <button type="button" class="oe_form_button_new">New</button>
248 <div class="oe_form_pager" t-if="view.view_manager.action.flags.pager !== false">
249 <button type="button" data-pager-action="first">First</button>
250 <button type="button" data-pager-action="previous"><<</button>
252 <span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span>
254 <button type="button" data-pager-action="next">>></button>
255 <button type="button" data-pager-action="last">Last</button>
258 <t t-raw="frame.render()"/>
262 <t t-raw="console.log('Unhandled widget', widget)"/>
264 <t t-name="WidgetFrame">
265 <table border="0" width="100%" cellpadding="2" cellspacing="2" class="oe_frame">
266 <tr t-foreach="widget.table" t-as="row">
267 <t t-foreach="row" t-as="td">
268 <td t-att-colspan="td.colspan gt 1 ? td.colspan : undefined"
269 t-att-width="td.width ? td.width : undefined"
270 t-att-nowrap="td.is_field_label or td.is_field_m2o? 'true' : undefined"
271 t-att-valign="td.table ? 'top' : undefined"
272 t-att-id="td.element_id"
273 t-att-class="'oe_form_' + (td.is_field_label ? 'label' : (td.field ? 'field_' + td.type : td.type))"
275 <t t-raw="td.render()"/>
281 <t t-name="WidgetNotebook">
283 <li t-foreach="widget.pages" t-as="page">
284 <a t-att-href="'#' + widget.element_id + '-' + page_index">
285 <t t-esc="page.string"/>
289 <t t-foreach="widget.pages" t-as="page">
290 <div t-att-id="widget.element_id + '-' + page_index">
291 <t t-raw="page.render()"/>
295 <t t-name="WidgetSeparator">
296 <div t-att-class="'separator ' + (widget.node.attrs.orientation || 'horizontal')">
297 <t t-esc="widget.string"/>
300 <t t-name="WidgetLabel">
301 <label t-att-for="widget.element_id + '_field'"
302 t-att-class="'oe_form_label' + (widget.help ? '_help' : '')"
303 t-att-title="widget.help"
304 t-att-ondblclick="'console.log(\'' + widget.element_id + '\', openerp.screen.' + widget.element_id + ')'">
305 <t t-esc="widget.string"/>
306 <span t-if="widget.help">?</span>
307 <t t-if="widget.string and widget.node.tag != 'label'">:</t>
310 <t t-name="FieldChar">
312 t-att-name="widget.name"
313 t-att-id="widget.element_id + '_field'"
314 t-att-class="'field_' + widget.type" style="width: 100%"
317 <t t-name="FieldEmail">
318 <table cellpadding="0" cellspacing="0" border="0" width="100%">
321 <t t-call="FieldChar"/>
324 <button type="button" class="button" title="Send an e-mail with your default e-mail client">
325 <img src="/base/static/src/img/icons/terp-mail-message-new.png"/>
331 <t t-name="FieldText">
332 <textarea rows="6" style="width: 100%;"
333 t-att-name="widget.name"
334 t-att-id="widget.element_id + '_field'"
335 t-att-class="'field_' + widget.type"
338 <t t-name="FieldDate">
339 <input type="text" style="width: 100%"
340 t-att-name="widget.name"
341 t-att-id="widget.element_id + '_field'"
342 t-att-class="'field_' + widget.type"
345 <t t-name="FieldSelection">
347 t-att-name="widget.name"
348 t-att-id="widget.element_id + '_field'"
349 t-att-class="'field_' + widget.type"
351 <t t-foreach="widget.field.selection" t-as="options">
352 <option t-att-value="options[0]">
353 <t t-esc="options[1]"/>
358 <t t-name="FieldMany2One">
360 t-att-name="widget.name"
361 t-att-id="widget.element_id + '_field'"
362 t-att-class="'field_' + widget.type"
363 t-att-type="widget.type"
364 style="width: 100%;"/>
365 <div type='button' class='ui_combo' tabindex="'-1'" title="'Show All Items'"></div>
367 <t t-name="FieldOne2Many">
368 <div t-att-id="widget.element_id">
372 <t t-name="FieldMany2Many">
373 <div t-att-id="widget.list_id"></div>
375 <t t-name="FieldReference">
376 <input type="text" t-att-name="widget.name" t-att-id="widget.element_id" t-att-class="'field_' + widget.type" style="width: 100%" placeholder="Widget Reference"/>
378 <t t-name="FieldBoolean">
379 <input type="checkbox"
380 t-att-name="widget.name"
381 t-att-id="widget.element_id + '_field'"
382 t-att-class="'field_' + widget.type"/>
384 <t t-name="FieldProgressBar">
385 <div t-opentag="true" class="oe-progressbar">
389 <t t-name="FieldImage">
390 <table cellpadding="0" cellspacing="0" border="0">
393 <img src="/base/static/src/img/placeholder.png" class="oe-binary-image" border="1"
394 t-att-id="widget.element_id + '_field'"
395 t-att-name="widget.name"
396 t-att-class="'field_' + widget.type"
397 t-att-width="widget.node.attrs.img_width || widget.node.attrs.width"
398 t-att-height="widget.node.attrs.img_height || widget.node.attrs.height"
403 <td align="center" valign="bottom" height="25">
404 <button class="button oe-binary-image-set" type="button" title="Set Image">
405 <img src="/base/static/src/img/icons/STOCK_DIRECTORY.png"/>
407 <!--<button class="button oe-binary-image-save" type="button" title="Save As">
408 <img src="/base/static/src/img/icons/gtk-save.png"/>
410 <button class="button oe-binary-image-clear" type="button" title="Clear">
411 <img src="/base/static/src/img/icons/STOCK_MISSING_IMAGE.png"/>
417 <t t-name="WidgetButton">
418 <button type="button"
419 t-att-id="widget.element_id + '_button'"
420 t-att-title="widget.help"
421 style="width: 100%" class="button">
422 <img t-if="widget.node.attrs.icon" t-att-src="'/base/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
423 <span t-if="widget.string"><t t-esc="widget.string"/></span>
426 <t t-name="SearchView">
427 <h2 class="oe_view_title"><t t-esc="view.attrs['string']"/></h2>
429 <t t-call="SearchView.render_lines"/>
430 <div class="oe_search-view-buttons" style="text-align: right;">
431 <input type="submit" value="Search"/>
432 <input type="reset" value="Clear"/>
433 <button class="oe_search-view-custom-filter-btn">Custom Filter</button>
437 <t t-name="SearchView.render_lines">
438 <table class="oe-searchview-render-line" border="0" cellspacing="0" cellpadding="0"
439 t-foreach="lines" t-as="line">
441 <td t-foreach="line" t-as="widget">
442 <t t-raw="widget.render(defaults)"/>
447 <button t-name="SearchView.filter" type="button"
448 t-att-id="element_id"
449 t-att-title="attrs.help"
450 t-att-class="classes.join(' ')"
451 t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined">
452 <img t-if="attrs.icon" t-att-src="'/base/static/src/img/icons/' + attrs.icon + '.png'" width="16" height="16"/>
453 <br t-if="attrs.icon and attrs.string"/>
454 <t t-esc="attrs.string"/>
456 <span t-name="SearchView.filters" class="filter_label_group"
457 ><t t-foreach="filters" t-as="filter"
458 ><t t-raw="filter.render(defaults)"/></t
460 <t t-name="SearchView.field">
461 <label style="display: block" t-att-title="attrs.help"
462 t-att-for="element_id">
463 <t t-esc="attrs.string || attrs.name"/>
464 <span t-if="attrs.help">(?)</span>
466 <div style="white-space: nowrap;">
467 <input type="text" size="15" t-att-name="attrs.name"
468 t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"
469 t-att-id="element_id"
470 t-att-value="defaults[attrs.name] || ''"/>
471 <t t-if="filters.length" t-raw="filters.render(defaults)"/>
474 <t t-name="SearchView.fields.date">
475 <label style="display: block" t-att-title="attrs.help"
476 t-att-for="element_id">
477 <t t-esc="attrs.string || attrs.name"/>
478 <span t-if="attrs.help">(?)</span>
480 <div style="white-space: nowrap;" t-att-id="element_id">
481 <input t-att-name="attrs.name" type="text" class="field_date"
482 t-att-value="defaults[attrs.name] || ''"
483 t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"/>
485 <input t-att-name="attrs.name" type="text" class="field_date"
486 t-att-value="defaults[attrs.name] || ''"/>
487 <t t-if="filters.length" t-raw="filters.render(defaults)"/>
490 <t t-name="SearchView.field.selection">
491 <label style="display: block" t-att-title="attrs.help"
492 t-att-for="element_id">
493 <t t-esc="attrs.string || attrs.name"/>
494 <span t-if="attrs.help">(?)</span>
496 <div style="white-space: nowrap;">
497 <select t-att-name="attrs.name" t-att-id="element_id"
498 t-att-autofocus="attrs.default_focus === '1' || undefined">
500 <t t-foreach="attrs.selection" t-as="option">
501 <t t-set="selected" t-value="defaults[attrs.name] === option[0]"/>
502 <option t-if="selected"
503 t-att-value="option[0]" selected="selected">
504 <t t-esc="option[1]"/>
506 <option t-if="!selected" t-att-value="option[0]">
507 <t t-esc="option[1]"/>
511 <t t-if="filters.length" t-raw="filters.render(defaults)"/>
514 <t t-name="SearchView.util.expand">
515 <div t-att-class="'searchview_group ' + (expand == '0' ? 'folded' : 'expanded')"
516 t-att-id="element_id">
517 <a t-if="label" class="searchview_group_string" href="#">
520 <div class="searchview_group_content">
525 <t t-name="SearchView.group">
526 <t t-call="SearchView.util.expand">
527 <t t-set="expand" t-value="attrs.expand"/>
528 <t t-set="label" t-value="attrs.string"/>
530 <t t-call="SearchView.render_lines"/>
534 <t t-name="SearchView.extended_search">
535 <t t-call="SearchView.util.expand">
536 <t t-set="expand" t-value="false"/>
537 <t t-set="label" t-value="'Custom Filters'"/>
539 <div class="searchview_extended_groups_list">
541 <button class="searchview_extended_add_group"
542 type="button"><span>Add group of conditions</span></button>
546 <t t-name="SearchView.extended_search.group">
547 <div t-att-id="element_id" class="searchview_extended_group">
548 <select class="searchview_extended_group_choice">
549 <option value="all">All the following conditions must match</option>
550 <option value="any">Any of the following conditions must match</option>
551 <option value="none">None of the following conditions must match</option>
553 <button class="searchview_extended_delete_group"
554 type="button"><span>Delete this group of conditions</span></button>
555 <div class="searchview_extended_propositions_list">
557 <button class="searchview_extended_add_proposition" type="button"><span>Add condition</span></button>
560 <t t-name="SearchView.extended_search.proposition">
561 <div t-att-id="element_id">
562 <select class="searchview_extended_prop_field">
563 <t t-foreach="attrs.fields" t-as="field">
564 <option t-att="{'selected': field === attrs.selected ? 'selected' : null}"
565 t-att-value="field.name">
566 <t t-esc="field.string"/>
570 <select class="searchview_extended_prop_op"/>
571 <span class="searchview_extended_prop_value"/>
572 <button class="searchview_extended_delete_prop"
573 type="button"><span>Delete this condition</span></button>
576 <t t-name="SearchView.extended_search.proposition.char">
577 <input t-att-id="element_id" class="field_char"/>
579 <t t-name="SearchView.extended_search.proposition.datetime">
580 <input t-att-id="element_id" class="field_datetime"/>
582 <t t-name="SearchView.extended_search.proposition.date">
583 <input t-att-id="element_id" class="field_date"/>
585 <t t-name="SearchView.extended_search.proposition.integer">
586 <input type="number" t-att-id="element_id" class="field_integer" step="1"/>
588 <t t-name="SearchView.extended_search.proposition.float">
589 <input type="number" t-att-id="element_id" class="field_float" step="0.01"/>
591 <t t-name="SearchView.extended_search.proposition.boolean">
593 <t t-name="SearchView.extended_search.proposition.selection">
594 <select t-att-id="element_id">
595 <t t-foreach="field.selection" t-as="element">
596 <option t-att-value="element[0]"><t t-esc="element[1]"/></option>
600 <t t-name="ViewManager.sidebar">
601 <div t-att-id="element_id" class="sidebar-main-div closed-sidebar">
605 <t t-name="ViewManager.sidebar.internal">
606 <a class="toggle-sidebar"></a>
607 <div t-att-id="element_id" class="sidebar-sub-div">
608 <div class="sidebar-displaying-div">
609 <t t-set="i" t-value="1-1"/> <!-- al do stupid things -->
610 <t t-foreach="sections" t-as="section">
611 <t t-if="section.elements.length > 0">
612 <h2><t t-esc="section.label"/></h2>
614 <t t-set="j" t-value="1-1"/>
615 <t t-foreach="section.elements" t-as="element">
616 <li><a class="oe_sidebar_action_a" t-att-data-i="i" t-att-data-j="j" href="#">
617 <t t-esc="element.name"/></a></li>
618 <t t-set="j" t-value="j+1"/>
622 <t t-set="i" t-value="i+1"/>
627 <t t-name="DialogWarning">
628 <div id="dialog-message" t-att-title="title">
630 <span class="ui-icon ui-icon-circle-check" style="float:left; margin:0 7px 50px 0;"></span>
635 <t t-name="Many2XSelectPopup">
636 <div t-att-id="element_id">
637 <div t-att-id="element_id + '_search'"></div>
638 <div t-att-id="element_id + '_view_list'"></div>
639 <div t-att-id="element_id + '_view_form'"></div>
642 <t t-name="Many2XSelectPopup.search.buttons">
643 <button type="button" class="oe_many2xselectpopup-search-new">New</button>
644 <button type="button" class="oe_many2xselectpopup-search-close">Close</button>
646 <t t-name="Many2XSelectPopup.form.buttons">
647 <button type="button" class="oe_many2xselectpopup-form-save">Save</button>
648 <button type="button" class="oe_many2xselectpopup-form-close">Close</button>