tryton-sao 5.0.45 → 5.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG +3 -0
- package/dist/tryton-sao.js +1 -1
- package/dist/tryton-sao.min.js +2 -2
- package/package.json +1 -1
- package/src/common.js +1 -1
package/CHANGELOG
CHANGED
package/dist/tryton-sao.js
CHANGED
|
@@ -18179,7 +18179,7 @@ function eval_pyson(value){
|
|
|
18179
18179
|
},
|
|
18180
18180
|
default_operator: function(field) {
|
|
18181
18181
|
if (~['char', 'text', 'many2one', 'many2many', 'one2many',
|
|
18182
|
-
'reference'].indexOf(field.type)) {
|
|
18182
|
+
'reference', 'one2one'].indexOf(field.type)) {
|
|
18183
18183
|
return 'ilike';
|
|
18184
18184
|
} else {
|
|
18185
18185
|
return '=';
|
package/dist/tryton-sao.min.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! tryton-sao-5.0.
|
|
1
|
+
/*! tryton-sao-5.0.46 | GPL-3
|
|
2
2
|
This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
3
3
|
this repository contains the full copyright notices and license terms. */
|
|
4
4
|
function eval_pyson(value){with(Sao.PYSON.eval)return eval("("+value+")")}var Sao={};!function(){"use strict";function a(){return[{shortcut:"alt+n",label:Sao.i18n.gettext("New"),id:"new_"},{shortcut:"ctrl+s",label:Sao.i18n.gettext("Save"),id:"save"},{shortcut:"ctrl+l",label:Sao.i18n.gettext("Switch"),id:"switch_"},{shortcut:"ctrl+r",label:Sao.i18n.gettext("Reload/Undo"),id:"reload"},{shortcut:"ctrl+shift+d",label:Sao.i18n.gettext("Duplicate"),id:"copy"},{shortcut:"ctrl+d",label:Sao.i18n.gettext("Delete"),id:"delete_"},{shortcut:"ctrl+up",label:Sao.i18n.gettext("Previous"),id:"previous"},{shortcut:"ctrl+down",label:Sao.i18n.gettext("Next"),id:"next"},{shortcut:"ctrl+f",label:Sao.i18n.gettext("Search"),id:"search"},{shortcut:"alt+w",label:Sao.i18n.gettext("Close Tab"),id:"close"},{shortcut:"ctrl+shift+t",label:Sao.i18n.gettext("Attachment"),id:"attach"},{shortcut:"ctrl+shift+o",label:Sao.i18n.gettext("Note"),id:"note"},{shortcut:"ctrl+e",label:Sao.i18n.gettext("Action"),id:"action"},{shortcut:"ctrl+shift+r",label:Sao.i18n.gettext("Relate"),id:"relate"},{shortcut:"ctrl+p",label:Sao.i18n.gettext("Print"),id:"print"},{shortcut:"ctrl+left",label:Sao.i18n.gettext("Previous tab"),callback:function(){Sao.Tab.previous_tab()}},{shortcut:"ctrl+right",label:Sao.i18n.gettext("Next tab"),callback:function(){Sao.Tab.next_tab()}},{shortcut:"ctrl+k",label:Sao.i18n.gettext("Global search"),callback:function(){jQuery("#global-search-entry").focus()}},{shortcut:"f1",label:Sao.i18n.gettext("Show this help"),callback:function(){c()}}]}function b(){"undefined"!=typeof Mousetrap&&a().forEach(function(a){Mousetrap.bind(a.shortcut,function(){if(a.id){var b=Sao.Tab.tabs.get_current();if(b){var c=$(":focus");c.blur(),b.el.find('a[id="'+a.id+'"]').click(),c.focus()}}else a.callback&&jQuery.when().then(a.callback);return!1})})}function c(){var b=new Sao.Dialog(Sao.i18n.gettext("Keyboard shortcuts"),"shortcut-dialog","m");jQuery("<button>",{class:"close","data-dismiss":"modal","aria-label":Sao.i18n.gettext("Close")}).append(jQuery("<span>",{"aria-hidden":!0}).append("×")).prependTo(b.header);var c=jQuery("<div/>",{class:"row"}).appendTo(b.body),d=jQuery("<dl/>",{class:"dl-horizontal col-md-6"}).append(jQuery("<h5/>").text(Sao.i18n.gettext("Global shortcuts"))).appendTo(c),e=jQuery("<dl/>",{class:"dl-horizontal col-md-6"}).append(jQuery("<h5/>").text(Sao.i18n.gettext("Tab shortcuts"))).appendTo(c);return a().forEach(function(a){var b,c=jQuery("<dt/>").text(a.label),f=jQuery("<dd/>").append(jQuery("<kbd>").text(a.shortcut));b=a.id?e:d,c.appendTo(b),f.appendTo(b)}),b.modal.on("hidden.bs.modal",function(){jQuery(this).remove()}),b.modal.modal("show"),!1}function d(){var a=1040;jQuery(".modal.in").each(function(b){var c=jQuery(this);a++,c.css("zIndex",a),c.next(".modal-backdrop.in").addClass("hidden").css("zIndex",a-1)}),jQuery(".modal.in:visible:last").focus().next(".modal-backdrop.in").removeClass("hidden")}"contains"in String.prototype||(String.prototype.contains=function(a,b){return-1!==String.prototype.indexOf.call(this,a,b)}),String.prototype.startsWith||Object.defineProperty(String.prototype,"startsWith",{enumerable:!1,configurable:!1,writable:!1,value:function(a,b){return b=b||0,this.indexOf(a,b)===b}}),String.prototype.endsWith||Object.defineProperty(String.prototype,"endsWith",{enumerable:!1,configurable:!1,writable:!1,value:function(a,b){b=b||this.length,b-=a.length;var c=this.lastIndexOf(a);return-1!==c&&c===b}}),String.prototype.padEnd||(String.prototype.padEnd=function(a,b){return a>>=0,b=String(void 0!==b?b:" "),this.length>a?String(this):(a-=this.length,a>b.length&&(b+=b.repeat(a/b.length)),String(this)+b.slice(0,a))}),String.prototype.padStart||(String.prototype.padStart=function(a,b){return a>>=0,b=String(void 0!==b?b:" "),this.length>a?String(this):(a-=this.length,a>b.length&&(b+=b.repeat(a/b.length)),b.slice(0,a)+String(this))}),Array.prototype.some||(Array.prototype.some=function(a){if(null===this)throw new TypeError;var b,c,d=Object(this),e=d.length>>>0;if("function"!=typeof a)throw new TypeError;for(b=arguments[1],c=0;c<e;c++)if(c in d&&a.call(b,d[c],c,d))return!0;return!1}),Array.from||(Array.from=function(a){var b=[];return a.forEach(function(a){b.push(a)}),b});try{document.execCommand("styleWithCSS",!1,!1)}catch(g){}try{document.execCommand("useCSS",!1,!0)}catch(g){}jQuery.fn.extend({uniqueId:function(){var a=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})}}()}),window.onbeforeunload=function(a){if(Sao.main_menu_screen&&Sao.main_menu_screen.save_tree_state(!0),Sao.Tab.tabs.length){var b=Sao.i18n.gettext("Are your sure to leave?");return a.returnValue=b,b}},Sao.class_=function(a,b){var c=function(){if(!(this instanceof c))throw new Error("Constructor function requires new operator");this.Class=c,this.init&&this.init.apply(this,arguments)};if(c.prototype=Object.create(a.prototype),c._super=a.prototype,b)for(var d in b)c.prototype[d]=b[d];return c},Sao.Decimal=Number;var e=moment.prototype.toString;moment.prototype.toString=function(){return this.isDate?this.format("YYYY-MM-DD"):this.isDateTime?this.milliseconds()?this.format("YYYY-MM-DD HH:mm:ss.SSSSSS"):this.format("YYYY-MM-DD HH:mm:ss"):this.isTime?this.milliseconds()?this.format("HH:mm:ss.SSSSSS"):this.format("HH:mm:ss"):e.call(this)},Sao.Date=function(a,b,c){var d;return void 0===b?(d=moment(a),a=void 0):d=moment(),d.year(a),d.month(b),d.date(c),d.set({hour:0,minute:0,second:0,millisecond:0}),d.isDate=!0,d},Sao.Date.min=moment(new Date(864e5*(1-1e8))),Sao.Date.min.set({hour:0,minute:0,second:0,millisecond:0}),Sao.Date.min.isDate=!0,Sao.Date.max=moment(new Date(864e13)),Sao.Date.max.set({hour:0,minute:0,second:0,millisecond:0}),Sao.Date.max.isDate=!0,Sao.DateTime=function(a,b,c,d,e,f,g,h){var i;return void 0===b?(i=moment(a),a=void 0):(void 0===d&&(d=0),void 0===e&&(e=0),void 0===f&&(f=0),void 0===g&&(g=0),i=moment()),h&&i.utc(),i.year(a),i.month(b),i.date(c),void 0!==b&&(i.hour(d),i.minute(e),i.second(f),i.milliseconds(g)),i.isDateTime=!0,i.local(),i},Sao.DateTime.combine=function(a,b){var c=a.clone();return c.set({hour:b.hour(),minute:b.minute(),second:b.second(),millisecond:b.millisecond()}),c.isDateTime=!0,c},Sao.DateTime.min=moment(new Date(-864e13)).local(),Sao.DateTime.min.isDateTime=!0,Sao.DateTime.max=moment(new Date(864e13)).local(),Sao.DateTime.max.isDateTime=!0,Sao.Time=function(a,b,c,d){var e=moment({hour:a,minute:b,second:c,millisecond:d||0});return e.isTime=!0,e},Sao.TimeDelta=function(a,b,c,d,e,f){var g=moment.duration({days:a,seconds:b,milliseconds:c,minutes:d,hours:e,weeks:f});return g.isTimeDelta=!0,g},Sao.config={},Sao.config.limit=1e3,Sao.config.display_size=20,Sao.config.roundup={},Sao.config.roundup.url="http://bugs.tryton.org/roundup/",Sao.config.title="Tryton",Sao.config.icon_color="#3465a4",Sao.config.bus_timeout=6e5,Sao.i18n=i18n(),Sao.i18n.setlang=function(a){return a||(a=(navigator.language||navigator.browserLanguage||navigator.userLanguage||"en").replace("-","_")),jQuery("html").attr("lang",a),Sao.i18n.setLocale(a),moment.locale(a.slice(0,2)),jQuery.getJSON("locale/"+a+".json").then(function(b){b[""].language||(b[""].language=a),b[""]["plural-forms"]||(b[""]["plural-forms"]="nplurals=2; plural=(n!=1);");for(var c in b)""!==c&&(b[c]=2==b[c].length?b[c][1]:b[c].slice(1));Sao.i18n.loadJSON(b)},function(){if(~a.indexOf("_"))return Sao.i18n.setlang(a.split("_").slice(0,-1).join("_"))})},Sao.i18n.getlang=function(){return Sao.i18n.getLocale()},Sao.i18n.BC47=function(a){return a.replace("_","-")},Sao.i18n.set_direction=function(a){Sao.i18n.rtl="rtl"===a,jQuery("html").attr("dir",a),jQuery(".row-offcanvas").removeClass("row-offcanvas-left row-offcanvas-right").addClass(Sao.i18n.rtl?"row-offcanvas-right":"row-offcanvas-left")},Sao.i18n.locale={},Sao.get_preferences=function(){var a=Sao.Session.current_session;return a.reload_context().then(function(){return Sao.rpc({method:"model.res.user.get_preferences",params:[!1,{}]},a).then(function(a){var b=[];return b.push(Sao.common.MODELACCESS.load_models()),b.push(Sao.common.ICONFACTORY.load_icons()),b.push(Sao.common.MODELHISTORY.load_history()),b.push(Sao.common.VIEW_SEARCH.load_searches()),jQuery.when.apply(jQuery,b).then(function(){(a.actions||[]).forEach(function(a){Sao.Action.execute(a,{},null,{})}),Sao.set_title(),Sao.common.ICONFACTORY.get_icon_url("tryton-menu").then(function(a){jQuery(".navbar-brand > img").attr("src",a)});var b=a.language!=Sao.i18n.getLocale(),c=jQuery.Deferred();return Sao.i18n.setlang(a.language).always(function(){b&&Sao.user_menu(a),c.resolve(a)}),Sao.i18n.set_direction(a.language_direction),Sao.i18n.locale=a.locale,c})})})},Sao.set_title=function(a){var b=[a,Sao.config.title];document.title=b.filter(function(a){return a}).join(" - "),jQuery("#title").text(Sao.config.title)},Sao.set_url=function(a,b){var c=Sao.Session.current_session;if(c){var d="#"+c.database;a&&(d+="/"+a),window.location=d}Sao.set_title(b)},window.onhashchange=function(){var a=Sao.Session.current_session;if(a){var b,c="#"+a.database;if(window.location.hash==c)b="";else{if(!window.location.hash.startsWith(c+"/"))return;b=window.location.hash.substr(c.length+1)}var d;if(b){b=decodeURIComponent(b);for(var e=0;e<Sao.Tab.tabs.length;e++)if(d=Sao.Tab.tabs[e],decodeURIComponent(d.get_url())==b)return void d.show();Sao.open_url()}else(d=Sao.Tab.tabs.get_current())&&Sao.set_url(d.get_url(),d.name)}},Sao.open_url=function(a){function b(a){return Sao.rpc.convertJSONObject(jQuery.parseJSON(a))}function c(a){var c={};if(c.model=a.shift(),c.model){try{c.view_ids=b(i.views||"[]"),c.limit=b(i.limi||"null"),c.name=b(i.name||'""'),c.search_value=b(i.search_value||"[]"),c.domain=b(i.domain||"[]"),c.context=b(i.context||"{}"),c.context_model=i.context_model}catch(g){return}var d=a.shift();if(d){if(d=Number(d),isNaN(d))return;c.res_id=d,c.mode=["form","tree"]}try{Sao.Tab.create(c)}catch(g){return}}}function d(a){var c={};if(c.name=a[0],c.name){try{c.data=b(i.data||"{}"),c.direct_print=b(i.direct_print||"false"),c.email_print=b(i.email_print||"false"),c.email=b(i.email||"null"),c.name=b(i.name||'""'),c.window=b(i.window||"false"),c.context=b(i.context||"{}")}catch(g){return}try{Sao.Wizard.create(c)}catch(g){return}}}function e(a){var c={};if(c.name=a[0],c.name){try{c.data=b(i.data||"{}"),c.direct_print=b(i.direct_print||"false"),c.email_print=b(i.email_print||"false"),c.email=b(i.email||"null"),c.context=b(i.context||"{}")}catch(g){return}try{Sao.Action.exec_report(c)}catch(g){return}}}function f(){var a;try{a=b(i.url||"false")}catch(g){return}a&&window.open(a,"_blank","noreferrer,noopener")}void 0===a&&(a=window.location.hash.substr(1));var g,h=a.indexOf(";"),i={};switch(h>=0?(g=a.substring(0,h),a.substring(h+1).split("&").forEach(function(a){if(a){var b=a.split("=").map(decodeURIComponent);i[b[0]]=b[1]}})):g=a,g=g.split("/").slice(1),g.shift()){case"model":c(g);break;case"wizard":d(g);break;case"report":e(g);break;case"url":f()}},Sao.login=function(){Sao.set_title(),Sao.i18n.setlang().always(function(){Sao.Session.get_credentials().then(function(a){return Sao.Session.current_session=a,a.reload_context()}).then(Sao.get_preferences).then(function(a){Sao.menu(a),Sao.user_menu(a),Sao.open_url(),Sao.Bus.listen()})})},Sao.logout=function(){var a=Sao.Session.current_session;Sao.Tab.tabs.close(!0).done(function(){jQuery("#user-preferences").children().remove(),jQuery("#user-logout").children().remove(),jQuery("#user-favorites").children().remove(),jQuery("#global-search").children().remove(),jQuery("#menu").children().remove(),a.do_logout().always(Sao.login),Sao.set_title()})},Sao.preferences=function(){Sao.Tab.tabs.close(!0).done(function(){jQuery("#user-preferences").children().remove(),jQuery("#user-favorites").children().remove(),jQuery("#user-logout").children().remove(),jQuery("#menu").children().remove(),new Sao.Window.Preferences(function(){Sao.get_preferences().then(function(a){Sao.menu(a),Sao.user_menu(a)})})})},Sao.favorites_menu=function(){if(jQuery(window).click(function(){Sao.favorites_menu_clear()}),!jQuery("#user-favorites").children(".dropdown-menu").length){var a=Sao.main_menu_screen.model_name+".favorite",b=Sao.Session.current_session,c={method:"model."+a+".get"},d=jQuery("<ul/>",{class:"dropdown-menu","aria-expanded":"false","aria-labelledby":"user-favorites"});jQuery("#user-favorites").append(d),Sao.rpc(c,b).then(function(a){a.forEach(function(a){var b=jQuery("<a/>",{href:"#"}),c=a[0],e=jQuery("<li/>",{role:"presentation"}),f=Sao.common.ICONFACTORY.get_icon_img(a[2],{class:"favorite-icon"});b.append(f),e.append(b),b.append(a[1]),b.click(function(a){a.preventDefault(),Sao.favorites_menu_clear(),Sao.Action.exec_keyword("tree_open",{model:Sao.main_menu_screen.model_name,id:c})}),d.append(e)}),d.append(jQuery("<li/>",{class:"divider"})),jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{href:"#"}).click(function(a){a.preventDefault(),Sao.favorites_menu_clear(),Sao.Tab.create({model:Sao.main_menu_screen.model_name+".favorite",mode:["tree","form"],name:Sao.i18n.gettext("Favorites")})}).text(Sao.i18n.gettext("Manage..."))).appendTo(d)})}},Sao.favorites_menu_clear=function(){jQuery("#user-favorites").children(".dropdown-menu").remove()},Sao.user_menu=function(a){jQuery("#user-preferences").children().remove(),jQuery("#user-favorites").children().remove(),jQuery("#user-logout").children().remove(),jQuery("#user-preferences").append(jQuery("<a/>",{href:"#",title:a.status_bar}).click(function(a){a.preventDefault(),Sao.preferences()}).text(a.status_bar));var b=Sao.i18n.gettext("Logout");jQuery("#user-logout").append(jQuery("<a/>",{href:"#",title:b,"aria-label":b}).click(Sao.logout).append(Sao.common.ICONFACTORY.get_icon_img("tryton-exit",{class:"icon hidden-xs","aria-hidden":!0})).append(jQuery("<span/>",{class:"visible-xs"}).text(b)))},Sao.main_menu_row_activate=function(){var a=Sao.main_menu_screen;return Sao.Action.exec_keyword("tree_open",{model:a.model_name,id:a.get_id()},null,!1)},Sao.menu=function(a){if(!a){var b=Sao.Session.current_session;return void Sao.rpc({method:"model.res.user.get_preferences",params:[!1,{}]},b).then(Sao.menu)}var c=new Sao.PYSON.Decoder,d=c.decode(a.pyson_menu),e=!1;jQuery.isEmptyObject(d.views)?d.view_id&&(e=[d.view_id[0]]):e=d.views.map(function(a){return a[0]}),c=new Sao.PYSON.Decoder(Sao.Session.current_session.context);var g=c.decode(d.pyson_context||"{}"),h=c.decode(d.pyson_domain),i=new Sao.Tab.Form(d.res_model,{mode:["tree"],view_ids:e,domain:h,context:g,selection_mode:Sao.common.SELECTION_NONE,limit:null,row_activate:Sao.main_menu_row_activate});Sao.main_menu_screen=i.screen,Sao.main_menu_screen.switch_callback=null,Sao.Tab.tabs.splice(Sao.Tab.tabs.indexOf(i),1),i.view_prm.done(function(){var a=i.screen.current_view;a.table.removeClass("table table-bordered table-striped"),a.table.addClass("no-responsive"),a.table.find("thead").hide();var b=new Sao.GlobalSearch;jQuery("#global-search").children().remove(),jQuery("#global-search").append(b.el),jQuery("#menu").children().remove(),jQuery("#menu").append(i.screen.screen_container.content_box.detach());var c=new f(i.screen.model.fields.favorite);i.screen.views[0].table.find("> colgroup").append(c.col),i.screen.views[0].table.find("> thead > tr").append(c.header),i.screen.views[0].columns.push(c)})},Sao.main_menu_screen=null;var f=Sao.class_(Object,{init:function(a){this.field=a,this.col=jQuery("<col/>",{class:"favorite"}),this.header=jQuery("<th/>"),this.footers=[],this.attributes=jQuery.extend({},this.field.description),this.attributes.name=this.field.name},get_cell:function(){return jQuery("<img/>",{class:"column-affix",tabindex:0})},render:function(a,b){return b||(b=this.get_cell()),a.load(this.field.name).done(function(){if(null!==a._values.favorite){var c="tryton-star";a._values.favorite||(c+="-border"),b.data("star",Boolean(a._values.favorite)),Sao.common.ICONFACTORY.get_icon_url(c).then(function(a){b.attr("src",a)}),b.click({record:a,button:b},this.favorite_click)}}.bind(this)),b},favorite_click:function(a){a.stopImmediatePropagation();var b,c,d=a.data.button,e=d.data("star");e?(c="tryton-star-border",b="unset"):(c="tryton-star",b="set"),d.data("star",!e),Sao.common.ICONFACTORY.get_icon_url(c).then(function(a){d.attr("src",a)});var f=Sao.main_menu_screen.model_name+".favorite",g=Sao.Session.current_session,h={method:"model."+f+"."+b,params:[a.data.record.id,g.context]};Sao.rpc(h,g),Sao.favorites_menu_clear()}});Sao.Dialog=Sao.class_(Object,{init:function(a,b,c,d){c=c||"sm",void 0===d&&(d=!0),this.modal=jQuery("<div/>",{class:b+" modal fade",role:"dialog","data-backdrop":"static","data-keyboard":d}),this.content=jQuery("<form/>",{class:"modal-content"}).appendTo(jQuery("<div/>",{class:"modal-dialog modal-"+c}).appendTo(this.modal)),this.header=jQuery("<div/>",{class:"modal-header"}).appendTo(this.content),a&&this.add_title(a),this.body=jQuery("<div/>",{class:"modal-body"}).appendTo(this.content),this.footer=jQuery("<div/>",{class:"modal-footer"}).appendTo(this.content),this.modal.on("shown.bs.modal",function(){jQuery(document.activeElement).closest(this.el)>0||jQuery(this).find(':input:visible:not([readonly]):not([tabindex^="-"]):first').focus()})},add_title:function(a){this.header.append(jQuery("<h4/>",{class:"modal-title"}).text(a))}}),Sao.GlobalSearch=Sao.class_(Object,{init:function(){this.el=jQuery("<div/>",{class:"global-search-container"});var a=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(this.el);jQuery("<div/>",{id:"user-favorites",class:"input-group-btn"}).append(jQuery("<button/>",{class:"btn btn-default dropdown-toggle","data-toggle":"dropdown","aria-haspopup":!0,"aria-expanded":!1,title:Sao.i18n.gettext("Favorites"),"aria-label":Sao.i18n.gettext("Favorites")}).click(Sao.favorites_menu).append(Sao.common.ICONFACTORY.get_icon_img("tryton-bookmarks"))).appendTo(a),this.search_entry=jQuery("<input>",{id:"global-search-entry",class:"form-control mousetrap",placeholder:Sao.i18n.gettext("Action")}).appendTo(a);var b=new Sao.common.InputCompletion(this.el,this.update.bind(this),this.match_selected.bind(this),this.format.bind(this));b.input.keydown(function(a){a.which==Sao.common.RETURN_KEYCODE&&(b.dropdown.hasClass("open")||(a.preventDefault(),b.menu.dropdown("toggle")))})},format:function(a){var b=jQuery("<div/>");return Sao.common.ICONFACTORY.get_icon_img(a.icon,{class:"global_search-icon"}).appendTo(b),jQuery("<span/>",{class:"global-search-text"}).text(a.record_name).appendTo(b),b},update:function(a){var b=new Sao.Model("ir.model");return a?b.execute("global_search",[a,Sao.config.limit,Sao.main_menu_screen.model_name],Sao.main_menu_screen.context()).then(function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push({model:a[c][1],model_name:a[c][2],record_id:a[c][3],record_name:a[c][4],icon:a[c][5]});return b}.bind(this)):jQuery.when([])},match_selected:function(a){if(a.model==Sao.main_menu_screen.model_name)Sao.Action.exec_keyword("tree_open",{model:a.model,id:a.record_id});else{var b={model:a.model,res_id:a.record_id,mode:["form","tree"],name:a.model_name};Sao.Tab.create(b)}this.search_entry.val("")}}),jQuery(document).ready(function(){b();try{Notification.requestPermission()}catch(g){(console.error||console.log).call(console,g,g.stack)}Sao.login()}),jQuery(document).on("show.bs.modal",".modal",function(a){jQuery(this).appendTo(jQuery("body"))}).on("shown.bs.modal",".modal.in",function(a){d()}).on("hidden.bs.modal",".modal",function(a){d(),jQuery(".modal:visible").length&&$(document.body).addClass("modal-open")})}(),function(){"use strict";Sao.rpc=function(a,b,c){var d,e=jQuery.Deferred();b||(b=new Sao.Session),void 0===c&&(c=!0);var f=jQuery.extend([],a.params);f.push(jQuery.extend({},b.context,f.pop()));var g=Sao.common.processing.show(),h=function(f){if(null===f)Sao.common.warning.run("",Sao.i18n.gettext("Unable to reach the server")).always(e.reject);else if(f.error){var g,h,i;if("UserWarning"==f.error[0])g=f.error[1][0],h=f.error[1][1],i=f.error[1][2],Sao.common.userwarning.run(h,i).then(function(d){if(!~["always","ok"].indexOf(d))return void e.reject();Sao.rpc({method:"model.res.user.warning.create",params:[[{user:b.user_id,name:g,always:"always"==d}],{}]},b).done(function(){c?Sao.rpc(a,b).then(e.resolve,e.reject):e.resolve()})},e.reject);else if("UserError"==f.error[0])h=f.error[1][0],i=f.error[1][1],Sao.common.warning.run(i,h).always(e.reject);else if("ConcurrencyException"==f.error[0])if(c&&a.method.startsWith("model.")&&(a.method.endsWith(".write")||a.method.endsWith(".delete"))){var j=a.method.split(".").slice(1,-1).join(".");Sao.common.concurrency.run(j,a.params[0][0],a.params.slice(-1)[0]).then(function(){delete a.params.slice(-1)[0]._timestamp,Sao.rpc(a,b).then(e.resolve,e.reject)},e.reject)}else Sao.common.message.run("Concurrency Exception","tryton-warning").always(e.reject);else Sao.common.error.run(f.error[0],f.error[1]).always(e.reject)}else e.resolve(f.result),d=f.result},i=function(d,f,g){401==d.status?Sao.Session.renew(b).then(function(){c?Sao.rpc(a,b).then(e.resolve,e.reject):e.resolve()},e.reject):Sao.common.error.run(f,g).always(e.reject)};if(jQuery.ajax({async:c,headers:{Authorization:"Session "+b.get_auth()},contentType:"application/json",data:JSON.stringify(Sao.rpc.prepareObject({id:Sao.rpc.id++,method:a.method,params:f})),dataType:"json",url:"/"+(b.database||"")+"/",type:"post",complete:[function(){Sao.common.processing.hide(g)}],success:h,error:i}),c)return e.promise();if(void 0===d)throw e;return d},Sao.rpc.id=0,Sao.rpc.convertJSONObject=function(a,b,c){if(a instanceof Array)for(var d=0,e=a.length;d<e;d++)Sao.rpc.convertJSONObject(a[d],d,a);else if("string"!=typeof a&&"number"!=typeof a&&null!==a)if(a&&a.__class__){switch(a.__class__){case"datetime":a=Sao.DateTime(a.year,a.month-1,a.day,a.hour,a.minute,a.second,Math.ceil(a.microsecond/1e3),!0);break;case"date":a=Sao.Date(a.year,a.month-1,a.day);break;case"time":a=Sao.Time(a.hour,a.minute,a.second,Math.ceil(a.microsecond/1e3));break;case"timedelta":a=Sao.TimeDelta(null,a.seconds);break;case"bytes":for(var f=atob(a.base64.replace(/\s/g,"")),g=new ArrayBuffer(f.length),h=new Uint8Array(g),i=0;i<f.length;i++)h[i]=f.charCodeAt(i);a=h;break;case"Decimal":a=new Sao.Decimal(a.decimal)}c&&(c[b]=a)}else for(var j in a)Sao.rpc.convertJSONObject(a[j],j,a);return c||a},Sao.rpc.prepareObject=function(a,b,c){if(a instanceof Array){a=jQuery.extend([],a);for(var d=0,e=a.length;d<e;d++)Sao.rpc.prepareObject(a[d],d,a)}else if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a&&null!==a&&void 0!==a)if(a.isDate)a={__class__:"date",year:a.year(),month:a.month()+1,day:a.date()};else if(a.isDateTime)a=a.clone(),a={__class__:"datetime",year:a.utc().year(),month:a.utc().month()+1,day:a.utc().date(),hour:a.utc().hour(),minute:a.utc().minute(),second:a.utc().second(),microsecond:1e3*a.utc().millisecond()};else if(a.isTime)a={__class__:"time",hour:a.hour(),minute:a.minute(),second:a.second(),microsecond:1e3*a.millisecond()};else if(a.isTimeDelta)a={__class__:"timedelta",seconds:a.asSeconds()};else if(a instanceof Sao.Decimal)a={__class__:"Decimal",decimal:a.toString()};else if(a instanceof Uint8Array){for(var f=[],g=65535,h=0;h*g<a.length;h++)f.push(String.fromCharCode.apply(null,a.subarray(h*g,(h+1)*g)));a={__class__:"bytes",base64:btoa(f.join(""))}}else{a=jQuery.extend({},a);for(var i in a)Sao.rpc.prepareObject(a[i],i,a)}return c&&(c[b]=a),c||a},jQuery.ajaxSetup({converters:{"text json":function(a){return Sao.rpc.convertJSONObject(jQuery.parseJSON(a))}}})}(),function(){"use strict";Sao.PYSON={},Sao.PYSON.eval={},Sao.PYSON.toString=function(a){return a instanceof Sao.PYSON.PYSON?a.toString():a instanceof Array?"["+a.map(Sao.PYSON.toString).join(", ")+"]":a instanceof Object?"{"+Object.keys(a).map(function(b){return Sao.PYSON.toString(b)+": "+Sao.PYSON.toString(a[b])}).join(", ")+"}":JSON.stringify(a)},Sao.PYSON.PYSON=Sao.class_(Object,{init:function(){},pyson:function(){throw"NotImplementedError"},types:function(){throw"NotImplementedError"},toString:function(){return this.pyson().__class__+"("+this.__string_params__().map(Sao.PYSON.toString).join(", ")+")"},__string_params__:function(){throw"NotImplementedError"}}),Sao.PYSON.PYSON.eval_=function(a,b){throw"NotImplementedError"},Sao.PYSON.PYSON.init_from_object=function(a){throw"NotImplementedError"},Sao.PYSON.Encoder=Sao.class_(Object,{prepare:function(a,b,c){if(null!==a&&void 0!==a)if(a instanceof Array){a=jQuery.extend([],a);for(var d=0,e=a.length;d<e;d++)this.prepare(a[d],d,a)}else if(a._isAMomentObject)a=a.isDate?new Sao.PYSON.Date(a.year(),a.month()+1,a.date()).pyson():new Sao.PYSON.DateTime(a.year(),a.month()+1,a.date(),a.hours(),a.minutes(),a.seconds(),1e3*a.milliseconds()).pyson();else if(a instanceof Sao.Decimal)a=a.valueOf();else if(a instanceof Object&&!(a instanceof Sao.PYSON.PYSON)){a=jQuery.extend({},a);for(var f in a)this.prepare(a[f],f,a)}return c&&(c[b]=a),c||a},encode:function(a){return a=this.prepare(a),JSON.stringify(a,function(a,b){return b instanceof Sao.PYSON.PYSON?this.prepare(b.pyson()):null===b||void 0===b?null:b}.bind(this))}}),Sao.PYSON.Decoder=Sao.class_(Object,{init:function(a,b){this.__context=a||{},this.noeval=b||!1},decode:function(a){var b=function(a,b){if("object"==typeof b&&null!==b){var c=Sao.PYSON[b.__class__];if(c){if(this.noeval){var d=jQuery.extend({},b);return delete d.__class__,Sao.PYSON[b.__class__].init_from_object(d)}return c.eval_(b,this.__context)}}return b};return JSON.parse(a,b.bind(this))}}),Sao.PYSON.eval.Eval=function(a,b){return new Sao.PYSON.Eval(a,b)},Sao.PYSON.Eval=Sao.class_(Sao.PYSON.PYSON,{init:function(a,b){void 0===b&&(b=""),Sao.PYSON.Eval._super.init.call(this),this._value=a,this._default=b},pyson:function(){return{__class__:"Eval",v:this._value,d:this._default}},types:function(){return this._default instanceof Sao.PYSON.PYSON?this._default.types():[typeof this._default]},__string_params__:function(){return[this._value,this._default]}}),Sao.PYSON.Eval.eval_=function(a,b){return a.v in b?b[a.v]:a.d},Sao.PYSON.Eval.init_from_object=function(a){return new Sao.PYSON.Eval(a.v,a.d)},Sao.PYSON.eval.Not=function(a){return new Sao.PYSON.Not(a)},Sao.PYSON.Not=Sao.class_(Sao.PYSON.PYSON,{init:function(a){Sao.PYSON.Not._super.init.call(this),a instanceof Sao.PYSON.PYSON?(jQuery(a.types()).not(["boolean","object"]).length||jQuery(["boolean"]).not(a.types()).length)&&(a=new Sao.PYSON.Bool(a)):"boolean"!=typeof a&&(a=Sao.PYSON.Bool(a)),this._value=a},pyson:function(){return{__class__:"Not",v:this._value}},types:function(){return["boolean"]},__string_params__:function(){return[this._value]}}),Sao.PYSON.Not.eval_=function(a,b){return!a.v},Sao.PYSON.Not.init_from_object=function(a){return new Sao.PYSON.Not(a.v)},Sao.PYSON.eval.Bool=function(a){return new Sao.PYSON.Bool(a)},Sao.PYSON.Bool=Sao.class_(Sao.PYSON.PYSON,{init:function(a){Sao.PYSON.Bool._super.init.call(this),this._value=a},pyson:function(){return{__class__:"Bool",v:this._value}},types:function(){return["boolean"]},__string_params__:function(){return[this._value]}}),Sao.PYSON.Bool.eval_=function(a,b){return moment.isMoment(a.v)&&a.v.isTime?Boolean(a.v.hour()||a.v.minute()||a.v.second()||a.v.millisecond()):moment.isDuration(a.v)?Boolean(a.v.valueOf()):a.v instanceof Number?Boolean(a.v.valueOf()):a.v instanceof Object?!jQuery.isEmptyObject(a.v):Boolean(a.v)},Sao.PYSON.Bool.init_from_object=function(a){return new Sao.PYSON.Bool(a.v)},Sao.PYSON.eval.And=function(a){return new Sao.PYSON.And(a)},Sao.PYSON.And=Sao.class_(Sao.PYSON.PYSON,{init:function(a){void 0===a&&(a=[]),Sao.PYSON.And._super.init.call(this);for(var b=0,c=a.length;b<c;b++){var d=a[b];d instanceof Sao.PYSON.PYSON?(jQuery(d.types()).not(["boolean"]).length||jQuery(["boolean"]).not(d.types()).length)&&(a[b]=new Sao.PYSON.Bool(d)):"boolean"!=typeof d&&(a[b]=new Sao.PYSON.Bool(d))}if(a.length<2)throw"must have at least 2 statements";this._statements=a},pyson:function(){return{__class__:"And",s:this._statements}},types:function(){return["boolean"]},__string_params__:function(){return[this._statements]}}),Sao.PYSON.And.eval_=function(a,b){for(var c=!0,d=0,e=a.s.length;d<e;d++){var f=a.s[d];c=c&&f}return c},Sao.PYSON.And.init_from_object=function(a){return new Sao.PYSON.And(a.s)},Sao.PYSON.eval.Or=function(a){return new Sao.PYSON.Or(a)},Sao.PYSON.Or=Sao.class_(Sao.PYSON.And,{pyson:function(){var a=Sao.PYSON.Or._super.pyson.call(this);return a.__class__="Or",a}}),Sao.PYSON.Or.eval_=function(a,b){for(var c=!1,d=0,e=a.s.length;d<e;d++){var f=a.s[d];c=c||f}return c},Sao.PYSON.Or.init_from_object=function(a){return new Sao.PYSON.Or(a.s)},Sao.PYSON.eval.Equal=function(a,b){return new Sao.PYSON.Equal(a,b)},Sao.PYSON.Equal=Sao.class_(Sao.PYSON.PYSON,{init:function(a,b){Sao.PYSON.Equal._super.init.call(this);var c,d;if(c=a instanceof Sao.PYSON.PYSON?a.types():[typeof a],d=b instanceof Sao.PYSON.PYSON?b.types():[typeof b],jQuery(c).not(d).length||jQuery(d).not(c).length)throw"statements must have the same type";this._statement1=a,this._statement2=b},pyson:function(){return{__class__:"Equal",s1:this._statement1,s2:this._statement2}},types:function(){return["boolean"]},__string_params__:function(){return[this._statement1,this._statement2]}}),Sao.PYSON.Equal.eval_=function(a,b){return a.s1 instanceof Array&&a.s2 instanceof Array?Sao.common.compare(a.s1,a.s2):moment.isMoment(a.s1)&&moment.isMoment(a.s2)?a.s1.isDate==a.s2.isDate&&a.s1.isDateTime==a.s2.isDateTime&&a.s1.valueOf()==a.s2.valueOf():a.s1==a.s2},Sao.PYSON.Equal.init_from_object=function(a){return new Sao.PYSON.Equal(a.s1,a.s2)},Sao.PYSON.eval.Greater=function(a,b,c){return new Sao.PYSON.Greater(a,b,c)},Sao.PYSON.Greater=Sao.class_(Sao.PYSON.PYSON,{init:function(a,b,c){Sao.PYSON.Greater._super.init.call(this);for(var d=[a,b],e=0;e<2;e++){var f=d[e];if(f instanceof Sao.PYSON.PYSON){if(jQuery(f.types()).not(["number"]).length)throw"statement must be an integer or a float"}else if(!~["number","object"].indexOf(typeof f))throw"statement must be an integer or a float"}void 0===c&&(c=!1),c instanceof Sao.PYSON.PYSON?(jQuery(c.types()).not(["boolean"]).length||jQuery(["boolean"]).not(c.types()).length)&&(c=new Sao.PYSON.Bool(c)):"boolean"!=typeof c&&(c=new Sao.PYSON.Bool(c)),this._statement1=a,this._statement2=b,this._equal=c},pyson:function(){return{__class__:"Greater",s1:this._statement1,s2:this._statement2,e:this._equal}},types:function(){return["boolean"]},__string_params__:function(){return[this._statement1,this._statement2,this._equal]}}),Sao.PYSON.Greater._convert=function(a){return a=jQuery.extend({},a),a.s1=Number(a.s1),a.s2=Number(a.s2),a},Sao.PYSON.Greater.eval_=function(a,b){return a=Sao.PYSON.Greater._convert(a),a.e?a.s1>=a.s2:a.s1>a.s2},Sao.PYSON.Greater.init_from_object=function(a){return new Sao.PYSON.Greater(a.s1,a.s2,a.e)},Sao.PYSON.eval.Less=function(a,b,c){return new Sao.PYSON.Less(a,b,c)},Sao.PYSON.Less=Sao.class_(Sao.PYSON.Greater,{pyson:function(){var a=Sao.PYSON.Less._super.pyson.call(this);return a.__class__="Less",a}}),Sao.PYSON.Less._convert=Sao.PYSON.Greater._convert,Sao.PYSON.Less.eval_=function(a,b){return a=Sao.PYSON.Less._convert(a),a.e?a.s1<=a.s2:a.s1<a.s2},Sao.PYSON.Less.init_from_object=function(a){return new Sao.PYSON.Less(a.s1,a.s2,a.e)},Sao.PYSON.eval.If=function(a,b,c){return new Sao.PYSON.If(a,b,c)},Sao.PYSON.If=Sao.class_(Sao.PYSON.PYSON,{init:function(a,b,c){Sao.PYSON.If._super.init.call(this),a instanceof Sao.PYSON.PYSON?(jQuery(a.types()).not(["boolean"]).length||jQuery(["boolean"]).not(a.types()).length)&&(a=new Sao.PYSON.Bool(a)):"boolean"!=typeof a&&(a=new Sao.PYSON.Bool(a));var d,e;if(d=b instanceof Sao.PYSON.PYSON?b.types():[typeof b],void 0===c&&(c=null),e=c instanceof Sao.PYSON.PYSON?c.types():[typeof c],jQuery(d).not(e).length||jQuery(e).not(d).length)throw"then and else statements must be the same type";this._condition=a,this._then_statement=b,this._else_statement=c},pyson:function(){return{__class__:"If",c:this._condition,t:this._then_statement,e:this._else_statement}},
|
|
@@ -10,7 +10,7 @@ Sao.View.Form.Group._super.init.call(this,a),this.el=jQuery("<fieldset/>",{class
|
|
|
10
10
|
sel_multi:!1,context:f,domain:e,order:g,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:this.create_access(),search_filter:i.quote(d),title:this.attributes.string})}}}},_set_completion:function(){var a=this.el.find(".action-search");this.read_access()?a.removeClass("disabled"):a.addClass("disabled");var b=this.el.find(".action-create");this.create_access()?b.removeClass("disabled"):b.addClass("disabled")},_update_completion:function(a){var b=this.record();if(b){var c=this.field(),d=c.get(b);if(this.has_target(d)){var e=this.id_from_value(d);if(void 0!==e&&e>=0)return jQuery.when()}var f=this.get_model();return Sao.common.update_completion(this.entry,b,c,f)}},_completion_match_selected:function(a){this.record().field_set_client(this.field_name,this.value_from_id(a.id,a.rec_name),!0)},_completion_action_activated:function(a){"search"==a?this.edit():"create"==a&&this.new_()}}),Sao.View.Form.One2One=Sao.class_(Sao.View.Form.Many2One,{class_:"form-one2one"}),Sao.View.Form.Reference=Sao.class_(Sao.View.Form.Many2One,{class_:"form-reference",init:function(a,b,c){Sao.View.Form.Reference._super.init.call(this,a,b,c),this.el.addClass("form-inline"),this.select=jQuery("<select/>",{class:"form-control input-sm","aria-label":c.string,title:c.string}),this.el.prepend(jQuery("<span/>").text("-")),this.el.prepend(this.select),this.select.change(this.select_changed.bind(this)),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(a){Sao.common.selection_mixin.init_selection.call(this,a,this.set_selection.bind(this))},update_selection:function(a,b,c){Sao.common.selection_mixin.update_selection.call(this,a,b,function(a){this.set_selection(a),c&&c()}.bind(this))},set_selection:function(a){var b=this.select;b.empty(),a.forEach(function(a){b.append(jQuery("<option/>",{value:a[0],text:a[1]}))})},id_from_value:function(a){return parseInt(a.split(",")[1],10)},value_from_id:function(a,b){return b||(b=""),[this.get_model(),[a,b]]},get_text:function(){var a=this.record();return a?a.field_get_client(this.field_name)[1]:""},get_model:function(){return this.select.val()},has_target:function(a){if(null===a)return!1;var b=a.split(",")[0];return a=a.split(",")[1],jQuery.isEmptyObject(a)?a=null:(a=parseInt(a,10),isNaN(a)&&(a=null)),b==this.get_model()&&a>=0},_set_button_sensitive:function(){Sao.View.Form.Reference._super._set_button_sensitive.call(this),this.select.prop("disabled",this.entry.prop("readonly"))},select_changed:function(){this.entry.val("");var a,b=this.get_model();a=b?[b,[-1,""]]:["",""],this.record().field_set_client(this.field_name,a)},set_value:function(a,b){var c;if(this.get_model()){c=b.get_client(a,this.field_name);var d,e;c instanceof Array?(d=c[0],e=c[1]):(d="",e=""),d==this.get_model()&&e==this.entry.val()||(b.set_client(a,null),this.entry.val(""))}else c=this.entry.val(),jQuery.isEmptyObject(c)?b.set_client(a,null):b.set_client(a,["",c])},set_text:function(a){var b;a?(b=a[0],a=a[1]):(b=null,a=null),Sao.View.Form.Reference._super.set_text.call(this,a),b?this.select.val(b):this.select.val("")},display:function(a,b){this.update_selection(a,b,function(){Sao.View.Form.Reference._super.display.call(this,a,b)}.bind(this))},set_readonly:function(a){Sao.View.Form.Reference._super.set_readonly.call(this,a),this.select.prop("disabled",a)}}),Sao.View.Form.One2Many=Sao.class_(Sao.View.Form.Widget,{class_:"form-one2many",init:function(a,b,c){Sao.View.Form.One2Many._super.init.call(this,a,b,c),this._readonly=!0,this._required=!1,this._position=0,this._length=0,this.el=jQuery("<div/>",{class:this.class_+" panel panel-default"}),this.menu=jQuery("<div/>",{class:this.class_+"-menu panel-heading"}),this.el.append(this.menu),this.title=jQuery("<label/>",{class:this.class_+"-string",text:c.string}),this.menu.append(this.title),this.title.uniqueId(),this.el.uniqueId(),this.el.attr("aria-labelledby",this.title.attr("id")),this.title.attr("for",this.el.attr("id"));var d=jQuery("<div/>",{class:this.class_+"-toolbar"});this.menu.append(d);var e=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(d),f=jQuery("<div/>",{class:"input-group-btn"}).appendTo(e),g=function(a){return function(b){var c=jQuery(b.target);c.prop("disabled",!0),(a(b)||jQuery.when()).always(function(){c.prop("disabled",!1)})}};this.but_switch=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Switch"),title:Sao.i18n.gettext("Switch")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-switch")).appendTo(f),this.but_switch.click(g(this.switch_.bind(this))),this.but_previous=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Previous"),title:Sao.i18n.gettext("Previous")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-back")).appendTo(f),this.but_previous.click(g(this.previous.bind(this))),this.label=jQuery("<span/>",{class:"badge"}).appendTo(jQuery("<span/>",{class:"btn hidden-xs"}).appendTo(f)),this.but_next=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Next"),title:Sao.i18n.gettext("Next")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-forward")).appendTo(f),this.but_next.click(g(this.next.bind(this))),c.add_remove&&(this.wid_text=jQuery("<input/>",{type:"text",class:"form-control input-sm"}).appendTo(e),f=jQuery("<div/>",{class:"input-group-btn"}).appendTo(e),this.but_add=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Add"),title:Sao.i18n.gettext("Add")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-add")).appendTo(f),this.but_add.click(g(this.add.bind(this))),this.but_remove=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Remove"),title:Sao.i18n.gettext("Remove")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-remove")).appendTo(f),this.but_remove.click(g(this.remove.bind(this)))),this.but_new=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("New"),title:Sao.i18n.gettext("New")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-create")).appendTo(f),this.but_new.click(g(this.new_.bind(this))),this.but_open=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Open"),title:Sao.i18n.gettext("Open")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-open")).appendTo(f),this.but_open.click(g(this.open.bind(this))),this.but_del=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Delete"),title:Sao.i18n.gettext("Delete")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-delete")).appendTo(f),this.but_del.click(g(this.delete_.bind(this))),this.but_undel=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Undelete"),title:Sao.i18n.gettext("Undelete")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-undo")).appendTo(f),this.but_undel.click(g(this.undelete.bind(this))),this.content=jQuery("<div/>",{class:this.class_+"-content panel-body"}),this.el.append(this.content);var h=(c.mode||"tree,form").split(",");this.screen=new Sao.Screen(c.relation,{mode:h,view_ids:(c.view_ids||"").split(","),views_preload:c.views||{},row_activate:this.activate.bind(this),exclude_field:c.relation_field||null,limit:null,pre_validate:c.pre_validate}),this.screen.pre_validate=1==c.pre_validate,this.screen.message_callback=this.record_label.bind(this),this.prm=this.screen.switch_view().done(function(){this.content.append(this.screen.screen_container.el)}.bind(this)),this.but_switch.prop("disabled",this.screen.number_of_views()<=0)},set_readonly:function(a){Sao.View.Form.One2Many._super.set_readonly.call(this,a),this._set_button_sensitive(),this._set_label_state()},set_required:function(a){this._required=a,this._set_label_state()},_set_label_state:function(){Sao.common.apply_label_attributes(this.title,this._readonly,this._required)},_set_button_sensitive:function(){var a,b,c=Sao.common.MODELACCESS.get(this.screen.model_name),d=this.record(),e=this.field();if(d&&e){var f=d.expr_eval(this.attributes.size);b=e.get_eval(d).length,a=void 0!==f&&null!==f&&b>=f&&f>=0}else b=null,a=!1;var g=this.attributes.create;void 0===g&&(g=!0),this.but_new.prop("disabled",this._readonly||!g||a||!c.create);var h=this.attributes.delete;void 0===h&&(h=!0),this.but_del.prop("disabled",this._readonly||!h||!c.delete||!this._position),this.but_undel.prop("disabled",this._readonly||a||!this._position),this.but_open.prop("disabled",!c.read||!this._position),this.but_next.prop("disabled",this.position>0&&this._position>=this._length),this.but_previous.prop("disabled",this._position<=1),this.attributes.add_remove&&(this.wid_text.prop("disabled",this._readonly),this.but_add.prop("disabled",this._readonly||a||!c.write||!c.read),this.but_remove.prop("disabled",this._readonly||!this.position||!c.write||!c.read))},display:function(a,b){Sao.View.Form.One2Many._super.display.call(this,a,b),this._set_button_sensitive(),this.prm.done(function(){if(!b)return this.screen.new_group(),this.screen.set_current_record(null),this.screen.group.parent=null,void this.screen.display();var c=a.field_get_client(this.field_name);c!=this.screen.group&&(this.screen.set_group(c),"tree"==this.screen.current_view.view_type&&this.screen.current_view.editable&&this.screen.set_current_record(null));var d=[],e=null;a&&(d=b.get_domain(a),e=a.expr_eval(this.attributes.size)),this._readonly&&(e=null===e?this.screen.group.length:Math.min(e,this.screen.group.length)),Sao.common.compare(this.screen.domain,d)||(this.screen.domain=d),this.screen.size_limit=e,this.screen.display()}.bind(this))},focus:function(){this.attributes.add_remove&&this.wid_text.focus()},activate:function(a){this.edit()},add:function(a){var b=Sao.common.MODELACCESS.get(this.screen.model_name);if(b.write&&b.read){this.view.set_value();var c=this.field().get_domain(this.record()),d=this.field().get_search_context(this.record());c=[c,this.record().expr_eval(this.attributes.add_remove)];c=["OR",c,["id","in",this.field().get_removed_ids(this.record())]];var e=this.wid_text.val(),f=function(a){var b=jQuery.when();if(!jQuery.isEmptyObject(a)){var c,d,e=[];for(c=0,d=a.length;c<d;c++)e.push(a[c][0]);this.screen.group.load(e,!0),b=this.screen.display()}b.done(function(){this.screen.set_cursor()}.bind(this)),this.wid_text.val("")}.bind(this),g=new Sao.common.DomainParser,h=this.field().get_search_order(this.record());new Sao.Window.Search(this.attributes.relation,f,{sel_multi:!0,context:d,domain:c,order:h,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:!this.but_new.prop("disabled"),search_filter:g.quote(e),title:this.attributes.string})}},remove:function(a){var b=Sao.common.MODELACCESS.get(this.screen.model_name);b.write&&b.read&&this.screen.remove(!1,!0,!1)},new_:function(a){Sao.common.MODELACCESS.get(this.screen.model_name).create&&this.validate().done(function(){this.attributes.product?this.new_product():this.new_single()}.bind(this))},new_single:function(){var a=jQuery.extend({},this.field().get_context(this.record()));if("form"==this.screen.current_view.type||this.screen.current_view.editable)this.screen.new_(),this.screen.current_view.el.prop("disabled",!1);else{var b=this.record(),c=b.expr_eval(this.attributes.size)||-1;c-=this.field().get_eval(b);new Sao.Window.Form(this.screen,function(){},{new_:!0,many:c,context:a,title:this.attributes.string})}},new_product:function(){var a=this.attributes.product.split(","),b={},c=this.screen;c.new_(!1).then(function(d){d.default_get().then(function(e){d.set_default(e);var f=function(){if(jQuery.isEmptyObject(a))return g();var e=c.model.fields[a.pop()],h=e.description.relation;h||f();var i=e.get_domain(d),j=e.get_search_context(d),k=e.get_search_order(d),l=function(a){jQuery.isEmptyObject(a)||(b[e.name]=a),f()};new Sao.Window.Search(h,l,{sel_multi:!0,context:j,domain:i,order:k,search_filter:"",title:this.attributes.string})}.bind(this),g=function(){if(c.group.remove(d,!0),!jQuery.isEmptyObject(b)){var a=Object.keys(b),f=a.map(function(a){return b[a]});Sao.common.product(f).forEach(function(b){c.new_(!1).then(function(c){var d=jQuery.extend({},e);a.forEach(function(a,c){d[a]=b[c][0],d[a+".rec_name"]=b[c][1]}),c.set_default(d)})})}};f()}.bind(this))}.bind(this))},open:function(a){return this.edit()},delete_:function(a){Sao.common.MODELACCESS.get(this.screen.model_name).delete&&this.screen.remove(!1,!1,!1)},undelete:function(a){this.screen.unremove()},previous:function(a){return this.validate().then(function(){return this.screen.display_previous()}.bind(this))},next:function(a){return this.validate().then(function(){return this.screen.display_next()}.bind(this))},switch_:function(a){return this.screen.switch_view()},edit:function(){if(Sao.common.MODELACCESS.get(this.screen.model_name).read)return this.validate().then(function(){this.screen.current_record&&new Sao.Window.Form(this.screen,function(){},{title:this.attributes.string})}.bind(this))},record_label:function(a){this._position=a[0],this._length=a[1];var b=a[0]+" / "+a[1];this.label.text(b).attr("title",b),this._set_button_sensitive()},validate:function(){var a=jQuery.Deferred();this.view.set_value();var b=this.screen.current_record;if(b){var c=this.screen.current_view.get_fields();b.validate(c).then(function(c){return c?this.screen.pre_validate?b.pre_validate().then(function(b){if(!b)return void a.reject();a.resolve()}):void a.resolve():(this.screen.display(!0),void a.reject())}.bind(this))}else a.resolve();return a},set_value:function(a,b){this.screen.save_tree_state()}}),Sao.View.Form.Many2Many=Sao.class_(Sao.View.Form.Widget,{class_:"form-many2many",init:function(a,b,c){Sao.View.Form.Many2Many._super.init.call(this,a,b,c),this._readonly=!0,this._required=!1,this._position=0,this.el=jQuery("<div/>",{class:this.class_+" panel panel-default"}),this.menu=jQuery("<div/>",{class:this.class_+"-menu panel-heading"}),this.el.append(this.menu),this.title=jQuery("<label/>",{class:this.class_+"-string",text:c.string}),this.menu.append(this.title),this.title.uniqueId(),this.el.uniqueId(),this.el.attr("aria-labelledby",this.title.attr("id")),this.title.attr("for",this.el.attr("id"));var d=jQuery("<div/>",{class:this.class_+"-toolbar"});this.menu.append(d);var e=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(d);this.entry=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap"}).appendTo(e),this.entry.on("keydown",this.key_press.bind(this));var f=jQuery("<div/>",{class:"input-group-btn"}).appendTo(e);this.but_add=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Add"),title:Sao.i18n.gettext("Add")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-add")).appendTo(f),this.but_add.click(this.add.bind(this)),this.but_remove=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button",tabindex:-1,"aria-label":Sao.i18n.gettext("Remove"),title:Sao.i18n.gettext("Remove")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-remove")).appendTo(f),this.but_remove.click(this.remove.bind(this)),this.content=jQuery("<div/>",{class:this.class_+"-content panel-body"}),this.el.append(this.content),this.screen=new Sao.Screen(c.relation,{mode:["tree"],view_ids:(c.view_ids||"").split(","),views_preload:c.views||{},row_activate:this.activate.bind(this),limit:null}),this.screen.message_callback=this.record_label.bind(this),this.prm=this.screen.switch_view("tree").done(function(){this.content.append(this.screen.screen_container.el)}.bind(this))},set_readonly:function(a){Sao.View.Form.Many2Many._super.set_readonly.call(this,a),this._set_button_sensitive(),this._set_label_state()},set_required:function(a){this._required=a,this._set_label_state()},_set_label_state:function(){Sao.common.apply_label_attributes(this.title,this._readonly,this._required)},_set_button_sensitive:function(){var a=!1,b=this.record(),c=this.field();if(b&&c){var d=b.expr_eval(this.attributes.size),e=c.get_eval(b).length;a=void 0!==d&&null!==d&&e>=d&&d>=0}this.entry.prop("disabled",this._readonly),this.but_add.prop("disabled",this._readonly||a),this.but_remove.prop("disabled",this._readonly||0===this._position)},record_label:function(a){this._position=a[0],this._set_button_sensitive()},display:function(a,b){Sao.View.Form.Many2Many._super.display.call(this,a,b),this.prm.done(function(){if(!b)return this.screen.new_group(),this.screen.set_current_record(null),this.screen.group.parent=null,void this.screen.display();var c=a.field_get_client(this.field_name);c!=this.screen.group&&this.screen.set_group(c),this.screen.display()}.bind(this))},focus:function(){this.entry.focus()},activate:function(){this.edit()},add:function(){var a=this.field().get_domain(this.record()),b=this.record().expr_eval(this.attributes.add_remove);jQuery.isEmptyObject(b)||(a=[a,b]);var c=this.field().get_search_context(this.record()),d=this.field().get_search_order(this.record()),e=this.entry.val(),f=function(a){if(!jQuery.isEmptyObject(a)){var b,c,d=[];for(b=0,c=a.length;b<c;b++)d.push(a[b][0]);this.screen.group.load(d,!0),this.screen.display()}this.entry.val("")}.bind(this),g=new Sao.common.DomainParser;new Sao.Window.Search(this.attributes.relation,f,{sel_multi:!0,context:c,domain:a,order:d,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:this.attributes.create,search_filter:g.quote(e),title:this.attributes.string})},remove:function(){this.screen.remove(!1,!0,!1)},key_press:function(a){var b=[Sao.common.TAB_KEYCODE];this.wid_completion||b.push(Sao.common.RETURN_KEYCODE),a.which==Sao.common.F3_KEYCODE?(this.new_(),a.preventDefault()):a.which==Sao.common.F2_KEYCODE?(this.add(),a.preventDefault()):~b.indexOf(a.which)&&this.entry.val()&&this.add()},_get_screen_form:function(){var a=this.field().get_domain(this.record()),b=this.record().expr_eval(this.attributes.add_remove);jQuery.isEmptyObject(b)||(a=[a,b]);var c=this.field().get_context(this.record()),d=(this.attributes.view_ids||"").split(",");return jQuery.isEmptyObject(d)||d.shift(),new Sao.Screen(this.attributes.relation,{domain:a,view_ids:d,mode:["form"],views_preload:this.attributes.views,context:c})},edit:function(){if(!jQuery.isEmptyObject(this.screen.current_record)){var a=this._get_screen_form(),b=function(b){b&&a.current_record.save().done(function(){this.screen.current_record.cancel()}.bind(this))}.bind(this);a.switch_view().done(function(){a.load([this.screen.current_record.id]),new Sao.Window.Form(a,b,{title:this.attributes.string})}.bind(this))}},new_:function(){var a=this._get_screen_form(),b=function(b){if(b){var c=a.current_record;this.screen.group.load([c.id],!0)}this.entry.val("")}.bind(this);a.switch_view().done(function(){new Sao.Window.Form(a,b,{new_:!0,save_current:!0,title:this.attributes.string,rec_name:this.entry.val()})}.bind(this))}}),Sao.View.Form.BinaryMixin=Sao.class_(Sao.View.Form.Widget,{init:function(a,b,c){Sao.View.Form.BinaryMixin._super.init.call(this,a,b,c),this.filename=c.filename||null},toolbar:function(a){var b=jQuery("<div/>",{class:a,role:"group"});return this.but_save_as=jQuery("<button/>",{class:"btn btn-default",type:"button","aria-label":Sao.i18n.gettext("Save As"),title:Sao.i18n.gettext("Save As...")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-save")).appendTo(b),this.but_save_as.click(this.save_as.bind(this)),this.input_select=jQuery("<input/>",{type:"file"}).change(this.select.bind(this)),this.but_select=jQuery("<div/>",{class:"btn btn-default input-file",type:"button","aria-label":Sao.i18n.gettext("Select"),title:Sao.i18n.gettext("Select...")}).append(this.input_select).append(Sao.common.ICONFACTORY.get_icon_img("tryton-search")).appendTo(b),this.but_clear=jQuery("<button/>",{class:"btn btn-default",type:"button","aria-label":Sao.i18n.gettext("Clear"),title:Sao.i18n.gettext("Clear")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-clear")).appendTo(b),this.but_clear.click(this.clear.bind(this)),b},filename_field:function(){if(this.filename){var a=this.record();if(a)return a.model.fields[this.filename]}},update_buttons:function(a){a?(this.but_save_as.show(),this.but_select.hide(),this.but_clear.show()):(this.but_save_as.hide(),this.but_select.show(),this.but_clear.hide())},select:function(){var a=this.record(),b=this.field(),c=this.filename_field();Sao.common.get_input_data(this.input_select,function(d,e){b.set_client(a,d),c&&c.set_client(a,e)},!b.get_size)},open:function(){var a={},b=this.filename_field();if(b){var c=b.get_client(this.record());a.mimetype=Sao.common.guess_mimetype(c)}this.save_as(a)},save_as:function(a){var b,c=(a.mimetype,this.field()),d=this.record();b=c.get_data?c.get_data(d):jQuery.when(c.get(d)),b.done(function(a){var b,c=this.filename_field();c&&(b=c.get(this.record())),Sao.common.download_file(a,b)}.bind(this))},clear:function(){this.input_select.val(null);var a=this.filename_field();a&&a.set_client(this.record(),null),this.field().set_client(this.record(),null)}}),Sao.View.Form.Binary=Sao.class_(Sao.View.Form.BinaryMixin,{class_:"form-binary",blob_url:"",init:function(a,b,c){Sao.View.Form.Binary._super.init.call(this,a,b,c),this.el=jQuery("<div/>",{class:this.class_});var d=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(this.el);this.size=jQuery("<input/>",{type:"input",class:"form-control input-sm",readonly:!0}).appendTo(d),this.filename&&c.filename_visible&&(this.text=jQuery("<input/>",{type:"input",class:"form-control input-sm"}).prependTo(d),this.text.change(this.focus_out.bind(this)),this.text.on("keydown",this.key_press.bind(this)),this.text.css("width","50%"),this.size.css("width","50%"),this.but_open=jQuery("<button/>",{class:"btn btn-default",type:"button"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-open")).appendTo(jQuery("<span/>",{class:"input-group-btn"}).prependTo(d)),this.but_open.click(this.open.bind(this))),this.toolbar("input-group-btn").appendTo(d)},display:function(a,b){if(Sao.View.Form.Binary._super.display.call(this,a,b),!b)return this.text&&this.text.val(""),this.size.val(""),void this.but_save_as.hide();var c;c=b.get_size?b.get_size(a):b.get(a).length,this.size.val(Sao.common.humanize(c)),this.text&&(this.text.val(this.filename_field().get(a)||""),c?this.but_open.parent().show():this.but_open.parent().hide()),this.update_buttons(Boolean(c))},key_press:function(a){var b=!this.text.prop("readonly");a.which==Sao.common.F3_KEYCODE&&b?(this.new_(),a.preventDefault()):a.which==Sao.common.F2_KEYCODE&&(this.open(),a.preventDefault())},set_value:function(a,b){this.text&&this.filename_field().set_client(a,this.text.val()||"")},set_readonly:function(a){Sao.View.Form.Binary._super.set_readonly.call(this,a),this.but_select.prop("disabled",a),this.but_clear.prop("disabled",a),this.text&&this.text.prop("readonly",a)}}),Sao.View.Form.MultiSelection=Sao.class_(Sao.View.Form.Selection,{class_:"form-multiselection",expand:!0,init:function(a,b,c){this.nullable_widget=!1,Sao.View.Form.MultiSelection._super.init.call(this,a,b,c),this.select.prop("multiple",!0)},display_update_selection:function(a,b){var c,d,e;this.update_selection(a,b,function(){var f=this.attributes.yexpand;if(void 0===f&&(f=this.expand),f||this.select.prop("size",this.select.children().length),b){var g=[],h=a.field_get_client(this.field_name);for(c=0,d=h.length;c<d;c++)e=h[c],~h.record_removed.indexOf(e)||~h.record_deleted.indexOf(e)||g.push(e.id);this.select.val(g)}}.bind(this))},set_value:function(a,b){var c=this.select.val();c=c?c.map(function(a){return parseInt(a,10)}):[],b.set_client(a,c)}}),Sao.View.Form.Image=Sao.class_(Sao.View.Form.BinaryMixin,{class_:"form-image",init:function(a,b,c){Sao.View.Form.Image._super.init.call(this,a,b,c),this.height=parseInt(c.height||100,10),this.width=parseInt(c.width||300,10),this.el=jQuery("<div/>"),this.image=jQuery("<img/>",{class:"center-block"}).appendTo(this.el),this.image.css("max-height",this.height),this.image.css("max-width",this.width),this.image.css("height","auto"),this.image.css("width","auto");var d=this.toolbar("btn-group");c.readonly||jQuery("<div/>",{class:"text-center"}).append(d).appendTo(this.el),this.update_img()},set_readonly:function(a){Sao.View.Form.Image._super.set_readonly.call(this,a),this.but_select.prop("disable",a),this.but_clear.prop("disable",a)},clear:function(){Sao.View.Form.Image._super.clear.call(this),this.update_img()},update_img:function(){var a,b=this.record();b&&(a=b.field_get_client(this.field_name)),a=a?a>Sao.common.BIG_IMAGE_SIZE?jQuery.when(null):b.model.fields[this.field_name].get_data(b):jQuery.when(null),a.done(function(a){var c,d;b===this.record()&&(a?(d=new Blob([a]),c=window.URL.createObjectURL(d)):c=null,this.image.attr("src",c),this.update_buttons(Boolean(a)))}.bind(this))},display:function(a,b){Sao.View.Form.Image._super.display.call(this,a,b),this.update_img()}}),Sao.View.Form.URL=Sao.class_(Sao.View.Form.Char,{class_:"form-url",init:function(a,b,c){Sao.View.Form.URL._super.init.call(this,a,b,c),this.button=jQuery("<a/>",{class:"btn btn-default",target:"_blank",rel:"noreferrer noopener"}).appendTo(jQuery("<span/>",{class:"input-group-btn"}).appendTo(this.group)),this.icon=jQuery("<img/>").appendTo(this.button),this.set_icon()},display:function(a,b){Sao.View.Form.URL._super.display.call(this,a,b);var c="";if(a&&(c=a.field_get_client(this.field_name)),this.set_url(c),a&this.attributes.icon){var d,e=this.attributes.icon;d=e in a.model.fields?a.field_get_client(e):e,this.set_icon(d)}},set_icon:function(a){a=a||"tryton-public",Sao.common.ICONFACTORY.get_icon_url(a).done(function(a){this.icon.attr("src",a)}.bind(this))},set_url:function(a){this.button.attr("href",a)},set_readonly:function(a){Sao.View.Form.URL._super.set_readonly.call(this,a),a?(this.input.hide(),this.button.removeClass("btn-default"),this.button.addClass("btn-link")):(this.input.show(),this.button.removeClass("btn-link"),this.button.addClass("btn-default"))}}),Sao.View.Form.Email=Sao.class_(Sao.View.Form.URL,{class_:"form-email",set_url:function(a){Sao.View.Form.Email._super.set_url.call(this,"mailto:"+a)}}),Sao.View.Form.CallTo=Sao.class_(Sao.View.Form.URL,{class_:"form-callto",set_url:function(a){Sao.View.Form.CallTo._super.set_url.call(this,"callto:"+a)}}),Sao.View.Form.SIP=Sao.class_(Sao.View.Form.URL,{class_:"form-sip",set_url:function(a){Sao.View.Form.SIP._super.set_url.call(this,"sip:"+a)}}),Sao.View.Form.ProgressBar=Sao.class_(Sao.View.Form.Widget,{class_:"form-char",init:function(a,b,c){Sao.View.Form.ProgressBar._super.init.call(this,a,b,c),this.el=jQuery("<div/>",{class:this.class_+" progress"}),this.progressbar=jQuery("<div/>",{class:"progress-bar",role:"progressbar","aria-valuemin":0,"aria-valuemax":100}).appendTo(this.el),this.progressbar.css("min-width: 2em")},display:function(a,b){Sao.View.Form.ProgressBar._super.display.call(this,a,b);var c,d;b?(c=b.get(a),(d=b.get_client(a,100))&&(d=Sao.i18n.gettext("%1%",d))):(c=0,d=""),this.progressbar.attr("aria-valuenow",100*c),this.progressbar.css("width",100*c+"%"),this.progressbar.text(d)}}),Sao.View.Form.Dict=Sao.class_(Sao.View.Form.Widget,{class_:"form-dict",init:function(a,b,c){Sao.View.Form.Dict._super.init.call(this,a,b,c),this.schema_model=c.schema_model,this.fields={},this.rows={},this.el=jQuery("<div/>",{class:this.class_+" panel panel-default"});var d=jQuery("<div/>",{class:this.class_+"-heading panel-heading"}).appendTo(this.el),e=jQuery("<label/>",{class:this.class_+"-string",text:c.string}).appendTo(d);e.uniqueId(),this.el.uniqueId(),this.el.attr("aria-labelledby",e.attr("id")),e.attr("for",this.el.attr("id"));var f=jQuery("<div/>",{class:this.class_+"-body panel-body"}).appendTo(this.el);this.container=jQuery("<div/>",{class:this.class_+"-container"}).appendTo(f);var g=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(jQuery("<div>",{class:"col-md-12"}).appendTo(jQuery("<div/>",{class:"row"}).appendTo(jQuery("<div/>",{class:"container-fluid"}).appendTo(f))));this.wid_text=jQuery("<input/>",{type:"text",class:"form-control input-sm"}).appendTo(g),this.but_add=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Add")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-add")).appendTo(jQuery("<div/>",{class:"input-group-btn"}).appendTo(g)),this.but_add.click(this.add.bind(this)),this._readonly=!1,this._record_id=null},_required_el:function(){return this.wid_text},_invalid_el:function(){return this.wid_text},add:function(){var a=this.field().get_context(this.record()),b=this.wid_text.val(),c=this.field().get_domain(this.record()),d=function(a){if(!jQuery.isEmptyObject(a)){var b=a.map(function(a){return a[0]});this.add_new_keys(b)}this.wid_text.val("")}.bind(this),e=new Sao.common.DomainParser;new Sao.Window.Search(this.schema_model,d,{sel_multi:!0,context:a,domain:c,new_:!1,search_filter:e.quote(b),title:this.attributes.string})},add_new_keys:function(a){this.field().add_new_keys(a,this.record()).then(function(a){var b=!1;a.forEach(function(a){a in this.fields||(this.add_line(a),b||(this.fields[a].input.focus(),b=!0))}.bind(this))}.bind(this))},remove:function(a,b){void 0===b&&(b=!0),delete this.fields[a],this.rows[a].remove(),delete this.rows[a],b&&this.set_value(this.record(),this.field())},set_value:function(a,b){b.set_client(a,this.get_value())},get_value:function(){var a={};for(var b in this.fields){var c=this.fields[b];a[b]=c.get_value()}return a},set_readonly:function(a){Sao.View.Form.Dict._super.set_readonly.call(this,a),this._set_button_sensitive();for(var b in this.fields){this.fields[b].set_readonly(a)}this.wid_text.prop("disabled",a)},_set_button_sensitive:function(){var a=this.attributes.create;void 0===a&&(a=!0);var b=this.attributes.delete;void 0===b&&(b=!0),this.but_add.prop("disabled",this._readonly||!a);for(var c in this.fields){this.fields[c].button.prop("disabled",this._readonly||!b)}},add_line:function(a){var b,c,d=this.field().keys[a];this.fields[a]=b=new(this.get_entries(d.type_))(a,this),this.rows[a]=c=jQuery("<div/>",{class:"row"});var e=d.string+Sao.i18n.gettext(":"),f=jQuery("<label/>",{text:e}).appendTo(jQuery("<div/>",{class:"dict-label col-md-4"}).appendTo(c));b.el.addClass("col-md-8").appendTo(c),f.uniqueId(),b.labelled.uniqueId(),b.labelled.attr("aria-labelledby",f.attr("id")),f.attr("for",b.labelled.attr("id")),b.button.click(function(){this.remove(a,!0)}.bind(this)),c.appendTo(this.container)},display:function(a,b){if(Sao.View.Form.Dict._super.display.call(this,a,b),b){var c,d=a?a.id:null;if(d!=this._record_id){for(c in this.fields)this.remove(c,!1);this._record_id=d}var e,f=b.get_client(a),g=Object.keys(f).filter(function(a){return!this.fields[a]}.bind(this));e=jQuery.isEmptyObject(g)?jQuery.when():b.add_keys(g,a),e.then(function(){var a,c,d,e=Object.keys(f).sort(),g=new Sao.PYSON.Decoder,h=new Sao.common.DomainInversion;for(a=0,c=e.length;a<c;a++){d=e[a];var i=f[d];if(b.keys[d]){this.fields[d]||this.add_line(d);var j=this.fields[d];j.set_value(i),j.set_readonly(this._readonly);var k=g.decode(b.keys[d].domain||"null");null!==k&&(h.eval_domain(k,f)?j.el.removeClass("has-error"):j.el.addClass("has-error"))}}var l=Object.keys(this.fields).filter(function(a){return!(a in f)});for(a=0,c=l.length;a<c;a++)d=l[a],this.remove(d,!1)}.bind(this)),this._set_button_sensitive()}},get_entries:function(a){switch(a){case"char":return Sao.View.Form.Dict.Entry;case"boolean":return Sao.View.Form.Dict.Boolean;case"selection":return Sao.View.Form.Dict.Selection;case"integer":return Sao.View.Form.Dict.Integer;case"float":return Sao.View.Form.Dict.Float;case"numeric":return Sao.View.Form.Dict.Numeric;case"date":return Sao.View.Form.Dict.Date;case"datetime":return Sao.View.Form.Dict.DateTime}}}),
|
|
11
11
|
Sao.View.Form.Dict.Entry=Sao.class_(Object,{class_:"dict-char",init:function(a,b){this.name=a,this.definition=b.field().keys[a],this.parent_widget=b,this.create_widget()},create_widget:function(){this.el=jQuery("<div/>",{class:this.class_});var a=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(this.el);this.input=this.labelled=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap"}).appendTo(a),this.button=jQuery("<button/>",{class:"btn btn-default",type:"button","arial-label":Sao.i18n.gettext("Remove")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-remove")).appendTo(jQuery("<div/>",{class:"input-group-btn"}).appendTo(a)),this.el.change(this.parent_widget.focus_out.bind(this.parent_widget))},get_value:function(){return this.input.val()},set_value:function(a){this.input.val(a||"")},set_readonly:function(a){this._readonly=a,this.input.prop("readonly",a)}}),Sao.View.Form.Dict.Boolean=Sao.class_(Sao.View.Form.Dict.Entry,{class_:"dict-boolean",create_widget:function(){Sao.View.Form.Dict.Boolean._super.create_widget.call(this),this.input.attr("type","checkbox"),this.input.change(this.parent_widget.focus_out.bind(this.parent_widget))},get_value:function(){return this.input.prop("checked")},set_readonly:function(a){this._readonly=a,this.input.prop("disabled",a)},set_value:function(a){this.input.prop("checked",a)}}),Sao.View.Form.Dict.Selection=Sao.class_(Sao.View.Form.Dict.Entry,{class_:"dict-selection",create_widget:function(){Sao.View.Form.Dict.Selection._super.create_widget.call(this);var a=jQuery("<select/>",{class:"form-control input-sm mousetrap"});a.change(this.parent_widget.focus_out.bind(this.parent_widget)),this.input.replaceWith(a),this.input=this.labelled=a;var b=jQuery.extend([],this.definition.selection);b.splice(0,0,[null,""]),b.forEach(function(b){a.append(jQuery("<option/>",{value:JSON.stringify(b[0]),text:b[1]}))})},get_value:function(){return JSON.parse(this.input.val())},set_value:function(a){this.input.val(JSON.stringify(a))},set_readonly:function(a){this._readonly=a,this.input.prop("disabled",a)}}),Sao.View.Form.Dict.Integer=Sao.class_(Sao.View.Form.Dict.Entry,{class_:"dict-integer",create_widget:function(){Sao.View.Form.Dict.Integer._super.create_widget.call(this),this.input.attr("type","number"),this.input.attr("step",1),this.input.attr("lang",Sao.i18n.getlang())},get_value:function(){var a=parseInt(this.input.val(),10);return isNaN(a)?null:a},set_value:function(a){null!==a?this.input.val(a):this.input.val("")}}),Sao.View.Form.Dict.Float=Sao.class_(Sao.View.Form.Dict.Integer,{class_:"dict-float",digits:function(){var a=[16,2],b=this.parent_widget.record();if(!b)return a;var c=b.expr_eval(this.definition.digits||a);return c.forEach(function(b,c,d){null===b&&(d[c]=a[c])}),c},get_value:function(){var a=Number(this.input.val());return isNaN(a)?null:a},set_value:function(a){var b=this.digits();a=a.toFixed(b[1]),Sao.View.Form.Dict.Float._super.set_value.call(this,a),this.input.attr("step",Math.pow(10,-b[1]))}}),Sao.View.Form.Dict.Numeric=Sao.class_(Sao.View.Form.Dict.Float,{class_:"dict-numeric",get_value:function(){var a=new Sao.Decimal(this.input.val());return isNaN(a.valueOf())?null:a}}),Sao.View.Form.Dict.Date=Sao.class_(Sao.View.Form.Dict.Entry,{class_:"dict-date",format:"%x",create_widget:function(){Sao.View.Form.Dict.Date._super.create_widget.call(this),this.date=this.input.parent(),this.date.addClass("input-icon input-icon-primary"),Sao.common.ICONFACTORY.get_icon_img("tryton-date").appendTo(jQuery("<div/>",{class:"datepickerbutton icon-input icon-primary","aria-label":Sao.i18n.gettext("Open the calendar"),title:Sao.i18n.gettext("Open the calendar")}).prependTo(this.date)),this.date.datetimepicker({format:Sao.common.moment_format(this.format),locale:moment.locale(),keyBinds:null,useCurrent:!1}),this.date.on("dp.change",this.parent_widget.focus_out.bind(this.parent_widget)),this.date.on("dp.hide",function(){this.date.closest(".treeview").css("overflow",""),this.date.closest(".modal-body").css("overflow","")}.bind(this)),this.date.on("dp.show",function(){this.date.closest(".treeview").css("overflow","visible"),this.date.closest(".modal-body").css("overflow","visible")}.bind(this));var a=new Mousetrap(this.el[0]);a.bind(["enter","="],function(a,b){a.which!=Sao.common.RETURN_KEYCODE&&a.preventDefault(),this.date.data("DateTimePicker").date(moment())}.bind(this)),Sao.common.DATE_OPERATORS.forEach(function(b){a.bind(b[0],function(a,c){a.preventDefault();var d=this.date.data("DateTimePicker"),e=d.date();e.add(b[1]),d.date(e)}.bind(this))}.bind(this))},get_value:function(){var a=this.date.data("DateTimePicker").date();return a&&(a.isDate=!0),a},set_value:function(a){this.date.off("dp.change");try{this.date.data("DateTimePicker").date(a)}finally{this.date.on("dp.change",this.parent_widget.focus_out.bind(this.parent_widget))}}}),Sao.View.Form.Dict.DateTime=Sao.class_(Sao.View.Form.Dict.Date,{class_:"dict-datetime",format:"%x %X",get_value:function(){var a=this.date.data("DateTimePicker").date();return a&&(a.isDateTime=!0),a}}),Sao.View.Form.PYSON=Sao.class_(Sao.View.Form.Char,{class_:"form-pyson",init:function(a,b,c){Sao.View.Form.PYSON._super.init.call(this,a,b,c),this.encoder=new Sao.PYSON.Encoder({}),this.decoder=new Sao.PYSON.Decoder({},!0),this.el.keyup(this.validate_pyson.bind(this)),this.icon=jQuery("<img/>",{class:"icon form-control-feedback"}).appendTo(this.group),this.group.addClass("has-feedback")},display:function(a,b){Sao.View.Form.PYSON._super.display.call(this,a,b),this.validate_pyson()},get_encoded_value:function(){var a=this.input.val();if(!a)return a;try{return this.encoder.encode(eval_pyson(a))}catch(b){return null}},set_value:function(a,b){var c=this.get_encoded_value(),d=b.get_client(a);c&&d&&Sao.common.compare(c,this.encoder.encode(this.decoder.decode(d)))&&(c=d),b.set_client(a,c)},get_client_value:function(a,b){var c=Sao.View.Form.PYSON._super.get_client_value.call(this,a,b);return c&&(c=Sao.PYSON.toString(this.decoder.decode(c))),c},validate_pyson:function(){var a="ok";null===this.get_encoded_value()&&(a="error"),Sao.common.ICONFACTORY.get_icon_url("tryton-"+a).then(function(a){this.icon.attr("src",a)}.bind(this))},focus_out:function(){this.validate_pyson(),Sao.View.Form.PYSON._super.focus_out.call(this)}})}(),function(){"use strict";function a(a,b,c){var d=Sao.config.display_size,e=jQuery.Deferred(),f=function(g){a.slice(g,g+d).forEach(function(a){a.redraw(b,c)}),g+=d,g<a.length?setTimeout(f,0,g):e.resolve()};return setTimeout(f,0,0),e}Sao.View.tree_column_get=function(a){switch(a){case"char":return Sao.View.Tree.CharColumn;case"text":return Sao.View.Tree.TextColum;case"many2one":return Sao.View.Tree.Many2OneColumn;case"one2one":return Sao.View.Tree.One2OneColumn;case"date":return Sao.View.Tree.DateColumn;case"time":return Sao.View.Tree.TimeColumn;case"timedelta":return Sao.View.Tree.TimeDeltaColumn;case"one2many":return Sao.View.Tree.One2ManyColumn;case"many2many":return Sao.View.Tree.Many2ManyColumn;case"selection":return Sao.View.Tree.SelectionColumn;case"reference":return Sao.View.Tree.ReferenceColumn;case"float":case"numeric":return Sao.View.Tree.FloatColumn;case"integer":case"biginteger":return Sao.View.Tree.IntegerColumn;case"boolean":return Sao.View.Tree.BooleanColumn;case"binary":return Sao.View.Tree.BinaryColumn;case"image":return Sao.View.Tree.ImageColumn;case"url":case"email":case"callto":case"sip":return Sao.View.Tree.URLColumn;case"progressbar":return Sao.View.Tree.ProgressBar}},Sao.View.Tree=Sao.class_(Sao.View,{init:function(a,b,c){Sao.View.Tree._super.init.call(this,a,b),this.view_type="tree",this.sum_widgets={},this.selection_mode=a.attributes.selection_mode||Sao.common.SELECTION_MULTIPLE,this.el=jQuery("<div/>",{class:"treeview responsive"}),this.expanded={},this.children_field=c,this.editable=Boolean(this.attributes.editable)&&!a.attributes.readonly,this.columns=[],this.create_columns(a.model,b),this.rows=[],this.edited_row=null,this.table=jQuery("<table/>",{class:"tree table table-hover table-striped table-condensed"}),this.editable&&this.table.addClass("table-bordered"),this.el.append(this.table);var d=jQuery("<colgroup/>").appendTo(this.table),e=jQuery("<col/>",{class:"selection-state"}).appendTo(d);this.selection_mode==Sao.common.SELECTION_NONE&&e.css("width",0),this.thead=jQuery("<thead/>").appendTo(this.table);var f=jQuery("<tr/>"),g=jQuery("<th/>",{class:"selection-state"});this.selection=jQuery("<input/>",{type:"checkbox"}),this.selection.change(this.selection_changed.bind(this)),g.append(this.selection),f.append(g),this.thead.append(f),this.tfoot=null;var h;jQuery.isEmptyObject(this.sum_widgets)||(h=jQuery("<tr/>"),h.append(jQuery("<td/>")),this.tfoot=jQuery("<tfoot/>"),this.tfoot.append(h),this.table.append(this.tfoot)),this.columns.forEach(function(a){e=jQuery("<col/>",{class:a.attributes.widget}).appendTo(d),g=jQuery("<th/>",{class:a.attributes.widget});var b=jQuery("<label/>").text(a.attributes.string).attr("title",a.attributes.string);if(this.editable&&(a.attributes.required&&b.addClass("required"),a.attributes.readonly||b.addClass("editable")),a.attributes.help&&b.attr("title",a.attributes.help),a.sortable){var c=jQuery("<img/>",{class:"icon"});b.append(c),a.arrow=c,g.click(a,this.sort_model.bind(this)),b.addClass("sortable")}if(f.append(g.append(b)),a.header=g,a.col=e,a.footers=[],!jQuery.isEmptyObject(this.sum_widgets)){var i=a.attributes.name,j=jQuery("<td/>",{class:a.class_});if(i in this.sum_widgets){var k=this.sum_widgets[i][0],l=this.sum_widgets[i][1];j.append(k),j.append(l),j.attr("data-title",k.text())}h.append(j),a.footers.push(j)}},this),this.tbody=jQuery("<tbody/>"),this.table.append(this.tbody),this.display_size=Sao.config.display_size},create_columns:function(a,b){b.find("tree").children().each(function(b,c){for(var d,e,f={},g=0,h=c.attributes.length;g<h;g++)e=c.attributes[g],f[e.name]=e.value;if(["readonly","expand","completion"].forEach(function(a){f[a]&&(f[a]=1==f[a])}),"field"==c.tagName){var i=f.name;f.widget||(f.widget=a.fields[i].description.type);var j=["relation","domain","selection","relation_field","string","views","invisible","add_remove","sort","context","filename","autocomplete","translate","create","delete","selection_change_with","schema_model","required","readonly","help"];for(g in j){var k=j[g];k in a.fields[i].description&&null===c.getAttribute(k)&&(f[k]=a.fields[i].description[k])}d=new(Sao.View.tree_column_get(f.widget))(a,f);~["url","email","callto","sip"].indexOf(f.widget)&&d.prefixes.push(new Sao.View.Tree.Affix(f,f.widget)),"icon"in f&&d.prefixes.push(new Sao.View.Tree.Affix(f));var l,m,n=c.childNodes;for(g=0;g<n.length;g++){l=n[g],m={};for(var o=0,p=l.attributes.length;o<p;o++)e=l.attributes[o],m[e.name]=e.value;m.name||(m.name=i),"prefix"==l.tagName?d.prefixes.push(new Sao.View.Tree.Affix(m)):d.suffixes.push(new Sao.View.Tree.Affix(m))}this.attributes.sequence||this.children_field||!1===a.fields[i].description.sortable||(d.sortable=!0),this.fields[i]=!0,this.add_sum(f)}else"button"==c.tagName&&(d=new Sao.View.Tree.ButtonColumn(this.screen,f));this.columns.push(d)}.bind(this))},add_sum:function(a){if(a.sum){var b=a.sum+Sao.i18n.gettext(": "),c=jQuery("<label/>",{text:b}),d=jQuery("<span/>",{class:"value"});this.sum_widgets[a.name]=[c,d]}},sort_model:function(a){var b=a.data,c=b.arrow;this.columns.forEach(function(a){a.arrow&&a!=b&&a.arrow.attr("src")&&a.arrow.attr("src","")}),this.screen.order=this.screen.default_order,"ASC"==c.data("order")?(c.data("order","DESC"),Sao.common.ICONFACTORY.get_icon_url("tryton-arrow-up").then(function(a){c.attr("src",a)}),this.screen.order=[[b.attributes.name,"DESC"]]):"DESC"==c.data("order")?(c.data("order",""),c.attr("src","")):(c.data("order","ASC"),Sao.common.ICONFACTORY.get_icon_url("tryton-arrow-down").then(function(a){c.attr("src",a)}),this.screen.order=[[b.attributes.name,"ASC"]]);var d=[];this.screen.group.forEach(function(a){a.id<0&&(d=a.group)});var e=this.screen.screen_container.get_text();!jQuery.isEmptyObject(d)||this.screen.search_count==this.screen.group.length||this.screen.group.parent?this.screen.search_filter(e,!0).then(function(a){this.screen.group.sort(function(b,c){return b=a.indexOf(b.id),b=b<0?a.length:b,c=a.indexOf(c.id),c=c<0?a.length:c,b<c?-1:b>c?1:0}),this.screen.display()}.bind(this)):this.screen.search_filter(e)},get_buttons:function(){var a=[];return this.columns.forEach(function(b){b instanceof Sao.View.Tree.ButtonColumn&&a.push(b)}),a},display:function(a,b){var c=this.screen.current_record;if(jQuery.isEmptyObject(a))if(a=this.get_selected_paths(),c){var d=c.get_path(this.screen.group);d=d.map(function(a){return a[1]}),Sao.common.contains(a,d)||(a=[d])}else c||(a=[]);b=b||[],this.selection_mode==Sao.common.SELECTION_MULTIPLE?this.selection.show():this.selection.hide();var e=function(){return this.rows.map(function(a){return a.record})}.bind(this),f=Math.min(this.screen.group.length,this.display_size);this.children_field?this.construct():f>this.rows.length&&Sao.common.compare(this.screen.group.slice(0,this.rows.length),e())?this.construct(!0):f==this.rows.length&&Sao.common.compare(this.screen.group.slice(0,this.rows.length),e())||this.construct();var g=1,h=[];jQuery.isEmptyObject(this.screen.domain)||h.push(this.screen.domain);var i=this.screen.screen_container.get_tab_domain();jQuery.isEmptyObject(i)||h.push(i);var j=new Sao.common.DomainInversion;h=j.simplify(h);var k=new Sao.PYSON.Decoder(this.screen.context());return this.columns.forEach(function(a){g+=1;var b=a.attributes.name;if(b){var c=a.footers.slice();if(c.push(a.header),k.decode(a.attributes.tree_invisible||"0")||b===this.screen.exclude_field)g-=1,c.forEach(function(a){a.hide(),a.addClass("invisible")});else{var d=j.domain_inversion(h,b);"boolean"!=typeof d&&(d=j.simplify(d));j.unique_value(d)[0]&&jQuery.isEmptyObject(this.children_field)?(g-=1,c.forEach(function(a){a.hide(),a.addClass("invisible")})):c.forEach(function(a){a.show(),a.removeClass("invisible")})}if(a.header.hasClass("invisible"))a.col.css("width",0),a.col.hide();else if(!a.col.hasClass("selection-state")&&!a.col.hasClass("favorite")){var e={integer:6,biginteger:6,float:8,numeric:8,timedelta:10,date:10,datetime:10,time:10,selection:9,char:10,one2many:5,many2many:5,boolean:2,binary:20}[a.attributes.widget]||10;e=100*e+"%",a.col.css("width",e),a.col.show()}}}.bind(this)),this.tbody.find("tr.more-row > td").attr("colspan",g),!this.table.hasClass("no-responsive")&this.columns.filter(function(a){return!a.header.hasClass("invisible")}).length>1?(this.table.addClass("responsive"),this.table.addClass("responsive-header")):(this.table.removeClass("responsive"),this.table.removeClass("responsive-header")),this.redraw(a,b).done(Sao.common.debounce(this.update_sum.bind(this),250))},construct:function(a){var b=this.tbody;a?this.tbody.find("tr.more-row").remove():(this.rows=[],this.tbody=jQuery("<tbody/>"),this.edited_row=null);var c=this.rows.length,d=function(a,b,c){var d;d=this.editable?Sao.View.Tree.RowEditable:Sao.View.Tree.Row;var e=new d(this,a,this.rows.length);this.rows.push(e),e.construct()};if(this.screen.group.slice(c,this.display_size).forEach(d.bind(this)),a||b.replaceWith(this.tbody),this.display_size<this.screen.group.length){var e=jQuery("<tr/>",{class:"more-row"}),f=jQuery("<td/>"),g=jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("More")).click(function(){this.display_size+=Sao.config.display_size,this.display()}.bind(this));f.append(g),e.append(f),this.tbody.append(e)}},redraw:function(b,c){return a(this.rows,b,c)},switch_:function(a){this.screen.row_activate()},select_changed:function(a){this.edited_row&&(a=this.edited_row.record,this.edited_row.set_selection(!0)),this.screen.set_current_record(a)},update_sum:function(){for(var a in this.sum_widgets)if(this.sum_widgets.hasOwnProperty(a)){var b,c,d=this.selected_records(),e="-",f=this.sum_widgets[a][0],g=this.sum_widgets[a][1],h=null,i=null,j=!0,k=0,l=this.screen.model.fields[a],m=d.map(function(a){return a.id});for(b=0;b<this.screen.group.length;b++){if(c=this.screen.group[b],!c.get_loaded([a])&&c.id>=0){j=!1;break}var n=l.get(c);if(n&&n.isTimeDelta&&(n=n.asSeconds()),null!==n&&(null===h?h=n:h+=n,!~m.indexOf(c.id)&&d||(null===i?i=n:i+=n),l.digits)){var o=l.digits(c);k=o&&null!==k?Math.max(o[1],k):null}}if(j){if("timedelta"==l.description.type){var p=l.converter(this.screen.group);i=Sao.common.timedelta.format(Sao.TimeDelta(null,i),p),h=Sao.common.timedelta.format(Sao.TimeDelta(null,h),p)}else if(null!==k){var q={};q.minimumFractionDigits=k,q.maximumFractionDigits=k,i=(i||0).toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),q),h=(h||0).toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),q)}e=i+" / "+h}g.text(e),g.parent().attr("title",f.text()+" "+g.text())}},selected_records:function(){if(this.selection_mode==Sao.common.SELECTION_NONE)return[];var a=[],b=function(c){c.is_selected()&&a.push(c.record),c.rows.forEach(b)};return this.rows.forEach(b),this.selection.prop("checked")&&!this.selection.prop("indeterminate")&&this.screen.group.slice(this.rows.length).forEach(function(b){a.push(b)}),a},selection_changed:function(){var a=this.selection.prop("checked"),b=function(c){c.set_selection(a),c.rows.forEach(b)};this.rows.forEach(b),a&&this.rows[0]?this.select_changed(this.rows[0].record):this.select_changed(null),this.update_sum()},update_selection:function(){if(this.update_sum(),!this.selection.prop("checked")){var a=this.selected_records();this.selection.prop("indeterminate",!1),jQuery.isEmptyObject(a)?this.selection.prop("checked",!1):a.length==this.tbody.children().length&&this.display_size>=this.screen.group.length?this.selection.prop("checked",!0):(this.selection.prop("indeterminate",!0),this.selection.prop("checked",!0))}},get_selected_paths:function(){function a(c,d){var e,f,g,h;for(e=0,g=c.rows.length;e<g;e++)f=c.rows[e],h=d.concat([f.record.id]),f.is_selected()&&b.push(h),a(f,h)}var b=[];return a(this,[]),b},get_expanded_paths:function(a,b){var c,d,e,f,g;void 0===a&&(a=[]),void 0===b&&(b=[]),d=[],e=this.find_row(a),f=e?e.rows:this.rows;for(var h=0,i=this.n_children(e);h<i;h++)g=a.concat([h]),(e=f[h])&&e.is_expanded()&&(c=b.concat(e.record.id),d.push(c),d=d.concat(this.get_expanded_paths(g,c)));return d},find_row:function(a){for(var b,c=null,d=this.rows,e=0,f=a.length;e<f;e++){if(b=a[e],!d||b>=d.length)return null;if(c=d[b],d=c.rows,!this.children_field)break}return c},n_children:function(a){return a&&this.children_field?a.record._values[this.children_field].length:this.rows.length},set_cursor:function(a,b){var c,d,e,f,g,h;this.screen.current_record&&(c=this.screen.current_record.get_index_path(this.screen.group),this.rows.length<=c[0]&&(this.display_size=this.screen.group.length,this.display()),f=c[0],g=c.slice(1),g.length>0&&this.rows[f].expand_to_path(g),d=this.find_row(c),null!==(e=d.next_column(null,a))&&(h=d._get_column_td(e),this.editable&&a&&h.trigger("click"),h.find(":input,[tabindex=0]").focus()))},save_row:function(){var a,b,c=this.edited_row;if(!this.editable||!this.edited_row)return jQuery.when();{if(this.edited_row.record.validate(this.get_fields(),!1,!1,!0))return b=this.screen.group.parent?this.screen.attributes.pre_validate?this.record.pre_validate():jQuery.when():this.edited_row.record.save(),b.fail(function(){this.edited_row!=c&&(this.edit_row(null),c.set_selection(!0),c.selection_changed(),this.edit_row(c))}.bind(this)),b;var d=!1,e=this.edited_row.record.invalid_fields();for(a=0;a<this.columns.length;a++){var f=this.columns[a];if(f.attributes.name in e){var g=this.edited_row._get_column_td(a),h=this.edited_row.get_editable_el(g),i=h.data("widget");i.display(this.edited_row.record,f.field),d||(i.focus(),d=!0)}}}},edit_row:function(a){this.editable&&this.edited_row!=a&&(this.edited_row&&this.edited_row.unset_editable(),a&&a.set_editable(),this.edited_row=a)}}),Sao.View.Tree.Row=Sao.class_(Object,{init:function(a,b,c,d){this.tree=a,this.current_column=null,this.rows=[],this.record=b,this.parent_=d,this.children_field=a.children_field,this.expander=null;var e=[];d&&(e=jQuery.extend([],d.path.split("."))),e.push(c),this.path=e.join("."),this.el=jQuery("<tr/>"),this.el.on("click",this.select_row.bind(this))},is_expanded:function(){return this.path in this.tree.expanded},get_last_child:function(){return this.children_field&&this.is_expanded()&&!jQuery.isEmptyObject(this.rows)?this.rows[this.rows.length-1].get_last_child():this},get_id_path:function(){return this.parent_?this.parent_.get_id_path().concat([this.record.id]):[this.record.id]},build_widgets:function(){var a=jQuery("<table/>");a.css("width","100%");var b=jQuery("<tr/>");return a.append(b),[a,b]},construct:function(){for(var a=this.el[0];a.firstChild;)a.removeChild(a.firstChild);var b;this.tree.el.uniqueId(),b=jQuery("<td/>",{class:"selection-state"}),this.el.append(b),this.selection=jQuery("<input/>",{type:"checkbox",name:"tree-selection-"+this.tree.el.attr("id")}),this.selection.click(function(a){a.stopPropagation()}),this.selection.change(this.selection_changed.bind(this)),b.append(this.selection);for(var c=this.path.split(".").length,d=function(a){this.expander&&!this.is_expanded()&&this.tree.n_children(this)<=Sao.config.limit&&this.toggle_row(),this.select_column(a.data.index)}.bind(this),e=0;e<this.tree.columns.length;e++){var f=this.tree.columns[e];b=jQuery("<td/>",{"data-title":f.attributes.string+Sao.i18n.gettext(": ")}).append(jQuery("<span/>",{"aria-hidden":!0})),b.on("click keypress",{index:e},d),this.tree.editable?(f.attributes.required&&b.addClass("required"),f.attributes.readonly||b.addClass("editable")):b.dblclick(this.switch_row.bind(this));var g=this.build_widgets(),h=g[0],i=g[1];if(b.append(h),0===e&&this.children_field){this.expander=jQuery("<img/>",{tabindex:0,class:"icon"}),this.expander.html(" ");var j="margin-left";Sao.i18n.rtl&&(j="margin-right"),this.expander.css(j,c-1+"em"),this.expander.on("click keypress",Sao.common.click_press(this.toggle_row.bind(this))),i.append(jQuery("<td/>",{class:"expander"}).append(this.expander).css("width",1))}var k;if(f.prefixes)for(k=0;k<f.prefixes.length;k++){f.prefixes[k];i.append(jQuery("<td/>",{class:"prefix"}).css("width",1))}if(i.append(jQuery("<td/>",{class:"widget"})),f.suffixes)for(k=0;k<f.suffixes.length;k++){f.suffixes[k];i.append(jQuery("<td/>",{class:"suffix"}).css("width",1))}this.el.append(b)}if(this.parent_){this.parent_.get_last_child().el.after(this.el)}else this.tree.tbody.append(this.el)},_get_column_td:function(a,b){return b=b||this.el,jQuery(b.children()[a+1])},redraw:function(a,b){a=a||[],b=b||[];var c=this.tree.thead.is(":visible");switch(this.tree.selection_mode){case Sao.common.SELECTION_NONE:this.selection.hide();break;case Sao.common.SELECTION_SINGLE:this.selection.attr("type","radio"),this.selection.show();break;case Sao.common.SELECTION_MULTIPLE:this.selection.attr("type","checkbox"),this.selection.show()}for(var d=0;d<this.tree.columns.length;d++){var e,f=this.tree.columns[d],g=this._get_column_td(d),h=g.find("tr");if(f.prefixes)for(var i=0;i<f.prefixes.length;i++){var j=f.prefixes[i],k=jQuery(h.children(".prefix")[i]);e=k.children(),e.length?j.render(this.record,e):(k.html(j.render(this.record)),k.empty().append(j.render(this.record)))}var l=h.children(".widget");if(e=l.children(),e.length?f.render(this.record,e):l.empty().append(f.render(this.record)),f.suffixes)for(var m=0;m<f.suffixes.length;m++){var n=f.suffixes[m],o=jQuery(h.children(".suffix")[m]);e=o.children(),e.length?n.render(this.record,e):o.empty().append(n.render(this.record))}f.header.is(":hidden")&&c||"none"==f.header.css("display")?(g.hide(),g.addClass("invisible")):(g.show(),g.removeClass("invisible"))}var p=this.get_id_path();this.set_selection(Sao.common.contains(a,p)),this.children_field&&this.record.load(this.children_field).done(function(){var c=this.record.field_get_client(this.children_field).length;c&&(this.is_expanded()||Sao.common.contains(b,p))?(this.expander.css("visibility","visible"),this.tree.expanded[this.path]=this,this.expand_children(a,b),this.update_expander(!0)):(this.expander.css("visibility",c?"visible":"hidden"),this.update_expander(!1))}.bind(this)),this.record.deleted()||this.record.removed()?this.el.css("text-decoration","line-through"):this.el.css("text-decoration","inherit")},toggle_row:function(){return this.is_expanded()?(this.update_expander(!1),delete this.tree.expanded[this.path],this.collapse_children()):this.tree.n_children(this)>Sao.config.limit?(this.tree.screen.set_current_record(this.record),this.tree.screen.switch_view("form")):(this.update_expander(!0),this.tree.expanded[this.path]=this,this.expand_children()),!1},update_expander:function(a){var b;b=a?"tryton-arrow-down":"tryton-arrow-right",Sao.common.ICONFACTORY.get_icon_url(b).then(function(a){this.expander.attr("src",a)}.bind(this))},collapse_children:function(){this.rows.forEach(function(a,b,c){a.collapse_children();var d=a.el[0];d.parentNode.removeChild(d)}),this.rows=[]},expand_children:function(b,c){return this.record.load(this.children_field).done(function(){if(0===this.rows.length){this.record.field_get_client(this.children_field).forEach(function(a,d,e){var f=new this.Class(this.tree,a,d,this);f.construct(b,c),this.rows.push(f)}.bind(this))}a(this.rows,b,c)}.bind(this))},switch_row:function(){window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty(),(this.tree.selection_mode==Sao.common.SELECTION_NONE||(this.set_selection(!0),this.selection_changed(),this.is_selected()))&&this.tree.switch_(this.path)},select_column:function(a){},select_row:function(a){this.tree.selection_mode==Sao.common.SELECTION_NONE?(this.tree.select_changed(this.record),this.switch_row()):(a.ctrlKey&&this.tree.selection_mode!=Sao.common.SELECTION_SINGLE||this.tree.rows.forEach(function(a){a.set_selection(!1)}.bind(this)),this.set_selection(!this.is_selected()),this.selection_changed())},is_selected:function(){return this.tree.selection_mode!=Sao.common.SELECTION_NONE&&this.selection.prop("checked")},set_selection:function(a){this.tree.selection_mode!=Sao.common.SELECTION_NONE&&(this.selection.prop("checked",a),a||this.tree.selection.prop("checked",!1))},selection_changed:function(){var a=this.is_selected();this.set_selection(a),a?this.tree.select_changed(this.record):this.tree.select_changed(this.tree.selected_records()[0]||null),this.tree.update_selection()},expand_to_path:function(a){var b,c;b=a[0],c=a.slice(1),c.length>0&&this.rows[b].expand_children().done(function(){this.rows[b].expand_to_path(c)}.bind(this))},next_column:function(a,b,c){var d,e,f,g,h,i;for(c=c||1,null===a&&c>0?a=-1:null===a&&(a=0),h=0,d=0;d<this.tree.columns.length;d++)if(h=(a+c*(d+1))%this.tree.columns.length,h<0&&(h+=this.tree.columns.length),g=this.tree.columns[h],g.field&&(i=g.field.get_state_attrs(this.record),f=i.invisible,g.header.is(":hidden")&&(f=!0),e=!!b&&(g.attributes.readonly||i.readonly),!f&&!e))return h}}),Sao.View.Tree.RowEditable=Sao.class_(Sao.View.Tree.Row,{init:function(a,b,c,d){Sao.View.Tree.RowEditable._super.init.call(this,a,b,c,d),this.edited_column=null,this.el.on("keypress",function(a){a.which==Sao.common.RETURN_KEYCODE&&this.tree.edited_row!=this&&(this.tree.edit_row(this),a.preventDefault())}.bind(this))},redraw:function(a,b){var c,d,e,f;Sao.View.Tree.RowEditable._super.redraw.call(this,a,b);var g=function(a){var b=this.record;return function(){var c=b.model.fields[a.field_name];c.set_state(b),a.display(b,c)}}.bind(this);for(c=0;c<this.tree.columns.length;c++){var h=this.tree.columns[c];e=this._get_column_td(c),d=e.find("tr"),f=jQuery(d.children(".widget-editable")).data("widget"),f&&this.record.load(h.attributes.name).done(g(f))}},select_column:function(a){this.edited_column=a},select_row:function(a){var b,c;if(a.stopPropagation(),!this.tree.edited_row||a.currentTarget!=this.tree.edited_row.el[0]){b=c=jQuery(document.body),b.hasClass("modal-open")&&(c=this.tree.el.parents(".modal").last());var d=function(a){if(a.currentTarget!=b[0]||!b.hasClass("modal-open"))return this.tree.save_row()?(b.off("click.sao.editabletree"),this.tree.edit_row(null),!0):(a.preventDefault(),void a.stopPropagation())}.bind(this);d(a)&&(c.on("click.sao.editabletree",d),Sao.View.Tree.RowEditable._super.select_row.call(this,a),this.selection_changed(),this.tree.edit_row(this))}},unset_editable:function(){this.tree.columns.forEach(function(a,b){var c=this._get_column_td(b);this.get_static_el(c).empty().append(a.render(this.record)).show(),this.get_editable_el(c).empty().data("widget",null).parents(".treeview td").addBack().removeClass("edited")}.bind(this))},set_editable:function(){for(var a=null,b=0,c=this.tree.columns.length;b<c;b++){var d=this._get_column_td(b),e=this.tree.columns[b];if(e.field&&!e.attributes.readonly){var f=Sao.View.editabletree_widget_get(e.attributes.widget),g=new f(e.attributes.name,this.tree.screen.model,e.attributes);g.view=this.tree,g.el.on("keydown",this.key_press.bind(this));var h=this.get_editable_el(d);h.append(g.el),h.data("widget",g),g.display(this.record,e.field);this.get_static_el(d).hide(),h.show(),h.parents(".treeview td").addBack().addClass("edited"),this.edited_column==b&&(a=g)}}a&&a.focus()},get_static_el:function(a){return a=a||this.get_active_td(),a.find(".widget")},get_editable_el:function(a){a=a||this.get_active_td();var b=a.find(".widget-editable");return b.length||(b=jQuery("<td/>",{class:"widget-editable"}).insertAfter(a.find(".widget"))),b},get_active_td:function(){return this._get_column_td(this.edited_column)},key_press:function(a){var b,c,d,e;if(!(a.which!=Sao.common.TAB_KEYCODE&&a.which!=Sao.common.UP_KEYCODE&&a.which!=Sao.common.DOWN_KEYCODE&&a.which!=Sao.common.ESC_KEYCODE&&a.which!=Sao.common.RETURN_KEYCODE||jQuery(a.currentTarget).find(".dropdown-menu").length)){var f=this._get_column_td(this.edited_column),g=this.get_editable_el(f),h=g.data("widget");h.focus_out();var i=this.tree.columns[this.edited_column];if(i.field.validate(this.record)){if(a.which==Sao.common.TAB_KEYCODE){var j=1;a.shiftKey&&(j=-1),a.preventDefault(),c=this.next_column(this.edited_column,!0,j),null!==c&&(this.edited_column=c,f=this._get_column_td(c),g=this.get_editable_el(f),h=g.data("widget"),h.focus())}else if(a.which==Sao.common.UP_KEYCODE||a.which==Sao.common.DOWN_KEYCODE)e=a.which==Sao.common.UP_KEYCODE?this.el.prev("tr"):this.el.next("tr"),b=this.edited_column,this.record.validate(this.tree.get_fields()).then(function(a){if(a){var c;if(this.tree.screen.group.parent?this.tree.screen.attributes.pre_validate&&(c=this.record.pre_validate()):c=this.record.save(),c)return c.fail(function(){h.focus()})}else{e=null;var f=this.record.invalid_fields();for(d=0;d<this.tree.columns.length;d++){if(this.tree.columns[d].attributes.name in f){b=d;break}}}}.bind(this)).then(function(){window.setTimeout(function(){this._get_column_td(b,e).trigger("click")}.bind(this),0)}.bind(this));else if(a.which==Sao.common.ESC_KEYCODE)this.tree.edit_row(null),this.get_static_el().show().find("[tabindex=0]").focus();else if(a.which==Sao.common.RETURN_KEYCODE){var k=function(a){this._get_column_td(this.edited_column,a).trigger("click")}.bind(this);if(e="bottom"==this.tree.attributes.editable?this.el.next("tr"):this.el.prev("tr"),e.length)k(e);else{var l,m=this.tree.screen.group,n=Sao.common.MODELACCESS.get(this.tree.screen.model_name),o=null!==this.tree.screen.size_limit&&m.length>=this.tree.screen.size_limit;l=!n.create||o?jQuery.when():this.tree.screen.new_(),l.done(function(){var a,b=this.tree.tbody.children("tr");a="bottom"==this.tree.attributes.editable?b.last():b.first(),k(a)}.bind(this))}}a.preventDefault()}else h.display(this.record,i.field)}}}),Sao.View.Tree.Affix=Sao.class_(Object,{init:function(a,b){this.attributes=a,this.protocol=b||null,this.icon=a.icon,this.protocol&&!this.icon&&(this.icon="tryton-public")},
|
|
12
12
|
get_cell:function(){var a;return this.protocol?(a=jQuery("<a/>",{target:"_blank",rel:"noreferrer noopener"}),a.append(jQuery("<img/>")),a.click({cell:a},this.clicked.bind(this))):this.icon?a=jQuery("<img/>"):(a=jQuery("<span/>"),a.attr("tabindex",0)),a.addClass("column-affix"),a},render:function(a,b){return b||(b=this.get_cell()),a.load(this.attributes.name).done(function(){var c,d=a.model.fields[this.attributes.name];if(d.set_state(a,["invisible"]),d.get_state_attrs(a).invisible?b.hide():b.show(),this.protocol){if(c=d.get(a),!jQuery.isEmptyObject(c))switch(this.protocol){case"email":c="mailto:"+c;break;case"callto":c="callto:"+c;break;case"sip":c="sip:"+c}b.attr("href",c)}if(this.icon){if(this.icon in a.model.fields){c=a.model.fields[this.icon].get_client(a)}else c=this.icon;Sao.common.ICONFACTORY.get_icon_url(c).done(function(a){var c;c=b.children("img").length?b.children("img"):b,c.attr("src",a||"")}.bind(this))}else c=this.attributes.string||"",c||(c=d.get_client(a)||""),b.text(c)}.bind(this)),b},clicked:function(a){a.stopPropagation()}}),Sao.View.Tree.CharColumn=Sao.class_(Object,{class_:"column-char",init:function(a,b){this.type="field",this.model=a,this.field=a.fields[b.name],this.attributes=b,this.prefixes=[],this.suffixes=[],this.header=null,this.footers=[],this.field_name=this.attributes.name,this.model_name=a.name},get_cell:function(){return jQuery("<div/>",{class:this.class_,tabindex:0})},update_text:function(a,b){var c=this.field.get_client(b);a.text(c).attr("title",c)},render:function(a,b){return b||(b=this.get_cell()),a.load(this.attributes.name).done(function(){this.update_text(b,a),this.field.set_state(a),this.field.get_state_attrs(a).invisible?b.hide():b.show()}.bind(this)),b}}),Sao.View.Tree.TextColum=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-text"}),Sao.View.Tree.IntegerColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-integer",init:function(a,b){Sao.View.Tree.IntegerColumn._super.init.call(this,a,b),this.factor=Number(b.factor||1)},get_cell:function(){return Sao.View.Tree.IntegerColumn._super.get_cell.call(this)},update_text:function(a,b){var c=this.field.get_client(b,this.factor);a.text(c).attr("title",c)}}),Sao.View.Tree.FloatColumn=Sao.class_(Sao.View.Tree.IntegerColumn,{class_:"column-float"}),Sao.View.Tree.BooleanColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-boolean",get_cell:function(){return jQuery("<input/>",{type:"checkbox",disabled:!0,class:this.class_,tabindex:0})},update_text:function(a,b){a.prop("checked",this.field.get(b))}}),Sao.View.Tree.Many2OneColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-many2one",get_cell:function(){var a=Sao.View.Tree.Many2OneColumn._super.get_cell.call(this);return a.append(jQuery("<a/>",{href:"#"})),a},update_text:function(a,b){a=a.children("a"),a.unbind("click"),Sao.View.Tree.Many2OneColumn._super.update_text.call(this,a,b),a.click(function(a){a.stopPropagation();var c={};c.model=this.attributes.relation,c.res_id=this.field.get(b),c.mode=["form"],c.name=this.attributes.string,c.context=this.field.get_context(b),Sao.Tab.create(c)}.bind(this))}}),Sao.View.Tree.One2OneColumn=Sao.class_(Sao.View.Tree.Many2OneColumn,{class_:"column-one2one"}),Sao.View.Tree.SelectionColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-selection",init:function(a,b){Sao.View.Tree.SelectionColumn._super.init.call(this,a,b),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(a){Sao.common.selection_mixin.init_selection.call(this,a)},update_selection:function(a,b){Sao.common.selection_mixin.update_selection.call(this,a,this.field,b)},update_text:function(a,b){this.update_selection(b,function(){for(var c,d,e=this.field.get(b),f=!1,g=0,h=this.selection.length;g<h;g++)if(this.selection[g][0]===e){f=!0,d=this.selection[g][1];break}c=f?jQuery.when(d):Sao.common.selection_mixin.get_inactive_selection.call(this,e).then(function(a){return a[1]}),c.done(function(b){a.text(b).attr("title",b)}.bind(this))}.bind(this))}}),Sao.View.Tree.ReferenceColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-reference",init:function(a,b){Sao.View.Tree.ReferenceColumn._super.init.call(this,a,b),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(a){Sao.common.selection_mixin.init_selection.call(this,a)},update_selection:function(a,b){Sao.common.selection_mixin.update_selection.call(this,a,this.field,b)},update_text:function(a,b){this.update_selection(b,function(){var c,d,e,f=this.field.get_client(b);if(f?(c=f[0],d=f[1]):(c="",d=""),c){for(var g=0,h=this.selection.length;g<h;g++)if(this.selection[g][0]===c){c=this.selection[g][1];break}e=c+","+d}else e=d;a.text(e).attr("title",e)}.bind(this))}}),Sao.View.Tree.DateColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-date",update_text:function(a,b){var c=this.field.get_client(b),d=this.field.date_format(b),e=Sao.common.format_date(d,c);a.text(e).attr("title",e)}}),Sao.View.Tree.TimeColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-time",update_text:function(a,b){var c=this.field.get_client(b),d=Sao.common.format_time(this.field.time_format(b),c);a.text(d).attr("title",d)}}),Sao.View.Tree.TimeDeltaColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-timedelta"}),Sao.View.Tree.One2ManyColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-one2many",update_text:function(a,b){var c="( "+this.field.get_client(b).length+" )";a.text(c).attr("title",c)}}),Sao.View.Tree.Many2ManyColumn=Sao.class_(Sao.View.Tree.One2ManyColumn,{class_:"column-many2many"}),Sao.View.Tree.BinaryColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-binary",init:function(a,b){Sao.View.Tree.BinaryColumn._super.init.call(this,a,b),this.filename=b.filename||null},get_cell:function(){var a=Sao.View.Tree.BinaryColumn._super.get_cell.call(this);return jQuery("<span/>").appendTo(a),a},update_text:function(a,b){var c;c=this.field.get_size?this.field.get_size(b):this.field.get(b).length;var d=c?Sao.common.humanize(c):"";a.children("span").text(d).attr("title",d);var e=a.children("button");e.length||(e=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-save")).appendTo(a).click(b,function(a){a.stopPropagation(),this.save_as(a.data)}.bind(this))),c?e.show():e.hide()},save_as:function(a){var b,c=a.model.fields[this.filename];c&&(b=c.get_client(a),Sao.common.guess_mimetype(b));var d;d=this.field.get_data?this.field.get_data(a):jQuery.when(this.field.get(a)),d.done(function(a){Sao.common.download_file(a,b)}.bind(this))}}),Sao.View.Tree.ImageColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-image",get_cell:function(){var a=jQuery("<img/>",{class:this.class_,tabindex:0});return a.css("width","100%"),a},render:function(a,b){return b||(b=this.get_cell()),a.load(this.attributes.name).done(function(){var c=this.field.get_client(a);c=c?c>Sao.common.BIG_IMAGE_SIZE?jQuery.when(null):this.field.get_data(a):jQuery.when(null),c.done(function(a){var c,d;a?(d=new Blob([a]),c=window.URL.createObjectURL(d)):c=null,b.attr("src",c)}.bind(this))}.bind(this)),b}}),Sao.View.Tree.URLColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-url",render:function(a,b){return b=Sao.View.Tree.URLColumn._super.render.call(this,a,b),this.field.set_state(a),this.field.get_state_attrs(a).readonly?b.hide():b.show(),b}}),Sao.View.Tree.ProgressBar=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-progressbar",get_cell:function(){var a=jQuery("<div/>",{class:this.class_+" progress",tabindex:0});return jQuery("<div/>",{class:"progress-bar",role:"progressbar","aria-valuemin":0,"aria-valuemax":100}).appendTo(a).css("min-width: 2em"),a},update_text:function(a,b){var c=this.field.get_client(b,100);c&&(c=Sao.i18n.gettext("%1%",c));var d=this.field.get(b)||0,e=a.find(".progress-bar");e.attr("aria-valuenow",100*d),e.css("width",100*d+"%"),e.text(c).attr("title",c)}}),Sao.View.Tree.ButtonColumn=Sao.class_(Object,{init:function(a,b){this.screen=a,this.type="button",this.attributes=b},render:function(a,b){var c=new Sao.common.Button(this.attributes,b);b||c.el.click([a,c],this.button_clicked.bind(this));var d=jQuery.map(this.screen.model.fields,function(a,b){return"eager"==(a.description.loading||"eager")?b:void 0});return a.load(d[0]).done(function(){c.set_state(a)}),c.el},button_clicked:function(a){var b=a.data[0],c=a.data[1];if(b!=this.screen.current_record)return!0;var d=b.expr_eval(this.attributes.states||{});d.invisible||d.readonly||(c.el.prop("disabled",!0),this.screen.button(this.attributes))}}),Sao.View.editabletree_widget_get=function(a){switch(a){case"char":case"text":case"url":case"email":case"callto":case"sip":return Sao.View.EditableTree.Char;case"date":return Sao.View.EditableTree.Date;case"time":return Sao.View.EditableTree.Time;case"timedelta":return Sao.View.EditableTree.TimeDelta;case"integer":case"biginteger":return Sao.View.EditableTree.Integer;case"float":case"numeric":return Sao.View.EditableTree.Float;case"selection":return Sao.View.EditableTree.Selection;case"boolean":return Sao.View.EditableTree.Boolean;case"many2one":return Sao.View.EditableTree.Many2One;case"reference":return Sao.View.EditableTree.Reference;case"one2one":return Sao.View.EditableTree.One2One;case"one2many":case"many2many":return Sao.View.EditableTree.One2Many;case"binary":return Sao.View.EditableTree.Binary}},Sao.View.EditableTree={},Sao.View.EditableTree.editable_mixin=function(a){var b=function(a){a.which!=Sao.common.TAB_KEYCODE&&a.which!=Sao.common.UP_KEYCODE&&a.which!=Sao.common.DOWN_KEYCODE&&a.which!=Sao.common.ESC_KEYCODE&&a.which!=Sao.common.RETURN_KEYCODE||this.focus_out()};a.el.on("keydown",b.bind(a))},Sao.View.EditableTree.Char=Sao.class_(Sao.View.Form.Char,{class_:"editabletree-char",init:function(a,b,c){Sao.View.EditableTree.Char._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Date=Sao.class_(Sao.View.Form.Date,{class_:"editabletree-date",init:function(a,b,c){Sao.View.EditableTree.Date._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Time=Sao.class_(Sao.View.Form.Time,{class_:"editabletree-time",init:function(a,b,c){Sao.View.EditableTree.Time._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.TimeDelta=Sao.class_(Sao.View.Form.TimeDelta,{class_:"editabletree-timedelta",init:function(a,b,c){Sao.View.EditableTree.TimeDelta._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Integer=Sao.class_(Sao.View.Form.Integer,{class_:"editabletree-integer",init:function(a,b,c){Sao.View.EditableTree.Integer._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Float=Sao.class_(Sao.View.Form.Float,{class_:"editabletree-float",init:function(a,b,c){Sao.View.EditableTree.Float._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Selection=Sao.class_(Sao.View.Form.Selection,{class_:"editabletree-selection",init:function(a,b,c){Sao.View.EditableTree.Selection._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Boolean=Sao.class_(Sao.View.Form.Boolean,{class_:"editabletree-boolean",init:function(a,b,c){Sao.View.EditableTree.Boolean._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Many2One=Sao.class_(Sao.View.Form.Many2One,{class_:"editabletree-many2one",init:function(a,b,c){Sao.View.EditableTree.Many2One._super.init.call(this,a,b,c),this.el.on("keydown",this.key_press.bind(this))},key_press:function(a){a.which==Sao.common.TAB_KEYCODE?this.focus_out():Sao.View.EditableTree.Many2One._super.key_press.call(this,a)}}),Sao.View.EditableTree.Reference=Sao.class_(Sao.View.Form.Reference,{class_:"editabletree-reference",init:function(a,b,c){Sao.View.EditableTree.Reference._super.init.call(this,a,b,c),this.el.on("keydown",this.key_press.bind(this))},key_press:function(a){a.which==Sao.common.TAB_KEYCODE?this.focus_out():Sao.View.EditableTree.Reference._super.key_press.call(this,a)}}),Sao.View.EditableTree.One2One=Sao.class_(Sao.View.Form.One2One,{class_:"editabletree-one2one",init:function(a,b,c){Sao.View.EditableTree.One2One._super.init.call(this,a,b,c),this.el.on("keydown",this.key_press.bind(this))},key_press:function(a){a.which==Sao.common.TAB_KEYCODE?this.focus_out():Sao.View.EditableTree.One2One._super.key_press.call(this,a)}}),Sao.View.EditableTree.One2Many=Sao.class_(Sao.View.EditableTree.Char,{class_:"editabletree-one2many",init:function(a,b,c){Sao.View.EditableTree.One2Many._super.init.call(this,a,b,c)},display:function(a,b){a?this.el.val("("+b.get_client(a).length+")"):this.el.val("")},key_press:function(a){a.which==Sao.common.TAB_KEYCODE&&this.focus_out()},set_value:function(a,b){}}),Sao.View.EditableTree.Binary=Sao.class_(Sao.View.Form.Binary,{class_:"editabletree-binary",init:function(a,b,c){Sao.View.EditableTree.Binary._super.init.call(this,a,b,c),Sao.View.EditableTree.editable_mixin(this)}})}(),function(){"use strict";Sao.View.Graph=Sao.class_(Sao.View,{init:function(a,b){Sao.View.Graph._super.init.call(this,a,b),this.view_type="graph",this.el=jQuery("<div/>",{class:"graph"}),this.widgets={},this.widget=this.parse(b.children()[0]),this.widgets.root=this.widget,this.el.append(this.widget.el)},parse:function(a){var b,c,d,e,f,g,h,i=null,j=[],k=function(a){for(var b,c={},d=0,e=a.attributes.length;d<e;d++)b=a.attributes[d],c[b.name]=b.value;return c};for(e=0,f=a.children.length;e<f;e++)switch(d=a.children[e],d.tagName){case"x":for(g=0,h=d.children.length;g<h;g++)i=k(d.children[g]),b=this.screen.model.fields[i.name],i.type=b.description.type,i.string||(i.string=b.description.string);break;case"y":for(g=0,h=d.children.length;g<h;g++)c=k(d.children[g]),c.string||"#"==c.name||(b=this.screen.model.fields[c.name],c.string=b.description.string),j.push(c)}var l;switch(this.attributes.type){case"hbar":l=Sao.View.Graph.HorizontalBar;break;case"line":l=Sao.View.Graph.Line;break;case"pie":l=Sao.View.Graph.Pie;break;default:l=Sao.View.Graph.VerticalBar}return new l(this,i,j)},display:function(){return this.widget.display(this.screen.group)}}),Sao.View.Graph.Chart=Sao.class_(Object,{_chart_type:void 0,init:function(a,b,c){this.view=a,this.xfield=b,this.yfields=c,this.el=jQuery("<div/>"),this.el.uniqueId()},update_data:function(a){var b,c,d,e,f,g,h,i={};this.ids={},i.columns=[["labels"]],i.names={};var j={},k=[this.xfield.name];for(e=0,f=this.yfields.length;e<f;e++)c=this.yfields[e],i.columns.push([c.name]),i.names[c.name]=c.string,j[c.key||c.name]=e+1,k.push(c.name);var l=[],m=function(e){return function(){b=a[e];var f=b.field_get_client(this.xfield.name);f&&(f.isDate||f.isDateTime)&&(f=f.toString());var k=i.columns[0].indexOf(f);k<0&&(k=i.columns[0].push(f)-1),this._add_id(f,b.id);var l;for(g=0,h=this.yfields.length;g<h;g++){if(c=this.yfields[g],d=c.key||c.name,l=i.columns[j[d]],void 0===l[k]&&(l[k]=null),c.domain){var m=jQuery.extend({},Sao.Session.current_session.context);m.context=m,m._user=Sao.Session.current_session.user_id;for(var n in a.model.fields)m[n]=b.field_get(n);if(!new Sao.PYSON.Decoder(m).decode(c.domain))continue}if(l[k]||(l[k]=0),"#"==c.name)l[k]+=1;else{var o=b.field_get(c.name);o&&o.isTimeDelta&&(o=o.asSeconds()),l[k]+=o||0}}}.bind(this)}.bind(this),n=function(a){return function(b){l.push(a.load(b))}},o=[];for(e=0,f=a.length;e<f;e++)b=a[e],k.forEach(n(a[e])),o.push(jQuery.when.apply(jQuery,l).then(m(e)));return jQuery.when.apply(jQuery,o).then(function(){return i})},_add_id:function(a,b){a in this.ids||(this.ids[a]=[]),this.ids[a].push(b)},display:function(a){var b=this.update_data(a);return b.done(function(a){c3.generate(this._c3_config(a))}.bind(this)),b},_c3_config:function(a){var b={};b.bindto="#"+this.el.attr("id"),b.data=a,b.data.type=this._chart_type,b.data.x="labels",b.data.onclick=this.action.bind(this);var c=this.view.screen.model.fields[this.xfield.name].description.type;if("date"==c||"datetime"==c){var d,e,f;e=Sao.common.date_format(this.view.screen.context().date_format),f="%X","datetime"==c?(b.data.xFormat="%Y-%m-%d %H:%M:%S",d=function(a){return Sao.common.format_datetime(e,f,moment(a))}):(b.data.xFormat="%Y-%m-%d",d=function(a){return Sao.common.format_date(e,moment(a))}),b.axis={x:{type:"timeseries",tick:{format:d}}}}else b.axis={x:{type:"category"}};for(var g={},h=0;h<this.yfields.length;h++){var i=this.yfields[h];i.color&&(g[i.name]=i.color)}return b.data.color=function(a,b){var c=b.id||b;return g[c]||a},b},action:function(a,b){var c=this.ids[this._action_key(a)],d=jQuery.extend({},this.view.screen.group._context);delete d.active_ids,delete d.active_id,Sao.Action.exec_keyword("graph_open",{model:this.view.screen.model_name,id:c[0],ids:c},d,!1)},_action_key:function(a){return a.x}}),Sao.View.Graph.VerticalBar=Sao.class_(Sao.View.Graph.Chart,{_chart_type:"bar"}),Sao.View.Graph.HorizontalBar=Sao.class_(Sao.View.Graph.Chart,{_chart_type:"bar",_c3_config:function(a){var b=Sao.View.Graph.HorizontalBar._super._c3_config.call(this,a);return b.axis.rotated=!0,b}}),Sao.View.Graph.Line=Sao.class_(Sao.View.Graph.Chart,{_chart_type:"line",_c3_config:function(a){var b=Sao.View.Graph.Line._super._c3_config.call(this,a);return b.line={connectNull:!0},b}}),Sao.View.Graph.Pie=Sao.class_(Sao.View.Graph.Chart,{_chart_type:"pie",_c3_config:function(a){var b,c,d,e,f=Sao.View.Graph.Pie._super._c3_config.call(this,a),g=[],h={};for(b=0,c=a.columns.length;b<c;b++)"labels"==a.columns[b][0]?d=a.columns[b].slice(1):e=a.columns[b].slice(1);delete f.axis,delete f.data.x;var i,j=this.view.screen.model.fields[this.xfield.name].description.type;if("date"==j||"datetime"==j){var k=Sao.common.date_format(this.view.screen.context().date_format),l=k+" %X";i="datetime"==j?function(a){return Sao.common.format_datetime(l,a)}:function(a){return Sao.common.format_date(k,a)}}var m;for(b=0,c=d.length;b<c;b++)m=d[b],i&&(m=i(m)),g.push([b,e[b]]),h[b]=m;return f.data.columns=g,f.data.names=h,f},_add_id:function(a,b){var c=this.xfield.type;if("date"==c||"datetime"==c){var d=Sao.common.date_format(this.view.screen.context().date_format),e=d+" %X";a="datetime"==c?Sao.common.format_datetime(e,a):Sao.common.format_date(d,a)}Sao.View.Graph.Pie._super._add_id.call(this,a,b)},_action_key:function(a){return a.id}})}(),function(){"use strict";Sao.View.Calendar=Sao.class_(Sao.View,{init:function(a,b){Sao.View.Calendar._super.init.call(this,a,b),this.processing=!0,this.view_type="calendar",this.el=jQuery("<div/>",{class:"calendar"});var c=Sao.i18n.getlang();c=c.slice(0,2);var d="month";"week"==this.attributes.mode&&(d=this.get_week_view());var e={left:"today prev,next",center:"title",right:"month,"+this.get_week_view()};if(Sao.i18n.rtl){var f=jQuery.extend({},e);f.left=e.right,f.right=e.left,e=f}this.el.fullCalendar({defaultView:d,header:e,timeFormat:"H:mm",events:this.get_events.bind(this),locale:c,isRTL:Sao.i18n.rtl,themeSystem:"bootstrap3",bootstrapGlyphicons:{prev:"chevron-"+(Sao.i18n.rtl?"right":"left"),next:"chevron-"+(Sao.i18n.rtl?"left":"right")},buttonTextOverride:{today:Sao.i18n.gettext("Today"),month:Sao.i18n.gettext("Month"),week:Sao.i18n.gettext("Week")},eventRender:this.event_render.bind(this),eventResize:this.event_resize.bind(this),eventDrop:this.event_drop.bind(this),eventClick:this.event_click.bind(this),dayClick:this.day_click.bind(this)}),this.fields=[],b.find("calendar").children().each(function(a,b){"field"==b.tagName&&this.fields.push(b.attributes.name.value)}.bind(this)),this.el.fullCalendar("changeView",d)},get_colors:function(a){var b={};return b.text_color="black",this.attributes.color&&(b.text_color=a.field_get(this.attributes.color)),b.background_color="lightblue",this.attributes.background_color&&(b.background_color=a.field_get(this.attributes.background_color)),b},display:function(){this.el.fullCalendar("render"),this.processing||this.el.fullCalendar("refetchEvents")},insert_event:function(a){var b=this.screen.model.fields[this.fields[0]].get_client(a),c=a.field_get_client(this.attributes.dtstart),d=null;this.attributes.dtend&&(d=a.field_get_client(this.attributes.dtend));for(var e=[],f=1;f<this.fields.length;f++)e.push(this.screen.model.fields[this.fields[f]].get_client(a));if(e=e.join("\n"),c){var g=c.isDate&&(!d||d.isDate);if(g&&d&&!d.isSame(c)&&"calendar"==this.screen.current_view.view_type&&d.add(1,"day"),d&&c>d)return;var h=this.get_colors(a),i={title:b,start:c,end:d,allDay:g,editable:!0,color:h.background_color,textColor:h.text_color,record:a,description:e};this.events.push(i)}},get_events:function(a,b,c,d){this.processing=!0,this.start=Sao.DateTime(a.utc()),this.end=Sao.DateTime(b.utc());var e=jQuery.when();if(this.screen.current_view&&"form"!=this.screen.current_view.view_type){var f=this.screen.screen_container.get_text();e=this.screen.search_filter(f)}this.events=[];var g=[];e.then(function(){return this.screen.group.forEach(function(a){var b=[];this.fields.forEach(function(c){b.push(a.load(c))});var c=jQuery.when.apply(jQuery,b).then(function(){this.insert_event(a)}.bind(this));g.push(c)}.bind(this)),jQuery.when.apply(jQuery,g).then(function(){d(this.events)}.bind(this)).always(function(){this.processing=!1}.bind(this))}.bind(this))},get_week_view:function(){return"datetime"==this.screen.model.fields[this.attributes.dtstart].description.type?"agendaWeek":"basicWeek"},event_click:function(a,b,c){this.clicked_event||(this.clicked_event=!0,this.screen.set_current_record(a.record),this.screen.switch_view().always(function(){this.clicked_event=!1}.bind(this)))},event_drop:function(a,b,c,d,e,f){var g=this.attributes.dtstart,h=this.attributes.dtend,i=a.record,j=(i.group,i.field_get(g)),k=j;h&&(k=i.field_get(h));var l=a.start,m=a.end;m!=j&&m||(m=l),j.isDateTime?(m=Sao.DateTime(m.format()).utc(),l=Sao.DateTime(l.format()).utc()):j.isSame(k)||(m.subtract(1,"day"),this.el.fullCalendar("refetchEvents")),j<=l?(h&&i.field_set_client(h,m),i.field_set_client(g,l)):(i.field_set_client(g,l),h&&i.field_set_client(h,m)),i.save()},event_resize:function(a,b,c,d,e,f){var g=this.attributes.dtend,h=a.record,i=(h.group,h.field_get(g)),j=a.end;!0===i.isDateTime?j=Sao.DateTime(j.format()).utc():(j.subtract(1,"day"),this.el.fullCalendar("refetchEvents")),j!=i&&j||(j=i),h.field_set_client(g,j),h.save()},event_render:function(a,b,c){this.screen.model.fields.date&&"calendar"==this.screen.view_name&&b.find(".fc-time").remove(),b.find(".fc-content").append(jQuery("<div/>",{class:"fc-description"}).text(a.description)),b.css("white-space","pre"),Sao.common.MODELACCESS.get(this.screen.model_name).write||(a.editable=!1)},day_click:function(a,b,c){Sao.common.MODELACCESS.get(this.screen.model_name).create&&(this.el.fullCalendar("gotoDate",a),this.screen.set_current_record(null),this.screen.new_())},current_domain:function(){if(!this.start&&!this.end)return[["id","=",-1]];var a=Sao.DateTime(this.start),b=Sao.DateTime(this.end),c=this.attributes.dtstart,d=this.attributes.dtend||c;return["OR",["AND",[c,">=",a],[c,"<",b]],["AND",[d,">=",a],[d,"<",b]],["AND",[c,"<",a],[d,">",b]]]},get_displayed_period:function(){var a=[];return this.start&&this.end&&a.push(this.start,this.end),a},set_default_date:function(a,b){var c=this.attributes.dtstart,d=a.model.fields[c];return d instanceof Sao.field.DateTime?b=Sao.DateTime(b):d instanceof Sao.field.Date&&(b=Sao.Date(b)),d.set(a,b),a.on_change([c]).then(function(){return a.on_change_with([c])})},get_selected_date:function(){return this.el.fullCalendar("getDate")}})}(),function(){"use strict";Sao.Action={report_blob_url:void 0},Sao.Action.exec_action=function(a,b,c){function d(a,c){if(!b.model||!b.ids)return jQuery.when(a);var d=5,e=b.ids.slice(0,d);return Sao.rpc({method:"model."+b.model+".read",params:[e,["rec_name"],c]},Sao.Session.current_session).then(function(c){var e=c.map(function(a){return a.rec_name}).join(Sao.i18n.gettext(", "));return b.ids.length>d&&(e+=Sao.i18n.gettext(",…")),Sao.i18n.gettext("%1 (%2)",a,e)})}c=c?jQuery.extend({},c):{};var e=Sao.Session.current_session;b=void 0===b?{}:jQuery.extend({},b),delete c.active_id,delete c.active_ids,delete c.active_model,b.action_id=a.id;var f,g={};switch(a.type){case"ir.action.act_window":g.view_ids=[],g.mode=null,jQuery.isEmptyObject(a.views)?jQuery.isEmptyObject(a.view_id)||(g.view_ids=[a.view_id[0]]):(g.view_ids=[],g.mode=[],a.views.forEach(function(a){g.view_ids.push(a[0]),g.mode.push(a[1])})),void 0===a.pyson_domain&&(a.pyson_domain="[]");var h={active_model:b.model||null,active_id:b.id||null,active_ids:b.ids};h=jQuery.extend(h,e.context),h._user=e.user_id;var i=new Sao.PYSON.Decoder(h);return g.context=jQuery.extend({},c,i.decode(a.pyson_context||"{}")),h=jQuery.extend(h,g.context),h=jQuery.extend(h,c),h.context=h,i=new Sao.PYSON.Decoder(h),g.domain=i.decode(a.pyson_domain),g.order=i.decode(a.pyson_order),g.search_value=i.decode(a.pyson_search_value||"[]"),g.tab_domain=[],a.domains.forEach(function(a,b){g.tab_domain.push([a[0],i.decode(a[1]),a[2]])}),f=jQuery.when(a.name),g.model=a.res_model||b.res_model,g.res_id=a.res_id||b.res_id,g.context_model=a.context_model,g.context_domain=a.context_domain,null!==a.limit?g.limit=a.limit:g.limit=Sao.config.limit,g.icon=a["icon.rec_name"]||"",a.keyword&&(f=d(a.name,g.context)),void f.then(function(a){g.name=a,Sao.Tab.create(g)});case"ir.action.wizard":return g.action=a.wiz_name,g.data=b,g.context=c,g.window=a.window,f=jQuery.when(a.name),"form_action"===(a.keyword||"form_action")&&(f=d(a.name,c)),void f.done(function(a){g.name=a,Sao.Wizard.create(g)});case"ir.action.report":return g.name=a.report_name,g.data=b,g.direct_print=a.direct_print,g.email_print=a.email_print,g.email=a.email,g.context=c,void Sao.Action.exec_report(g);case"ir.action.url":return void window.open(a.url,"_blank","noreferrer,noopener")}},Sao.Action.exec_keyword=function(a,b,c,d,e){void 0===d&&(d=!0),void 0===e&&(e=!1);var f=b.id,g={method:"model.ir.action.keyword.get_keyword",params:[a,[b.model,f],{}]},h=Sao.rpc(g,Sao.Session.current_session),i=function(a){var f={};for(var g in a){var h=a[g];f[h.name.replace(/_/g,"")]=h}return Sao.common.selection(Sao.i18n.gettext("Select your action"),f,e).then(function(a){Sao.Action.exec_action(a,b,c)},function(){jQuery.isEmptyObject(f)&&d&&alert(Sao.i18n.gettext("No action defined."))})};return h.pipe(i)},Sao.Action.exec_report=function(a){a.context||(a.context={}),a.email||(a.email={});var b=jQuery.extend({},a.data),c=jQuery.extend({},Sao.Session.current_session.context);jQuery.extend(c,a.context),c.direct_print=a.direct_print,c.email_print=a.email_print,c.email=a.email,Sao.rpc({method:"report."+a.name+".execute",params:[b.ids||[],b,c]},Sao.Session.current_session).done(function(a){var b=a[0],c=a[1],d=(a[2],a[3]),e=d+"."+b;Sao.common.download_file(c,e)})},Sao.Action.execute=function(a,b,c,d,e){c?Sao.rpc({method:"model."+c+".search_read",params:[[["action","=",a]],0,1,null,null,d]},Sao.Session.current_session).done(function(a){var f=a[0];if(e){var g={"ir.action.report":"form_report","ir.action.wizard":"form_action","ir.action.act_window":"form_relate"};f.keyword||(f.keyword=g[c])}Sao.Action.exec_action(f,b,d)}):Sao.rpc({method:"model.ir.action.read",params:[[a],["type"],d]},Sao.Session.current_session).done(function(c){Sao.Action.execute(a,b,c[0].type,d,e)})},Sao.Action.evaluate=function(a,b,c){a=jQuery.extend({},a);var d={};return"pyson_email"in a&&(d=c.expr_eval(a.pyson_email),jQuery.isEmptyObject(d)&&(d={})),"subject"in d||(d.subject=a.name.replace(/_/g,"")),a.email=d,a}}(),function(){"use strict";Sao.common={},Sao.common.BACKSPACE_KEYCODE=8,Sao.common.TAB_KEYCODE=9,Sao.common.RETURN_KEYCODE=13,Sao.common.ESC_KEYCODE=27,Sao.common.UP_KEYCODE=38,Sao.common.DOWN_KEYCODE=40,Sao.common.DELETE_KEYCODE=46,Sao.common.F2_KEYCODE=113,Sao.common.F3_KEYCODE=114,Sao.common.SELECTION_NONE=1,Sao.common.SELECTION_SINGLE=2,Sao.common.SELECTION_MULTIPLE=3,Sao.common.BIG_IMAGE_SIZE=Math.pow(10,6),Sao.common.compare=function(a,b){if(a.length!=b.length)return!1;for(var c=0;c<a.length;c++){var d=a[c],e=b[c];if(d instanceof Array&&e instanceof Array){if(!Sao.common.compare(d,e))return!1}else if(moment.isMoment(d)&&moment.isMoment(e)){if(d.isDate!=e.isDate&&d.isDateTime!=e.isDateTime&&d.valueOf()!=e.valueOf())return!1}else if(d instanceof Number||e instanceof Number){if(Number(d)!==Number(e))return!1}else if(d!=e)return!1}return!0},Sao.common.contains=function(a,b){for(var c=0;c<a.length;c++)if(Sao.common.compare(a[c],b))return!0;return!1},Sao.common.intersect=function(a,b){for(var c=0,d=0,e=[];c<a.length&&d<b.length;)a[c]<b[d]?c++:a[c]>b[d]?d++:(e.push(a[c]),c++,d++);return e},Sao.common.click_press=function(a,b){return function c(d){if("keypress"!=d.type||d.which==Sao.common.RETURN_KEYCODE)return b&&jQuery(this).off("click keypress",null,c),a(d)}},Sao.common.product=function(a,b){b=b||1;for(var c=[],d=0;d<b;)c=c.concat(a),d++;var e=[[]];return c.forEach(function(a){var b=[];e.forEach(function(c){a.forEach(function(a){b.push(c.concat([a]))})}),e=b}),e},Sao.common.selection=function(a,b,c){void 0===c&&(c=!1);var d=jQuery.Deferred();if(jQuery.isEmptyObject(b))return d.reject(),d;var e=Object.keys(b).sort();if(1==e.length&&!c){var f=e[0];return d.resolve(b[f]),d}var g=new Sao.Dialog(a||Sao.i18n.gettext("Your selection:"),"selection-dialog");return e.forEach(function(a,b){jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>").text(" "+a).prepend(jQuery("<input/>",{type:"radio",name:"selection",value:b}))).appendTo(g.body)}),g.body.find("input").first().prop("checked",!0),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){g.modal.modal("hide"),d.fail()}).appendTo(g.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){var a=g.body.find("input:checked").attr("value");g.modal.modal("hide"),d.resolve(b[e[a]])}).appendTo(g.footer),g.modal.on("hidden.bs.modal",function(a){jQuery(this).remove()}),g.modal.modal("show"),d},Sao.common.moment_format=function(a){return a.replace("%a","ddd").replace("%A","dddd").replace("%w","d").replace("%d","DD").replace("%b","MMM").replace("%B","MMMM").replace("%m","MM").replace("%y","YY").replace("%Y","YYYY").replace("%H","HH").replace("%I","hh").replace("%p","A").replace("%M","mm").replace("%S","ss").replace("%f","SSS").replace("%z","ZZ").replace("%Z","zz").replace("%j","DDDD").replace("%U","ww").replace("%W","WW").replace("%c","llll").replace("%x","L").replace("%X","LTS").replace("%","%%")},Sao.common.DATE_OPERATORS=[["S",moment.duration(-1,"seconds")],["s",moment.duration(1,"seconds")],["I",moment.duration(-1,"minutes")],["i",moment.duration(1,"minutes")],["H",moment.duration(-1,"hours")],["h",moment.duration(1,"hours")],["D",moment.duration(-1,"days")],["d",moment.duration(1,"days")],["W",moment.duration(-1,"weeks")],["w",moment.duration(1,"weeks")],["M",moment.duration(-1,"months")],["m",moment.duration(1,"months")],["Y",moment.duration(-1,"years")],["y",moment.duration(1,"years")]],Sao.common.date_format=function(a){if(jQuery.isEmptyObject(a)&&(a="%Y-%m-%d",Sao.Session.current_session)){var b=Sao.Session.current_session.context;b.locale&&b.locale.date&&(a=b.locale.date)}return Sao.common.moment_format(a)},Sao.common.format_time=function(a,b){return b?b.format(Sao.common.moment_format(a)):""},Sao.common.parse_time=function(a,b){if(jQuery.isEmptyObject(b))return null;var c=function(c){var d=a.indexOf(c);if(~d){var e=parseInt(b.slice(d,d+c.length),10);if(!isNaN(e))return e}return 0};return Sao.Time(c("%H"),c("%M"),c("%S"),c("%f"))},Sao.common.format_date=function(a,b){return b?b.format(Sao.common.moment_format(a)):""},Sao.common.parse_date=function(a,b){var c=moment(b,Sao.common.moment_format(a));return c=c.isValid()?Sao.Date(c.year(),c.month(),c.date()):null},Sao.common.format_datetime=function(a,b,c){return c?c.format(Sao.common.moment_format(a+" "+b)):""},
|
|
13
|
-
Sao.common.parse_datetime=function(a,b,c){var d=moment(c,Sao.common.moment_format(a+" "+b));return d=d.isValid()?Sao.DateTime(d.year(),d.month(),d.date(),d.hour(),d.minute(),d.second(),d.millisecond()):null},Sao.common.timedelta={},Sao.common.timedelta.DEFAULT_CONVERTER={s:1},Sao.common.timedelta.DEFAULT_CONVERTER.m=60*Sao.common.timedelta.DEFAULT_CONVERTER.s,Sao.common.timedelta.DEFAULT_CONVERTER.h=60*Sao.common.timedelta.DEFAULT_CONVERTER.m,Sao.common.timedelta.DEFAULT_CONVERTER.d=24*Sao.common.timedelta.DEFAULT_CONVERTER.h,Sao.common.timedelta.DEFAULT_CONVERTER.w=7*Sao.common.timedelta.DEFAULT_CONVERTER.d,Sao.common.timedelta.DEFAULT_CONVERTER.M=30*Sao.common.timedelta.DEFAULT_CONVERTER.d,Sao.common.timedelta.DEFAULT_CONVERTER.Y=365*Sao.common.timedelta.DEFAULT_CONVERTER.d,Sao.common.timedelta._get_separator=function(){return{Y:Sao.i18n.gettext("Y"),M:Sao.i18n.gettext("M"),w:Sao.i18n.gettext("w"),d:Sao.i18n.gettext("d"),h:Sao.i18n.gettext("h"),m:Sao.i18n.gettext("m"),s:Sao.i18n.gettext("s")}},Sao.common.timedelta.format=function(a,b){if(!a)return"";b||(b=Sao.common.timedelta.DEFAULT_CONVERTER);var c=[];a=a.asSeconds();var d="";a<0&&(d="-"),a=Math.abs(a),b=Object.keys(b).map(function(a){return[a,b[a]]}),b.sort(function(a,b){return b[1]-a[1]});for(var e,f,g=[],h=0;h<b.length;h++){e=b[h][0],f=b[h][1];var i=Math.floor(a/f);a-=i*f,g.push(i)}for(h=0;h<b.length-3;h++)e=b[h][0],(f=g[h])&&c.push(f+Sao.common.timedelta._get_separator()[e]);if(jQuery(g.slice(-3)).is(function(a,b){return b})||jQuery.isEmptyObject(c)){var j=g.slice(-3),k=j[0].toString().padStart(2,"0");k+=":"+j[1].toString().padStart(2,"0"),(j[2]||a)&&(k+=":"+j[2].toString().padStart(2,"0")),c.push(k)}return c=d+c.reduce(function(a,b){return a?a+" "+b:b}),a&&(jQuery(g.slice(-3)).is(function(a,b){return b})||(c+=" "),c+=(""+a.toFixed(6)).slice(1)),c},Sao.common.timedelta.parse=function(a,b){if(!a)return null;b||(b=Sao.common.timedelta.DEFAULT_CONVERTER);var c,d=Sao.common.timedelta._get_separator();for(var e in d)c=d[e],a=a.replace(c,c+" ");for(var f,g=0,h=a.split(" "),i=0;i<h.length;i++){var j=h[i];if(j.contains(":"))for(var k=j.split(":"),l=[b.h,b.m,b.s],m=0;m<Math.min(k.length,l.length);m++){var n=k[m],o=l[m];f=Math.abs(parseFloat(n))*o,isNaN(f)||(g+=f)}else{var p=!1;for(var q in d)if(c=d[q],j.endsWith(c)){j=j.slice(0,-c.length),f=Math.abs(parseFloat(j))*b[q],isNaN(f)||(g+=f),p=!0;break}p||(f=Math.abs(parseFloat(j)),isNaN(f)||(g+=f))}}return a.contains("-")&&(g*=-1),Sao.TimeDelta(null,g)},Sao.common.ModelAccess=Sao.class_(Object,{init:function(){this.batchnum=100,this._models=[],this._access={}},load_models:function(a){a||(this._access={}),this._models=Sao.rpc({method:"model.ir.model.list_models",params:[{}]},Sao.Session.current_session,!1)},get:function(a){if(void 0!==this._access[a])return this._access[a];var b=this._models.indexOf(a);b<0&&(this.load_models(!1),b=this._models.indexOf(a));var c=this._models.slice(Math.max(0,b-Math.floor(this.batchnum/2)),b+Math.floor(this.batchnum/2)),d=Sao.rpc({method:"model.ir.model.access.get_access",params:[c,{}]},Sao.Session.current_session,!1);return this._access=jQuery.extend(this._access,d),this._access[a]}}),Sao.common.MODELACCESS=new Sao.common.ModelAccess,Sao.common.ModelHistory=Sao.class_(Object,{init:function(){this._models=[]},load_history:function(){return this._models=[],Sao.rpc({method:"model.ir.model.list_history",params:[{}]},Sao.Session.current_session).then(function(a){this._models=a}.bind(this))},contains:function(a){return~this._models.indexOf(a)}}),Sao.common.MODELHISTORY=new Sao.common.ModelHistory,Sao.common.ViewSearch=Sao.class_(Object,{init:function(){this.encoder=new Sao.PYSON.Encoder},load_searches:function(){return this.searches={},Sao.rpc({method:"model.ir.ui.view_search.get_search",params:[{}]},Sao.Session.current_session).then(function(a){this.searches=a}.bind(this))},get:function(a){return this.searches[a]||[]},add:function(a,b,c){return Sao.rpc({method:"model.ir.ui.view_search.create",params:[[{model:a,name:b,domain:this.encoder.encode(c)}],{}]},Sao.Session.current_session).then(function(d){var e=d[0];void 0===this.searches[a]&&(this.searches[a]=[]),this.searches[a].push([e,b,c])}.bind(this))},remove:function(a,b){return Sao.rpc({method:"model.ir.ui.view_search.delete",params:[[b],{}]},Sao.Session.current_session).then(function(){for(var c=0;c<this.searches[a].length;c++){if(this.searches[a][c][0]===b){this.searches[a].splice(c,1);break}}}.bind(this))}}),Sao.common.VIEW_SEARCH=new Sao.common.ViewSearch,Sao.common.humanize=function(a){for(var b=["bytes","KB","MB","GB","TB","PB"],c=0,d=b.length;c<d;c++){if(a<1e3)return a.toPrecision(4)+" "+b[c];a/=1e3}},Sao.common.EvalEnvironment=function(a,b){void 0===b&&(b="eval");var c;if("eval"==b)c=a.get_eval();else{c={};for(var d in a.model.fields){var e=a.model.fields[d];c[d]=e.get_on_change_value(a)}}return c.id=a.id,a.group.parent&&Object.defineProperty(c,"_parent_"+a.group.parent_name,{enumerable:!0,get:function(){return Sao.common.EvalEnvironment(a.group.parent,b)}}),c.get=function(a,b){return this.hasOwnProperty(a)?this[a]:b},c},Sao.common.selection_mixin={},Sao.common.selection_mixin.init=function(){this.selection=null,this.inactive_selection=[],this._last_domain=null,this._values2selection={},this._domain_cache={},void 0===this.nullable_widget&&(this.nullable_widget=!0)},Sao.common.selection_mixin.init_selection=function(a,b){a||(a={},(this.attributes.selection_change_with||[]).forEach(function(b){a[b]=null}));var c,d=JSON.stringify(a),e=this.attributes.selection||[],f=function(a){a=jQuery.extend([],a),(void 0===this.attributes.sort||this.attributes.sort)&&a.sort(function(a,b){return a[1].localeCompare(b[1])}),this.selection=jQuery.extend([],a),b&&b(this.selection)};e instanceof Array||d in this._values2selection?(d in this._values2selection&&(e=this._values2selection[d]),f.call(this,e),c=jQuery.when()):(c=jQuery.isEmptyObject(this.attributes.selection_change_with)?this.model.execute(e,[]):this.model.execute(e,[a]),c=c.then(function(a){return this._values2selection[d]=a,a}.bind(this)),c=c.then(f.bind(this))),this.inactive_selection=[],this._selection_prm=c},Sao.common.selection_mixin.update_selection=function(a,b,c){var d=function(){if(!b)return void(c&&c(this.selection));var d=b.get_domain(a);if("relation"in this.attributes){var e=b.get_context(a),f=JSON.stringify([d,e]);if(f in this._domain_cache&&(this.selection=this._domain_cache[f],this._last_domain=[d,e]),null!==this._last_domain&&Sao.common.compare(d,this._last_domain[0])&&JSON.stringify(e)==JSON.stringify(this._last_domain[1]))return void(c&&c(this.selection));var g=Sao.rpc({method:"model."+this.attributes.relation+".search_read",params:[d,0,null,null,["rec_name"],e]},a.model.session);g.done(function(a){var b=[];a.forEach(function(a){b.push([a.id,a.rec_name])}),this.nullable_widget&&b.push([null,""]),this._last_domain=[d,e],this._domain_cache[f]=b,this.selection=jQuery.extend([],b),c&&c(this.selection)}.bind(this)),g.fail(function(){this._last_domain=null,this.selection=[],c&&c(this.selection)}.bind(this))}else{var h=this.attributes.selection_change_with||[],i=a._get_on_change_args(h);delete i.id,Sao.common.selection_mixin.init_selection.call(this,i,function(){Sao.common.selection_mixin.filter_selection.call(this,d,a,b),c&&c(this.selection)}.bind(this))}};this._selection_prm.done(d.bind(this))},Sao.common.selection_mixin.filter_selection=function(a,b,c){if(!jQuery.isEmptyObject(a)){var d,e=new Sao.common.DomainInversion,f=function(b){var c={};return c[this.field_name]=b[0],e.eval_domain(a,c)}.bind(this),g=function(a){return function(b){return~a.indexOf(b[0])||jQuery.isEmptyObject(a)}};if("reference"==c.description.type){d=g(c.get_models(b))}else d=f;this.selection=this.selection.filter(d)}},Sao.common.selection_mixin.get_inactive_selection=function(a){if(!this.attributes.relation)return jQuery.when([]);for(var b=0,c=this.inactive_selection.length;b<c;b++)if(a==this.inactive_selection[b][0])return jQuery.when(this.inactive_selection[b]);return Sao.rpc({method:"model."+this.attributes.relation+".read",params:[[a],["rec_name"],{}]},Sao.Session.current_session).then(function(a){return this.inactive_selection.push([a[0].id,a[0].rec_name]),[a[0].id,a[0].rec_name]}.bind(this))},Sao.common.Button=Sao.class_(Object,{init:function(a,b){this.attributes=a,b?this.el=b:(this.el=jQuery("<button/>"),this.el.text(a.string||""),this.attributes.rule&&this.el.append(" ").append(jQuery("<span/>",{class:"badge"}))),this.icon=this.el.children("img"),this.icon.length||(this.icon=jQuery("<img/>",{class:"icon"}).prependTo(this.el),this.icon.hide()),this.el.addClass("btn btn-default"),this.el.attr("type","button"),this.icon.attr("aria-hidden",!0),this.set_icon(a.icon)},set_icon:function(a){if(!a)return this.icon.attr("src",""),void this.icon.hide();Sao.common.ICONFACTORY.get_icon_url(a).done(function(a){this.icon.attr("src",a),this.icon.show()}.bind(this))},set_state:function(a){var b;if(b=a?a.expr_eval(this.attributes.states||{}):{},b.invisible?this.el.hide():this.el.show(),this.el.prop("disabled",Boolean(b.readonly)),this.set_icon(b.icon||this.attributes.icon),this.attributes.rule){var c;c=a?a.get_button_clicks(this.attributes.name):jQuery.when(),c.then(function(a){var b=this.el.children(".badge"),c=[],d="";if(!jQuery.isEmptyObject(a)){for(var e in a)c.push(a[e]);d=Sao.i18n.gettext("By: ")+c.join(Sao.i18n.gettext(", "))}b.text(c.length||""),b.attr("title",d)}.bind(this))}if((void 0===this.attributes.type||"class"===this.attributes.type)&&a)for(var d=a.group.parent;d;){if(d.has_changed()){this.el.prop("disabled",!0);break}d=d.group.parent}}}),Sao.common.udlex=Sao.class_(Object,{init:function(a){var b=Sao.class_(Object,{init:function(a){this.stream=a.split(""),this.i=0},read:function(a){if(void 0===a&&(a=1),this.i>=this.stream.length)return null;var b=this.stream.slice(this.i,this.i+a).join();return this.i+=a,b}});this.instream=new b(a),this.eof=null,this.commenters="",this.nowordchars=[":",">","<","=","!",'"',";","(",")"],this.whitespace=" \t\r\n",this.whitespace_split=!1,this.quotes='"',this.escape="\\",this.escapedquotes='"',this.state=" ",this.pushback=[],this.token=""},get_token:function(){return this.pushback.length>0?this.pushback.shift():this.read_token()},read_token:function(){for(var a=!1,b=" ";;){var c=this.instream.read(1);if(null===this.state){this.token="";break}if(" "==this.state){if(!c){this.state=null;break}if(this.whitespace.contains(c)){if(this.token||a)break;continue}if(this.commenters.contains(c));else if(this.escape.contains(c))b="a",this.state=c;else if(~this.nowordchars.indexOf(c))if(this.quotes.contains(c))this.state=c;else{if(!this.whitespace_split){if(this.token=c,this.token||a)break;continue}this.token=c,this.state="a"}else this.token=c,this.state="a"}else if(this.quotes.contains(this.state)){if(a=!0,!c)throw"no closing quotation";c==this.state?this.state="a":this.escape.contains(c)&&this.escapedquotes.contains(this.state)?(b=this.state,this.state=c):this.token=this.token+c}else if(this.escape.contains(this.state)){if(!c)throw"no escaped character";this.quotes.contains(b)&&c!=this.state&&c!=b&&(this.token=this.token+this.state),this.token=this.token+c,this.state=b}else if("a"==this.state){if(!c){this.state=null;break}if(this.whitespace.contains(c)){if(this.state=" ",this.token||a)break;continue}if(this.commenters.contains(c));else if(this.quotes.contains(c))this.state=c;else if(this.escape.contains(c))b="a",this.state=c;else{if(~this.nowordchars.indexOf(c)&&!this.quotes.contains(c)&&!this.whitespace_split){if(this.pushback.unshift(c),this.state=" ",this.token)break;continue}this.token=this.token+c}}}var d=this.token;return this.token="",a||""!==d||(d=null),d},next:function(){var a=this.get_token();return a==this.eof?null:a}}),Sao.common.DomainParser=Sao.class_(Object,{OPERATORS:["!=","<=",">=","=","!","<",">"],init:function(a,b){this.fields={},this.strings={},this.update_fields(a),this.context=b},update_fields:function(a){for(var b in a){var c=a[b];(c.searchable||void 0===c.searchable)&&(this.fields[b]=c,this.strings[c.string.toLowerCase()]=c)}},parse:function(a){try{for(var b=new Sao.common.udlex(a),c=[];;){var d=b.next();if(null===d)break;c.push(d)}return c=this.group_operator(c),c=this.parenthesize(c),c=this.group(c),c=this.operatorize(c,"or"),c=this.operatorize(c,"and"),c=this.parse_clause(c),this.simplify(c)}catch(e){if("no closing quotation"==e)return this.parse(a+'"');throw e}},stringable:function(a){var b=function(a){if(!a)return!0;var b=function(a){return a instanceof Array};if((~["AND","OR"].indexOf(a[0])||b(a[0]))&&a.slice(1).every(b))return this.stringable(a);var c=a[0],d=a[2];if(c.endsWith(".rec_name")&&(c=c.slice(0,-9)),c in this.fields){var e=this.fields[c];if(~["many2one","one2one","one2many","many2many"].indexOf(e.type)){var f=function(a){if("many2one"==e.type){if("string"!=typeof a&&null!==a)return!1}else if("string"!=typeof a)return!1;return!0};return d instanceof Array?d.every(f):f(d)}return!0}return"rec_name"==c}.bind(this);return!a||(~["AND","OR"].indexOf(a[0])&&(a=a.slice(1)),a.every(b))},string:function(a){var b=function(a){if(jQuery.isEmptyObject(a))return"";if("string"!=typeof a[0]||~["AND","OR"].indexOf(a[0]))return"("+this.string(a)+")";var b=a[0],c=a[1],d=a[2];if(b.endsWith(".rec_name")&&(b=b.slice(0,-9)),!(b in this.fields))return this.is_full_text(d)&&(d=d.slice(1,-1)),this.quote(d);var e=this.fields[b],f=null;a.length>3&&(f=a[3]),c.contains("ilike")&&(this.is_full_text(d)?d=d.slice(1,-1):this.is_like(d)||(c="ilike"==c?"=":"!",d=this.unescape(d)));var g=this.default_operator(e);g==c.trim()?(c="",~this.OPERATORS.indexOf(d)&&(c='"" ')):c.contains(g)&&(c.contains("not")||c.contains("!"))&&(c=c.replace(g,"").replace("not","!").trim()),c.endsWith("in")&&(c="not in"==c?"!":"");var h=this.format_value(e,d,f);return~this.OPERATORS.indexOf(c)&&~["char","text","selection"].indexOf(e.type)&&""===d&&(h='""'),this.quote(e.string)+": "+c+h};if(b=b.bind(this),jQuery.isEmptyObject(a))return"";var c=" ";return"AND"!=a[0]&&"OR"!=a[0]||("OR"==a[0]&&(c=" or "),a=a.slice(1)),a.map(b).join(c)},completion:function(a){var b,c,d=[],e=this.parse(a),f=0;for(b=a.length;b>0&&(")"!=a[b]&&" "!=a[b]);b--)")"==a[b]&&(f+=1);var g=this.ending_clause(e),h=g[0],i=g[1],j=i-f,k=this.string(e);j>0&&(k=k.substring(0,k.length-j)),k!=a&&d.push(k);var l,m,n=function(a,b){return b>0?a.substring(0,b):a};if(null!==h&&0===f){var o=this.complete(h);for(b=0,c=o.length;b<c;b++)l=o[b],m=this.string(this.replace_ending_clause(e,l)),d.push(n(m,j))}if(a.length>0){if(" "!=a.substr(a.length-1,1))return d;if(a.length>=2||":"==a.substr(a.length-2,1))return d}var p,q,r;for(var s in this.strings){p=this.strings[s],q=this.default_operator(p),r="","ilike"!=q&&"not ilike"!=q||(r=this.likify(r));var t=this.append_ending_clause(e,[p.name,q,r],j),u=this.string(t);d.push(n(u,j))}return d},complete:function(a){var b,c,d,e=[];1==a.length?b=a[0]:3==a.length?(b=a[0],c=a[1],d=a[2]):(b=a[0],c=a[1],d=a[2],a[3],b.endsWith(".rec_name")&&(b=b.substring(0,b.length-9)));var f;"rec_name"==b&&("ilike"==c&&(f=d.replace(/%%/g,"__"),f.startsWith("%")||f.endsWith("%")?d=f.substring(1,f.length-1):~f.indexOf("%")&&(d=d.replace(/%%/g,"%")),c=null),b=d,d=""),void 0!==b&&null!==b||(b="");var g;if(!(b.toLowerCase()in this.strings||b in this.fields)){for(var h in this.strings)g=this.strings[h],g.string.toLowerCase().startsWith(b.toLowerCase())&&(c=this.default_operator(g),d="","ilike"==c&&(d=this.likify(d)),e.push([g.name,c,d]));return e}if(g=b in this.fields?this.fields[b]:this.strings[b.toLowerCase()],c)for(var i=this.complete_value(g,d),j=0,k=i.length;j<k;j++)e.push([g.name,c,i[j]]);else c=this.default_operator(g),d="","ilike"!=c&&"not ilike"!=c||(d=this.likify(d)),e.push([g.name,c,d]);return e},is_leaf:function(a){return a instanceof Array&&a.clause},ending_clause:function(a,b){if(void 0===b&&(b=0),0===a.length)return[null,b];var c=a[a.length-1];return this.is_leaf(c)?[c,b]:this.ending_clause(c,b+1)},replace_ending_clause:function(a,b){var c,d,e=[];for(c=0,d=a.length-1;c<d;c++)e.push(a[c]);return this.is_leaf(a[c])?e.push(b):e=e.concat(this.replace_ending_clause(a[c],b)),e},append_ending_clause:function(a,b,c){if(0===a.length)return[b];var d=a.slice(0,-1),e=a[a.length-1];return this.is_leaf(e)?(d.push(e),0===c&&d.push(b)):d.push(this.append_ending_clause(e,b,c-1)),d},complete_value:function(a,b){var c=function(){return b?[!0]:[!1]},d=function(){var c=[],d=null!==b?b:"";b instanceof Array&&(d=b[b.length-1]||""),d=d.replace(/^%*|%*$/g,"");var e,f,g,h;for(e=0,f=a.selection.length;e<f;e++)g=a.selection[e][0],h=a.selection[e][1].toLowerCase(),h.startsWith(d.toLowerCase())&&(b instanceof Array?c.push(b.slice(0,-1).concat([g])):c.push(g));return c},e=function(){var c=[],d=null!==b?b:"";b instanceof Array&&(d=b[b.length-1]),d=d.replace(/^%*|%*$/g,"");var e,f,g,h;for(e=0,f=a.selection.length;e<f;e++)g=a.selection[e][0],h=a.selection[e][1].toLowerCase(),h.startsWith(d.toLowerCase())&&(b instanceof Array?c.push(b.slice(0,-1).concat([g])):c.push(this.likify(g)));return c}.bind(this),f=function(){return[Sao.Date(),Sao.DateTime().utc()]},g=function(){return[Sao.Date()]},h=function(){return[Sao.Time()]},i={boolean:c,selection:d,reference:e,datetime:f,date:g,time:h};return a.type in i?i[a.type]():[]},group_operator:function(a){var b=a[0],c=[];return a.slice(1).forEach(function(a){"="==a&&b&&~this.OPERATORS.indexOf(b+a)?(c.push(b+a),b=null):(null!==b&&c.push(b),b=a)}.bind(this)),null!==b&&c.push(b),c},parenthesize:function(a){var b=[],c=b,d=[];return a.forEach(function(a,b){void 0!==c&&("("==a?(d.push(c),c=c[c.push([])-1]):")"==a?c=d.pop():c.push(a))}),b},group:function(a){var b=[],c=function(a){var b=[],d=function(a){var c=[a];c.clause=!0,b.push(c)},e=a.indexOf(":");if(!~e)return a.forEach(d),b;for(var f=function(a,c){return function(d){if(jQuery.isEmptyObject(a))b.push(d);else{var e;jQuery.isEmptyObject(c)?(e=a.concat(d),e.clause=!0,b.push(e)):(null!==d[0]&&c.push(d[0]),e=a.concat([c]),e.clause=!0,b.push(e)),a.splice(0,a.length)}}},g=0;g<e;g++){var h=a.slice(g,e).join(" ");if(h.toLowerCase()in this.strings){jQuery.isEmptyObject(a.slice(0,g))?d(null):a.slice(0,g).forEach(d),h=[h];var i=[""].concat(this.OPERATORS);e+1<a.length&&~i.indexOf(a[e+1])?(h=h.concat([a[e+1]]),e+=1):h=h.concat([null]);for(var j=[];e+2<a.length&&";"==a[e+2];)j.push(a[e+1]),e+=2;if(c(a.slice(e+1)).forEach(f(h,j)),!jQuery.isEmptyObject(h)){var k;jQuery.isEmptyObject(j)?(k=h.concat([null]),k.clause=!0,b.push(k)):(k=h.concat([j]),k.clause=!0,b.push(k))}break}}return b};c=c.bind(this);var d=[];return a.forEach(function(a){this.is_generator(a)?(c(d).forEach(function(a){Sao.common.compare(a,[null])||b.push(a)}),d=[],b.push(this.group(a))):d.push(a)}.bind(this)),c(d).forEach(function(a){Sao.common.compare(a,[null])||b.push(a)}),b},is_generator:function(a){return a instanceof Array&&void 0===a.clause},operatorize:function(a,b){var c=[];b=b||"or",a=jQuery.extend([],a);for(var d=function(a){return a instanceof Array?Sao.common.compare(a,[b]):a==b},e=a.shift();d(e);)e=a.shift();if(void 0===e)return c;this.is_generator(e)&&(e=this.operatorize(e,b));for(var f=null;!jQuery.isEmptyObject(a);)if(f=a.shift(),this.is_generator(f)&&!d(f)&&(f=this.operatorize(f,b)),d(f)){for(f=a.shift();d(f);)f=a.shift();this.is_generator(f)&&(f=this.operatorize(f,b)),void 0!==f?e=[b.toUpperCase(),e,f]:d(e)||(c.push([b.toUpperCase(),e]),e=null),f=null}else d(e)||c.push(e),e=f;return jQuery.isEmptyObject(a)&&(null===f||d(f)?null===e||d(e)||c.push(e):c.push(f)),c},_clausify:function(a){return a.clause=!0,a},parse_clause:function(a){var b=[];return a.forEach(function(a){if(this.is_generator(a))b.push(this.parse_clause(a));else if("OR"===a||"AND"===a)b.push(a);else if(1!=a.length||a[0]instanceof Array){if(3==a.length&&a[0].toLowerCase()in this.strings){var c=(a[0],a[1]),d=a[2],e=this.strings[a[0].toLowerCase()],f=e.name,g=null;if("reference"==e.type){var h=this.split_target_value(e,d);g=h[0],d=h[1],g&&(f+=".rec_name")}if(c||(c=this.default_operator(e)),d instanceof Array&&(c="!"==c?"not in":"in"),"!"==c&&(c=this.negate_operator(this.default_operator(e))),~["integer","float","numeric","datetime","date","time"].indexOf(e.type)&&"string"==typeof d&&d.contains("..")){var i=d.split("..",2),j=this.convert_value(e,i[0],this.context),k=this.convert_value(e,i[1],this.context);return void b.push([this._clausify([f,">=",j]),this._clausify([f,"<=",k])])}d instanceof Array?(d=d.map(function(a){return this.convert_value(e,a,this.context)}.bind(this)),~["many2one","one2many","many2many","one2one","many2many","one2one"].indexOf(e.type)&&(f+=".rec_name")):d=this.convert_value(e,d,this.context),c.contains("like")&&(d=this.likify(d)),g?b.push(this._clausify([f,c,d,g])):b.push(this._clausify([f,c,d]))}}else b.push(this._clausify(["rec_name","ilike",this.likify(a[0])]))}.bind(this)),b},likify:function(a,b){if(b=b||"\\",!a)return"%";var c=a.replace(b+"%","").replace(b+"_","");return c.contains("%")||c.contains("_")?a:"%"+a+"%"},is_full_text:function(a,b){b=b||"\\";for(var c=a;"%"==c.charAt(0);)c=c.substring(1);for(;"%"==c.charAt(c.length-1);)c=c.substring(0,c.length-1);return c=c.replace(b+"%","").replace(b+"_",""),!c.contains("%")&&!c.contains("_")&&(a.startsWith("%")&&a.endsWith("%"))},is_like:function(a,b){b=b||"\\";var c=a.replace(b+"%","").replace(b+"_","");return c.contains("%")||c.contains("_")},unescape:function(a,b){return b=b||"\\",a.replace(b+"%","%").replace(b+"_","_")},quote:function(a){if("string"!=typeof a)return a;a.contains("\\")&&(a=a.replace(new RegExp("\\\\","g"),"\\\\")),a.contains('"')&&(a=a.replace(new RegExp('"',"g"),'\\"'));for(var b=[":"," ","(",")"].concat(this.OPERATORS),c=0;c<b.length;c++){var d=b[c];if(a.contains(d))return'"'+a+'"'}return a},default_operator:function(a){return~["char","text","many2one","many2many","one2many","reference"].indexOf(a.type)?"ilike":"="},negate_operator:function(a){switch(a){case"ilike":return"not ilike";case"=":return"!=";case"in":return"not in"}},time_format:function(a){return new Sao.PYSON.Decoder({}).decode(a.format)},split_target_value:function(a,b){var c=null;if("string"==typeof b)for(var d=0;d<a.selection.length;d++){var e=a.selection[d],f=e[0],g=e[1];if(b.toLowerCase().startsWith(g.toLowerCase()+",")){c=f,b=b.slice(g.length+1);break}}return[c,b]},convert_value:function(a,b,c){c||(c={});var d=function(){if("string"==typeof b)for(var c=0;c<a.selection.length;c++){var d=a.selection[c],e=d[0],f=d[1];if(b.toLowerCase()==f.toLowerCase())return e}return b},e={boolean:function(){return"string"==typeof b?[Sao.i18n.gettext("y"),Sao.i18n.gettext("Yes"),Sao.i18n.gettext("True"),Sao.i18n.gettext("t"),"1"].some(function(a){return a.toLowerCase().startsWith(b.toLowerCase())}):Boolean(b)},float:function(){var c=Number(a.factor||1),d=Number(b);return isNaN(d)||""===b||null===b?null:d/c},integer:function(){var c=Number(a.factor||1,10),d=parseInt(b,10);return isNaN(d)?null:d/c},numeric:function(){var c=Number(a.factor||1),d=Number(b);return isNaN(d.valueOf())||""===b||null===b?null:new Sao.Decimal(d/c)},selection:d,reference:d,datetime:function(){return Sao.common.parse_datetime(Sao.common.date_format(c.date_format),this.time_format(a),b)}.bind(this),date:function(){return Sao.common.parse_date(Sao.common.date_format(c.date_format),b)},time:function(){try{return Sao.common.parse_time(this.time_format(a),b)}catch(c){return null}}.bind(this),timedelta:function(){var c=null;return a.converter&&(c=this.context[a.converter]),Sao.common.timedelta.parse(b,c)}.bind(this),many2one:function(){return""===b?null:b}},f=e[a.type];return f?f():b},format_value:function(a,b,c,d){void 0===c&&(c=null),d||(d={});var e=function(){if(!b&&0!==b&&b!==new Sao.Decimal(0))return"";var c=0,d=Number(a.factor||1),e=String(b*d);if(e.contains("e")){var f=e.split("e")[1];e=e.split("e")[0],c-=parseInt(f)}return e.contains(".")&&(c+=e.replace(/0+$/,"").split(".")[1].length),(b*d).toFixed(c)},f=function(){if(a.selection instanceof Array)for(var c=0;c<a.selection.length;c++)if(a.selection[c][0]==b)return a.selection[c][1];return b||""},g=function(){if(!c)return f();for(var d=0;d<a.selection.length;d++)if(a.selection[d][0]==c){c=a.selection[d][1];break}return c+","+b},h={boolean:function(){return b?Sao.i18n.gettext("True"):Sao.i18n.gettext("False")},integer:function(){var c=Number(a.factor||1);return b||0===b?""+parseInt(parseInt(b,10)*c,10):""},float:e,numeric:e,selection:f,reference:g,datetime:function(){return b?b.isDate||!(b.hour()||b.minute()||b.second())?Sao.common.format_date(Sao.common.date_format(d.date_format),b):Sao.common.format_datetime(Sao.common.date_format(d.date_format),this.time_format(a),b):""}.bind(this),date:function(){return Sao.common.format_date(Sao.common.date_format(d.date_format),b)},time:function(){return b?Sao.common.format_time(this.time_format(a),b):""}.bind(this),timedelta:function(){if(!b||!b.valueOf())return"";var c=null;return a.converter&&(c=this.context[a.converter]),Sao.common.timedelta.format(b,c)}.bind(this),many2one:function(){return null===b?"":b}};if(b instanceof Array)return b.map(function(b){return this.format_value(a,b)}.bind(this)).join(";");var i=h[a.type];return i?this.quote(i(b)):null===b?"":this.quote(b)},simplify:function(a){return a instanceof Array&&!this.is_leaf(a)?1==a.length&&a[0]instanceof Array&&("AND"==a[0][0]||"OR"==a[0][0]||a[0][0]instanceof Array)?this.simplify(a[0]):2==a.length&&("AND"==a[0]||"OR"==a[0])&&a[1]instanceof Array?this.simplify(a[1]):(3==a.length&&("AND"==a[0]||"OR"==a[0])&&a[1]instanceof Array&&a[0]==a[1][0]&&(a=this.simplify(a[1]).concat([a[2]])),a.map(this.simplify.bind(this))):a}}),Sao.common.DomainInversion=Sao.class_(Object,{and:function(a,b){return a&&b},or:function(a,b){return a||b},OPERATORS:{"=":function(a,b){return Sao.common.DomainInversion.equals(a,b)},">":function(a,b){return a>b},"<":function(a,b){return a<b},"<=":function(a,b){return a<=b},">=":function(a,b){return a>=b},"!=":function(a,b){return!Sao.common.DomainInversion.equals(a,b)},in:function(a,b){return Sao.common.DomainInversion.in_(a,b)},"not in":function(a,b){return!Sao.common.DomainInversion.in_(a,b)},like:function(a,b){return Sao.common.DomainInversion.sql_like(a,b,!1)},ilike:function(a,b){return Sao.common.DomainInversion.sql_like(a,b,!0)},"not like":function(a,b){return!Sao.common.DomainInversion.sql_like(a,b,!1)},"not ilike":function(a,b){return!Sao.common.DomainInversion.sql_like(a,b,!0)},child_of:function(){return!0},"not child_of":function(){return!0}},locale_part:function(a,b,c){return void 0===c&&(c="id"),a===b?c:a.contains(".")?a.split(".").slice(1).join("."):a},is_leaf:function(a){return a instanceof Array&&a.length>2&&"string"==typeof a[1]},constrained_leaf:function(a,b){void 0===b&&(b=this.and);var c=(a[0],a[1]);a[2];return!!("="===c&b===this.and)},eval_leaf:function(a,b,c){void 0===c&&(c=this.and);var d=a[0],e=a[1],f=a[2];if(d.contains("."))return Boolean(b[d.split(".")[0]]);var g=b[d];return g&&g._isAMomentObject&&!f&&(f=g.isDateTime?Sao.DateTime.min:Sao.Date.min),f&&f._isAMomentObject&&!g&&(g=f.isDateTime?Sao.DateTime.min:Sao.Date.min),g instanceof Array&null===f&&(f=[]),"string"==typeof g&&f instanceof Array&&2==f.length?f=f.join(","):g instanceof Array&&"string"==typeof f&&2==g.length&&(g=g.join(",")),~["=","!="].indexOf(e)&&g instanceof Array&&"number"==typeof f&&(e={"=":"in","!=":"not in"}[e]),!(e in this.OPERATORS)||this.OPERATORS[e](g,f)},inverse_leaf:function(a){return~["AND","OR"].indexOf(a)?a:this.is_leaf(a)?a[1].contains("child_of")&&!a[0].contains(".")?3==a.length?a:[a[3]].concat(a.slice(1)):a:a.map(this.inverse_leaf.bind(this))},filter_leaf:function(a,b,c){return~["AND","OR"].indexOf(a)?a:this.is_leaf(a)?a[0].startsWith(b)&&a.length>3&&a[3]!==c?["id","=",null]:a:a.map(function(a){return this.filter_leaf(a,b,c)}.bind(this))},eval_domain:function(a,b,c){return void 0===c&&(c=this.and),this.is_leaf(a)?this.eval_leaf(a,b,c):!(!jQuery.isEmptyObject(a)||c!=this.and)||(!jQuery.isEmptyObject(a)||c!=this.or)&&("AND"==a[0]?this.eval_domain(a.slice(1),b):"OR"==a[0]?this.eval_domain(a.slice(1),b,this.or):c(this.eval_domain(a[0],b),this.eval_domain(a.slice(1),b,c)))},localize_domain:function(a,b,c){if(~["AND","OR",!0,!1].indexOf(a))return a;if(this.is_leaf(a)){if(a[1].contains("child_of")){if(a[0].split(".").length>1){return[a[0].split(".").slice(1).join(".")].concat(a.slice(1))}return 3==a.length?a:[a[3]].concat(a.slice(1,-1))}var d="id";"string"==typeof a[2]&&(d="rec_name");var e=c?3:4;return[this.locale_part(a[0],b,d)].concat(a.slice(1,e)).concat(a.slice(4))}return a.map(function(a){return this.localize_domain(a,b,c)}.bind(this))},prepare_reference_domain:function(a,b){var c=function(a){var b=null,c=null;if("string"==typeof a&&a.contains(",")){var d=a.split(","),e=d.splice(0,1);e.push(d.join(",")),b=e[0],c=e[1],"%"!=c&&(c=parseInt(c,10),isNaN(c)&&(b=null,c=a))}else a instanceof Array&&2==a.length&&"string"==typeof a[0]&&("number"==typeof a[1]||"%"==a[1])?(b=a[0],c=a[1]):c=a;return[b,c]};if(~["AND","OR"].indexOf(a))return a;if(this.is_leaf(a)){if(a[0]==b){var d,e,f;if("="==a[1]||"!="==a[1]){if(f=c(a[2]),d=f[0],e=f[1],d)return"%"==e?"="==a[1]?[b+".id","!=",null,d]:[b,"not like",a[2]]:[b+".id",a[1],e,d]}else if("in"==a[1]||"not in"==a[1]){for(var g={},h=!1,i=0;i<a[2].length;i++){if(f=c(a[2][i]),d=f[0],e=f[1],!d){h=!0;break}d in g||(g[d]=[]),g[d].push(e)}if(!h){var j,k;k="in"==a[1]?["OR"]:["AND"];for(d in g)j=g[d],~j.indexOf("%")?"in"==a[1]?k.push([b+".id","!=",null,d]):k.push([b,"not like",d+",%"]):k.push([b+".id",a[1],j.map(Number),d]);return k}}return[]}return a}return a.map(function(a){return this.prepare_reference_domain(a,b)}.bind(this))},extract_reference_models:function(a,b){if(~["AND","OR"].indexOf(a))return[];if(this.is_leaf(a)){return a[0].split(".",1)[0]==b&&a.length>3?[a[3]]:[]}var c=[];return a.map(function(a){for(var d=this.extract_reference_models(a,b),e=0,f=d.length;e<f;e++){var g=d[e];~c.indexOf(g)||c.push(g)}}.bind(this)),c},simplify:function(a){return this.is_leaf(a)?a:~["OR","AND"].indexOf(a)?a:a instanceof Array&&1==a.length&&~["OR","AND"].indexOf(a[0])?[]:a instanceof Array&&1==a.length&&!this.is_leaf(a[0])?this.simplify(a[0]):a instanceof Array&&2==a.length&&~["AND","OR"].indexOf(a[0])?[this.simplify(a[1])]:a.map(this.simplify.bind(this))},merge:function(a,b){if(jQuery.isEmptyObject(a)||~["AND","OR"].indexOf(a))return[];var c="OR"==a[0]?"OR":"AND";return this.is_leaf(a)?[a]:void 0===b?[c].concat([].concat.apply([],a.map(function(a){return this.merge(a,c)}.bind(this)))):c==b?[].concat.apply([],a.map(function(a){return this.merge(a,c)}.bind(this))):[this.merge(a)]},concat:function(a,b){var c=[];return b&&c.push(b),a.forEach(function(a){jQuery.isEmptyObject(a)||c.push(a)}),this.simplify(this.merge(c))},unique_value:function(a){return a instanceof Array&&1==a.length&&!a[0][0].contains(".")&&"="==a[0][1]?[!0,a[0][1],a[0][2]]:[!1,null,null]},parse:function(a){var b=Sao.common.DomainInversion.And,c=Sao.common.DomainInversion.Or;if(this.is_leaf(a))return a;if(jQuery.isEmptyObject(a))return new b([]);if("OR"===a[0])return new c(a.slice(1));var d=0;return"AND"===a[0]&&(d=1),new b(a.slice(d))},domain_inversion:function(a,b,c){void 0===c&&(c={});var d=this.parse(a);return!~d.variables.indexOf(b)||d.inverse(b,c)}}),Sao.common.DomainInversion.equals=function(a,b){return a instanceof Array&&b instanceof Array?Sao.common.compare(a,b):moment.isMoment(a)&&moment.isMoment(b)?a.isDate==b.isDate&&a.isDateTime==b.isDateTime&&a.valueOf()==b.valueOf():a instanceof Number||b instanceof Number?Number(a)===Number(b):a===b},Sao.common.DomainInversion.in_=function(a,b){if(a instanceof Array){if(b instanceof Array){for(var c=0,d=a.length;c<d;c++)if(~b.indexOf(a[c]))return!0;return!1}return Boolean(~a.indexOf(b))}return Boolean(~b.indexOf(a))},Sao.common.DomainInversion.sql_like=function(a,b,c){for(var d,e=!1,f=[],g=b.split(/(.|\\)/),h=1,i=g.length;h<i;h+=2)d=g[h],e?("%"==d||"_"==d?f.push(d):f.push("\\",d),
|
|
13
|
+
Sao.common.parse_datetime=function(a,b,c){var d=moment(c,Sao.common.moment_format(a+" "+b));return d=d.isValid()?Sao.DateTime(d.year(),d.month(),d.date(),d.hour(),d.minute(),d.second(),d.millisecond()):null},Sao.common.timedelta={},Sao.common.timedelta.DEFAULT_CONVERTER={s:1},Sao.common.timedelta.DEFAULT_CONVERTER.m=60*Sao.common.timedelta.DEFAULT_CONVERTER.s,Sao.common.timedelta.DEFAULT_CONVERTER.h=60*Sao.common.timedelta.DEFAULT_CONVERTER.m,Sao.common.timedelta.DEFAULT_CONVERTER.d=24*Sao.common.timedelta.DEFAULT_CONVERTER.h,Sao.common.timedelta.DEFAULT_CONVERTER.w=7*Sao.common.timedelta.DEFAULT_CONVERTER.d,Sao.common.timedelta.DEFAULT_CONVERTER.M=30*Sao.common.timedelta.DEFAULT_CONVERTER.d,Sao.common.timedelta.DEFAULT_CONVERTER.Y=365*Sao.common.timedelta.DEFAULT_CONVERTER.d,Sao.common.timedelta._get_separator=function(){return{Y:Sao.i18n.gettext("Y"),M:Sao.i18n.gettext("M"),w:Sao.i18n.gettext("w"),d:Sao.i18n.gettext("d"),h:Sao.i18n.gettext("h"),m:Sao.i18n.gettext("m"),s:Sao.i18n.gettext("s")}},Sao.common.timedelta.format=function(a,b){if(!a)return"";b||(b=Sao.common.timedelta.DEFAULT_CONVERTER);var c=[];a=a.asSeconds();var d="";a<0&&(d="-"),a=Math.abs(a),b=Object.keys(b).map(function(a){return[a,b[a]]}),b.sort(function(a,b){return b[1]-a[1]});for(var e,f,g=[],h=0;h<b.length;h++){e=b[h][0],f=b[h][1];var i=Math.floor(a/f);a-=i*f,g.push(i)}for(h=0;h<b.length-3;h++)e=b[h][0],(f=g[h])&&c.push(f+Sao.common.timedelta._get_separator()[e]);if(jQuery(g.slice(-3)).is(function(a,b){return b})||jQuery.isEmptyObject(c)){var j=g.slice(-3),k=j[0].toString().padStart(2,"0");k+=":"+j[1].toString().padStart(2,"0"),(j[2]||a)&&(k+=":"+j[2].toString().padStart(2,"0")),c.push(k)}return c=d+c.reduce(function(a,b){return a?a+" "+b:b}),a&&(jQuery(g.slice(-3)).is(function(a,b){return b})||(c+=" "),c+=(""+a.toFixed(6)).slice(1)),c},Sao.common.timedelta.parse=function(a,b){if(!a)return null;b||(b=Sao.common.timedelta.DEFAULT_CONVERTER);var c,d=Sao.common.timedelta._get_separator();for(var e in d)c=d[e],a=a.replace(c,c+" ");for(var f,g=0,h=a.split(" "),i=0;i<h.length;i++){var j=h[i];if(j.contains(":"))for(var k=j.split(":"),l=[b.h,b.m,b.s],m=0;m<Math.min(k.length,l.length);m++){var n=k[m],o=l[m];f=Math.abs(parseFloat(n))*o,isNaN(f)||(g+=f)}else{var p=!1;for(var q in d)if(c=d[q],j.endsWith(c)){j=j.slice(0,-c.length),f=Math.abs(parseFloat(j))*b[q],isNaN(f)||(g+=f),p=!0;break}p||(f=Math.abs(parseFloat(j)),isNaN(f)||(g+=f))}}return a.contains("-")&&(g*=-1),Sao.TimeDelta(null,g)},Sao.common.ModelAccess=Sao.class_(Object,{init:function(){this.batchnum=100,this._models=[],this._access={}},load_models:function(a){a||(this._access={}),this._models=Sao.rpc({method:"model.ir.model.list_models",params:[{}]},Sao.Session.current_session,!1)},get:function(a){if(void 0!==this._access[a])return this._access[a];var b=this._models.indexOf(a);b<0&&(this.load_models(!1),b=this._models.indexOf(a));var c=this._models.slice(Math.max(0,b-Math.floor(this.batchnum/2)),b+Math.floor(this.batchnum/2)),d=Sao.rpc({method:"model.ir.model.access.get_access",params:[c,{}]},Sao.Session.current_session,!1);return this._access=jQuery.extend(this._access,d),this._access[a]}}),Sao.common.MODELACCESS=new Sao.common.ModelAccess,Sao.common.ModelHistory=Sao.class_(Object,{init:function(){this._models=[]},load_history:function(){return this._models=[],Sao.rpc({method:"model.ir.model.list_history",params:[{}]},Sao.Session.current_session).then(function(a){this._models=a}.bind(this))},contains:function(a){return~this._models.indexOf(a)}}),Sao.common.MODELHISTORY=new Sao.common.ModelHistory,Sao.common.ViewSearch=Sao.class_(Object,{init:function(){this.encoder=new Sao.PYSON.Encoder},load_searches:function(){return this.searches={},Sao.rpc({method:"model.ir.ui.view_search.get_search",params:[{}]},Sao.Session.current_session).then(function(a){this.searches=a}.bind(this))},get:function(a){return this.searches[a]||[]},add:function(a,b,c){return Sao.rpc({method:"model.ir.ui.view_search.create",params:[[{model:a,name:b,domain:this.encoder.encode(c)}],{}]},Sao.Session.current_session).then(function(d){var e=d[0];void 0===this.searches[a]&&(this.searches[a]=[]),this.searches[a].push([e,b,c])}.bind(this))},remove:function(a,b){return Sao.rpc({method:"model.ir.ui.view_search.delete",params:[[b],{}]},Sao.Session.current_session).then(function(){for(var c=0;c<this.searches[a].length;c++){if(this.searches[a][c][0]===b){this.searches[a].splice(c,1);break}}}.bind(this))}}),Sao.common.VIEW_SEARCH=new Sao.common.ViewSearch,Sao.common.humanize=function(a){for(var b=["bytes","KB","MB","GB","TB","PB"],c=0,d=b.length;c<d;c++){if(a<1e3)return a.toPrecision(4)+" "+b[c];a/=1e3}},Sao.common.EvalEnvironment=function(a,b){void 0===b&&(b="eval");var c;if("eval"==b)c=a.get_eval();else{c={};for(var d in a.model.fields){var e=a.model.fields[d];c[d]=e.get_on_change_value(a)}}return c.id=a.id,a.group.parent&&Object.defineProperty(c,"_parent_"+a.group.parent_name,{enumerable:!0,get:function(){return Sao.common.EvalEnvironment(a.group.parent,b)}}),c.get=function(a,b){return this.hasOwnProperty(a)?this[a]:b},c},Sao.common.selection_mixin={},Sao.common.selection_mixin.init=function(){this.selection=null,this.inactive_selection=[],this._last_domain=null,this._values2selection={},this._domain_cache={},void 0===this.nullable_widget&&(this.nullable_widget=!0)},Sao.common.selection_mixin.init_selection=function(a,b){a||(a={},(this.attributes.selection_change_with||[]).forEach(function(b){a[b]=null}));var c,d=JSON.stringify(a),e=this.attributes.selection||[],f=function(a){a=jQuery.extend([],a),(void 0===this.attributes.sort||this.attributes.sort)&&a.sort(function(a,b){return a[1].localeCompare(b[1])}),this.selection=jQuery.extend([],a),b&&b(this.selection)};e instanceof Array||d in this._values2selection?(d in this._values2selection&&(e=this._values2selection[d]),f.call(this,e),c=jQuery.when()):(c=jQuery.isEmptyObject(this.attributes.selection_change_with)?this.model.execute(e,[]):this.model.execute(e,[a]),c=c.then(function(a){return this._values2selection[d]=a,a}.bind(this)),c=c.then(f.bind(this))),this.inactive_selection=[],this._selection_prm=c},Sao.common.selection_mixin.update_selection=function(a,b,c){var d=function(){if(!b)return void(c&&c(this.selection));var d=b.get_domain(a);if("relation"in this.attributes){var e=b.get_context(a),f=JSON.stringify([d,e]);if(f in this._domain_cache&&(this.selection=this._domain_cache[f],this._last_domain=[d,e]),null!==this._last_domain&&Sao.common.compare(d,this._last_domain[0])&&JSON.stringify(e)==JSON.stringify(this._last_domain[1]))return void(c&&c(this.selection));var g=Sao.rpc({method:"model."+this.attributes.relation+".search_read",params:[d,0,null,null,["rec_name"],e]},a.model.session);g.done(function(a){var b=[];a.forEach(function(a){b.push([a.id,a.rec_name])}),this.nullable_widget&&b.push([null,""]),this._last_domain=[d,e],this._domain_cache[f]=b,this.selection=jQuery.extend([],b),c&&c(this.selection)}.bind(this)),g.fail(function(){this._last_domain=null,this.selection=[],c&&c(this.selection)}.bind(this))}else{var h=this.attributes.selection_change_with||[],i=a._get_on_change_args(h);delete i.id,Sao.common.selection_mixin.init_selection.call(this,i,function(){Sao.common.selection_mixin.filter_selection.call(this,d,a,b),c&&c(this.selection)}.bind(this))}};this._selection_prm.done(d.bind(this))},Sao.common.selection_mixin.filter_selection=function(a,b,c){if(!jQuery.isEmptyObject(a)){var d,e=new Sao.common.DomainInversion,f=function(b){var c={};return c[this.field_name]=b[0],e.eval_domain(a,c)}.bind(this),g=function(a){return function(b){return~a.indexOf(b[0])||jQuery.isEmptyObject(a)}};if("reference"==c.description.type){d=g(c.get_models(b))}else d=f;this.selection=this.selection.filter(d)}},Sao.common.selection_mixin.get_inactive_selection=function(a){if(!this.attributes.relation)return jQuery.when([]);for(var b=0,c=this.inactive_selection.length;b<c;b++)if(a==this.inactive_selection[b][0])return jQuery.when(this.inactive_selection[b]);return Sao.rpc({method:"model."+this.attributes.relation+".read",params:[[a],["rec_name"],{}]},Sao.Session.current_session).then(function(a){return this.inactive_selection.push([a[0].id,a[0].rec_name]),[a[0].id,a[0].rec_name]}.bind(this))},Sao.common.Button=Sao.class_(Object,{init:function(a,b){this.attributes=a,b?this.el=b:(this.el=jQuery("<button/>"),this.el.text(a.string||""),this.attributes.rule&&this.el.append(" ").append(jQuery("<span/>",{class:"badge"}))),this.icon=this.el.children("img"),this.icon.length||(this.icon=jQuery("<img/>",{class:"icon"}).prependTo(this.el),this.icon.hide()),this.el.addClass("btn btn-default"),this.el.attr("type","button"),this.icon.attr("aria-hidden",!0),this.set_icon(a.icon)},set_icon:function(a){if(!a)return this.icon.attr("src",""),void this.icon.hide();Sao.common.ICONFACTORY.get_icon_url(a).done(function(a){this.icon.attr("src",a),this.icon.show()}.bind(this))},set_state:function(a){var b;if(b=a?a.expr_eval(this.attributes.states||{}):{},b.invisible?this.el.hide():this.el.show(),this.el.prop("disabled",Boolean(b.readonly)),this.set_icon(b.icon||this.attributes.icon),this.attributes.rule){var c;c=a?a.get_button_clicks(this.attributes.name):jQuery.when(),c.then(function(a){var b=this.el.children(".badge"),c=[],d="";if(!jQuery.isEmptyObject(a)){for(var e in a)c.push(a[e]);d=Sao.i18n.gettext("By: ")+c.join(Sao.i18n.gettext(", "))}b.text(c.length||""),b.attr("title",d)}.bind(this))}if((void 0===this.attributes.type||"class"===this.attributes.type)&&a)for(var d=a.group.parent;d;){if(d.has_changed()){this.el.prop("disabled",!0);break}d=d.group.parent}}}),Sao.common.udlex=Sao.class_(Object,{init:function(a){var b=Sao.class_(Object,{init:function(a){this.stream=a.split(""),this.i=0},read:function(a){if(void 0===a&&(a=1),this.i>=this.stream.length)return null;var b=this.stream.slice(this.i,this.i+a).join();return this.i+=a,b}});this.instream=new b(a),this.eof=null,this.commenters="",this.nowordchars=[":",">","<","=","!",'"',";","(",")"],this.whitespace=" \t\r\n",this.whitespace_split=!1,this.quotes='"',this.escape="\\",this.escapedquotes='"',this.state=" ",this.pushback=[],this.token=""},get_token:function(){return this.pushback.length>0?this.pushback.shift():this.read_token()},read_token:function(){for(var a=!1,b=" ";;){var c=this.instream.read(1);if(null===this.state){this.token="";break}if(" "==this.state){if(!c){this.state=null;break}if(this.whitespace.contains(c)){if(this.token||a)break;continue}if(this.commenters.contains(c));else if(this.escape.contains(c))b="a",this.state=c;else if(~this.nowordchars.indexOf(c))if(this.quotes.contains(c))this.state=c;else{if(!this.whitespace_split){if(this.token=c,this.token||a)break;continue}this.token=c,this.state="a"}else this.token=c,this.state="a"}else if(this.quotes.contains(this.state)){if(a=!0,!c)throw"no closing quotation";c==this.state?this.state="a":this.escape.contains(c)&&this.escapedquotes.contains(this.state)?(b=this.state,this.state=c):this.token=this.token+c}else if(this.escape.contains(this.state)){if(!c)throw"no escaped character";this.quotes.contains(b)&&c!=this.state&&c!=b&&(this.token=this.token+this.state),this.token=this.token+c,this.state=b}else if("a"==this.state){if(!c){this.state=null;break}if(this.whitespace.contains(c)){if(this.state=" ",this.token||a)break;continue}if(this.commenters.contains(c));else if(this.quotes.contains(c))this.state=c;else if(this.escape.contains(c))b="a",this.state=c;else{if(~this.nowordchars.indexOf(c)&&!this.quotes.contains(c)&&!this.whitespace_split){if(this.pushback.unshift(c),this.state=" ",this.token)break;continue}this.token=this.token+c}}}var d=this.token;return this.token="",a||""!==d||(d=null),d},next:function(){var a=this.get_token();return a==this.eof?null:a}}),Sao.common.DomainParser=Sao.class_(Object,{OPERATORS:["!=","<=",">=","=","!","<",">"],init:function(a,b){this.fields={},this.strings={},this.update_fields(a),this.context=b},update_fields:function(a){for(var b in a){var c=a[b];(c.searchable||void 0===c.searchable)&&(this.fields[b]=c,this.strings[c.string.toLowerCase()]=c)}},parse:function(a){try{for(var b=new Sao.common.udlex(a),c=[];;){var d=b.next();if(null===d)break;c.push(d)}return c=this.group_operator(c),c=this.parenthesize(c),c=this.group(c),c=this.operatorize(c,"or"),c=this.operatorize(c,"and"),c=this.parse_clause(c),this.simplify(c)}catch(e){if("no closing quotation"==e)return this.parse(a+'"');throw e}},stringable:function(a){var b=function(a){if(!a)return!0;var b=function(a){return a instanceof Array};if((~["AND","OR"].indexOf(a[0])||b(a[0]))&&a.slice(1).every(b))return this.stringable(a);var c=a[0],d=a[2];if(c.endsWith(".rec_name")&&(c=c.slice(0,-9)),c in this.fields){var e=this.fields[c];if(~["many2one","one2one","one2many","many2many"].indexOf(e.type)){var f=function(a){if("many2one"==e.type){if("string"!=typeof a&&null!==a)return!1}else if("string"!=typeof a)return!1;return!0};return d instanceof Array?d.every(f):f(d)}return!0}return"rec_name"==c}.bind(this);return!a||(~["AND","OR"].indexOf(a[0])&&(a=a.slice(1)),a.every(b))},string:function(a){var b=function(a){if(jQuery.isEmptyObject(a))return"";if("string"!=typeof a[0]||~["AND","OR"].indexOf(a[0]))return"("+this.string(a)+")";var b=a[0],c=a[1],d=a[2];if(b.endsWith(".rec_name")&&(b=b.slice(0,-9)),!(b in this.fields))return this.is_full_text(d)&&(d=d.slice(1,-1)),this.quote(d);var e=this.fields[b],f=null;a.length>3&&(f=a[3]),c.contains("ilike")&&(this.is_full_text(d)?d=d.slice(1,-1):this.is_like(d)||(c="ilike"==c?"=":"!",d=this.unescape(d)));var g=this.default_operator(e);g==c.trim()?(c="",~this.OPERATORS.indexOf(d)&&(c='"" ')):c.contains(g)&&(c.contains("not")||c.contains("!"))&&(c=c.replace(g,"").replace("not","!").trim()),c.endsWith("in")&&(c="not in"==c?"!":"");var h=this.format_value(e,d,f);return~this.OPERATORS.indexOf(c)&&~["char","text","selection"].indexOf(e.type)&&""===d&&(h='""'),this.quote(e.string)+": "+c+h};if(b=b.bind(this),jQuery.isEmptyObject(a))return"";var c=" ";return"AND"!=a[0]&&"OR"!=a[0]||("OR"==a[0]&&(c=" or "),a=a.slice(1)),a.map(b).join(c)},completion:function(a){var b,c,d=[],e=this.parse(a),f=0;for(b=a.length;b>0&&(")"!=a[b]&&" "!=a[b]);b--)")"==a[b]&&(f+=1);var g=this.ending_clause(e),h=g[0],i=g[1],j=i-f,k=this.string(e);j>0&&(k=k.substring(0,k.length-j)),k!=a&&d.push(k);var l,m,n=function(a,b){return b>0?a.substring(0,b):a};if(null!==h&&0===f){var o=this.complete(h);for(b=0,c=o.length;b<c;b++)l=o[b],m=this.string(this.replace_ending_clause(e,l)),d.push(n(m,j))}if(a.length>0){if(" "!=a.substr(a.length-1,1))return d;if(a.length>=2||":"==a.substr(a.length-2,1))return d}var p,q,r;for(var s in this.strings){p=this.strings[s],q=this.default_operator(p),r="","ilike"!=q&&"not ilike"!=q||(r=this.likify(r));var t=this.append_ending_clause(e,[p.name,q,r],j),u=this.string(t);d.push(n(u,j))}return d},complete:function(a){var b,c,d,e=[];1==a.length?b=a[0]:3==a.length?(b=a[0],c=a[1],d=a[2]):(b=a[0],c=a[1],d=a[2],a[3],b.endsWith(".rec_name")&&(b=b.substring(0,b.length-9)));var f;"rec_name"==b&&("ilike"==c&&(f=d.replace(/%%/g,"__"),f.startsWith("%")||f.endsWith("%")?d=f.substring(1,f.length-1):~f.indexOf("%")&&(d=d.replace(/%%/g,"%")),c=null),b=d,d=""),void 0!==b&&null!==b||(b="");var g;if(!(b.toLowerCase()in this.strings||b in this.fields)){for(var h in this.strings)g=this.strings[h],g.string.toLowerCase().startsWith(b.toLowerCase())&&(c=this.default_operator(g),d="","ilike"==c&&(d=this.likify(d)),e.push([g.name,c,d]));return e}if(g=b in this.fields?this.fields[b]:this.strings[b.toLowerCase()],c)for(var i=this.complete_value(g,d),j=0,k=i.length;j<k;j++)e.push([g.name,c,i[j]]);else c=this.default_operator(g),d="","ilike"!=c&&"not ilike"!=c||(d=this.likify(d)),e.push([g.name,c,d]);return e},is_leaf:function(a){return a instanceof Array&&a.clause},ending_clause:function(a,b){if(void 0===b&&(b=0),0===a.length)return[null,b];var c=a[a.length-1];return this.is_leaf(c)?[c,b]:this.ending_clause(c,b+1)},replace_ending_clause:function(a,b){var c,d,e=[];for(c=0,d=a.length-1;c<d;c++)e.push(a[c]);return this.is_leaf(a[c])?e.push(b):e=e.concat(this.replace_ending_clause(a[c],b)),e},append_ending_clause:function(a,b,c){if(0===a.length)return[b];var d=a.slice(0,-1),e=a[a.length-1];return this.is_leaf(e)?(d.push(e),0===c&&d.push(b)):d.push(this.append_ending_clause(e,b,c-1)),d},complete_value:function(a,b){var c=function(){return b?[!0]:[!1]},d=function(){var c=[],d=null!==b?b:"";b instanceof Array&&(d=b[b.length-1]||""),d=d.replace(/^%*|%*$/g,"");var e,f,g,h;for(e=0,f=a.selection.length;e<f;e++)g=a.selection[e][0],h=a.selection[e][1].toLowerCase(),h.startsWith(d.toLowerCase())&&(b instanceof Array?c.push(b.slice(0,-1).concat([g])):c.push(g));return c},e=function(){var c=[],d=null!==b?b:"";b instanceof Array&&(d=b[b.length-1]),d=d.replace(/^%*|%*$/g,"");var e,f,g,h;for(e=0,f=a.selection.length;e<f;e++)g=a.selection[e][0],h=a.selection[e][1].toLowerCase(),h.startsWith(d.toLowerCase())&&(b instanceof Array?c.push(b.slice(0,-1).concat([g])):c.push(this.likify(g)));return c}.bind(this),f=function(){return[Sao.Date(),Sao.DateTime().utc()]},g=function(){return[Sao.Date()]},h=function(){return[Sao.Time()]},i={boolean:c,selection:d,reference:e,datetime:f,date:g,time:h};return a.type in i?i[a.type]():[]},group_operator:function(a){var b=a[0],c=[];return a.slice(1).forEach(function(a){"="==a&&b&&~this.OPERATORS.indexOf(b+a)?(c.push(b+a),b=null):(null!==b&&c.push(b),b=a)}.bind(this)),null!==b&&c.push(b),c},parenthesize:function(a){var b=[],c=b,d=[];return a.forEach(function(a,b){void 0!==c&&("("==a?(d.push(c),c=c[c.push([])-1]):")"==a?c=d.pop():c.push(a))}),b},group:function(a){var b=[],c=function(a){var b=[],d=function(a){var c=[a];c.clause=!0,b.push(c)},e=a.indexOf(":");if(!~e)return a.forEach(d),b;for(var f=function(a,c){return function(d){if(jQuery.isEmptyObject(a))b.push(d);else{var e;jQuery.isEmptyObject(c)?(e=a.concat(d),e.clause=!0,b.push(e)):(null!==d[0]&&c.push(d[0]),e=a.concat([c]),e.clause=!0,b.push(e)),a.splice(0,a.length)}}},g=0;g<e;g++){var h=a.slice(g,e).join(" ");if(h.toLowerCase()in this.strings){jQuery.isEmptyObject(a.slice(0,g))?d(null):a.slice(0,g).forEach(d),h=[h];var i=[""].concat(this.OPERATORS);e+1<a.length&&~i.indexOf(a[e+1])?(h=h.concat([a[e+1]]),e+=1):h=h.concat([null]);for(var j=[];e+2<a.length&&";"==a[e+2];)j.push(a[e+1]),e+=2;if(c(a.slice(e+1)).forEach(f(h,j)),!jQuery.isEmptyObject(h)){var k;jQuery.isEmptyObject(j)?(k=h.concat([null]),k.clause=!0,b.push(k)):(k=h.concat([j]),k.clause=!0,b.push(k))}break}}return b};c=c.bind(this);var d=[];return a.forEach(function(a){this.is_generator(a)?(c(d).forEach(function(a){Sao.common.compare(a,[null])||b.push(a)}),d=[],b.push(this.group(a))):d.push(a)}.bind(this)),c(d).forEach(function(a){Sao.common.compare(a,[null])||b.push(a)}),b},is_generator:function(a){return a instanceof Array&&void 0===a.clause},operatorize:function(a,b){var c=[];b=b||"or",a=jQuery.extend([],a);for(var d=function(a){return a instanceof Array?Sao.common.compare(a,[b]):a==b},e=a.shift();d(e);)e=a.shift();if(void 0===e)return c;this.is_generator(e)&&(e=this.operatorize(e,b));for(var f=null;!jQuery.isEmptyObject(a);)if(f=a.shift(),this.is_generator(f)&&!d(f)&&(f=this.operatorize(f,b)),d(f)){for(f=a.shift();d(f);)f=a.shift();this.is_generator(f)&&(f=this.operatorize(f,b)),void 0!==f?e=[b.toUpperCase(),e,f]:d(e)||(c.push([b.toUpperCase(),e]),e=null),f=null}else d(e)||c.push(e),e=f;return jQuery.isEmptyObject(a)&&(null===f||d(f)?null===e||d(e)||c.push(e):c.push(f)),c},_clausify:function(a){return a.clause=!0,a},parse_clause:function(a){var b=[];return a.forEach(function(a){if(this.is_generator(a))b.push(this.parse_clause(a));else if("OR"===a||"AND"===a)b.push(a);else if(1!=a.length||a[0]instanceof Array){if(3==a.length&&a[0].toLowerCase()in this.strings){var c=(a[0],a[1]),d=a[2],e=this.strings[a[0].toLowerCase()],f=e.name,g=null;if("reference"==e.type){var h=this.split_target_value(e,d);g=h[0],d=h[1],g&&(f+=".rec_name")}if(c||(c=this.default_operator(e)),d instanceof Array&&(c="!"==c?"not in":"in"),"!"==c&&(c=this.negate_operator(this.default_operator(e))),~["integer","float","numeric","datetime","date","time"].indexOf(e.type)&&"string"==typeof d&&d.contains("..")){var i=d.split("..",2),j=this.convert_value(e,i[0],this.context),k=this.convert_value(e,i[1],this.context);return void b.push([this._clausify([f,">=",j]),this._clausify([f,"<=",k])])}d instanceof Array?(d=d.map(function(a){return this.convert_value(e,a,this.context)}.bind(this)),~["many2one","one2many","many2many","one2one","many2many","one2one"].indexOf(e.type)&&(f+=".rec_name")):d=this.convert_value(e,d,this.context),c.contains("like")&&(d=this.likify(d)),g?b.push(this._clausify([f,c,d,g])):b.push(this._clausify([f,c,d]))}}else b.push(this._clausify(["rec_name","ilike",this.likify(a[0])]))}.bind(this)),b},likify:function(a,b){if(b=b||"\\",!a)return"%";var c=a.replace(b+"%","").replace(b+"_","");return c.contains("%")||c.contains("_")?a:"%"+a+"%"},is_full_text:function(a,b){b=b||"\\";for(var c=a;"%"==c.charAt(0);)c=c.substring(1);for(;"%"==c.charAt(c.length-1);)c=c.substring(0,c.length-1);return c=c.replace(b+"%","").replace(b+"_",""),!c.contains("%")&&!c.contains("_")&&(a.startsWith("%")&&a.endsWith("%"))},is_like:function(a,b){b=b||"\\";var c=a.replace(b+"%","").replace(b+"_","");return c.contains("%")||c.contains("_")},unescape:function(a,b){return b=b||"\\",a.replace(b+"%","%").replace(b+"_","_")},quote:function(a){if("string"!=typeof a)return a;a.contains("\\")&&(a=a.replace(new RegExp("\\\\","g"),"\\\\")),a.contains('"')&&(a=a.replace(new RegExp('"',"g"),'\\"'));for(var b=[":"," ","(",")"].concat(this.OPERATORS),c=0;c<b.length;c++){var d=b[c];if(a.contains(d))return'"'+a+'"'}return a},default_operator:function(a){return~["char","text","many2one","many2many","one2many","reference","one2one"].indexOf(a.type)?"ilike":"="},negate_operator:function(a){switch(a){case"ilike":return"not ilike";case"=":return"!=";case"in":return"not in"}},time_format:function(a){return new Sao.PYSON.Decoder({}).decode(a.format)},split_target_value:function(a,b){var c=null;if("string"==typeof b)for(var d=0;d<a.selection.length;d++){var e=a.selection[d],f=e[0],g=e[1];if(b.toLowerCase().startsWith(g.toLowerCase()+",")){c=f,b=b.slice(g.length+1);break}}return[c,b]},convert_value:function(a,b,c){c||(c={});var d=function(){if("string"==typeof b)for(var c=0;c<a.selection.length;c++){var d=a.selection[c],e=d[0],f=d[1];if(b.toLowerCase()==f.toLowerCase())return e}return b},e={boolean:function(){return"string"==typeof b?[Sao.i18n.gettext("y"),Sao.i18n.gettext("Yes"),Sao.i18n.gettext("True"),Sao.i18n.gettext("t"),"1"].some(function(a){return a.toLowerCase().startsWith(b.toLowerCase())}):Boolean(b)},float:function(){var c=Number(a.factor||1),d=Number(b);return isNaN(d)||""===b||null===b?null:d/c},integer:function(){var c=Number(a.factor||1,10),d=parseInt(b,10);return isNaN(d)?null:d/c},numeric:function(){var c=Number(a.factor||1),d=Number(b);return isNaN(d.valueOf())||""===b||null===b?null:new Sao.Decimal(d/c)},selection:d,reference:d,datetime:function(){return Sao.common.parse_datetime(Sao.common.date_format(c.date_format),this.time_format(a),b)}.bind(this),date:function(){return Sao.common.parse_date(Sao.common.date_format(c.date_format),b)},time:function(){try{return Sao.common.parse_time(this.time_format(a),b)}catch(c){return null}}.bind(this),timedelta:function(){var c=null;return a.converter&&(c=this.context[a.converter]),Sao.common.timedelta.parse(b,c)}.bind(this),many2one:function(){return""===b?null:b}},f=e[a.type];return f?f():b},format_value:function(a,b,c,d){void 0===c&&(c=null),d||(d={});var e=function(){if(!b&&0!==b&&b!==new Sao.Decimal(0))return"";var c=0,d=Number(a.factor||1),e=String(b*d);if(e.contains("e")){var f=e.split("e")[1];e=e.split("e")[0],c-=parseInt(f)}return e.contains(".")&&(c+=e.replace(/0+$/,"").split(".")[1].length),(b*d).toFixed(c)},f=function(){if(a.selection instanceof Array)for(var c=0;c<a.selection.length;c++)if(a.selection[c][0]==b)return a.selection[c][1];return b||""},g=function(){if(!c)return f();for(var d=0;d<a.selection.length;d++)if(a.selection[d][0]==c){c=a.selection[d][1];break}return c+","+b},h={boolean:function(){return b?Sao.i18n.gettext("True"):Sao.i18n.gettext("False")},integer:function(){var c=Number(a.factor||1);return b||0===b?""+parseInt(parseInt(b,10)*c,10):""},float:e,numeric:e,selection:f,reference:g,datetime:function(){return b?b.isDate||!(b.hour()||b.minute()||b.second())?Sao.common.format_date(Sao.common.date_format(d.date_format),b):Sao.common.format_datetime(Sao.common.date_format(d.date_format),this.time_format(a),b):""}.bind(this),date:function(){return Sao.common.format_date(Sao.common.date_format(d.date_format),b)},time:function(){return b?Sao.common.format_time(this.time_format(a),b):""}.bind(this),timedelta:function(){if(!b||!b.valueOf())return"";var c=null;return a.converter&&(c=this.context[a.converter]),Sao.common.timedelta.format(b,c)}.bind(this),many2one:function(){return null===b?"":b}};if(b instanceof Array)return b.map(function(b){return this.format_value(a,b)}.bind(this)).join(";");var i=h[a.type];return i?this.quote(i(b)):null===b?"":this.quote(b)},simplify:function(a){return a instanceof Array&&!this.is_leaf(a)?1==a.length&&a[0]instanceof Array&&("AND"==a[0][0]||"OR"==a[0][0]||a[0][0]instanceof Array)?this.simplify(a[0]):2==a.length&&("AND"==a[0]||"OR"==a[0])&&a[1]instanceof Array?this.simplify(a[1]):(3==a.length&&("AND"==a[0]||"OR"==a[0])&&a[1]instanceof Array&&a[0]==a[1][0]&&(a=this.simplify(a[1]).concat([a[2]])),a.map(this.simplify.bind(this))):a}}),Sao.common.DomainInversion=Sao.class_(Object,{and:function(a,b){return a&&b},or:function(a,b){return a||b},OPERATORS:{"=":function(a,b){return Sao.common.DomainInversion.equals(a,b)},">":function(a,b){return a>b},"<":function(a,b){return a<b},"<=":function(a,b){return a<=b},">=":function(a,b){return a>=b},"!=":function(a,b){return!Sao.common.DomainInversion.equals(a,b)},in:function(a,b){return Sao.common.DomainInversion.in_(a,b)},"not in":function(a,b){return!Sao.common.DomainInversion.in_(a,b)},like:function(a,b){return Sao.common.DomainInversion.sql_like(a,b,!1)},ilike:function(a,b){return Sao.common.DomainInversion.sql_like(a,b,!0)},"not like":function(a,b){return!Sao.common.DomainInversion.sql_like(a,b,!1)},"not ilike":function(a,b){return!Sao.common.DomainInversion.sql_like(a,b,!0)},child_of:function(){return!0},"not child_of":function(){return!0}},locale_part:function(a,b,c){return void 0===c&&(c="id"),a===b?c:a.contains(".")?a.split(".").slice(1).join("."):a},is_leaf:function(a){return a instanceof Array&&a.length>2&&"string"==typeof a[1]},constrained_leaf:function(a,b){void 0===b&&(b=this.and);var c=(a[0],a[1]);a[2];return!!("="===c&b===this.and)},eval_leaf:function(a,b,c){void 0===c&&(c=this.and);var d=a[0],e=a[1],f=a[2];if(d.contains("."))return Boolean(b[d.split(".")[0]]);var g=b[d];return g&&g._isAMomentObject&&!f&&(f=g.isDateTime?Sao.DateTime.min:Sao.Date.min),f&&f._isAMomentObject&&!g&&(g=f.isDateTime?Sao.DateTime.min:Sao.Date.min),g instanceof Array&null===f&&(f=[]),"string"==typeof g&&f instanceof Array&&2==f.length?f=f.join(","):g instanceof Array&&"string"==typeof f&&2==g.length&&(g=g.join(",")),~["=","!="].indexOf(e)&&g instanceof Array&&"number"==typeof f&&(e={"=":"in","!=":"not in"}[e]),!(e in this.OPERATORS)||this.OPERATORS[e](g,f)},inverse_leaf:function(a){return~["AND","OR"].indexOf(a)?a:this.is_leaf(a)?a[1].contains("child_of")&&!a[0].contains(".")?3==a.length?a:[a[3]].concat(a.slice(1)):a:a.map(this.inverse_leaf.bind(this))},filter_leaf:function(a,b,c){return~["AND","OR"].indexOf(a)?a:this.is_leaf(a)?a[0].startsWith(b)&&a.length>3&&a[3]!==c?["id","=",null]:a:a.map(function(a){return this.filter_leaf(a,b,c)}.bind(this))},eval_domain:function(a,b,c){return void 0===c&&(c=this.and),this.is_leaf(a)?this.eval_leaf(a,b,c):!(!jQuery.isEmptyObject(a)||c!=this.and)||(!jQuery.isEmptyObject(a)||c!=this.or)&&("AND"==a[0]?this.eval_domain(a.slice(1),b):"OR"==a[0]?this.eval_domain(a.slice(1),b,this.or):c(this.eval_domain(a[0],b),this.eval_domain(a.slice(1),b,c)))},localize_domain:function(a,b,c){if(~["AND","OR",!0,!1].indexOf(a))return a;if(this.is_leaf(a)){if(a[1].contains("child_of")){if(a[0].split(".").length>1){return[a[0].split(".").slice(1).join(".")].concat(a.slice(1))}return 3==a.length?a:[a[3]].concat(a.slice(1,-1))}var d="id";"string"==typeof a[2]&&(d="rec_name");var e=c?3:4;return[this.locale_part(a[0],b,d)].concat(a.slice(1,e)).concat(a.slice(4))}return a.map(function(a){return this.localize_domain(a,b,c)}.bind(this))},prepare_reference_domain:function(a,b){var c=function(a){var b=null,c=null;if("string"==typeof a&&a.contains(",")){var d=a.split(","),e=d.splice(0,1);e.push(d.join(",")),b=e[0],c=e[1],"%"!=c&&(c=parseInt(c,10),isNaN(c)&&(b=null,c=a))}else a instanceof Array&&2==a.length&&"string"==typeof a[0]&&("number"==typeof a[1]||"%"==a[1])?(b=a[0],c=a[1]):c=a;return[b,c]};if(~["AND","OR"].indexOf(a))return a;if(this.is_leaf(a)){if(a[0]==b){var d,e,f;if("="==a[1]||"!="==a[1]){if(f=c(a[2]),d=f[0],e=f[1],d)return"%"==e?"="==a[1]?[b+".id","!=",null,d]:[b,"not like",a[2]]:[b+".id",a[1],e,d]}else if("in"==a[1]||"not in"==a[1]){for(var g={},h=!1,i=0;i<a[2].length;i++){if(f=c(a[2][i]),d=f[0],e=f[1],!d){h=!0;break}d in g||(g[d]=[]),g[d].push(e)}if(!h){var j,k;k="in"==a[1]?["OR"]:["AND"];for(d in g)j=g[d],~j.indexOf("%")?"in"==a[1]?k.push([b+".id","!=",null,d]):k.push([b,"not like",d+",%"]):k.push([b+".id",a[1],j.map(Number),d]);return k}}return[]}return a}return a.map(function(a){return this.prepare_reference_domain(a,b)}.bind(this))},extract_reference_models:function(a,b){if(~["AND","OR"].indexOf(a))return[];if(this.is_leaf(a)){return a[0].split(".",1)[0]==b&&a.length>3?[a[3]]:[]}var c=[];return a.map(function(a){for(var d=this.extract_reference_models(a,b),e=0,f=d.length;e<f;e++){var g=d[e];~c.indexOf(g)||c.push(g)}}.bind(this)),c},simplify:function(a){return this.is_leaf(a)?a:~["OR","AND"].indexOf(a)?a:a instanceof Array&&1==a.length&&~["OR","AND"].indexOf(a[0])?[]:a instanceof Array&&1==a.length&&!this.is_leaf(a[0])?this.simplify(a[0]):a instanceof Array&&2==a.length&&~["AND","OR"].indexOf(a[0])?[this.simplify(a[1])]:a.map(this.simplify.bind(this))},merge:function(a,b){if(jQuery.isEmptyObject(a)||~["AND","OR"].indexOf(a))return[];var c="OR"==a[0]?"OR":"AND";return this.is_leaf(a)?[a]:void 0===b?[c].concat([].concat.apply([],a.map(function(a){return this.merge(a,c)}.bind(this)))):c==b?[].concat.apply([],a.map(function(a){return this.merge(a,c)}.bind(this))):[this.merge(a)]},concat:function(a,b){var c=[];return b&&c.push(b),a.forEach(function(a){jQuery.isEmptyObject(a)||c.push(a)}),this.simplify(this.merge(c))},unique_value:function(a){return a instanceof Array&&1==a.length&&!a[0][0].contains(".")&&"="==a[0][1]?[!0,a[0][1],a[0][2]]:[!1,null,null]},parse:function(a){var b=Sao.common.DomainInversion.And,c=Sao.common.DomainInversion.Or;if(this.is_leaf(a))return a;if(jQuery.isEmptyObject(a))return new b([]);if("OR"===a[0])return new c(a.slice(1));var d=0;return"AND"===a[0]&&(d=1),new b(a.slice(d))},domain_inversion:function(a,b,c){void 0===c&&(c={});var d=this.parse(a);return!~d.variables.indexOf(b)||d.inverse(b,c)}}),Sao.common.DomainInversion.equals=function(a,b){return a instanceof Array&&b instanceof Array?Sao.common.compare(a,b):moment.isMoment(a)&&moment.isMoment(b)?a.isDate==b.isDate&&a.isDateTime==b.isDateTime&&a.valueOf()==b.valueOf():a instanceof Number||b instanceof Number?Number(a)===Number(b):a===b},Sao.common.DomainInversion.in_=function(a,b){if(a instanceof Array){if(b instanceof Array){for(var c=0,d=a.length;c<d;c++)if(~b.indexOf(a[c]))return!0;return!1}return Boolean(~a.indexOf(b))}return Boolean(~b.indexOf(a))},Sao.common.DomainInversion.sql_like=function(a,b,c){for(var d,e=!1,f=[],g=b.split(/(.|\\)/),h=1,i=g.length;h<i;h+=2)d=g[h],e?("%"==d||"_"==d?f.push(d):f.push("\\",d),
|
|
14
14
|
e=!1):"\\"==d?e=!0:"_"==d?f.push("."):"%"==d?f.push(".*"):f.push(d);b.startsWith("%")||f.splice(0,0,"^"),b.endsWith("%")||f.push("$");var j=c?"i":"";return new RegExp(f.join(""),j).test(a)},Sao.common.DomainInversion.And=Sao.class_(Object,{init:function(a){this.domain_inversion=new Sao.common.DomainInversion,this.branches=a.map(this.domain_inversion.parse.bind(this.domain_inversion)),this.variables=[];for(var b=0,c=this.branches.length;b<c;b++){var d=this.branches[b];this.domain_inversion.is_leaf(d)?this.variables.push(this.base(d[0])):d instanceof Sao.common.DomainInversion.And&&(this.variables=this.variables.concat(d.variables))}},base:function(a){return a.contains(".")?a.split(".")[0]:a},inverse:function(a,b){for(var c=Sao.common.DomainInversion,d=[],e=0,f=this.branches.length;e<f;e++){var g=this.branches[e];if(g instanceof c.And){var h=g.inverse(a,b),i="boolean"==typeof h;if(!~g.variables.indexOf(a))continue;if(i){if(h)continue;return!1}d.push(h)}else if(this.domain_inversion.is_leaf(g)&&this.base(g[0])===a)d.push(g);else{var j=g[0];if(j in b&&!(j in b&&(this.domain_inversion.eval_leaf(g,b,this.domain_inversion.and)||this.domain_inversion.constrained_leaf(g,this.domain_inversion.and))))return!1;d.push(!0)}}return d=d.filter(function(a){return!0!==a}),!!jQuery.isEmptyObject(d)||this.domain_inversion.simplify(d)}}),Sao.common.DomainInversion.Or=Sao.class_(Sao.common.DomainInversion.And,{inverse:function(a,b){var c=Sao.common.DomainInversion,d=[];if(!jQuery.isEmptyObject(this.variables.filter(function(c){return!(c in b)&&c!=a})))return!0;for(var e=0,f=this.branches.length;e<f;e++){var g=this.branches[e];if(g instanceof c.And){var h=g.inverse(a,b),i="boolean"==typeof h;if(!~g.variables.indexOf(a)){if(i&&h)return!0;continue}if(i){if(h)return!0;continue}d.push(h)}else if(this.domain_inversion.is_leaf(g)&&this.base(g[0])==a)d.push(g);else{var j=g[0];if((j=this.base(j))in b&&this.domain_inversion.eval_leaf(g,b,this.domain_inversion.or)||this.domain_inversion.constrained_leaf(g,this.domain_inversion.or))return!0;j in b&&!this.domain_inversion.eval_leaf(g,b,this.domain_inversion.or)&&d.push(!1)}}return d=d.filter(function(a){return!1!==a}),!jQuery.isEmptyObject(d)&&this.domain_inversion.simplify(["OR"].concat(d))}}),Sao.common.guess_mimetype=function(a){return/.*odt$/.test(a)?"application/vnd.oasis.opendocument.text":/.*ods$/.test(a)?"application/vnd.oasis.opendocument.spreadsheet":/.*pdf$/.test(a)?"application/pdf":/.*docx$/.test(a)?"application/vnd.openxmlformats-officedocument.wordprocessingml.document":/.*doc/.test(a)?"application/msword":/.*xlsx$/.test(a)?"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":/.*xls/.test(a)?"application/vnd.ms-excel":"application/octet-binary"},Sao.common.LOCAL_ICONS=["tryton-add","tryton-archive","tryton-attach","tryton-back","tryton-bookmark-border","tryton-bookmark","tryton-bookmarks","tryton-cancel","tryton-clear","tryton-close","tryton-copy","tryton-create","tryton-date","tryton-delete","tryton-email","tryton-error","tryton-exit","tryton-export","tryton-filter","tryton-format-align-center","tryton-format-align-justify","tryton-format-align-left","tryton-format-align-right","tryton-format-bold","tryton-format-color-text","tryton-format-italic","tryton-format-underline","tryton-forward","tryton-history","tryton-import","tryton-info","tryton-launch","tryton-link","tryton-log","tryton-menu","tryton-note","tryton-ok","tryton-open","tryton-print","tryton-public","tryton-refresh","tryton-remove","tryton-save","tryton-search","tryton-star-border","tryton-star","tryton-switch","tryton-translate","tryton-unarchive","tryton-undo","tryton-warning"],Sao.common.IconFactory=Sao.class_(Object,{batchnum:10,name2id:{},loaded_icons:{},tryton_icons:[],register_prm:jQuery.when(),load_icons:function(a){if(!(a=a||!1))for(var b in this.load_icons)this.load_icons.hasOwnProperty(b)&&window.URL.revokeObjectURL(this.load_icons[b]);return new Sao.Model("ir.ui.icon").execute("list_icons",[],{}).then(function(b){a||(this.name2id={},this.loaded_icons={}),this.tryton_icons=[];for(var c,d,e=0,f=b.length;e<f;e++)c=b[e][0],d=b[e][1],a&&d in this.loaded_icons||(this.tryton_icons.push([c,d]),this.name2id[d]=c)}.bind(this))},register_icon:function(a){if(!a)return jQuery.when();if(a in this.loaded_icons||~Sao.common.LOCAL_ICONS.indexOf(a))return jQuery.when();if("pending"==this.register_prm.state())return this.register_prm.then(function(){return this.register_icon(a)}.bind(this));var b;b=a in this.name2id?jQuery.when():this.load_icons(!0);var c=new Sao.Model("ir.ui.icon");return this.register_prm=b.then(function(){var b=function(a){var b,c;for(b=0,c=this.tryton_icons.length;b<c;b++){var d=this.tryton_icons[b];if(Sao.common.compare(d,a))break}return b}.bind(this),d=b([this.name2id[a],a]),e=Math.round(d-this.batchnum/2);e=e<0?0:e;var f=Math.round(d+this.batchnum/2),g=[];return this.tryton_icons.slice(e,f).forEach(function(a){g.push(a[0])}),c.execute("read",[g,["name","icon"]],{}).then(function(a){a.forEach(function(a){var c=this._convert(a.icon);this.loaded_icons[a.name]=c,delete this.name2id[a.name],this.tryton_icons.splice(b([a.id,a.name]),1)}.bind(this))}.bind(this))}.bind(this)),this.register_prm},_convert:function(a){var b=jQuery.parseXML(a);jQuery(b).find("svg").attr("fill",Sao.config.icon_color),a=(new XMLSerializer).serializeToString(b);var c=new Blob([a],{type:"image/svg+xml"});return window.URL.createObjectURL(c)},get_icon_url:function(a){if(a)return this.register_icon(a).then(function(){return a in this.loaded_icons?this.loaded_icons[a]:jQuery.get("images/"+a+".svg",null,null,"text").then(function(b){var c=this._convert(b);return this.loaded_icons[a]=c,c}.bind(this))}.bind(this))},get_icon_img:function(a,b){b=b||{},b.class||(b.class="icon");var c=jQuery("<img/>",b);return a&&this.get_icon_url(a).then(function(a){c.attr("src",a)}),c}}),Sao.common.ICONFACTORY=new Sao.common.IconFactory,Sao.common.UniqueDialog=Sao.class_(Object,{init:function(){this.running=!1},build_dialog:function(){return new Sao.Dialog("",this.class_)},run:function(){if(this.running)return jQuery.when();var a=Array.prototype.slice.call(arguments),b=jQuery.Deferred();a.push(b);var c=this.build_dialog.apply(this,a);return c.content.submit(function(a){c.footer.find("button.btn-primary").first().click(),a.preventDefault()}.bind(this)),this.running=!0,c.modal.modal("show"),c.modal.on("shown.bs.modal",function(){c.modal.find("input,select").filter(":visible").first().focus()}),b},close:function(a){a.modal.on("hidden.bs.modal",function(a){jQuery(this).remove()}),a.modal.modal("hide"),this.running=!1}}),Sao.common.MessageDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"message-dialog",build_dialog:function(a,b,c){var d=Sao.common.MessageDialog._super.build_dialog.call(this);return d.header.remove(),d.body.append(jQuery("<div/>",{class:"alert alert-info",role:"alert"}).append(Sao.common.ICONFACTORY.get_icon_img(b,{"aria-hidden":!0})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Message: "))).append(jQuery("<span/>").text(a).css("white-space","pre-wrap"))),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(d),c.resolve("ok")}.bind(this)).appendTo(d.footer),d},run:function(a,b){return Sao.common.MessageDialog._super.run.call(this,a,b||"tryton-info")}}),Sao.common.message=new Sao.common.MessageDialog,Sao.common.WarningDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"warning-dialog",build_dialog:function(a,b,c){var d=Sao.common.WarningDialog._super.build_dialog.call(this),e=jQuery("<div/>",{class:"alert alert-warning",role:"alert"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-warning",{"aria-hidden":!0})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Warning: "))).append(jQuery("<h4/>").text(b).css("white-space","pre-wrap"));return a&&e.append(jQuery("<span/>").text(a).css("white-space","pre-wrap")),d.body.append(e),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(d),c.resolve("ok")}.bind(this)).appendTo(d.footer),d}}),Sao.common.warning=new Sao.common.WarningDialog,Sao.common.UserWarningDialog=Sao.class_(Sao.common.WarningDialog,{class_:"user-warning-dialog",build_dialog:function(a,b,c){var d=Sao.common.UserWarningDialog._super.build_dialog.call(this,a,b,c),e=jQuery("<input/>",{type:"checkbox"});return d.body.append(jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>").append(e).text(Sao.i18n.gettext("Always ignore this warning.")))),d.body.append(jQuery("<p/>").text(Sao.i18n.gettext("Do you want to proceed?"))),d.footer.children().remove(),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("No")).click(function(){this.close(d),c.reject()}.bind(this)).appendTo(d.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("Yes")).click(function(){this.close(d),e.prop("checked")&&c.resolve("always"),c.resolve("ok")}.bind(this)).appendTo(d.footer),d}}),Sao.common.userwarning=new Sao.common.UserWarningDialog,Sao.common.ConfirmationDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"confirmation-dialog",build_dialog:function(a){var b=Sao.common.ConfirmationDialog._super.build_dialog.call(this);return b.header.remove(),b.body.append(jQuery("<div/>",{class:"alert alert-info",role:"alert"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-info",{"aria-hidden":!0})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Confirmation: "))).append(jQuery("<span/>").text(a).css("white-space","pre-wrap"))),b}}),Sao.common.SurDialog=Sao.class_(Sao.common.ConfirmationDialog,{build_dialog:function(a,b){var c=Sao.common.SurDialog._super.build_dialog.call(this,a);return jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(c),b.reject()}.bind(this)).appendTo(c.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(c),b.resolve()}.bind(this)).appendTo(c.footer),c}}),Sao.common.sur=new Sao.common.SurDialog,Sao.common.Sur3BDialog=Sao.class_(Sao.common.ConfirmationDialog,{build_dialog:function(a,b){var c=Sao.common.SurDialog._super.build_dialog.call(this,a);return jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(c),b.resolve("cancel")}.bind(this)).appendTo(c.footer),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("No")).click(function(){this.close(c),b.resolve("ko")}.bind(this)).appendTo(c.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("Yes")).click(function(){this.close(c),b.resolve("ok")}.bind(this)).appendTo(c.footer),c}}),Sao.common.sur_3b=new Sao.common.Sur3BDialog,Sao.common.AskDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"ask-dialog",run:function(){var a=Array.prototype.slice.call(arguments);return 1==a.length&&a.push(!0),Sao.common.AskDialog._super.run.apply(this,a)},build_dialog:function(a,b,c){var d=Sao.common.AskDialog._super.build_dialog.call(this);d.header.remove();var e=jQuery("<input/>",{class:"form-control",type:b?"input":"password",id:"ask-dialog-entry"});return d.body.append(jQuery("<div/>",{class:"form-group"}).append(jQuery("<label/>",{for:"ask-dialog-entry"}).text(a)).append(e)),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(d),c.reject()}.bind(this)).appendTo(d.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(d),c.resolve(e.val())}.bind(this)).appendTo(d.footer),d}}),Sao.common.ask=new Sao.common.AskDialog,Sao.common.ConcurrencyDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"ask-dialog",build_dialog:function(a,b,c,d){var e=Sao.common.ConcurrencyDialog._super.build_dialog.call(this);return e.modal.find(".modal-dialog").removeClass("modal-sm").addClass("modal-lg"),e.add_title(Sao.i18n.gettext("Concurrency Exception")),e.body.append(jQuery("<div/>",{class:"alert alert-warning",role:"alert"}).append(jQuery("<p/>").append(Sao.common.ICONFACTORY.get_icon_img("tryton-info",{"aria-hidden":!0})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Write Concurrency Warning: "))).text(Sao.i18n.gettext("This record has been modified while you were editing it."))).append(jQuery("<p/>").text(Sao.i18n.gettext("Choose:"))).append(jQuery("<ul/>").append(jQuery("<li/>").text(Sao.i18n.gettext('"Cancel" to cancel saving;'))).append(jQuery("<li/>").text(Sao.i18n.gettext('"Compare" to see the modified version;'))).append(jQuery("<li/>").text(Sao.i18n.gettext('"Write Anyway" to save your current version.'))))),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(e),d.reject()}.bind(this)).appendTo(e.footer),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("Compare")).click(function(){this.close(e),Sao.Tab.create({model:a,res_id:b,domain:[["id","=",b]],context:c,mode:["form","tree"]}),d.reject()}.bind(this)).appendTo(e.footer),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("Write Anyway")).click(function(){this.close(e),d.resolve()}.bind(this)).appendTo(e.footer),e}}),Sao.common.concurrency=new Sao.common.ConcurrencyDialog,Sao.common.ErrorDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"error-dialog",build_dialog:function(a,b,c){var d=Sao.common.ConcurrencyDialog._super.build_dialog.call(this);return d.modal.find(".modal-dialog").removeClass("modal-sm").addClass("modal-lg"),d.add_title(Sao.i18n.gettext("Application Error")),d.body.append(jQuery("<div/>",{class:"alert alert-warning",role:"alert"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-error",{"aria-hidden":!0})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Warning: "))).append(jQuery("<p/>").append(jQuery("<pre/>").text(b))).append(jQuery("<p/>").append(jQuery("<a/>",{class:"btn btn-link",href:Sao.config.roundup.url,target:"_blank",rel:"noreferrer noopener"}).text(Sao.i18n.gettext("Report Bug"))))),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("Close")).click(function(){this.close(d),c.resolve()}.bind(this)).appendTo(d.footer),d}}),Sao.common.error=new Sao.common.ErrorDialog,Sao.common.Processing=Sao.class_(Object,{queries:0,timeout:500,init:function(){this.el=jQuery("<div/>",{id:"processing",class:"text-center"}),this.el.append(jQuery("<span/>",{class:"label label-info",text:Sao.i18n.gettext("Processing...")})),this.el.hide(),jQuery(function(){this.el.appendTo("body")}.bind(this))},show:function(){return window.setTimeout(function(){this.queries+=1,this.el.show()}.bind(this),this.timeout)},hide:function(a){window.clearTimeout(a),this.queries>0&&(this.queries-=1),this.queries<=0&&(this.queries=0,this.el.hide())}}),Sao.common.processing=new Sao.common.Processing,Sao.common.InputCompletion=Sao.class_(Object,{init:function(a,b,c,d){a.is("input")?(a.wrap('<div class="dropdown"/>'),this.dropdown=a.parent()):(a.addClass("dropdown"),this.dropdown=a),this.input=a.find("input").add(a.filter("input")).first(),this.input.attr("autocomplete","off"),jQuery("<span/>",{"data-toggle":"dropdown"}).appendTo(this.dropdown),this.menu=jQuery("<ul/>",{class:"dropdown-menu",role:"listbox"}).appendTo(this.dropdown),this.separator=jQuery("<li/>",{role:"separator",class:"divider"}).appendTo(this.menu),this.separator.hide(),this.source=b,this.match_selected=c,this.format=d,this.action_activated=null,this._search_text=null,this.input.on("input",function(){window.setTimeout(this._input.bind(this),300,this.input.val())}.bind(this)),this.input.keydown(function(a){a.which==Sao.common.ESC_KEYCODE?this.dropdown.hasClass("open")&&(a.preventDefault(),a.stopPropagation(),this.menu.dropdown("toggle")):a.which==Sao.common.DOWN_KEYCODE&&this.dropdown.hasClass("open")&&(a.preventDefault(),a.stopPropagation(),this.menu.find("li > a").first().focus())}.bind(this)),this.menu.keydown(function(a){a.which==Sao.common.ESC_KEYCODE&&(a.preventDefault(),a.stopPropagation(),this.menu.dropdown("toggle"))}.bind(this)),this.dropdown.on("hide.bs.dropdown",function(){this.input.focus(),this.input.closest(".treeview").css("overflow",""),this.input.closest(".modal-body").css("overflow",""),this.input.closest(".navbar-collapse.in").css("overflow-y","")}.bind(this)),this.dropdown.on("show.bs.dropdown",function(){this.input.closest(".treeview").css("overflow","visible"),this.input.closest(".modal-body").css("overflow","visible"),this.input.closest(".navbar-collapse.in").css("overflow-y","visible")}.bind(this))},set_actions:function(a,b){if(void 0!==b&&(this.action_activated=b),this.menu.find("li.action").remove(),jQuery.isEmptyObject(a))return void this.separator.hide();this.separator.show(),a.forEach(function(a){var b=a[0],c=a[1];jQuery("<li/>",{class:"action action-"+b}).append(jQuery("<a/>",{href:"#"}).text(this._format_action(c))).click(function(a){a.preventDefault(),this.action_activated&&this.action_activated(b),this.input.val("")}.bind(this)).appendTo(this.menu)},this)},_format:function(a){return this.format?this.format(a):jQuery("<span/>").text(a)},_format_action:function(a){return this.format_action?this.format_action(a):a},_input:function(a){if(a==this.input.val()){var b;b=this.source instanceof Array?jQuery.when(source.filter(function(b){return b.toLowerCase().startsWith(a.toLowerCase())})):this.source(a),b.then(function(b){a==this.input.val()&&this._set_selection(b)}.bind(this))}},_set_selection:function(a){void 0===a&&(a=[]),this.menu.find("li.completion").remove(),a.reverse().forEach(function(a){jQuery("<li/>",{class:"completion"}).append(jQuery("<a/>",{href:"#"}).append(this._format(a))).click(function(b){b.preventDefault(),this.match_selected&&this.match_selected(a),this.input.focus()}.bind(this)).prependTo(this.menu)},this),this.input.val()?this.dropdown.hasClass("open")||this.menu.dropdown("toggle"):this.dropdown.hasClass("open")&&this.menu.dropdown("toggle")}}),Sao.common.get_completion=function(a,b,c,d){var e=function(a){return a.rec_name};new Sao.common.InputCompletion(a,b,c,e).set_actions([["search",Sao.i18n.gettext("Search...")],["create",Sao.i18n.gettext("Create...")]],d)},Sao.common.update_completion=function(a,b,c,d,e){var f=a.val();if(!f||!d)return jQuery.when();void 0===e&&(e=c.get_domain(b));var g=c.get_search_context(b);e=[["rec_name","ilike","%"+f+"%"],e];var h=c.get_search_order(b);return new Sao.Model(d).execute("search_read",[e,0,Sao.config.limit,h,["rec_name"]],g)},Sao.common.Paned=Sao.class_(Object,{init:function(a){var b;this._orientation=a,this.el=jQuery("<div/>"),"horizontal"==a?(b=jQuery("<div/>",{class:"row"}).appendTo(this.el),this.child1=jQuery("<div/>",{class:"col-md-6"}).appendTo(b),this.child2=jQuery("<div/>",{class:"col-md-6"}).appendTo(b)):"vertical"==a&&(this.child1=jQuery("<div/>",{class:"row"}).appendTo(this.el),this.child2=jQuery("<div/>",{class:"row"}).appendTo(this.el))},get_child1:function(){return this.child1},get_child2:function(){return this.child2}}),Sao.common.get_focus_chain=function(a){var b=a.find("input","textarea");return b.sort(function(a,b){if("tabindex"in a.attributes&&"tabindex"in b.attributes){return parseInt(a.attributes.tabindex.value)-parseInt(b.attributes.tabindex.value)}return"tabindex"in a.attributes?-1:"tabindex"in b.attributes?1:0}),b},Sao.common.find_focusable_child=function(a){var b,c,d,e;if(!a.is(":visible"))return null;if(~["input","select","textarea"].indexOf(a[0].tagName.toLowerCase()))return a;for(d=Sao.common.get_focus_chain(a),b=0,c=d.length;b<c;b++)if(e=Sao.common.find_focusable_child(jQuery(d[b])))return e},Sao.common.find_first_focus_widget=function(a,b){var c,d,e,f;if(1==b.length)return jQuery(b[0]);for(e=Sao.common.get_focus_chain(a),c=0;c<e.length;c++){for(f=[],d=0;d<b.length;d++)jQuery(b[d]).closest(e[c]).length>0&&f.push(b[d]);if(f.length>0)return Sao.common.find_first_focus_widget(jQuery(e[c]),f)}},Sao.common.apply_label_attributes=function(a,b,c){b?a.removeClass("editable required"):(a.addClass("editable"),c?a.addClass("required"):a.removeClass("required"))},Sao.common.download_file=function(a,b,c){if(void 0===c){c={type:Sao.common.guess_mimetype(b?b.split(".").pop():void 0)}}var d=new Blob([a],c);if(window.navigator&&window.navigator.msSaveOrOpenBlob)return void window.navigator.msSaveOrOpenBlob(d,b);var e=window.URL.createObjectURL(d),f=new Sao.Dialog(Sao.i18n.gettext("Download")),g=function(){f.modal.modal("hide")},h=jQuery("<a/>",{href:e,download:b,text:b,target:"_blank"}).appendTo(f.body).click(g);jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("Close")).click(g).appendTo(f.footer);f.modal.on("shown.bs.modal",function(){h[0].click()}),f.modal.modal("show"),f.modal.on("hidden.bs.modal",function(){jQuery(this).remove(),window.URL.revokeObjectURL(this.blob_url)})},Sao.common.get_input_data=function(a,b,c){function d(a){var d=new FileReader;d.onload=function(){var e=new Uint8Array(d.result);c&&(e=String.fromCharCode.apply(null,e)),b(e,a.name)},d.readAsArrayBuffer(a)}for(var e=0;e<a[0].files.length;e++)d(a[0].files[e])},Sao.common.ellipsize=function(a,b){if(a.length<=b)return a;var c=Sao.i18n.gettext("...");return a.slice(0,b-c.length)+c},Sao.common.debounce=function(a,b){return function(){var c=[].slice(arguments);clearTimeout(a._debounceTimeout),a._debounceTimeout=setTimeout(function(){a.apply(this,c)}.bind(this),b)}.bind(this)},Sao.common.uuid4=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}(),function(){"use strict";Sao.Window={},Sao.Window.InfoBar=Sao.class_(Object,{init:function(){this.text=jQuery("<span/>"),this.text.css("white-space","pre-wrap"),this.el=jQuery("<div/>",{class:"alert infobar",role:"alert"}).append(jQuery("<button/>",{type:"button",class:"close","aria-label":Sao.i18n.gettext("Close")}).append(jQuery("<span/>",{"aria-hidden":!0}).append("×")).click(function(){this.el.hide()}.bind(this))).append(this.text),this.el.hide()},message:function(a,b){a?(this.el.removeClass("alert-success alert-info alert-warning alert-danger"),this.el.addClass("alert-"+(b||"info")),this.text.text(a),this.el.show()):this.el.hide()}}),Sao.Window.Form=Sao.class_(Object,{init:function(a,b,c){c=c||{},this.screen=a,this.callback=b,this.many=c.many||0,this.domain=c.domain||null,this.context=c.context||null,this.save_current=c.save_current;var d=jQuery.when(c.title||"");d.then(function(a){this.title=a}.bind(this)),this.prev_view=a.current_view,this.screen.screen_container.alternate_view=!0,this.info_bar=new Sao.Window.InfoBar;var e=c.view_type||"form";this.switch_prm=this.screen.switch_view(e).done(function(){c.new_&&this.screen.current_view.view_type==e&&this.screen.new_(void 0,c.rec_name)}.bind(this));var f=new Sao.Dialog("","window-form","lg",!1);this.el=f.modal,this.el.on("keydown",function(a){a.which==Sao.common.ESC_KEYCODE&&(a.preventDefault(),this.response("RESPONSE_CANCEL"))}.bind(this));var g=this.screen.attributes.readonly||this.screen.group.get_readonly();if(this._initial_value=null,"form"==e){var h;if(c.new_)h=Sao.i18n.gettext("Delete");else{h=Sao.i18n.gettext("Cancel");var i=this.screen.current_record;if(this._initial_value=i.get_on_change_value(),i.group.parent&&i.model.fields[i.group.parent_name]){var j=i.model.fields[i.group.parent_name];this._initial_value[i.group.parent_name]=j.get_eval(i)}}f.footer.append(jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(h).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)))}if(c.new_&&this.many&&f.footer.append(jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("New")).click(function(){this.response("RESPONSE_ACCEPT")}.bind(this))),this.save_current?f.footer.append(jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("Save"))):f.footer.append(jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK"))),f.content.submit(function(a){this.response("RESPONSE_OK"),a.preventDefault()}.bind(this)),"tree"==e){var k=jQuery("<div/>",{class:"window-form-toolbar"}).appendTo(f.body),l=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(k);this.wid_text=jQuery("<input/>",{type:"input"}).appendTo(k),this.wid_text.hide();var m=jQuery("<div/>",{class:"input-group-btn"}).appendTo(l),n=Sao.common.MODELACCESS.get(this.screen.model_name),o=function(a){return function(b){var c=jQuery(b.target);c.prop("disabled",!0),(a(b)||jQuery.when()).always(function(){c.prop("disabled",!1)})}};this.but_switch=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Switch")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-switch")).appendTo(m),this.but_switch.click(o(this.switch_.bind(this))),this.but_previous=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Previous")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-back")).appendTo(m),this.but_previous.click(o(this.previous.bind(this))),this.label=jQuery("<span/>",{class:"badge"}).appendTo(jQuery("<span/>",{class:"btn hidden-xs"}).appendTo(m)),this.but_next=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Next")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-forward")).appendTo(m),this.but_next.click(o(this.next.bind(this))),this.domain&&(this.wid_text.show(),this.but_add=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Add")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-add")).appendTo(m),this.but_add.click(o(this.add.bind(this))),this.but_add.prop("disabled",!n.read||g),this.but_remove=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Remove")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-remove")).appendTo(m),this.but_remove.click(o(this.remove.bind(this))),this.but_remove.prop("disabled",!n.read||g)),this.but_new=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("New")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-create")).appendTo(m),this.but_new.click(o(this.new_.bind(this))),this.but_new.prop("disabled",!n.create||g),this.but_del=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Delete")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-delete")).appendTo(m),this.but_del.click(o(this.delete_.bind(this))),this.but_del.prop("disabled",!n.delete||g),this.but_undel=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Undelete")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-undo")).appendTo(m),this.but_undel.click(o(this.undelete.bind(this))),this.but_undel.prop("disabled",!n.delete||g),this.screen.message_callback=this.record_label.bind(this)}var p=jQuery("<div/>").appendTo(f.body);f.body.append(this.info_bar.el),this.switch_prm.done(function(){this.screen.current_view.view_type!=e?this.destroy():(d.done(f.add_title.bind(f)),p.append(this.screen.screen_container.alternate_viewport),this.el.modal("show"))}.bind(this)),this.el.on("shown.bs.modal",function(a){this.screen.display().done(function(){this.screen.set_cursor()}.bind(this))}.bind(this)),this.el.on("hidden.bs.modal",function(a){jQuery(this).remove()})},record_label:function(a){var b="_",c=Sao.common.MODELACCESS.get(this.screen.model_name),d=this.screen.group.get_readonly();a[0]>=1?(b=a[0],this.domain&&this.but_remove.prop("disabled",!1),this.but_next.prop("disabled",a[0]>=a[1]),this.but_previous.prop("disabled",a[0]<=1),c.delete&&!d&&(this.but_del.prop("disabled",!1),this.but_undel.prop("disabled",!1))):(this.but_del.prop("disabled",!0),this.but_undel.prop("disabled",!0),this.but_next.prop("disabled",!0),this.but_previous.prop("disabled",!0),this.domain&&this.but_remove.prop("disabled",!0));var e=b+"/"+a[1];this.label.text(e).attr("title",e)},add:function(){var a=jQuery.extend([],this.domain),b=this.screen.model_name,c=this.wid_text.val(),d=function(a){var b=jQuery.when();if(!jQuery.isEmptyObject(a)){for(var c=[],d=0,e=a.length;d<e;d++)c.push(a[d][0]);this.screen.group.load(c,!0),b=this.screen.display()}b.done(function(){this.screen.set_cursor()}.bind(this)),this.entry.val("")}.bind(this),e=new Sao.common.DomainParser;new Sao.Window.Search(b,d,{sel_multi:!0,context:this.context,domain:a,search_filter:e.quote(c)})},remove:function(){this.screen.remove(!1,!0,!1)},new_:function(){this.screen.new_(),this._initial_value=null},delete_:function(){this.screen.remove(!1,!1,!1)},undelete:function(){this.screen.unremove()},previous:function(){return this.screen.display_previous()},next:function(){return this.screen.display_next()},switch_:function(){return this.screen.switch_view()},response:function(a){var b;this.screen.current_view.set_value();var c=this.screen.group.get_readonly();if(~["RESPONSE_OK","RESPONSE_ACCEPT"].indexOf(a)&&!c&&this.screen.current_record)return void this.screen.current_record.validate().then(function(a){return a&&this.screen.attributes.pre_validate?this.screen.current_record.pre_validate():a}.bind(this)).then(function(c){var d=jQuery.Deferred();if(c&&this.save_current)this.screen.save_current().then(d.resolve,d.reject);else if(c&&"form"==this.screen.current_view.view_type){var e=this.screen.current_view,f=[];for(var g in e.widgets){var h=e.widgets[g];if(h.screen&&h.screen.attributes.pre_validate){var i=h.screen.current_record;i&&f.push(i.pre_validate())}}jQuery.when.apply(jQuery,f).then(d.resolve,d.reject)}else c?(this.info_bar.message(),d.resolve()):(this.info_bar.message(this.screen.invalid_message(),"danger"),d.reject());d.fail(function(){this.screen.display().done(function(){this.screen.set_cursor()}.bind(this))}.bind(this)),d.done(function(){"RESPONSE_ACCEPT"==a?(this.screen.new_(),this.screen.current_view.display().done(function(){this.screen.set_cursor()}.bind(this)),this.many-=1,0===this.many&&this.but_new.prop("disabled",!0)):(b=!0,this.callback(b),this.destroy())}.bind(this))}.bind(this));var d=null;if("RESPONSE_CANCEL"==a&&!c&&this.screen.current_record){b=!1;var e=this.screen.current_record,f=e._changed.id;e.id<0||this.save_current?d=this.screen.cancel_current(this._initial_value):e.has_changed()&&(e.cancel(),d=e.reload().then(function(){this.screen.display()}.bind(this))),f&&(e._changed.id=f)}else b="RESPONSE_CANCEL"!=a;(d||jQuery.when()).then(function(){this.callback(b),this.destroy()}.bind(this))},destroy:function(){this.screen.screen_container.alternate_view=!1,this.screen.screen_container.alternate_viewport.children().detach(),this.prev_view&&this.screen.switch_view(this.prev_view.view_type),this.el.modal("hide")}}),Sao.Window.Attachment=Sao.class_(Sao.Window.Form,{init:function(a,b){this.resource=a.model.name+","+a.id,this.attachment_callback=b;var c=jQuery.extend({},a.get_context()),d=new Sao.Screen("ir.attachment",{domain:[["resource","=",this.resource]],mode:["tree","form"],context:c}),e=a.rec_name().then(function(a){return Sao.i18n.gettext("Attachments (%1)",a)});Sao.Window.Attachment._super.init.call(this,d,this.callback,{view_type:"tree",title:e}),this.switch_prm=this.switch_prm.then(function(){return d.search_filter()})},callback:function(a){var b=jQuery.when();a&&(b=this.screen.save_current()),this.attachment_callback&&b.always(this.attachment_callback.bind(this))},add_data:function(a,b){var c=this.screen;this.switch_prm.then(function(){c.new_().then(function(d){var e=d.model.fields.data;d.field_set_client(e.description.filename,b),d.field_set_client("data",a),c.display()})})}}),Sao.Window.Attachment.get_attachments=function(a){var b;if(a&&a.id>=0){var c=a.get_context();b=Sao.rpc({method:"model.ir.attachment.search_read",
|
|
15
15
|
params:[[["resource","=",a.model.name+","+a.id]],0,20,null,["rec_name","name","type","link"],c]},a.model.session)}else b=jQuery.when([]);var d=function(a,b,c,d){return function(){return a(b,c,d)}};return b.then(function(b){return b.map(function(b){var e=b.rec_name;if("link"==b.type)return[e,b.link];var f=Sao.Window.Attachment["open_"+b.type];return[e,d(f,b,c,a.model.session)]})})},Sao.Window.Attachment.open_data=function(a,b,c){Sao.rpc({method:"model.ir.attachment.read",params:[[a.id],["data"],b]},c).then(function(b){Sao.common.download_file(b[0].data,a.name)})},Sao.Window.Note=Sao.class_(Sao.Window.Form,{init:function(a,b){this.resource=a.model.name+","+a.id,this.note_callback=b;var c=jQuery.extend({},a.get_context()),d=new Sao.Screen("ir.note",{domain:[["resource","=",this.resource]],mode:["tree","form"],context:c}),e=a.rec_name().then(function(a){return Sao.i18n.gettext("Notes (%1)",a)});Sao.Window.Note._super.init.call(this,d,this.callback,{view_type:"tree",title:e}),this.switch_prm=this.switch_prm.then(function(){return d.search_filter()})},callback:function(a){var b=jQuery.when();if(a){var c=this.screen.group.model.fields.unread;this.screen.group.forEach(function(a){(a.get_loaded()||a.id<0)&&(a._changed.unread||c.set_client(a,!1))}.bind(this)),b=this.screen.save_current()}this.note_callback&&b.always(this.note_callback.bind(this))}}),Sao.Window.Search=Sao.class_(Object,{init:function(a,b,c){c=c||{};var d=c.views_preload||{};this.model_name=a,this.domain=c.domain||[],this.context=c.context||{},this.order=c.order||null,this.view_ids=c.view_ids,this.views_preload=d,this.sel_multi=c.sel_multi,this.callback=b,this.title=c.title||"";var e=new Sao.Dialog(Sao.i18n.gettext("Search %1",this.title),"","lg");this.el=e.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(e.footer),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("Find")).click(function(){this.response("RESPONSE_APPLY")}.bind(this)).appendTo(e.footer),c.new_&&Sao.common.MODELACCESS.get(a).create&&jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("New")).click(function(){this.response("RESPONSE_ACCEPT")}.bind(this)).appendTo(e.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(e.footer),e.content.submit(function(a){this.response("RESPONSE_OK"),a.preventDefault()}.bind(this)),this.screen=new Sao.Screen(a,{mode:["tree"],context:this.context,domain:this.domain,order:this.order,view_ids:c.view_ids,views_preload:d,row_activate:this.activate.bind(this),readonly:!0}),this.screen.load_next_view().done(function(){this.screen.switch_view().done(function(){this.sel_multi?this.screen.current_view.selection_mode=Sao.common.SELECTION_MULTIPLE:this.screen.current_view.selection_mode=Sao.common.SELECTION_SINGLE,e.body.append(this.screen.screen_container.el),this.el.modal("show"),this.screen.display(),void 0!==c.search_filter&&this.screen.search_filter(c.search_filter)}.bind(this))}.bind(this)),this.el.on("hidden.bs.modal",function(a){jQuery(this).remove()})},activate:function(){this.response("RESPONSE_OK")},response:function(a){var b,c=[];if("RESPONSE_OK"==a)b=this.screen.current_view.selected_records();else{if("RESPONSE_APPLY"==a)return void this.screen.search_filter();if("RESPONSE_ACCEPT"==a){var d=jQuery.extend([],this.view_ids);jQuery.isEmptyObject(d)||d.shift();var e=new Sao.Screen(this.model_name,{domain:this.domain,context:this.context,order:this.order,mode:["form"],view_ids:d,views_preload:this.views_preload}),f=function(a){if(a){var b=e.current_record;this.callback([[b.id,b._values.rec_name||""]])}else this.callback(null)};return this.el.modal("hide"),void new Sao.Window.Form(e,f.bind(this),{new_:!0,save_current:!0,title:this.title})}}if(b){var g,h;for(g in b)h=b[g],c.push([h.id,h._values.rec_name||""])}this.callback(c),this.el.modal("hide")}}),Sao.Window.Preferences=Sao.class_(Object,{init:function(a){this.callback=a;var b=new Sao.Dialog("Preferences","","lg");this.el=b.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(b.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(b.footer),b.content.submit(function(a){this.response("RESPONSE_OK"),a.preventDefault()}.bind(this)),this.screen=new Sao.Screen("res.user",{mode:[]}),this.screen.attributes.readonly=!1,this.screen.group.set_readonly(!1),this.screen.group.skip_model_access=!0;var c=function(a){this.screen.add_view(a),this.screen.switch_view().done(function(){this.screen.new_(!1),this.screen.model.execute("get_preferences",[!1],{}).then(d.bind(this),this.destroy)}.bind(this))},d=function(a){var c;this.screen.current_record.cancel(),c=this.screen.current_record.set(a),this.screen.current_record.id=this.screen.model.session.user_id,c.then(function(){this.screen.current_record.validate(null,!0).then(function(){this.screen.display(!0)}.bind(this))}.bind(this)),b.body.append(this.screen.screen_container.el),this.el.modal("show")};this.el.on("hidden.bs.modal",function(a){jQuery(this).remove()}),this.screen.model.execute("get_preferences_fields_view",[],{}).then(c.bind(this),this.destroy)},response:function(a){var b=function(){this.destroy(),this.callback()}.bind(this),c=jQuery.when();"RESPONSE_OK"==a&&(c=this.screen.current_record.validate().then(function(a){if(a){var b=jQuery.extend({},this.screen.get());return this.screen.model.execute("set_preferences",[b],{})}}.bind(this))),c.done(b)},destroy:function(){this.el.modal("hide")}}),Sao.Window.Revision=Sao.class_(Object,{init:function(a,b){this.callback=b;var c=new Sao.Dialog(Sao.i18n.gettext("Revision"),"","lg");this.el=c.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(c.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(c.footer),c.content.submit(function(a){this.response("RESPONSE_OK"),a.preventDefault()}.bind(this));var d=jQuery("<div/>",{class:"form-group"}).appendTo(c.body);jQuery("<label/>",{for:"revision",text:"Revision"}).appendTo(d),this.select=jQuery("<select/>",{class:"form-control",id:"revision",placeholder:Sao.i18n.gettext("Revision")}).appendTo(d);var e=Sao.common.date_format();this.select.append(jQuery("<option/>",{value:null,text:""})),a.forEach(function(a){var b=a[2];a=a[0],this.select.append(jQuery("<option/>",{value:a.valueOf(),text:Sao.common.format_datetime(e,"%H:%M:%S.%f",a)+" "+b}))}.bind(this)),this.el.modal("show"),this.el.on("hidden.bs.modal",function(a){jQuery(this).remove()})},response:function(a){var b=null;"RESPONSE_OK"==a&&(b=this.select.val())&&(b=Sao.DateTime(parseInt(b,10))),this.el.modal("hide"),this.callback(b)}}),Sao.Window.CSV=Sao.class_(Object,{init:function(a){this.encodings=["866","ansi_x3.4-1968","arabic","ascii","asmo-708","big5","big5-hkscs","chinese","cn-big5","cp1250","cp1251","cp1252","cp1253","cp1254","cp1255","cp1256","cp1257","cp1258","cp819","cp866","csbig5","cseuckr","cseucpkdfmtjapanese","csgb2312","csibm866","csiso2022jp","csiso2022kr","csiso58gb231280","csiso88596e","csiso88596i","csiso88598e","csiso88598i","csisolatin1","csisolatin2","csisolatin3","csisolatin4","csisolatin5","csisolatin6","csisolatin9","csisolatinarabic","csisolatincyrillic","csisolatingreek","csisolatinhebrew","cskoi8r","csksc56011987","csmacintosh","csshiftjis","cyrillic","dos-874","ecma-114","ecma-118","elot_928","euc-jp","euc-kr","gb18030","gb2312","gb_2312","gb_2312-80","gbk","greek","greek8","hebrew","hz-gb-2312","ibm819","ibm866","iso-2022-cn","iso-2022-cn-ext","iso-2022-jp","iso-2022-kr","iso-8859-1","iso-8859-10","iso-8859-11","iso-8859-13","iso-8859-14","iso-8859-15","iso-8859-16","iso-8859-2","iso-8859-3","iso-8859-4","iso-8859-5","iso-8859-6","iso-8859-6-e","iso-8859-6-i","iso-8859-7","iso-8859-8","iso-8859-8-e","iso-8859-8-i","iso-8859-9","iso-ir-100","iso-ir-101","iso-ir-109","iso-ir-110","iso-ir-126","iso-ir-127","iso-ir-138","iso-ir-144","iso-ir-148","iso-ir-149","iso-ir-157","iso-ir-58","iso8859-1","iso8859-10","iso8859-11","iso8859-13","iso8859-14","iso8859-15","iso8859-2","iso8859-3","iso8859-4","iso8859-5","iso8859-6","iso8859-7","iso8859-8","iso8859-9","iso88591","iso885910","iso885911","iso885913","iso885914","iso885915","iso88592","iso88593","iso88594","iso88595","iso88596","iso88597","iso88598","iso88599","iso_8859-1","iso_8859-15","iso_8859-1:1987","iso_8859-2","iso_8859-2:1987","iso_8859-3","iso_8859-3:1988","iso_8859-4","iso_8859-4:1988","iso_8859-5","iso_8859-5:1988","iso_8859-6","iso_8859-6:1987","iso_8859-7","iso_8859-7:1987","iso_8859-8","iso_8859-8:1988","iso_8859-9","iso_8859-9:1989","koi","koi8","koi8-r","koi8-ru","koi8-u","koi8_r","korean","ks_c_5601-1987","ks_c_5601-1989","ksc5601","ksc_5601","l1","l2","l3","l4","l5","l6","l9","latin1","latin2","latin3","latin4","latin5","latin6","logical","mac","macintosh","ms932","ms_kanji","shift-jis","shift_jis","sjis","sun_eu_greek","tis-620","unicode-1-1-utf-8","us-ascii","utf-16","utf-16be","utf-16le","utf-8","utf8","visual","windows-1250","windows-1251","windows-1252","windows-1253","windows-1254","windows-1255","windows-1256","windows-1257","windows-1258","windows-31j","windows-874","windows-949","x-cp1250","x-cp1251","x-cp1252","x-cp1253","x-cp1254","x-cp1255","x-cp1256","x-cp1257","x-cp1258","x-euc-jp","x-gbk","x-mac-cyrillic","x-mac-roman","x-mac-ukrainian","x-sjis","x-user-defined","x-x-big5"],this.dialog=new Sao.Dialog(a,"csv","md"),this.el=this.dialog.modal,this.fields={},this.fields_model={},jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(this.dialog.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).click(function(a){this.response("RESPONSE_OK"),a.preventDefault()}.bind(this)).appendTo(this.dialog.footer);var b=jQuery("<div/>",{class:"row"}).appendTo(this.dialog.body);jQuery("<hr/>").appendTo(this.dialog.body);var c=jQuery("<div/>",{class:"col-md-4 column-fields"}).append(jQuery("<label/>",{text:Sao.i18n.gettext("All Fields")})).appendTo(b);this.fields_all=jQuery("<ul/>",{class:"list-unstyled"}).css("cursor","pointer").appendTo(c);var d=this.get_fields(this.screen.model_name).then(function(a){this.model_populate(a),this.view_populate(this.fields_model,this.fields_all)}.bind(this));this.column_buttons=jQuery("<div/>",{class:"col-md-4"}).append("<label/>").appendTo(b);jQuery("<button/>",{class:"btn btn-default btn-block",type:"button"}).text(" "+Sao.i18n.gettext("Add")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-add")).click(function(){this.fields_all.find(".bg-primary").each(function(a,b){this.sig_sel_add(b)}.bind(this))}.bind(this)).appendTo(this.column_buttons);jQuery("<button/>",{class:"btn btn-default btn-block",type:"button"}).text(" "+Sao.i18n.gettext("Remove")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-remove")).click(function(){this.fields_selected.children("li.bg-primary").remove()}.bind(this)).appendTo(this.column_buttons),jQuery("<button/>",{class:"btn btn-default btn-block",type:"button"}).text(" "+Sao.i18n.gettext("Clear")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-clear")).click(function(){this.fields_selected.empty()}.bind(this)).appendTo(this.column_buttons),jQuery("<hr>").appendTo(this.column_buttons);var e=jQuery("<div/>",{class:"col-md-4 column-fields"}).append(jQuery("<label/>",{text:Sao.i18n.gettext("Fields Selected")})).appendTo(b);this.fields_selected=jQuery("<ul/>",{class:"list-unstyled"}).css("cursor","pointer").appendTo(e),this.chooser_form=jQuery("<div/>",{class:"form-inline"}).appendTo(this.dialog.body);var f=jQuery("<div/>",{class:"row"}).appendTo(this.dialog.body),g=jQuery("<span/>",{class:"caret"}).css("cursor","pointer").html(" "),h=jQuery("<label/>",{text:Sao.i18n.gettext("CSV Parameters")}).css("cursor","pointer");jQuery("<div/>",{class:"col-md-12"}).append(h).append(g).on("click",function(){this.expander_csv.collapse("toggle")}.bind(this)).appendTo(f),this.expander_csv=jQuery("<div/>",{id:"expander_csv",class:"collapse"}).appendTo(f);var i=jQuery("<label/>",{text:Sao.i18n.gettext("Delimiter:"),class:"col-sm-2 control-label",for:"input-delimiter"}),j=",";navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(j=";"),this.el_csv_delimiter=jQuery("<input/>",{type:"text",class:"form-control",id:"input-delimiter",size:"1",maxlength:"1",value:j}),jQuery("<div/>",{class:"form-group"}).append(i).append(jQuery("<div/>",{class:"col-sm-4"}).append(this.el_csv_delimiter)).appendTo(this.expander_csv);var k=jQuery("<label/>",{text:Sao.i18n.gettext("Quote Char:"),class:"col-sm-2 control-label",for:"input-quotechar"});this.el_csv_quotechar=jQuery("<input/>",{type:"text",class:"form-control",id:"input-quotechar",size:"1",maxlength:"1",value:'"'}),jQuery("<div/>",{class:"form-group"}).append(k).append(jQuery("<div/>",{class:"col-sm-4"}).append(this.el_csv_quotechar)).appendTo(this.expander_csv);var l=jQuery("<label/>",{text:Sao.i18n.gettext("Encoding:"),class:"col-sm-2 control-label",for:"input-encoding"});this.el_csv_encoding=jQuery("<select/>",{class:"form-control",id:"input-encoding"});for(var m=0;m<this.encodings.length;m++)jQuery("<option/>",{val:this.encodings[m]}).append(this.encodings[m]).appendTo(this.el_csv_encoding);var n="utf-8";return navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(n="cp1252"),this.el_csv_encoding.children('option[value="'+n+'"]').attr("selected","selected"),jQuery("<div/>",{class:"form-group"}).append(l).append(jQuery("<div/>",{class:"col-sm-4"}).append(this.el_csv_encoding)).appendTo(this.expander_csv),this.el.modal("show"),this.el.on("hidden.bs.modal",function(){jQuery(this).remove()}),d},get_fields:function(a){return Sao.rpc({method:"model."+a+".fields_get"},this.session)},on_row_expanded:function(a){var b=jQuery("<ul/>").css("list-style","none").insertAfter(a.view);this.children_expand(a).done(function(){this.view_populate(a.children,b)}.bind(this))},destroy:function(){this.el.modal("hide")}}),Sao.Window.Import=Sao.class_(Sao.Window.CSV,{init:function(a,b){this.name=a,this.screen=b,this.session=Sao.Session.current_session,this.fields_data={},this.fields_invert={},Sao.Window.Import._super.init.call(this,Sao.i18n.gettext("CSV Import: %1",a)),jQuery("<button/>",{class:"btn btn-default btn-block",type:"button"}).text(" "+Sao.i18n.gettext("Auto-Detect")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-search")).click(function(){this.autodetect()}.bind(this)).appendTo(this.column_buttons);var c=jQuery("<label/>",{text:Sao.i18n.gettext("File to Import"),class:"col-sm-6 control-label",for:"input-csv-file"});this.file_input=jQuery("<input/>",{type:"file",id:"input-csv-file"}),jQuery("<div/>",{class:"form-group"}).append(c).append(jQuery("<div/>",{class:"col-sm-6"}).append(this.file_input)).appendTo(this.chooser_form),jQuery("<hr>").insertAfter(this.chooser_form);var d=jQuery("<label/>",{text:Sao.i18n.gettext("Lines to Skip:"),class:"col-sm-2 control-label",for:"input-skip"});this.el_csv_skip=jQuery("<input/>",{type:"number",class:"form-control",id:"input-skip",value:"0"}),jQuery("<div/>",{class:"form-group"}).append(d).append(jQuery("<div/>",{class:"col-sm-4"}).append(this.el_csv_skip)).appendTo(this.expander_csv)},sig_sel_add:function(a){a=jQuery(a);var b=a.attr("field"),c=jQuery("<li/>",{field:b}).text(a.attr("name")).click(function(a){a.ctrlKey?c.toggleClass("bg-primary"):jQuery(a.target).addClass("bg-primary").siblings().removeClass("bg-primary")}).appendTo(this.fields_selected)},view_populate:function(a,b){Object.keys(a).sort(function(b,c){return a[c].string<a[b].string?-1:1}).reverse().forEach(function(c){var d=a[c].string||c,e=jQuery("<li/>",{field:a[c].field,name:a[c].name}).text(d).click(function(a){a.ctrlKey?e.toggleClass("bg-primary"):(this.fields_all.find("li").removeClass("bg-primary"),e.addClass("bg-primary"))}.bind(this)).appendTo(b);if(a[c].view=e,a[c].relation){e.prepend(" ");var f=Sao.common.ICONFACTORY.get_icon_img("tryton-arrow-right").data("expanded",!1).click(function(b){b.stopPropagation();var d,g=f.data("expanded");f.data("expanded",!g),g?(d="tryton-arrow-right",e.next("ul").remove()):(d="tryton-arrow-down",this.on_row_expanded(a[c])),Sao.common.ICONFACTORY.get_icon_url(d).then(function(a){f.attr("src",a)})}.bind(this)).prependTo(e)}}.bind(this))},model_populate:function(a,b,c,d){b=b||this.fields_model,c=c||"",d=d||"",Object.keys(a).forEach(function(e){if(!a[e].readonly){var f=a[e].string||e;f=d+f;var g;g="one2many"==a[e].type?a[e].relation:null;var h={name:f,field:c+e,relation:g,string:a[e].string};b[e]=h,this.fields[c+e]=h,this.fields_invert[f]=c+e,g&&(h.children={})}}.bind(this))},children_expand:function(a){var b=jQuery.Deferred();return jQuery.isEmptyObject(a.children)?this.get_fields(a.relation).done(function(c){this.model_populate(c,a.children,a.field+"/",a.name+"/"),b.resolve(this)}.bind(this)):b.resolve(this),b.promise()},autodetect:function(){if(!this.file_input.val())return void Sao.common.message.run(Sao.i18n.gettext("You must select an import file first"));this.fields_selected.empty(),this.el_csv_skip.val(1),Papa.parse(this.file_input[0].files[0],{delimiter:this.el_csv_delimiter.val(),quoteChar:this.el_csv_quotechar.val(),preview:1,encoding:this.el_csv_encoding.val(),error:function(a,b,c,d){Sao.common.warning(Sao.i18n.gettext("Error occured in loading the file"))},complete:function(a){a.data[0].forEach(function(a){if(a in this.fields_invert||a in this.fields)this.auto_select(a);else{var b=this.fields_model,c=a.split("/");this.traverse(b,"",c,0)}}.bind(this))}.bind(this)})},auto_select:function(a){var b,c;if(a in this.fields_invert)b=a,c=this.fields_invert[a];else{if(!(a in this.fields))return void Sao.common.warning.run(Sao.i18n.gettext("Error processing the file at field %1.",a),Sao.i18n.gettext("Error"));b=this.fields[a].name,c=[a]}var d=jQuery("<li/>",{field:c}).text(b).click(function(){d.addClass("bg-primary").siblings().removeClass("bg-primary")}).appendTo(this.fields_selected)},traverse:function(a,b,c,d){function e(e){a=f.children,b+=c[d]+"/",e.traverse(a,b,c,++d)}if(d>=c.length-1)return void this.auto_select(c.join("/"));var f,g,h=Object.keys(a);for(g=0;g<h.length;g++)if(f=a[h[g]],f.name==b+c[d]||f.field==b+c[d]){this.children_expand(f).done(e);break}return g==h.length?void this.auto_select(c.join("/")):void 0},response:function(a){if("RESPONSE_OK"==a){var b=[];this.fields_selected.children("li").each(function(a,c){b.push(c.getAttribute("field"))});var c=this.file_input.val();c?this.import_csv(c,b).then(function(){this.destroy()}.bind(this)):this.destroy()}else this.destroy()},import_csv:function(a,b){var c=this.el_csv_skip.val(),d=this.el_csv_encoding.val(),e=jQuery.Deferred();return Papa.parse(this.file_input[0].files[0],{delimiter:this.el_csv_delimiter.val(),quoteChar:this.el_csv_quotechar.val(),encoding:d,error:function(a,b,c,d){Sao.common.warning.run(Sao.i18n.gettext("Error occured in loading the file")).always(e.reject)},complete:function(a){var d=a.data.slice(c,a.data.length-1);Sao.rpc({method:"model."+this.screen.model_name+".import_data",params:[b,d,{}]},this.session).then(function(a){return Sao.common.message.run(Sao.i18n.ngettext("%1 record imported","%1 records imported",a))}).then(e.resolve,e.reject)}.bind(this)}),e.promise()}}),Sao.Window.Export=Sao.class_(Sao.Window.CSV,{init:function(a,b,c,d,e){this.name=a,this.ids=c,this.screen=b,this.session=Sao.Session.current_session,this.context=e,Sao.Window.Export._super.init.call(this,Sao.i18n.gettext("CSV Export: %1",a)).then(function(){var a=this.screen.model.fields;d.forEach(function(b){var c=a[b].description.type;"selection"==c?this.sel_field(b+".translated"):"reference"==c?(this.sel_field(b+".translated"),this.sel_field(b+"/rec_name")):this.sel_field(b)}.bind(this))}.bind(this)),this.predef_exports={},this.fill_predefwin(),jQuery("<button/>",{class:"btn btn-default btn-block",type:"button"}).text(" "+Sao.i18n.gettext("Save Export")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-save")).click(function(){this.addreplace_predef()}.bind(this)).appendTo(this.column_buttons),jQuery("<button/>",{class:"btn btn-default btn-block",type:"button"}).text(" "+Sao.i18n.gettext("Delete Export")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-delete")).click(function(){this.remove_predef()}.bind(this)).appendTo(this.column_buttons);var f=jQuery("<div/>",{class:"col-md-12"}).append(jQuery("<label/>",{text:Sao.i18n.gettext("Predefined Exports")})).appendTo(this.column_buttons);this.predef_exports_list=jQuery("<ul/>",{class:"list-unstyled predef-exports"}).css("cursor","pointer").appendTo(f),this.el_add_field_names=jQuery("<input/>",{type:"checkbox",checked:"checked"}),jQuery("<div/>",{class:"form-group"}).append(jQuery("<div/>",{class:"col-md-6"}).append(jQuery("<label/>",{text:" "+Sao.i18n.gettext("Add Field Names")}).prepend(this.el_add_field_names))).appendTo(this.expander_csv)},view_populate:function(a,b){Object.keys(a).sort(function(b,c){return a[c].string<a[b].string?-1:1}).reverse().forEach(function(c){var d=a[c].path,e=jQuery("<li/>",{path:d}).text(a[c].string).click(function(a){a.ctrlKey?e.toggleClass("bg-primary"):(this.fields_all.find("li").removeClass("bg-primary"),e.addClass("bg-primary"))}.bind(this)).appendTo(b);if(a[c].view=e,a[c].children){e.prepend(" ");var f=Sao.common.ICONFACTORY.get_icon_img("tryton-arrow-right").data("expanded",!1).click(function(b){b.stopPropagation();var d,g=f.data("expanded");f.data("expanded",!g),g?(d="tryton-arrow-right",e.next("ul").remove()):(d="tryton-arrow-down",this.on_row_expanded(a[c])),Sao.common.ICONFACTORY.get_icon_url(d).then(function(a){f.attr("src",a)})}.bind(this)).prependTo(e)}}.bind(this))},model_populate:function(a,b,c,d){b=b||this.fields_model,c=c||"",d=d||"",Object.keys(a).forEach(function(e){var f=a[e],g=f.string||e,h=[{name:e,field:f,string:g}];"selection"==f.type?h.push({name:e+".translated",field:f,string:Sao.i18n.gettext("%1 (string)",g)}):"reference"==f.type&&(h.push({name:e+".translated",field:f,string:Sao.i18n.gettext("%1 (model name)",g)}),h.push({name:e+"/rec_name",field:f,string:Sao.i18n.gettext("%1 (record name)",g)})),h.forEach(function(a){var e=c+a.name,f=d+a.string,g={path:e,string:a.string,long_string:f,relation:a.field.relation};b[a.name]=g,this.fields[e]=g,-1==a.name.indexOf(".")&&a.field.relation&&(g.children={})}.bind(this))}.bind(this))},children_expand:function(a){var b=jQuery.Deferred();return jQuery.isEmptyObject(a.children)?this.get_fields(a.relation).done(function(c){this.model_populate(c,a.children,a.path+"/",a.long_string+"/"),b.resolve(this)}.bind(this)):b.resolve(this),b.promise()},sig_sel_add:function(a){a=jQuery(a);var b=a.attr("path");this.sel_field(b)},fill_predefwin:function(){Sao.rpc({method:"model.ir.export.search",params:[["resource","=",this.screen.model_name],{}]},this.session).done(function(a){Sao.rpc({method:"model.ir.export.read",params:[a,{}]},this.session).done(function(a){var b=[];a.forEach(function(a){for(var c=0;c<a.export_fields.length;b.push(a.export_fields[c++]));}),Sao.rpc({method:"model.ir.export.line.read",params:[b,{}]},this.session).done(function(b){var c={};b.forEach(function(a){c[a.export]=c[a.export]||[],c[a.export].push(a)}),a.forEach(function(a){this.predef_exports[a.id]=c[a.id].map(function(b){if(b.export==a.id)return b.name}),this.add_to_predef(a.id,a.name)}.bind(this)),this.predef_exports_list.children("li").first().focus()}.bind(this))}.bind(this))}.bind(this))},add_to_predef:function(a,b){var c=jQuery("<li/>",{text:b,export_id:a,tabindex:0}).on("keypress",function(a){var b=a.keyCode?a.keyCode:a.which;13!=b&&32!=b||c.click()}).click(function(a){c.addClass("bg-primary").siblings().removeClass("bg-primary"),this.sel_predef(jQuery(a.target).attr("export_id"))}.bind(this));this.predef_exports_list.append(c)},addreplace_predef:function(){for(var a=[],b=this.fields_selected.children("li"),c=0;c<b.length;c++)a.push(b[c].getAttribute("path"));if(0!==a.length){var d,e,f=this.predef_exports_list.children("li.bg-primary");0===f.length?(d=null,Sao.common.ask.run(Sao.i18n.gettext("What is the name of this export?")).then(function(b){b&&this.save_predef(b,a,f)}.bind(this))):(d=f.attr("export_id"),e=f.text(),Sao.common.sur.run(Sao.i18n.gettext("Override %1 definition?",e)).done(function(){this.save_predef(e,a,f),Sao.rpc({method:"model.ir.export.delete",params:[[d],{}]},this.session).then(function(){delete this.predef_exports[d]}.bind(this))}.bind(this)))}},save_predef:function(a,b,c){Sao.rpc({method:"model.ir.export.create",params:[[{name:a,resource:this.screen.model_name,export_fields:[["create",b.map(function(a){return{name:a}})]]}],{}]},this.session).then(function(d){this.predef_exports[d]=b,0===c.length?this.add_to_predef(d,a):(this.predef_exports[d]=b,c.attr("export_id",d))}.bind(this))},remove_predef:function(){var a=this.predef_exports_list.children("li.bg-primary");if(0!==a.length){var b=jQuery(a).attr("export_id");Sao.rpc({method:"model.ir.export.delete",params:[[b],{}]},this.session).then(function(){delete this.predef_exports[b],a.remove()}.bind(this))}},sel_predef:function(a){this.fields_selected.empty(),this.predef_exports[a].forEach(function(a){if(!(a in this.fields)){var b=this.fields_model,c=a.split("/");this.traverse(b,"",c,0)}a in this.fields&&this.sel_field(a)}.bind(this))},traverse:function(a,b,c,d){function e(e){a=f.children,b+=c[d]+"/",e.traverse(a,b,c,++d)}if(d>=c.length-1)return void this.sel_field(c.join("/"));var f,g,h=Object.keys(a);for(g=0;g<h.length;g++)if(f=a[h[g]],f.path==b+c[d]){this.children_expand(f).done(e);break}return g==h.length?void this.sel_field(c.join("/")):void 0},sel_field:function(a){var b=this.fields[a].long_string;if(!this.fields[a].relation)var c=jQuery("<li/>",{path:a}).text(b).click(function(a){a.ctrlKey?c.toggleClass("bg-primary"):jQuery(a.target).addClass("bg-primary").siblings().removeClass("bg-primary")}).appendTo(this.fields_selected)},response:function(a){if("RESPONSE_OK"==a){var b=[],c=[];this.fields_selected.children("li").each(function(a,d){b.push(d.getAttribute("path")),c.push(d.innerText)}),Sao.rpc({method:"model."+this.screen.model_name+".export_data",params:[this.ids,b,this.context]},this.session).then(function(a){this.export_csv(c,a).then(function(){this.destroy()}.bind(this))}.bind(this))}else this.destroy()},export_csv:function(a,b){var c=this.el_csv_encoding.val(),d={};d.data=b,this.el_add_field_names.is(":checked")&&(d.fields=a);var e=Papa.unparse(d,{quoteChar:this.el_csv_quotechar.val(),delimiter:this.el_csv_delimiter.val()});return Sao.common.download_file(e,this.name+".csv",{type:"text/csv;charset="+c}),Sao.common.message.run(Sao.i18n.ngettext("%1 record saved","%1 records saved",b.length))}})}(),function(){"use strict";Sao.Wizard=Sao.class_(Object,{init:function(a){this.widget=jQuery("<div/>",{class:"wizard"}),this.name=a||"",this.action_id=null,this.id=null,this.ids=null,this.action=null,this.context=null,this.states={},this.session_id=null,this.start_state=null,this.end_state=null,this.screen=null,this.screen_state=null,this.state=null,this.session=Sao.Session.current_session,this.__processing=!1,this.__waiting_response=!1,this.info_bar=new Sao.Window.InfoBar},run:function(a){this.action=a.action,this.action_id=a.data.action_id,this.id=a.data.id,this.ids=a.data.ids,this.model=a.data.model,this.context=jQuery.extend({},a.context),this.context.active_id=this.id,this.context.active_ids=this.ids,this.context.active_model=this.model,this.context.action_id=this.action_id,Sao.rpc({method:"wizard."+this.action+".create",params:[this.session.context]},this.session).then(function(a){this.session_id=a[0],this.start_state=this.state=a[1],this.end_state=a[2],this.process()}.bind(this),function(){this.destroy()}.bind(this))},process:function(){if(!this.__processing&&!this.__waiting_response){(function(){if(this.state==this.end_state)return void this.end();var a=jQuery.extend({},this.context),b={};this.screen&&(b[this.screen_state]=this.screen.get_on_change_value()),Sao.rpc({method:"wizard."+this.action+".execute",params:[this.session_id,b,this.state,a]},this.session).then(function(a){if(a.view){this.clean();var b=a.view;this.update(b.fields_view,b.buttons),this.screen.new_(!1).then(function(){this.screen.current_record.set_default(b.defaults),this.screen.set_cursor()}.bind(this)),this.screen_state=b.state,this.__waiting_response=!0}else this.state=this.end_state;var c=function(){a.actions&&a.actions.forEach(function(a){var b=jQuery.extend({},this.context);delete b.active_id,delete b.active_ids,delete b.active_model,delete b.action_id,Sao.Action.exec_action(a[0],a[1],b)}.bind(this))}.bind(this);this.state==this.end_state?this.end().then(c):c(),this.__processing=!1}.bind(this),function(a){this.__processing=!1}.bind(this))}).call(this)}},destroy:function(a){},end:function(){return Sao.rpc({method:"wizard."+this.action+".delete",params:[this.session_id,this.session.context]},this.session).then(function(a){this.destroy(a)}.bind(this))},clean:function(){this.widget.children().remove(),this.states={}},response:function(a){return this.__waiting_response=!1,this.screen.current_view.set_value(),this.screen.current_record.validate().then(function(b){if(!b&&a!=this.end_state)return this.screen.display(!0),void this.info_bar.message(this.screen.invalid_message(),"danger");this.info_bar.message(),this.state=a,this.process()}.bind(this))},_get_button:function(a){var b=new Sao.common.Button(a);return this.states[a.state]=b,a.default?b.el.addClass("btn-primary"):a.state==this.end_state&&b.el.addClass("btn-link"),b},update:function(a,b){b.forEach(function(a){this._get_button(a)}.bind(this)),this.screen=new Sao.Screen(a.model,{mode:[],context:this.context}),this.screen.add_view(a),this.screen.switch_view(),this.widget.append(this.screen.screen_container.el)}}),Sao.Wizard.create=function(a){var b;if(a.window){b=new Sao.Wizard.Form(a.name);var c=new Sao.Tab.Wizard(b);Sao.Tab.add(c)}else b=new Sao.Wizard.Dialog(a.name);b.run(a)},Sao.Wizard.Form=Sao.class_(Sao.Wizard,{init:function(a){Sao.Wizard.Form._super.init.call(this),this.tab=null,this.name=a||"",this.form=jQuery("<div/>",{class:"wizard-form"}).append(this.widget),this.footer=jQuery("<div/>",{class:"modal-footer"}).appendTo(this.form)},clean:function(){Sao.Wizard.Form._super.clean.call(this),this.footer.children().remove()},_get_button:function(a){var b=Sao.Wizard.Form._super._get_button.call(this,a);return this.footer.append(b.el),b.el.click(function(){this.response(a.state)}.bind(this)),b},destroy:function(a){switch(Sao.Wizard.Form._super.destroy.call(this,a),a){case"reload menu":Sao.Session.current_session.reload_context().then(function(){Sao.menu()});break;case"reload context":Sao.Session.current_session.reload_context()}},end:function(){return Sao.Wizard.Form._super.end.call(this).always(function(){return this.tab.close()}.bind(this))}}),Sao.Wizard.Dialog=Sao.class_(Sao.Wizard,{init:function(a){a||(a=Sao.i18n.gettext("Wizard")),Sao.Wizard.Dialog._super.init.call(this);var b=new Sao.Dialog(a,"wizard-dialog","md",!1);this.dialog=b.modal,this.content=b.content,this.footer=b.footer,this.dialog.on("keydown",function(a){a.which==Sao.common.ESC_KEYCODE&&(a.preventDefault(),this.end_state in this.states&&this.response(this.end_state))}.bind(this)),b.body.append(this.widget).append(this.info_bar.el)},clean:function(){Sao.Wizard.Dialog._super.clean.call(this),this.footer.children().remove()},_get_button:function(a){var b=Sao.Wizard.Dialog._super._get_button.call(this,a);return this.footer.append(b.el),a.default?(this.content.unbind("submit"),this.content.submit(function(b){this.response(a.state),
|
|
16
16
|
b.preventDefault()}.bind(this)),b.el.attr("type","submit")):b.el.click(function(){this.response(a.state)}.bind(this)),b},update:function(a,b){this.content.unbind("submit"),Sao.Wizard.Dialog._super.update.call(this,a,b),this.dialog.modal("show")},destroy:function(a){Sao.Wizard.Dialog._super.destroy.call(this,a);var b=function(){this.dialog.remove();var b,c=jQuery(".wizard-dialog").filter(":visible")[0],d=!1;if(c||(c=Sao.Tab.tabs.get_current()),c&&this.model&&Sao.main_menu_screen.model_name!=this.model?b=c.screen:(d=!0,b=Sao.main_menu_screen),b){var e=jQuery.when();if(b.current_record&&!d){var f;f=b.model_name==this.model?this.ids:[b.current_record.id],e=b.reload(f,!0)}a&&e.then(function(){b.client_action(a)})}}.bind(this);(this.dialog.data("bs.modal")||{}).isShown?(this.dialog.on("hidden.bs.modal",b),this.dialog.modal("hide")):b()},show:function(){this.dialog.modal("show")},hide:function(){this.dialog.modal("hide")},state_changed:function(){this.process()}})}(),function(){"use strict";Sao.View.Board=Sao.class_(Object,{init:function(a,b){var c,d,e,f;this.context=b,this.actions=[],this.el=jQuery("<div/>",{class:"board"}),c={},e=a.children()[0];for(var g=0,h=e.attributes.length;g<h;g++)d=e.attributes[g],c[d.name]=d.value;for(this.attributes=c,this.el.append(this.parse(e).el),f=[],g=0,h=this.actions.length;g<h;g++)f.push(this.actions[g].action_prm);this.actions_prms=jQuery.when.apply(jQuery,f)},_parse_node:function(a,b,c){switch(a.tagName){case"image":break;case"separator":this._parse_separator(a,b,c);break;case"label":this._parse_label(a,b,c);break;case"newline":b.add_row();break;case"notebook":this._parse_notebook(a,b,c);break;case"page":this._parse_page(a,b,c);break;case"group":this._parse_group(a,b,c);break;case"hpaned":this._parse_pane(a,b,c,"horizontal");break;case"vpaned":this._parse_pane(a,b,c,"vertical");break;case"child":this._parse_child(a,b,c);break;case"action":this._parse_action(a,b,c)}},parse:function(a,b){var c;return b||(b=new Sao.View.Form.Container(Number(a.getAttribute("col")||4))),c=function(a,c){var d,e,f,g;for(d={},f=0,g=c.attributes.length;f<g;f++)e=c.attributes[f],d[e.name]=e.value;["yexpand","yfill","xexpand","xfill","colspan","position"].forEach(function(a){d[a]&&(d[a]=Number(d[a]))}),this._parse_node(c,b,d)},jQuery(a).children().each(c.bind(this)),b},_parse_separator:function(a,b,c){var d,e;d=c.string,e=new Sao.view.Form.Separator(d,c),b.add(c,e)},_parse_label:function(a,b,c){var d,e;if(!(d=c.string))return void b.add(c);e=new Sao.View.Form.Label(d,c),b.add(c,e)},_parse_notebook:function(a,b,c){var d;void 0===c.yexpand&&(c.yexpand=!0),void 0===c.yfill&&(c.yfill=!0),d=new Sao.View.Form.Notebook(c),b.add(c,d),this.parse(a,b)},_parse_page:function(a,b,c){var d;d=c.string,page=this.parse(a,b),page=new Sao.View.Form.Page(b.add(page.el,d),c)},_parse_group:function(a,b,c){var d;d=new Sao.View.Form.Group(c),b.add(c,d)},_parse_pane:function(a,b,c,d){var e;void 0===c.yexpand&&(c.yexpand=!0),void 0===c.yfill&&(c.yfill=!0),e=new Sao.common.Paned(d),b.add(c,e),this.parse(a,e)},_parse_child:function(a,b,c){var d,e,f;d=this.parse(a),e=b.get_child1(),e.children().length>0?(f=b.get_child2(),f.append(d.el)):e.append(d.el)},_parse_action:function(a,b,c){var d;void 0===c.yexpand&&(c.yexpand=!0),void 0===c.yfill&&(c.yfill=!0),d=new Sao.View.Board.Action(c,this.context),this.actions.push(d),b.add(c,d)},reload:function(){for(var a=0;a<this.actions.length;a++)this.actions[a].display()}}),Sao.View.Board.Action=Sao.class_(Object,{init:function(a,b){void 0===b&&(b={});var c,d;this.name=a.name,this.context=jQuery.extend({},b),c=new Sao.Model("ir.action.act_window"),this.action_prm=c.execute("get",[this.name],this.context),this.action_prm.done(function(b){var c,e,f,g,h,i;if(this.action=b,this.action.mode=[],f=[],(this.action.views||[]).length>0)for(c=0,e=this.action.views.length;c<e;c++)f.push(this.action.views[c][0]),this.action.mode.push(this.action.views[c][1]);else void 0!==this.action.view_id&&(f=[this.action.view_id[0]]);"mode"in a&&(this.action.mode=a.mode),"pyson_domain"in this.action||(this.action.pyson_domain="[]"),jQuery.extend(this.context,Sao.Session.current_session.context),this.context._user=Sao.Session.current_session.user_id,g=new Sao.PYSON.Decoder(this.context),jQuery.extend(this.context,g.decode(this.action.pyson_context||"{}")),g=new Sao.PYSON.Decoder(this.context),jQuery.extend(this.context,g.decode(this.action.pyson_context||"{}")),this.domain=[],this.update_domain([]),h=jQuery.extend({},this.context),h.context=this.context,h._user=Sao.Session.current_session.user_id,g=new Sao.PYSON.Decoder(h),d=g.decode(this.action.pyson_search_value||"[]"),i={mode:this.action.mode,context:this.context,view_ids:f,domain:this.domain,search_value:d,row_activate:this.row_activate.bind(this)},this.screen=new Sao.Screen(this.action.res_model,i),a.string?this.title.html(a.string):this.title.html(this.action.name),this.screen.switch_view().done(function(){this.body.append(this.screen.screen_container.el),this.screen.search_filter()}.bind(this))}.bind(this)),this.el=jQuery("<div/>",{class:"board-action panel panel-default"}),this.title=jQuery("<div/>",{class:"panel-heading"}),this.el.append(this.title),this.body=jQuery("<div/>",{class:"panel-body"}),this.el.append(this.body)},row_activate:function(){var a;this.screen.current_record&&("tree"==this.screen.current_view.view_type&&1==this.screen.current_view.attributes.keyword_open?(a=this.screen.current_view.selected_records().map(function(a){return a.id}),Sao.Action.exec_keyword("tree_open",{model:this.screen.model_name,id:this.screen.current_record.id,ids:a},jQuery.extend({},this.screen.group._context),!1)):new Sao.Window.Form(this.screen,function(a){a?this.screen.current_record.save():this.screen.current_record.cancel()}.bind(this)))},set_value:function(){},display:function(){this.screen.search_filter(this.screen.screen_container.get_text())},get_active:function(){if(this.screen&&this.screen.current_record)return Sao.common.EvalEnvironment(this.screen.current_record)},update_domain:function(a){var b,c,d,e,f,g;for(e=jQuery.extend({},this.context),e.context=e,e._user=Sao.Session.current_session.user_id,b=0,c=a.length;b<c;b++)(d=a[b].get_active())&&(e[a[b].name]=d);f=new Sao.PYSON.Decoder(e),g=f.decode(this.action.pyson_domain),Sao.common.compare(this.domain,g)||(this.domain.splice(0,this.domain.length),jQuery.extend(this.domain,g),this.screen&&this.display())}})}(),function(){"use strict";Sao.Bus={},Sao.Bus.id=Sao.common.uuid4(),Sao.Bus.channels=["client:"+Sao.Bus.id],Sao.Bus.listen=function(a,b){b=b||1;var c=Sao.Session.current_session;if(c){var d=jQuery.ajax({headers:{Authorization:"Session "+c.get_auth()},contentType:"application/json",data:JSON.stringify({last_message:a,channels:Sao.Bus.channels}),dataType:"json",url:"/"+c.database+"/bus",type:"POST",timeout:Sao.config.bus_timeout});d.done(function(b){Sao.Session.current_session==c&&(b.message&&(a=b.message.message_id,Sao.Bus.handle(b.message)),Sao.Bus.listen(a,1))}),d.fail(function(d,e,f){if(Sao.Session.current_session==c)if("timeout"===f)Sao.Bus.listen(a,1);else{if(501==d.status)return void console.log("Bus not supported");window.setTimeout(Sao.Bus.listen,Math.min(1e3*b,Sao.config.bus_timeout),a,2*b)}})}},Sao.Bus.handle=function(a){var b=function(a){try{if("granted"!=Notification.permission)return}catch(b){return void(console.error||console.log).call(console,b,b.stack)}new Notification(a.title,{body:a.body||""})};switch(a.type){case"notification":b(a)}}}(),function(){"use strict";var a={B:!0,BODY:!0,BR:!0,DIV:!0,FONT:!0,I:!0,U:!0},b={align:!0,color:!0,face:!0,size:!0};Sao.HtmlSanitizer={},Sao.HtmlSanitizer.sanitize=function(c){function d(c){var e;if(c.nodeType==Node.TEXT_NODE)e=c.cloneNode(!0);else if(c.nodeType==Node.ELEMENT_NODE&&a[c.tagName]){if("BR"!=c.tagName&&""===c.innerHTML.trim())return document.createDocumentFragment();e=f.createElement(c.tagName);for(var g=0;g<c.attributes.length;g++){var h=c.attributes[g];b[h.name]&&e.setAttribute(h.name,h.value)}for(g=0;g<c.childNodes.length;g++){var i=d(c.childNodes[g]);e.appendChild(i,!1)}}else e=document.createDocumentFragment();return e}if(""===(c=c.trim()))return"";if("<br>"==c)return"";var e=document.createElement("iframe");if(void 0===e.sandbox)return console.warn("Your browser do not support sandboxed iframes, unable to sanitize HTML."),c;e.sandbox="allow-same-origin",e.style.display="none",document.body.appendChild(e);var f=e.contentDocument||e.contentWindow.document;null===f.body&&f.write("<body></body>"),f.body.innerHTML=c;var g=d(f.body);return document.body.removeChild(e),g.innerHTML.replace(/<br[^>]*>(\S)/g,"<br>\n$1").replace(/div><div/g,"div>\n<div")}}();
|
package/package.json
CHANGED
package/src/common.js
CHANGED
|
@@ -1804,7 +1804,7 @@
|
|
|
1804
1804
|
},
|
|
1805
1805
|
default_operator: function(field) {
|
|
1806
1806
|
if (~['char', 'text', 'many2one', 'many2many', 'one2many',
|
|
1807
|
-
'reference'].indexOf(field.type)) {
|
|
1807
|
+
'reference', 'one2one'].indexOf(field.type)) {
|
|
1808
1808
|
return 'ilike';
|
|
1809
1809
|
} else {
|
|
1810
1810
|
return '=';
|