tryton-sao 6.0.21 → 6.0.22
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 +14 -18
- package/dist/tryton-sao.min.js +2 -2
- package/package.json +1 -1
- package/src/common.js +1 -1
- package/src/sao.js +2 -2
- package/src/tab.js +6 -9
- package/src/view/form.js +5 -6
- package/tests/sao.js +16 -6
package/dist/tryton-sao.min.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! tryton-sao-6.0.
|
|
1
|
+
/*! tryton-sao-6.0.22 | 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
|
|
|
5
|
-
var Sao={};function eval_pyson(value){with(Sao.PYSON.eval)return eval("("+value+")")}!function(){"use strict";"contains"in String.prototype||(String.prototype.contains=function(e,t){return-1!==String.prototype.indexOf.call(this,e,t)}),String.prototype.startsWith||Object.defineProperty(String.prototype,"startsWith",{enumerable:!1,configurable:!1,writable:!1,value:function(e,t){return this.indexOf(e,t=t||0)===t}}),String.prototype.endsWith||Object.defineProperty(String.prototype,"endsWith",{enumerable:!1,configurable:!1,writable:!1,value:function(e,t){t=t||this.length,t-=e.length;e=this.lastIndexOf(e);return-1!==e&&e===t}}),String.prototype.padEnd||(String.prototype.padEnd=function(e,t){return e>>=0,t=String(void 0!==t?t:" "),this.length>e?String(this):((e-=this.length)>t.length&&(t+=t.repeat(e/t.length)),String(this)+t.slice(0,e))}),String.prototype.padStart||(String.prototype.padStart=function(e,t){return e>>=0,t=String(void 0!==t?t:" "),this.length>e?String(this):((e-=this.length)>t.length&&(t+=t.repeat(e/t.length)),t.slice(0,e)+String(this))}),Array.prototype.some||(Array.prototype.some=function(e){if(null===this)throw new TypeError;var t,i,n=Object(this),o=n.length>>>0;if("function"!=typeof e)throw new TypeError;for(t=arguments[1],i=0;i<o;i++)if(i in n&&e.call(t,n[i],i,n))return!0;return!1}),Array.from||(Array.from=function(e){var t=[];return e.forEach(function(e){t.push(e)}),t}),Sao.setdefault=function(e,t,i){return e.hasOwnProperty(t)||(e[t]=i),e[t]};try{document.execCommand("styleWithCSS",!1,!1)}catch(e){}try{document.execCommand("useCSS",!1,!0)}catch(e){}var e;jQuery.fn.extend({uniqueId:(e=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})})}),window.onbeforeunload=function(e){if(Sao.main_menu_screen&&Sao.main_menu_screen.save_tree_state(!0),Sao.Tab.tabs.length){var t=Sao.i18n.gettext("Are your sure to leave?");return e.returnValue=t}},Sao.class_=function(e,t){var i=function(){if(!(this instanceof i))throw new Error("Constructor function requires new operator");this.Class=i,this.init&&this.init.apply(this,arguments)};if(i.prototype=Object.create(e.prototype),i._super=e.prototype,t)for(var n in t)Object.defineProperty(i.prototype,n,Object.getOwnPropertyDescriptor(t,n));function o(e){return i.apply(this,e)}return o.prototype=i.prototype,i.new_=function(e){return new o(e)},i},Sao.Decimal=Number;var t=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"):t.call(this)},Sao.Date=function(e,t,i){var n;return void 0===t?(n=moment(e),e=void 0):n=moment(),n.year(e),n.month(t),n.date(i),n.set({hour:0,minute:0,second:0,millisecond:0}),n.isDate=!0,n},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(e,t,i,n,o,s,r,a){var c;return void 0===t?(c=moment(e),e=void 0):(void 0===n&&(n=0),void 0===o&&(o=0),void 0===s&&(s=0),void 0===r&&(r=0),c=moment()),a&&c.utc(),c.year(e),c.month(t),c.date(i),void 0!==t&&(c.hour(n),c.minute(o),c.second(s),c.milliseconds(r)),c.isDateTime=!0,c.local(),c.todate=function(){return Sao.Date(this.year(),this.month(),this.date())},c.totime=function(){return Sao.Time(this.hour(),this.minute(),this.second(),this.millisecond())},c},Sao.DateTime.combine=function(e,t){return Sao.DateTime(e.year(),e.month(),e.date(),t.hour(),t.minute(),t.second(),t.millisecond())},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(e,t,i,n){n=moment({hour:e,minute:t,second:i,millisecond:n||0});return n.isTime=!0,n},Sao.TimeDelta=function(e,t,i,n,o,s){s=moment.duration({days:e,seconds:t,milliseconds:i,minutes:n,hours:o,weeks:s});return s.isTimeDelta=!0,s},Sao.config={},Sao.config.limit=1e3,Sao.config.display_size=20,Sao.config.bug_url="https://bugs.tryton.org/",Sao.config.title="Tryton",Sao.config.icon_colors="#267f82,#3e4950,#e78e42".split(","),Sao.config.calendar_colors="#fff,#267f82".split(","),Sao.config.graph_color="#267f82",Sao.config.bus_timeout=6e5,Sao.i18n=i18n(),Sao.i18n.setlang=function(i){return i=i||(navigator.language||navigator.browserLanguage||navigator.userLanguage||"en").replace("-","_"),jQuery("html").attr("lang",i),Sao.i18n.setLocale(i),moment.locale(i.slice(0,2)),jQuery.getJSON("locale/"+i+".json").then(function(e){for(var t in e[""].language||(e[""].language=i),e[""]["plural-forms"]||(e[""]["plural-forms"]="nplurals=2; plural=(n!=1);"),e)""!==t&&(e[t]=2==e[t].length?e[t][1]:e[t].slice(1));Sao.i18n.loadJSON(e)},function(){if(~i.indexOf("_"))return Sao.i18n.setlang(i.split("_").slice(0,-1).join("_"))})},Sao.i18n.getlang=function(){return Sao.i18n.getLocale()},Sao.i18n.BC47=function(e){return e.replace("_","-")},Sao.i18n.set_direction=function(e){Sao.i18n.rtl="rtl"===e,jQuery("html").attr("dir",e),jQuery(".row-offcanvas").removeClass("row-offcanvas-left row-offcanvas-right").addClass(Sao.i18n.rtl?"row-offcanvas-right":"row-offcanvas-left")},Sao.i18n.locale={},Sao.BOM_UTF8="\ufeff",Sao.get_preferences=function(){var e=Sao.Session.current_session;return e.reload_context().then(function(){return Sao.rpc({method:"model.res.user.get_preferences",params:[!1,{}]},e).then(function(i){var e=[];return e.push(Sao.common.MODELACCESS.load_models()),e.push(Sao.common.ICONFACTORY.load_icons()),e.push(Sao.common.MODELHISTORY.load_history()),e.push(Sao.common.VIEW_SEARCH.load_searches()),jQuery.when.apply(jQuery,e).then(function(){(i.actions||[]).forEach(function(e){Sao.Action.execute(e,{},null,{})}),Sao.set_title();var e=i.language!=Sao.i18n.getLocale(),t=jQuery.Deferred();return Sao.i18n.setlang(i.language).always(function(){e&&Sao.user_menu(i),t.resolve(i)}),Sao.i18n.set_direction(i.language_direction),Sao.i18n.locale=i.locale,Sao.common.MODELNAME.clear(),t})})})},Sao.set_title=function(e){e=[e,Sao.config.title];document.title=e.filter(function(e){return e}).join(" - "),jQuery("#title").text(Sao.config.title)},Sao.set_url=function(e,t){var i=Sao.Session.current_session;i&&(i="#"+i.database,e&&(i+="/"+e),window.location=i),Sao.set_title(t)},window.onhashchange=function(){var e=Sao.Session.current_session;if(e){var t,e="#"+e.database;if(window.location.hash==e)i="";else{if(!window.location.hash.startsWith(e+"/"))return;i=window.location.hash.substr(e.length+1)}if(i){for(var i=decodeURIComponent(i),n=0;n<Sao.Tab.tabs.length;n++)if(t=Sao.Tab.tabs[n],decodeURIComponent(t.get_url())==i)return void t.show();Sao.open_url()}else(t=Sao.Tab.tabs.get_current())&&Sao.set_url(t.get_url(),t.name)}},Sao.open_url=function(e){function i(e){return Sao.rpc.convertJSONObject(jQuery.parseJSON(e))}var t,n=(e=void 0===e?window.location.hash.substr(1):e).indexOf(";"),o={};switch(0<=n?(t=e.substring(0,n),e.substring(n+1).split("&").forEach(function(e){e&&(e=e.split("=").map(decodeURIComponent),o[e[0]]=e[1])})):t=e,(t=t.split("/").slice(1)).shift()){case"model":!function(e){var t={};if(t.model=e.shift(),t.model){try{t.view_ids=i(o.views||"[]"),t.limit=i(o.limi||"null"),t.name=i(o.name||'""'),t.search_value=i(o.search_value||"[]"),t.domain=i(o.domain||"[]"),t.context=i(o.context||"{}"),t.context_model=o.context_model,t.tab_domain=i(o.tab_domain||"[]")}catch(e){return}e=e.shift();if(e){if(e=Number(e),isNaN(e))return;t.res_id=e,t.mode=["form","tree"]}try{Sao.Tab.create(t)}catch(e){return}}}(t);break;case"wizard":!function(e){var t={};if(t.name=e[0],t.name){try{t.data=i(o.data||"{}"),t.direct_print=i(o.direct_print||"false"),t.name=i(o.name||'""'),t.window=i(o.window||"false"),t.context=i(o.context||"{}")}catch(e){return}try{Sao.Wizard.create(t)}catch(e){return}}}(t);break;case"report":!function(e){var t={};if(t.name=e[0],t.name){try{t.data=i(o.data||"{}"),t.direct_print=i(o.direct_print||"false"),t.context=i(o.context||"{}")}catch(e){return}try{Sao.Action.exec_report(t)}catch(e){return}}}(t);break;case"url":!function(){var e;try{e=i(o.url||"false")}catch(e){return}e&&window.open(e,"_blank","noreferrer,noopener")}()}},Sao.login=function(){Sao.set_title(),Sao.i18n.setlang().always(function(){Sao.Session.get_credentials().then(function(e){return(Sao.Session.current_session=e).reload_context()}).then(Sao.get_preferences).then(function(e){Sao.menu(e),Sao.user_menu(e),Sao.open_url(),Sao.Bus.listen()})})},Sao.logout=function(){var e=Sao.Session.current_session;Sao.Tab.tabs.close(!0).done(function(){jQuery("#user-preferences").empty(),jQuery("#user-favorites").empty(),jQuery("#global-search").empty(),jQuery("#menu").empty(),e.do_logout().always(Sao.login),Sao.set_title()})},Sao.preferences=function(){Sao.Tab.tabs.close(!0).done(function(){jQuery("#user-preferences").empty(),jQuery("#user-favorites").empty(),jQuery("#menu").empty(),new Sao.Window.Preferences(function(){Sao.Session.current_session.reset_context(),Sao.get_preferences().then(function(e){Sao.menu(e),Sao.user_menu(e)})})})},Sao.favorites_menu=function(){var e,t,s;jQuery(window).click(function(){Sao.favorites_menu_clear()}),jQuery("#user-favorites").children(".dropdown-menu").length||(t=Sao.main_menu_screen.model_name+".favorite",e=Sao.Session.current_session,t={method:"model."+t+".get"},s=jQuery("<ul/>",{class:"dropdown-menu","aria-expanded":"false","aria-labelledby":"user-favorites"}),jQuery("#user-favorites").append(s),Sao.rpc(t,e).then(function(e){e.forEach(function(e){var t=jQuery("<a/>",{href:"#"}),i=e[0],n=jQuery("<li/>",{role:"presentation"}),o=Sao.common.ICONFACTORY.get_icon_img(e[2],{class:"favorite-icon"});t.append(o),n.append(t),t.append(e[1]),t.click(function(e){e.preventDefault(),Sao.favorites_menu_clear(),Sao.Action.exec_keyword("tree_open",{model:Sao.main_menu_screen.model_name,id:i})}),s.append(n)}),s.append(jQuery("<li/>",{class:"divider"})),jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{href:"#"}).click(function(e){e.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(s)}))},Sao.favorites_menu_clear=function(){jQuery("#user-favorites").children(".dropdown-menu").remove()},Sao.user_menu=function(e){jQuery("#user-preferences").empty(),jQuery("#user-favorites").empty();var t=jQuery("<a/>",{href:"#",title:e.status_bar}).click(function(e){e.preventDefault(),Sao.preferences()}).text(e.status_bar);jQuery("#user-preferences").append(t),e.avatar_badge_url&&t.prepend(jQuery("<img/>",{src:e.avatar_badge_url+"?s=15",class:"img-circle img-badge"})),e.avatar_url&&t.prepend(jQuery("<img/>",{src:e.avatar_url+"?s=30",class:"img-circle"}));e=Sao.i18n.gettext("Logout");jQuery("#user-logout > a").attr("title",e).attr("aria-label",e).off().click(Sao.logout).find("span:not(.icon)").text(e)},Sao.main_menu_row_activate=function(){var e=Sao.main_menu_screen;return Sao.Action.exec_keyword("tree_open",{model:e.model_name,id:e.get_id()},null,!1)},Sao.menu=function(e){var t,i,n,o;e?(t=(i=new Sao.PYSON.Decoder).decode(e.pyson_menu),e=!1,jQuery.isEmptyObject(t.views)?t.view_id&&(e=[t.view_id[0]]):e=t.views.map(function(e){return e[0]}),o=(i=new Sao.PYSON.Decoder(Sao.Session.current_session.context)).decode(t.pyson_context||"{}"),i=i.decode(t.pyson_domain),n=new Sao.Tab.Form(t.res_model,{mode:["tree"],view_ids:e,domain:i,context:o,selection_mode:Sao.common.SELECTION_NONE,limit:null,row_activate:Sao.main_menu_row_activate}),Sao.main_menu_screen=n.screen,Sao.main_menu_screen.switch_callback=null,Sao.Tab.tabs.splice(Sao.Tab.tabs.indexOf(n),1),n.view_prm.done(function(){var e=n.screen.current_view;e.table.removeClass("table table-bordered table-striped"),e.table.addClass("no-responsive"),e.table.find("thead").hide();e=new Sao.GlobalSearch;jQuery("#global-search").empty(),jQuery("#global-search").append(e.el),jQuery("#menu").empty(),jQuery("#menu").append(n.screen.screen_container.content_box.detach());e=new s(n.screen.model.fields.favorite);n.screen.views[0].table.find("> colgroup").append(e.col),n.screen.views[0].table.find("> thead > tr").append(e.header),n.screen.views[0].columns.push(e)})):(o=Sao.Session.current_session,Sao.rpc({method:"model.res.user.get_preferences",params:[!1,{}]},o).then(Sao.menu))},Sao.main_menu_screen=null;var s=Sao.class_(Object,{init:function(e){this.field=e,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(t,i){return i=i||this.get_cell(),t.load(this.field.name).done(function(){var e;null!==t._values.favorite&&(e="tryton-star",t._values.favorite||(e+="-border"),i.data("star",Boolean(t._values.favorite)),Sao.common.ICONFACTORY.get_icon_url(e).then(function(e){i.attr("src",e)}),i.click({record:t,button:i},this.favorite_click))}.bind(this)),i},favorite_click:function(e){e.stopImmediatePropagation();var t=e.data.button,i=t.data("star"),n=i?(o="tryton-star-border","unset"):(o="tryton-star","set");t.data("star",!i),Sao.common.ICONFACTORY.get_icon_url(o).then(function(e){t.attr("src",e)});var i=Sao.main_menu_screen.model_name+".favorite",o=Sao.Session.current_session,e={method:"model."+i+"."+n,params:[e.data.record.id,o.context]};Sao.rpc(e,o),Sao.favorites_menu_clear()}});function i(){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+shift+e",label:Sao.i18n.gettext("E-Mail"),id:"email"},{shortcut:"alt+shift+tab",label:Sao.i18n.gettext("Previous tab"),callback:function(){Sao.Tab.previous_tab()}},{shortcut:"alt+tab",label:Sao.i18n.gettext("Next tab"),callback:function(){Sao.Tab.next_tab()}},{shortcut:"ctrl+k",label:Sao.i18n.gettext("Global search"),callback:function(){jQuery("#main_navbar:hidden").collapse("show"),jQuery("#global-search-entry").focus()}},{shortcut:"f1",label:Sao.i18n.gettext("Show this help"),callback:function(){!function(){var e=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(e.header);var t=jQuery("<div/>",{class:"row"}).appendTo(e.body),n=jQuery("<dl/>",{class:"dl-horizontal col-md-6"}).append(jQuery("<h5/>").text(Sao.i18n.gettext("Global shortcuts"))).appendTo(t),o=jQuery("<dl/>",{class:"dl-horizontal col-md-6"}).append(jQuery("<h5/>").text(Sao.i18n.gettext("Tab shortcuts"))).appendTo(t);i().forEach(function(e){var t=jQuery("<dt/>").text(e.label),i=jQuery("<dd/>").append(jQuery("<kbd>").text(e.shortcut)),e=e.id?o:n;t.appendTo(e),i.appendTo(e)}),e.modal.on("hidden.bs.modal",function(){jQuery(this).remove()}),e.modal.modal("show")}()}}]}function n(){var i=1040;jQuery(".modal.in").each(function(e){var t=jQuery(this);i++,t.css("zIndex",i),t.next(".modal-backdrop.in").addClass("hidden").css("zIndex",i-1)}),jQuery(".modal.in:visible:last").focus().next(".modal-backdrop.in").removeClass("hidden")}Sao.Dialog=Sao.class_(Object,{init:function(e,t,i,n){i=i||"sm",void 0===n&&(n=!0),this.modal=jQuery("<div/>",{class:t+" modal fade",role:"dialog","data-backdrop":"static","data-keyboard":n}),this.content=jQuery("<form/>",{class:"modal-content"}).appendTo(jQuery("<div/>",{class:"modal-dialog modal-"+i}).appendTo(this.modal)),this.header=jQuery("<div/>",{class:"modal-header"}).appendTo(this.content),e&&this.add_title(e),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(){0<jQuery(document.activeElement).closest(this.el)||jQuery(this).find(':input:visible:not([readonly]):not([tabindex^="-"]):first').focus()})},add_title:function(e){this.header.append(jQuery("<h4/>",{class:"modal-title",title:e}).text(Sao.common.ellipsize(e,120)))}}),Sao.GlobalSearch=Sao.class_(Object,{init:function(){this.el=jQuery("<div/>",{class:"global-search-container"});var e=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(e),this.search_entry=jQuery("<input>",{id:"global-search-entry",class:"form-control mousetrap",placeholder:Sao.i18n.gettext("Action")}).appendTo(e);var t=new Sao.common.InputCompletion(this.el,this.update.bind(this),this.match_selected.bind(this),this.format.bind(this));t.input.keydown(function(e){e.which==Sao.common.RETURN_KEYCODE&&(t.dropdown.hasClass("open")||(e.preventDefault(),t.menu.dropdown("toggle")))})},format:function(e){var t=jQuery("<div/>");return Sao.common.ICONFACTORY.get_icon_img(e.icon,{class:"global_search-icon"}).appendTo(t),jQuery("<span/>",{class:"global-search-text"}).text(e.record_name).appendTo(t),t},update:function(e){var t=new Sao.Model("ir.model");return e?t.execute("global_search",[e,Sao.config.limit,Sao.main_menu_screen.model_name],Sao.main_menu_screen.context).then(function(e){for(var t=[],i=0,n=e.length;i<n;i++)t.push({model:e[i][1],model_name:e[i][2],record_id:e[i][3],record_name:e[i][4],icon:e[i][5]});return t}.bind(this)):jQuery.when([])},match_selected:function(e){e.model==Sao.main_menu_screen.model_name?Sao.Action.exec_keyword("tree_open",{model:e.model,id:e.record_id}):(e={model:e.model,res_id:e.record_id,mode:["form","tree"],name:e.model_name},Sao.Tab.create(e)),this.search_entry.val("")}}),jQuery(document).ready(function(){"undefined"!=typeof Mousetrap&&i().forEach(function(i){Mousetrap.bind(i.shortcut,function(){var e,t;return i.id?(e=Sao.Tab.tabs.get_current())&&((t=$(":focus")).blur(),e.el.find('a[id="'+i.id+'"]').click(),t.focus()):i.callback&&jQuery.when().then(i.callback),!1})});try{Notification.requestPermission()}catch(e){(console.error||console.log).call(console,e,e.stack)}Sao.login()}),Sao.Plugins=[],jQuery(document).on("show.bs.modal",".modal",function(e){jQuery(this).appendTo(jQuery("body"))}).on("shown.bs.modal",".modal.in",function(e){n()}).on("hidden.bs.modal",".modal",function(e){n(),jQuery(".modal:visible").length&&$(document.body).addClass("modal-open")}),jQuery(document).on("keydown","textarea",function(e){var t;"PageUp"!==e.key&&"PageDown"!==e.key||(t="PageUp"===e.key?0:e.target.textLength,e.preventDefault(),e.target.setSelectionRange(t,t))})}(),function(){"use strict";Sao.rpc=function(c,l,d){var h,u=jQuery.Deferred();l=l||new Sao.Session,void 0===d&&(d=!0);var _=jQuery.extend([],c.params);if(_.push(jQuery.extend({},l.context,_.pop())),l.cache&&l.cache.cached(c.method)&&void 0!==(h=l.cache.get(c.method,JSON.stringify(Sao.rpc.prepareObject(_)))))return d?jQuery.when(h):h;var e=Sao.common.processing.show();if(jQuery.ajax({async:d,headers:{Authorization:"Session "+l.get_auth()},contentType:"application/json",data:JSON.stringify(Sao.rpc.prepareObject({id:Sao.rpc.id++,method:c.method,params:_})),dataType:"json",url:"/"+(l.database||"")+"/",type:"post",complete:[function(){Sao.common.processing.hide(e)}],success:function(e,t,i){var n,o,s,r,a;null===e?Sao.common.warning.run("",Sao.i18n.gettext("Unable to reach the server.")).always(u.reject):e.error?"UserWarning"==e.error[0]?(n=e.error[1][0],a=e.error[1][1],o=e.error[1][2],Sao.common.userwarning.run(o,a).then(function(e){~["always","ok"].indexOf(e)?Sao.rpc({method:"model.res.user.warning.create",params:[[{user:l.user_id,name:n,always:"always"==e}],{}]},l).done(function(){d?Sao.rpc(c,l).then(u.resolve,u.reject):u.resolve()}):u.reject()},u.reject)):"UserError"==e.error[0]?(a=e.error[1][0],o=e.error[1][1],s=e.error[1][2],jQuery.isEmptyObject(s)||(r=s[1],s=s[0],(r=new Sao.common.DomainParser(r)).stringable(s)&&(o+="\n"+r.string(s))),Sao.common.warning.run(o,a).always(u.reject)):"ConcurrencyException"==e.error[0]?d&&c.method.startsWith("model.")&&(c.method.endsWith(".write")||c.method.endsWith(".delete"))&&1==c.params[0].length?(a=c.method.split(".").slice(1,-1).join("."),Sao.common.concurrency.run(a,c.params[0][0],c.params.slice(-1)[0]).then(function(){delete c.params.slice(-1)[0]._timestamp,Sao.rpc(c,l).then(u.resolve,u.reject)},u.reject)):Sao.common.message.run("Concurrency Exception","tryton-warning").always(u.reject):Sao.common.error.run(e.error[0],e.error[1]).always(u.reject):(h=e.result,!l.cache||(i=i.getResponseHeader("X-Tryton-Cache"))&&(i=parseInt(i,10),l.cache.set(c.method,JSON.stringify(Sao.rpc.prepareObject(_)),i,h)),u.resolve(h))},error:function(e,t,i){401==e.status?Sao.Session.renew(l).then(function(){d?Sao.rpc(c,l).then(u.resolve,u.reject):u.resolve()},u.reject):(429==e.status?Sao.common.message.run(Sao.i18n.gettext("Too many requests. Try again later."),"tryton-error"):Sao.common.error.run(t,i)).always(u.reject)}}),d)return u.promise();if(void 0===h)throw u;return h},Sao.rpc.id=0,Sao.rpc.convertJSONObject=function(e,t,i){if(e instanceof Array)for(var n=0,o=e.length;n<o;n++)Sao.rpc.convertJSONObject(e[n],n,e);else if("string"!=typeof e&&"number"!=typeof e&&null!==e)if(e&&e.__class__){switch(e.__class__){case"datetime":e=Sao.DateTime(e.year,e.month-1,e.day,e.hour,e.minute,e.second,Math.ceil(e.microsecond/1e3),!0);break;case"date":e=Sao.Date(e.year,e.month-1,e.day);break;case"time":e=Sao.Time(e.hour,e.minute,e.second,Math.ceil(e.microsecond/1e3));break;case"timedelta":e=Sao.TimeDelta(null,e.seconds);break;case"bytes":for(var s=atob(e.base64.replace(/\s/g,"")),r=new ArrayBuffer(s.length),a=new Uint8Array(r),c=0;c<s.length;c++)a[c]=s.charCodeAt(c);e=a;break;case"Decimal":e=new Sao.Decimal(e.decimal)}i&&(i[t]=e)}else for(var l in e)Sao.rpc.convertJSONObject(e[l],l,e);return i||e},Sao.rpc.prepareObject=function(e,t,i){if(e instanceof Array)for(var n=0,o=(e=jQuery.extend([],e)).length;n<o;n++)Sao.rpc.prepareObject(e[n],n,e);else if("string"!=typeof e&&"number"!=typeof e&&"boolean"!=typeof e&&null!=e)if(e.isDate)e={__class__:"date",year:e.year(),month:e.month()+1,day:e.date()};else if(e.isDateTime)e={__class__:"datetime",year:(e=e.clone()).utc().year(),month:e.utc().month()+1,day:e.utc().date(),hour:e.utc().hour(),minute:e.utc().minute(),second:e.utc().second(),microsecond:1e3*e.utc().millisecond()};else if(e.isTime)e={__class__:"time",hour:e.hour(),minute:e.minute(),second:e.second(),microsecond:1e3*e.millisecond()};else if(e.isTimeDelta)e={__class__:"timedelta",seconds:e.asSeconds()};else if(e instanceof Sao.Decimal)e={__class__:"Decimal",decimal:e.toString()};else if(e instanceof Uint8Array){for(var s=[],r=0;65535*r<e.length;r++)s.push(String.fromCharCode.apply(null,e.subarray(65535*r,65535*(r+1))));e={__class__:"bytes",base64:btoa(s.join(""))}}else for(var a in e=jQuery.extend({},e))Sao.rpc.prepareObject(e[a],a,e);return i&&(i[t]=e),i||e},jQuery.ajaxSetup({converters:{"text json":function(e){return Sao.rpc.convertJSONObject(jQuery.parseJSON(e))}}})}(),function(){"use strict";Sao.PYSON={},Sao.PYSON.eval={True:!0,False:!1},Sao.PYSON.toString=function(t){return t instanceof Sao.PYSON.PYSON?t.toString():t instanceof Array?"["+t.map(Sao.PYSON.toString).join(", ")+"]":t instanceof Object?"{"+Object.keys(t).map(function(e){return Sao.PYSON.toString(e)+": "+Sao.PYSON.toString(t[e])}).join(", ")+"}":JSON.stringify(t)},Sao.PYSON.PYSON=Sao.class_(Object,{init:function(){},pyson:function(){throw"NotImplementedError"},types:function(){throw"NotImplementedError"},get:function(e,t){return Sao.PYSON.Get(this,e,t=void 0===t?"":t)},in_:function(e){return Sao.PYSON.In(this,e)},contains:function(e){return Sao.PYSON.In(e,this)},toString:function(){return this.pyson().__class__+"("+this.__string_params__().map(Sao.PYSON.toString).join(", ")+")"},__string_params__:function(){throw"NotImplementedError"}}),Sao.PYSON.PYSON.eval_=function(e,t){throw"NotImplementedError"},Sao.PYSON.PYSON.init_from_object=function(e){throw"NotImplementedError"},Sao.PYSON.Encoder=Sao.class_(Object,{prepare:function(e,t,i){if(null!=e)if(e instanceof Array)for(var n=0,o=(e=jQuery.extend([],e)).length;n<o;n++)this.prepare(e[n],n,e);else if(e._isAMomentObject)e=(e.isDate?new Sao.PYSON.Date(e.year(),e.month()+1,e.date()):new Sao.PYSON.DateTime(e.year(),e.month()+1,e.date(),e.hours(),e.minutes(),e.seconds(),1e3*e.milliseconds())).pyson();else if(e instanceof Sao.Decimal)e=e.valueOf();else if(e instanceof Object&&!(e instanceof Sao.PYSON.PYSON))for(var s in e=jQuery.extend({},e))this.prepare(e[s],s,e);return i&&(i[t]=e),i||e},encode:function(e){return e=this.prepare(e),JSON.stringify(e,function(e,t){return t instanceof Sao.PYSON.PYSON?this.prepare(t.pyson()):null==t?null:t}.bind(this))}}),Sao.PYSON.Decoder=Sao.class_(Object,{init:function(e,t){this.__context=e||{},this.noeval=t||!1},decode:function(e){return JSON.parse(e,function(e,t){if("object"==typeof t&&null!==t){var i=Sao.PYSON[t.__class__];if(i){if(this.noeval){var n=jQuery.extend({},t);return delete n.__class__,Sao.PYSON[t.__class__].init_from_object(n)}return i.eval_(t,this.__context)}}return t}.bind(this))}}),Sao.PYSON.eval.Eval=function(e,t){return new Sao.PYSON.Eval(e,t)},Sao.PYSON.Eval=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t){void 0===t&&(t=""),Sao.PYSON.Eval._super.init.call(this),this._value=e,this._default=t},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(e,t){var i=e.v.indexOf(".");return 0<=i&&!(e.v in t)?Sao.PYSON.Eval.eval_({v:e.v.substring(i+1),d:e.d},t[e.v.substring(0,i)]||{}):e.v in t&&void 0!==t[e.v]?t[e.v]:e.d},Sao.PYSON.Eval.init_from_object=function(e){return new Sao.PYSON.Eval(e.v,e.d)},Sao.PYSON.eval.Not=function(e){return new Sao.PYSON.Not(e)},Sao.PYSON.Not=Sao.class_(Sao.PYSON.PYSON,{init:function(e){Sao.PYSON.Not._super.init.call(this),e instanceof Sao.PYSON.PYSON?(jQuery(e.types()).not(["boolean","object"]).length||jQuery(["boolean"]).not(e.types()).length)&&(e=new Sao.PYSON.Bool(e)):"boolean"!=typeof e&&(e=Sao.PYSON.Bool(e)),this._value=e},pyson:function(){return{__class__:"Not",v:this._value}},types:function(){return["boolean"]},__string_params__:function(){return[this._value]}}),Sao.PYSON.Not.eval_=function(e,t){return!e.v},Sao.PYSON.Not.init_from_object=function(e){return new Sao.PYSON.Not(e.v)},Sao.PYSON.eval.Bool=function(e){return new Sao.PYSON.Bool(e)},Sao.PYSON.Bool=Sao.class_(Sao.PYSON.PYSON,{init:function(e){Sao.PYSON.Bool._super.init.call(this),this._value=e},pyson:function(){return{__class__:"Bool",v:this._value}},types:function(){return["boolean"]},__string_params__:function(){return[this._value]}}),Sao.PYSON.Bool.eval_=function(e,t){return moment.isMoment(e.v)&&e.v.isTime?Boolean(e.v.hour()||e.v.minute()||e.v.second()||e.v.millisecond()):moment.isDuration(e.v)||e.v instanceof Number?Boolean(e.v.valueOf()):e.v instanceof Object?!jQuery.isEmptyObject(e.v):Boolean(e.v)},Sao.PYSON.Bool.init_from_object=function(e){return new Sao.PYSON.Bool(e.v)},Sao.PYSON.eval.And=function(){return Sao.PYSON.And.new_(arguments)},Sao.PYSON.And=Sao.class_(Sao.PYSON.PYSON,{init:function(){var e=jQuery.extend([],arguments);Sao.PYSON.And._super.init.call(this);for(var t=0,i=e.length;t<i;t++){var n=e[t];n instanceof Sao.PYSON.PYSON?(jQuery(n.types()).not(["boolean"]).length||jQuery(["boolean"]).not(n.types()).length)&&(e[t]=new Sao.PYSON.Bool(n)):"boolean"!=typeof n&&(e[t]=new Sao.PYSON.Bool(n))}if(e.length<2)throw"must have at least 2 statements";this._statements=e},pyson:function(){return{__class__:"And",s:this._statements}},types:function(){return["boolean"]},__string_params__:function(){return this._statements}}),Sao.PYSON.And.eval_=function(e,t){for(var i=!0,n=0,o=e.s.length;n<o;n++)var s=e.s[n],i=i&&s;return i},Sao.PYSON.And.init_from_object=function(e){return Sao.PYSON.And.new_(e.s)},Sao.PYSON.eval.Or=function(){return Sao.PYSON.Or.new_(arguments)},Sao.PYSON.Or=Sao.class_(Sao.PYSON.And,{pyson:function(){var e=Sao.PYSON.Or._super.pyson.call(this);return e.__class__="Or",e}}),Sao.PYSON.Or.eval_=function(e,t){for(var i=!1,n=0,o=e.s.length;n<o;n++)var s=e.s[n],i=i||s;return i},Sao.PYSON.Or.init_from_object=function(e){return new Sao.PYSON.Or.new_(e.s)},Sao.PYSON.eval.Equal=function(e,t){return new Sao.PYSON.Equal(e,t)},Sao.PYSON.Equal=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t){var i,n;if(Sao.PYSON.Equal._super.init.call(this),i=e instanceof Sao.PYSON.PYSON?e.types():[typeof e],n=t instanceof Sao.PYSON.PYSON?t.types():[typeof t],jQuery(i).not(n).length||jQuery(n).not(i).length)throw"statements must have the same type";this._statement1=e,this._statement2=t},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(e,t){return e.s1 instanceof Array&&e.s2 instanceof Array?Sao.common.compare(e.s1,e.s2):moment.isMoment(e.s1)&&moment.isMoment(e.s2)?e.s1.isDate==e.s2.isDate&&e.s1.isDateTime==e.s2.isDateTime&&e.s1.valueOf()==e.s2.valueOf():e.s1==e.s2},Sao.PYSON.Equal.init_from_object=function(e){return new Sao.PYSON.Equal(e.s1,e.s2)},Sao.PYSON.eval.Greater=function(e,t,i){return new Sao.PYSON.Greater(e,t,i)},Sao.PYSON.Greater=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i){Sao.PYSON.Greater._super.init.call(this);for(var n=[e,t],o=0;o<2;o++){var s=n[o];if(s instanceof Sao.PYSON.PYSON){if(!(s instanceof Sao.PYSON.DateTime||s instanceof Sao.PYSON.Date)&&jQuery(s.types()).not(["number"]).length)throw"statement must be an integer, float, date or datetime"}else if(!~["number","object"].indexOf(typeof s))throw"statement must be an integer, float, date or datetime"}(i=void 0===i?!1:i)instanceof Sao.PYSON.PYSON?(jQuery(i.types()).not(["boolean"]).length||jQuery(["boolean"]).not(i.types()).length)&&(i=new Sao.PYSON.Bool(i)):"boolean"!=typeof i&&(i=new Sao.PYSON.Bool(i)),this._statement1=e,this._statement2=t,this._equal=i},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(e){for(var t=[(e=jQuery.extend({},e)).s1,e.s2],i=0;i<2;i++)t[i]instanceof moment?t[i]=t[i].valueOf():t[i]=Number(t[i]);return e.s1=t[0],e.s2=t[1],e},Sao.PYSON.Greater.eval_=function(e,t){return null!=e.s1&&null!=e.s2&&((e=Sao.PYSON.Greater._convert(e)).e?e.s1>=e.s2:e.s1>e.s2)},Sao.PYSON.Greater.init_from_object=function(e){return new Sao.PYSON.Greater(e.s1,e.s2,e.e)},Sao.PYSON.eval.Less=function(e,t,i){return new Sao.PYSON.Less(e,t,i)},Sao.PYSON.Less=Sao.class_(Sao.PYSON.Greater,{pyson:function(){var e=Sao.PYSON.Less._super.pyson.call(this);return e.__class__="Less",e}}),Sao.PYSON.Less._convert=Sao.PYSON.Greater._convert,Sao.PYSON.Less.eval_=function(e,t){return null!=e.s1&&null!=e.s2&&((e=Sao.PYSON.Less._convert(e)).e?e.s1<=e.s2:e.s1<e.s2)},Sao.PYSON.Less.init_from_object=function(e){return new Sao.PYSON.Less(e.s1,e.s2,e.e)},Sao.PYSON.eval.If=function(e,t,i){return new Sao.PYSON.If(e,t,i)},Sao.PYSON.If=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i){var n,o;if(Sao.PYSON.If._super.init.call(this),e instanceof Sao.PYSON.PYSON?(jQuery(e.types()).not(["boolean"]).length||jQuery(["boolean"]).not(e.types()).length)&&(e=new Sao.PYSON.Bool(e)):"boolean"!=typeof e&&(e=new Sao.PYSON.Bool(e)),n=t instanceof Sao.PYSON.PYSON?t.types():[typeof t],o=(i=void 0===i?null:i)instanceof Sao.PYSON.PYSON?i.types():[typeof i],jQuery(n).not(o).length||jQuery(o).not(n).length)throw"then and else statements must be the same type";this._condition=e,this._then_statement=t,this._else_statement=i},pyson:function(){return{__class__:"If",c:this._condition,t:this._then_statement,e:this._else_statement}},types:function(){return this._then_statement instanceof Sao.PYSON.PYSON?this._then_statement.types():[typeof this._then_statement]},__string_params__:function(){return[this._condition,this._then_statement,this._else_statement]}}),Sao.PYSON.If.eval_=function(e,t){return e.c?e.t:e.e},Sao.PYSON.If.init_from_object=function(e){return new Sao.PYSON.If(e.c,e.t,e.e)},Sao.PYSON.eval.Get=function(e,t,i){return new Sao.PYSON.Get(e,t,i)},Sao.PYSON.Get=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i){if(Sao.PYSON.Get._super.init.call(this),void 0===i&&(i=null),e instanceof Sao.PYSON.PYSON){if(jQuery(e.types()).not(["object"]).length||jQuery(["object"]).not(e.types()).length)throw"obj must be a dict"}else if(!(e instanceof Object))throw"obj must be a dict";if(this._obj=e,t instanceof Sao.PYSON.PYSON){if(jQuery(t.types()).not(["string"]).length||jQuery(["string"]).not(t.types()).length)throw"key must be a string"}else if("string"!=typeof t)throw"key must be a string";this._key=t,this._default=i},pyson:function(){return{__class__:"Get",v:this._obj,k:this._key,d:this._default}},types:function(){return this._default instanceof Sao.PYSON.PYSON?this._default.types():[typeof this._default]},__string_params__:function(){return[this._obj,this._key,this._default]}}),Sao.PYSON.Get.eval_=function(e,t){return e.k in e.v?e.v[e.k]:e.d},Sao.PYSON.Get.init_from_object=function(e){return new Sao.PYSON.Get(e.v,e.k,e.d)},Sao.PYSON.eval.In=function(e,t){return new Sao.PYSON.In(e,t)},Sao.PYSON.In=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t){if(Sao.PYSON.In._super.init.call(this),e instanceof Sao.PYSON.PYSON){if(jQuery(e.types()).not(["string","number"]).length)throw"key must be a string or a number"}else if(!~["string","number"].indexOf(typeof e))throw"key must be a string or a number";if(t instanceof Sao.PYSON.PYSON){if(jQuery(t.types()).not(["object"]).length||jQuery(["object"]).not(t.types()).length)throw"obj must be a dict or a list"}else if(!(t instanceof Object))throw"obj must be a dict or a list";this._key=e,this._obj=t},pyson:function(){return{__class__:"In",k:this._key,v:this._obj}},types:function(){return["boolean"]},__string_params__:function(){return[this._key,this._obj]}}),Sao.PYSON.In.eval_=function(e,t){return!!e.v&&(e.v.indexOf?Boolean(~e.v.indexOf(e.k)):!!e.v[e.k])},Sao.PYSON.In.init_from_object=function(e){return new Sao.PYSON.In(e.k,e.v)},Sao.PYSON.eval.Date=function(e,t,i,n,o,s){return new Sao.PYSON.Date(e,t,i,n,o,s)},Sao.PYSON.Date=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i,n,o,s,r){Sao.PYSON.Date._super.init.call(this),void 0===t&&(t=null),void 0===i&&(i=null),void 0===n&&(n=0),void 0===o&&(o=0),void 0===s&&(s=0),this._test(e=void 0===e?null:e,"year"),this._test(t,"month"),this._test(i,"day"),this._test(n,"delta_years"),this._test(s,"delta_days"),this._test(o,"delta_months"),this._year=e,this._month=t,this._day=i,this._delta_years=n,this._delta_months=o,this._delta_days=s,this._start=r||null},pyson:function(){return{__class__:"Date",y:this._year,M:this._month,d:this._day,dy:this._delta_years,dM:this._delta_months,dd:this._delta_days,start:this._start}},types:function(){return["object"]},_test:function(e,t){if(e instanceof Sao.PYSON.PYSON){if(jQuery(e.types()).not(["number","object"]).length)throw t+" must be an integer or None"}else if("number"!=typeof e&&null!==e)throw t+" must be an integer or None"},__string_params__:function(){return[this._year,this._month,this._day,this._delta_years,this._delta_months,this._delta_days,this._start]}}),Sao.PYSON.Date.eval_=function(e,t){var i=e.start;return(i=i&&i.isDateTime?Sao.Date(i.year(),i.month(),i.date()):i)&&i.isDate||(i=Sao.Date()),e.y&&i.year(e.y),e.M&&i.month(e.M-1),e.d&&i.date(e.d),e.dy&&i.add(e.dy,"y"),e.dM&&i.add(e.dM,"M"),e.dd&&i.add(e.dd,"d"),i},Sao.PYSON.Date.init_from_object=function(e){return new Sao.PYSON.Date(e.y,e.M,e.d,e.dy,e.dM,e.dd,e.start)},Sao.PYSON.eval.DateTime=function(e,t,i,n,o,s,r,a,c,l,d,h,u,_){return new Sao.PYSON.DateTime(e,t,i,n,o,s,r,a,c,l,d,h,u,_)},Sao.PYSON.DateTime=Sao.class_(Sao.PYSON.Date,{init:function(e,t,i,n,o,s,r,a,c,l,d,h,u,_,m){Sao.PYSON.DateTime._super.init.call(this,e,t,i,a,c,l,m),void 0===o&&(o=null),void 0===s&&(s=null),void 0===r&&(r=null),void 0===d&&(d=0),void 0===h&&(h=0),void 0===u&&(u=0),void 0===_&&(_=0),this._test(n=void 0===n?null:n,"hour"),this._test(o,"minute"),this._test(s,"second"),this._test(r,"microsecond"),this._test(d,"delta_hours"),this._test(h,"delta_minutes"),this._test(u,"delta_seconds"),this._test(_,"delta_microseconds"),this._hour=n,this._minute=o,this._second=s,this._microsecond=r,this._delta_hours=d,this._delta_minutes=h,this._delta_seconds=u,this._delta_microseconds=_},pyson:function(){var e=Sao.PYSON.DateTime._super.pyson.call(this);return e.__class__="DateTime",e.h=this._hour,e.m=this._minute,e.s=this._second,e.ms=this._microsecond,e.dh=this._delta_hours,e.dm=this._delta_minutes,e.ds=this._delta_seconds,e.dms=this._delta_microseconds,e},__string_params__:function(){var e=Sao.PYSON.DateTime._super.__string_params__.call(this);return[e[0],e[1],e[2],this._hour,this._minute,this._second,this._microsecond,e[3],e[4],e[5],this._delta_hours,this._delta_minutes,this._delta_seconds,this._delta_microseconds,e[6]]}}),Sao.PYSON.DateTime.eval_=function(e,t){var i=e.start;return(i=i&&i.isDate?Sao.DateTime.combine(i,Sao.Time()):i)&&i.isDateTime||(i=Sao.DateTime()).utc(),e.y&&i.year(e.y),e.M&&i.month(e.M-1),e.d&&i.date(e.d),null!==e.h&&i.hour(e.h),null!==e.m&&i.minute(e.m),null!==e.s&&i.second(e.s),null!==e.ms&&i.milliseconds(e.ms/1e3),e.dy&&i.add(e.dy,"y"),e.dM&&i.add(e.dM,"M"),e.dd&&i.add(e.dd,"d"),e.dh&&i.add(e.dh,"h"),e.dm&&i.add(e.dm,"m"),e.ds&&i.add(e.ds,"s"),e.dms&&i.add(e.dms/1e3,"ms"),i},Sao.PYSON.DateTime.init_from_object=function(e){return new Sao.PYSON.DateTime(e.y,e.M,e.d,e.h,e.m,e.s,e.ms,e.dy,e.dM,e.dd,e.dh,e.dm,e.ds,e.dms)},Sao.PYSON.eval.TimeDelta=function(e,t,i){return new Sao.PYSON.TimeDelta(e,t,i)},Sao.PYSON.TimeDelta=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i){function n(e,t){if(e instanceof Sao.PYSON.TimeDelta){if(jQuery(e.types()).not(["number"]).length)throw t+" must be an integer"}else if("number"!=typeof e)throw t+" must be an integer";return e}Sao.PYSON.TimeDelta._super.init.call(this),void 0===t&&(t=0),void 0===i&&(i=0),this._days=n(e=void 0===e?0:e,"days"),this._seconds=n(t,"seconds"),this._microseconds=n(i,"microseconds")},pyson:function(){return{__class__:"TimeDelta",d:this._days,s:this._seconds,m:this._microseconds}},types:function(){return["object"]},__string_params__:function(){return[this._days,this._seconds,this._microseconds]}}),Sao.PYSON.TimeDelta.eval_=function(e,t){return Sao.TimeDelta(e.d,e.s,e.m/1e3)},Sao.PYSON.TimeDelta.init_from_object=function(e){return new Sao.PYSON.TimeDelta(e.d,e.s,e.microseconds)},Sao.PYSON.eval.Len=function(e){return new Sao.PYSON.Len(e)},Sao.PYSON.Len=Sao.class_(Sao.PYSON.PYSON,{init:function(e){if(Sao.PYSON.Len._super.init.call(this),e instanceof Sao.PYSON.PYSON){if(jQuery(e.types()).not(["object","string"]).length||jQuery(["object","string"]).not(e.types()).length)throw"value must be an object or a string"}else if("object"!=typeof e&&"string"!=typeof e)throw"value must be an object or a string";this._value=e},pyson:function(){return{__class__:"Len",v:this._value}},types:function(){return["integer"]},__string_params__:function(){return[this._value]}}),Sao.PYSON.Len.eval_=function(e,t){return("object"==typeof e.v?Object.keys(e.v):e.v).length},Sao.PYSON.Len.init_from_object=function(e){return new Sao.PYSON.Len(e.v)}}(),function(){"use strict";Sao.Session=Sao.class_(Object,{init:function(e,t){this.user_id=null,this.session=null,this.cache=new i,this.prm=jQuery.when(),this.database=e,this.login=t,this.restore(),this.context={},this.restore_context(),Sao.Session.current_session||(Sao.Session.current_session=this)},get_auth:function(){return e=this.login+":"+this.user_id+":"+this.session,window.btoa(unescape(encodeURIComponent(e)));var e},do_login:function(e){var t=jQuery.Deferred(),i=this.login,n=JSON.parse(localStorage.getItem("sao_device_cookies")),o=null;n&&n[this.database]&&(o=n[this.database][this.login]);return new Sao.Login(function(e){return e.device_cookie=o,{method:"common.db.login",params:[i,e,Sao.i18n.getlang()]}},this).run().then(function(e){this.login=i,this.user_id=e[0],this.session=e[1],this.store(),this.renew_device_cookie(),t.resolve()}.bind(this),function(){this.user_id=null,this.session=null,this.store(),t.reject()}.bind(this)),t.promise()},do_logout:function(){if(!this.user_id||!this.session)return jQuery.when();var e=jQuery.ajax({headers:{Authorization:"Session "+this.get_auth()},contentType:"application/json",data:JSON.stringify({id:0,method:"common.db.logout",params:[]}),dataType:"json",url:"/"+this.database+"/",type:"post"});return this.unstore(),this.database=null,this.login=null,this.user_id=null,this.session=null,Sao.Session.current_session===this&&(Sao.Session.current_session=null),e},reload_context:function(){var e={method:"model.res.user.get_preferences",params:[!0,this.context]};return this.reset_context(),Sao.rpc(e,this).then(function(e){jQuery.extend(this.context,e),this.store_context()}.bind(this))},reset_context:function(){this.context={client:Sao.Bus.id}},restore_context:function(){this.reset_context();var e=sessionStorage.getItem("sao_context_"+this.database);null!==e&&jQuery.extend(this.context,Sao.rpc.convertJSONObject(JSON.parse(e)))},store_context:function(){var e=jQuery.extend({},this.context);delete e.client,e=JSON.stringify(Sao.rpc.prepareObject(e)),sessionStorage.setItem("sao_context_"+this.database,e)},restore:function(){var e;!this.database||this.session||null!==(e=localStorage.getItem("sao_session_"+this.database))&&(e=JSON.parse(e),this.login&&this.login!=e.login||(this.login=e.login,this.user_id=e.user_id,this.session=e.session))},store:function(){var e={login:this.login,user_id:this.user_id,session:this.session},e=JSON.stringify(e);localStorage.setItem("sao_session_"+this.database,e)},unstore:function(){localStorage.removeItem("sao_session_"+this.database)},renew_device_cookie:function(){var t=JSON.parse(localStorage.getItem("sao_device_cookies")),e=t&&this.database in t?t[this.database][this.login]:null;Sao.rpc({method:"model.res.user.device.renew",params:[e,{}]},this).done(function(e){t=(t=JSON.parse(localStorage.getItem("sao_device_cookies")))||{},this.database in t||(t[this.database]={}),t[this.database][this.login]=e,localStorage.setItem("sao_device_cookies",JSON.stringify(t))}.bind(this))}}),Sao.Session.login_dialog=function(){var e=new Sao.Dialog(Sao.i18n.gettext("Login"),"lg");return e.database_select=jQuery("<select/>",{class:"form-control",id:"database"}).hide(),e.database_input=jQuery("<input/>",{class:"form-control",id:"database"}).hide(),e.login_input=jQuery("<input/>",{class:"form-control",id:"login",placeholder:Sao.i18n.gettext("User name")}),e.body.append(jQuery("<div/>",{class:"form-group"}).append(jQuery("<label/>",{class:"control-label",for:"database"}).text(Sao.i18n.gettext("Database"))).append(e.database_select).append(e.database_input)).append(jQuery("<div/>",{class:"form-group"}).append(jQuery("<label/>",{class:"control-label",for:"login"}).text(Sao.i18n.gettext("User name"))).append(e.login_input)),e.button=jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(" "+Sao.i18n.gettext("Login")).appendTo(e.footer),e},Sao.Session.get_credentials=function(){function n(){return window.location.hash.replace(/^(#(!|))/,"").split("/",1)[0]||null}var o=jQuery.Deferred(),i=n(),s=new Sao.Session(i,null);if(s.session)return o.resolve(s),o;function r(){return a.modal.find("input,select").filter(":visible:not([readonly])").filter(function(){return!jQuery(this).val()})}var a=Sao.Session.login_dialog();return a.modal.modal({backdrop:!1,keyboard:!1}),a.modal.find("form").unbind().submit(function(e){var t,i;t=a.login_input.val(),i=a.database_select.val()||a.database_input.val(),a.modal.find(".has-error").removeClass("has-error"),t&&i?(a.button.focus(),a.button.prop("disabled",!0),a.modal.modal("hide"),s.database=i,s.login=t,s.restore(),(s.session?jQuery.when():s.do_login()).then(function(){o.resolve(s),a.modal.remove(),n()!=i&&(window.location="#"+i)},function(){a.button.prop("disabled",!1),a.modal.modal("show"),r().closest(".form-group").addClass("has-error"),r().first().focus()})):r().closest(".form-group").addClass("has-error"),e.preventDefault()}),a.modal.on("shown.bs.modal",function(){r().first().focus()}),jQuery.when(Sao.DB.list()).then(function(e){var t;1==(e=e||[]).length?(i=e[0],t=a.database_input):(t=a.database_select,e.forEach(function(e){t.append(jQuery("<option/>",{value:e,text:e}))})),t.prop("readonly",1==e.length),t.show(),t.val(i||"")},function(){a.database_input.show()}),o.promise()},Sao.Session.renew=function(e){if("pending"==e.prm.state())return e.prm;var t=jQuery.Deferred();return e.prm=t.promise(),e.do_login().then(t.resolve,function(){Sao.logout(),t.reject()}).done(function(){Sao.Bus.listen()}),e.prm},Sao.Session.current_session=null,Sao.Login=Sao.class_(Object,{init:function(e,t){this.func=e,this.session=t||Sao.Session.current_session},run:function(o){void 0===o&&(o={});var s=jQuery.Deferred(),e=Sao.common.processing.show(),t=this.func(o);t.id=0;t={contentType:"application/json",data:JSON.stringify(t),dataType:"json",url:"/"+this.session.database+"/",type:"post",complete:[function(){Sao.common.processing.hide(e)}]};this.session.user_id&&this.session.session&&(t.headers={Authorization:"Session "+this.session.get_auth()});t=jQuery.ajax(t);return t.done(function(e){if(null===e)Sao.common.warning.run("",Sao.i18n.gettext("Unable to reach the server.")),s.reject();else if(e.error){if(e.error[0].startsWith("401"))return this.run({}).then(s.resolve,s.reject);var t,i,n;e.error[0].startsWith("429")?Sao.common.message.run(Sao.i18n.gettext("Too many requests. Try again later."),"tryton-error").always(s.resolve):e.error[0].startsWith("404")?s.reject():"LoginException"!=e.error[0]?(Sao.common.error.run(e.error[0],e.error[1]),s.reject()):(t=e.error[1],i=t[0],n=t[1],this["get_"+t[2]](n).then(function(e){return o[i]=e,this.run(o).then(s.resolve,s.reject)}.bind(this),s.reject))}else s.resolve(e.result)}.bind(this)),t.fail(function(e,t,i){401==e.status?this.run({}).then(s.resolve,s.reject):429==e.status?Sao.common.message.run(Sao.i18n.gettext("Too many requests. Try again later."),"tryton-error").always(s.resolve):(Sao.common.error.run(t,i),s.reject())}.bind(this)),s.promise()},get_char:function(e){return Sao.common.ask.run(e)},get_password:function(e){return Sao.common.ask.run(e,!1)}});var i=Sao.class_(Object,{init:function(){this.store={}},cached:function(e){return e in this.store},set:function(e,t,i,n){i=new Date((new Date).getTime()+1e3*i),Sao.setdefault(this.store,e,{})[t]={expire:i,value:JSON.stringify(Sao.rpc.prepareObject(n))}},get:function(e,t){var i=new Date,n=Sao.setdefault(this.store,e,{})[t];if(n){if(!(n.expire<i))return Sao.rpc.convertJSONObject(jQuery.parseJSON(n.value));delete this.store[e][t]}},clear:function(e){e?this.store[e]={}:this.store={}}});Sao.DB={},Sao.DB.list=function(){var e=Sao.common.processing.show();return jQuery.ajax({contentType:"application/json",data:JSON.stringify({id:0,method:"common.db.list",params:[]}),dataType:"json",url:"/",type:"post",complete:[function(){Sao.common.processing.hide(e)}]}).then(function(e){return e.result})}}(),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(e,t){if(e.length!=t.length)return!1;for(var i=0;i<e.length;i++){var n=e[i],o=t[i];if(n instanceof Array&&o instanceof Array){if(!Sao.common.compare(n,o))return!1}else if(moment.isMoment(n)&&moment.isMoment(o)){if(n.isDate!=o.isDate&&n.isDateTime!=o.isDateTime&&n.valueOf()!=o.valueOf())return!1}else if(n instanceof Number||o instanceof Number){if(Number(n)!==Number(o))return!1}else if(n!=o)return!1}return!0},Sao.common.contains=function(e,t){for(var i=0;i<e.length;i++)if(Sao.common.compare(e[i],t))return!0;return!1},Sao.common.intersect=function(e,t){for(var i=0,n=0,o=[];i<e.length&&n<t.length;)e[i]<t[n]?i++:(e[i]>t[n]||(o.push(e[i]),i++),n++);return o},Sao.common.scrollIntoViewIfNeeded=function(e){var t=(e=e[0]).getBoundingClientRect();t.bottom>window.innerHeight&&e.scrollIntoView(!1),t.top<0&&e.scrollIntoView()},Sao.common.click_press=function(i,n){return function e(t){if("keypress"!=t.type||t.which==Sao.common.RETURN_KEYCODE)return n&&jQuery(this).off("click keypress",null,e),i(t)}},Sao.common.product=function(e,t){t=t||1;for(var i=[],n=0;n<t;)i=i.concat(e),n++;var o=[[]];return i.forEach(function(e){var i=[];o.forEach(function(t){e.forEach(function(e){i.push(t.concat([e]))})}),o=i}),o},Sao.common.selection=function(e,t,i){void 0===i&&(i=!1);var n=jQuery.Deferred();if(jQuery.isEmptyObject(t))return n.reject(),n;var o=Object.keys(t).sort();if(1==o.length&&!i){i=o[0];return n.resolve(t[i]),n}var s=new Sao.Dialog(e||Sao.i18n.gettext("Your selection:"),"selection-dialog");return o.forEach(function(e,t){jQuery("<div/>",{class:"radio"}).append(jQuery("<label/>").text(" "+e).prepend(jQuery("<input/>",{type:"radio",name:"selection",value:t}))).appendTo(s.body)}),s.body.find("input").first().prop("checked",!0),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){s.modal.modal("hide"),n.reject()}).appendTo(s.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){var e=s.body.find("input:checked").attr("value");s.modal.modal("hide"),n.resolve(t[o[e]])}).appendTo(s.footer),s.modal.on("hidden.bs.modal",function(e){jQuery(this).remove()}),s.modal.modal("show"),n},Sao.common.moment_format=function(e){return e.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(e){var t;return jQuery.isEmptyObject(e)&&(e="%Y-%m-%d",!Sao.Session.current_session||(t=Sao.Session.current_session.context).locale&&t.locale.date&&(e=t.locale.date)),Sao.common.moment_format(e)},Sao.common.format_time=function(e,t){return t?t.format(Sao.common.moment_format(e)):""},Sao.common.parse_time=function(i,n){if(!n)return null;function e(e){var t=i.indexOf(e);if(~t){e=parseInt(n.slice(t,t+e.length),10);if(!isNaN(e))return e}return 0}return Sao.Time(e("%H"),e("%M"),e("%S"),e("%f"))},Sao.common.format_date=function(e,t){return t?t.format(Sao.common.moment_format(e)):""},Sao.common.parse_date=function(e,t){e=moment(t,Sao.common.moment_format(e));return e=e.isValid()?Sao.Date(e.year(),e.month(),e.date()):null},Sao.common.format_datetime=function(e,t){return t?t.format(Sao.common.moment_format(e)):""},Sao.common.parse_datetime=function(e,t){e=moment(t,Sao.common.moment_format(e));return e=e.isValid()?Sao.DateTime(e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.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(e,t){if(!e)return"";t=t||Sao.common.timedelta.DEFAULT_CONVERTER;var i=[],n=(e=e.asSeconds())<0?"-":"";e=Math.abs(e),t=Object.keys(Sao.common.timedelta._get_separator()).map(function(e){return[e,t[e]]});for(var o,s,r=[],a=0;a<t.length;a++){var c,l,d=t[a][0];(l=t[a][1])?(e-=(c=Math.floor(e/l))*l,r.push(c)):r.push(0)}for(a=0;a<t.length-3;a++)d=t[a][0],(l=r[a])&&i.push(l+Sao.common.timedelta._get_separator()[d]);return(jQuery(r.slice(-3)).is(function(e,t){return t})||jQuery.isEmptyObject(i))&&(s=(o=r.slice(-3))[0].toString().padStart(2,"0"),s+=":"+o[1].toString().padStart(2,"0"),(o[2]||e)&&(s+=":"+o[2].toString().padStart(2,"0")),i.push(s)),i=n+i.reduce(function(e,t){return e?e+" "+t:t}),e&&(jQuery(r.slice(-3)).is(function(e,t){return t})||(i+=" "),i+=(""+e.toFixed(6)).slice(1)),i},Sao.common.timedelta.parse=function(e,t){if(!e)return null;t=t||Sao.common.timedelta.DEFAULT_CONVERTER;var i,n,o=Sao.common.timedelta._get_separator();for(n in o)i=o[n],e=e.replace(i,i+" ");for(var s=0,r=e.split(" "),a=0;a<r.length;a++){var c=r[a];if(c.contains(":"))for(var l=c.split(":"),d=[t.h,t.m,t.s],h=0;h<Math.min(l.length,d.length);h++){var u=l[h],_=d[h],m=Math.abs(parseFloat(u))*_;isNaN(m)||(s+=m)}else{var p,f=!1;for(p in o)if(i=o[p],c.endsWith(i)){c=c.slice(0,-i.length),m=Math.abs(parseFloat(c))*t[p],isNaN(m)||(s+=m),f=!0;break}f||(m=Math.abs(parseFloat(c)),isNaN(m)||(s+=m))}}return e.contains("-")&&(s*=-1),Sao.TimeDelta(null,s)},Sao.common.ModelAccess=Sao.class_(Object,{init:function(){this.batchnum=100,this._models=[],this._access={}},load_models:function(e){e||(this._access={}),this._models=Sao.rpc({method:"model.ir.model.list_models",params:[{}]},Sao.Session.current_session,!1)},get:function(e){if(void 0!==this._access[e])return this._access[e];var t=this._models.indexOf(e);t<0&&(this.load_models(!1),t=this._models.indexOf(e));t=this._models.slice(Math.max(0,t-Math.floor(this.batchnum/2)),t+Math.floor(this.batchnum/2)),t=Sao.rpc({method:"model.ir.model.access.get_access",params:[t,{}]},Sao.Session.current_session,!1);return this._access=jQuery.extend(this._access,t),this._access[e]}}),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(e){this._models=e}.bind(this))},contains:function(e){return~this._models.indexOf(e)}}),Sao.common.MODELHISTORY=new Sao.common.ModelHistory,Sao.common.ModelName=Sao.class_(Object,{init:function(){this._names={}},load_names:function(){this._names=Sao.rpc({method:"model.ir.model.get_names",params:[{}]},Sao.Session.current_session,!1)},get:function(e){return jQuery.isEmptyObject(this._names)&&this.load_names(),this._names[e]||""},clear:function(){this._names={}}}),Sao.common.MODELNAME=new Sao.common.ModelName,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(e){this.searches=e}.bind(this))},get:function(e){return this.searches[e]||[]},add:function(t,i,n){return Sao.rpc({method:"model.ir.ui.view_search.create",params:[[{model:t,name:i,domain:this.encoder.encode(n)}],{}]},Sao.Session.current_session).then(function(e){e=e[0];void 0===this.searches[t]&&(this.searches[t]=[]),this.searches[t].push([e,i,n,!0])}.bind(this))},remove:function(t,i){return Sao.rpc({method:"model.ir.ui.view_search.delete",params:[[i],{}]},Sao.Session.current_session).then(function(){for(var e=0;e<this.searches[t].length;e++)if(this.searches[t][e][0]===i){this.searches[t].splice(e,1);break}}.bind(this))}}),Sao.common.VIEW_SEARCH=new Sao.common.ViewSearch,Sao.common.humanize=function(e){for(var t=["bytes","KB","MB","GB","TB","PB"],i=0,n=t.length;i<n;i++){if(e<1e3)return e.toPrecision(4)+" "+t[i];e/=1e3}},Sao.common.EvalEnvironment=function(e,t){var i;if("eval"==(t=void 0===t?"eval":t))i=e.get_eval();else for(var n in i={},e.model.fields){var o=e.model.fields[n];i[n]=o.get_on_change_value(e)}return i.id=e.id,e.group.parent&&Object.defineProperty(i,"_parent_"+e.group.parent_name,{enumerable:!0,get:function(){return Sao.common.EvalEnvironment(e.group.parent,t)}}),i.get=function(e,t){return this.hasOwnProperty(e)?this[e]:t},i},Sao.common.selection_mixin={},Sao.common.selection_mixin.init=function(){this.selection=null,this.help=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(t,i){t||(t={},(this.attributes.selection_change_with||[]).forEach(function(e){t[e]=null}));function e(e){e=jQuery.extend([],e),void 0!==this.attributes.sort&&!this.attributes.sort||e.sort(function(e,t){return e[1].localeCompare(t[1])}),this.selection=jQuery.extend([],e),this.help=this.attributes.help_selection||{},i&&i(this.selection,this.help)}var n=JSON.stringify(t),o=this.attributes.selection||[],s=(this.attributes.help_selection,o instanceof Array||n in this._values2selection?(n in this._values2selection&&(o=this._values2selection[n]),e.call(this,o),jQuery.when()):(s=(s=jQuery.isEmptyObject(this.attributes.selection_change_with)?this.model.execute(o,[]):this.model.execute(o,[t])).then(function(e){return this._values2selection[n]=e}.bind(this))).then(e.bind(this)));this.inactive_selection=[],this._selection_prm=s},Sao.common.selection_mixin.update_selection=function(t,i,a){this._selection_prm.done(function(){var n,o,s,r,e;i?(n=i.get_domain(t),"relation"in this.attributes?(o=i.get_context(t),(s=JSON.stringify([n,o]))in this._domain_cache&&(this.selection=this._domain_cache[s],this._last_domain=[n,o]),null!==this._last_domain&&Sao.common.compare(n,this._last_domain[0])&&JSON.stringify(o)==JSON.stringify(this._last_domain[1])?a&&a(this.selection,this.help):(e=["rec_name"],(r=this.attributes.help_field)&&e.push(r),(e=Sao.rpc({method:"model."+this.attributes.relation+".search_read",params:[n,0,null,null,e,o]},t.model.session)).done(function(e){var t=[];e.forEach(function(e){t.push([e.id,e.rec_name])}),this.nullable_widget&&t.push([null,""]);var i={};r&&e.forEach(function(e){i[e.id]=e[r]}),this._last_domain=[n,o],this._domain_cache[s]=t,this.selection=jQuery.extend([],t),this.help=i,a&&a(this.selection,this.help)}.bind(this)),e.fail(function(){this._last_domain=null,this.selection=[],a&&a(this.selection,this.help)}.bind(this)))):(e=this.attributes.selection_change_with||[],delete(e=t._get_on_change_args(e)).id,Sao.common.selection_mixin.init_selection.call(this,e,function(){Sao.common.selection_mixin.filter_selection.call(this,n,t,i),a&&a(this.selection,this.help)}.bind(this)))):a&&a(this.selection,this.help)}.bind(this))},Sao.common.selection_mixin.filter_selection=function(i,e,t){var n,o,s;jQuery.isEmptyObject(i)||(n=new Sao.common.DomainInversion,s=function(e){var t={};return t[this.field_name]=e[0],n.eval_domain(i,t)}.bind(this),s="reference"==t.description.type?(e=t.get_models(e),o=e,function(e){return~o.indexOf(e[0])||jQuery.isEmptyObject(o)}):s,this.selection=this.selection.filter(s))},Sao.common.selection_mixin.get_inactive_selection=function(e){if(!this.attributes.relation)return jQuery.when([]);for(var t=0,i=this.inactive_selection.length;t<i;t++)if(e==this.inactive_selection[t][0])return jQuery.when(this.inactive_selection[t]);return Sao.rpc({method:"model."+this.attributes.relation+".read",params:[[e],["rec_name"],{}]},Sao.Session.current_session).then(function(e){return this.inactive_selection.push([e[0].id,e[0].rec_name]),[e[0].id,e[0].rec_name]}.bind(this))},Sao.common.Button=Sao.class_(Object,{init:function(e,t,i,n){this.attributes=e,t?this.el=t:(this.el=jQuery("<button/>",{title:e.string||"",name:e.name||""}),this.el.text(e.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",n||"btn-default",i||""].join(" ")),this.el.attr("type","button"),this.icon.attr("aria-hidden",!0),this.set_icon(e.icon)},set_icon:function(e){if(!e)return this.icon.attr("src",""),void this.icon.hide();Sao.common.ICONFACTORY.get_icon_url(e).done(function(e){this.icon.attr("src",e),this.icon.show()}.bind(this))},set_state:function(e){var t=e?e.expr_eval(this.attributes.states||{}):{};if(t.invisible?this.el.hide():this.el.show(),this.el.prop("disabled",Boolean(t.readonly)),this.set_icon(t.icon||this.attributes.icon),this.attributes.rule&&(e?e.get_button_clicks(this.attributes.name):jQuery.when()).then(function(e){var t=this.el.children(".badge"),i=[],n="";if(!jQuery.isEmptyObject(e)){for(var o in e)i.push(e[o]);n=Sao.i18n.gettext("By: ")+i.join(Sao.i18n.gettext(", "))}t.text(i.length||""),t.attr("title",n)}.bind(this)),(void 0===this.attributes.type||"class"===this.attributes.type)&&e)for(var i=e.group.parent;i;){if(i.has_changed()){this.el.prop("disabled",!0);break}i=i.group.parent}}}),Sao.common.udlex=Sao.class_(Object,{init:function(e){var t=Sao.class_(Object,{init:function(e){this.stream=e.split(""),this.i=0},read:function(e){if(this.i>=this.stream.length)return null;var t=this.stream.slice(this.i,this.i+(e=void 0===e?1:e)).join();return this.i+=e,t}});this.instream=new t(e),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 0<this.pushback.length?this.pushback.shift():this.read_token()},read_token:function(){for(var e=!1,t=" ";;){var i=this.instream.read(1);if(null===this.state){this.token="";break}if(" "==this.state){if(!i){this.state=null;break}if(this.whitespace.contains(i)){if(this.token||e)break}else if(!this.commenters.contains(i))if(this.escape.contains(i))t="a",this.state=i;else if(~this.nowordchars.indexOf(i)){if(this.quotes.contains(i))this.state=i;else if(this.whitespace_split)this.token=i,this.state="a";else if(this.token=i,this.token||e)break}else this.token=i,this.state="a"}else if(this.quotes.contains(this.state)){if(e=!0,!i)throw"no closing quotation";i==this.state?this.state="a":this.escape.contains(i)&&this.escapedquotes.contains(this.state)?(t=this.state,this.state=i):this.token=this.token+i}else if(this.escape.contains(this.state)){if(!i)throw"no escaped character";this.quotes.contains(t)&&i!=this.state&&i!=t&&(this.token=this.token+this.state),this.token=this.token+i,this.state=t}else if("a"==this.state){if(!i){this.state=null;break}if(this.whitespace.contains(i)){if(this.state=" ",this.token||e)break}else if(!this.commenters.contains(i))if(this.quotes.contains(i))this.state=i;else if(this.escape.contains(i))t="a",this.state=i;else if(!~this.nowordchars.indexOf(i)||this.quotes.contains(i)||this.whitespace_split)this.token=this.token+i;else if(this.pushback.unshift(i),this.state=" ",this.token)break}}var n=this.token;return this.token="",n=!e&&""===n?null:n},next:function(){var e=this.get_token();return e==this.eof?null:e}}),Sao.common.DomainParser=Sao.class_(Object,{OPERATORS:["!=","<=",">=","=","!","<",">"],init:function(e,t){this.fields={},this.strings={},this.context=t,this.update_fields(e)},update_fields:function(e,t,i){for(var n in t=t||"",i=i||"",e){var o,s=e[n];!s.searchable&&void 0!==s.searchable||"rec_name"===n||(s=jQuery.extend({},s),o=t?t+"."+n:n,n=i?i+"."+s.string:s.string,s.string=n,s.name=o,this.fields[o]=s,(s=(this.strings[s.string.toLowerCase()]=s).relation_fields)&&this.update_fields(s,o,n))}},parse:function(t){try{for(var e=new Sao.common.udlex(t),i=[];;){var n=e.next();if(null===n)break;i.push(n)}return i=this.group_operator(i),i=this.parenthesize(i),i=this.group(i),i=this.operatorize(i,"or"),i=this.operatorize(i,"and"),i=this.parse_clause(i),this.simplify(i)}catch(e){if("no closing quotation"==e)return this.parse(t+'"');throw e}},stringable:function(e){var t=function(e){if(!e)return!0;var t=function(e){return e instanceof Array};if((~["AND","OR"].indexOf(e[0])||t(e[0]))&&e.slice(1).every(t))return this.stringable(e);var i=e[0],t=e[2];if((i=i.endsWith(".rec_name")?i.slice(0,-9):i)in this.fields){var n=this.fields[i];if(~["many2one","one2one","one2many","many2many"].indexOf(n.type)){e=function(e){if("many2one"==n.type){if("string"!=typeof e&&null!==e)return!1}else if("string"!=typeof e)return!1;return!0};return t instanceof Array?t.every(e):e(t)}return"multiselection"!=n.type||(!t||jQuery.isEmptyObject(t)||t instanceof Array)}return"rec_name"==i}.bind(this);return!e||(e=~["AND","OR"].indexOf(e[0])?e.slice(1):e).every(t)},string:function(e){var t=(t=function(e){if(jQuery.isEmptyObject(e))return"";if("string"!=typeof e[0]||~["AND","OR"].indexOf(e[0]))return"("+this.string(e)+")";var t=e[0],i=e[1],n=e[2];if(!((t=t.endsWith(".rec_name")?t.slice(0,-9):t)in this.fields))return this.is_full_text(n)&&(n=n.slice(1,-1)),this.quote(n);var o=this.fields[t],t=null;3<e.length&&(t=e[3]),i.contains("ilike")&&(this.is_full_text(n)?n=n.slice(1,-1):this.is_like(n)||(i="ilike"==i?"=":"!",n=this.unescape(n)));e=this.default_operator(o);e==i.trim()?(i="",~this.OPERATORS.indexOf(n)&&(i='"" ')):i.contains(e)&&(i.contains("not")||i.contains("!"))&&(i=i.replace(e,"").replace("not","!").trim()),i.endsWith("in")&&(i="not in"==i?"!":"");t=this.format_value(o,n,t);return~this.OPERATORS.indexOf(i)&&~["char","text","selection"].indexOf(o.type)&&""===n&&(t='""'),this.quote(o.string)+": "+i+t}).bind(this);if(jQuery.isEmptyObject(e))return"";var i=" ";return"AND"!=e[0]&&"OR"!=e[0]||("OR"==e[0]&&(i=" or "),e=e.slice(1)),e.map(t).join(i)},completion:function(e){var t=[],i=this.parse(e),n=0;for(_=e.length;0<_&&(")"!=e[_]&&" "!=e[_]);_--)")"==e[_]&&(n+=1);var o=this.ending_clause(i),s=o[0],r=o[1]-n,o=this.string(i);(o=0<r?o.substring(0,o.length-r):o)!=e&&t.push(o);function a(e,t){return 0<t?e.substring(0,e.length-t):e}var c,l,d,h;if(null!==s&&0===n)for(var u=this.complete(s),_=0,m=u.length;_<m;_++)c=u[_],c=this.string(this.replace_ending_clause(i,c)),t.push(a(c,r));if(0<e.length){if(" "!=e.substr(e.length-1,1))return t;if(2<=e.length||":"==e.substr(e.length-2,1))return t}for(h in this.strings){l=this.strings[h],p="","ilike"!=(d=this.default_operator(l))&&"not ilike"!=d||(p=this.likify(p));var p=this.append_ending_clause(i,[l.name,d,p],r),p=this.string(p);t.push(a(p,r))}return t},complete:function(e){var t,i,n,o,s=[];if(1==e.length?t=e[0]:3==e.length?(t=e[0],i=e[1],n=e[2]):(t=e[0],i=e[1],n=e[2],e[3],t.endsWith(".rec_name")&&(t=t.substring(0,t.length-9))),"rec_name"==t&&("ilike"==i&&((e=n.replace(/%%/g,"__")).startsWith("%")||e.endsWith("%")?n=e.substring(1,e.length-1):~e.indexOf("%")&&(n=n.replace(/%%/g,"%")),i=null),t=n,n=""),!((t=null==t?"":t).toLowerCase()in this.strings||t in this.fields)){for(var r in this.strings)(o=this.strings[r]).string.toLowerCase().startsWith(t.toLowerCase())&&(n="","ilike"==(i=this.default_operator(o))&&(n=this.likify(n)),s.push([o.name,i,n]));return s}if(o=t in this.fields?this.fields[t]:this.strings[t.toLowerCase()],i)for(var a=this.complete_value(o,n),c=0,l=a.length;c<l;c++)s.push([o.name,i,a[c]]);else n="","ilike"!=(i=this.default_operator(o))&&"not ilike"!=i||(n=this.likify(n)),s.push([o.name,i,n]);return s},is_subdomain:function(e){return e instanceof Array&&!e.clause},ending_clause:function(e,t){if(void 0===t&&(t=0),0===e.length)return[null,t];e=e[e.length-1];return this.is_subdomain(e)?this.ending_clause(e,t+1):[e,t]},replace_ending_clause:function(e,t){for(var i=[],n=0,o=e.length-1;n<o;n++)i.push(e[n]);return this.is_subdomain(e[n])?i.push(this.replace_ending_clause(e[n],t)):i.push(t),i},append_ending_clause:function(e,t,i){if(0===e.length)return[t];var n=e.slice(0,-1),e=e[e.length-1];return this.is_subdomain(e)?n.push(this.append_ending_clause(e,t,i-1)):(n.push(e),0===i&&n.push(t)),n},complete_value:function(s,r){var e=function(){for(var e,t=[],i=null!==r?r:"",i=(i=r instanceof Array?r[r.length-1]||"":i).replace(/^%*|%*$/g,""),n=0,o=s.selection.length;n<o;n++)e=s.selection[n][0],s.selection[n][1].toLowerCase().startsWith(i.toLowerCase())&&(r instanceof Array?t.push(r.slice(0,-1).concat([e])):t.push(e));return t},e={boolean:function(){return null==r?[!0,!1]:r?[!1]:[!0]},selection:e,multiselection:e,reference:function(){for(var e,t=[],i=null!==r?r:"",i=(i=r instanceof Array?r[r.length-1]:i).replace(/^%*|%*$/g,""),n=0,o=s.selection.length;n<o;n++)e=s.selection[n][0],s.selection[n][1].toLowerCase().startsWith(i.toLowerCase())&&(r instanceof Array?t.push(r.slice(0,-1).concat([e])):t.push(this.likify(e)));return t}.bind(this),datetime:function(){return[Sao.Date(),Sao.DateTime().utc()]},date:function(){return[Sao.Date()]},time:function(){return[Sao.Time()]}};return s.type in e?e[s.type]():[]},group_operator:function(e){var t=e[0],i=[];return e.slice(1).forEach(function(e){t="="==e&&t&&~this.OPERATORS.indexOf(t+e)?(i.push(t+e),null):(null!==t&&i.push(t),e)}.bind(this)),null!==t&&i.push(t),i},parenthesize:function(e){var t=[],i=t,n=[];return e.forEach(function(e,t){void 0!==i&&("("==e?(n.push(i),i=i[i.push([])-1]):")"==e?i=n.pop():i.push(e))}),t},group:function(e){var t=[],l=(l=function(e){function t(e){(e=[e]).clause=!0,o.push(e)}var o=[],i=e.indexOf(":");if(!~i)return e.forEach(t),o;for(var n=0;n<i;n++)if((s=e.slice(n,i).join(" ")).toLowerCase()in this.strings){jQuery.isEmptyObject(e.slice(0,n))?t(null):e.slice(0,n).forEach(t);var s=[s],r=[""].concat(this.OPERATORS);i+1<e.length&&~r.indexOf(e[i+1])?(s=s.concat([e[i+1]]),i+=1):s=s.concat([null]);for(var a,c=[];i+2<e.length&&";"==e[i+2];)c.push(e[i+1]),i+=2;l(e.slice(i+1)).forEach(function(i,n){return function(e){var t;jQuery.isEmptyObject(i)?o.push(e):(jQuery.isEmptyObject(n)?(t=i.concat(e)).clause=!0:(null!==e[0]&&n.push(e[0]),(t=i.concat([n])).clause=!0),o.push(t),i.splice(0,i.length))}}(s,c)),jQuery.isEmptyObject(s)||(jQuery.isEmptyObject(c)?(a=s.concat([null])).clause=!0:(a=s.concat([c])).clause=!0,o.push(a));break}return o}).bind(this),i=[];return e.forEach(function(e){this.is_generator(e)?(l(i).forEach(function(e){Sao.common.compare(e,[null])||t.push(e)}),i=[],t.push(this.group(e))):i.push(e)}.bind(this)),l(i).forEach(function(e){Sao.common.compare(e,[null])||t.push(e)}),t},is_generator:function(e){return e instanceof Array&&void 0===e.clause},operatorize:function(e,t){var i=[];t=t||"or";for(var n=function(e){return e instanceof Array?Sao.common.compare(e,[t]):e==t},o=(e=jQuery.extend([],e)).shift();n(o);)o=e.shift();if(void 0===o)return i;this.is_generator(o)&&(o=this.operatorize(o,t));for(var s=null;!jQuery.isEmptyObject(e);)if(s=e.shift(),n(s=this.is_generator(s)&&!n(s)?this.operatorize(s,t):s)){for(s=e.shift();n(s);)s=e.shift();void 0!==(s=this.is_generator(s)?this.operatorize(s,t):s)?o=[t.toUpperCase(),o,s]:n(o)||(i.push([t.toUpperCase(),o]),o=null),s=null}else n(o)||i.push(o),o=s;return jQuery.isEmptyObject(e)&&(null===s||n(s)?null===o||n(o)||i.push(o):i.push(s)),i},_clausify:function(e){return e.clause=!0,e},parse_clause:function(e){var c=[];return e.forEach(function(e){var t,i,n,o,s,r,a;this.is_generator(e)?c.push(this.parse_clause(e)):"OR"===e||"AND"===e?c.push(e):1!=e.length||e[0]instanceof Array?3==e.length&&e[0].toLowerCase()in this.strings&&(e[0],t=e[1],s=e[2],n=(i=this.strings[e[0].toLowerCase()]).name,o=null,"reference"==i.type?(o=(r=this.split_target_value(i,s))[0],s=r[1],o&&(n+=".rec_name")):"multiselection"==i.type&&(null===s||s instanceof Array||(s=[s])),t=t||this.default_operator(i),"!"==(t=s instanceof Array&&"multiselection"!=i.type?"!"==t?"not in":"in":t)&&(t=this.negate_operator(this.default_operator(i))),null===s&&t.endsWith("in")&&(t=t.startsWith("not")?"!=":"="),~["integer","float","numeric","datetime","date","time"].indexOf(i.type)&&"string"==typeof s&&s.contains("..")?(a=s.split("..",2),r=this.convert_value(i,a[0],this.context),a=this.convert_value(i,a[1],this.context),c.push([this._clausify([n,">=",r]),this._clausify([n,"<=",a])])):(s instanceof Array?(s=s.map(function(e){return this.convert_value(i,e,this.context)}.bind(this)),~["many2one","one2many","many2many","one2one","many2many","one2one"].indexOf(i.type)&&(n+=".rec_name")):s=this.convert_value(i,s,this.context),t.contains("like")&&(s=this.likify(s)),o?c.push(this._clausify([n,t,s,o])):c.push(this._clausify([n,t,s])))):c.push(this._clausify(["rec_name","ilike",this.likify(e[0])]))}.bind(this)),c},likify:function(e,t){if(!e)return"%";t=e.replace((t=t||"\\")+"%","").replace(t+"_","");return t.contains("%")||t.contains("_")?e:"%"+e+"%"},is_full_text:function(e,t){t=t||"\\";for(var i=e;"%"==i.charAt(0);)i=i.substring(1);for(;"%"==i.charAt(i.length-1);)i=i.substring(0,i.length-1);return!(i=i.replace(t+"%","").replace(t+"_","")).contains("%")&&!i.contains("_")&&(e.startsWith("%")&&e.endsWith("%"))},is_like:function(e,t){t=e.replace((t=t||"\\")+"%","").replace(t+"_","");return t.contains("%")||t.contains("_")},unescape:function(e,t){return e.replace((t=t||"\\")+"%","%").replace(t+"_","_")},quote:function(e){if("string"!=typeof e)return e;(e=e.contains("\\")?e.replace(new RegExp("\\\\","g"),"\\\\"):e).contains('"')&&(e=e.replace(new RegExp('"',"g"),'\\"'));for(var t=[":"," ","(",")"].concat(this.OPERATORS),i=0;i<t.length;i++){var n=t[i];if(e.contains(n))return'"'+e+'"'}return e},default_operator:function(e){return~["char","text","many2one","many2many","one2many","reference","one2one"].indexOf(e.type)?"ilike":"multiselection"==e.type?"in":"="},negate_operator:function(e){switch(e){case"ilike":return"not ilike";case"=":return"!=";case"in":return"not in"}},time_format:function(e){return new Sao.PYSON.Decoder({}).decode(e.format)},split_target_value:function(e,t){var i=null;if("string"==typeof t)for(var n=0;n<e.selection.length;n++){var o=e.selection[n],s=o[0],o=o[1];if(t.toLowerCase().startsWith(o.toLowerCase()+",")){i=s,t=t.slice(o.length+1);break}}return[i,t]},convert_value:function(n,o,e){e=e||{};var t=function(){if("string"==typeof o)for(var e=0;e<n.selection.length;e++){var t=n.selection[e],i=t[0],t=t[1];if(o.toLowerCase()==t.toLowerCase())return i}return o},t={boolean:function(){return"string"==typeof o?[Sao.i18n.gettext("y"),Sao.i18n.gettext("Yes"),Sao.i18n.gettext("True"),Sao.i18n.gettext("t"),"1"].some(function(e){return e.toLowerCase().startsWith(o.toLowerCase())}):null},float:function(){var e=Number(n.factor||1),t=Number(o);return isNaN(t)||""===o||null===o?null:t/e},integer:function(){var e=Number(n.factor||1,10),t=parseInt(o,10);return isNaN(t)?null:t/e},numeric:function(){var e=Number(n.factor||1),t=Number(o);return isNaN(t.valueOf())||""===o||null===o?null:new Sao.Decimal(t/e)},selection:t,multiselection:t,reference:t,datetime:function(){return Sao.common.parse_datetime(Sao.common.date_format(e.date_format)+" "+this.time_format(n),o)}.bind(this),date:function(){return Sao.common.parse_date(Sao.common.date_format(e.date_format),o)},time:function(){try{return Sao.common.parse_time(this.time_format(n),o)}catch(e){return null}}.bind(this),timedelta:function(){var e=null;return n.converter&&(e=this.context[n.converter]),Sao.common.timedelta.parse(o,e)}.bind(this),many2one:function(){return""===o?null:o}}[n.type];return t?t():o},format_value:function(o,s,t,e){void 0===t&&(t=null),e=e||{};function i(){if(o.selection instanceof Array)for(var e=0;e<o.selection.length;e++)if(o.selection[e][0]==s)return o.selection[e][1];return s||""}var n=function(){if(!s&&0!==s&&s!==new Sao.Decimal(0))return"";var e,t=0,i=Number(o.factor||1),n=String(s*i);return n.contains("e")&&(e=n.split("e")[1],n=n.split("e")[0],t-=parseInt(e)),n.contains(".")&&(t+=n.replace(/0+$/,"").split(".")[1].length),(s*i).toFixed(t)},n={boolean:function(){return!1===s?Sao.i18n.gettext("False"):s?Sao.i18n.gettext("True"):""},integer:function(){var e=Number(o.factor||1);return s||0===s?""+parseInt(parseInt(s,10)*e,10):""},float:n,numeric:n,selection:i,multiselection:i,reference:function(){if(!t)return i();for(var e=0;e<o.selection.length;e++)if(o.selection[e][0]==t){t=o.selection[e][1];break}return t+","+s},datetime:function(){return s?s.isDate||!(s.hour()||s.minute()||s.second())?Sao.common.format_date(Sao.common.date_format(e.date_format),s):Sao.common.format_datetime(Sao.common.date_format(e.date_format)+" "+this.time_format(o),s):""}.bind(this),date:function(){return Sao.common.format_date(Sao.common.date_format(e.date_format),s)},time:function(){return s?Sao.common.format_time(this.time_format(o),s):""}.bind(this),timedelta:function(){if(!s||!s.valueOf())return"";var e=null;return o.converter&&(e=this.context[o.converter]),Sao.common.timedelta.format(s,e)}.bind(this),many2one:function(){return null===s?"":s}};if(s instanceof Array)return s.map(function(e){return this.format_value(o,e)}.bind(this)).join(";");n=n[o.type];return n?this.quote(n(s)):null===s?"":this.quote(s)},simplify:function(e){return this.is_subdomain(e)?1==e.length&&this.is_subdomain(e[0])?this.simplify(e[0]):2!=e.length||"AND"!=e[0]&&"OR"!=e[0]||!this.is_subdomain(e[1])?(e=3==e.length&&("AND"==e[0]||"OR"==e[0])&&this.is_subdomain(e[1])&&e[0]==e[1][0]?this.simplify(e[1]).concat([e[2]]):e).map(this.simplify.bind(this)):this.simplify(e[1]):e}}),Sao.common.DomainInversion=Sao.class_(Object,{and:function(e,t){return e&&t},or:function(e,t){return e||t},OPERATORS:{"=":function(e,t){return Sao.common.DomainInversion.equals(e,t)},">":function(e,t){return t<e},"<":function(e,t){return e<t},"<=":function(e,t){return e<=t},">=":function(e,t){return t<=e},"!=":function(e,t){return!Sao.common.DomainInversion.equals(e,t)},in:function(e,t){return Sao.common.DomainInversion.in_(e,t)},"not in":function(e,t){return!Sao.common.DomainInversion.in_(e,t)},like:function(e,t){return Sao.common.DomainInversion.sql_like(e,t,!1)},ilike:function(e,t){return Sao.common.DomainInversion.sql_like(e,t,!0)},"not like":function(e,t){return!Sao.common.DomainInversion.sql_like(e,t,!1)},"not ilike":function(e,t){return!Sao.common.DomainInversion.sql_like(e,t,!0)},child_of:function(){return!0},"not child_of":function(){return!0}},locale_part:function(e,t,i){return void 0===i&&(i="id"),e===t?i:e.contains(".")?e.split(".").slice(1).join("."):e},is_leaf:function(e){return e instanceof Array&&2<e.length&&"string"==typeof e[1]},constrained_leaf:function(e,t){void 0===t&&(t=this.and);e[0];var i=e[1];e[2];return!!("="===i&t===this.and)},eval_leaf:function(e,t,i){void 0===i&&(i=this.and);var n=e[0],i=e[1],e=e[2];if(n.contains("."))return Boolean(t[n.split(".")[0]]);n=t[n];return~["=","!="].indexOf(i)||null!=n&&null!=e||~["in","not in"].indexOf(i)&&null==n&&e instanceof Array&&~e.indexOf(null)?((n=(e=n&&n._isAMomentObject&&!e?(n.isDateTime?Sao.DateTime:Sao.Date).min:e)&&e._isAMomentObject&&!n?(e.isDateTime?Sao.DateTime:Sao.Date).min:n)instanceof Array&null===e&&(e=[]),"string"==typeof n&&e instanceof Array&&2==e.length?e=e.join(","):n instanceof Array&&"string"==typeof e&&2==n.length&&(n=n.join(",")),!((i=~["=","!="].indexOf(i)&&n instanceof Array&&"number"==typeof e?{"=":"in","!=":"not in"}[i]:i)in this.OPERATORS)||this.OPERATORS[i](n,e)):void 0},inverse_leaf:function(e){return~["AND","OR"].indexOf(e)?e:this.is_leaf(e)?!e[1].contains("child_of")||e[0].contains(".")||3==e.length?e:[e[3]].concat(e.slice(1)):e.map(this.inverse_leaf.bind(this))},filter_leaf:function(e,t,i){return~["AND","OR"].indexOf(e)?e:this.is_leaf(e)?e[0].startsWith(t)&&3<e.length&&e[3]!==i?["id","=",null]:e:e.map(function(e){return this.filter_leaf(e,t,i)}.bind(this))},eval_domain:function(e,t,i){return void 0===i&&(i=this.and),this.is_leaf(e)?this.eval_leaf(e,t,i):!(!jQuery.isEmptyObject(e)||i!=this.and)||(!jQuery.isEmptyObject(e)||i!=this.or)&&("AND"==e[0]?this.eval_domain(e.slice(1),t):"OR"==e[0]?this.eval_domain(e.slice(1),t,this.or):i(Boolean(this.eval_domain(e[0],t)),Boolean(this.eval_domain(e.slice(1),t,i))))},localize_domain:function(e,t,i){if(~["AND","OR",!0,!1].indexOf(e))return e;if(this.is_leaf(e)){if(e[1].contains("child_of"))return 1<e[0].split(".").length?[e[0].split(".").slice(1).join(".")].concat(e.slice(1)):3==e.length?e:[e[3]].concat(e.slice(1,-1));var n="id";"string"==typeof e[2]&&(n="rec_name");var o=i?3:4;return[this.locale_part(e[0],t,n)].concat(e.slice(1,o)).concat(e.slice(4))}return e.map(function(e){return this.localize_domain(e,t,i)}.bind(this))},prepare_reference_domain:function(e,t){function i(e){var t,i,n=null,o=null;return"string"==typeof e&&e.contains(",")?((i=(t=e.split(",")).splice(0,1)).push(t.join(",")),n=i[0],"%"!=(o=i[1])&&(o=parseInt(o,10),isNaN(o)&&(n=null,o=e))):o=e instanceof Array&&2==e.length&&"string"==typeof e[0]&&("number"==typeof e[1]||"%"==e[1])?(n=e[0],e[1]):e,[n,o]}var n,o,s;if(~["AND","OR"].indexOf(e))return e;if(this.is_leaf(e)){if(e[0]!=t)return e;if("="==e[1]||"!="==e[1]){if(n=(s=i(e[2]))[0],o=s[1],n)return"%"==o?"="==e[1]?[t+".id","!=",null,n]:[t,"not like",e[2]]:[t+".id",e[1],o,n]}else if("in"==e[1]||"not in"==e[1]){for(var r={},a=!1,c=0;c<e[2].length;c++){if(n=(s=i(e[2][c]))[0],o=s[1],!n){a=!0;break}n in r||(r[n]=[]),r[n].push(o)}if(!a){var l,d="in"==e[1]?["OR"]:["AND"];for(n in r)~(l=r[n]).indexOf("%")?"in"==e[1]?d.push([t+".id","!=",null,n]):d.push([t,"not like",n+",%"]):d.push([t+".id",e[1],l.map(Number),n]);return d}}return[]}return e.map(function(e){return this.prepare_reference_domain(e,t)}.bind(this))},extract_reference_models:function(e,s){if(~["AND","OR"].indexOf(e))return[];if(this.is_leaf(e))return e[0].split(".",1)[0]==s&&3<e.length?[e[3]]:[];var r=[];return e.map(function(e){for(var t=this.extract_reference_models(e,s),i=0,n=t.length;i<n;i++){var o=t[i];~r.indexOf(o)||r.push(o)}}.bind(this)),r},simplify:function(e){return this.is_leaf(e)||~["OR","AND"].indexOf(e)?e:e instanceof Array&&1==e.length&&~["OR","AND"].indexOf(e[0])?[]:e instanceof Array&&1==e.length&&!this.is_leaf(e[0])?this.simplify(e[0]):e instanceof Array&&2==e.length&&~["AND","OR"].indexOf(e[0])?[this.simplify(e[1])]:e.map(this.simplify.bind(this))},merge:function(e,t){if(jQuery.isEmptyObject(e)||~["AND","OR"].indexOf(e))return[];var i="OR"==e[0]?"OR":"AND";return this.is_leaf(e)?[e]:void 0===t?[i].concat([].concat.apply([],e.map(function(e){return this.merge(e,i)}.bind(this)))):i==t?[].concat.apply([],e.map(function(e){return this.merge(e,i)}.bind(this))):[this.merge(e)]},concat:function(e,t){var i=[];return t&&i.push(t),e.forEach(function(e){jQuery.isEmptyObject(e)||i.push(e)}),this.simplify(this.merge(i))},unique_value:function(e){if(e instanceof Array&&1==e.length){var t=(e=e[0])[0],i=e[2],n=0;if(4==e.length&&t.endsWith(".id")&&(n=1,i=[e[3],i]),t.split(".").length-1==n&&"="==e[1])return[!0,e[1],i]}return[!1,null,null]},parse:function(e){var t=Sao.common.DomainInversion.And,i=Sao.common.DomainInversion.Or;if(this.is_leaf(e))return e;if(jQuery.isEmptyObject(e))return new t([]);if("OR"===e[0])return new i(e.slice(1));i=0;return"AND"===e[0]&&(i=1),new t(e.slice(i))},domain_inversion:function(e,t,i){void 0===i&&(i={});e=this.parse(e);return!~e.variables.indexOf(t)||e.inverse(t,i)}}),Sao.common.DomainInversion.equals=function(e,t){return e instanceof Array&&t instanceof Array?Sao.common.compare(e,t):moment.isMoment(e)&&moment.isMoment(t)?e.isDate==t.isDate&&e.isDateTime==t.isDateTime&&e.valueOf()==t.valueOf():e instanceof Number||t instanceof Number?Number(e)===Number(t):e===t},Sao.common.DomainInversion.in_=function(e,t){if(e instanceof Array){if(t instanceof Array){for(var i=0,n=e.length;i<n;i++)if(~t.indexOf(e[i]))return!0;return!1}return Boolean(~e.indexOf(t))}return Boolean(~t.indexOf(e))},Sao.common.DomainInversion.sql_like=function(e,t,i){for(var n,o=!1,s=[],r=t.split(/(.|\\)/),a=1,c=r.length;a<c;a+=2)n=r[a],o?("%"==n||"_"==n?s.push(n):s.push("\\",n),o=!1):"\\"==n?o=!0:"_"==n?s.push("."):"%"==n?s.push(".*"):s.push(n);t.startsWith("%")||s.splice(0,0,"^"),t.endsWith("%")||s.push("$");i=i?"i":"";return new RegExp(s.join(""),i).test(e)},Sao.common.DomainInversion.And=Sao.class_(Object,{init:function(e){this.domain_inversion=new Sao.common.DomainInversion,this.branches=e.map(this.domain_inversion.parse.bind(this.domain_inversion)),this.variables=[];for(var t=0,i=this.branches.length;t<i;t++){var n=this.branches[t];this.domain_inversion.is_leaf(n)?this.variables.push(this.base(n[0])):n instanceof Sao.common.DomainInversion.And&&(this.variables=this.variables.concat(n.variables))}},base:function(e){return e.contains(".")?e.split(".")[0]:e},inverse:function(e,t){for(var i=Sao.common.DomainInversion,n=[],o=0,s=this.branches.length;o<s;o++){var r=this.branches[o];if(r instanceof i.And){var a=r.inverse(e,t),c="boolean"==typeof a;if(~r.variables.indexOf(e))if(c){if(!a)return!1}else n.push(a)}else if(this.domain_inversion.is_leaf(r)&&this.base(r[0])===e)n.push(r);else{a=r[0];if(a in t&&!(a in t&&(this.domain_inversion.eval_leaf(r,t,this.domain_inversion.and)||this.domain_inversion.constrained_leaf(r,this.domain_inversion.and))))return!1;n.push(!0)}}return n=n.filter(function(e){return!0!==e}),!!jQuery.isEmptyObject(n)||this.domain_inversion.simplify(n)}}),Sao.common.DomainInversion.Or=Sao.class_(Sao.common.DomainInversion.And,{inverse:function(t,i){var e=Sao.common.DomainInversion,n=[];if(!jQuery.isEmptyObject(this.variables.filter(function(e){return!(e in i)&&e!=t})))return!0;for(var o=0,s=this.branches.length;o<s;o++){var r=this.branches[o];if(r instanceof e.And){var a=r.inverse(t,i),c="boolean"==typeof a;if(~r.variables.indexOf(t))if(c){if(a)return!0}else n.push(a);else if(c&&a)return!0}else if(this.domain_inversion.is_leaf(r)&&this.base(r[0])==t)n.push(r);else{a=r[0];if((a=this.base(a))in i&&this.domain_inversion.eval_leaf(r,i,this.domain_inversion.or)||this.domain_inversion.constrained_leaf(r,this.domain_inversion.or))return!0;a in i&&!this.domain_inversion.eval_leaf(r,i,this.domain_inversion.or)&&n.push(!1)}}return n=n.filter(function(e){return!1!==e}),!jQuery.isEmptyObject(n)&&this.domain_inversion.simplify(["OR"].concat(n))}}),Sao.common.mimetypes={csv:"text/csv",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",gif:"image/gif",html:"text/html",jpeg:"image/jpeg",jpg:"image/jpeg",mpeg:"video/mpeg",mpg:"video/mpeg",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"audio/ogg",pdf:"application/pdf",png:"image/png",svg:"image/svg+xml",text:"text/plain",tif:"image/tif",tiff:"image/tif",txt:"text/plain",webp:"image/webp",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",xml:"application/xml",xpm:"image/x-xpixmap"},Sao.common.guess_mimetype=function(e){for(var t in Sao.common.mimetypes)if(new RegExp(".*."+t+"$","i").test(e))return Sao.common.mimetypes[t];return"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-question","tryton-refresh","tryton-remove","tryton-save","tryton-search","tryton-send","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(s){if(!(s=s||!1))for(var e in this.load_icons)this.load_icons.hasOwnProperty(e)&&window.URL.revokeObjectURL(this.load_icons[e]);return new Sao.Model("ir.ui.icon").execute("list_icons",[],{}).then(function(e){var t,i;s||(this.name2id={},this.loaded_icons={}),this.tryton_icons=[];for(var n=0,o=e.length;n<o;n++)t=e[n][0],i=e[n][1],s&&i in this.loaded_icons||(this.tryton_icons.push([t,i]),this.name2id[i]=t)}.bind(this))},register_icon:function(o){if(!o)return jQuery.when();if(o in this.loaded_icons||~Sao.common.LOCAL_ICONS.indexOf(o))return jQuery.when();if("pending"==this.register_prm.state())return this.register_prm.then(function(){return this.register_icon(o)}.bind(this));var e=o in this.name2id?jQuery.when():this.load_icons(!0),s=new Sao.Model("ir.ui.icon");return this.register_prm=e.then(function(){var i=function(e){for(var t=0,i=this.tryton_icons.length;t<i;t++){var n=this.tryton_icons[t];if(Sao.common.compare(n,e))break}return t}.bind(this),e=i([this.name2id[o],o]),t=(t=Math.round(e-this.batchnum/2))<0?0:t,e=Math.round(e+this.batchnum/2),n=[];return this.tryton_icons.slice(t,e).forEach(function(e){n.push(e[0])}),s.execute("read",[n,["name","icon"]],{}).then(function(e){e.forEach(function(e){var t=this._convert(e.icon);this.loaded_icons[e.name]=t,delete this.name2id[e.name],this.tryton_icons.splice(i([e.id,e.name]),1)}.bind(this))}.bind(this))}.bind(this)),this.register_prm},_convert:function(e){var t=jQuery.parseXML(e);jQuery(t).find("svg").attr("fill",Sao.config.icon_colors[0]),e=(new XMLSerializer).serializeToString(t);e=new Blob([e],{type:"image/svg+xml"});return window.URL.createObjectURL(e)},get_icon_url:function(t){return t?this.register_icon(t).then(function(){return t in this.loaded_icons?this.loaded_icons[t]:jQuery.get("images/"+t+".svg",null,null,"text").then(function(e){e=this._convert(e);return this.loaded_icons[t]=e}.bind(this))}.bind(this)):jQuery.when("")},get_icon_img:function(e,t){(t=t||{}).class||(t.class="icon");var i=jQuery("<img/>",t);return e&&this.get_icon_url(e).then(function(e){i.attr("src",e)}),i}}),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_,void 0,!1)},run:function(){if(this.running)return jQuery.when();var e=Array.prototype.slice.call(arguments),t=jQuery.Deferred();e.push(t);var i=this.build_dialog.apply(this,e);return i.content.submit(function(e){i.footer.find("button.btn-primary").first().click(),e.preventDefault()}.bind(this)),this.running=!0,i.modal.modal("show"),i.modal.on("shown.bs.modal",function(){i.modal.find("input,select").filter(":visible").first().focus()}),i.modal.on("keydown",function(e){e.which==Sao.common.ESC_KEYCODE&&(this.close(i),t.reject())}.bind(this)),t},close:function(e){e.modal.on("hidden.bs.modal",function(e){jQuery(this).remove()}),e.modal.modal("hide"),this.running=!1}}),Sao.common.MessageDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"message-dialog",build_dialog:function(e,t,i){var n=Sao.common.MessageDialog._super.build_dialog.call(this);return n.header.remove(),n.body.append(jQuery("<div/>",{class:"alert alert-info",role:"alert"}).append(Sao.common.ICONFACTORY.get_icon_img(t,{"aria-hidden":!0})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Message: "))).append(jQuery("<span/>").text(e).css("white-space","pre-wrap"))),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(n),i.resolve("ok")}.bind(this)).appendTo(n.footer),n},run:function(e,t){return Sao.common.MessageDialog._super.run.call(this,e,t||"tryton-info")}}),Sao.common.message=new Sao.common.MessageDialog,Sao.common.WarningDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"warning-dialog",build_dialog:function(e,t,i){var n=Sao.common.WarningDialog._super.build_dialog.call(this),t=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(t).css("white-space","pre-wrap"));return e&&t.append(jQuery("<span/>").text(e).css("white-space","pre-wrap")),n.body.append(t),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(n),i.resolve("ok")}.bind(this)).appendTo(n.footer),n}}),Sao.common.warning=new Sao.common.WarningDialog,Sao.common.UserWarningDialog=Sao.class_(Sao.common.WarningDialog,{class_:"user-warning-dialog",build_dialog:function(e,t,i){var n=Sao.common.UserWarningDialog._super.build_dialog.call(this,e,t,i),o=jQuery("<input/>",{type:"checkbox"});return n.body.append(jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>").text(Sao.i18n.gettext("Always ignore this warning.")).prepend(o))),n.body.append(jQuery("<p/>").text(Sao.i18n.gettext("Do you want to proceed?"))),n.footer.empty(),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("No")).click(function(){this.close(n),i.reject()}.bind(this)).appendTo(n.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("Yes")).click(function(){this.close(n),o.prop("checked")&&i.resolve("always"),i.resolve("ok")}.bind(this)).appendTo(n.footer),n}}),Sao.common.userwarning=new Sao.common.UserWarningDialog,Sao.common.ConfirmationDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"confirmation-dialog",build_dialog:function(e){var t=Sao.common.ConfirmationDialog._super.build_dialog.call(this);return t.header.remove(),t.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(e).css("white-space","pre-wrap"))),t}}),Sao.common.SurDialog=Sao.class_(Sao.common.ConfirmationDialog,{build_dialog:function(e,t){var i=Sao.common.SurDialog._super.build_dialog.call(this,e);return jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(i),t.reject()}.bind(this)).appendTo(i.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(i),t.resolve()}.bind(this)).appendTo(i.footer),i}}),Sao.common.sur=new Sao.common.SurDialog,Sao.common.Sur3BDialog=Sao.class_(Sao.common.ConfirmationDialog,{build_dialog:function(e,t){var i=Sao.common.SurDialog._super.build_dialog.call(this,e);return jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(i),t.resolve("cancel")}.bind(this)).appendTo(i.footer),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("No")).click(function(){this.close(i),t.resolve("ko")}.bind(this)).appendTo(i.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("Yes")).click(function(){this.close(i),t.resolve("ok")}.bind(this)).appendTo(i.footer),i}}),Sao.common.sur_3b=new Sao.common.Sur3BDialog,Sao.common.AskDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"ask-dialog",run:function(){var e=Array.prototype.slice.call(arguments);return 1==e.length&&e.push(!0),Sao.common.AskDialog._super.run.apply(this,e)},build_dialog:function(e,t,i){var n=Sao.common.AskDialog._super.build_dialog.call(this);n.header.remove();var o=jQuery("<input/>",{class:"form-control",type:t?"input":"password",id:"ask-dialog-entry"});return n.body.append(jQuery("<div/>",{class:"form-group"}).append(jQuery("<label/>",{for:"ask-dialog-entry"}).text(e)).append(o)),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(n),i.reject()}.bind(this)).appendTo(n.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(n),i.resolve(o.val())}.bind(this)).appendTo(n.footer),n}}),Sao.common.ask=new Sao.common.AskDialog,Sao.common.ConcurrencyDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"ask-dialog",build_dialog:function(t,i,n,o){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-info",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),o.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.rpc({method:"model."+t+".read",params:[[i],["rec_name"],n]},Sao.Session.current_session).then(function(e){e=e[0].rec_name;Sao.Tab.create({model:t,res_id:i,name:Sao.i18n.gettext("Compare: %1",e),domain:[["id","=",i]],context:n,mode:["form"]}),o.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),o.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(e,t,i){var n=Sao.common.ConcurrencyDialog._super.build_dialog.call(this);return n.modal.find(".modal-dialog").removeClass("modal-sm").addClass("modal-lg"),n.add_title(Sao.i18n.gettext("Application Error")),n.body.append(jQuery("<div/>",{class:"alert alert-danger",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(t))).append(jQuery("<p/>").append(jQuery("<a/>",{class:"btn btn-link",href:Sao.config.bug_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(n),i.resolve()}.bind(this)).appendTo(n.footer),n}}),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"});for(var e=jQuery("<span/>",{class:"label label-info",text:Sao.i18n.gettext("Processing")}).appendTo(this.el),t=0;t<3;t++)e.append(jQuery("<span/>",{class:"dot",text:"."}));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(e){window.clearTimeout(e),0<this.queries&&--this.queries,this.queries<=0&&(this.queries=0,this.el.hide())}}),Sao.common.processing=new Sao.common.Processing,Sao.common.set_overflow=function(e,t){var i,t="hide"==t?i="":(i="visible","none");e.closest(".treeview").css("overflow",i).css("max-height",t),e.closest(".modal-body").css("overflow",i),e.closest(".navbar-collapse.in").css("overflow-y",i),e.closest(".content-box").css("overflow-y",i),e.closest("fieldset.form-group_").css("overflow",i),Sao.common.scrollIntoViewIfNeeded(e)},Sao.common.InputCompletion=Sao.class_(Object,{init:function(e,t,i,n){e.is("input")?(e.wrap('<div class="dropdown"/>'),this.dropdown=e.parent()):(e.addClass("dropdown"),this.dropdown=e),this.input=e.find("input").add(e.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=t,this.match_selected=i,this.format=n,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(e){e.which==Sao.common.ESC_KEYCODE?this.dropdown.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),this.menu.dropdown("toggle")):e.which==Sao.common.DOWN_KEYCODE&&this.dropdown.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),this.menu.find("li > a").first().focus())}.bind(this)),this.menu.keydown(function(e){e.which==Sao.common.ESC_KEYCODE&&(e.preventDefault(),e.stopPropagation(),this.menu.dropdown("toggle"))}.bind(this)),this.dropdown.on("hide.bs.dropdown",function(){this.input.focus(),Sao.common.set_overflow(this.input,"hide")}.bind(this)),this.dropdown.on("show.bs.dropdown",function(){Sao.common.set_overflow(this.input,"show")}.bind(this))},set_actions:function(e,t){void 0!==t&&(this.action_activated=t),this.menu.find("li.action").remove(),jQuery.isEmptyObject(e)?this.separator.hide():(this.separator.show(),e.forEach(function(e){var t=e[0],e=e[1];jQuery("<li/>",{class:"action action-"+t}).append(jQuery("<a/>",{href:"#"}).text(this._format_action(e))).click(function(e){e.preventDefault(),this.action_activated&&this.action_activated(t),this.input.val("")}.bind(this)).appendTo(this.menu)},this))},_format:function(e){return this.format?this.format(e):jQuery("<span/>").text(e)},_format_action:function(e){return this.format_action?this.format_action(e):e},_input:function(t){t==this.input.val()&&(this.source instanceof Array?jQuery.when(source.filter(function(e){return e.toLowerCase().startsWith(t.toLowerCase())})):this.source(t)).then(function(e){t==this.input.val()&&this._set_selection(e)}.bind(this))},_set_selection:function(e){void 0===e&&(e=[]),this.menu.find("li.completion").remove(),e.reverse().forEach(function(t){jQuery("<li/>",{class:"completion"}).append(jQuery("<a/>",{href:"#"}).append(this._format(t))).click(function(e){e.preventDefault(),this.match_selected&&this.match_selected(t),this.input.focus()}.bind(this)).prependTo(this.menu)},this),this.input.val()&&(this.menu.find("li.completion").length||this.menu.find("li.action").length)?this.dropdown.hasClass("open")||this.menu.dropdown("toggle"):this.dropdown.hasClass("open")&&this.menu.dropdown("toggle")}}),Sao.common.get_completion=function(e,t,i,n){i=new Sao.common.InputCompletion(e,t,i,function(e){return e.rec_name});n&&i.set_actions([["search",Sao.i18n.gettext("Search...")],["create",Sao.i18n.gettext("Create...")]],n)},Sao.common.update_completion=function(e,t,i,n,o){var s=e.val();if(!s||!n)return jQuery.when();void 0===o&&(o=i.get_domain(t));e=i.get_search_context(t);o=[["rec_name","ilike",(0,(new Sao.common.DomainParser).likify)(s)],o];t=i.get_search_order(t);return new Sao.Model(n).execute("search_read",[o,0,Sao.config.limit,t,["rec_name"]],e)},Sao.common.Paned=Sao.class_(Object,{init:function(e){var t;this._orientation=e,this.el=jQuery("<div/>"),"horizontal"==e?(t=jQuery("<div/>",{class:"row"}).appendTo(this.el),this.child1=jQuery("<div/>",{class:"col-md-6"}).appendTo(t),this.child2=jQuery("<div/>",{class:"col-md-6"}).appendTo(t)):"vertical"==e&&(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(e){e=e.find("input","textarea");return e.sort(function(e,t){return"tabindex"in e.attributes&&"tabindex"in t.attributes?parseInt(e.attributes.tabindex.value)-parseInt(t.attributes.tabindex.value):"tabindex"in e.attributes?-1:"tabindex"in t.attributes?1:0}),e},Sao.common.find_focusable_child=function(e){var t,i,n,o;if(!e.is(":visible"))return null;if(~["input","select","textarea"].indexOf(e[0].tagName.toLowerCase())&&!e.prop("readonly"))return e;for(t=0,i=(n=Sao.common.get_focus_chain(e)).length;t<i;t++)if(o=Sao.common.find_focusable_child(jQuery(n[t])))return o},Sao.common.find_first_focus_widget=function(e,t){var i,n,o,s;if(1==t.length)return jQuery(t[0]);for(o=Sao.common.get_focus_chain(e),i=0;i<o.length;i++){for(s=[],n=0;n<t.length;n++)0<jQuery(t[n]).closest(o[i]).length&&s.push(t[n]);if(0<s.length)return Sao.common.find_first_focus_widget(jQuery(o[i]),s)}},Sao.common.apply_label_attributes=function(e,t,i){t?e.removeClass("editable required"):(e.addClass("editable"),i?e.addClass("required"):e.removeClass("required"))},Sao.common.download_file=function(e,t,i){void 0===i&&(i={type:Sao.common.guess_mimetype(t)});var n,o,e=new Blob([e],i);window.navigator&&window.navigator.msSaveOrOpenBlob?window.navigator.msSaveOrOpenBlob(e,t):(i=window.URL.createObjectURL(e),n=new Sao.Dialog(Sao.i18n.gettext("Download")),e=function(){n.modal.modal("hide")},o=jQuery("<a/>",{href:i,download:t,text:t,target:"_blank"}).appendTo(n.body).click(e),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("Close")).click(e).appendTo(n.footer),n.modal.on("shown.bs.modal",function(){o[0].click()}),n.modal.modal("show"),n.modal.on("hidden.bs.modal",function(){jQuery(this).remove(),window.URL.revokeObjectURL(this.blob_url)}))},Sao.common.get_input_data=function(e,t,i){for(var n=0;n<e[0].files.length;n++)Sao.common.get_file_data(e[0].files[n],t,i)},Sao.common.get_file_data=function(t,i,n){var o=new FileReader;o.onload=function(){var e=new Uint8Array(o.result);n&&(e=String.fromCharCode.apply(null,e)),i(e,t.name)},o.readAsArrayBuffer(t)},Sao.common.ellipsize=function(e,t){if(e.length<=t)return e;var i=Sao.i18n.gettext("...");return e.slice(0,t-i.length)+i},Sao.common.debounce=function(t,i){return function(){var e=[].slice(arguments);clearTimeout(t._debounceTimeout),t._debounceTimeout=setTimeout(function(){t.apply(this,e)}.bind(this),i)}.bind(this)},Sao.common.uuid4=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})},Sao.common.COLOR_SCHEMES={red:"#cf1d1d",green:"#3fb41b",blue:"#224565",grey:"#444444",black:"#000000",darkcyan:"#305755"},Sao.common.hex2rgb=function(e,t){t=t||2;var i=parseInt("f".repeat(t),16);return[parseInt(e.substring(1,t+1),16)/i,parseInt(e.substring(t+1,2*t+1),16)/i,parseInt(e.substring(2*t+1,3*t+1),16)/i]},Sao.common.rgb2hex=function(e,t){t=t||2;var i=parseInt("f".repeat(t),16);return"#"+e.map(function(e){return Math.round(e*i).toString(16)}).join("")},Sao.common.rgb2hsv=function(e){var t=e[0],i=e[1],n=e[2],o=Math.max.apply(null,e),s=Math.min.apply(null,e);if(s==o)return[0,0,o];var r=(o-t)/(o-s),e=(o-i)/(o-s),n=(o-n)/(o-s),r=t==o?n-e:i==o?2+r-n:4+e-r;return[r=r/6%1,(o-s)/o,o]},Sao.common.hsv2rgb=function(e){var t=e[0],i=e[1],n=e[2];if(0==i)return[n,n,n];var o=Math.trunc(6*t),s=6*t-o,e=n*(1-i),t=n*(1-i*s),s=n*(1-i*(1-s));return 0==(o%=6)?[n,s,e]:1==o?[t,n,e]:2==o?[e,n,s]:3==o?[e,t,n]:4==o?[s,e,n]:5==o?[n,e,t]:void 0},Sao.common.generateColorscheme=function(e,t,i){void 0===i&&(i=.1);var e=Sao.common.hex2rgb(Sao.common.COLOR_SCHEMES[e]||e),e=Sao.common.rgb2hsv(e),n=e[0],o=e[1],s=e[2];t.length&&(i=Math.min(i,(1-s)/t.length));for(var r={},a=0;a<t.length;a++)r[t[a]]=Sao.common.rgb2hex(Sao.common.hsv2rgb([(n+.618033988749895*a)%1,o,(s+i*a)%1]));return r},Sao.common.richtext_toolbar=function(){function o(e){document.execCommand(e.data)}function e(e){var t,i=jQuery("<div/>",{class:"btn-group",role:"group"}).appendTo(s);for(t in e){var n=e[t];jQuery("<button/>",{class:"btn btn-default",type:"button"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-format-"+n.icon)).appendTo(i).click(n.command,o)}}var s=jQuery("<div/>",{class:"btn-toolbar",role:"toolbar"});e([{icon:"bold",command:"bold"},{icon:"italic",command:"italic"},{icon:"underline",command:"underline"}]);var t,i=[{heading:Sao.i18n.gettext("Font"),options:["Normal","Serif","Sans","Monospace"],command:"fontname"},{heading:Sao.i18n.gettext("Size"),options:[1,2,3,4,5,6,7],command:"fontsize"}];for(t in i){var n=i[t],r=jQuery("<div/>",{class:"btn-group",role:"group"}).appendTo(s),r=(jQuery("<button/>",{class:"btn btn-default dropdown-toggle",type:"button","data-toggle":"dropdown","aria-expanded":!1,"aria-haspopup":!0}).append(n.heading).append(jQuery("<span/>",{class:"caret"})).appendTo(r),jQuery("<ul/>",{class:"dropdown-menu"}).appendTo(r));n.options.forEach(function(e,i){return function(t){e.append(jQuery("<li/>").append(jQuery("<a/>",{href:"#"}).text(t).click(function(e){e.preventDefault(),document.execCommand(i.command,!1,t)})))}}(r,n))}return e([{icon:"align-left",command:Sao.i18n.rtl?"justifyRight":"justifyLeft"},{icon:"align-center",command:"justifyCenter"},{icon:"align-right",command:Sao.i18n.rtl?"justifyLeft":"justifyRight"},{icon:"align-justify",command:"justifyFull"}]),[["foreColor","#000000"]].forEach(function(e){var t=e[0],e=e[1];jQuery("<input/>",{class:"btn btn-default",type:"color"}).appendTo(s).change(function(){document.execCommand(t,!1,jQuery(this).val())}).focusin(function(){document.execCommand(t,!1,jQuery(this).val())}).val(e)}),s},Sao.common.richtext_normalize=function(e){e=jQuery("<div/>").html(e);return e.find("div").each(function(e,t){var i;(t=jQuery(t)).css("text-align")&&(i=t.css("text-align").split("-").pop(),t.attr("align",i),t.css("text-align","")),"start"==t.attr("align")&&(Sao.i18n.rtl?t.attr("align","right"):t.attr("align","left"))}),e.html()}}(),function(){"use strict";Sao.Model=Sao.class_(Object,{init:function(e,t){this.name=e,this.session=Sao.Session.current_session,this.fields={}},add_fields:function(e){var t,i=[];for(t in e){var n,o=e[t];t in this.fields?jQuery.extend(this.fields[t].description,o):(n=Sao.field.get(o.type),this.fields[t]=new n(o),i.push(t))}return i},execute:function(e,t,i,n){i={method:"model."+this.name+"."+e,params:t.concat(i=void 0===i?{}:i)};return Sao.rpc(i,this.session,n)},copy:function(e,t){if(jQuery.isEmptyObject(e))return jQuery.when();e=e.map(function(e){return e.id});return this.execute("copy",[e,{}],t)}}),Sao.Group=function(e,t,i){return i.prm=jQuery.when(),i.model=e,i._context=t,i.on_write=[],i.parent=void 0,i.screens=[],i.parent_name="",i.children=[],i.child_name="",i.parent_datetime_field=void 0,i.record_removed=[],i.record_deleted=[],i.__readonly=!1,i.exclude_field=null,i.skip_model_access=!1,i.forEach(function(e,t,i){e.group=i}),Object.defineProperty(i,"readonly",{get:function(){var e=Sao.common.MODELACCESS.get(this.model.name);return!(!this.context._datetime&&(e.write||e.create||this.skip_model_access))||this.__readonly},set:function(e){this.__readonly=e}}),i.load=function(e,t,i){void 0!==i&&-1!=i||(i=this.length);for(var n=[],o=0,s=e.length;o<s;o++){var r=e[o],a=this.get(r);a||(((a=new Sao.Record(this.model,r)).group=this).splice(i,0,a),i+=1),n.push(a)}var c,l=[];for(o=0,s=this.record_removed.length;o<s;o++)c=this.record_removed[o],~e.indexOf(c.id)||l.push(c);this.record_removed=l;var d=[];for(o=0,s=this.record_deleted.length;o<s;o++)c=this.record_deleted[o],~e.indexOf(c.id)||d.push(c);this.record_deleted=d,n.length&&t&&(n.forEach(function(e){e._changed.id=!0}),t=this.root_group,this.changed(),t.screens.forEach(function(e){e.display()}))},i.get=function(e){for(var t=0,i=this.length;t<i;t++){var n=this[t];if(n.id==e)return n}},i.new_=function(e,t,i){t=new Sao.Record(this.model,t);return t.group=this,e&&t.default_get(i),t},i.add=function(e,t,i){for(var n in void 0!==t&&-1!=t||(t=this.length),t=Math.min(t,this.length),void 0===i&&(i=!0),e.group!=this&&(e.group=this),this.indexOf(e)<0&&this.splice(t,0,e),this.record_removed)n.id==e.id&&this.record_removed.splice(this.record_removed.indexOf(n),1);for(var o in this.record_deleted)o.id==e.id&&this.record_deleted.splice(this.record_deleted.indexOf(o),1);return e._changed.id=!0,i&&(this.changed(),this.parent&&this.model.fields[this.parent_name]&&(((t=this.model.fields[this.parent_name])instanceof Sao.field.Many2One||t instanceof Sao.field.Reference)&&(i=[this.parent.id,""],t instanceof Sao.field.Reference&&(i=[this.parent.model.name,i]),t.set_client(e,i)))),e},i.remove=function(e,t,i,n,o){void 0===i&&(i=!0),void 0===o&&(o=!0);this.indexOf(e);0<=e.id&&(t?(~this.record_deleted.indexOf(e)&&this.record_deleted.splice(this.record_deleted.indexOf(e),1),~this.record_removed.indexOf(e)||this.record_removed.push(e)):(~this.record_removed.indexOf(e)&&this.record_removed.splice(this.record_removed.indexOf(e),1),~this.record_deleted.indexOf(e)||this.record_deleted.push(e))),e.group.parent&&(e.group.parent._changed.id=!0),i&&(e._changed.id=!0),(e.id<0||n)&&this._remove(e),o&&e.group.changed()},i._remove=function(e){e=this.indexOf(e);this.splice(e,1)},i.unremove=function(e){this.record_removed.splice(this.record_removed.indexOf(e),1),this.record_deleted.splice(this.record_deleted.indexOf(e),1),e.group.changed()},i.clear=function(){this.splice(0,this.length),this.record_removed=[],this.record_deleted=[]},i.changed=function(){if(!this.parent)return jQuery.when.apply(jQuery,this.screens.map(function(e){return e.group_changed_callback&&e.group_changed_callback(),e.display()}));this.parent._changed[this.child_name]=!0,this.parent.model.fields[this.child_name].changed(this.parent),this.parent.validate(null,!0,!1,!0),this.parent.group.changed()},i.delete_=function(t){if(jQuery.isEmptyObject(t))return jQuery.when();var i=this.root_group;console.assert(t.every(function(e){return e.model.name==this.model.name}.bind(this)),"records not from the same model"),console.assert(t.every(function(e){return e.group.root_group==i}),"records not from the same root group"),t=t.filter(function(e){return 0<=e.id});var n=this.context;n._timestamp={},t.forEach(function(e){jQuery.extend(n._timestamp,e.get_timestamp())});var o=t.map(function(e){return e.id});return i.on_write_ids(o).then(function(e){return t.forEach(function(e){e.destroy()}),e=e.filter(function(e){return!~o.indexOf(e)}),this.model.execute("delete",[o],n).then(function(){i.reload(e)})}.bind(this))},Object.defineProperty(i,"root_group",{get:function(){for(var e=this,t=this.parent;t;)e=t.group,t=t.parent;return e}}),i.save=function(){var t=[];return this.forEach(function(e){t.push(e.save())}),jQuery.isEmptyObject(this.record_deleted)||(this.record_deleted.forEach(function(e){this._remove(e)}.bind(this)),t.push(this.delete_(this.record_deleted)),this.record_deleted.splice(0,this.record_deleted.length)),jQuery.when.apply(jQuery,t)},i.written=function(t){return"number"==typeof t&&(t=[t]),this.on_write_ids(t).then(function(e){e=e.filter(function(e){return!~t.indexOf(e)}),this.root_group.reload(e)}.bind(this))},i.reload=function(t){this.children.forEach(function(e){e.reload(t)}),t.forEach(function(e){e=this.get(e);e&&jQuery.isEmptyObject(e._changed)&&e.cancel()}.bind(this))},i.on_write_ids=function(t){var i=[],n=[];return this.on_write.forEach(function(e){e=this.model.execute(e,[t],this._context).then(function(e){jQuery.extend(n,e)});i.push(e)}.bind(this)),jQuery.when.apply(jQuery,i).then(function(){return n.filter(function(e,t,i){return t==i.indexOf(e)})})},i.set_parent=function(e){(this.parent=e)&&e.model.name==this.model.name&&this.parent.group.children.push(this)},i.add_fields=function(e){var i,e=this.model.add_fields(e);jQuery.isEmptyObject(this)||(i=[],this.forEach(function(e){e.id<0&&i.push(e)}),i.length&&e.length&&this.model.execute("default_get",[e,this.context]).then(function(t){i.forEach(function(e){e.set_default(t,!0,!1)}),this.root_group.screens.forEach(function(e){return e.display()})}.bind(this)))},i.destroy=function(){var e;!this.parent||~(e=this.parent.group.children.indexOf(this))&&this.parent.group.children.splice(e,1),this.parent=null},Object.defineProperty(i,"domain",{get:function(){var t=[];if(this.screens.forEach(function(e){e.attributes.domain&&t.push(e.attributes.domain)}),this.parent&&this.child_name){var e=this.parent.model.fields[this.child_name];return[t,e.get_domain(this.parent)]}return t}}),Object.defineProperty(i,"context",{get:function(){return this._get_context()},set:function(e){this._context=jQuery.extend({},e)}}),Object.defineProperty(i,"local_context",{get:function(){return this._get_context(!0)}}),i._get_context=function(e){var t,i,n=e?{}:jQuery.extend({},this.model.session.context);return this.parent&&(t=this.parent.get_context(e),jQuery.extend(n,t),this.child_name in this.parent.model.fields&&(i=this.parent.model.fields[this.child_name],jQuery.extend(n,i.get_context(this.parent,t,e)))),jQuery.extend(n,this._context),this.parent_datetime_field&&(n._datetime=this.parent.get_eval()[this.parent_datetime_field]),n},i.clean4inversion=function(e){if(jQuery.isEmptyObject(e))return[];var t=new Sao.common.DomainInversion,i=e[0],e=e.slice(1);return~["AND","OR"].indexOf(i)||(t.is_leaf(i)?(t=i[0])in this.model.fields&&this.model.fields[t].description.readonly&&(i=[]):i=this.clean4inversion(i)),[i].concat(this.clean4inversion(e))},i.domain4inversion=function(){var e=this.domain;return this.__domain4inversion&&Sao.common.compare(this.__domain4inversion[0],e)||(this.__domain4inversion=[e,this.clean4inversion(e)]),this.__domain4inversion[1]},i.get_by_path=function(i){i=jQuery.extend([],i);var n=null,o=this,s=function(){if(jQuery.isEmptyObject(i))return n;var e=i[0][0],t=i[0][1];return i.splice(0,1),(n=o.get(t))?e?n.load(e).then(function(){return(o=n._values[e])?s():null}):s():null};return jQuery.when().then(s)},i.set_sequence=function(e,t){for(var i,n,o,s,r=!1,a=null,c=0===t?function(e,t){return t<e}:function(e,t){return e<t},l=0;l<this.length;l++)((i=this[l]).get_loaded([e])||r||i.id<0)&&(n=a?a.field_get(e):null,o=!1,null===(s=i.field_get(e))?n?o=!0:a&&(0<=i.id?o=c(i.id,a.id):0===t&&(o=!0)):s===n?a&&(0<=i.id?o=c(i.id,a.id):0===t&&(o=!0)):s<=(n||0)&&(o=!0),o&&(null===n&&(n=0),i.field_set_client(e,n+=1),r=i)),a=i},i},Sao.Record=Sao.class_(Object,{id_counter:-1,init:function(e,t){this.model=e,this.group=Sao.Group(e,{},[]),this.id=null==t?Sao.Record.prototype.id_counter:t,this.id<0&&Sao.Record.prototype.id_counter--,this._values={},this._changed={},this._loaded={},this.fields={},this._timestamp=null,this._write=!0,this._delete=!0,this.resources=null,this.button_clicks={},this.links_counts={},this.state_attrs={},this.autocompletion={},this.exception=!1,this.destroyed=!1},has_changed:function(){return!jQuery.isEmptyObject(this._changed)},save:function(t){void 0===t&&(t=!1);var e=this.get_context(),i=jQuery.when();if(this.id<0||this.has_changed()){var n=this.get();if(this.id<0)try{this.id=this.model.execute("create",[[n]],e,!1)[0]}catch(e){return e.promise?e.then(function(){return this.save(t)}.bind(this)):jQuery.Deferred().reject()}else jQuery.isEmptyObject(n)||(e._timestamp=this.get_timestamp(),i=this.model.execute("write",[[this.id],n],e));i=i.done(function(){if(this.cancel(),t)return this.reload()}.bind(this)),this.group&&(i=i.done(function(){return this.group.written(this.id)}.bind(this)))}return this.group.parent&&(delete this.group.parent._changed[this.group.child_name],i=i.done(function(){return this.group.parent.save(t)}.bind(this))),i},reload:function(e){if(this.id<0)return jQuery.when();if(e){e=e.map(function(e){return this.load(e)}.bind(this));return jQuery.when.apply(jQuery,e)}return this.load("*")},is_loaded:function(e){return this.id<0||e in this._loaded},load:function(t,e){if(void 0===e&&(e=!0),this.destroyed||this.is_loaded(t))return e?jQuery.when():"*"!==t?this.model.fields[t]:void 0;if(e&&"pending"==this.group.prm.state())return this.group.prm.then(function(){return this.load(t)}.bind(this));var i,a={};if(a[this.id]=this,"*"==t){var n="eager",o=new Set,s=function(e){o.add(e)};for(u in this.model.fields)"lazy"==((i=this.model.fields[u]).description.loading||"eager")&&(n="lazy"),i.views.forEach(s)}else n=this.model.fields[t].description.loading||"eager",o=this.model.fields[t].views;var r={};if("eager"==n)for(u in this.model.fields)"eager"==((i=this.model.fields[u]).description.loading||"eager")&&(r[u]=i);else r=this.model.fields;var c=[];for(u in r)i=r[u],u in this._loaded||o.size&&!Sao.common.intersect(Array.from(o).sort(),Array.from(i.views).sort())||c.push(u);var l,d=c.slice(),h=["many2one","one2one","reference"];for(l in c){var u=c[l],_=this.model.fields[u].description;~h.indexOf(_.type)&&d.push(u+".rec_name")}~c.indexOf("rec_name")||d.push("rec_name"),d.push("_timestamp"),d.push("_write"),d.push("_delete");var m=jQuery.extend({},this.get_context());if("eager"==n){var p,f=parseInt(Sao.config.limit/d.length,10),g=function(e){return!e.destroyed&&0<=e.id&&!(t in e._loaded)},v=function(e){return g(e)&&void 0===a[e.id]&&(e.group===this.group||JSON.stringify(e.get_context())===JSON.stringify(m))}.bind(this),b=this.group.parent&&this.group.parent.model.name==this.model.name?(p=(p=[]).concat.apply(p,this.group.parent.group.children),v):(p=this.group,g),S=p.indexOf(this);if(~S)for(var y,w=p.length,x=1;Object.keys(a).length<f&&(0<=S-x||S+x<w)&&x<2*f;)0<=S-x&&b(y=p[S-x])&&(a[y.id]=y),S+x<w&&b(y=p[S+x])&&(a[y.id]=y),x++}for(u in this.model.fields)this.model.fields.hasOwnProperty(u)&&"binary"==this.model.fields[u].description.type&&~d.indexOf(u,d)&&(m[this.model.name+"."+u]="size");var j=this.model.execute("read",[Object.keys(a).map(function(e){return parseInt(e,10)}),d],m,e),O=function(e,t){void 0===t&&(t=!1);var i,n={};for(i in e.forEach(function(e,t,i){n[e.id]=e}),a)if(a.hasOwnProperty(i)){var o=a[i];o.exception||(o.exception=t);var s=n[i];if(o&&s){for(var r in this._changed)this._changed.hasOwnProperty(r)&&delete s[r];o.set(s)}}}.bind(this),v=function(){var e,t,i=[];for(t in a){for(var n in e={id:t},d)e[d[n]]=null;i.push(e)}return O(i,!0)};return e?(this.group.prm=j.then(O,v),this.group.prm):(j?O(j):v(),"*"!==t?this.model.fields[t]:void 0)},set:function(e,t){void 0===t&&(t=!0);var i,n,o={},s=[];for(var r in e)e.hasOwnProperty(r)&&(n=e[r],"_timestamp"!=r?"_write"!=r&&"_delete"!=r?r in this.model.fields?(this.model.fields[r]instanceof Sao.field.One2Many&&(o[r]=n),(this.model.fields[r]instanceof Sao.field.Many2One||this.model.fields[r]instanceof Sao.field.Reference)&&(this._values[i=r+"."]=e[i]||{}),this.model.fields[r].set(this,n),this._loaded[r]=!0,s.push(r)):"rec_name"==r&&(this._values[r]=n):this[r]=n:this._timestamp||(this._timestamp=n));for(r in o)n=o[r],this.model.fields[r].set(this,n),this._loaded[r]=!0;t&&this.validate(s,!0,!1,!1)},get:function(){var e,t,i={};for(e in this.model.fields)this.model.fields.hasOwnProperty(e)&&((t=this.model.fields[e]).description.readonly&&(!(t instanceof Sao.field.One2Many)||t instanceof Sao.field.Many2Many)||void 0===this._changed[e]&&0<=this.id||(i[e]=t.get(this),t instanceof Sao.field.One2Many&&0===i[e].length&&delete i[e]));return i},invalid_fields:function(){var e,t={};for(e in this.model.fields){var i=this.model.fields[e].get_state_attrs(this).invalid;i&&(t[e]=i)}return t},get_context:function(e){return e?this.group.local_context:this.group.context},field_get:function(e){return this.model.fields[e].get(this)},field_set:function(e,t){this.model.fields[e].set(this,t)},field_get_client:function(e){return this.model.fields[e].get_client(this)},field_set_client:function(e,t,i){this.model.fields[e].set_client(this,t,i)},default_get:function(e){if(jQuery.isEmptyObject(this.model.fields))return jQuery.when();var t=this.get_context();return void 0===t.default_rec_name&&(t.default_rec_name=e),this.model.execute("default_get",[Object.keys(this.model.fields)],t).then(function(e){var t;return this.group.parent&&this.group.parent_name in this.group.model.fields&&((t=this.group.model.fields[this.group.parent_name])instanceof Sao.field.Reference?e[this.group.parent_name]=[this.group.parent.model.name,this.group.parent.id]:t.description.relation==this.group.parent.model.name&&(e[this.group.parent_name]=this.group.parent.id)),this.set_default(e)}.bind(this))},set_default:function(e,t,i){void 0===t&&(t=!0),void 0===i&&(i=!0);var n,o,s,r=[],a=[];for(n in e)e.hasOwnProperty(n)&&(o=e[n],n in this.model.fields&&n!=this.group.exclude_field&&((this.model.fields[n]instanceof Sao.field.Many2One||this.model.fields[n]instanceof Sao.field.Reference)&&(this._values[s=n+"."]=e[s]||{}),r.push(this.model.fields[n].set_default(this,o)),this._loaded[n]=!0,a.push(n)));return jQuery.when.apply(jQuery,r).then(function(){this.on_change(a),this.on_change_with(a);var e=function(){if(i)return jQuery.when.apply(jQuery,this.group.root_group.screens.map(function(e){return e.display()}))}.bind(this);return t?this.validate(null,!0).then(e):e()}.bind(this))},get_timestamp:function(){var e,t={};for(e in t[this.model.name+","+this.id]=this._timestamp,this.model.fields)this.model.fields.hasOwnProperty(e)&&e in this._loaded&&jQuery.extend(t,this.model.fields[e].get_timestamp(this));return t},get_eval:function(){var e,t={};for(e in this.model.fields)!this.model.fields.hasOwnProperty(e)&&0<=this.id||(t[e]=this.model.fields[e].get_eval(this));return t.id=this.id,t},get_on_change_value:function(e){var t,i={};for(t in this.model.fields)e&&~e.indexOf(t)||0<=this.id&&(!this._loaded[t]||!this._changed[t])||(i[t]=this.model.fields[t].get_on_change_value(this));return i.id=this.id,i},_get_on_change_args:function(e){var i={},n=Sao.common.EvalEnvironment(this,"on_change");return e.forEach(function(e){var t=n;e.split(".").forEach(function(e){void 0!==t&&(t=t[e])}),i[e]=t}),i},on_change:function(e){var t,i={};if(e.forEach(function(e){e=this.model.fields[e].description.on_change;jQuery.isEmptyObject(e)||(i=jQuery.extend(i,this._get_on_change_args(e)))}.bind(this)),!jQuery.isEmptyObject(i)){try{1==e.length?(t=[]).push(this.model.execute("on_change_"+e[0],[i],this.get_context(),!1)):t=this.model.execute("on_change",[i,e],this.get_context(),!1)}catch(e){return}t.forEach(this.set_on_change,this)}},on_change_with:function(e){var t,i,n,o={},s={},r={};for(t in this.model.fields)if(this.model.fields.hasOwnProperty(t)&&(i=this.model.fields[t].description.on_change_with,!jQuery.isEmptyObject(i))){for(var a=0;a<e.length&&!~i.indexOf(e[a]);a++);a>=e.length||(jQuery.isEmptyObject(Sao.common.intersect(Object.keys(o).sort(),i.sort()))?(o[t]=!0,s=jQuery.extend(s,this._get_on_change_args(i)),(this.model.fields[t]instanceof Sao.field.Many2One||this.model.fields[t]instanceof Sao.field.Reference)&&delete this._values[t+"."]):r[t]=!0)}if((o=Object.keys(o)).length){try{1==o.length?(t=o[0],(n={})[t]=this.model.execute("on_change_with_"+t,[s],this.get_context(),!1)):n=this.model.execute("on_change_with",[s,o],this.get_context(),!1)}catch(e){return}this.set_on_change(n)}for(t in r){i=this.model.fields[t].description.on_change_with,s=this._get_on_change_args(i);try{n=this.model.execute("on_change_with_"+t,[s],this.get_context(),!1)}catch(e){return}this.load(t,!1).set_on_change(this,n)}},set_on_change:function(e){for(var t in e){var i,n=e[t];t in this.model.fields&&((this.model.fields[t]instanceof Sao.field.Many2One||this.model.fields[t]instanceof Sao.field.Reference)&&(this._values[i=t+"."]=e[i]||{}),this.load(t,!1).set_on_change(this,n))}},autocomplete_with:function(e){for(var t in this.model.fields)~(this.model.fields[t].description.autocomplete||[]).indexOf(e)&&this.do_autocomplete(t)},do_autocomplete:function(e){this.autocompletion[e]=[];var t,i=this.model.fields[e].description.autocomplete,i=this._get_on_change_args(i);try{t=this.model.execute("autocomplete_"+e,[i],this.get_context(),!1)}catch(e){t=[]}this.autocompletion[e]=t},reset:function(e){this.cancel(),this.set(e,!0),this.group.parent&&(this.group.parent.on_change([this.group.child_name]),this.group.parent.on_change_with([this.group.child_name]))},expr_eval:function(e){if("string"!=typeof e)return e;if(e){if("[]"==e)return[];if("{}"==e)return{};var t,i=this.get_eval();return i.context=this.get_context(),i.active_model=this.model.name,i.active_id=this.id,this.group.parent&&this.group.parent_name&&(t=Sao.common.EvalEnvironment(this.group.parent),i["_parent_"+this.group.parent_name]=t),new Sao.PYSON.Decoder(i).decode(e)}},rec_name:function(){return this.model.execute("read",[[this.id],["rec_name"]],this.get_context()).then(function(e){return e[0].rec_name})},validate:function(n,o,s,r){var e=function(){var e,t,i=!0;for(e in this.model.fields)r&&0<=this.id&&!(e in this._loaded)||this.model.fields.hasOwnProperty(e)&&(t=this.model.fields[e],n&&!~n.indexOf(e)||t.description.readonly||e!=this.group.exclude_field&&(t.validate(this,o,s)||(i=!1)));return i}.bind(this);return r?e():this._check_load(n).then(e)},pre_validate:function(){if(jQuery.isEmptyObject(this._changed))return jQuery.Deferred().resolve(!0);var e=this._get_on_change_args(Object.keys(this._changed).concat(["id"]));return this.model.execute("pre_validate",[e],this.get_context()).then(function(){return!0},function(){return!1})},cancel:function(){this._loaded={},this._changed={},this._timestamp=null,this.button_clicks={},this.links_counts={}},_check_load:function(e){return this.get_loaded(e)?jQuery.when():this.reload(e)},get_loaded:function(e){if(jQuery.isEmptyObject(e))return Sao.common.compare(Object.keys(this.model.fields).sort(),Object.keys(this._loaded).sort());var t=!0;return e.forEach(function(e){e in this._loaded||e in this._changed||(t=!1)}.bind(this)),t},get root_parent(){for(var e=this;e.group.parent;)e=e.group.parent;return e},get_path:function(e){for(var t=[],i=this,n="";i&&(t.push([n,i.id]),i.group!==e);)n=i.group.child_name,i=i.group.parent;return t.reverse(),t},get_index_path:function(e){for(var t=[],i=this;i&&(t.push(i.group.indexOf(i)),i.group!==e);)i=i.group.parent;return t.reverse(),t},children_group:function(t){var i=jQuery.Deferred();return t?this._check_load([t]).done(function(){var e=this._values[t];void 0!==e?(e.model.fields!==this.group.model.fields&&(jQuery.extend(this.group.model.fields,e.model.fields),e.model.fields=this.group.model.fields),e.on_write=this.group.on_write,e.readonly=this.group.readonly,jQuery.extend(e._context,this.group._context),i.resolve(e)):i.resolve(null)}.bind(this)):i.resolve([]),i},get deleted(){return Boolean(~this.group.record_deleted.indexOf(this))},get removed(){return Boolean(~this.group.record_removed.indexOf(this))},get readonly(){return this.deleted||this.removed||this.exception||!this._write},get deletable(){return this._delete},get identity(){return JSON.stringify(Object.keys(this._values).reduce(function(e,t){var i=this.model.fields[t];return i&&(i instanceof Sao.field.Binary?e[t]=i.get_size(this):e[t]=i.get(this)),e}.bind(this),{}))},set_field_context:function(){for(var e in this.model.fields){var t,i;this.model.fields.hasOwnProperty(e)&&(i=this.model.fields[e],(t=this._values[e])instanceof Array&&((e=Object.getOwnPropertyDescriptor(t,"context"))&&e.set&&((i=i.description.context)&&(t.context=this.expr_eval(i)))))}},get_resources:function(e){e=0<=this.id&&(!this.resources||e)?this.model.execute("resources",[this.id],this.get_context()).then(function(e){return this.resources=e}.bind(this)):jQuery.when(this.resources);return e},get_button_clicks:function(t){if(this.id<0)return jQuery.when();var e=this.button_clicks[t];return void 0!==e?jQuery.when(e):Sao.rpc({method:"model.ir.model.button.click.get_click",params:[this.model.name,t,this.id,{}]},this.model.session).then(function(e){return this.button_clicks[t]=e}.bind(this))},destroy:function(){for(var e=Object.values(this._values),t=0;t<e.length;t++){var i=e[t];i&&i.hasOwnProperty("destroy")&&i.destroy()}this.destroyed=!0}}),Sao.field={},Sao.field.get=function(e){switch(e){case"char":return Sao.field.Char;case"selection":return Sao.field.Selection;case"multiselection":return Sao.field.MultiSelection;case"datetime":case"timestamp":return Sao.field.DateTime;case"date":return Sao.field.Date;case"time":return Sao.field.Time;case"timedelta":return Sao.field.TimeDelta;case"float":return Sao.field.Float;case"numeric":return Sao.field.Numeric;case"integer":case"biginteger":return Sao.field.Integer;case"boolean":return Sao.field.Boolean;case"many2one":return Sao.field.Many2One;case"one2one":return Sao.field.One2One;case"one2many":return Sao.field.One2Many;case"many2many":return Sao.field.Many2Many;case"reference":return Sao.field.Reference;case"binary":return Sao.field.Binary;case"dict":return Sao.field.Dict;default:return Sao.field.Char}},Sao.field.Field=Sao.class_(Object,{_default:null,init:function(e){this.description=e,this.name=e.name,this.views=new Set},set:function(e,t){e._values[this.name]=t},get:function(e){e=e._values[this.name];return e=void 0===e?this._default:e},_has_changed:function(e,t){return JSON.stringify(e)!=JSON.stringify(t)},set_client:function(e,t,i){var n=this.get(e);this.set(e,t),this._has_changed(n,this.get(e))?(e._changed[this.name]=!0,this.changed(e),e.validate(null,!0,!1,!0),e.group.changed()):i&&(e._changed[this.name]=!0,this.changed(e),e.validate(null,!0,!1,!0),e.group.root_group.screens.forEach(function(e){e.display()}))},get_client:function(e){return this.get(e)},set_default:function(e,t){this.set(e,t),e._changed[this.name]=!0},set_on_change:function(e,t){this.set(e,t),e._changed[this.name]=!0},changed:function(e){e.on_change([this.name]),e.on_change_with([this.name]),e.autocomplete_with(this.name),e.set_field_context()},get_timestamp:function(e){return{}},get_context:function(e,t,i){i=t?jQuery.extend({},t):e.get_context(i);return jQuery.extend(i,e.expr_eval(this.description.context||{})),i},get_search_context:function(e){var t=this.get_context(e);return jQuery.extend(t,e.expr_eval(this.description.search_context||{})),t},get_search_order:function(e){return e.expr_eval(this.description.search_order||null)},get_domains:function(e,t){t=(new Sao.common.DomainInversion).domain_inversion([e.group.domain4inversion(),t||[]],this.name,Sao.common.EvalEnvironment(e));return"boolean"!=typeof t||t?"boolean"==typeof t&&t&&(t=[]):t=[["id","=",null]],[t,e.expr_eval(this.description.domain||[])]},get_domain:function(e){var t=this.get_domains(e),i=t[0],e=t[1],t=new Sao.common.DomainInversion;return t.concat([t.localize_domain(i),e])},validation_domains:function(e,t){return(new Sao.common.DomainInversion).concat(this.get_domains(e,t))},get_eval:function(e){return this.get(e)},get_on_change_value:function(e){return this.get_eval(e)},set_state:function(t,e){void 0===e&&(e=["readonly","required","invisible"]);var i=t.expr_eval(this.description.states||{});e.forEach(function(e){"readonly"==e&&this.description.readonly||(void 0!==i[e]?this.get_state_attrs(t)[e]=i[e]:void 0!==this.description[e]&&(this.get_state_attrs(t)[e]=this.description[e]))}.bind(this)),(t.group.readonly||this.get_state_attrs(t).domain_readonly)&&(this.get_state_attrs(t).readonly=!0)},get_state_attrs:function(e){return this.name in e.state_attrs||(e.state_attrs[this.name]=jQuery.extend({},this.description)),(e.group.readonly||e.readonly)&&(e.state_attrs[this.name].readonly=!0),e.state_attrs[this.name]},_is_empty:function(e){return!this.get_eval(e)},check_required:function(e){var t=this.get_state_attrs(e);return 1!=t.required||!this._is_empty(e)||1==t.readonly},validate:function(e,t,i){if(this.description.readonly)return!0;var n=!1;this.get_state_attrs(e).domain_readonly=!1;var o,s,r,a,c,l,d=new Sao.common.DomainInversion,h=d.simplify(this.validation_domains(e,i));return t||this.check_required(e)||(n="required"),"boolean"==typeof h?h||(n="domain"):Sao.common.compare(h,[["id","=",null]])?n="domain":(a=(r=d.unique_value(h))[0],c=r[1],o=r[2],a&&(!1===o&&(o=null),s=!0,r="AND"==(t=jQuery.isEmptyObject(e.group.domain)?d.merge(h):d.merge(e.group.domain))[0],c.contains(".")&&(a=c.split(".",1)[0],c=c.split(".",1)[1],l=[],r&&d.localize_domain(t.slice(1)).forEach(function(e){l.push(e)}),"id"==c&&~l.indexOf(a)||(s=!1)),s&&!i&&(this.set_client(e,o),this.get_state_attrs(e).domain_readonly=r)),d.eval_domain(h,Sao.common.EvalEnvironment(e))||(n=h)),!(this.get_state_attrs(e).invalid=n)}}),Sao.field.Char=Sao.class_(Sao.field.Field,{_default:"",get:function(e){return Sao.field.Char._super.get.call(this,e)||this._default}}),Sao.field.Selection=Sao.class_(Sao.field.Field,{_default:null}),Sao.field.MultiSelection=Sao.class_(Sao.field.Field,{_default:null,get:function(e){e=Sao.field.MultiSelection._super.get.call(this,e);return jQuery.isEmptyObject(e)?e=this._default:e.sort(),e},get_eval:function(e){e=Sao.field.MultiSelection._super.get_eval.call(this,e);return e=null===e?[]:e},set_client:function(e,t,i){t=t&&t.slice().sort(),Sao.field.MultiSelection._super.set_client.call(this,e,t,i)}}),Sao.field.DateTime=Sao.class_(Sao.field.Field,{_default:null,time_format:function(e){return e.expr_eval(this.description.format)},set_client:function(e,t,i){var n;t&&(t.isTime?t=(n=this.get(e))?Sao.DateTime.combine(n,t):null:t.isDate&&(n=this.get(e)||Sao.Time(),t=Sao.DateTime.combine(t,n))),Sao.field.DateTime._super.set_client.call(this,e,t,i)},date_format:function(e){e=this.get_context(e);return Sao.common.date_format(e.date_format)}}),Sao.field.Date=Sao.class_(Sao.field.Field,{_default:null,set_client:function(e,t,i){t&&!t.isDate&&(t.isDate=!0,t.isDateTime=!1),Sao.field.Date._super.set_client.call(this,e,t,i)},date_format:function(e){e=this.get_context(e);return Sao.common.date_format(e.date_format)}}),Sao.field.Time=Sao.class_(Sao.field.Field,{_default:null,time_format:function(e){return e.expr_eval(this.description.format)},set_client:function(e,t,i){t&&(t.isDate||t.isDateTime)&&(t=Sao.Time(t.hour(),t.minute(),t.second(),t.millisecond())),Sao.field.Time._super.set_client.call(this,e,t,i)}}),Sao.field.TimeDelta=Sao.class_(Sao.field.Field,{_default:null,converter:function(e){return e.context[this.description.converter]},set_client:function(e,t,i){"string"==typeof t&&(t=Sao.common.timedelta.parse(t,this.converter(e.group))),Sao.field.TimeDelta._super.set_client.call(this,e,t,i)},get_client:function(e){var t=Sao.field.TimeDelta._super.get_client.call(this,e);return Sao.common.timedelta.format(t,this.converter(e.group))}}),Sao.field.Float=Sao.class_(Sao.field.Field,{_default:null,digits:function(e,t){void 0===t&&(t=1);e=e.expr_eval(this.description.digits);if(e&&e.every(function(e){return null!==e})){t=Math.round(Math.log(Math.abs(t))/Math.LN10);return[e[0]+t,e[1]-t]}},get_symbol:function(e,t){if(e&&t in e.model.fields){var i=this.get(e)||0,n=1;i<0?n=-1:0===i&&(n=0);i=e.model.fields[t],t=i.description.relation,i=i.get(e);if(t&&null!==i&&0<=i)return Sao.rpc({method:"model."+t+".get_symbol",params:[i,n,e.get_context()]},e.model.session,!1)||["",1]}return["",1]},check_required:function(e){var t=this.get_state_attrs(e);return 1!=t.required||null!==this.get(e)||1==t.readonly},convert:function(e){return e||0===e?(e=Number(e),isNaN(e)?this._default:e):null},apply_factor:function(e,t,i){return null!==t&&(t/=i,(e=this.digits(e))&&(t=t.toFixed(e[1])),t=this.convert(t)),t},set_client:function(e,t,i,n){void 0===n&&(n=1),t=this.apply_factor(e,this.convert(t),n),Sao.field.Float._super.set_client.call(this,e,t,i)},get_client:function(e,t){void 0===t&&(t=1);var i=this.get(e);if(null===i)return"";var n={},e=this.digits(e,t);return e&&(n.minimumFractionDigits=e[1],n.maximumFractionDigits=e[1]),(i*t).toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),n)}}),Sao.field.Numeric=Sao.class_(Sao.field.Float,{convert:function(e){return e||0===e?(e=new Sao.Decimal(e),isNaN(e.valueOf())?this._default:e):null}}),Sao.field.Integer=Sao.class_(Sao.field.Float,{convert:function(e){return e=parseInt(e,10),e=isNaN(e)?this._default:e}}),Sao.field.Boolean=Sao.class_(Sao.field.Field,{_default:!1,set_client:function(e,t,i){t=Boolean(t),Sao.field.Boolean._super.set_client.call(this,e,t,i)},get:function(e){return Boolean(e._values[this.name])},get_client:function(e){return Boolean(e._values[this.name])}}),Sao.field.Many2One=Sao.class_(Sao.field.Field,{_default:null,check_required:function(e){var t=this.get_state_attrs(e);return 1!=t.required||null!==this.get(e)||1==t.readonly},get_client:function(e){var t=(e._values[this.name+"."]||{}).rec_name;return void 0===t&&(this.set(e,this.get(e)),t=(e._values[this.name+"."]||{}).rec_name||""),t},set:function(e,t){var i,n=(e._values[this.name+"."]||{}).rec_name||"";!n&&0<=t&&null!==t&&(i=e.model.fields[this.name].description.relation,n=Sao.rpc({method:"model."+i+".read",params:[[t],["rec_name"],e.get_context()]},e.model.session,!1)[0].rec_name),Sao.setdefault(e._values,this.name+".",{}).rec_name=n,e._values[this.name]=t},set_client:function(e,t,i){var n;t instanceof Array?(n=t[1],t=t[0]):n=t==this.get(e)&&(e._values[this.name+"."]||{}).rec_name||"",Sao.setdefault(e._values,this.name+".",{}).rec_name=n,Sao.field.Many2One._super.set_client.call(this,e,t,i)},get_context:function(e,t,i){i=Sao.field.Many2One._super.get_context.call(this,e,t,i);return this.description.datetime_field&&(i._datetime=e.get_eval()[this.description.datetime_field]),i},validation_domains:function(e,t){return this.get_domains(e,t)[0]},get_domain:function(e){var t=this.get_domains(e),i=t[0],e=t[1],t=new Sao.common.DomainInversion;return t.concat([t.localize_domain(i,this.name),e])},get_on_change_value:function(e){return e.group.parent_name==this.name&&e.group.parent?e.group.parent.get_on_change_value([e.group.child_name]):Sao.field.Many2One._super.get_on_change_value.call(this,e)}}),Sao.field.One2One=Sao.class_(Sao.field.Many2One,{}),Sao.field.One2Many=Sao.class_(Sao.field.Field,{init:function(e){Sao.field.One2Many._super.init.call(this,e)},_default:null,_set_value:function(e,t,i,n){this._set_default_value(e);var o,s=e._values[this.name];jQuery.when();if(jQuery.isEmptyObject(t)&&(t=[]),"list values"==(o=jQuery.isEmptyObject(t)||!isNaN(parseInt(t[0],10))?"list ids":"list values")){var r=this.get_context(e),a={};if(t.forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(t in s.model.fields||~t.indexOf(".")||(a[t]=!0))}),!jQuery.isEmptyObject(a)){var c,r={method:"model."+this.description.relation+".fields_get",params:[Object.keys(a),r]};try{c=Sao.rpc(r,e.model.session,!1)}catch(e){return}s.add_fields(c)}}if("list ids"==o){for(var l=[],d=0,h=s.length;d<h;d++){var u=s[d];~t.indexOf(u.id)||l.push(u)}for(d=0,h=l.length;d<h;d++){var _=l[d];s.remove(_,!0,!0,!1,!1)}s.load(t,n||i)}else t.forEach(function(e){var t=s.new_(!1);i?(t.set_default(e,!1,!1),s.add(t,-1,!1)):(t.set(e),s.push(t))})},set:function(e,t,i){void 0===i&&(i=!1);var n,o=e._values[this.name];void 0!==o?(n=o.model,o.destroy()):n=e.model.name==this.description.relation?e.model:new Sao.Model(this.description.relation),e._values[this.name]=void 0,this._set_default_value(e,n),this._set_value(e,t,i)},get:function(e){var t=e._values[this.name];if(void 0===t)return[];for(var i=t.record_removed,n=t.record_deleted,e=[],o=this.description.relation_field||"",s=[],r=[],a=[],c=0,l=t.length;c<l;c++){var d,h=t[c];~i.indexOf(h)||~n.indexOf(h)||(0<=h.id?h.has_changed()&&(delete(d=h.get())[o],jQuery.isEmptyObject(d)||(a.push([h.id]),a.push(d)),s.push(h.id)):(delete(d=h.get())[o],r.push(d)))}return jQuery.isEmptyObject(s)||e.push(["add",s]),jQuery.isEmptyObject(r)||e.push(["create",r]),jQuery.isEmptyObject(a)||e.push(["write"].concat(a)),jQuery.isEmptyObject(i)||e.push(["remove",i.map(function(e){return e.id})]),jQuery.isEmptyObject(n)||e.push(["delete",n.map(function(e){return e.id})]),e},set_client:function(e,t,i){"number"==typeof(t=null===t?[]:t)&&(t=[t]);var n=this.get_eval(e),n=!Sao.common.compare(n.sort(),t.sort());this._set_value(e,t,!1,n),n?(e._changed[this.name]=!0,this.changed(e),e.validate(null,!0,!1,!0),e.group.changed()):i&&(e._changed[this.name]=!0,this.changed(e),e.validate(null,!0,!1,!0),e.group.root_group.screens.forEach(function(e){e.display()}))},get_client:function(e){return this._set_default_value(e),e._values[this.name]},set_default:function(e,t){return e._changed[this.name]=!0,this.set(e,t,!0)},set_on_change:function(e,t){var i;if(e._changed[this.name]=!0,this._set_default_value(e),t instanceof Array)return this._set_value(e,t,!1,!0);if(t&&(t.add||t.update)){var n=this.get_context(e),o=e._values[this.name].model.fields,s={},r=[];if(t.add)for(var a=0;a<t.add.length;a++)r.push(t.add[a][1]);if([r,t.update].forEach(function(e){jQuery.isEmptyObject(e)||e.forEach(function(e){Object.keys(e).forEach(function(e){e in o||"id"==e||~e.indexOf(".")||(s[e]=!0)})})}),jQuery.isEmptyObject(s))i={};else{n={method:"model."+this.description.relation+".fields_get",params:[Object.keys(s),n]};try{i=Sao.rpc(n,e.model.session,!1)}catch(e){return}}}var c=e._values[this.name];t&&t.delete&&t.delete.forEach(function(e){e=c.get(e);e&&c.remove(e,!1,!0,!1,!1)}.bind(this)),t&&t.remove&&t.remove.forEach(function(e){e=c.get(e);e&&c.remove(e,!0,!0,!1,!1)}.bind(this)),t&&(t.add||t.update)&&(t.update&&t.update.forEach(function(e){if(e.id){var t=c.get(e.id);if(t){var i,n={};for(i in e)i in s||(n[i]=e[i]);t.set_on_change(n)}}}),c.add_fields(i),t.add&&t.add.forEach(function(e){var t,i=e[0],n=e[1],e=n.id;delete n.id,t=(t=e?c.get(e):t)||c.new_(!1,e),c.add(t,i,!1),t.set_on_change(n)}),t.update&&t.update.forEach(function(e){var t;!e.id||(t=c.get(e.id))&&t.set_on_change(e)}))},_set_default_value:function(e,t){var i;void 0===e._values[this.name]&&(t=t||new Sao.Model(this.description.relation),e.model.name==this.description.relation&&(t=e.model),i=e.expr_eval(this.description.context||{}),(i=Sao.Group(t,i,[])).set_parent(e),i.parent_name=this.description.relation_field,i.child_name=this.name,i.parent_datetime_field=this.description.datetime_field,e._values[this.name]=i)},get_timestamp:function(e){var t={},i=e._values[this.name]||[],e=i.filter(function(e){return e.has_changed()});return jQuery.extend(e,i.record_removed,i.record_deleted).forEach(function(e){jQuery.extend(t,e.get_timestamp())}),t},get_eval:function(e){var t=[],i=e._values[this.name];if(void 0===i)return t;for(var n=i.record_removed,o=i.record_deleted,s=0,r=e._values[this.name].length;s<r;s++){var a=i[s];~n.indexOf(a)||~o.indexOf(a)||t.push(a.id)}return t},get_on_change_value:function(e){var t=[],i=e._values[this.name];if(void 0===i)return t;for(var n=0,o=e._values[this.name].length;n<o;n++){var s=i[n];s.deleted||s.removed||t.push(s.get_on_change_value([this.description.relation_field||""]))}return t},get_removed_ids:function(e){return e._values[this.name].record_removed.map(function(e){return e.id})},get_domain:function(e){return this.get_domains(e)[1]},validation_domains:function(e,t){return this.get_domains(e,t)[0]},validate:function(e,t,i){var n=!1,o=new Sao.common.DomainInversion,s=o.localize_domain(o.domain_inversion(e.group.clean4inversion(i||[]),this.name,Sao.common.EvalEnvironment(e)),this.name);"boolean"==typeof s&&(s=s?[]:[["id","=",null]]);for(var r=0,a=(e._values[this.name]||[]).length;r<a;r++){var c=e._values[this.name][r];!c.get_loaded()&&0<=c.id&&!i||c.validate(null,t,s,!0)||(n="children")}o=Sao.field.One2Many._super.validate.call(this,e,t,i);return o&&n?(this.get_state_attrs(e).invalid=n,!1):o},set_state:function(e,t){this._set_default_value(e),Sao.field.One2Many._super.set_state.call(this,e,t)},_is_empty:function(e){return jQuery.isEmptyObject(this.get_eval(e))}}),Sao.field.Many2Many=Sao.class_(Sao.field.One2Many,{get_on_change_value:function(e){return this.get_eval(e)}}),Sao.field.Reference=Sao.class_(Sao.field.Field,{_default:null,get_client:function(e){return e._values[this.name]?[e._values[this.name][0],(e._values[this.name+"."]||{}).rec_name||""]:null},get:function(e){return e._values[this.name]&&e._values[this.name][0]&&null!==e._values[this.name][1]&&-1<=e._values[this.name][1]?e._values[this.name].join(","):null},set_client:function(e,t,i){var n,o,s;t&&(n=(t="string"==typeof t?t.split(","):t)[0],(o=t[1])instanceof Array?(s=o[1],o=o[0]):s=[n,o=o&&!isNaN(parseInt(o,10))?parseInt(o,10):o].join(",")==this.get(e)&&(e._values[this.name+"."]||{}).rec_name||"",Sao.setdefault(e._values,this.name+".",{}).rec_name=s,t=[n,o]),Sao.field.Reference._super.set_client.call(this,e,t,i)},set:function(e,t){var i,n;t?("string"==typeof t?(i=t.split(",")[0],(n=t.split(",")[1])?isNaN(parseInt(n,10))||(n=parseInt(n,10)):n=null):(i=t[0],n=t[1]),t=(e._values[this.name+"."]||{}).rec_name||"",i&&null!==n&&0<=n?!t&&0<=n&&(t=Sao.rpc({method:"model."+i+".read",params:[[n],["rec_name"],e.get_context()]},e.model.session,!1)[0].rec_name):t=i?"":n,Sao.setdefault(e._values,this.name+".",{}).rec_name=t,e._values[this.name]=[i,n]):e._values[this.name]=this._default},get_on_change_value:function(e){return e.group.parent_name==this.name&&e.group.parent?[e.group.parent.model.name,e.group.parent.get_on_change_value([e.group.child_name])]:Sao.field.Reference._super.get_on_change_value.call(this,e)},get_context:function(e,t,i){i=Sao.field.Reference._super.get_context.call(this,e,t,i);return this.description.datetime_field&&(i._datetime=e.get_eval()[this.description.datetime_field]),i},validation_domains:function(e,t){return this.get_domains(e,t)[0]},get_domain:function(e){var t=null;e._values[this.name]&&(t=e._values[this.name][0]);var i=this.get_domains(e),n=i[0],e=i[1],i=new Sao.common.DomainInversion,n=i.filter_leaf(n,this.name,t);return n=i.prepare_reference_domain(n,this.name),i.concat([i.localize_domain(n,this.name,!0),e])},get_models:function(e){var t=this.get_domains(e),i=new Sao.common.DomainInversion,e=i.prepare_reference_domain(t[0],this.name);return i.extract_reference_models(i.concat([e,t[1]]),this.name)},_is_empty:function(e){var t=Sao.field.Reference._super._is_empty.call(this,e);return t=!t&&e._values[this.name][1]<0?!0:t}}),Sao.field.Binary=Sao.class_(Sao.field.Field,{_default:null,_has_changed:function(e,t){return e!=t},get_size:function(e){e=e._values[this.name]||0;return e instanceof Uint8Array||"string"==typeof e?e.length:e},get_data:function(t){var e=t._values[this.name]||[],i=jQuery.when(e);if(!(e instanceof Uint8Array)&&"string"!=typeof e){if(t.id<0)return i;e=t.get_context(),i=t.model.execute("read",[[t.id],[this.name]],e).then(function(e){return e=e[0][this.name],this.set(t,e),e}.bind(this))}return i}}),Sao.field.Dict=Sao.class_(Sao.field.Field,{_default:{},init:function(e){Sao.field.Dict._super.init.call(this,e),this.schema_model=new Sao.Model(e.schema_model),this.keys={}},set:function(e,t){if(t){var i,n=[];for(i in t)n.push(i);n.sort();var o,s={};for(o in n)s[i=n[o]]=t[i];t=s}Sao.field.Dict._super.set.call(this,e,t)},get:function(e){return Sao.field.Dict._super.get.call(this,e)||this._default},get_client:function(e){return Sao.field.Dict._super.get_client.call(this,e)||this._default},validation_domains:function(e,t){return this.get_domains(e,t)[0]},get_domain:function(e){var t=new Sao.common.DomainInversion,i=this.get_domains(e),e=i[0],i=i[1];return t.concat([t.localize_domain(e),i])},date_format:function(e){e=this.get_context(e);return Sao.common.date_format(e.date_format)},time_format:function(e){return"%X"},add_keys:function(e,t){this.description.schema_model;var i=this.get_context(t),n=this.get_domain(t),o=Math.min(10,Sao.config.limit);e=jQuery.extend([],e);for(var s=function(e){return this.schema_model.execute("get_keys",[e],i).then(r)}.bind(this),r=function(e){for(var t=0,i=e.length;t<i;t++){var n=e[t];this.keys[n.name]=n}}.bind(this),a=[];0<e.length;){var c=e.splice(0,o);a.push(this.schema_model.execute("search",[[["name","in",c],n],0,Sao.config.limit,null],i).then(s))}return jQuery.when.apply(jQuery,a)},add_new_keys:function(e,t){t=this.get_context(t);return this.schema_model.execute("get_keys",[e],t).then(function(e){var t=[];return e.forEach(function(e){this.keys[e.name]=e,t.push(e.name)}.bind(this)),t}.bind(this))},validate:function(e,t,i){t=Sao.field.Dict._super.validate.call(this,e,t,i);if(this.description.readonly)return t;var n,o,s=new Sao.PYSON.Decoder,i=this.get_eval(e),r=[];for(n in i)n in this.keys&&((o=this.keys[n].domain)&&r.push(s.decode(o)));i=(new Sao.common.DomainInversion).eval_domain(r,i);return i||(this.get_state_attrs(e).invalid="domain"),t&&i}})}(),function(){"use strict";Sao.Tab=Sao.class_(Object,{init:function(e){Sao.Tab.tabs.push(this),this.attributes=jQuery.extend({},e),this.buttons={},this.menu_buttons={},this.id="tab-"+Sao.Tab.counter++,this.name="",this.name_el=jQuery("<span/>"),this.view_prm=jQuery.when()},menu_def:function(){return[{id:"switch_",icon:"tryton-switch",label:Sao.i18n.gettext("Switch"),tooltip:Sao.i18n.gettext("Switch view")},{id:"previous",icon:"tryton-back",label:Sao.i18n.gettext("Previous"),tooltip:Sao.i18n.gettext("Previous Record")},{id:"next",icon:"tryton-forward",label:Sao.i18n.gettext("Next"),tooltip:Sao.i18n.gettext("Next Record")},{id:"search",icon:"tryton-search",label:Sao.i18n.gettext("Search")},null,{id:"new_",icon:"tryton-create",label:Sao.i18n.gettext("New"),tooltip:Sao.i18n.gettext("Create a new record")},{id:"save",icon:"tryton-save",label:Sao.i18n.gettext("Save"),tooltip:Sao.i18n.gettext("Save this record")},{id:"reload",icon:"tryton-refresh",label:Sao.i18n.gettext("Reload/Undo"),tooltip:Sao.i18n.gettext("Reload")},{id:"copy",icon:"tryton-copy",label:Sao.i18n.gettext("Duplicate")},{id:"delete_",icon:"tryton-delete",label:Sao.i18n.gettext("Delete")},null,{id:"logs",icon:"tryton-log",label:Sao.i18n.gettext("View Logs...")},{id:this.screen&&Sao.common.MODELHISTORY.contains(this.screen.model_name)?"revision":null,icon:"tryton-history",label:Sao.i18n.gettext("Show revisions...")},null,{id:"attach",icon:"tryton-attach",label:Sao.i18n.gettext("Attachment"),tooltip:Sao.i18n.gettext("Add an attachment to the record"),dropdown:!0},{id:"note",icon:"tryton-note",label:Sao.i18n.gettext("Note"),tooltip:Sao.i18n.gettext("Add a note to the record")},{id:"action",icon:"tryton-launch",label:Sao.i18n.gettext("Action")},null,{id:"relate",icon:"tryton-link",label:Sao.i18n.gettext("Relate")},{id:"print",icon:"tryton-print",label:Sao.i18n.gettext("Print")},{id:"email",icon:"tryton-email",label:Sao.i18n.gettext("E-Mail..."),tooltip:Sao.i18n.gettext("Send an e-mail using the record")},null,{id:"export",icon:"tryton-export",label:Sao.i18n.gettext("Export")},{id:"import",icon:"tryton-import",label:Sao.i18n.gettext("Import")},null,{id:"close",icon:"tryton-close",label:Sao.i18n.gettext("Close Tab")}]},create_tabcontent:function(){this.el=jQuery("<div/>",{class:"panel panel-default "+this.class_});var e=this.create_toolbar().appendTo(this.el);this.title=e.find(".title"),this.main=jQuery("<div/>",{class:"panel-body row"}).appendTo(this.el),this.content=jQuery("<div/>",{class:"col-xs-12"}).appendTo(this.main),this.info_bar&&this.el.append(this.info_bar.el)},set_menu:function(n){var o;this.menu_def().forEach(function(t){if(t){if(!this[t.id])return;var e=jQuery("<li/>",{role:"presentation"}),i=jQuery("<a/>",{id:t.id,role:"menuitem",href:"#",tabindex:-1}).text(" "+t.label).prepend(Sao.common.ICONFACTORY.get_icon_img(t.icon,{"aria-hidden":"true"})).appendTo(e);this.menu_buttons[t.id]=e,i.click(function(e){e.preventDefault(),this[t.id]()}.bind(this))}else{if(t||!o)return;e=jQuery("<li/>",{role:"separator",class:"divider hidden-xs"})}(o=e).appendTo(n)}.bind(this))},create_toolbar:function(){var i,n=jQuery("<nav/>",{class:"toolbar panel-heading",role:"toolbar"}).append(jQuery("<div/>",{class:"container-fluid navbar-inverse"}).append(jQuery("<div/>",{class:"dropdown navbar-header navbar-left flip"}).append(jQuery("<a/>",{href:"#",class:"navbar-brand dropdown-toggle","data-toggle":"dropdown",role:"button","aria-expanded":!1,"aria-haspopup":!0}).append(jQuery("<span/>",{class:"title"})).append(jQuery("<span/>",{class:"caret"}))).append(jQuery("<ul/>",{class:"dropdown-menu",role:"menu"})).append(jQuery("<button/>",{type:"button",class:"close visible-xs","aria-label":Sao.i18n.gettext("Close")}).append(jQuery("<span/>",{"aria-hidden":!0}).append("×")).click(function(){this.close()}.bind(this)))).append(jQuery("<div/>",{class:"btn-toolbar navbar-right flip",role:"toolbar"})));this.set_menu(n.find('ul[role*="menu"]'));return this.menu_def().forEach(function(e){var t;e&&e.tooltip?e.id&&this[e.id]&&(i=i||jQuery("<div/>",{class:"btn-group",role:"group"}).appendTo(n.find(".btn-toolbar")),t={type:"button",class:"btn btn-default navbar-btn",title:e.label,id:e.id},e.dropdown&&(t.class+=" dropdown-toggle",t["data-toggle"]="dropdown",t["aria-expanded"]=!1,t["aria-haspopup"]=!0),t=jQuery("<button/>",t).append(Sao.common.ICONFACTORY.get_icon_img(e.icon,{"aria-hidden":"true"})),this.buttons[e.id]=t,e.dropdown?jQuery("<div/>",{class:"btn-group dropdown",role:"group"}).append(t.append(jQuery("<span/>",{class:"caret"}))).append(jQuery("<ul/>",{class:"dropdown-menu",role:"menu","aria-labelledby":e.id})).appendTo(i):t.appendTo(i),this.buttons[e.id].click(e,function(e){var t=e.data,i=this.buttons[t.id];i.data("disabled")?e.preventDefault():(i.data("disabled",!0),(this[t.id](this)||jQuery.when()).always(function(){i.data("disabled",!1)}))}.bind(this))):i=null}.bind(this)),this.buttons.previous&&(this.status_label=jQuery("<span/>",{class:"badge"}).appendTo(jQuery("<div/>",{class:"navbar-text hidden-xs"}).insertAfter(this.buttons.previous)),this.buttons.previous.addClass("hidden-xs")),this.buttons.next&&this.buttons.next.addClass("hidden-xs"),n.find(".btn-toolbar > .btn-group").last().addClass("hidden-xs").find(".dropdown").on("show.bs.dropdown",function(){jQuery(this).parents(".btn-group").removeClass("hidden-xs")}).on("hide.bs.dropdown",function(){jQuery(this).parents(".btn-group").addClass("hidden-xs")}),n},show:function(){jQuery("#tablist").find('a[href="#'+this.id+'"]').tab("show")},close:function(){var i=jQuery("#tabs"),n=jQuery("#tablist").find("#nav-"+this.id),o=i.find("#"+this.id);return this.show(),this._close_allowed().then(function(){var e=n.nextAll("li").first();e.length||(e=n.prevAll("li").first()),n.remove(),o.remove();var t=Sao.Tab.tabs.indexOf(this);0<=t&&Sao.Tab.tabs.splice(t,1),e.length?e.find("a").tab("show"):Sao.set_url(),i.trigger("ready")}.bind(this))},_close_allowed:function(){return jQuery.when()},set_name:function(e){this.name=e,this.name_el.text(Sao.common.ellipsize(e,20)),this.name_el.attr("title",e)},get_url:function(){},compare:function(e){return!1}}),Sao.Tab.counter=0,Sao.Tab.tabs=[],Sao.Tab.tabs.close=function(e){if(e&&Sao.Tab.tabs.length)return Sao.common.sur.run(Sao.i18n.gettext("The following action requires to close all tabs.\nDo you want to continue?")).then(function(){return Sao.Tab.tabs.close(!1)});if(Sao.Tab.tabs.length){var t=Sao.Tab.tabs[0];return t.close().then(function(){return~Sao.Tab.tabs.indexOf(t)?jQuery.Deferred().reject():Sao.Tab.tabs.close()})}return Sao.main_menu_screen?Sao.main_menu_screen.save_tree_state().then(function(){Sao.main_menu_screen=null}):jQuery.when()},Sao.Tab.tabs.get_current=function(){return jQuery("#tablist").find("li.active").data("tab")},Sao.Tab.tabs.close_current=function(){this.get_current().close()},Sao.Tab.create=function(e){var t=jQuery("#tablist");void 0===e.context&&(e.context={});for(var i,n=0;n<Sao.Tab.tabs.length;n++){var o=Sao.Tab.tabs[n];if(o.compare(e))return void t.find('a[href="#'+o.id+'"]').tab("show")}(i=e.model?new Sao.Tab.Form(e.model,e):new Sao.Tab.Board(e)).view_prm.done(function(){Sao.Tab.add(i)})},Sao.Tab.add=function(t){var i=jQuery("#tabs"),e=jQuery("#tablist"),n=jQuery("#tabcontent"),o=jQuery("<a/>",{"aria-controls":t.id,role:"tab","data-toggle":"tab",href:"#"+t.id}).on("show.bs.tab",function(){Sao.set_url(t.get_url(),t.name)}).append(jQuery("<button/>",{class:"close"}).append(jQuery("<span/>",{"aria-hidden":!0}).append("×")).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Close"))).click(function(e){e.preventDefault(),t.close()})).append(t.name_el);jQuery("<li/>",{role:"presentation","data-placement":"bottom",id:"nav-"+t.id}).append(o).appendTo(e).data("tab",t),jQuery("<div/>",{role:"tabpanel",class:"tab-pane",id:t.id}).append(t.el).appendTo(n),o.on("hide.bs.tab",function(e){jQuery(e.target).data("scrollTop",i.scrollTop())}),o.on("shown.bs.tab",function(e){i.scrollTop(jQuery(e.target).data("scrollTop")||0)}),o.tab("show"),i.trigger("ready")},Sao.Tab.previous_tab=function(){Sao.Tab.move("prevAll")},Sao.Tab.next_tab=function(){Sao.Tab.move("nextAll")},Sao.Tab.move=function(e){var t=this.tabs.get_current(),i=jQuery("#tabs"),n=jQuery("#tablist"),t=n.find("#nav-"+t.id)[e]("li").first();(t=!t.length?"prevAll"==e?n.find("li").last():n.find("li").first():t)&&(t.find("a").tab("show"),i.trigger("ready"))},Sao.Tab.Form=Sao.class_(Sao.Tab,{class_:"tab-form",init:function(e,t){Sao.Tab.Form._super.init.call(this,t);var i=(i=(t=jQuery.extend({},t)).name)||Sao.common.MODELNAME.get(e);this.set_name(i),t.breadcrumb=[i];var n=new Sao.Screen(e,t);(n.tab=this).screen=n,this.info_bar=new Sao.Window.InfoBar,this.create_tabcontent(),this.attachment_screen=null,n.message_callback=this.record_message.bind(this),n.switch_callback=function(){this===Sao.Tab.tabs.get_current()&&Sao.set_url(this.get_url(),this.name)}.bind(this),this.set_buttons_sensitive(),this.view_prm=this.screen.switch_view().done(function(){this.screen.count_tab_domain(),this.content.append(n.screen_container.el),t.res_id?(jQuery.isArray(t.res_id)||(t.res_id=[t.res_id]),n.group.load(t.res_id),n.current_record=n.group.get(t.res_id),n.display()):("form"==n.current_view.view_type&&n.new_(),~["tree","graph","calendar"].indexOf(n.current_view.view_type)&&n.search_filter()),this.update_revision()}.bind(this))},create_toolbar:function(){var n=Sao.Tab.Form._super.create_toolbar.call(this),r=this.screen,s=r.model.execute("view_toolbar_get",[],r.context,!1);return[["action","tryton-launch",Sao.i18n.gettext("Launch action")],["relate","tryton-link",Sao.i18n.gettext("Open related records")],["print","tryton-print",Sao.i18n.gettext("Print report")]].forEach(function(o){var e=jQuery("<div/>",{class:"btn-group dropdown",role:"group"}).append(jQuery("<button/>",{type:"button",class:"btn btn-default navbar-btn dropdown-toggle","data-toggle":"dropdown","aria-expanded":!1,"aria-haspopup":!0,title:o[2],id:o[0]}).append(Sao.common.ICONFACTORY.get_icon_img(o[1],{"aria-hidden":"true"})).append(jQuery("<span/>",{class:"caret"}))).append(jQuery("<ul/>",{class:"dropdown-menu",role:"menu","aria-labelledby":o[0]})).insertBefore(n.find("button#email")),t=e.find("button");this.buttons[o[0]]=t,e.on("show.bs.dropdown",function(){jQuery(this).parents(".btn-group").removeClass("hidden-xs")}).on("hide.bs.dropdown",function(){jQuery(this).parents(".btn-group").addClass("hidden-xs")});var i=e.find(".dropdown-menu");t.click(function(){i.find(["."+o[0]+"_button",".divider-button","."+o[0]+"_plugin",".divider-plugin"].join(",")).remove();var e=r.get_buttons().filter(function(e){return o[0]==(e.attributes.keyword||"action")});e.length&&i.append(jQuery("<li/>",{role:"separator",class:"divider divider-button"})),e.forEach(function(t){jQuery("<li/>",{role:"presentation",class:o[0]+"_button"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(t.attributes.string||"")).click(function(e){e.preventDefault(),r.button(t.attributes)}).appendTo(i)});var n=[];Sao.Plugins.forEach(function(e){e.get_plugins(r.model.name).forEach(function(e){var t=e[0],i=e[1];(e[2]||"action")==o[0]&&n.push([t,i])})}),n.length&&i.append(jQuery("<li/>",{role:"separator",class:"divider divider-plugin"})),n.forEach(function(e){var t=e[0],n=e[1];jQuery("<li/>",{role:"presentation",class:o[0]+"_plugin"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(t)).click(function(e){e.preventDefault();var t=r.current_view.selected_records.map(function(e){return e.id}),i=r.current_record?r.current_record.id:null,e=r.context_screen?r.context_screen.model_name:null;n({model:r.model.name,model_context:e,id:i,ids:t,paths:r.selected_paths})}).appendTo(i)})}),s[o[0]].forEach(function(s){jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(s.name)).click(function(e){e.preventDefault(),this.modified_save().then(function(){var e=jQuery.extend({},s),t=null;r.current_record&&(t=r.current_record.id);var i="listed"==s.records?(o=r.listed_records,r.listed_paths):(o=r.selected_records,r.selected_paths),n=o.map(function(e){return e.id}),o=r.context_screen?r.context_screen.model_name:null,i={model:r.model_name,model_context:o,id:t,ids:n,paths:i};Sao.Action.execute(e,i,jQuery.extend({},r.local_context))})}.bind(this)).appendTo(i)}.bind(this)),"action"!=o[0]&&(t._can_be_sensitive=Boolean(i.children().length)),"print"==o[0]&&s.exports.length&&(t._can_be_sensitive=!0,s.print.length&&i.append(jQuery("<li/>",{role:"separator",class:"divider"})),s.exports.forEach(function(t){jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(t.name)).click(function(e){e.preventDefault(),this.do_export(t)}.bind(this)).appendTo(i)}.bind(this)))}.bind(this)),this.buttons.attach.on("dragover",!1).on("drop",this.attach_drop.bind(this)),n},create_tabcontent:function(){Sao.Tab.Form._super.create_tabcontent.call(this),this.attachment_preview=jQuery("<div/>",{class:"col-xs-12 attachment-preview"}).prependTo(this.main)},compare:function(e){if(!e)return!1;var t=Sao.common.compare;return this.screen.model_name===e.model&&this.attributes.res_id===e.res_id&&t(this.attributes.domain||[],e.domain||[])&&t(this.attributes.view_ids||[],e.view_ids||[])&&(e.view_ids||t(this.attributes.mode||["tree","form"],e.mode||["tree","form"]))&&JSON.stringify(this.screen.local_context)===JSON.stringify(e.context)&&t(this.attributes.search_value||[],e.search_value||[])&&JSON.stringify(this.screen.attributes.tab_domain)===JSON.stringify(e.tab_domain)},_close_allowed:function(){return this.modified_save().then(null,function(e){return e?jQuery.Deferred().resolve():jQuery.Deferred().reject()})},modified_save:function(){return this.screen.save_tree_state(),this.screen.current_view.set_value(),this.screen.modified()?Sao.common.sur_3b.run(Sao.i18n.gettext("This record has been modified\ndo you want to save it?")).then(function(e){switch(e){case"ok":return this.save();case"ko":var t=this.screen.current_record.id;return this.reload(!1).then(function(){return t<0?jQuery.Deferred().reject(!0):this.screen.current_record&&t!=this.screen.current_record.id?jQuery.Deferred().reject():void 0}.bind(this));default:return jQuery.Deferred().reject()}}.bind(this)):jQuery.when()},new_:function(){return Sao.common.MODELACCESS.get(this.screen.model_name).create?this.modified_save().then(function(){return this.screen.new_().then(function(){this.info_bar.message()}.bind(this))}.bind(this)):jQuery.when()},save:function(e){e&&this.screen.save_tree_state();e=Sao.common.MODELACCESS.get(this.screen.model_name);return e.write||e.create?this.screen.save_current().then(function(){this.info_bar.message(Sao.i18n.gettext("Record saved."),"info"),this.screen.count_tab_domain(!0)}.bind(this),function(){return this.info_bar.message(this.screen.invalid_message(),"danger"),jQuery.Deferred().reject()}.bind(this)):jQuery.Deferred().reject()},switch_:function(){return this.modified_save().then(function(){return this.screen.switch_view()}.bind(this))},reload:function(e){void 0===e&&(e=!0);var t=function(){return this.screen.cancel_current().then(function(){var t=!1,i=null;return this.screen.current_record&&(i=this.screen.current_record.id),"form"!=this.screen.current_view.view_type?this.screen.search_filter(this.screen.screen_container.search_entry.val()).then(function(){return this.screen.group.forEach(function(e){e.id==i&&(this.screen.current_record=e,t=!0)}.bind(this)),t}.bind(this)):t}.bind(this)).then(function(e){return this.screen.display(e).then(function(){this.info_bar.message(),this.screen.count_tab_domain()}.bind(this))}.bind(this))}.bind(this);return e?this.modified_save().then(t):(this.screen.save_tree_state(!1),t())},copy:function(){return Sao.common.MODELACCESS.get(this.screen.model_name).create?this.modified_save().then(function(){return this.screen.copy().then(function(){this.info_bar.message(Sao.i18n.gettext("Working now on the duplicated record(s)."),"info"),this.screen.count_tab_domain(!0)}.bind(this))}.bind(this)):jQuery.when()},delete_:function(){if(!Sao.common.MODELACCESS.get(this.screen.model_name).delete)return jQuery.when();var e="form"==this.screen.current_view.view_type?Sao.i18n.gettext("Are you sure to remove this record?"):Sao.i18n.gettext("Are you sure to remove those records?");return Sao.common.sur.run(e).then(function(){return this.screen.remove(!0,!1,!0).then(function(){this.info_bar.message(Sao.i18n.gettext("Records removed."),"info"),this.screen.count_tab_domain(!0)}.bind(this),function(){this.info_bar.message(Sao.i18n.gettext("Records not removed."),"danger")}.bind(this))}.bind(this))},previous:function(){return this.modified_save().then(function(){var e=this.screen.display_previous();return this.info_bar.message(),e}.bind(this))},next:function(){return this.modified_save().then(function(){var e=this.screen.display_next();return this.info_bar.message(),e}.bind(this))},search:function(){var e=this.screen.screen_container.search_entry;return e.is(":visible")&&window.setTimeout(function(){e.focus()},0),jQuery.when()},logs:function(){var e=this.screen.current_record;if(!e||e.id<0)return this.info_bar.message(Sao.i18n.gettext("You have to select one record."),"info"),jQuery.when();var t=[["id",Sao.i18n.gettext("ID:")],["create_uid.rec_name",Sao.i18n.gettext("Created by:")],["create_date",Sao.i18n.gettext("Created at:")],["write_uid.rec_name",Sao.i18n.gettext("Edited by:")],["write_date",Sao.i18n.gettext("Edited at:")]];return this.screen.model.execute("read",[[e.id],t.map(function(e){return e[0]})],this.screen.context).then(function(o){o=o[0];var s="";t.forEach(function(e){var t=e[0],i=e[1],n=o,e=t.split("."),t=e.splice(-1);e.forEach(function(e){n=n[e+"."]||{}}),(n=(n||{})[t]||"/")&&n.isDateTime&&(n=Sao.common.format_datetime(Sao.common.date_format()+" %H:%M:%S",n)),s+=i+" "+n+"\n"}),s+=Sao.i18n.gettext("Model: ")+this.screen.model.name,Sao.common.message.run(s)}.bind(this))},revision:function(){var i=null;this.screen.current_record&&(i=this.screen.current_record.id);var t=function(t){return function(e){e&&e.add(1,"milliseconds"),(e="form"==this.screen.current_view.view_type&&e<t[t.length-1][0]?t[t.length-1][0]:e)!=this.screen.context._datetime&&(this.screen.clear(),this.screen.group._context._datetime=e,"form"!=this.screen.current_view.view_type?this.screen.search_filter(this.screen.screen_container.search_entry.val()):this.screen.group.load([i]),this.screen.display(!0),this.update_revision())}.bind(this)}.bind(this);return this.modified_save().then(function(){var e=this.screen.current_view.selected_records.map(function(e){return e.id});return this.screen.model.execute("history_revisions",[e],this.screen.context).then(function(e){new Sao.Window.Revision(e,t(e))})}.bind(this))},update_revision:function(){var e,t,i=this.screen.context._datetime;t=i?(e=Sao.common.date_format(this.screen.context.date_format),t=" @ "+Sao.common.format_datetime(e+" %H:%M:%S.%f",i),e=Sao.common.ellipsize(this.name,80-t.length)+t,this.name+t):(e=Sao.common.ellipsize(this.name,80),this.name),this.title.text(e),this.title.attr("title",t),this.set_buttons_sensitive(i)},set_buttons_sensitive:function(e){e?["new_","save","delete_","copy","import"].forEach(function(e){this.buttons[e]&&this.buttons[e].addClass("disabled"),this.menu_buttons[e]&&this.menu_buttons[e].addClass("disabled")}.bind(this)):[["new_",(e=Sao.common.MODELACCESS.get(this.screen.model_name)).create],["save",e.create||e.write],["delete_",e.delete],["copy",e.create],["import",e.create]].forEach(function(e){var t=e[0],e=e[1];this.buttons[t]&&this.buttons[t].toggleClass("disabled",!e),this.menu_buttons[t]&&this.menu_buttons[t].toggleClass("disabled",!e)}.bind(this))},attach:function(e){var t,n,o=function(){return new Sao.Window.Attachment(t,function(){this.refresh_resources(!0)}.bind(this))}.bind(this),i=function(){this.attachment_preview.children().length?(this.attachment_preview.empty(),this.attachment_screen=null,this.attachment_preview.removeClass("col-md-4 col-md-push-8"),this.content.removeClass("col-md-8 col-md-pull-4")):(this.attachment_preview.append(this._attachment_preview_el()),this.refresh_attachment_preview(),this.attachment_preview.addClass("col-md-4 col-md-push-8"),this.content.addClass("col-md-8 col-md-pull-4"))}.bind(this),s=this.buttons.attach.parents(".dropdown");e?(t=this.screen.current_record,(n=s.find(".dropdown-menu")).empty(),Sao.Window.Attachment.get_attachments(t).then(function(e){e.forEach(function(e){var t=e[0],i=e[1],t=jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(t).appendTo(jQuery("<li/>",{role:"presentation"}).appendTo(n));"string"==typeof i?(t.attr("href",i),t.attr("target","_new")):t.click(function(e){e.preventDefault(),i()})})}).always(function(){n.append(jQuery("<li/>",{class:"divider"})),n.append(jQuery("<li/>",{role:"presentation",class:"input-file"}).append(jQuery("<input/>",{type:"file",role:"menuitem",multiple:!0,tabindex:-1}).change(function(){var i=o();Sao.common.get_input_data(jQuery(this),function(e,t){i.add_data(e,t)})})).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(Sao.i18n.gettext("Add...")))),n.append(jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(Sao.i18n.gettext("Preview")).click(function(e){e.preventDefault(),i()}))),n.append(jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(Sao.i18n.gettext("Manage...")).click(function(e){e.preventDefault(),o()})))})):window.setTimeout(function(){this.buttons.attach.click()}.bind(this))},attach_drop:function(e){e.preventDefault(),e.stopPropagation(),e=e.originalEvent;var t=this.screen.current_record;if(t&&!(t.id<0)){var i,n,o=[],s=[],r=[];if(e.dataTransfer.items)for(console.log(e.dataTransfer.items),i=0;i<e.dataTransfer.items.length;i++){var a,c=e.dataTransfer.items[i];if("string"==c.kind){if("text/uri-list"==c.type)a=s;else{if("text/plain"!=c.type)continue;a=r}c=jQuery.Deferred();e.dataTransfer.items[i].getAsString(c.resolve),a.push(c);break}(n=e.dataTransfer.items[i].getAsFile())&&o.push(n)}else for(i=0;i<e.dataTransfer.files.length;i++)(n=e.dataTransfer.files[i])&&o.push(n);var l=new Sao.Window.Attachment(t,function(){this.refresh_resources(!0)}.bind(this));o.forEach(function(e){Sao.common.get_file_data(e,function(e,t){l.add_data(e,t)})}),jQuery.when.apply(jQuery,s).then(function(){function e(e){return Boolean(e)}for(var t=0;t<arguments.length;t++)arguments[t].split("\r\n").filter(e).forEach(l.add_uri,l)}),jQuery.when.apply(jQuery,r).then(function(){for(var e=0;e<arguments.length;e++)l.add_text(arguments[e])}),e.dataTransfer.items?e.dataTransfer.items.clear():e.dataTransfer.clearData()}},_attachment_preview_el:function(){var e=jQuery("<div/>",{class:"text-center"}),t=jQuery("<div/>",{class:"btn-group"}).appendTo(e),n=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(t),o=jQuery("<span/>",{class:"badge"}).text("(0/0)").appendTo(jQuery("<span/>",{class:"btn btn-sm btn-link"}).appendTo(t)),s=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(t),i=new Sao.Screen("ir.attachment",{readonly:!0,mode:["form"],context:{preview:!0}});return this.attachment_screen=i,n.click(function(){i.display_previous()}),s.click(function(){i.display_next()}),i.message_callback=function(e){var t=e[0],i=e[1],e=(t||"_")+"/"+i;o.text(e).attr("title",e),n.prop("disabled",!t||t<=1),s.prop("disabled",!t||i<=t)},i.switch_view().done(function(){e.append(i.screen_container.el)}),e},refresh_attachment_preview:function(e){var t;!this.attachment_screen||(t=this.screen.current_record)&&(t=[["resource","=",t.model.name+","+t.id],["type","=","data"]],Sao.common.compare(this.attachment_screen.domain,t)&&!e||(this.attachment_screen.domain=t,this.attachment_screen.search_filter()))},note:function(){var e=this.screen.current_record;!e||e.id<0||new Sao.Window.Note(e,function(){this.refresh_resources(!0)}.bind(this))},email:function(){function a(e){return"ir.action.report"==e.type}this.buttons.email.hasClass("disabled")||this.modified_save().then(function(){var s,r=this.screen.current_record;!r||r.id<0||(s=this.title.text(),this.screen.model.execute("view_toolbar_get",[],this.screen.context).then(function(e){for(var i=e.print.filter(a),n={},t=0;t<e.emails.length;t++){var o=e.emails[t];n[o.name]=o.id}r.rec_name().then(function(t){function e(e){new Sao.Window.Email(s+": "+t,r,i,e)}Sao.common.selection(Sao.i18n.gettext("Template"),n,!0).then(e,e)})}))}.bind(this))},refresh_resources:function(e){var t=this.screen.current_record;t?t.get_resources(e).always(this.update_resources.bind(this)):this.update_resources(),e&&this.refresh_attachment_preview(!0)},update_resources:function(e){e=e||{};var t=this.screen.get_id(),s=t<0||null==t,i=function(e,t,i,n){var o=this.buttons[e],e=o.find(".badge");e.length||(e=jQuery("<span/>",{class:"badge"}).appendTo(o)),n=n?Sao.config.icon_colors[n]:"",e.css("background-color",n),e.css("color","#fff"),e.text(i),o.attr("title",t),o.prop("disabled",s)}.bind(this),n=(o=e.attachment_count||0)||"";99<o&&(n="99+"),i("attach",Sao.i18n.gettext("Attachment (%1)",o),n,1);var o=e.note_count||0,t=e.note_unread||0,n="",e=0<t?2:1;o&&(n=9<o?"+":o,n=9<t?"+/"+n:t+"/"+n),i("note",Sao.i18n.gettext("Note (%1/%2)",t,o),n,e)},record_message:function(n){var e;n&&(e="_",0!==n[0]&&(e=n[0]),["print","relate","email","save","attach"].forEach(function(t){var e=this.buttons[t],i=e._can_be_sensitive;void 0===i&&(i=!0),"print"==t||"relate"==t||"email"==t?i|=this.screen.get_buttons().some(function(e){return(e.attributes.keyword||"action")==t}):"save"==t&&(i&=!this.screen.readonly),e.prop("disabled",!(n[0]&&i))}.bind(this)),this.buttons.switch_.prop("disabled",1<this.attributes.view_ids),this.menu_buttons.delete_.toggleClass("disabled",!this.screen.deletable),this.menu_buttons.save.toggleClass("disabled",this.screen.readonly),e=e+" / "+n[1],n[1]<n[2]&&null!==this.screen.limit&&n[2]>this.screen.limit&&(e+=Sao.i18n.gettext(" of ")+n[2]),this.status_label.text(e).attr("title",e)),this.info_bar.message(),this.refresh_attachment_preview()},action:function(){window.setTimeout(function(){this.buttons.action.click()}.bind(this))},relate:function(){window.setTimeout(function(){this.buttons.relate.click()}.bind(this))},print:function(){window.setTimeout(function(){this.buttons.print.click()}.bind(this))},export:function(){this.modified_save().then(function(){new Sao.Window.Export(this.title.text(),this.screen,this.screen.current_view.get_fields())}.bind(this))},do_export:function(o){this.modified_save().then(function(){var e,i=this.screen.current_view&&"tree"==this.screen.current_view.view_type&&this.screen.current_view.children_field?(e=this.screen.listed_records.map(function(e){return e.id}),this.screen.listed_paths):(e=this.screen.selected_records.map(function(e){return e.id}),this.screen.selected_paths),n=o["export_fields."].map(function(e){return e.name});this.screen.model.execute("export_data",[e,n],this.screen.context).then(function(e){var t={fields:n,data:e};t.data=e.map(function(e,t){t=i&&i[t]?i[t].length-1:0;return Sao.Window.Export.format_row(e,t)});e=",";navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(e=";");e=Papa.unparse(t,{quoteChar:'"',delimiter:e});navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(e=Sao.BOM_UTF8+e),Sao.common.download_file(e,o.name+".csv",{type:"text/csv;charset=utf-8"})})}.bind(this))},import:function(){Sao.common.MODELACCESS.get(this.screen.model_name).create&&new Sao.Window.Import(this.title.text(),this.screen)},get_url:function(){return this.screen.get_url(this.name)}}),Sao.Tab.Board=Sao.class_(Sao.Tab,{class_:"tab-board",init:function(e){Sao.Tab.Board._super.init.call(this,e),this.model=e.model,this.view_id=0<e.view_ids.length?e.view_ids[0]:null,this.context=e.context;var e=(e=e.name)||Sao.common.MODELNAME.get(this.model);this.name=e,this.dialogs=[],this.board=null,e=new Sao.Model("ir.ui.view"),this.view_prm=e.execute("read",[[this.view_id],["arch"]],this.context),this.view_prm.done(function(e){e=jQuery(jQuery.parseXML(e[0].arch));this.board=new Sao.View.Board(e,this.context),this.board.actions_prms.done(function(){for(var e=0,t=this.board.actions.length;e<t;e++)this.board.actions[e].screen.tab=this;this.board.reload()}.bind(this)),this.content.append(this.board.el)}.bind(this)),this.create_tabcontent(),this.set_name(this.name),this.title.text(this.name_el.text())},compare:function(e){if(!e)return!1;var t=Sao.common.compare;return this.model===e.model&&t(this.attributes.view_ids||[],e.view_ids||[])&&JSON.stringify(this.context)===JSON.stringify(e.context)},reload:function(){this.board.reload()},record_message:function(){for(var e=this.board.actions.length,t=0;t<e;t++)this.board.actions[t].update_domain(this.board.actions)},refresh_resources:function(){},update_resources:function(){}}),Sao.Tab.Wizard=Sao.class_(Sao.Tab,{class_:"tab-wizard",init:function(e){Sao.Tab.Wizard._super.init.call(this),this.wizard=e,this.set_name(e.name),(e.tab=this).create_tabcontent(),this.title.text(this.name_el.text()),this.content.remove(),this.content=e.form,this.main.css("padding-top",0).append(e.form)},create_toolbar:function(){return jQuery("<span/>")},_close_allowed:function(){var e=this.wizard,t=jQuery.when();e.state!==e.end_state&&e.end_state in e.states&&(t=e.response(e.states[e.end_state].attributes));var i=jQuery.Deferred();return t.always(function(){e.state===e.end_state?i.resolve():i.reject()}),i.promise()}})}(),function(){"use strict";Sao.ScreenContainer=Sao.class_(Object,{init:function(e){this.alternate_viewport=jQuery("<div/>",{class:"screen-container"}),this.alternate_view=!1,this.search_modal=null,this.search_form=null,this.last_search_text="",this.tab_domain=e||[],this.tab_counter=[],this.el=jQuery("<div/>",{class:"screen-container"}),this.filter_box=jQuery("<form/>",{class:"filter-box"}).submit(function(e){this.do_search(),e.preventDefault()}.bind(this));var t=jQuery("<div/>",{class:"row"}).appendTo(this.filter_box);this.el.append(this.filter_box),this.filter_button=jQuery("<button/>",{type:"button",class:"btn btn-link"}).text(Sao.i18n.gettext("Filters")),this.filter_button.click(this.search_box.bind(this)),this.search_entry=jQuery("<input/>",{class:"form-control mousetrap",placeholder:Sao.i18n.gettext("Search"),autocomplete:"off"}),this.search_list=jQuery("<datalist/>"),this.search_list.uniqueId(),this.search_entry.attr("list",this.search_list.attr("id")),this.search_entry.on("input",this.update.bind(this));var i=jQuery("<button/>",{type:"button",class:"btn btn-default hidden-md hidden-lg","aria-label":Sao.i18n.gettext("Clear Search"),title:Sao.i18n.gettext("Clear Search")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-clear"));i.hide(),i.click(function(){this.search_entry.val("").change(),this.do_search()}.bind(this)),this.search_entry.on("keyup change",function(){this.search_entry.val()?i.show():i.hide(),this.bookmark_match()}.bind(this));e=jQuery("<button/>",{type:"submit",class:"btn btn-default","aria-label":Sao.i18n.gettext("Search"),title:Sao.i18n.gettext("Search")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-search"));this.but_active=jQuery("<button/>",{type:"button",class:"btn btn-default hidden-xs","aria-expanded":!1}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-archive",{"aria-hidden":!0})),this._set_active_tooltip(),this.but_active.click(this.search_active.bind(this)),this.but_bookmark=jQuery("<button/>",{type:"button",class:"btn btn-default dropdown-toggle","data-toggle":"dropdown","aria-expanded":!1,"aria-label":Sao.i18n.gettext("Bookmarks"),title:Sao.i18n.gettext("Bookmarks")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-bookmark",{"aria-hidden":!0})).uniqueId();var n,o,s=jQuery("<ul/>",{class:"dropdown-menu dropdown-menu-right",role:"menu","aria-labelledby":this.but_bookmark.attr("id")});this.but_bookmark.click(function(){s.empty();for(var e=this.bookmarks(),t=0;t<e.length;t++){var i=e[t][1],n=e[t][2];jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(i).click(n,this.bookmark_activate.bind(this))).appendTo(s)}}.bind(this)),this.but_star=jQuery("<button/>",{class:"btn btn-default hidden-xs",type:"button"}).append(jQuery("<img/>",{class:"icon","aria-hidden":!0}).data("star",!1)).click(this.star_click.bind(this)),this.set_star(),jQuery("<div/>",{class:"input-group input-group-sm"}).append(jQuery("<span/>",{class:"input-group-btn"}).append(this.filter_button)).append(this.search_entry).append(this.search_list).append(jQuery("<span/>",{class:"input-group-btn"}).append(i).append(e).append(this.but_star).append(this.but_bookmark).append(s).append(this.but_active)).appendTo(jQuery("<div/>",{class:"col-sm-10 col-xs-12"}).appendTo(t)),this.but_prev=jQuery("<button/>",{type:"button",class:"btn btn-default btn-sm","aria-label":Sao.i18n.gettext("Previous"),title:Sao.i18n.gettext("Previous")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-back",{"aria-hidden":!0})),this.but_prev.click(this.search_prev.bind(this)),this.but_next=jQuery("<button/>",{type:"button",class:"btn btn-default btn-sm","aria-label":Sao.i18n.gettext("Next"),title:Sao.i18n.gettext("Next")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-forward",{"aria-hidden":!0})),this.but_next.click(this.search_next.bind(this)),jQuery("<div/>",{class:"btn-group",role:"group"}).append(this.but_prev).append(this.but_next).appendTo(jQuery("<div/>",{class:"col-sm-2 pull-right"}).appendTo(t)),this.content_box=jQuery("<div/>",{class:"content-box"}),jQuery.isEmptyObject(this.tab_domain)?this.tab=null:(this.tab=jQuery("<div/>",{class:"tab-domain"}).appendTo(this.el),n=jQuery("<ul/>",{class:"nav nav-tabs",role:"tablist"}).appendTo(this.tab),jQuery("<div/>",{class:"tab-content"}).appendTo(this.tab),this.tab_domain.forEach(function(e,t){var i=e[0],e=jQuery("<span/>",{class:"badge"});jQuery("<li/>",{role:"presentation",id:"nav-"+t}).append(jQuery("<a/>",{"aria-controls":t,role:"tab","data-toggle":"tab",href:"#"+t}).text(i+" ").append(e)).appendTo(n);this.tab_counter.push(e)}.bind(this)),n.find("a:first").tab("show"),o=this,n.find("a").click(function(e){e.preventDefault(),jQuery(this).tab("show"),o.do_search(),o.screen.count_tab_domain(!0)})),this.el.append(this.content_box)},set_text:function(e){this.search_entry.val(e),this.bookmark_match()},update:function(){var e=this.screen.domain_parser.completion(this.get_text());this.search_list.empty(),e.forEach(function(e){jQuery("<option/>",{value:e.trim()}).appendTo(this.search_list)},this)},set_star:function(e){var t,i=this.but_star.children("img"),n=e?(t="tryton-star",Sao.i18n.gettext("Remove this bookmark")):(t="tryton-star-border",Sao.i18n.gettext("Bookmark this filter"));this.but_star.data("star",Boolean(e)),this.but_star.attr("title",n),this.but_star.attr("aria-label",n),Sao.common.ICONFACTORY.get_icon_url(t).then(function(e){i.attr("src",e)})},get_star:function(){return this.but_star.data("star")},star_click:function(){var i,e=this.get_star(),n=this.screen.model_name,o=function(){this.bookmark_match(),this.but_bookmark.prop("disabled",jQuery.isEmptyObject(this.bookmarks()))}.bind(this);e?(e=this.bookmark_match(),Sao.common.VIEW_SEARCH.remove(n,e).then(function(){o()})):(i=this.get_text())&&Sao.common.ask.run(Sao.i18n.gettext("Bookmark Name:")).then(function(e){var t;e&&(t=this.screen.domain_parser.parse(i),Sao.common.VIEW_SEARCH.add(n,e,t).then(function(){o()}),this.set_text(this.screen.domain_parser.string(t)))}.bind(this))},bookmarks:function(){return Sao.common.VIEW_SEARCH.get(this.screen.model_name).filter(function(e){return this.screen.domain_parser.stringable(e[2])}.bind(this))},bookmark_activate:function(e){e.preventDefault();e=e.data;this.set_text(this.screen.domain_parser.string(e)),this.do_search()},bookmark_match:function(){var e=this.get_text();if(e){for(var t=this.screen.domain_parser.parse(e),i=(this.get_star(),this.bookmarks()),n=0;n<i.length;n++){var o=i[n][0],s=(i[n][1],i[n][2]),r=i[n][3];if(this.screen.domain_parser.string(s)===e||Sao.common.compare(s,t))return this.set_star(!0),this.but_star.prop("disabled",!r),o}this.but_star.prop("disabled",!e)}this.set_star(!1)},search_prev:function(){this.screen.search_prev(this.get_text())},search_next:function(){this.screen.search_next(this.get_text())},search_active:function(){this.but_active.toggleClass("active"),this._set_active_tooltip(),this.screen.search_filter(this.get_text())},_set_active_tooltip:function(){var e=this.but_active.hasClass("active")?Sao.i18n.gettext("Show active records"):Sao.i18n.gettext("Show inactive records");this.but_active.attr("aria-label",e),this.but_active.attr("title",e)},get_tab_index:function(){return this.tab?this.tab.find("li").index(this.tab.find("li.active")):-1},get_tab_domain:function(){if(!this.tab)return[];var e=this.get_tab_index();return e<0?[]:this.tab_domain[e][1]},set_tab_counter:function(e,t){!jQuery.isEmptyObject(this.tab_counter)&&this.tab&&((t=null==t?this.tab.find("li").index(this.tab.find("li.active")):t)<0||(t=this.tab_counter[t],null===e?(t.attr("title",""),t.text("")):(t.attr("title",e),t.text(99<e?"99+":e))))},do_search:function(){return this.screen.search_filter(this.get_text())},set_screen:function(e){this.screen=e,this.but_bookmark.prop("disabled",jQuery.isEmptyObject(this.bookmarks())),this.bookmark_match()},show_filter:function(){this.filter_box.show(),this.tab&&this.tab.show()},hide_filter:function(){this.filter_box.hide(),this.tab&&this.tab.hide()},set:function(e){this.alternate_view?(this.alternate_viewport.children().detach(),this.alternate_viewport.append(e)):(this.content_box.children().detach(),this.content_box.append(e))},get_text:function(){return this.search_entry.val()},search_box:function(){var s=this.screen.domain_parser,t=function(){this.search_modal.modal("hide");for(var e="",t=s.quote.bind(s),i=0;i<this.search_form.fields.length;i++){var n=this.search_form.fields[i][0],o=this.search_form.fields[i][1],o=o instanceof Sao.ScreenContainer.Between||o instanceof Sao.ScreenContainer.Selection?o.get_value(t):t(o.val());o&&(e+=t(n)+": "+o+" ")}this.set_text(e),this.do_search().then(function(){this.last_search_text=this.get_text()}.bind(this))}.bind(this);if(!this.search_modal){var e=new Sao.Dialog(Sao.i18n.gettext("Filters"),"","lg");this.search_modal=e.modal,this.search_form=e.content,this.search_form.addClass("form-horizontal"),this.search_form.submit(function(e){t(),e.preventDefault()});var i,n=[];for(i in s.fields)!(u=s.fields[i]).searchable&&void 0!==u.searchable||u.name.contains(".")||n.push(u);var o="filter-"+this.screen.model_name+"-";this.search_form.fields=[];for(var r=0;r<n.length;r++){var a,c,l,d,h,u=n[r],_=jQuery("<div/>",{class:"form-group form-group-sm"}).append(jQuery("<label/>",{class:"col-sm-4 control-label",for:o+u.name,text:u.string})).appendTo(e.body);switch(u.type){case"boolean":c=a=jQuery("<select/>",{class:"form-control input-sm",id:o+u.name}),["",Sao.i18n.gettext("True"),Sao.i18n.gettext("False")].forEach(function(t){return function(e){jQuery("<option/>",{value:e,text:e}).appendTo(t)}}(a));break;case"selection":case"multiselection":a=(c=new Sao.ScreenContainer.Selection(u.selection,o+u.name)).el;break;case"date":l=Sao.common.date_format(this.screen.context.date_format),a=(c=new Sao.ScreenContainer.Dates(l,o+u.name)).el;break;case"datetime":d=Sao.common.date_format(this.screen.context.date_format),h=new Sao.PYSON.Decoder({}).decode(u.format),h=Sao.common.moment_format(h),a=(c=new Sao.ScreenContainer.DateTimes(l=d+" "+h,o+u.name)).el;break;case"time":h=new Sao.PYSON.Decoder({}).decode(u.format),l=Sao.common.moment_format(h),a=(c=new Sao.ScreenContainer.Times(l,o+u.name)).el;break;case"integer":case"float":case"numeric":a=(c=new Sao.ScreenContainer.Numbers(o+u.name)).el;break;default:c=a=jQuery("<input/>",{class:"form-control input-sm",type:"text",placeholder:u.string,id:o+u.name})}jQuery("<div/>",{class:"col-sm-8"}).append(a).appendTo(_),this.search_form.fields.push([u.string,c,a])}jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("Find")).click(t).appendTo(e.footer)}if(this.search_modal.modal("show"),this.last_search_text.trim()!==this.get_text().trim()){for(var m=0;m<this.search_form.fields.length;m++){var p=this.search_form.fields[m][1];p instanceof Sao.ScreenContainer.Selection?p.set_value([]):p instanceof Sao.ScreenContainer.Between?p.set_value(null,null):p.val("")}this.search_form.fields[0][2].focus()}}}),Sao.ScreenContainer.Between=Sao.class_(Object,{init:function(e){this.el=jQuery("<div/>",{class:"row",id:e}),this.from=this.build_entry(Sao.i18n.gettext("From"),jQuery("<div/>",{class:"col-md-5"}).appendTo(this.el)),jQuery("<p/>",{class:"text-center"}).append("..").appendTo(jQuery("<div/>",{class:"col-md-1"}).appendTo(this.el)),this.to=this.build_entry(Sao.i18n.gettext("To"),jQuery("<div/>",{class:"col-md-5"}).appendTo(this.el))},build_entry:function(e,t){},get_value:function(e){var t=this._get_value(this.from),i=this._get_value(this.to);return t&&i?t!==i?e(t)+".."+e(i):e(t):t?">="+e(t):i?"<="+e(i):void 0},_get_value:function(e){},set_value:function(e,t){this._set_value(this.from,e),this._set_value(this.to,t)},_set_value:function(e,t){},_from_changed:function(e){this._set_value(this.to,this._get_value(this.from))}}),Sao.ScreenContainer.BetweenDates=Sao.class_(Sao.ScreenContainer.Between,{init:function(e,t){this.format=e,Sao.ScreenContainer.BetweenDates._super.init.call(this,t),this.from.change(this._from_changed.bind(this))},_get_value:function(e,t){return e.find("input[type=text]").val()},_set_value:function(e,t){e.find("input[type=text]").val(t)}}),Sao.ScreenContainer.Dates=Sao.class_(Sao.ScreenContainer.BetweenDates,{_input:"date",_input_format:"%Y-%m-%d",_format:Sao.common.format_date,_parse:Sao.common.parse_date,build_entry:function(e,t){var i=jQuery("<div/>",{class:"input-group input-group-sm input-icon input-icon-secondary input-"+this._input}).appendTo(t),n=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap"}).appendTo(i),o=jQuery("<input/>",{type:this._input,role:"button",tabindex:-1});o.click(function(){var e=this._parse(this.format,n.val()),e=this._format(this._input_format,e);o.val(e)}.bind(this)),o.change(function(){var e=o.val();e&&(e=this._parse(this._input_format,e),e=this._format(this.format,e),n.val(e),n.focus())}.bind(this)),o[0].type==this._input&&(t=jQuery("<div/>",{class:"icon-input icon-secondary","aria-label":Sao.i18n.gettext("Open the calendar"),title:Sao.i18n.gettext("Open the calendar")}).appendTo(i),o.appendTo(t),Sao.common.ICONFACTORY.get_icon_img("tryton-date").appendTo(t));var s=new Mousetrap(n[0]);return s.bind("enter",function(e,t){var i=this._parse(this.format,n.val()),i=this._format(this.format,i);n.val(i)}.bind(this)),s.bind("=",function(e,t){e.preventDefault(),n.val(this._format(this.format,moment()))}.bind(this)),Sao.common.DATE_OPERATORS.forEach(function(i){s.bind(i[0],function(e,t){e.preventDefault();e=this._parse(this.format,n.val())||Sao.DateTime();e.add(i[1]),n.val(this._format(this.format,e))}.bind(this))}.bind(this)),i}}),Sao.ScreenContainer.DateTimes=Sao.class_(Sao.ScreenContainer.Dates,{_input:"datetime-local",_input_format:"%Y-%m-%dT%H:%M:%S",_format:Sao.common.format_datetime,_parse:Sao.common.parse_datetime}),Sao.ScreenContainer.Times=Sao.class_(Sao.ScreenContainer.Dates,{_input:"time",_input_format:"%H:%M:%S",_format:Sao.common.format_time,_parse:Sao.common.parse_time,build_entry:function(e,t){t=Sao.ScreenContainer.Times._super.build_entry.call(this,e,t);return~navigator.userAgent.indexOf("Firefox")&&t.find(".icon-input").hide(),t}}),Sao.ScreenContainer.Numbers=Sao.class_(Sao.ScreenContainer.Between,{init:function(e){Sao.ScreenContainer.Numbers._super.init.call(this,e),this.from.change(this._from_changed.bind(this))},build_entry:function(e,t){return jQuery("<input/>",{class:"form-control input-sm",type:"number",step:"any"}).appendTo(t)},_get_value:function(e,t){return e.val()},_set_value:function(e,t){return e.val(t)}}),Sao.ScreenContainer.Selection=Sao.class_(Object,{init:function(e,t){this.el=jQuery("<select/>",{class:"form-control input-sm",multiple:!0,id:t}),e.forEach(function(e){jQuery("<option/>",{value:e[1],text:e[1]}).appendTo(this.el)}.bind(this))},get_value:function(e){var t=this.el.val();return t=jQuery.isEmptyObject(t)?null:jQuery.map(t,e).reduce(function(e,t){return e&&(e+=";"),e+t})},set_value:function(e){this.el.val(e)}}),Sao.Screen=Sao.class_(Object,{init:function(e,t){this.model_name=e,this.model=new Sao.Model(e,t),this.attributes=jQuery.extend({},t),this.view_ids=jQuery.extend([],t.view_ids),this.view_to_load=jQuery.extend([],t.mode||["tree","form"]),this.views=[],this.views_preload=t.views_preload||{},this.exclude_field=t.exclude_field,this.new_group(t.context||{}),this.current_view=null,this.current_record=null,this.domain=t.domain||[],this.context_domain=t.context_domain,this.size_limit=null,void 0===this.attributes.limit||null===this.attributes.limit?this.limit=Sao.config.limit:this.limit=t.limit,this.offset=0,this.order=this.default_order=t.order;e=Sao.common.MODELACCESS.get(e);e.write||e.create||(this.attributes.readonly=!0),this.search_count=0,this.screen_container=new Sao.ScreenContainer(t.tab_domain),this.breadcrumb=t.breadcrumb||[],this.context_screen=null,t.context_model&&(this.context_screen=new Sao.Screen(t.context_model,{mode:["form"],context:t.context}),this.context_screen_prm=this.context_screen.switch_view().then(function(){return jQuery("<div/>",{class:"row"}).append(jQuery("<div/>",{class:"col-md-12"}).append(this.context_screen.screen_container.el)).prependTo(this.screen_container.filter_box),this.context_screen.new_(!1).then(function(e){return e.default_get()})}.bind(this))),t.row_activate?this.row_activate=t.row_activate:this.row_activate=this.default_row_activate,this.tree_states={},this.tree_states_done=[],this.fields_view_tree={},this._domain_parser={},this.pre_validate=!1,this.tab=null,this.message_callback=null,this.switch_callback=null,this.group_changed_callback=null},get readonly(){var e=this.selected_records.some(function(e){return e.readonly});return this.attributes.readonly||e},get deletable(){return this.selected_records.every(function(e){return e.deletable})},load_next_view:function(){if(jQuery.isEmptyObject(this.view_to_load))return jQuery.when();var e;jQuery.isEmptyObject(this.view_ids)||(e=this.view_ids.shift());var t=this.view_to_load.shift();return this.add_view_id(e,t)},add_view_id:function(e,t){var i;if(e&&this.views_preload[String(e)])i=this.views_preload[String(e)];else{if(e||!this.views_preload[t])return this.model.execute("fields_view_get",[e,t],this.context).pipe(this.add_view.bind(this));i=this.views_preload[t]}return this.add_view(i),jQuery.when()},add_view:function(e){var t=e.arch,i=e.fields,n=e.view_id,t=jQuery(jQuery.parseXML(t));"tree"==t.children().prop("tagName")&&(this.fields_view_tree[n]=e);var o,s="eager";for(o in"form"==t.children().prop("tagName")&&(s="lazy"),i)o in this.model.fields&&"eager"!=s?i[o].loading=this.model.fields[o].description.loading:i[o].loading=s;for(o in this.group.add_fields(i),i)this.group.model.fields[o].views.add(n);e=Sao.View.parse(this,n,e.type,t,e.field_childs);return this.views.push(e),e},get number_of_views(){return this.views.length+this.view_to_load.length},switch_view:function(r,a,c){if(c=void 0===c||c,a=null!=a?Number(a):null,this.current_view){this.current_view.set_value(),this.current_record&&!~this.current_record.group.indexOf(this.current_record)&&(this.current_record=null);var e=this.current_view.get_fields();if(this.current_record&&this.current_view.editable&&!this.current_record.validate(e,!1,!1,!0))return this.screen_container.set(this.current_view.el),this.current_view.display().done(function(){this.set_cursor()}.bind(this))}var l=function(){return!!this.current_view&&(!(!r&&null===a)&&(null!==a?this.current_view.view_id==a:this.current_view.view_type==r))}.bind(this),d=function(){for(var e=function(){return this.screen_container.set(this.current_view.el),(c?this.display().done(function(){this.set_cursor()}.bind(this)):jQuery.when()).done(function(){this.switch_callback&&this.switch_callback()}.bind(this))}.bind(this),t=function(){return!(!r&&null===a)&&!(r&&!a&&!this.view_to_load.length)}.bind(this),i=function(){this.current_view=this.views[this.views.length-1]}.bind(this),n=function(){return i(),(t()?d:e)()}.bind(this),o=function(e){return e.view_id==a};!l();){if(this.view_to_load.length)return this.load_next_view().then(n);if(null!==a&&!this.views.find(o))return this.add_view_id(a,r).then(i);var s=this.views.indexOf(this.current_view);if(this.current_view=this.views[(s+1)%this.views.length],!t())break}return e()}.bind(this);return d()},search_filter:function(e,i){if(i=i||!1,this.context_screen&&!i){if("pending"==this.context_screen_prm.state())return this.context_screen_prm.then(function(){return this.search_filter(e)}.bind(this));var t=this.context_screen.current_record;if(t&&!t.validate(null,!1,null,!0))return this.new_group(),this.context_screen.display(!0),jQuery.when();t=this.context_screen.get_on_change_value();delete t.id,this.new_group(jQuery.extend(this.local_context,t))}var n=this.search_domain(e,!0),o=this.context;this.screen_container.but_active.hasClass("active")&&(o.active_test=!1);var s=function(){return this.model.execute("search",[n,this.offset,this.limit,this.order],o).then(function(e){return e.length||this.offset<=0?e:(this.offset=Math.max(this.offset-this.limit,0),s())}.bind(this))}.bind(this);return s().then(function(t){var e=jQuery.when(this.search_count);return i||(null!==this.limit&&t.length==this.limit?e=this.model.execute("search_count",[n],o).then(function(e){return this.search_count=e,this.search_count}.bind(this),function(){return this.search_count=0,this.search_count}.bind(this)):this.search_count=t.length),e.then(function(e){return this.screen_container.but_next.prop("disabled",!(void 0!==this.limit&&t.length==this.limit&&e>this.limit+this.offset)),this.screen_container.but_prev.prop("disabled",this.offset<=0),i?t:(this.clear(),this.load(t).then(function(){this.count_tab_domain()}.bind(this)))}.bind(this))}.bind(this))},search_domain:function(e,t,i){t=t||!1,i=void 0===i||i;var n,o=[];return!this.group.parent&&this.domain_parser?(n=this.domain_parser,e||""===e?o=n.parse(e):(o=this.attributes.search_value,this.attributes.search_value=null),t&&this.screen_container.set_text(n.string(o))):o=[["id","in",this.group.map(function(e){return e.id})]],jQuery.isEmptyObject(o)?o=this.domain:jQuery.isEmptyObject(this.domain)||(o=["AND",o,this.domain]),this.screen_container.but_active.hasClass("active")&&(o=jQuery.isEmptyObject(o)?[["active","=",!1]]:[o,["active","=",!1]]),this.current_view&&"calendar"==this.current_view.view_type&&(o=jQuery.isEmptyObject(o)?this.current_view.current_domain():["AND",o,this.current_view.current_domain()]),this.context_domain&&(o=["AND",o,new Sao.PYSON.Decoder(this.context).decode(this.context_domain)]),i&&(i=this.screen_container.get_tab_domain(),jQuery.isEmptyObject(i)||(o=["AND",o,i])),o},count_tab_domain:function(i){void 0===i&&(i=!1);var n=this.search_domain(this.screen_container.get_text(),!1,!1),o=this.screen_container.get_tab_index();this.screen_container.tab_domain.forEach(function(e,t){!e[2]||i&&t!=o||(e=["AND",e[1],n],this.screen_container.set_tab_counter(null,t),this.group.model.execute("search_count",[e],this.context).then(function(e){this.screen_container.set_tab_counter(e,t)}.bind(this)))}.bind(this))},get context(){var e=this.group.context;return this.context_screen&&(e.context_model=this.context_screen.model_name),e},get local_context(){var e=this.group.local_context;return this.context_screen&&(e.context_model=this.context_screen.model_name),e},set_group:function(e){var t,i={},n={};if(this.group){for(t in this.group.model.fields){var o=this.group.model.fields[t];i[t]=o.description,n[t]=o.views}this.group.screens.splice(this.group.screens.indexOf(this),1),jQuery.extend(e.on_write,this.group.on_write),e.on_write=e.on_write.filter(function(e,t,i){return t==i.indexOf(e)}),this.group.parent&&!e.parent&&(e.parent=this.group.parent)}e.screens.push(this),this.tree_states_done=[],this.views.map(function(e){e.reset()}),this.group=e,this.model=e.model,this.group.parent&&(this.order=null),e&&e.length?this.current_record=e[0]:this.current_record=null,this.group.add_fields(i);var s=function(e){this.group.model.fields[t].views.add(e)}.bind(this);for(t in n)n[t].forEach(s);this.group.exclude_field=this.exclude_field},new_group:function(e){e=e||this.context;e=new Sao.Group(this.model,e,[]);e.readonly=this.attributes.readonly,this.set_group(e)},get current_record(){return this.__current_record},set current_record(e){var t,i,n;this.__current_record=e,this.message_callback&&(n=i=null,e&&(i=0<=(t=this.group.indexOf(e))?t+this.offset+1:e.get_index_path(),n=e.id),n=[i||0,this.group.length+this.offset,this.search_count,n],this.message_callback(n)),this.switch_callback&&this.switch_callback(),this.tab&&(e?e.get_resources().always(this.tab.update_resources.bind(this.tab)):this.tab.update_resources(),this.tab.record_message())},load:function(e,t,i){return void 0===t&&(t=!0),this.group.load(e,i),this.current_view.reset(),e.length&&"calendar"!=this.current_view.view_type?this.current_record=this.group.get(e[0]):this.current_record=null,this.display().then(function(){t&&this.set_cursor()}.bind(this))},display:function(e){var t=[];if(this.current_record&&~this.current_record.group.indexOf(this.current_record)||(this.group&&this.group.length&&"calendar"!=this.current_view.view_type?this.current_record=this.group[0]:this.current_record=null),this.views){var i=this.search_active(~["tree","graph","calendar"].indexOf(this.current_view.view_type));t.push(i);for(var n=0;n<this.views.length;n++)this.views[n]&&(this.views[n]==this.current_view||this.views[n].el.parent().length)&&t.push(this.views[n].display())}return jQuery.when.apply(jQuery,t).then(function(){return this.set_tree_state().then(function(){this.current_record=this.current_record,e&&this.set_cursor(!1,!1)}.bind(this))}.bind(this))},display_next:function(){var e=this.current_view;if(e.set_value(),this.set_cursor(!1,!1),~["tree","form","list-form"].indexOf(e.view_type)&&this.current_record&&this.current_record.group){for(var t=this.current_record.group,i=this.current_record;t;){var n=t.indexOf(i);if(n<t.length-1){i=t[n+1];break}if(!t.parent||i.group.model.name!=t.parent.group.model.name)break;i=t.parent,t=t.parent.group}this.current_record=i}else this.current_record=this.group[0];return this.set_cursor(!1,!1),e.display()},display_previous:function(){var e=this.current_view;if(e.set_value(),this.set_cursor(!1,!1),~["tree","form","list-form"].indexOf(e.view_type)&&this.current_record&&this.current_record.group){for(var t=this.current_record.group,i=this.current_record;t;){var n=t.indexOf(i);if(0<n){i=t[n-1];break}if(!t.parent||i.group.model.name!=t.parent.group.model.name)break;i=t.parent,t=t.parent.group}this.current_record=i}else this.current_record=this.group[0];return this.set_cursor(!1,!1),e.display()},get selected_records(){return this.current_view?this.current_view.selected_records:[]},get selected_paths(){if(this.current_view&&"tree"==this.current_view.view_type)return this.current_view.get_selected_paths()},get listed_records(){return this.current_view&&"tree"==this.current_view.view_type?this.current_view.listed_records:this.current_record?[this.current_record]:[]},get listed_paths(){if(this.current_view&&"tree"==this.current_view.view_type)return this.current_view.get_listed_paths()},clear:function(){this.current_record=null,this.group.clear(),this.tree_states_done=[],this.views.map(function(e){e.reset()})},default_row_activate:function(){"tree"==this.current_view.view_type&&1==this.current_view.attributes.keyword_open?Sao.Action.exec_keyword("tree_open",{model:this.model_name,id:this.get_id(),ids:[this.get_id()]},this.local_context,!1):this.modified()||this.switch_view("form")},get_id:function(){if(this.current_record)return this.current_record.id},new_:function(n,o){var s=this.current_view;void 0===n&&(n=!0);var r,e=jQuery.when();return"calendar"==this.current_view.view_type&&(r=this.current_view.get_selected_date(),e=this.switch_view("form",void 0,!1)),(e=this.current_view&&("tree"==this.current_view.view_type&&!this.current_view.editable||"graph"==this.current_view.view_type)?this.switch_view("form",void 0,!1):e).then(function(){if(this.current_view.editable){var e=(this.current_record||this).group,t=e.new_(!1,void 0,o),i=n?t.default_get(o):jQuery.when();return i.then(function(){return e.add(t,this.new_position),this.current_record=t,"calendar"==s.view_type&&s.set_default_date(t,r),this.display().done(function(){this.set_cursor(!0,!0)}.bind(this)),t}.bind(this))}}.bind(this))},get new_position(){var e=null!==this.order?this.order:this.default_order;if(e)for(var t=0;t<e.length;t++){var i=e[t][0],n=e[t][1];if("id"==i&&n){if(n.startsWith("DESC"))return 0;if(n.startsWith("ASC"))return-1}}return this.group.parent?-1:0},set_on_write:function(e){e&&(~this.group.on_write.indexOf(e)||this.group.on_write.push(e))},cancel_current:function(e){var t=[];return this.current_record&&(this.current_record.cancel(),this.current_record.id<0&&(e?(this.current_record.reset(e),this.display()):t.push(this.remove(!1,!1,!1,[this.current_record])))),jQuery.when.apply(jQuery,t)},save_current:function(){var e=this.current_record;if(!e){if("tree"!=this.current_view.view_type||!this.group||!this.group.length)return jQuery.when();this.current_record=this.group[0],e=this.current_record}this.current_view.set_value();var t=this.current_view.get_fields(),i=e.get_path(this.group),n=jQuery.Deferred();if("tree"==this.current_view.view_type)n=this.group.save().then(function(){return this.current_record}.bind(this));else{if(!e.validate(t,null,null,!0))return this.current_view.display().then(function(){return this.set_cursor(),jQuery.Deferred().reject()}.bind(this));n=e.save().then(function(){return e})}t=function(){return this.display().then(function(){return n},function(){return n})}.bind(this);return n.then(function(e){return i&&e&&e.id&&i.splice(-1,1,[i[i.length-1][0],e.id]),this.group.get_by_path(i).then(function(e){this.current_record=e}.bind(this))}.bind(this)).then(t,t)},set_cursor:function(e,t){this.current_view&&~["tree","form","list-form"].indexOf(this.current_view.view_type)&&this.current_view.set_cursor(e,t)},modified:function(){function e(e){return e.has_changed()||e.id<0}if("tree"!=this.current_view.view_type){if(this.current_record&&e(this.current_record))return!0}else if(this.group.some(e))return!0;return!!this.current_view.modified},unremove:function(){this.current_view.selected_records.forEach(function(e){e.group.unremove(e)})},remove:function(i,n,o,s){var e=jQuery.when();if(s=s||this.current_view.selected_records,jQuery.isEmptyObject(s))return e;i&&(e=this.group.delete_(s));var t=s[0],r=t.group,a=r.indexOf(t),c=t.get_path(this.group);return e.then(function(){s.forEach(function(e){e.group.remove(e,n,!0,o,!1)}),s[0].group.changed();var e,t=[];return i&&s.forEach(function(e){e.group.parent&&t.push(e.group.parent.save(!1)),~e.group.record_deleted.indexOf(e)&&e.group.record_deleted.splice(e.group.record_deleted.indexOf(e),1),~e.group.record_removed.indexOf(e)&&e.group.record_removed.splice(e.group.record_removed.indexOf(e),1)}),0<a?(e=r[a-1],c.splice(-1,1,[c[c.length-1][0],e.id])):c.splice(-1,1),jQuery.isEmptyObject(c)?this.group.length&&(this.current_record=this.group[0]):t.push(this.group.get_by_path(c).then(function(e){this.current_record=e}.bind(this))),jQuery.when.apply(jQuery,t).then(function(){return this.display().done(function(){this.set_cursor()}.bind(this))}.bind(this))}.bind(this))},copy:function(){var t=jQuery.Deferred(),e=this.current_view.selected_records;return this.model.copy(e,this.context).then(function(e){this.group.load(e,!1,this.new_position),jQuery.isEmptyObject(e)||(this.current_record=this.group.get(e[0])),this.display().always(t.resolve)}.bind(this),t.reject),t.promise()},search_active:function(e){return e&&!this.group.parent?(this.screen_container.set_screen(this),this.screen_container.show_filter()):this.screen_container.hide_filter(),jQuery.when()},get domain_parser(){var e,t=this.current_view?this.current_view.view_id:null;if(t in this._domain_parser)return this._domain_parser[t];t in this.fields_view_tree?e=this.fields_view_tree[t]:(e=this.model.execute("fields_view_get",[!1,"tree"],this.context,!1),this.fields_view_tree[t]=e);var i,n,o,s=jQuery.extend({},e.fields);for(i in s){var r=s[i];"selection"!=r.type&&"reference"!=r.type||r.selection instanceof Array||((r=jQuery.extend({},r)).selection=this.get_selection(r),s[i]=r)}return"arch"in e&&(n=jQuery(jQuery.parseXML(e.arch)),o={},n.find("tree").children().each(function(e,t){var i,n;"field"==t.tagName&&((i=t.getAttribute("name"))in o||(o[i]=s[i],["string","factor"].forEach(function(e){t.getAttribute(e)&&(o[i][e]=t.getAttribute(e))})),!(n=t.getAttribute("symbol"))||n in o||(o[n]=s[n]))}),s=o),"active"in e.fields?this.screen_container.but_active.show():this.screen_container.but_active.hide(),[["id",Sao.i18n.gettext("ID"),"integer"],["create_uid",Sao.i18n.gettext("Created by"),"many2one"],["create_date",Sao.i18n.gettext("Created at"),"datetime"],["write_uid",Sao.i18n.gettext("Modified by"),"many2one"],["write_date",Sao.i18n.gettext("Modified at"),"datetime"]].forEach(function(e){var t=e[0],i=e[1],e=e[2];t in s||(s[t]={string:i,name:t,type:e},"datetime"==e&&(s[t].format='"%H:%M:%S"'))}),e=new Sao.common.DomainParser(s,this.context),this._domain_parser[t]=e},get_selection:function(e){var t,i=e.selection_change_with,e=jQuery.isEmptyObject(i)?this.model.execute(e.selection,[],void 0,!1):(t={},i.forEach(function(e){t[e]=null}),this.model.execute(e.selection,[t],void 0,!1));return e.sort(function(e,t){return e[1].localeCompare(t[1])})},search_prev:function(e){this.limit&&(this.offset=Math.max(this.offset-this.limit,0)),this.search_filter(e)},search_next:function(e){this.limit&&(this.offset+=this.limit),this.search_filter(e)},invalid_message:function(n){var e,t={};for(e in(n=n||this.current_record).model.fields){var i=n.model.fields[e];t[e]=i.description}var o=new Sao.common.DomainParser(t),s=[],r=n.invalid_fields();return Object.keys(r).sort().forEach(function(e){var t=r[e],i=n.model.fields[e].description.string;"required"==t||Sao.common.compare(t,[[e,"!=",null]])?s.push(Sao.i18n.gettext('"%1" is required.',i)):"domain"==t?s.push(Sao.i18n.gettext('"%1" is not valid according to its domain.',i)):"children"==t?s.push(Sao.i18n.gettext('The values of "%1" are not valid.',i)):o.stringable(t)?s.push(o.string(t)):s.push(Sao.i18n.gettext('"%1" is not valid according to its domain.'),i)}),5<s.length&&(s.splice(5,s.length),s.push("...")),s.join("\n")},get:function(){return this.current_record?(this.current_view.set_value(),this.current_record.get()):null},get_on_change_value:function(){return this.current_record?(this.current_view.set_value(),this.current_record.get_on_change_value()):null},reload:function(e,t){this.group.reload(e);var i=[];return t&&i.push(this.group.written(e)),this.group.parent&&i.push(this.group.parent.root_parent.reload()),jQuery.when.apply(jQuery,i).then(function(){this.display()}.bind(this))},get_buttons:function(){var e=this.current_view.selected_records;if(jQuery.isEmptyObject(e))return[];var i=this.current_view.get_buttons();return e.forEach(function(t){i=i.filter(function(e){if("instance"===e.attributes.type)return!1;e=t.expr_eval(e.attributes.states||{});return!(e.invisible||e.readonly)})}),i},button:function(n){var o,s=this.current_view.selected_records;this.current_view.set_value();for(var t=this.current_view.get_fields(),e=[],r=function(e){return function(){this.display(!0),e.validate(t)}.bind(this)}.bind(this),i=0;i<s.length;i++){var a=s[i],c=a.expr_eval(n.states||{}).pre_validate||[];e.push(a.validate(t,!1,c))}return jQuery.when.apply(jQuery,e).then(function(){for(var i=0;i<s.length;i++){var e=s[i];if(!arguments[i])return void Sao.common.warning.run(this.invalid_message(e),Sao.i18n.gettext("Pre-validation")).then(r(e))}var t=jQuery.when();return(t=n.confirm?Sao.common.sur.run(n.confirm):t).then(function(){var t=this.current_record;if("instance"!==n.type)return t.save(!1).then(function(){var e=this.context;for(e._timestamp={},o=[],i=0;i<s.length;i++)t=s[i],jQuery.extend(e._timestamp,t.get_timestamp()),o.push(t.id);return t.model.execute(n.name,[o],e).then(function(e){return this.reload(o,!0).then(function(){"string"==typeof e?this.client_action(e):e&&Sao.Action.execute(e,{model:this.model_name,id:this.current_record.id,ids:o},null,this.context,!0)}.bind(this))}.bind(this)).fail(function(){return this.reload(o,!0)}.bind(this))}.bind(this));var e=t.expr_eval(n.change||[]),e=t._get_on_change_args(e);return t.model.execute(n.name,[e],this.context).then(function(e){t.set_on_change(e),t.group.changed(),t.group.root_group.screens.forEach(function(e){e.display()})})}.bind(this))}.bind(this))},client_action:function(e){var t=Sao.common.MODELACCESS.get(this.model_name);"new"==e?t.create&&this.new_():"delete"==e?!t.delete||this.current_record&&!this.current_record.deletable||this.remove(!this.group.parent,!1,!this.group.parent):"remove"==e?t.write&&t.read&&this.group.parent&&this.remove(!1,!0,!1):"copy"==e?t.create&&this.copy():"next"==e?this.display_next():"previous"==e?this.display_previous():"close"==e?Sao.Tab.tabs.close_current():e.startsWith("switch")?this.switch_view.apply(this,e.split(" ",3).slice(1)):"reload"==e?~["tree","graph","calendar"].indexOf(this.current_view.view_type)&&!this.group.parent&&this.search_filter():"reload menu"==e?Sao.Session.current_session.reload_context().then(function(){Sao.menu()}):"reload context"==e&&Sao.Session.current_session.reload_context()},get_url:function(e){function t(e){return JSON.stringify(Sao.rpc.prepareObject(e))}var i=[];jQuery.isEmptyObject(this.domain)||i.push(["domain",t(this.domain)]);var n=this.local_context;jQuery.isEmptyObject(n)||i.push(["context",t(n)]),this.context_screen&&i.push(["context_model",this.context_screen.model_name]),e&&i.push(["name",t(e)]),jQuery.isEmptyObject(this.attributes.tab_domain)||i.push(["tab_domain",t(this.attributes.tab_domain)]);var o,n=["model",this.model_name],e=this.views.map(function(e){return e.view_id}).concat(this.view_ids);return"form"!=this.current_view.view_type?(o=this.attributes.search_value||(o=this.screen_container.get_text(),this.domain_parser.parse(o)),jQuery.isEmptyObject(o)||i.push(["search_value",t(o)])):this.current_record&&-1<this.current_record.id&&(n.push(this.current_record.id),o=e.indexOf(this.current_view.view_id),e=e.slice(o).concat(e.slice(0,o))),jQuery.isEmptyObject(e)||i.push(["views",t(e)]),i=i.map(function(e){return e.map(encodeURIComponent).join("=")}).join("&"),n=n.join("/"),i&&(n+=";"+i),n},save_tree_state:function(e){var t,i,n,o,s=[];e=void 0===e||e;for(var r,a,c,l=this.group.parent?this.group.parent.id:null,d=function(){Sao.Session.current_session.cache.clear("model.ir.ui.view_tree_state.get")},h=0,u=this.views.length;h<u;h++)if("form"==(t=this.views[h]).view_type){for(var _ in t.widgets)if(t.widgets.hasOwnProperty(_))for(n=0,o=(i=t.widgets[_]).length;n<o;n++)i[n].screen&&(c=i[n].screen.save_tree_state(e),s.push(c));1==this.views.length&&this.current_record&&(l in this.tree_states||(this.tree_states[l]={}),this.tree_states[l][t.children_field||null]=[[],[[this.current_record.id]]])}else"tree"==t.view_type&&(r=t.get_expanded_paths(),a=t.get_selected_paths(),l in this.tree_states||(this.tree_states[l]={}),this.tree_states[l][t.children_field||null]=[r,a],e&&t.attributes.tree_state&&(c=new Sao.Model("ir.ui.view_tree_state").execute("set",[this.model_name,this.get_tree_domain(l),t.children_field,JSON.stringify(r),JSON.stringify(a)],{}).then(d),s.push(c)));return jQuery.when.apply(jQuery,s)},get_tree_domain:function(e){e=e?(this.domain||[]).concat([[this.exclude_field,"=",e]]):this.domain;return JSON.stringify(Sao.rpc.prepareObject(e))},set_tree_state:function(){var t,e,r=this.current_view;return~["tree","form"].indexOf(r.view_type)&&!~this.tree_states_done.indexOf(r)&&("form"!=r.view_type||jQuery.isEmptyObject(this.tree_states_done))?("tree"!=r.view_type||r.attributes.tree_state||this.tree_states_done.push(r),(t=this.group.parent?this.group.parent.id:null)<0?jQuery.when():(t in this.tree_states||(this.tree_states[t]={}),e=void 0===(e=this.tree_states[t][r.children_field||null])?new Sao.Model("ir.ui.view_tree_state").execute("get",[this.model_name,this.get_tree_domain(t),r.children_field],{}).then(function(e){return e=[JSON.parse(e[0]),JSON.parse(e[1])],t in this.tree_states||(this.tree_states[t]={}),this.tree_states[t][r.children_field||null]=e}.bind(this)):jQuery.when(e),this.tree_states_done.push(r),e.done(function(e){var t,i=e[0],n=e[1];if("tree"==r.view_type)return r.display(n,i);if(!jQuery.isEmptyObject(n)){for(var o=0;o<n[0].length;o++){var s=this.group.get(n[0][o]);if(!s)break;t=s}t&&t!=this.current_record&&(this.current_record=t,r.display())}}.bind(this)))):jQuery.when()}})}(),function(){"use strict";Sao.View=Sao.class_(Object,{view_type:null,el:null,mnemonic_widget:null,view_id:null,modified:null,editable:null,children_field:null,xml_parser:null,init:function(e,t,i){this.view_id=e,this.screen=t,this.widgets={},this.state_widgets=[];var n=i.children()[0].attributes;this.attributes={};for(var o=0,s=n.length;o<s;o++){var r=n[o];this.attributes[r.name]=r.value}t.set_on_write(this.attributes.on_write);var a,c={};for(a in this.screen.model.fields)c[a]=this.screen.model.fields[a].description;this.xml_parser&&new this.xml_parser(this,this.screen.exclude_field,c).parse(i.children()[0]),this.reset()},set_value:function(){},get record(){return this.screen.current_record},set record(e){this.screen.current_record=e},get group(){return this.screen.group},get selected_records(){return[]},get_fields:function(){return[]},get_buttons:function(){return[]},reset:function(){}}),Sao.View.idpath2path=function(e,t){var i,n=[];if(!t)return[];for(var o=0,s=e.rows.length;o<s;o++)if(e.rows[o].record.id==t[0]){n.push(o),i=Sao.View.idpath2path(e.rows[o],t.slice(1,t.length)),n=n.concat(i);break}return n},Sao.View.parse=function(e,t,i,n,o){switch(i){case"tree":return new Sao.View.Tree(t,e,n,o);case"form":return new Sao.View.Form(t,e,n);case"graph":return new Sao.View.Graph(t,e,n);case"calendar":return new Sao.View.Calendar(t,e,n);case"list-form":return new Sao.View.ListForm(t,e,n)}},Sao.View.XMLViewParser=Sao.class_(Object,{init:function(e,t,i){this.view=e,this.exclude_field=t,this.field_attrs=i},_node_attributes:function(e){for(var t={},i=0;i<e.attributes.length;i++){var n=e.attributes[i];t[n.name]=n.value}var o={};return t.name&&(o=this.field_attrs[t.name]||{}),["readonly","homogeneous"].forEach(function(e){t[e]&&(t[e]=1==t[e])}),["yexpand","yfill","xexpand","xfill","colspan","position","height","width"].forEach(function(e){t[e]&&(t[e]=Number(t[e]))}),["xalign","yalign"].forEach(function(e){t[e]&&(t[e]=Number(t[e]))}),jQuery.isEmptyObject(o)||(t.widget||(t.widget=o.type),"label"==e.tagName&&void 0===t.string&&(t.string=o.string+Sao.i18n.gettext(":")),"field"!=e.tagName||t.help||(t.help=o.help),["relation","domain","selection","string","states","relation_field","views","invisible","add_remove","sort","context","size","filename","autocomplete","translate","create","delete","selection_change_with","schema_model","required","help_selection","help_field","order"].forEach(function(e){e in o&&!(e in t)&&(t[e]=o[e])})),t},parse:function(e){var t;e.tagName&&(t=this._node_attributes(e),this["_parse_"+e.tagName](e,t))}})}(),function(){"use strict";Sao.View.FormXMLViewParser=Sao.class_(Sao.View.XMLViewParser,{init:function(e,t,i){Sao.View.FormXMLViewParser._super.init.call(this,e,t,i),this._containers=[],this._mnemonics={}},get container(){return 0<this._containers.length?this._containers[this._containers.length-1]:null},_parse_form:function(e,t){var i=new Sao.View.Form.Container(Number(e.getAttribute("col")||4));if(this.view.containers.push(i),this.parse_child(e,i),0<this._containers.length)throw"AssertionError";this.view.el.append(i.el)},parse_child:function(e,t){t&&this._containers.push(t),[].forEach.call(e.childNodes,function(e){this.parse(e)}.bind(this)),t&&this._containers.pop()},_parse_field:function(e,t){var i,n=t.name;n&&n==this.exclude_field?this.container.add(null,t):(i=new Sao.View.FormXMLViewParser.WIDGETS[t.widget](this.view,t),this.view.widgets[n]||(this.view.widgets[n]=[]),this.view.widgets[n].push(i),i.position=this.view.widget_id+=1,i.expand&&(void 0===t.yexpand&&(t.yexpand=!0),void 0===t.yfill&&(t.yfill=!0)),void 0!==t.height&&(i.el.css("min-height",t.height+"px"),1==i.el.children().length&&i.el.children().css("min-height","inherit")),void 0!==t.width&&i.el.css("min-width",t.width+"px"),this.container.add(i,t),this._mnemonics[n]&&i.labelled&&((n=this._mnemonics[n]).label_el.uniqueId(),i.labelled.uniqueId(),i.labelled.attr("aria-labelledby",n.el.attr("id")),n.label_el.attr("for",i.labelled.attr("id"))))},_parse_button:function(e,t){var i=new Sao.common.Button(t);i.el.click(i,this.view.button_clicked.bind(this.view)),this.view.state_widgets.push(i),this.container.add(i,t)},_parse_link:function(e,t){var i=new Sao.View.Form.Link(t);this.view.state_widgets.push(i),this.container.add(i,t)},_parse_image:function(e,t){var i=new Sao.View.Form.Image_(t);this.view.state_widgets.push(i),this.container.add(i,t)},_parse_separator:function(e,t){var i,n=t.name;n&&n==this.exclude_field?this.container.add(null,t):(i=t.string,i=new Sao.View.Form.Separator(i,t),this.view.state_widgets.push(i),this.container.add(i,t),n&&(this._mnemonics[n]=i))},_parse_label:function(e,t){var i,n=t.name;n&&n==this.exclude_field?this.container.add(null,t):(void 0===t.xexpand&&(t.xexpand=0),void 0===t.xalign&&(t.xalign=1),i=new Sao.View.Form.Label(t.string,t),this.view.state_widgets.push(i),this.container.add(i,t),n&&(this._mnemonics[n]=i))},_parse_newline:function(e,t){this.container.add_row()},_parse_notebook:function(e,t){void 0===t.colspan&&(t.colspan=4);var i=new Sao.View.Form.Notebook(t);void 0!==t.height&&i.el.css("min-height",t.height+"px"),void 0!==t.width&&i.el.css("min-width",t.width+"px"),this.view.state_widgets.push(i),this.view.notebooks.push(i),this.container.add(i,t),this.parse_child(e,i)},_parse_page:function(e,t){var i;t.name&&t.name==this.exclude_field||(i=new Sao.View.Form.Container(Number(e.getAttribute("col")||4)),this.view.containers.push(i),this.parse_child(e,i),t=new Sao.View.Form.Page(this.container.add(i.el,t.string,t.icon),t),this.view.state_widgets.push(t))},_parse_group:function(e,t){var i,n=new Sao.View.Form.Container(Number(e.getAttribute("col")||4));this.view.containers.push(n),this.parse_child(e,n),void 0===t.xalign&&(t.xalign=.5),void 0===t.yalign&&(t.yalign=.5),t.name&&t.name==this.exclude_field?this.container.add(null,t):(void 0!==t.expandable?((i=new Sao.View.Form.Expander(t)).set_expanded("1"===t.expandable),this.view.expandables.push(i)):i=new Sao.View.Form.Group(t),i.add(n),this.view.state_widgets.push(i),this.container.add(i,t))},_parse_hpaned:function(e,t){this._parse_paned(e,t,"horizontal")},_parse_vpaned:function(e,t){this._parse_paned(e,t,"vertical")},_parse_paned:function(e,t,i){i=new Sao.common.Paned(i);this.container.add(i,t),this.parse_child(e,i)},_parse_child:function(e,t){var i=this.container,n=new Sao.View.Form.Container(Number(e.getAttribute("col")||4));this.view.containers.push(n),this.parse_child(e,n),(i.get_child1().children().length?i.get_child2():i.get_child1()).append(n.el)}}),Sao.View.Form=Sao.class_(Sao.View,{editable:!0,view_type:"form",xml_parser:Sao.View.FormXMLViewParser,init:function(e,t,i){this.el=jQuery("<div/>",{class:"form"}),this.notebooks=[],this.expandables=[],this.containers=[],this.widget_id=0,Sao.View.Form._super.init.call(this,e,t,i)},get_fields:function(){return Object.keys(this.widgets)},get_buttons:function(){var e,t=[];for(e in this.state_widgets){var i=this.state_widgets[e];i instanceof Sao.common.Button&&t.push(i)}return t},display:function(){var i,e,n,t=this.record,o=[];if(t){var s=new Set;for(n in this.widgets){e=t.model.fields[n].description.depends||[],s.add(n);for(var r=0;r<e.length;r++){var a=e[r];!a.startsWith("_parent")&&a in t.model.fields&&s.add(a)}}var c=[];s.forEach(function(e){i=t.model.fields[e],c.push([e,i.description.loading||!0,i.views.size])}),c.sort(function(e,t){return!e[1]&&t[1]?-1:e[1]&&!t[1]?1:e[2]-t[2]}),c.forEach(function(e){e=e[0];o.push(t.load(e))})}function l(e){e.display()}return jQuery.when.apply(jQuery,o).done(function(){var e=this.record;for(n in this.widgets){var t=this.widgets[n];i=null,(i=e?e.model.fields[n]:i)&&i.set_state(e),t.forEach(l)}}.bind(this)).done(function(){var e,t=this.record;for(e in this.state_widgets)this.state_widgets[e].set_state(t);for(e in this.containers)this.containers[e].resize()}.bind(this))},set_value:function(){var t=this.record;if(t){var e,i,n,o=function(e){e.set_value(t,this)};for(e in this.widgets)e in t.model.fields&&(i=this.widgets[e],n=t.model.fields[e],i.forEach(o,n))}},button_clicked:function(e){e=e.data;e.el.prop("disabled",!0),this.screen.button(e.attributes)},get selected_records(){return this.record?[this.record]:[]},get modified(){for(var e in this.widgets)for(var t=this.widgets[e],i=0;i<t.length;i++)if(t[i].modified)return!0;return!1},set_cursor:function(e,t){var i,n,o,s,r,a,c,l,d,h,u=0<jQuery(document.activeElement).closest(this.el).length;if(t||!u){if(t)for(i=0;i<this.notebooks.length;i++)(r=this.notebooks[i]).set_current_page();this.attributes.cursor in this.widgets?s=Sao.common.find_focusable_child(this.widgets[this.attributes.cursor][0].el):(a=Sao.common.find_focusable_child(this.el))&&a.focus()}t=this.record;if(t){var _=[],m=this.el.find(".has-error");for(n in t.invalid_fields())for(l=this.widgets[n]||[],i=0;i<m.length;i++)for(d=jQuery(m[i]),o=0;o<l.length;o++)if(0<d.closest(l[o].el).length){_.push(d);break}0<_.length&&(s=Sao.common.find_first_focus_widget(this.el,_))}if(s){for(i=0;i<this.notebooks.length;i++)for(h=(r=this.notebooks[i]).get_n_pages(),o=0;o<h;o++)if(a=r.get_nth_page(o),0<jQuery(s).closest(a).length){r.set_current_page(o);break}for(i=0;i<this.expandables.length;i++)c=this.expandables[i],0<jQuery(s).closest(c.el).length&&c.set_expanded(!0);jQuery(s).find("input,select,textarea").addBack(s).focus()}}}),Sao.View.Form.Container=Sao.class_(Object,{init:function(e){this.col=e=(e=void 0===e?4:e)<0?0:e,this.el=jQuery("<table/>",{class:"form-container responsive responsive-noheader"}),this.body=jQuery("<tbody/>").appendTo(this.el),this.col<=0?this.el.addClass("form-hcontainer"):1==this.col&&this.el.addClass("form-vcontainer"),this.add_row()},add_row:function(){this.body.append(jQuery("<tr/>"))},rows:function(){return this.body.children("tr")},row:function(){return this.rows().last()},add:function(e,t){var i=t.colspan;void 0===i&&(i=1);var n=t.xfill;void 0===n&&(n=1);var o=t.xexpand;void 0===o&&(o=1);var s,r,a=this.row();0<this.col&&(s=0,a.children().map(function(e,t){s+=Number(jQuery(t).attr("colspan")||1)}),s+i>this.col&&(this.add_row(),a=this.row())),e&&(r=e.el);var c,i=jQuery("<td/>",{colspan:i,class:e&&e.class_||""}).append(r);a.append(i),e&&(t.yexpand&&i.css("height","100%"),t.yfill&&i.css("vertical-align","top"),void 0!==t.xalign&&(.5!=t.xalign?c=Sao.i18n.rtl?.5<=t.xalign?"left":"right":.5<=t.xalign?"right":"left":o||(c="center"),i.css("text-align",c)),o&&(i.addClass("xexpand"),i.css("width","100%")),n&&(i.addClass("xfill"),o&&r.css("width","100%")),t.help&&e.el.attr("title",t.help))},resize:function(){var s,r,e=this.rows().toArray(),a=[],c=this.col,t=!1,n=.9;this.el.parents("td").each(function(){var e=this.style.width;e.endsWith("%")&&(n*=parseFloat(e.slice(0,-1),10)/100)});function l(e){e=jQuery(e);var i=[];return s=0,e.children().map(function(){var e=jQuery(this),t=Math.min(Number(e.attr("colspan")),c||1);e.hasClass("xexpand")&&!jQuery.isEmptyObject(e.children())&&"none"!=e.children(":not(.tooltip)").css("display")&&i.push([e,s]),s+=t}),i}e.sort(function(e,t){if(e=l(e),t=l(t),e.length!=t.length)return t.length-e.length;function i(e,t){return t=t[0],e+Math.min(Number(t.attr("colspan")),c||1)}return e.reduce(i,0)-t.reduce(i,0)}),e.forEach(function(e){e=jQuery(e);var e=l(e),o=100/e.length;e.forEach(function(e){var t=e[0];s=e[1];var i=Math.min(Number(t.attr("colspan")),c||1),n=0;for(r=0;r<i;r++)n+=a[s+r]||0;for(r=0;r<i;r++)n?o<n&&a[s+r]&&(a[s+r]-=(n-o)/(n/a[s+r])):a[s+r]=o/i}),jQuery.isEmptyObject(e)||(t=!0)}),e.forEach(function(e){e=jQuery(e),s=0,e.children().map(function(){var e=jQuery(this),t=Math.min(Number(e.attr("colspan")),c||1);if(e.hasClass("xexpand")&&"none"!=e.children(":not(.tooltip)").css("display")){var i=0;for(r=0;r<t;r++)i+=a[s+r]||0;e.css("width",i+"%"),0<i&&e.css("max-width",i*n+"vw")}else e.css("width","");"none"==e.children().css("display")?(e.css("visibility","collapse"),c<=1&&e.hide()):(e.css("visibility","visible"),c<=1&&e.show()),s+=t})}),!t||this.el.closest("td").length&&!this.el.closest("td").hasClass("xexpand")?this.el.css("width",""):this.el.css("width","100%")}}),Sao.View.Form.StateWidget=Sao.class_(Object,{init:function(e){this.attributes=e},set_state:function(e){e=e?e.expr_eval(this.attributes.states||{}):{},e=e.invisible;(e=void 0===e?this.attributes.invisible:e)?this.hide():this.show()},show:function(){this.el.show()},hide:function(){this.el.hide()}}),Sao.View.Form.LabelMixin=Sao.class_(Sao.View.Form.StateWidget,{set_state:function(e){var t,i;Sao.View.Form.LabelMixin._super.set_state.call(this,e),this.attributes.name&&e&&(t=e.model.fields[this.attributes.name]),void 0===this.attributes.string||this.attributes.string||(i="",t&&e&&(i=t.get_client(e)||""),this.label_el.text(i)),void 0===(e=e?e.expr_eval(this.attributes.states||{}):{}).readonly&&(e.readonly=!t),Sao.common.apply_label_attributes(this.label_el,t&&t.description.readonly||e.readonly,t&&t.description.required||e.required)}}),Sao.View.Form.Separator=Sao.class_(Sao.View.Form.LabelMixin,{init:function(e,t){Sao.View.Form.Separator._super.init.call(this,t),this.el=jQuery("<div/>",{class:"form-separator"}),this.label_el=jQuery("<label/>"),e&&this.label_el.text(e),this.el.append(this.label_el),this.el.append(jQuery("<hr/>"))}}),Sao.View.Form.Label=Sao.class_(Sao.View.Form.LabelMixin,{class_:"form-label",init:function(e,t){Sao.View.Form.Label._super.init.call(this,t),this.el=this.label_el=jQuery("<label/>",{text:e,class:this.class_})}}),Sao.View.Form.Notebook=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-notebook",init:function(e){Sao.View.Form.Notebook._super.init.call(this,e),this.el=jQuery("<div/>",{class:this.class_}),this.nav=jQuery("<ul/>",{class:"nav nav-tabs",role:"tablist"}).appendTo(this.el),this.panes=jQuery("<div/>",{class:"tab-content"}).appendTo(this.el),this.selected=!1},add:function(e,t,i){var n=jQuery("<div/>",{role:"tabpanel",class:"tab-pane"}).uniqueId(),o=n.attr("id"),i=Sao.common.ICONFACTORY.get_icon_img(i),i=jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{"aria-controls":o,role:"tab","data-toggle":"tab",href:"#"+o}).text(t).prepend(i)).appendTo(this.nav);return n.append(e).appendTo(this.panes),this.selected||(i.addClass("active"),n.addClass("active"),this.selected=!0),i},set_current_page:function(e){e=void 0===e?":visible:first":":eq("+e+"):visible";this.nav.find("li"+e+" a").tab("show")},get_n_pages:function(){return this.nav.find("li[role='presentation']").length},get_nth_page:function(e){return jQuery(this.panes.find("div[role='tabpanel']")[e])}}),Sao.View.Form.Page=Sao.class_(Sao.View.Form.StateWidget,{init:function(e,t){Sao.View.Form.Page._super.init.call(this,t),this.el=e},hide:function(){Sao.View.Form.Page._super.hide.call(this),this.el.hasClass("active")&&this.el.next(":visible").find("a").tab("show")}}),Sao.View.Form.Group=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-group_",init:function(e){Sao.View.Form.Group._super.init.call(this,e),this.el=jQuery("<fieldset/>",{class:this.class_}),e.string&&this.el.append(jQuery("<legend/>").text(e.string))},add:function(e){this.el.append(e.el)}}),Sao.View.Form.Expander=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-group-expandable",init:function(e){Sao.View.Form.Expander._super.init.call(this,e),this.el=jQuery("<div/>",{class:"panel panel-default "+this.class_});var t=jQuery("<div/>",{class:"panel-heading"}).appendTo(this.el);t.uniqueId(),this.collapsible=jQuery("<div/>",{class:"panel-collapse collapse","aria-labelledby":t.attr("id")}).appendTo(this.el),this.collapsible.uniqueId(),this.body=jQuery("<div/>",{class:"panel-body"}).appendTo(this.collapsible);t=jQuery("<label/>",{class:"panel-title"}).appendTo(t),t=jQuery("<a/>",{role:"button","data-toggle":"collapse",href:"#"+this.collapsible.attr("id"),"aria-controls":this.collapsible.attr("id"),"aria-expanded":"1"==e.expandable}).appendTo(t);e.string&&t.text(e.string),t.append(jQuery("<span/>",{class:"caret"}))},add:function(e){this.body.empty(),this.body.append(e.el)},set_expanded:function(e){e?this.collapsible.collapse("show"):this.collapsible.collapse("hide")}}),Sao.View.Form.Link=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-link",init:function(e){var t;Sao.View.Form.Link._super.init.call(this,e),this.el=jQuery("<button/>",{class:this.class_+" btn btn-link",name:e.name,type:"button"}),e.icon&&(t=jQuery("<img/>",{class:"icon"}).prependTo(this.el),Sao.common.ICONFACTORY.get_icon_url(e.icon).done(function(e){t.attr("src",e)})),this.label=jQuery("<div/>").appendTo(this.el),this._current=null},get action_id(){return parseInt(this.attributes.id,10)},set_state:function(e){var t,i,n,o,s,r,a,c,l;Sao.View.Form.Link._super.set_state.call(this,e),"none"!=this.el.css("display")&&(t={},i={},n={},e?(t={model:e.model.name,id:e.id,ids:[e.id]},i=e.get_context(),n={active_model:e.model.name,active_id:e.id,active_ids:[e.id]},this._current=e.id):this._current=null,n.context=i,this.el.off("click"),this.el.click([t,i],this.clicked.bind(this)),o=Sao.rpc({method:"model.ir.action.get_action_value",params:[this.action_id,i]},Sao.Session.current_session,!1),this.label.text(o.name),s=new Sao.PYSON.Decoder(n),r=s.decode(o.pyson_domain),o.pyson_search_value&&(r=[r,s.decode(o.pyson_search_value)]),a=o.domains.filter(function(e){return e[2]}).map(function(e){var t=e[0],e=e[1];return[t,s.decode(e)]}),e&&e.links_counts[this.action_id]?(c=e.links_counts[this.action_id],this.set_label(o.name,a,c)):(c=a.length?a.map(function(){return 0}):[0],e&&(e.links_counts[this.action_id]=c),l=this._current,a.length?a.map(function(e,t){e=e[1];Sao.rpc({method:"model."+o.res_model+".search_count",params:[["AND",r,e],i]},Sao.Session.current_session).then(function(e){this._set_count(e,t,l,c,o.name,a)}.bind(this))},this):Sao.rpc({method:"model."+o.res_model+".search_count",params:[r,i]},Sao.Session.current_session).then(function(e){this._set_count(e,0,l,c,o.name,a)}.bind(this))))},_set_count:function(e,t,i,n,o,s){i==this._current&&(n[t]=e,this.set_label(o,s,n))},set_label:function(e,t,i){this.label.text(e),t.length?t.map(function(e,t){e=e[0];this.label.text(e+" "),jQuery("<span/>",{class:"badge"}).text(i[t]).appendTo(this.label)},this):(this.label.append(" "),jQuery("<span/>",{class:"badge"}).text(i[0]).appendTo(this.label)),"hide"===this.attributes.empty&&(i.filter(function(e){return 0!=e}).length?this.el.show():this.el.hide())},clicked:function(e){Sao.Action.execute(this.action_id,e.data[0],e.data[1],!0)}}),Sao.View.Form.Image_=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-image_",init:function(e){Sao.View.Form.Image_._super.init.call(this,e),this.el=jQuery("<div/>",{class_:this.class_}),this.img=jQuery("<img/>",{class:"center-block",width:(e.size||48)+"px",height:(e.size||48)+"px"}).appendTo(this.el)},set_state:function(e){var t;Sao.View.Form.Image_._super.set_state.call(this,e),e&&((t=this.attributes.name)in e.model.fields&&(t=e.model.fields[t].get(e)),"url"==this.attributes.type?t?(this.attributes.url_size&&((e=new URL(t,window.location)).searchParams.set(this.attributes.url_size,attributes.size||48),t=e.href),this.img.attr("src",t)):this.img.removeAttr("src"):Sao.common.ICONFACTORY.get_icon_url(t).done(function(e){e?this.img.attr("src",e):this.img.removeAttr("src")}.bind(this)))}}),Sao.View.Form.Widget=Sao.class_(Object,{expand:!1,init:function(e,t){this.view=e,this.attributes=t,this.el=null,this.position=0,this.visible=!0,this.labelled=null},display:function(){var e=this.field,t=this.record,i=this.attributes.readonly,n=this.attributes.invisible,o=this.attributes.required;if(!e)return void 0===n&&(n=!1),void 0===o&&(o=!1),this.set_readonly(i=void 0===i?!0:i),this.set_invisible(n),void this.set_required(o);var s=e.get_state_attrs(t);void 0===i&&void 0===(i=s.readonly)&&(i=!1),void 0===o&&void 0===(o=s.required)&&(o=!1),this.view.screen.attributes.readonly&&(i=!0),this.set_readonly(i),i?this.el.addClass("readonly"):this.el.removeClass("readonly");t=this._required_el();this.set_required(o),!i&&o?t.addClass("required"):t.removeClass("required");t=s.invalid,s=this._invalid_el();!i&&t?s.addClass("has-error"):s.removeClass("has-error"),void 0===n&&void 0===(n=e.get_state_attrs(this.record).invisible)&&(n=!1),this.set_invisible(n)},_required_el:function(){return this.el},_invalid_el:function(){return this.el},get field_name(){return this.attributes.name},get model_name(){return this.view.screen.model_name},get model(){return this.view.screen.model},get record(){return this.view.record},get field(){var e=this.record;if(e)return e.model.fields[this.field_name]},focus_out:function(){this.field&&this.visible&&this.set_value()},set_value:function(){},set_readonly:function(e){this._readonly=e},set_required:function(e){},get modified(){return!1},set_invisible:function(e){this.visible=!e,e?this.el.hide():this.el.show()},focus:function(){this.el.focus()}}),Sao.View.Form.TranslateDialog=Sao.class_(Object,{class_:"form",init:function(e,t){var i=new Sao.Dialog(Sao.i18n.gettext("Translate"),this.class_,"lg");this.languages=e,this.read(t,i),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(i)}.bind(this)).appendTo(i.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(this.write.bind(this,t,i)).appendTo(i.footer),i.content.submit(function(e){e.preventDefault(),i.footer.find("button.btn-primary").first().click()}),i.modal.modal("show"),i.modal.on("shown.bs.modal",function(){i.modal.find("input,select").filter(":visible").first().focus()}),i.modal.on("hide.bs.modal",function(){jQuery(this).remove()})},close:function(e){e.modal.modal("hide")},read:function(a,c){function l(e){return e[0][a.field_name]||""}this.languages.forEach(function(e){var t=jQuery("<div/>",{class:"row form-group"}),i=a.translate_widget();i.attr("data-lang-id",e.id);var n=jQuery("<input/>",{type:"checkbox",title:Sao.i18n.gettext("Edit")});a._readonly&&n.attr("disabled",!0);var o=jQuery("<input/>",{type:"checkbox",disabled:!0,title:Sao.i18n.gettext("Fuzzy")}),s=Sao.rpc({method:"model."+a.model.name+".read",params:[[a.record.id],[a.field_name],{language:e.code}]},a.model.session).then(l),r=Sao.rpc({method:"model."+a.model.name+".read",params:[[a.record.id],[a.field_name],{language:e.code,fuzzy_translation:!0}]},a.model.session).then(l);jQuery.when(s,r).done(function(e,t){a.translate_widget_set(i,t),a.translate_widget_set_readonly(i,!0),o.attr("checked",e!==t)}),n.click(function(){a.translate_widget_set_readonly(i,!jQuery(this).prop("checked"))}),c.body.append(t),t.append(jQuery("<div/>",{class:"col-sm-2"}).append(e.name)),t.append(jQuery("<div/>",{class:"col-sm-8"}).append(i)),t.append(jQuery("<div/>",{class:"col-sm-1"}).append(n)),t.append(jQuery("<div/>",{class:"col-sm-1"}).append(o))}.bind(this))},write:function(n,e){this.languages.forEach(function(e){var t,i=jQuery("[data-lang-id="+e.id+"]");i.attr("readonly")||(n.model.session.context.language,(t={}).language=e.code,t.fuzzy_translation=!1,(e={})[n.field_name]=n.translate_widget_get(i),t=[[n.record.id],e,t],t={method:"model."+n.model.name+".write",params:t},Sao.rpc(t,n.model.session,!1))}.bind(this)),n.record.cancel(),n.view.display(),this.close(e)}}),Sao.View.Form.TranslateMixin={},Sao.View.Form.TranslateMixin.init=function(){this.translate||(this.translate=Sao.View.Form.TranslateMixin.translate.bind(this)),this.translate_dialog||(this.translate_dialog=Sao.View.Form.TranslateMixin.translate_dialog.bind(this)),this.translate_widget_set_readonly||(this.translate_widget_set_readonly=Sao.View.Form.TranslateMixin.translate_widget_set_readonly.bind(this)),this.translate_widget_set||(this.translate_widget_set=Sao.View.Form.TranslateMixin.translate_widget_set.bind(this)),this.translate_widget_get||(this.translate_widget_get=Sao.View.Form.TranslateMixin.translate_widget_get.bind(this))},Sao.View.Form.TranslateMixin.translate=function(){var t,e;this.record.id<0||this.record.has_changed()?(e=Sao.i18n.gettext("You need to save the record before adding translations."),Sao.common.message.run(e)):(t=this.model.session,e={method:"model.ir.lang.search",params:[[["translatable","=",!0]]].concat({})},Sao.rpc(e,t).then(function(e){jQuery.isEmptyObject(e)?Sao.common.message.run(Sao.i18n.gettext("No other language available.")):(e={method:"model.ir.lang.read",params:[e,["code","name"]].concat({})},Sao.rpc(e,t).then(function(e){this.translate_dialog(e)}.bind(this)))}.bind(this)))},Sao.View.Form.TranslateMixin.translate_dialog=function(e){new Sao.View.Form.TranslateDialog(e,this)},Sao.View.Form.TranslateMixin.translate_widget_set_readonly=function(e,t){e.prop("readonly",t)},Sao.View.Form.TranslateMixin.translate_widget_set=function(e,t){e.val(t)},Sao.View.Form.TranslateMixin.translate_widget_get=function(e){return e.val()},Sao.View.Form.Char=Sao.class_(Sao.View.Form.Widget,{class_:"form-char",init:function(e,t){Sao.View.Form.Char._super.init.call(this,e,t),Sao.View.Form.TranslateMixin.init.call(this),this.el=jQuery("<div/>",{class:this.class_}),this.group=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",name:t.name}).appendTo(this.group),jQuery.isEmptyObject(t.autocomplete)||(this.datalist=jQuery("<datalist/>").appendTo(this.el),this.datalist.uniqueId(),this.input.attr("list",this.datalist.attr("id")),this.input.attr("autocomplete","off")),this.el.change(this.focus_out.bind(this)),t.size||this.group.css("width","100%"),this.attributes.translate&&Sao.common.ICONFACTORY.get_icon_img("tryton-translate").appendTo(jQuery("<div/>",{class:"icon-input icon-secondary","aria-label":Sao.i18n.gettext("Translate"),title:Sao.i18n.gettext("Translate")}).appendTo(this.group.addClass("input-icon input-icon-secondary"))).click(this.translate.bind(this))},get_client_value:function(){var e=this.field,t=this.record,i="";return i=e?e.get_client(t):i},display:function(){Sao.View.Form.Char._super.display.call(this);var e=this.record;this.datalist&&(this.datalist.empty(),(e?(this.field_name in e.autocompletion||e.do_autocomplete(this.field_name),e.autocompletion[this.field_name]||[]):[]).forEach(function(e){jQuery("<option/>",{value:e}).appendTo(this.datalist)}.bind(this)));var t="",i="100%";e&&0<(t=e.expr_eval(this.attributes.size))&&(i=null),this.input.val(this.get_client_value()),this.input.attr("maxlength",t),this.input.attr("size",t),this.group.css("width",i)},get modified(){return!(!this.record||!this.field)&&this.get_client_value()!=this.get_value()},set_value:function(){this.field.set_client(this.record,this.input.val())},get_value:function(){return this.input.val()},set_readonly:function(e){Sao.View.Form.Char._super.set_readonly.call(this,e),this.input.prop("readonly",e)},focus:function(){this.input.focus()},translate_widget:function(){return jQuery("<input/>",{class:"form-control",readonly:"readonly",name:this.attributes.name})}}),Sao.View.Form.Password=Sao.class_(Sao.View.Form.Char,{class_:"form-password",init:function(e,t){Sao.View.Form.Password._super.init.call(this,e,t),this.input.prop("type","password"),this.button=jQuery("<button/>",{class:"btn btn-default btn-sm form-control",type:"button"}).appendTo(jQuery("<span/>",{class:"input-group-btn"}).appendTo(this.group)),this._set_password_label(),this.button.click(this.toggle_visibility.bind(this))},toggle_visibility:function(){"password"==this.input.prop("type")?(this.input.prop("type","text"),this.input.attr("autocomplete","off")):(this.input.prop("type","password"),this.input.removeAttr("autocomplete")),this._set_password_label()},_set_password_label:function(){"password"==this.input.prop("type")?this.button.text(Sao.i18n.gettext("Show")):this.button.text(Sao.i18n.gettext("Hide"))}}),Sao.View.Form.Date=Sao.class_(Sao.View.Form.Widget,{class_:"form-date",_width:"10em",_input:"date",_input_format:"%Y-%m-%d",_format:Sao.common.format_date,_parse:Sao.common.parse_date,_default_format:"%x",init:function(e,t){Sao.View.Form.Date._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_});e=this.labelled=jQuery("<div/>",{class:"input-group input-group-sm input-icon input-icon-secondary"}).appendTo(this.el);this.date=this.labelled=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap",name:t.name}).appendTo(e),this.date.uniqueId(),this.input=jQuery("<input/>",{type:this._input,role:"button",tabindex:-1}),this.input.click(function(){var e=this.get_value(),e=this._format(this._input_format,e);this.input.val(e)}.bind(this)),this.input.change(function(){var e=this.input.val();e&&(e=this._parse(this._input_format,e),e=this._format(this.get_format(),e),this.date.val(e).change(),this.date.focus())}.bind(this)),this.input[0].type==this._input&&(this.icon=jQuery("<div/>",{class:"icon-input icon-secondary","aria-label":Sao.i18n.gettext("Open the calendar"),title:Sao.i18n.gettext("Open the calendar")}).appendTo(e),this.input.appendTo(this.icon),Sao.common.ICONFACTORY.get_icon_img("tryton-date").appendTo(this.icon)),this.date.css("max-width",this._width),this.date.change(this.focus_out.bind(this));var n=new Mousetrap(this.date[0]);n.bind("enter",function(e,t){this.date.prop("readonly")||this.focus_out()}.bind(this)),n.bind("=",function(e,t){this.date.prop("readonly")||(e.preventDefault(),this.date.val(this._format(this.get_format(),moment())).change())}.bind(this)),Sao.common.DATE_OPERATORS.forEach(function(i){n.bind(i[0],function(e,t){this.date.prop("readonly")||(e.preventDefault(),(e=this.get_value()||Sao.DateTime()).add(i[1]),this.date.val(this._format(this.get_format(),e)).change())}.bind(this))}.bind(this))},get_format:function(){return this.field&&this.record?this.field.date_format(this.record):this._default_format},get_value:function(){return this._parse(this.get_format(),this.date.val())},display:function(){var e,t=this.record,i=this.field;Sao.View.Form.Date._super.display.call(this),t&&(e=i.get_client(t)),this.date.val(this._format(this.get_format(),e))},focus:function(){this.date.focus()},get modified(){if(this.record&&this.field){var e=this.cast(this.field.get_client(this.record));return JSON.stringify(e)!=JSON.stringify(this.get_value())}return!1},set_value:function(){this.field.set_client(this.record,this.get_value())},set_readonly:function(e){Sao.View.Form.Date._super.set_readonly.call(this,e),this.el.find("input").prop("readonly",e),this.icon&&(e?this.icon.hide():this.icon.show())},cast:function(e){return e=e&&e.isDateTime?e.todate():e}}),Sao.View.Form.DateTime=Sao.class_(Sao.View.Form.Date,{class_:"form-datetime",_width:"20em",_input:"datetime-local",_input_format:"%Y-%m-%dT%H:%M:%S",_format:Sao.common.format_datetime,_parse:Sao.common.parse_datetime,_default_format:"%x %X",get_format:function(){return this.field&&this.record?this.field.date_format(this.record)+" "+this.field.time_format(this.record):this._default_format},cast:function(e){return e}}),Sao.View.Form.Time=Sao.class_(Sao.View.Form.Date,{class_:"form-time",_width:"10em",_input:"time",_input_format:"%H:%M:%S",_format:Sao.common.format_time,_parse:Sao.common.parse_time,_default_format:"%X",init:function(e,t){Sao.View.Form.Time._super.init.call(this,e,t),~navigator.userAgent.indexOf("Firefox")&&this.input.parent().hide()},get_format:function(){return this.field&&this.record?this.field.time_format(this.record):this._default_format},cast:function(e){return e=e&&e.isDateTime?e.totime():e}}),Sao.View.Form.TimeDelta=Sao.class_(Sao.View.Form.Widget,{class_:"form-timedelta",init:function(e,t){Sao.View.Form.TimeDelta._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_}),this.input=this.labelled=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap",name:t.name}).appendTo(this.el),this.el.change(this.focus_out.bind(this))},display:function(){Sao.View.Form.TimeDelta._super.display.call(this);var e=this.record;e?(e=e.field_get_client(this.field_name),this.input.val(e||"")):this.input.val("")},focus:function(){this.input.focus()},get modified(){if(this.record&&this.field){var e=this.input.val();return this.field.get_client(this.record)!=e}return!1},set_value:function(){this.field.set_client(this.record,this.input.val())},set_readonly:function(e){Sao.View.Form.TimeDelta._super.set_readonly.call(this,e),this.input.prop("readonly",e)}});function i(e,t){var i=e.attr("id"),n=e.attr("aria-labelledby"),o=t.attr("id"),s=t.attr("aria-labelledby");e.attr("id",o),e.attr("aria-labelledby",s),t.attr("id",i),t.attr("aria-labelledby",n)}function n(e){var t=e.clone().prependTo(e.parent());return t.attr("type","text"),e.attr("type","number"),e.attr("step",1),e.attr("lang",Sao.i18n.getlang()),e.hide().on("focusout",function(){e[0].checkValidity()&&(i(e,t),e.hide(),t.show())}),t.on("focusin",function(){e.prop("readonly")||(i(e,t),t.hide(),e.show(),window.setTimeout(function(){e.focus()}))}),t}Sao.View.Form.Integer=Sao.class_(Sao.View.Form.Char,{class_:"form-integer",init:function(e,t){Sao.View.Form.Integer._super.init.call(this,e,t),this.input_text=this.labelled=n(this.input),this.attributes.symbol&&(this.symbol_start=jQuery("<span/>",{class:"input-group-addon symbol symbol-start"}).prependTo(this.group),this.symbol_end=jQuery("<span/>",{class:"input-group-addon symbol symbol-end"}).appendTo(this.group)),this.group.css("width",""),this.factor=Number(t.factor||1)},get modified(){if(this.record&&this.field){var e=this.get_client_value();return JSON.stringify(this.field.convert(e))!=JSON.stringify(this.field.convert(this.get_value()))}return!1},set_value:function(){this.field.set_client(this.record,this.get_value(),void 0,this.factor)},get_value:function(){return this.input.val()},get_client_value:function(){var e="",t=this.field;return t&&(null!==(e=t.get(this.record))?(e*=this.factor,(t=t.digits(this.record,this.factor))&&(e=e.toFixed(t[1]))):e=""),e},get width(){return 8},display:function(){function e(e,t){t?(e.text(t),e.show()):(e.text(""),e.hide())}Sao.View.Form.Integer._super.display.call(this);var t=this.field,i=this.record,n="";null!==this.width&&this.el.css("width",this.width+"ch"),t&&(n=t.get_client(i,this.factor)),t&&this.attributes.symbol&&(i=(t=t.get_symbol(i,this.attributes.symbol))[0],t[1]<.5?(e(this.symbol_start,i),e(this.symbol_end,"")):(e(this.symbol_start,""),e(this.symbol_end,i))),this.input_text.val(n),this.input_text.attr("maxlength",this.input.attr("maxlength")),this.input_text.attr("size",this.input.attr("size"))},set_readonly:function(e){Sao.View.Form.Integer._super.set_readonly.call(this,e),this.input_text.prop("readonly",e)},focus:function(){this.input.prop("readonly")?this.input_text.focus():(this.input_text.hide(),this.input.show().focus())}}),Sao.View.Form.Float=Sao.class_(Sao.View.Form.Integer,{class_:"form-float",get digits(){var e=this.record,t=this.field;if(e&&t)return t.digits(e,this.factor)},get width(){var e=this.digits;return e?e.reduce(function(e,t){return e+t}):18},display:function(){var e=this.record,t=(this.field,"any");!e||(e=this.digits)&&(t=Math.pow(10,-e[1]).toFixed(e[1])),this.input.attr("step",t),Sao.View.Form.Float._super.display.call(this)}}),Sao.View.Form.Selection=Sao.class_(Sao.View.Form.Widget,{class_:"form-selection",init:function(e,t){Sao.View.Form.Selection._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_}),this.select=this.labelled=jQuery("<select/>",{class:"form-control input-sm mousetrap",name:t.name}),this.el.append(this.select),this.select.change(this.focus_out.bind(this)),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(e){Sao.common.selection_mixin.init_selection.call(this,e,this.set_selection.bind(this))},update_selection:function(e,t,i){Sao.common.selection_mixin.update_selection.call(this,e,t,function(e,t){this.set_selection(e,t),i&&i(t)}.bind(this))},set_selection:function(e,t){var i=this.select;i.empty(),e.forEach(function(e){i.append(jQuery("<option/>",{value:JSON.stringify(e[0]),text:e[1],title:t[e[0]]}))})},display_update_selection:function(){var r=this.record,a=this.field;this.update_selection(r,a,function(t){if(a){for(var e,i=a.get(r),n=!1,o=0,s=this.selection.length;o<s;o++)if(this.selection[o][0]===i){n=!0;break}n?e=jQuery.when():(e=Sao.common.selection_mixin.get_inactive_selection.call(this,i)).done(function(e){this.select.append(jQuery("<option/>",{value:JSON.stringify(e[0]),text:e[1],disabled:!0}))}.bind(this)),e.done(function(){this.select.val(JSON.stringify(i));var e=t[i]||null;this.attributes.help&&e&&(e=this.attributes.help+"\n"+e),this.select.attr("title",e)}.bind(this))}else this.select.val("")}.bind(this))},display:function(){Sao.View.Form.Selection._super.display.call(this),this.display_update_selection()},focus:function(){this.select.focus()},get_value:function(){return JSON.parse(this.select.val())},get modified(){return!(!this.record||!this.field)&&this.field.get(this.record)!=this.get_value()},set_value:function(){var e=this.get_value();this.field.set_client(this.record,e)},set_readonly:function(e){Sao.View.Form.Selection._super.set_readonly.call(this,e),this.select.prop("disabled",e)}}),Sao.View.Form.Boolean=Sao.class_(Sao.View.Form.Widget,{class_:"form-boolean",init:function(e,t){Sao.View.Form.Boolean._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_}),this.input=this.labelled=jQuery("<input/>",{type:"checkbox",class:"form-control input-sm mousetrap",name:t.name}).appendTo(this.el),this.input.change(this.focus_out.bind(this)),this.input.click(function(){return!jQuery(this).prop("readonly")})},display:function(){Sao.View.Form.Boolean._super.display.call(this);var e=this.record;e?this.input.prop("checked",e.field_get(this.field_name)):this.input.prop("checked",!1)},focus:function(){this.input.focus()},set_value:function(){var e=this.input.prop("checked");this.field.set_client(this.record,e)},set_readonly:function(e){Sao.View.Form.Boolean._super.set_readonly.call(this,e),this.input.prop("readonly",e)}}),Sao.View.Form.Text=Sao.class_(Sao.View.Form.Widget,{class_:"form-text",expand:!0,init:function(e,t){Sao.View.Form.Text._super.init.call(this,e,t),Sao.View.Form.TranslateMixin.init.call(this),this.el=jQuery("<div/>",{class:this.class_}),this.input=this.labelled=jQuery("<textarea/>",{class:"form-control input-sm mousetrap",name:t.name}).appendTo(this.el),this.input.change(this.focus_out.bind(this)),this.attributes.translate&&((t=jQuery("<button/>",{class:"btn btn-default btn-sm form-control",type:"button","aria-label":Sao.i18n.gettext("Translate")}).appendTo(jQuery("<span/>",{class:"input-group-btn"}).appendTo(this.el))).append(Sao.common.ICONFACTORY.get_icon_img("tryton-translate")),t.click(this.translate.bind(this)))},display:function(){Sao.View.Form.Text._super.display.call(this);var e,t=this.record;t?(e=t.field_get_client(this.field_name),this.input.val(e),this.attributes.spell&&(this.input.attr("lang",Sao.i18n.BC47(t.expr_eval(this.attributes.spell))),this.input.attr("spellcheck","true"))):this.input.val("")},focus:function(){this.input.focus()},get modified(){return!(!this.record||!this.field)&&this.field.get_client(this.record)!=this.get_value()},get_value:function(){return this.input.val()||""},set_value:function(){this.field.set_client(this.record,this.get_value())},set_readonly:function(e){Sao.View.Form.Text._super.set_readonly.call(this,e),this.input.prop("readonly",e)},translate_widget:function(){return jQuery("<textarea/>",{class:"form-control",readonly:"readonly"})}}),Sao.View.Form.RichText=Sao.class_(Sao.View.Form.Widget,{class_:"form-richtext",expand:!0,init:function(e,t){Sao.View.Form.RichText._super.init.call(this,e,t),Sao.View.Form.TranslateMixin.init.call(this),this.el=jQuery("<div/>",{class:this.class_+" panel panel-default"}),parseInt(t.toolbar||"1",10)&&(this.toolbar=Sao.common.richtext_toolbar().appendTo(jQuery("<div/>",{class:"panel-heading"}).appendTo(this.el))),this.input=this.labelled=jQuery("<div/>",{class:"richtext mousetrap",contenteditable:!0}).appendTo(jQuery("<div/>",{class:"panel-body"}).appendTo(this.el)),this.el.focusout(this.focus_out.bind(this)),this.attributes.translate&&((t=jQuery("<button/>",{class:"btn btn-default btn-sm form-control",type:"button","aria-label":Sao.i18n.gettext("Translate")}).appendTo(jQuery("<span/>",{class:"input-group-btn"}).appendTo(this.el))).append(Sao.common.ICONFACTORY.get_icon_img("tryton-translate")),t.click(this.translate.bind(this)))},focus_out:function(){window.setTimeout(function(){0===this.el.find(":focus").length&&Sao.View.Form.RichText._super.focus_out.call(this)}.bind(this),0)},display:function(){Sao.View.Form.RichText._super.display.call(this);var e="",t=this.record;t&&(e=t.field_get_client(this.field_name),this.attributes.spell&&(this.input.attr("lang",Sao.i18n.BC47(t.expr_eval(this.attributes.spell))),this.input.attr("spellcheck","true"))),this.input.html(Sao.HtmlSanitizer.sanitize(e||""))},focus:function(){this.input.focus()},get_value:function(){return this._normalize_markup(this.input.html())},set_value:function(){var e=this.get_value(),t=this.field.get_client(this.record);e==this._normalize_markup(t)&&(e=t),this.field.set_client(this.record,e)},_normalize_markup:function(e){return Sao.common.richtext_normalize(Sao.HtmlSanitizer.sanitize(e||""))},get modified(){return!(!this.record||!this.field)&&this._normalize_markup(this.field.get_client(this.record))!=this.get_value()},set_readonly:function(e){Sao.View.Form.RichText._super.set_readonly.call(this,e),this.input.prop("contenteditable",!e),this.toolbar&&this.toolbar.find("button,input,select").prop("disabled",e)},translate_widget:function(){var e=jQuery("<div/>",{class:this.class_+" panel panel-default"});parseInt(this.attributes.toolbar||"1",10)&&Sao.common.richtext_toolbar().appendTo(jQuery("<div/>",{class:"panel-heading"}).appendTo(e));jQuery("<div/>",{class:"richtext mousetrap",contenteditable:!0}).appendTo(jQuery("<div/>",{class:"panel-body"}).appendTo(e));return e},translate_widget_set_readonly:function(e,t){Sao.View.Form.TranslateMixin.translate_widget_set_readonly.call(this,e,t),e.find("button,input,select").prop("disabled",t),e.find("div[contenteditable]").prop("contenteditable",!t)},translate_widget_set:function(e,t){e.find("div[contenteditable]").html(Sao.HtmlSanitizer.sanitize(t||""))},translate_widget_get:function(e){return this._normalize_markup(e.find("div[contenteditable]").html())}}),Sao.View.Form.Many2One=Sao.class_(Sao.View.Form.Widget,{class_:"form-many2one",init:function(e,t){Sao.View.Form.Many2One._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_});e=jQuery("<div/>",{class:"input-group input-group-sm input-icon"}).appendTo(this.el);this.entry=this.labelled=jQuery("<input/>",{type:"input",class:"form-control input-sm mousetrap",name:t.name}).appendTo(e),this.but_primary=jQuery("<img/>",{class:"icon"}).appendTo(jQuery("<div/>",{class:"icon-input icon-primary"}).appendTo(e)),this.but_secondary=jQuery("<img/>",{class:"icon"}).appendTo(jQuery("<div/>",{class:"icon-input icon-secondary"}).appendTo(e)),this.but_primary.click("primary",this.edit.bind(this)),this.but_secondary.click("secondary",this.edit.bind(this)),this.entry.on("keydown",this.key_press.bind(this)),t.completion&&"1"!=t.completion||(Sao.common.get_completion(e,this._update_completion.bind(this),this._completion_match_selected.bind(this),this._completion_action_activated.bind(this)),this.wid_completion=!0),this.el.change(this.focus_out.bind(this)),this._readonly=!1},get_screen:function(e){var t=this.field.get_domain(this.record),i=e?this.field.get_search_context(this.record):this.field.get_context(this.record),n=(this.attributes.view_ids||"").split(",");jQuery.isEmptyObject(n)||n.shift();var o=this.get_model(),e=jQuery.extend([],this.view.screen.breadcrumb);return e.push(this.attributes.string||Sao.common.MODELNAME.get(o)),new Sao.Screen(this.get_model(),{context:i,domain:t,mode:["form"],view_ids:n,views_preload:this.attributes.views,readonly:this._readonly,exclude_field:this.attributes.relation_field,breadcrumb:e})},set_text:function(e){jQuery.isEmptyObject(e)&&(e=""),this.entry.val(e)},get_text:function(){var e=this.record;return e?e.field_get_client(this.field_name):""},focus_out:function(){(this.attributes.completion&&"1"!=this.attributes.completion||!this.el.find(".dropdown").hasClass("open"))&&Sao.View.Form.Many2One._super.focus_out.call(this)},set_value:function(){var e=this.record,t=this.field;t.get_client(e)!=this.entry.val()&&(t.set_client(e,this.value_from_id(null,"")),this.entry.val(""))},display:function(){var e,t,i,n=this.record,o=this.field;Sao.View.Form.Many2One._super.display.call(this),this._set_button_sensitive(),this._set_completion(),n?(this.set_text(o.get_client(n)),n=o.get(n),n=this.has_target(n)?(e="tryton-open",t=Sao.i18n.gettext("Open the record"),i="tryton-clear",Sao.i18n.gettext("Clear the field")):(e=null,t="",i="tryton-search",Sao.i18n.gettext("Search a record")),this.entry.prop("readonly")&&(i=null),[[e,t,this.but_primary,"primary"],[i,n,this.but_secondary,"secondary"]].forEach(function(e){var t=e[0],i=e[1],n=e[2],o=n.parent(),e="input-icon-"+e[3];t?(o.show(),o.parent().addClass(e),Sao.common.ICONFACTORY.get_icon_url(t).then(function(e){n.attr("src",e)})):(o.hide(),o.parent().removeClass(e)),n.attr("aria-label",i),n.attr("title",i)})):this.entry.val("")},focus:function(){this.entry.focus()},set_readonly:function(e){Sao.View.Form.Many2One._super.set_readonly.call(this,e),this._readonly=e,this._set_button_sensitive()},_set_button_sensitive:function(){this.entry.prop("readonly",this._readonly),this.but_primary.prop("disabled",!this.read_access),this.but_secondary.prop("disabled",this._readonly)},get_access:function(e){var t=this.get_model();return!t||Sao.common.MODELACCESS.get(t)[e]},get read_access(){return this.get_access("read")},get create_access(){return this.attributes.create&&this.get_access("create")},get modified(){if(this.record&&this.field){var e=this.entry.val();return this.field.get_client(this.record)!=e}return!1},id_from_value:function(e){return e},value_from_id:function(e,t){return[e,t=void 0===t?"":t]},get_model:function(){return this.attributes.relation},has_target:function(e){return null!=e},edit:function(e){var t=this.get_model();if(t&&Sao.common.MODELACCESS.get(t).read){var i,n=this.record,o=n.field_get(this.field_name);if(e&&"secondary"==e.data&&!this._readonly&&this.has_target(o))return this.record.field_set_client(this.field_name,this.value_from_id(null,"")),void this.entry.val("");if(this.has_target(o)){var s=this.id_from_value(n.field_get(this.field_name));if(e&&(e.ctrlKey||e.metaKey)){var r={};return r.model=this.get_model(),r.res_id=s,r.mode=["form"],r.name=this.attributes.string,r.context=this.field.get_context(this.record),void Sao.Tab.create(r)}var a=this.get_screen(),c=function(e){e&&a.current_record.rec_name().done(function(e){e=this.value_from_id(a.current_record.id,e);this.record.field_set_client(this.field_name,e,!0)}.bind(this))};a.switch_view().done(function(){a.load([s]),new Sao.Window.Form(a,c.bind(this),{save_current:!0})}.bind(this))}else t&&(i=this.field.get_domain(n),o=this.field.get_search_context(n),e=this.field.get_search_order(n),r=this.entry.val(),c=function(e){jQuery.isEmptyObject(e)||(e=this.value_from_id(e[0][0],e[0][1]),this.record.field_set_client(this.field_name,e,!0))},n=new Sao.common.DomainParser,new Sao.Window.Search(t,c.bind(this),{sel_multi:!1,context:o,domain:i,order:e,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:this.create_access,search_filter:n.quote(r),title:this.attributes.string,exclude_field:this.attributes.relation_field}))}},new_:function(e){var t,i,n=this.get_model();n&&Sao.common.MODELACCESS.get(n).create&&(t=this.get_screen(!0),i=this.entry.val(),t.switch_view().done(function(){new Sao.Window.Form(t,function(e){e&&t.current_record.rec_name().done(function(e){e=this.value_from_id(t.current_record.id,e);this.record.field_set_client(this.field_name,e)}.bind(this))}.bind(this),{new_:!0,save_current:!0,rec_name:i})}.bind(this)))},key_press:function(e){var t=!this.entry.prop("readonly"),i=[Sao.common.TAB_KEYCODE],n=[Sao.common.BACKSPACE_KEYCODE,Sao.common.DELETE_KEYCODE];this.wid_completion||i.push(Sao.common.RETURN_KEYCODE),e.which==Sao.common.F3_KEYCODE&&t&&this.create_access?(this.new_(),e.preventDefault()):e.which==Sao.common.F2_KEYCODE&&this.read_access?(this.edit(),e.preventDefault()):~i.indexOf(e.which)&&t?(this.attributes.completion&&"1"!=this.attributes.completion||!this.el.find(".dropdown").hasClass("open"))&&this.activate():this.has_target(this.record.field_get(this.field_name))&&t&&(this.get_text()==this.entry.val()&&!~n.indexOf(e.which)||(this.entry.val(""),this.record.field_set_client(this.field_name,this.value_from_id(null,""))))},activate:function(){var e,t,i,n,o,s=this.get_model();s&&Sao.common.MODELACCESS.get(s).read&&(n=(o=this.record).field_get(this.field_name),new Sao.Model(s),s&&!this.has_target(n)&&(e=this.entry.val(),this._readonly||!e&&!this.field.get_state_attrs(this.record).required||(t=this.field.get_domain(o),i=this.field.get_search_context(o),n=this.field.get_search_order(o),o=new Sao.common.DomainParser,new Sao.Window.Search(s,function(e){jQuery.isEmptyObject(e)?this.entry.val(""):(e=this.value_from_id(e[0][0],e[0][1]),this.record.field_set_client(this.field_name,e,!0))}.bind(this),{sel_multi:!1,context:i,domain:t,order:n,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:this.create_access,search_filter:o.quote(e),title:this.attributes.string,exclude_field:this.attributes.relation_field}))))},_set_completion:function(){var e=this.el.find(".action-search");this.read_access?e.removeClass("disabled"):e.addClass("disabled");e=this.el.find(".action-create");this.create_access?e.removeClass("disabled"):e.addClass("disabled")},_update_completion:function(e){var t=this.record;if(t){var i=this.field,n=i.get(t);if(this.has_target(n)){var o=this.id_from_value(n);if(void 0!==o&&0<=o)return jQuery.when()}o=this.get_model();return Sao.common.update_completion(this.entry,t,i,o)}},_completion_match_selected:function(e){this.record.field_set_client(this.field_name,this.value_from_id(e.id,e.rec_name),!0)},_completion_action_activated:function(e){"search"==e?this.edit():"create"==e&&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(e,t){Sao.View.Form.Reference._super.init.call(this,e,t),this.el.addClass("form-inline"),this.select=jQuery("<select/>",{class:"form-control input-sm","aria-label":t.string,title:t.string}),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(e){Sao.common.selection_mixin.init_selection.call(this,e,this.set_selection.bind(this))},update_selection:function(e,t,i){Sao.common.selection_mixin.update_selection.call(this,e,t,function(e,t){this.set_selection(e,t),i&&i()}.bind(this))},set_selection:function(e,t){var i=this.select;i.empty(),e.forEach(function(e){i.append(jQuery("<option/>",{value:e[0],text:e[1],title:t[e[0]]}))})},get modified(){if(this.record&&this.field){var e=this.field.get_client(this.record),t="",i="";return e&&(t=e[0],i=e[1]),t!=this.get_model()||i!=this.entry.val()}return!1},id_from_value:function(e){return parseInt(e.split(",")[1],10)},value_from_id:function(e,t){return t=t||"",[this.get_model(),[e,t]]},get_text:function(){var e=this.record;return e?e.field_get_client(this.field_name)[1]:""},get_model:function(){return this.select.val()},has_target:function(e){if(null===e)return!1;var t=e.split(",")[0];return e=e.split(",")[1],jQuery.isEmptyObject(e)?e=null:(e=parseInt(e,10),isNaN(e)&&(e=null)),t==this.get_model()&&0<=e},_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 e=this.get_model(),e=e?[e,[-1,""]]:["",""];this.record.field_set_client(this.field_name,e)},set_value:function(){var e,t,i,n=this.record,o=this.field;this.get_model()?(i=(t=o.get_client(n,this.field_name))instanceof Array?(e=t[0],t[1]):e="",e==this.get_model()&&i==this.entry.val()||(o.set_client(n,null),this.entry.val(""))):(t=this.entry.val(),jQuery.isEmptyObject(t)?o.set_client(n,null):o.set_client(n,["",t]))},set_text:function(e){var t;e=e?(t=e[0],e[1]):t=null,Sao.View.Form.Reference._super.set_text.call(this,e),t?this.select.val(t):this.select.val("")},display:function(){this.update_selection(this.record,this.field,function(){Sao.View.Form.Reference._super.display.call(this)}.bind(this))},set_readonly:function(e){Sao.View.Form.Reference._super.set_readonly.call(this,e),this.select.prop("disabled",e)}}),Sao.View.Form.One2Many=Sao.class_(Sao.View.Form.Widget,{class_:"form-one2many",expand:!0,init:function(e,t){Sao.View.Form.One2Many._super.init.call(this,e,t),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:t.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 i=jQuery("<div/>",{class:this.class_+"-toolbar"});this.menu.append(i);var n=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(i),e=jQuery("<div/>",{class:"input-group-btn"}).appendTo(n),i=function(i){return function(e){var t=jQuery(e.target);t.prop("disabled",!0),(i(e)||jQuery.when()).always(function(){t.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(e),this.but_switch.click(i(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(e),this.but_previous.click(i(this.previous.bind(this))),this.label=jQuery("<span/>",{class:"badge"}).appendTo(jQuery("<span/>",{class:"btn hidden-xs"}).appendTo(e)),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(e),this.but_next.click(i(this.next.bind(this))),t.add_remove&&(this.wid_text=jQuery("<input/>",{type:"text",class:"form-control input-sm",name:t.name}).appendTo(n),t.completion&&"1"!=t.completion||(Sao.common.get_completion(this.wid_text,this._update_completion.bind(this),this._completion_match_selected.bind(this),this._completion_action_activated.bind(this)),this.wid_completion=!0),e=jQuery("<div/>",{class:"input-group-btn"}).appendTo(n),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(e),this.but_add.click(i(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(e),this.but_remove.click(i(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(e),this.but_new.click(i(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(e),this.but_open.click(i(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(e),this.but_del.click(i(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(e),this.but_undel.click(i(this.undelete.bind(this))),this.content=jQuery("<div/>",{class:this.class_+"-content panel-body"}),this.el.append(this.content);n=(t.mode||"tree,form").split(","),e=t.relation,i=jQuery.extend([],this.view.screen.breadcrumb);i.push(t.string||Sao.common.MODELNAME.get(e)),this.screen=new Sao.Screen(e,{mode:n,view_ids:(t.view_ids||"").split(","),views_preload:t.views||{},order:t.order,row_activate:this.activate.bind(this),exclude_field:t.relation_field||null,limit:null,pre_validate:t.pre_validate,breadcrumb:i}),this.screen.pre_validate=1==t.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)),t.add_remove&&this.wid_text.on("keydown",this.key_press.bind(this)),this.but_switch.prop("disabled",this.screen.number_of_views<=0)},get modified(){return this.screen.current_view.modified},set_readonly:function(e){Sao.View.Form.One2Many._super.set_readonly.call(this,e),this._set_button_sensitive(),this._set_label_state()},set_required:function(e){this._required=e,this._set_label_state()},_set_label_state:function(){Sao.common.apply_label_attributes(this.title,this._readonly,this._required)},_set_button_sensitive:function(){var e=Sao.common.MODELACCESS.get(this.screen.model_name),t=this.record,i=this.field;t=t&&i?(n=t.expr_eval(this.attributes.size),o=i.get_eval(t).length,null!=n&&n<=o&&0<=n):(o=null,!1);var n=this.screen.deletable,o=this.attributes.create;void 0===o&&(o=!0),this.but_new.prop("disabled",this._readonly||!o||t||!e.create);o=this.attributes.delete;void 0===o&&(o=!0),this.but_del.prop("disabled",this._readonly||!o||!e.delete||!this._position||!n),this.but_undel.prop("disabled",this._readonly||t||!this._position),this.but_open.prop("disabled",!e.read||!this._position),this.but_next.prop("disabled",0<this.position&&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||t||!e.write||!e.read),this.but_remove.prop("disabled",this._readonly||!this.position||!e.write||!e.read))},_sequence:function(){for(var e=0,t=this.screen.views.length;e<t;e++){var i=this.screen.views[e];if("tree"==i.view_type){i=i.attributes.sequence;if(i)return i}}},display:function(){Sao.View.Form.One2Many._super.display.call(this),this._set_button_sensitive(),this.prm.done(function(){var e=this.record,t=this.field;if(!t)return this.screen.new_group(),this.screen.current_record=null,this.screen.group.parent=null,void this.screen.display();var i=e.field_get_client(this.field_name);i!=this.screen.group&&(this.screen.set_group(i),"tree"==this.screen.current_view.view_type&&this.screen.current_view.editable&&(this.screen.current_record=null));var n=[],i=null;e&&(n=t.get_domain(e),i=e.expr_eval(this.attributes.size)),this._readonly&&(i=null===i?this.screen.group.length:Math.min(i,this.screen.group.length)),Sao.common.compare(this.screen.domain,n)||(this.screen.domain=n),this.screen.size_limit=i,this.screen.display(),void 0!==this.attributes.height&&this.screen.current_view.el.find(".treeview,.list-form").first().css("min-height",this.attributes.height+"px").css("max-height",this.attributes.height+"px")}.bind(this))},focus:function(){this.attributes.add_remove&&this.wid_text.focus()},activate:function(e){this.edit()},add:function(e){var t,i,n,s,o,r,a=Sao.common.MODELACCESS.get(this.screen.model_name);a.write&&a.read&&(this.view.set_value(),i=this.field.get_domain(this.record),t=this.field.get_search_context(this.record),i=["OR",i=[i,this.record.expr_eval(this.attributes.add_remove)],["id","in",this.field.get_removed_ids(this.record)]],n=this.wid_text.val(),s=this._sequence(),o=function(e){var t=jQuery.when();if(!jQuery.isEmptyObject(e)){for(var i=[],n=0,o=e.length;n<o;n++)i.push(e[n][0]);this.screen.group.load(i,!0),t=this.screen.display(),s&&this.screen.group.set_sequence(s,this.screen.new_position)}t.done(function(){this.screen.set_cursor()}.bind(this)),this.wid_text.val("")}.bind(this),r=new Sao.common.DomainParser,a=this.field.get_search_order(this.record),new Sao.Window.Search(this.attributes.relation,o,{sel_multi:!0,context:t,domain:i,order:a,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:!this.but_new.prop("disabled"),search_filter:r.quote(n),title:this.attributes.string,exclude_field:this.attributes.relation_field}))},remove:function(e){var t=Sao.common.MODELACCESS.get(this.screen.model_name),i=!this.screen.readonly;t.write&&t.read&&i&&this.screen.remove(!1,!0,!1)},new_:function(e){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 e,t,i=this._sequence(),n=function(){i&&this.screen.group.set_sequence(i,this.screen.new_position)}.bind(this);"form"==this.screen.current_view.type||this.screen.current_view.editable?(this.screen.new_().then(n),this.screen.current_view.el.prop("disabled",!1)):(t=(e=this.record).expr_eval(this.attributes.size)||-1,t-=this.field.get_eval(e),new Sao.Window.Form(this.screen,n,{new_:!0,many:t}))},new_product:function(){var c=this.attributes.product.split(","),l={},d=this.screen;d.new_(!1).then(function(a){a.default_get().then(function(o){a.set_default(o);var s=function(){if(jQuery.isEmptyObject(c))return r();var t=d.model.fields[c.pop()],e=t.description.relation;e||s();var i=t.get_domain(a),n=t.get_search_context(a),o=t.get_search_order(a);new Sao.Window.Search(e,function(e){jQuery.isEmptyObject(e)||(l[t.name]=e),s()},{sel_multi:!0,context:n,domain:i,order:o,search_filter:"",title:this.attributes.string})}.bind(this),r=function(){var t,e;d.group.remove(a,!0),jQuery.isEmptyObject(l)||(e=(t=Object.keys(l)).map(function(e){return l[e]}),Sao.common.product(e).forEach(function(n){d.new_(!1).then(function(e){var i=jQuery.extend({},o);t.forEach(function(e,t){i[e]=n[t][0],i[e+".rec_name"]=n[t][1]}),e.set_default(i)})}),(e=this._sequence())&&d.group.set_sequence(e,d.new_position))}.bind(this);s()}.bind(this))}.bind(this))},open:function(e){return this.edit()},delete_:function(e){Sao.common.MODELACCESS.get(this.screen.model_name).delete&&this.screen.deletable&&this.screen.remove(!1,!1,!1)},undelete:function(e){this.screen.unremove()},previous:function(e){return this.validate().then(function(){return this.screen.display_previous()}.bind(this))},next:function(e){return this.validate().then(function(){return this.screen.display_next()}.bind(this))},switch_:function(e){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(){})}.bind(this))},key_press:function(e){var t;e.which==Sao.common.F3_KEYCODE?(this.new_(e),e.preventDefault()):e.which==Sao.common.F2_KEYCODE&&(this.add(e),e.preventDefault()),this.attributes.add_remove&&(t=[Sao.common.TAB_KEYCODE],this.wid_completion||t.push(Sao.common.RETURN_KEYCODE),~t.indexOf(e.which)&&this.wid_text.val()&&this.add(e))},record_label:function(e){this._position=e[0],this._length=e[1];e=e[0]+" / "+e[1];this.label.text(e).attr("title",e),this._set_button_sensitive()},validate:function(){var t=jQuery.Deferred();this.view.set_value();var e,i=this.screen.current_record;return i?(e=this.screen.current_view.get_fields(),i.validate(e).then(function(e){return e?this.screen.pre_validate?i.pre_validate().then(function(e){e?t.resolve():t.reject()}):void t.resolve():(this.screen.display(!0),void t.reject())}.bind(this))):t.resolve(),t},set_value:function(){this.screen.save_tree_state()},_update_completion:function(e){if(this.record){var t=this.attributes.relation,i=[i=this.field.get_domain(this.record),this.record.expr_eval(this.attributes.add_remove)],n=this.field.get_removed_ids(this.record);return Sao.common.update_completion(this.wid_text,this.record,this.field,t,i=["OR",i,["id","in",n]])}},_completion_match_selected:function(e){this.screen.group.load([e.id],!0),this.wid_text.val("")},_completion_action_activated:function(e){"search"==e?this.add():"create"==e&&this.new_()}}),Sao.View.Form.Many2Many=Sao.class_(Sao.View.Form.Widget,{class_:"form-many2many",expand:!0,init:function(e,t){Sao.View.Form.Many2Many._super.init.call(this,e,t),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:t.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 i=jQuery("<div/>",{class:this.class_+"-toolbar"});this.menu.append(i);e=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(i);this.entry=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap",name:t.name}).appendTo(e),this.entry.on("keydown",this.key_press.bind(this)),t.completion&&"1"!=t.completion||(Sao.common.get_completion(e,this._update_completion.bind(this),this._completion_match_selected.bind(this),this._completion_action_activated.bind(this)),this.wid_completion=!0);i=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(i),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(i),this.but_remove.click(this.remove.bind(this)),this.content=jQuery("<div/>",{class:this.class_+"-content panel-body"}),this.el.append(this.content);e=t.relation,i=jQuery.extend([],this.view.screen.breadcrumb);i.push(t.string||Sao.common.MODELNAME.get(e)),this.screen=new Sao.Screen(t.relation,{mode:["tree"],view_ids:(t.view_ids||"").split(","),views_preload:t.views||{},order:t.order,row_activate:this.activate.bind(this),readonly:!0,limit:null,breadcrumb:i}),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(e){Sao.View.Form.Many2Many._super.set_readonly.call(this,e),this._set_button_sensitive(),this._set_label_state()},set_required:function(e){this._required=e,this._set_label_state()},_set_label_state:function(){Sao.common.apply_label_attributes(this.title,this._readonly,this._required)},_set_button_sensitive:function(){var e,t=!1,i=this.record,n=this.field;i&&n&&(e=i.expr_eval(this.attributes.size),i=n.get_eval(i).length,t=null!=e&&e<=i&&0<=e),this.entry.prop("disabled",this._readonly),this.but_add.prop("disabled",this._readonly||t),this.but_remove.prop("disabled",this._readonly||0===this._position)},record_label:function(e){this._position=e[0],this._set_button_sensitive()},display:function(){Sao.View.Form.Many2Many._super.display.call(this),this.prm.done(function(){var e=this.record;if(!this.field)return this.screen.new_group(),this.screen.current_record=null,this.screen.group.parent=null,void this.screen.display();e=e.field_get_client(this.field_name);e!=this.screen.group&&this.screen.set_group(e),this.screen.display(),void 0!==this.attributes.height&&this.screen.current_view.el.find(".treeview,.list-form").first().css("min-height",this.attributes.height+"px").css("max-height",this.attributes.height+"px")}.bind(this))},focus:function(){this.entry.focus()},activate:function(){this.edit()},add:function(){var e=this.field.get_domain(this.record),t=this.record.expr_eval(this.attributes.add_remove);jQuery.isEmptyObject(t)||(e=[e,t]);var i=this.field.get_search_context(this.record),n=this.field.get_search_order(this.record),o=this.entry.val(),s=function(e){if(!jQuery.isEmptyObject(e)){for(var t=[],i=0,n=e.length;i<n;i++)t.push(e[i][0]);this.screen.group.load(t,!0),this.screen.display()}this.entry.val("")}.bind(this),t=new Sao.common.DomainParser;new Sao.Window.Search(this.attributes.relation,s,{sel_multi:!0,context:i,domain:e,order:n,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:this.attributes.create,search_filter:t.quote(o),title:this.attributes.string})},remove:function(){this.screen.remove(!1,!0,!1)},key_press:function(e){var t=[Sao.common.TAB_KEYCODE];this.wid_completion||t.push(Sao.common.RETURN_KEYCODE),e.which==Sao.common.F3_KEYCODE?(this.new_(),e.preventDefault()):e.which==Sao.common.F2_KEYCODE?(this.add(),e.preventDefault()):~t.indexOf(e.which)&&this.entry.val()&&this.add()},_get_screen_form:function(){var e=this.field.get_domain(this.record),t=this.record.expr_eval(this.attributes.add_remove);jQuery.isEmptyObject(t)||(e=[e,t]);var i=this.field.get_context(this.record),t=(this.attributes.view_ids||"").split(",");return jQuery.isEmptyObject(t)||t.shift(),new Sao.Screen(this.attributes.relation,{domain:e,view_ids:t,mode:["form"],views_preload:this.attributes.views,context:i})},edit:function(){var t,e;jQuery.isEmptyObject(this.screen.current_record)||(t=this._get_screen_form(),e=function(e){e&&t.current_record.save().done(function(){this.screen.current_record.cancel()}.bind(this))}.bind(this),t.switch_view().done(function(){t.load([this.screen.current_record.id]),new Sao.Window.Form(t,e)}.bind(this)))},new_:function(){var t=this._get_screen_form(),e=function(e){e&&(e=t.current_record,this.screen.group.load([e.id],!0)),this.entry.val("")}.bind(this),i=this.entry.val();t.switch_view().done(function(){new Sao.Window.Form(t,e,{new_:!0,save_current:!0,rec_name:i})}.bind(this))},_update_completion:function(e){if(this.record){var t=this.attributes.relation,i=this.field.get_domain(this.record),n=this.record.expr_eval(this.attributes.add_remove);return jQuery.isEmptyObject(n)||(i=[i,n]),Sao.common.update_completion(this.entry,this.record,this.field,t,i)}},_completion_match_selected:function(e){this.screen.group.load([e.id],!0),this.entry.val("")},_completion_action_activated:function(e){"search"==e?this.add():"create"==e&&this.new_()}}),Sao.View.Form.BinaryMixin=Sao.class_(Sao.View.Form.Widget,{init:function(e,t){Sao.View.Form.BinaryMixin._super.init.call(this,e,t),this.filename=t.filename||null},toolbar:function(e){e=jQuery("<div/>",{class:e,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(e),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(e),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(e),this.but_clear.click(this.clear.bind(this)),e},get filename_field(){if(this.filename){var e=this.record;if(e)return e.model.fields[this.filename]}},update_buttons:function(e){e?(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 i=this.record,n=this.field,o=this.filename_field;Sao.common.get_input_data(this.input_select,function(e,t){n.set_client(i,e),o&&o.set_client(i,t)},!n.get_size)},open:function(){this.save_as()},save_as:function(){var e=this.field,t=this.record,t=e.get_data?e.get_data(t):jQuery.when(e.get(t));t.done(function(e){var t,i=this.filename_field;i&&(t=i.get(this.record)),Sao.common.download_file(e,t)}.bind(this))},clear:function(){this.input_select.val(null);var e=this.filename_field;e&&e.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(e,t){Sao.View.Form.Binary._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_});e=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(this.el);this.size=jQuery("<input/>",{type:"input",class:"form-control input-sm",readonly:!0,name:t.name}).appendTo(e),this.filename&&t.filename_visible&&(this.text=jQuery("<input/>",{type:"input",class:"form-control input-sm"}).prependTo(e),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(e)),this.but_open.click(this.open.bind(this))),this.toolbar("input-group-btn").appendTo(e)},display:function(){Sao.View.Form.Binary._super.display.call(this);var e=this.record,t=this.field;if(!t)return this.text&&this.text.val(""),this.size.val(""),void this.but_save_as.hide();t=t.get_size?t.get_size(e):t.get(e).length,this.size.val(Sao.common.humanize(t)),this.text&&(this.text.val(this.filename_field.get(e)||""),t?this.but_open.parent().show():this.but_open.parent().hide()),this.update_buttons(Boolean(t))},key_press:function(e){var t=!this.text.prop("readonly");e.which==Sao.common.F3_KEYCODE&&t?(this.new_(),e.preventDefault()):e.which==Sao.common.F2_KEYCODE&&(this.open(),e.preventDefault())},set_value:function(){this.text&&this.filename_field.set_client(this.record,this.text.val()||"")},set_readonly:function(e){Sao.View.Form.Binary._super.set_readonly.call(this,e),this.but_select.prop("disabled",e),this.but_clear.prop("disabled",e),this.text&&this.text.prop("readonly",e)}}),Sao.View.Form.MultiSelection=Sao.class_(Sao.View.Form.Selection,{class_:"form-multiselection",expand:!0,init:function(e,t){this.nullable_widget=!1,Sao.View.Form.MultiSelection._super.init.call(this,e,t),this.select.prop("multiple",!0)},set_selection:function(e,t){Sao.View.Form.MultiSelection._super.set_selection.call(this,e,t);var i=this.attributes.help;i&&this.select.children().each(function(){var e=jQuery(this),t=e.attr("title");t&&e.attr("title",i+"\n"+t)})},get modified(){if(this.record&&this.field){var e=new Set(this.field.get_eval(this.record)),t=new Set(this.get_value());return!Sao.common.compare(t,e)}return!1},display_update_selection:function(){var t=this.record,i=this.field;this.update_selection(t,i,function(){var e=this.attributes.yexpand;(e=void 0===e?this.expand:e)||this.select.prop("size",this.select.children().length),i&&(e=(e=i.get_eval(t)).map(function(e){return JSON.stringify(e)}),this.select.val(e))}.bind(this))},get_value:function(){var e=this.select.val();return e?e.map(function(e){return JSON.parse(e)}):[]}}),Sao.View.Form.Image=Sao.class_(Sao.View.Form.BinaryMixin,{class_:"form-image",init:function(e,t){Sao.View.Form.Image._super.init.call(this,e,t),this.height=parseInt(t.height||100,10),this.width=parseInt(t.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");e=this.toolbar("btn-group");t.readonly||jQuery("<div/>",{class:"text-center"}).append(e).appendTo(this.el)},set_readonly:function(e){Sao.View.Form.Image._super.set_readonly.call(this,e),this.but_select.prop("disabled",e),this.but_clear.prop("disabled",e)},clear:function(){Sao.View.Form.Image._super.clear.call(this),this.update_img()},update_img:function(){var e,i=this.record;(e=!(e=i?i.field_get_client(this.field_name):e)||e>Sao.common.BIG_IMAGE_SIZE?jQuery.when(null):i.model.fields[this.field_name].get_data(i)).done(function(e){var t;i===this.record&&(t=e?(t=new Blob([e]),window.URL.createObjectURL(t)):null,this.image.attr("src",t),this.update_buttons(Boolean(e)))}.bind(this))},display:function(){Sao.View.Form.Image._super.display.call(this),this.update_img()}}),Sao.View.Form.Document=Sao.class_(Sao.View.Form.BinaryMixin,{class_:"form-document",expand:!0,init:function(e,t){Sao.View.Form.Document._super.init.call(this,e,t),this._blob_url=null,this.el=jQuery("<div/>",{class:this.class_}),this.object=jQuery("<object/>",{class:"center-block"}).appendTo(this.el),t.height&&this.object.css("height",parseInt(t.height,10)),t.width&&this.object.css("width",parseInt(t.width,10))},display:function(){var n;Sao.View.Form.Document._super.display.call(this);var o=this.record,e=o?o.model.fields[this.field_name].get_data(o):jQuery.when(null),t=this.filename_field;t&&(n=t.get_client(o)),e.done(function(e){var t,i;o===this.record&&(i=e?("application/octet-binary"==(t=Sao.common.guess_mimetype(n))&&(t=null),t=new Blob([e],{type:t}),window.URL.createObjectURL(t)):null,this.object.attr("data",i),this.object.get(0).onload=function(){window.URL.revokeObjectURL(i)})}.bind(this))}}),Sao.View.Form.URL=Sao.class_(Sao.View.Form.Char,{class_:"form-url",_type:"url",init:function(e,t){Sao.View.Form.URL._super.init.call(this,e,t),this.input.attr("type",this._type),this.button=this.labelled=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(){Sao.View.Form.URL._super.display.call(this);var e="",t=this.record;this.field;t&&(e=t.field_get_client(this.field_name)),this.set_url(e),t&this.attributes.icon&&(e=(e=this.attributes.icon)in t.model.fields?t.field_get_client(e):e,this.set_icon(e))},set_icon:function(e){Sao.common.ICONFACTORY.get_icon_url(e=e||"tryton-public").done(function(e){this.icon.attr("src",e)}.bind(this))},set_url:function(e){this.button.attr("href",e)},set_readonly:function(e){Sao.View.Form.URL._super.set_readonly.call(this,e),e?(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"))},set_invisible:function(e){Sao.View.Form.URL._super.set_invisible.call(this,e),e?this.input.attr("type",""):this.input.attr("type",this._type)}}),Sao.View.Form.Email=Sao.class_(Sao.View.Form.URL,{class_:"form-email",_type:"email",set_url:function(e){Sao.View.Form.Email._super.set_url.call(this,"mailto:"+e)}}),Sao.View.Form.CallTo=Sao.class_(Sao.View.Form.URL,{class_:"form-callto",set_url:function(e){Sao.View.Form.CallTo._super.set_url.call(this,"callto:"+e)}}),Sao.View.Form.SIP=Sao.class_(Sao.View.Form.URL,{class_:"form-sip",set_url:function(e){Sao.View.Form.SIP._super.set_url.call(this,"sip:"+e)}}),Sao.View.Form.HTML=Sao.class_(Sao.View.Form.Widget,{class_:"form-html",init:function(e,t){Sao.View.Form.HTML._super.init.call(this,e,t),Sao.View.Form.TranslateMixin.init.call(this),this.el=jQuery("<div/>",{class:this.class_}),this.button=jQuery("<a/>",{class:"btn btn-lnk",target:"_blank",rel:"noreferrer noopener"}).text(t.string).appendTo(this.el),t.translate&&((t=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Translate")}).appendTo(this.el)).append(Sao.common.ICONFACTORY.get_icon_img("tryton-translate")),t.click(this.translate.bind(this)))},uri:function(e){var t,i=this.record;return!i||i.id<0?t="":(t="/"+i.model.session.database+"/ir/html/"+i.model.name+"/"+i.id+"/"+this.field_name,t+="?language="+encodeURIComponent(e||Sao.i18n.getlang()),t+="&title="+encodeURIComponent(Sao.config.title)),t},display:function(){Sao.View.Form.HTML._super.display.call(this),this.button.attr("href",this.uri())},set_readonly:function(e){Sao.View.Form.HTML._super.set_readonly.call(this,e),this.el.find("button").prop("disabled",e),e?this.el.find("a").hide():this.el.find("a").show()},translate_dialog:function(e){var t={};e.forEach(function(e){t[e.name]=e.code}),Sao.common.selection(Sao.i18n.gettext("Choose a language"),t).done(function(e){window.open(this.uri(e),"_blank","noreferrer,noopener")}.bind(this))}}),Sao.View.Form.ProgressBar=Sao.class_(Sao.View.Form.Widget,{class_:"form-char",init:function(e,t){Sao.View.Form.ProgressBar._super.init.call(this,e,t),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(){var e;Sao.View.Form.ProgressBar._super.display.call(this);var t=this.record,i=this.field,n=i?(e=i.get(t),(n=i.get_client(t,100))&&Sao.i18n.gettext("%1%",n)):(e=0,"");this.progressbar.attr("aria-valuenow",100*e),this.progressbar.css("width",100*e+"%"),this.progressbar.text(n)}}),Sao.View.Form.Dict=Sao.class_(Sao.View.Form.Widget,{class_:"form-dict",expand:!0,init:function(e,t){Sao.View.Form.Dict._super.init.call(this,e,t),this.schema_model=t.schema_model,this.fields={},this.rows={},this.el=jQuery("<div/>",{class:this.class_+" panel panel-default"});e=jQuery("<div/>",{class:this.class_+"-heading panel-heading"}).appendTo(this.el),e=jQuery("<label/>",{class:this.class_+"-string",text:t.string}).appendTo(e);e.uniqueId(),this.el.uniqueId(),this.el.attr("aria-labelledby",e.attr("id")),e.attr("for",this.el.attr("id"));e=jQuery("<div/>",{class:this.class_+"-body panel-body form-horizontal"}).appendTo(this.el);this.container=jQuery("<div/>",{class:this.class_+"-container"}).appendTo(e);e=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(jQuery("<div>",{class:"col-sm-10 col-sm-offset-2"}).appendTo(jQuery("<div/>",{class:"form-group"}).appendTo(e)));this.wid_text=jQuery("<input/>",{type:"text",class:"form-control input-sm",placeholder:Sao.i18n.gettext("Search"),name:t.name}).appendTo(e),t.completion&&"1"!=t.completion||(Sao.common.get_completion(e,this._update_completion.bind(this),this._completion_match_selected.bind(this)),this.wid_completion=!0),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(e)),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 e=this.field.get_context(this.record),t=this.wid_text.val(),i=this.field.get_domain(this.record),n=function(e){jQuery.isEmptyObject(e)||(e=e.map(function(e){return e[0]}),this.add_new_keys(e)),this.wid_text.val("")}.bind(this),o=new Sao.common.DomainParser;new Sao.Window.Search(this.schema_model,n,{sel_multi:!0,context:e,domain:i,new_:!1,search_filter:o.quote(t),title:this.attributes.string})},add_new_keys:function(e){this.field.add_new_keys(e,this.record).then(function(e){var t=!1;e.forEach(function(e){e in this.fields||(this.add_line(e),t||(this.fields[e].input.focus(),t=!0))}.bind(this))}.bind(this))},remove:function(e,t){void 0===t&&(t=!0),delete this.fields[e],this.rows[e].remove(),delete this.rows[e],t&&this.set_value(this.record,this.field)},set_value:function(){this.field.set_client(this.record,this.get_value())},get_value:function(){var e,t={};for(e in this.fields){var i=this.fields[e];t[e]=i.get_value()}return t},get modified(){if(this.record&&this.field){var e,t=this.field.get_client(this.record);for(e in this.fields)if(this.fields[e].modified(t))return!0}return!1},set_readonly:function(e){for(var t in Sao.View.Form.Dict._super.set_readonly.call(this,e),this._set_button_sensitive(),this.fields)this.fields[t].set_readonly(e);this.wid_text.prop("disabled",e)},_set_button_sensitive:function(){var e=this.attributes.create;void 0===e&&(e=!0);var t,i=this.attributes.delete;for(t in void 0===i&&(i=!0),this.but_add.prop("disabled",this._readonly||!e),this.fields)this.fields[t].button.prop("disabled",this._readonly||!i)},add_line:function(e){var t,i,n=this.field.keys[e];this.fields[e]=t=new(this.get_entries(n.type))(e,this),this.rows[e]=i=jQuery("<div/>",{class:"form-group"});n=n.string+Sao.i18n.gettext(":"),n=jQuery("<label/>",{text:n}).appendTo(jQuery("<div/>",{class:"dict-label col-sm-2 control-label"}).appendTo(i));t.el.addClass("col-sm-10").appendTo(i),n.uniqueId(),t.labelled.uniqueId(),t.labelled.attr("aria-labelledby",n.attr("id")),n.attr("for",t.labelled.attr("id")),t.button.click(function(){this.remove(e,!0)}.bind(this)),i.appendTo(this.container)},display:function(){Sao.View.Form.Dict._super.display.call(this);var e=this.record,l=this.field;if(l){var t,i=e?e.id:null;if(i!=this._record_id){for(t in this.fields)this.remove(t,!1);this._record_id=i}var d=l.get_client(e),i=Object.keys(d).filter(function(e){return!this.fields[e]}.bind(this)),e=jQuery.isEmptyObject(i)?jQuery.when():l.add_keys(i,e);e.then(function(){for(var e=Object.keys(d).filter(function(e){return l.keys[e]}).sort(function(e,t){e=l.keys[e].sequence,t=l.keys[t].sequence;return e<t?-1:t<e?1:0}),t=new Sao.PYSON.Decoder,i=new Sao.common.DomainInversion,n=0,o=e.length;n<o;n++){var s=e[n],r=d[s];this.fields[s]||this.add_line(s);var a=this.fields[s];a.set_value(r),a.set_readonly(this._readonly);r=t.decode(l.keys[s].domain||"null");null!==r&&(i.eval_domain(r,d)?a.el.removeClass("has-error"):a.el.addClass("has-error"))}var c=Object.keys(this.fields).filter(function(e){return!(e in d)});for(n=0,o=c.length;n<o;n++)s=c[n],this.remove(s,!1)}.bind(this)),this._set_button_sensitive()}},_update_completion:function(e){if(!this.wid_text.prop("disabled")&&this.record)return Sao.common.update_completion(this.wid_text,this.record,this.field,this.schema_model)},_completion_match_selected:function(e){this.add_new_keys([e.id]),this.wid_text.val("")},get_entries:function(e){switch(e){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"multiselection":return Sao.View.Form.Dict.MultiSelection;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}}}),Sao.View.Form.Dict.Entry=Sao.class_(Object,{class_:"dict-char",init:function(e,t){this.name=e,this.definition=t.field.keys[e],this.parent_widget=t,this.create_widget(),this.definition.help&&this.el.attr("title",this.definition.help)},create_widget:function(){this.el=jQuery("<div/>",{class:this.class_});var e=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",name:this.name}).appendTo(e),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(e)),this.el.change(this.parent_widget.focus_out.bind(this.parent_widget))},modified:function(e){return JSON.stringify(this.get_value())!=JSON.stringify(e[this.name])},get_value:function(){return this.input.val()},set_value:function(e){this.input.val(e||"")},set_readonly:function(e){this._readonly=e,this.input.prop("readonly",e)}}),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(e){this._readonly=e,this.input.prop("disabled",e)},set_value:function(e){this.input.prop("checked",e)}}),Sao.View.Form.Dict.SelectionEntry=Sao.class_(Sao.View.Form.Dict.Entry,{create_widget:function(){Sao.View.Form.Dict.SelectionEntry._super.create_widget.call(this);var t=jQuery("<select/>",{class:"form-control input-sm mousetrap",name:this.name});t.change(this.parent_widget.focus_out.bind(this.parent_widget)),this.input.replaceWith(t),this.input=this.labelled=t;var e=jQuery.extend([],this.definition.selection);void 0!==this.definition.sort&&!this.definition.sort||e.sort(function(e,t){return e[1].localeCompare(t[1])}),e.forEach(function(e){t.append(jQuery("<option/>",{value:JSON.stringify(e[0]),text:e[1],title:this.definition.help_selection[e[0]]}))}.bind(this))},set_readonly:function(e){this._readonly=e,this.input.prop("disabled",e)}}),Sao.View.Form.Dict.Selection=Sao.class_(Sao.View.Form.Dict.SelectionEntry,{class_:"dict-selection",create_widget:function(){Sao.View.Form.Dict.Selection._super.create_widget.call(this),this.input.prepend(jQuery("<option/>",{value:JSON.stringify(null),text:""}))},get_value:function(){return JSON.parse(this.input.val())},set_value:function(e){this.input.val(JSON.stringify(e));e=this.definition.help_selection[e]||null;this.definition.help&&e&&(e=this.definition.help+"\n"+e),this.input.attr("title",e)}}),Sao.View.Form.Dict.MultiSelection=Sao.class_(Sao.View.Form.Dict.SelectionEntry,{class_:"dict-multiselection",create_widget:function(){Sao.View.Form.Dict.MultiSelection._super.create_widget.call(this),this.input.prop("multiple",!0);var i=this.definition.help;i&&this.input.children().each(function(){var e=jQuery(this),t=e.attr("title");t&&e.attr("title",i+"\n"+t)})},get_value:function(){return this.input.val().map(function(e){return JSON.parse(e)})},set_value:function(e){e=e.map(function(e){return JSON.stringify(e)}),this.input.val(e)}}),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_text=this.labelled=n(this.input)},get_value:function(){var e=parseInt(this.input.val(),10);return isNaN(e)?null:e},set_value:function(e,t){null!==e?(this.input.val(e),this.input_text.val(e.toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),t))):(this.input.val(""),this.input_text.val(""))},set_readonly:function(e){Sao.View.Form.Dict.Integer._super.set_readonly.call(this,e),this.input_text.prop("readonly",e)}}),Sao.View.Form.Dict.Float=Sao.class_(Sao.View.Form.Dict.Integer,{class_:"dict-float",get digits(){var e=this.parent_widget.record;if(e){e=e.expr_eval(this.definition.digits);if(e&&e.every(function(e){return null!==e}))return e}},get_value:function(){var e=Number(this.input.val());return isNaN(e)?null:e},set_value:function(e){var t="any",i={},n=this.digits;n&&(t=Math.pow(10,-n[1]).toFixed(n[1]),i.minimumFractionDigits=n[1],i.maximumFractionDigits=n[1]),this.input.attr("step",t),Sao.View.Form.Dict.Float._super.set_value.call(this,e,i)}}),Sao.View.Form.Dict.Numeric=Sao.class_(Sao.View.Form.Dict.Float,{class_:"dict-numeric",get_value:function(){var e=new Sao.Decimal(this.input.val());return isNaN(e.valueOf())?null:e}}),Sao.View.Form.Dict.Date=Sao.class_(Sao.View.Form.Dict.Entry,{class_:"dict-date",format:"%x",_input:"date",_input_format:"%Y-%m-%d",_format:Sao.common.format_date,_parse:Sao.common.parse_date,create_widget:function(){Sao.View.Form.Dict.Date._super.create_widget.call(this);var e=this.input.parent().find(".input-group-btn");this.input_date=jQuery("<input/>",{type:this._input,role:"button",tabindex:-1}),this.input_date.click(function(){var e=this.get_value(),e=this._format(this._input_format,e);this.input_date.val(e)}.bind(this)),this.input_date.change(function(){var e=this.input_date.val();e&&(e=this._parse(this._input_format,e),e=this._format(this.format,e),this.input.val(e).change(),this.input.focus())}.bind(this)),this.input_date[0].type==this._input&&(e=jQuery("<div/>",{class:"btn btn-default","aria-label":Sao.i18n.gettext("Open the calendar"),title:Sao.i18n.gettext("Open the calendar")}).prependTo(e),this.input_date.appendTo(e),Sao.common.ICONFACTORY.get_icon_img("tryton-date").appendTo(e));var t=new Mousetrap(this.el[0]);t.bind("enter",function(e,t){var i=this._parse(this.format,this.input.val()),i=this._format(this.format,i);this.input.val(i).change()}.bind(this)),t.bind("=",function(e,t){e.preventDefault(),this.input.val(this._format(this.format,moment())).change()}.bind(this)),Sao.common.DATE_OPERATORS.forEach(function(i){t.bind(i[0],function(e,t){e.preventDefault();e=this.get_value()||Sao.DateTime();e.add(i[1]),this.input.val(this._format(this.format,e)).change()}.bind(this))}.bind(this))},get_value:function(){return this._parse(this.format,this.input.val())},set_value:function(e){this.input.val(this._format(this.format,e))}}),Sao.View.Form.Dict.DateTime=Sao.class_(Sao.View.Form.Dict.Date,{class_:"dict-datetime",format:"%x %X",_input:"datetime-local",_input_format:"%Y-%m-%dT%H:%M:%S",_format:Sao.common.format_datetime,_parse:Sao.common.parse_datetime}),Sao.View.Form.PYSON=Sao.class_(Sao.View.Form.Char,{class_:"form-pyson",init:function(e,t){Sao.View.Form.PYSON._super.init.call(this,e,t),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(){Sao.View.Form.PYSON._super.display.call(this),this.validate_pyson()},get_encoded_value:function(){var e=this.input.val();if(!e)return e;try{return this.encoder.encode(eval_pyson(e))}catch(e){return null}},set_value:function(){var e=this.get_encoded_value(),t=this.record,i=this.field,n=i.get_client(t);e&&n&&Sao.common.compare(e,this.encoder.encode(this.decoder.decode(n)))&&(e=n),i.set_client(t,e)},get_client_value:function(){var e=Sao.View.Form.PYSON._super.get_client_value.call(this);return e=e&&Sao.PYSON.toString(this.decoder.decode(e))},validate_pyson:function(){var e="ok";null===this.get_encoded_value()&&(e="error"),Sao.common.ICONFACTORY.get_icon_url("tryton-"+e).then(function(e){this.icon.attr("src",e)}.bind(this))},focus_out:function(){this.validate_pyson(),Sao.View.Form.PYSON._super.focus_out.call(this)}}),Sao.View.FormXMLViewParser.WIDGETS={biginteger:Sao.View.Form.Integer,binary:Sao.View.Form.Binary,boolean:Sao.View.Form.Boolean,callto:Sao.View.Form.CallTo,char:Sao.View.Form.Char,date:Sao.View.Form.Date,datetime:Sao.View.Form.DateTime,dict:Sao.View.Form.Dict,document:Sao.View.Form.Document,email:Sao.View.Form.Email,float:Sao.View.Form.Float,html:Sao.View.Form.HTML,image:Sao.View.Form.Image,integer:Sao.View.Form.Integer,many2many:Sao.View.Form.Many2Many,many2one:Sao.View.Form.Many2One,multiselection:Sao.View.Form.MultiSelection,numeric:Sao.View.Form.Float,one2many:Sao.View.Form.One2Many,one2one:Sao.View.Form.One2One,password:Sao.View.Form.Password,progressbar:Sao.View.Form.ProgressBar,pyson:Sao.View.Form.PYSON,reference:Sao.View.Form.Reference,richtext:Sao.View.Form.RichText,selection:Sao.View.Form.Selection,sip:Sao.View.Form.SIP,text:Sao.View.Form.Text,time:Sao.View.Form.Time,timedelta:Sao.View.Form.TimeDelta,timestamp:Sao.View.Form.DateTime,url:Sao.View.Form.URL}}(),function(){"use strict";var n;function u(e){var t,i,n,o="";e.parents(".form").length||e.parents("#menu").length||(t="100vh",e.parents(".modal-body").length&&(t=e.parents(".modal-body").css("max-height")),i=" ",e.parents(".panel-body").each(function(e,t){t=jQuery(t),i+="- "+t.css("padding-top"),i+=" - "+t.css("padding-bottom")}),n=" ",e.parents(".panel").each(function(e,t){t=(t=jQuery(t)).css("box-shadow").match(/\d+px/g);t&&t.length&&(t=t.map(function(e){return e.replace("px","")}),n+="- "+Math.max.apply(null,t)+"px")}),o="calc("+t+" - "+e[0].getBoundingClientRect().y+"px"+i+n+")"),e.css("height",o)}function i(n,o,s){var r=jQuery.Deferred(),a=0,c=function(){for(;a<n.length;a++){var e=n[a],t=e.record,i=e.tree.columns[0];if(!t.is_loaded(i.attributes.name))return void t.load(i.attributes.name).done(c);e.redraw(o,s)}r.resolve()};return c(),r.promise()}"IntersectionObserver"in window&&(n=new IntersectionObserver(function(e,t){e.forEach(function(e){e.isIntersecting&&jQuery(e.target).trigger("click")})},{rootMargin:"0px 0px 50px 0px"})),jQuery(window).resize(function(){jQuery(".treeview").each(function(e,t){u(jQuery(t))})}),Sao.View.TreeXMLViewParser=Sao.class_(Sao.View.XMLViewParser,{_parse_tree:function(e,t){[].forEach.call(e.childNodes,function(e){this.parse(e)}.bind(this))},_parse_field:function(e,t){var i=t.name,n=new Sao.View.TreeXMLViewParser.WIDGETS[t.widget](this.view.screen.model,t);this.view.widgets[i]||(this.view.widgets[i]=[]),n.tree=this.view,this.view.widgets[i].push(n);"symbol"in t&&n.suffixes.push(new Sao.View.Tree.Symbol(t,1)),~["url","email","callto","sip"].indexOf(t.widget)&&n.prefixes.push(new Sao.View.Tree.Affix(t,t.widget)),"icon"in t&&n.prefixes.push(new Sao.View.Tree.Affix(t));for(var o=e.childNodes,s=0;s<o.length;s++){for(var r,a={},c=0,l=(r=o[s]).attributes.length;c<l;c++){var d=r.attributes[c];a[d.name]=d.value}a.name||(a.name=i),("prefix"==r.tagName?n.prefixes:n.suffixes).push(new Sao.View.Tree.Affix(a))}"symbol"in t&&n.prefixes.push(new Sao.View.Tree.Symbol(t,0)),this.view.attributes.sequence||this.view.children_field||!1===this.field_attrs[i].sortable||(n.sortable=!0),this.view.columns.push(n),t.sum&&(e=t.sum+Sao.i18n.gettext(": "),t=jQuery("<label/>",{text:e}),e=jQuery("<span/>",{class:"value"}),this.view.sum_widgets.set(n,[t,e]))},_parse_button:function(e,t){t=new Sao.View.Tree.ButtonColumn(this.view,t);this.view.columns.push(t)}}),Sao.View.Tree=Sao.class_(Sao.View,{view_type:"tree",xml_parser:Sao.View.TreeXMLViewParser,draggable:!1,display_size:Sao.config.display_size,init:function(e,t,i,n){this.children_field=n,this.sum_widgets=new Map,this.columns=[],this.selection_mode=t.attributes.selection_mode||Sao.common.SELECTION_MULTIPLE,this.el=jQuery("<div/>"),this.scrollbar=jQuery("<div/>").appendTo(jQuery("<div/>",{class:"scrollbar responsive"}).appendTo(this.el)),this.treeview=jQuery("<div/>",{class:"treeview responsive"}).appendTo(this.el),this.treeview.scroll(function(){this.scrollbar.parent().scrollLeft(this.treeview.scrollLeft())}.bind(this)),this.scrollbar.parent().scroll(function(){this.treeview.scrollLeft(this.scrollbar.parent().scrollLeft())}.bind(this)),this.expanded=new Set,Sao.View.Tree._super.init.call(this,e,t,i),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.treeview.append(this.table),this.colgroup=jQuery("<colgroup/>").appendTo(this.table);var o=jQuery("<col/>",{class:"selection-state"}).appendTo(this.colgroup);this.selection_mode==Sao.common.SELECTION_NONE&&o.css("width",0),this.thead=jQuery("<thead/>").appendTo(this.table);var s,r=jQuery("<tr/>"),a=jQuery("<th/>",{class:"selection-state"});this.selection=jQuery("<input/>",{type:"checkbox"}),this.selection.change(this.selection_changed.bind(this)),a.append(this.selection),r.append(a),this.thead.append(r),this.tfoot=null,this.sum_widgets.size&&((s=jQuery("<tr/>")).append(jQuery("<th/>")),this.tfoot=jQuery("<tfoot/>"),this.tfoot.append(s),this.table.append(this.tfoot)),this.columns.forEach(function(e){o=jQuery("<col/>",{class:e.attributes.widget}).appendTo(this.colgroup),a=jQuery("<th/>",{class:e.attributes.widget});var t,i,n=jQuery("<label/>").text(e.attributes.string).attr("title",e.attributes.string);this.editable&&(e.attributes.required&&n.addClass("required"),e.attributes.readonly||n.addClass("editable")),e.attributes.help&&n.attr("title",e.attributes.help),e.sortable&&(i=jQuery("<img/>",{class:"icon"}),n.append(i),e.arrow=i,a.click(e,this.sort_model.bind(this)),n.addClass("sortable")),r.append(a.append(n)),e.header=a,e.col=o,e.footers=[],this.sum_widgets.size&&(e.attributes.name,t=jQuery("<th/>",{class:e.class_}),this.sum_widgets.has(e)&&(i=this.sum_widgets.get(e)[0],n=this.sum_widgets.get(e)[1],t.append(i),t.append(n)),s.append(t),e.footers.push(t))},this),this.tbody=jQuery("<tbody/>"),this.table.append(this.tbody),this.set_drag_and_drop()},reset:function(){this.display_size=Sao.config.display_size},get editable(){return parseInt(this.attributes.editable||0,10)&&!this.screen.attributes.readonly},sort_model:function(e){var t=e.data,i=t.arrow;this.columns.forEach(function(e){e.arrow&&e!=t&&e.arrow.attr("src")&&e.arrow.attr("src","")}),this.screen.order=this.screen.default_order,"ASC"==i.data("order")?(i.data("order","DESC"),Sao.common.ICONFACTORY.get_icon_url("tryton-arrow-up").then(function(e){i.attr("src",e)}),this.screen.order=[[t.attributes.name,"DESC"]]):"DESC"==i.data("order")?(i.data("order",""),i.attr("src","")):(i.data("order","ASC"),Sao.common.ICONFACTORY.get_icon_url("tryton-arrow-down").then(function(e){i.attr("src",e)}),this.screen.order=[[t.attributes.name,"ASC"]]);var n=[];this.group.forEach(function(e){e.id<0&&(n=e.group)});e=this.screen.screen_container.get_text();!jQuery.isEmptyObject(n)||this.screen.search_count==this.group.length||this.group.parent?this.screen.search_filter(e,!0).then(function(i){this.group.sort(function(e,t){return(e=(e=i.indexOf(e.id))<0?i.length:e)<(t=(t=i.indexOf(t.id))<0?i.length:t)?-1:t<e?1:0}),this.screen.display()}.bind(this)):this.screen.search_filter(e)},update_arrow:function(){var e=this.screen.order,i=null,n=null,o="";e&&1==e.length&&(i=e[0][0],(n=e[0][1])&&(n=n.trim().split(" ",1)[0],o={ASC:"tryton-arrow-down",DESC:"tryton-arrow-up"}[n])),this.columns.forEach(function(e){var t=e.arrow;t&&(e.attributes.name!=i?(t.data("order",""),t.attr("src","")):(t.data("order",n),Sao.common.ICONFACTORY.get_icon_url(o).then(function(e){t.attr("src",e)})))})},_add_drag_n_drop:function(){Sortable.create(this.tbody[0],{handle:".draggable-handle",ghostClass:"dragged-row"}),this.tbody.on("dragstart",this.drag_data_get.bind(this)),this.tbody.on("drop",this.drag_data_received.bind(this))},set_drag_and_drop:function(){var e,t=!1;this.children_field?(e=this.screen.model.fields[this.children_field])&&(e=e.description.relation_field,t=Boolean(this.widgets[e])):this.attributes.sequence&&(t=!0),this.screen.readonly&&(t=!1),(this.draggable=t)&&(this.colgroup.prepend(jQuery("<col/>",{class:"draggable-handle"})),this.thead.children().prepend(jQuery("<th/>",{class:"draggable-handle"})),this._add_drag_n_drop())},drag_data_get:function(t){var i=0,n=[],o=function(e){e.el[0]===t.target&&(t.originalEvent.dataTransfer.setData("path",e.path),t.originalEvent.dataTransfer.setData("position",i)),0===e.rows.length&&n.push(e),i+=1,e.rows.forEach(o.bind(this))};this.rows.forEach(o.bind(this))},drag_data_received:function(e){var t=e.originalEvent.dataTransfer,i=t.getData("path").split(".");if(0!==i.length){for(var s=this;0<i.length;)s=s.rows[i[0]],i=i.slice(1);var n,r,a=s.record,c=null;r=(e.ctrlKey||e.metaKey)&&this.children_field?((c=this._find_row(s.el.prev()))||this).rows.length:e.shiftKey?(n=this._find_row(s.el.prev()))?((c=n.parent_)||this).rows.indexOf(n)+1:(c=null,0):(n=this._find_row(s.el.next()))?((c=n.parent_)||this).rows.indexOf(n):(c=null,this.rows.length);for(var o,l,d,h,u=c;u&&u!=s;)u=u.parent_;u?(t=t.getData("position"),jQuery(this.tbody.children()[t]).before(s.el)):(l=function(e){o.el.after(e.el),(o=e).rows.forEach(l)},(o=s).rows.forEach(l),d=a.group,h=s.group_position,(c?c.record.children_group(this.children_field):jQuery.Deferred().resolve(this.group)).then(function(e){var t=(s.parent_||this).rows,i=(c||this).rows;d===e?(h<r&&--r,d.splice(h,1),d.splice(r,0,a),d.changed()):(d.remove(a,!0,!0,!0),d.record_removed.splice(d.record_removed.indexOf(a)),e.add(a,r),a.parent_name?a._changed[d.parent_name]=!0:(a._changed[d.parent_name]=!0,a._values[d.parent_name]=null)),i.splice(r,0,s),t.splice(h,1),s.parent_=c,s.record.group=e,i.slice(r).forEach(function(e){e.reset_path()}),t.slice(h).forEach(function(e){e.reset_path()});var n=this.get_selected_paths();s.redraw(n);var o=function(e){e.redraw(n),e.rows.forEach(o)};s.rows.forEach(o),this.attributes.sequence&&s.record.group.set_sequence(this.attributes.sequence,this.screen.new_position)}.bind(this)))}},get_fields:function(){return Object.keys(this.widgets)},get_buttons:function(){var t=[];return this.columns.forEach(function(e){e instanceof Sao.View.Tree.ButtonColumn&&t.push(e)}),t},display:function(t,r){u(this.treeview);this.tbody;var e,i=this.record;jQuery.isEmptyObject(t)&&(t=this.get_selected_paths(),this.selection.prop("checked")&&!this.selection.prop("indeterminate")?this.screen.group.slice(this.rows.length,this.display_size).forEach(function(e){t.push([e.id])}):i?(e=(e=i.get_path(this.group)).map(function(e){return e[1]}),Sao.common.contains(t,e)||(t=[e])):i||(t=[])),r=r||this.get_expanded_paths(),this.selection_mode==Sao.common.SELECTION_MULTIPLE?this.selection.show():this.selection.hide();var a=function(e,t){for(var i=[],n=0;n<e.length;n++){var o=e[n];i.push(o);var s=t.concat([o.id]);Sao.common.contains(r,s)&&(o=o.field_get_client(this.children_field),Array.prototype.push.apply(i,a(o,s)))}return i}.bind(this),o=function(e){for(var t=[],i=0;i<e.length;i++){var n=e[i];t.push(n.record),n.is_expanded()&&Array.prototype.push.apply(t,o(n.rows))}return t}.bind(this),i=Math.min(this.group.length,this.display_size);this.children_field?Sao.common.compare(a(this.group.slice(0,i),[]),o(this.rows))||this.construct():i>this.rows.length&&Sao.common.compare(this.group.slice(0,this.rows.length),o(this.rows))?this.construct(!0):i==this.rows.length&&Sao.common.compare(this.group.slice(0,this.rows.length),o(this.rows))||this.construct();var s=1,c=[];jQuery.isEmptyObject(this.screen.domain)||c.push(this.screen.domain);i=this.screen.screen_container.get_tab_domain();jQuery.isEmptyObject(i)||c.push(i);var l=new Sao.common.DomainInversion,c=l.simplify(c),d=new Sao.PYSON.Decoder(this.screen.context),h=[];return this.columns.forEach(function(e){s+=1;var t,i,n,o=e.attributes.name;o&&((n=e.footers.slice()).push(e.header),d.decode(e.attributes.tree_invisible||"0")||o===this.screen.exclude_field?(--s,n.forEach(function(e){e.hide(),e.addClass("invisible")})):("boolean"!=typeof(o=l.domain_inversion(c,o))&&(o=l.simplify(o)),l.unique_value(o)[0]&&jQuery.isEmptyObject(this.children_field)?(--s,n.forEach(function(e){e.hide(),e.addClass("invisible")})):n.forEach(function(e){e.show(),e.removeClass("invisible")})),e.header.hasClass("invisible")?(e.col.css("width",0),e.col.hide()):e.col.hasClass("draggable-handle")||e.col.hasClass("selection-state")||e.col.hasClass("favorite")||(e.attributes.width?(t=i=e.attributes.width,h.push(t+"px")):(t={integer:8,biginteger:8,selection:9,reference:20,one2many:5,many2many:5,boolean:3,binary:20}[e.attributes.widget]||10,e.attributes.symbol&&(t+=2),n=1,e.attributes.expand&&(n+=parseInt(e.attributes.expand,10)),i=100*t*n+"%",h.push(t+"em")),e.col.css("width",i),e.col.show()))}.bind(this)),this.table.css("min-width","calc("+h.join(" + ")+")"),this.scrollbar.css("min-width",this.table.css("min-width")),!this.table.hasClass("no-responsive")&1<this.columns.filter(function(e){return!e.header.hasClass("invisible")}).length?(this.table.addClass("responsive"),this.table.addClass("responsive-header")):(this.table.removeClass("responsive"),this.table.removeClass("responsive-header")),this.update_arrow(),this.redraw(t,r).then(function(){var e,t,i=this.table.children("tbody");i.length?i!==this.tbody&&i.replaceWith(this.tbody):this.table.append(this.tbody),this.tbody.append(this.rows.filter(function(e){return!e.el.parent().length}).map(function(e){return e.el})),this.display_size<this.group.length&&(e=jQuery("<tr/>",{class:"more-row"}),t=jQuery("<td/>",{colspan:s}),i=jQuery("<button/>",{class:"btn btn-default btn-block",type:"button"}).text(Sao.i18n.gettext("More")).click(function(){this.display_size+=Sao.config.display_size,this.display()}.bind(this)),t.append(i),e.append(t),this.tbody.append(e),n&&n.observe(i[0]))}.bind(this)).done(Sao.common.debounce(this.update_sum.bind(this),250))},construct:function(e){e?this.tbody.find("tr.more-row").remove():(this.rows=[],this.tbody=jQuery("<tbody/>"),this.draggable&&this._add_drag_n_drop(),this.edited_row=null);this.group.slice(this.rows.length,this.display_size).forEach(function(e,t,i){var n=this.editable?Sao.View.Tree.RowEditable:Sao.View.Tree.Row;this.rows.push(new n(this,e,this.rows.length))}.bind(this))},redraw:function(e,t){return i(this.rows,e,t)},switch_:function(e){this.screen.row_activate()},select_changed:function(e){this.edited_row&&(e=this.edited_row.record,this.edited_row.set_selection(!0)),this.record=e},update_sum:function(){this.sum_widgets.forEach(function(e,t){for(var i,n=t.attributes.name,o=this.selected_records,s="-",t=e[0],e=e[1],r=null,a=null,c=!0,l=0,d=this.screen.model.fields[n],h=o.map(function(e){return e.id}),u=0;u<this.group.length;u++){if(!(_=this.group[u]).get_loaded([n])&&0<=_.id){c=!1;break}var _,m=d.get(_);null!==(m=m&&m.isTimeDelta?m.asSeconds():m)&&(null===r?r=m:r+=m,!~h.indexOf(_.id)&&o||(null===a?a=m:a+=m),d.digits&&(l=(_=d.digits(_))&&null!==l?Math.max(_[1],l):null))}c&&("timedelta"==d.description.type?(i=d.converter(this.group),a=Sao.common.timedelta.format(Sao.TimeDelta(null,a),i),r=Sao.common.timedelta.format(Sao.TimeDelta(null,r),i)):null!==l&&((i={}).minimumFractionDigits=l,i.maximumFractionDigits=l,a=(a||0).toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),i),r=(r||0).toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),i)),s=a+" / "+r),e.text(s),e.parent().attr("title",t.text()+" "+e.text())}.bind(this))},get selected_records(){if(this.selection_mode==Sao.common.SELECTION_NONE)return[];var t=[],i=function(e){e.is_selected()&&t.push(e.record),e.rows.forEach(i)};return this.rows.forEach(i),this.selection.prop("checked")&&!this.selection.prop("indeterminate")&&this.group.slice(this.rows.length).forEach(function(e){t.push(e)}),t},get listed_records(){if(!this.children_field)return this.group.slice();var c=function(e){for(var t=[],i=((r=this.find_row(e))||this).rows,n=0,o=this.n_children(r);n<o;n++){var s,r,a=e.concat([n]);(r=i[n])&&(s=r.record,t.push(s),r.is_expanded()&&(t=t.concat(c(a))))}return t}.bind(this);return c([]).concat(this.group.slice(this.rows.length))},get_listed_paths:function(){if(!this.children_field)return this.group.map(function(e){return[e.id]});var l=function(e,t){for(var i=[],n=((a=this.find_row(e))||this).rows,o=0,s=this.n_children(a);o<s;o++){var r,a,c=e.concat([o]);(a=n[o])&&(r=a.record,r=t.concat([r.id]),i.push(r),a.is_expanded()&&(i=i.concat(l(c,r))))}return i}.bind(this);return l([],[]).concat(this.group.slice(this.rows.length).map(function(e){return[e.id]}))},select_records:function(i,n){if((i=!i&&n?this.rows[0].record:i)&&n){for(var e,t=i.get_index_path(this.screen.group),o=n.get_index_path(this.screen.group),s=Math.min(t.length,o.length),r=0;r<s;r++)if(t[r]>o[r]){e=i,i=n,n=e;break}!e&&t.length>o.length&&(e=i,i=n,n=e)}var a=this.rows[0].record===i,c=function(e){var t=e.record;t===i&&(a=!0),e.set_selection(a),t===n&&(a=!1),e.rows.forEach(c)};this.rows.forEach(c)},selection_changed:function(){var t=this.selection.prop("checked"),i=function(e){e.set_selection(t),e.rows.forEach(i)};this.rows.forEach(i),t&&this.rows[0]?this.select_changed(this.rows[0].record):this.select_changed(null),this.update_sum()},update_selection:function(){this.update_sum();var e=this.selected_records;this.selection.prop("indeterminate",!1),jQuery.isEmptyObject(e)?this.selection.prop("checked",!1):(e.length==this.tbody.children().length&&this.display_size>=this.group.length||this.selection.prop("indeterminate",!0),this.selection.prop("checked",!0))},get_selected_paths:function(){var a=[];return function e(t,i){for(var n,o,s=0,r=t.rows.length;s<r;s++)n=t.rows[s],o=i.concat([n.record.id]),n.is_selected()&&a.push(o),e(n,o)}(this,[]),a},get_expanded_paths:function(e,t){var i,n;void 0===t&&(t=[]);for(var o,s=[],r=((o=this.find_row(e=void 0===e?[]:e))||this).rows,a=0,c=this.n_children(o);a<c;a++)n=e.concat([a]),(o=r[a])&&o.is_expanded()&&(i=t.concat(o.record.id),s.push(i),s=s.concat(this.get_expanded_paths(n,i)));return s},find_row:function(e){for(var t,i=null,n=this.rows,o=0,s=e.length;o<s;o++){if(t=e[o],!n||t>=n.length)return null;if(n=(i=n[t]).rows,!this.children_field)break}return i},n_children:function(e){return(e&&this.children_field?e.record._values[this.children_field]:this.rows).length},set_cursor:function(e,t){var i,n,o,s,r;this.record&&(i=this.record.get_index_path(this.group),this.rows.length<=i[0]&&(this.display_size=this.group.length,this.display()),1<i.length&&(s=this.rows[i[0]].expand_to_path(i.slice(1),[this.record.get_path(this.group).map(function(e){return e[1]})])),r=function(){(o=this.find_row(i))&&null!==(n=o.next_column(null,e))&&(o=o._get_column_td(n),this.editable&&e&&o.trigger("click"),o.find(":input,[tabindex=0]").focus())}.bind(this),s?s.then(r):r())},save_row:function(){var e,t=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(e=this.group.parent?this.screen.attributes.pre_validate?this.record.pre_validate():jQuery.when():this.edited_row.record.save()).fail(function(){this.edited_row!=t&&(this.edit_row(null),t.set_selection(!0),t.selection_changed(),this.edit_row(t))}.bind(this)),e;for(var i=!1,n=this.edited_row.record.invalid_fields(),o=0;o<this.columns.length;o++){var s,r=this.columns[o];r.attributes.name in n&&(s=this.edited_row._get_column_td(o),(s=this.edited_row.get_editable_el(s).data("widget")).display(this.edited_row.record,r.field),i||(s.focus(),i=!0))}},edit_row:function(e){this.editable&&this.edited_row!=e&&(this.edited_row&&this.edited_row.unset_editable(),e&&e.set_editable(),this.edited_row=e)},_find_row:function(t){var i=null,n=function(e){e.el[0]!=t[0]?e.rows.forEach(n):i=e};return this.rows.forEach(n),i}}),Sao.View.Tree.Row=Sao.class_(Object,{init:function(e,t,i,n){this.tree=e,this.current_column=null,this.rows=[],this.record=t,this.parent_=n,this.children_field=e.children_field,this.expander=null,this._group_position=null,this._path=null,this._drawed_record=null,this.el=jQuery("<tr/>"),this.el.on("click",this.select_row.bind(this)),this._construct()},get group_position(){return null===this._group_position&&(this._group_position=this.record.group.indexOf(this.record)),this._group_position},get path(){var e;return this._path||((e=this.parent_?jQuery.extend([],this.parent_.path.split(".")):[]).push(this.group_position),this._path=e.join(".")),this._path},reset_path:function(){this._group_position=null,this._path=null;for(var e=0;e<this.rows.length;e++)this.rows[e].reset_path()},is_expanded:function(){return this.tree.expanded.has(this)},get_id_path:function(){return this.parent_?this.parent_.get_id_path().concat([this.record.id]):[this.record.id]},_construct:function(){this.tree.el.uniqueId(),this.tree.draggable&&((i=jQuery("<td/>",{class:"draggable-handle"})).append(Sao.common.ICONFACTORY.get_icon_img("tryton-drag")),this.el.append(i)),i=jQuery("<td/>",{class:"selection-state"}).click(function(e){e.stopPropagation(),this.selection.click()}.bind(this)),this.el.append(i),this.selection=jQuery("<input/>",{type:"checkbox",name:"tree-selection-"+this.tree.el.attr("id")}),this.selection.click(function(e){e.stopPropagation()}),this.selection.change(this.selection_changed.bind(this)),i.append(this.selection);var e=function(e){this.expander&&!this.is_expanded()&&this.tree.n_children(this)<=Sao.config.limit&&this.toggle_row(),this.select_column(e.data.index)}.bind(this);this.children_field&&(this.expander=jQuery("<span/>",{class:"expander"}).append("<img/>",{tabindex:0,class:"icon"}),this.expander.children().html(" "),this.expander.on("click keypress",Sao.common.click_press(this.toggle_row.bind(this))));for(var t=0;t<this.tree.columns.length;t++){var i,n=this.tree.columns[t];(i=n instanceof Sao.View.Tree.ButtonColumn?jQuery("<td>"):jQuery("<td/>",{"data-title":n.attributes.string+Sao.i18n.gettext(": ")}).append(jQuery("<span/>",{"aria-hidden":!0}))).on("click keypress",{index:t},e),this.tree.editable?(n.attributes.required&&i.addClass("required"),n.attributes.readonly||i.addClass("editable")):i.dblclick(this.switch_row.bind(this));var o,s=jQuery("<div>",{class:"cell"});if(i.append(s),n.prefixes)for(o=0;o<n.prefixes.length;o++){n.prefixes[o];s.append(jQuery("<span/>",{class:"prefix"}))}if(s.append(jQuery("<span/>",{class:"widget"})),n.suffixes)for(o=0;o<n.suffixes.length;o++){n.suffixes[o];s.append(jQuery("<span/>",{class:"suffix"}))}this.el.append(i)}},_get_column_td:function(e,t){t=t||this.el;var i=1;return this.tree.draggable&&(i+=1),jQuery(t.children()[e+i])},redraw:function(t,i){t=t||[],i=i||[];var e=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()}function n(i,n){["muted","success","warning","danger"].forEach(function(e){var t="muted"==e?"text-muted":e;e==n?i.addClass(t):i.removeClass(t)})}if(this._drawed_record!==this.record.identity)for(var o=0;o<this.tree.columns.length;o++){var s=this.tree.columns[o],r=this._get_column_td(o),a=r.find(".cell");if(s.prefixes)for(var c=0;c<s.prefixes.length;c++){var l,d=s.prefixes[c],h=jQuery(a.children(".prefix")[c]);(l=h.children()).length?d.render(this.record,l):h.empty().append(d.render(this.record))}var u=a.children(".widget");if((l=u.children()).length?s.render(this.record,l):u.empty().append(s.render(this.record)),s.suffixes)for(var _=0;_<s.suffixes.length;_++){var m=s.suffixes[_],p=jQuery(a.children(".suffix")[_]);(l=p.children()).length?m.render(this.record,l):p.empty().append(m.render(this.record))}n(r,this.record.expr_eval(s.attributes.visual)),s.header.is(":hidden")&&e||"none"==s.header.css("display")?(r.hide(),r.addClass("invisible")):(r.show(),r.removeClass("invisible"))}this.children_field&&this.tree.columns.every(function(e,t){if(e.col.hasClass("draggable-handle")||e.header.hasClass("invisible"))return!0;t=this._get_column_td(t).find(".cell");return this.expander.parent()[0]!==t[0]&&t.prepend(this.expander),!1}.bind(this)),this._drawed_record=this.record.identity;var f,g,v=this.get_id_path();this.set_selection(Sao.common.contains(t,v)),this.children_field&&(g=this.path.split(".").length,f="margin-left",Sao.i18n.rtl&&(f="margin-right"),this.expander.children().css(f,g-1+"em"),g=function(){var e=this.record.field_get_client(this.children_field).length;e&&(this.is_expanded()||Sao.common.contains(i,v))?(this.expander.css("visibility","visible"),this.tree.expanded.add(this),this.expand_children(t,i),this.update_expander(!0)):(this.expander.css("visibility",e?"visible":"hidden"),this.update_expander(!1))}.bind(this),this.record.is_loaded(this.children_field)?g():this.record.load(this.children_field).done(g)),n(this.el,this.record.expr_eval(this.tree.attributes.visual)),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),this.tree.expanded.delete(this),this.collapse_children()):this.tree.n_children(this)>Sao.config.limit?(this.tree.record=this.record,this.tree.screen.switch_view("form")):(this.update_expander(!0),this.tree.expanded.add(this),this.expand_children()),!1},update_expander:function(e){e=e?"tryton-arrow-down":"tryton-arrow-right";Sao.common.ICONFACTORY.get_icon_url(e).then(function(e){this.expander.children().attr("src",e)}.bind(this))},collapse_children:function(){this.rows.forEach(function(e,t,i){e.collapse_children();e=e.el[0];e.parentNode.removeChild(e)}),this.rows=[]},expand_children:function(e,t){return this.record.load(this.children_field).done(function(){0===this.rows.length&&this.record.field_get_client(this.children_field).forEach(function(e,t,i){this.rows.push(new this.Class(this.tree,e,t,this))}.bind(this)),i(this.rows,e,t).then(function(){this.el.after(this.rows.filter(function(e){return!e.el.parent().length}).map(function(e){return e.el}))}.bind(this))}.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(e){},select_row:function(e){var t;this.tree.selection_mode==Sao.common.SELECTION_NONE?(this.tree.select_changed(this.record),this.switch_row()):(e.shiftKey&&this.tree.selection_mode!=Sao.common.SELECTION_SINGLE?(t=this.tree.screen.current_record,this.tree.select_records(t,this.record)):((e.ctrlKey||e.metaKey)&&this.tree.selection_mode!=Sao.common.SELECTION_SINGLE||this.tree.select_records(null,null),this.set_selection(!this.is_selected())),this.selection_changed(),t&&(this.tree.screen.current_record=t))},is_selected:function(){return this.tree.selection_mode!=Sao.common.SELECTION_NONE&&this.selection.prop("checked")},set_selection:function(e){this.tree.selection_mode!=Sao.common.SELECTION_NONE&&(this.selection.prop("checked",e),e?this.el.addClass("selected"):this.el.removeClass("selected"),e||this.tree.selection.prop("checked",!1))},selection_changed:function(){var e=this.is_selected();this.set_selection(e),e?this.tree.select_changed(this.record):this.tree.select_changed(this.tree.selected_records[0]||null),this.tree.update_selection()},expand_to_path:function(e,t){if(e.length&&this.record.field_get_client(this.children_field).length)return this.expander.css("visibility","visible"),this.tree.expanded.add(this),this.update_expander(!0),this.expand_children(t).done(function(){return this.rows[e[0]].expand_to_path(e.slice(1),t)}.bind(this))},next_column:function(e,t,i){var n,o,s;for(i=i||1,null===e&&0<i?e=-1:null===e&&(e=0),n=s=0;n<this.tree.columns.length;n++)if((s=(e+i*(n+1))%this.tree.columns.length)<0&&(s+=this.tree.columns.length),(o=this.tree.columns[s]).field){var r,a,c=(a=o.field.get_state_attrs(this.record)).invisible;if(o.header.is(":hidden")&&(c=!0),r=!!t&&(r=Sao.View.EditableTree.WIDGETS[o.attributes.widget],o.attributes.readonly||a.readonly||!r),!c&&!r)return s}}}),Sao.View.Tree.RowEditable=Sao.class_(Sao.View.Tree.Row,{init:function(e,t,i,n){Sao.View.Tree.RowEditable._super.init.call(this,e,t,i,n),this.edited_column=null,this.el.on("keypress",function(e){e.which==Sao.common.RETURN_KEYCODE&&this.tree.edited_row!=this&&(this.tree.edit_row(this),e.preventDefault())}.bind(this))},redraw:function(e,t){Sao.View.Tree.RowEditable._super.redraw.call(this,e,t);for(var i=function(t){var i=this.record;return function(){var e=i.model.fields[t.field_name];e.set_state(i),t.display(i,e)}}.bind(this),n=0;n<this.tree.columns.length;n++){var o=this.tree.columns[n],s=this._get_column_td(n).children(".cell");(s=jQuery(s.children(".widget-editable")).data("widget"))&&(s=i(s),this.record.is_loaded(o.attributes.name)?s():this.record.load(o.attributes.name).done(s))}},select_column:function(e){this.edited_column=e},select_row:function(e){var t,i,n;e.stopPropagation(),this.tree.edited_row&&e.currentTarget==this.tree.edited_row.el[0]||(n=this.tree.screen.current_record,this.record!=n&&!n.validate(this.tree.get_fields(),!1,!1,!0)||((t=i=jQuery(document.body)).hasClass("modal-open")&&(i=this.tree.el.parents(".modal").last()),(n=function(e){if(e.currentTarget!=t[0]||!t.hasClass("modal-open"))return this.tree.save_row()?(t.off("click.sao.editabletree"),this.tree.edit_row(null),!0):(e.preventDefault(),void e.stopPropagation())}.bind(this))(e)&&(i.on("click.sao.editabletree",n),Sao.View.Tree.RowEditable._super.select_row.call(this,e),e.shiftKey||e.ctrlKey||e.metaKey||this.tree.edit_row(this))))},unset_editable:function(){this.tree.columns.forEach(function(e,t){t=this._get_column_td(t);this.get_static_el(t).empty().append(e.render(this.record)).show(),this.get_editable_el(t).empty().data("widget",null).hide().parents(".treeview td").addBack().removeClass("edited")}.bind(this))},set_editable:function(){for(var e=null,t=0,i=this.tree.columns.length;t<i;t++){var n,o,s=this._get_column_td(t),r=this.tree.columns[t];r.field&&(o=Sao.View.EditableTree.WIDGETS[r.attributes.widget],!r.attributes.readonly&&o&&((n=new o(this.tree,r.attributes)).el.on("keydown",this.key_press.bind(this)),(o=this.get_editable_el(s)).append(n.el),o.data("widget",n),n.display(this.record,r.field),this.get_static_el(s).hide(),o.show(),o.parents(".treeview td").addBack().addClass("edited"),this.edited_column==t&&(e=n)))}e&&e.focus()},get_static_el:function(e){return(e=e||this.get_active_td()).find(".widget")},get_editable_el:function(e){var t=(e=e||this.get_active_td()).find(".widget-editable");return t=!t.length?jQuery("<span/>",{class:"widget-editable"}).insertAfter(e.find(".widget")):t},get_active_td:function(){return this._get_column_td(this.edited_column)},key_press:function(s){var r,a,e,t,c,i,n;s.which!=Sao.common.TAB_KEYCODE&&s.which!=Sao.common.UP_KEYCODE&&s.which!=Sao.common.DOWN_KEYCODE&&s.which!=Sao.common.ESC_KEYCODE&&s.which!=Sao.common.RETURN_KEYCODE||jQuery(s.currentTarget).find(".dropdown-menu:visible").length||(e=this._get_column_td(this.edited_column),t=this.get_editable_el(e),(c=t.data("widget")).focus_out(),(i=this.tree.columns[this.edited_column]).field.validate(this.record)?s.which==Sao.common.TAB_KEYCODE?(n=1,s.shiftKey&&(n=-1),s.preventDefault(),null!==(n=this.next_column(this.edited_column,!0,n))&&(this.edited_column=n,e=this._get_column_td(n),t=this.get_editable_el(e),(c=t.data("widget")).focus())):s.which==Sao.common.UP_KEYCODE||s.which==Sao.common.DOWN_KEYCODE||s.which==Sao.common.RETURN_KEYCODE?(r=this.edited_column,this.record.validate(this.tree.get_fields()).then(function(e){if(e){var t,i,n=jQuery.when();this.tree.screen.group.parent?this.tree.screen.attributes.pre_validate&&(n=this.record.pre_validate()):n=this.record.save(),n.fail(function(){c.focus()}),!(t=s.which!=Sao.common.UP_KEYCODE&&(s.which==Sao.common.DOWN_KEYCODE||-1==this.tree.screen.new_position)?this.el.next("tr"):this.el.prev("tr")).length&&(s.which==Sao.common.RETURN_KEYCODE||s.which==Sao.common.UP_KEYCODE&&0==this.tree.screen.new_position||s.which==Sao.common.DOWN_KEYCODE&&-1==this.tree.screen.new_position)?(i=this.tree.screen.group,e=Sao.common.MODELACCESS.get(this.tree.screen.model_name),i=null!==this.tree.screen.size_limit&&i.length>=this.tree.screen.size_limit,e.create&&!i&&n.then(function(){return this.tree.screen.new_()}.bind(this)).then(function(e){var t=this.tree.attributes.sequence;t&&e.group.set_sequence(t,this.tree.screen.new_position)}.bind(this))):n.then(function(){this._get_column_td(r,t).trigger("click").find(":input,[tabindex=0]").focus()}.bind(this))}else{var o=this.record.invalid_fields();for(a=0;a<this.tree.columns.length;a++)if(this.tree.columns[a].attributes.name in o){r=a;break}this._get_column_td(r).find(":input,[tabindex=0]").focus()}}.bind(this))):s.which==Sao.common.ESC_KEYCODE&&(this.tree.edit_row(null),this.get_static_el().show().find("[tabindex=0]").focus()):c.display(this.record,i.field),s.preventDefault())}}),Sao.View.Tree.Affix=Sao.class_(Object,{init:function(e,t){this.attributes=e,this.protocol=t||null,this.icon=e.icon,this.protocol&&!this.icon&&(this.icon="tryton-public")},get_cell:function(){var e;return this.protocol?((e=jQuery("<a/>",{target:"_blank",rel:"noreferrer noopener"})).append(jQuery("<img/>")),e.click({cell:e},this.clicked.bind(this))):this.icon?e=jQuery("<img/>"):(e=jQuery("<span/>")).attr("tabindex",0),e.addClass("column-affix"),e},render:function(o,s){s=s||this.get_cell();var e=function(){var e,t,i,n=o.model.fields[this.attributes.name];if(n.set_state(o,["invisible"]),n.get_state_attrs(o).invisible?s.hide():s.show(),this.protocol){if(e=n.get(o),!jQuery.isEmptyObject(e))switch(this.protocol){case"email":e="mailto:"+e;break;case"callto":e="callto:"+e;break;case"sip":e="sip:"+e}s.attr("href",e)}this.icon?(e=this.icon in o.model.fields?o.model.fields[this.icon].get_client(o):this.icon,t=s.children("img").length?s.children("img"):s,"url"==this.attributes.icon_type?e?(this.attributes.url_size&&((i=new URL(e,window.location)).searchParams.set(this.attributes.url_size,20),e=i.href),t.attr("src",e)):t.removeAttr("src"):Sao.common.ICONFACTORY.get_icon_url(e).done(function(e){e?t.attr("src",e):t.removeAttr("src")}.bind(this))):(e=(e=this.attributes.string||"")||(n.get_client(o)||""),s.text(e))}.bind(this);return o.is_loaded(this.attributes.name)?e():o.load(this.attributes.name).done(e),s},clicked:function(e){e.stopPropagation()}}),Sao.View.Tree.Symbol=Sao.class_(Object,{class_:"column-symbol",init:function(e,t){this.attributes=e,this.position=t},get_cell:function(){return jQuery("<span/>",{class:this.class_,tabindex:0})},render:function(i,n){n=n||this.get_cell();var e=function(){var e=i.model.fields[this.attributes.name];if(e.set_state(i,["invisible"]),e.get_state_attrs(i).invisible)return n.text(""),void n.hide();var t=e.get_symbol(i,this.attributes.symbol),e=t[0],t=t[1];Math.round(t)===this.position?(n.text(e),n.show()):(n.text(""),n.hide())}.bind(this);return i.is_loaded(this.attributes.name)?e():i.load(this.attributes.name).done(e),n}}),Sao.View.Tree.CharColumn=Sao.class_(Object,{class_:"column-char",init:function(e,t){this.type="field",this.model=e,this.field=e.fields[t.name],this.tree=null,this.attributes=t,this.prefixes=[],this.suffixes=[],this.header=null,this.footers=[]},get field_name(){return this.attributes.name},get model_name(){return model.name},get_cell:function(){return jQuery("<div/>",{class:this.class_,tabindex:0})},update_text:function(e,t){t=this.field.get_client(t);e.text(t).attr("title",t)},render:function(e,t){t=t||this.get_cell();var i=function(){this.update_text(t,e),this.field.set_state(e),this.field.get_state_attrs(e).invisible?t.hide():t.show()}.bind(this);return e.is_loaded(this.attributes.name)?i():e.load(this.attributes.name).done(i),t}}),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(e,t){Sao.View.Tree.IntegerColumn._super.init.call(this,e,t),this.factor=Number(t.factor||1)},get_cell:function(){return Sao.View.Tree.IntegerColumn._super.get_cell.call(this)},update_text:function(e,t){t=this.field.get_client(t,this.factor);e.text(t).attr("title",t)}}),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",class:this.class_,tabindex:0})},update_text:function(e,t){e.prop("checked",this.field.get(t))},render:function(e,t){var i=!t;t=Sao.View.Tree.BooleanColumn._super.render.call(this,e,t);var n=!0;return this.tree.editable&&(i&&t.on("click",null,{record:e,cell:t},this.clicked.bind(this)),e=this.field.get_state_attrs(e),n=this.attributes.readonly||e.readonly),t.prop("disabled",n),t},clicked:function(e){var t=e.data.record,i=e.data.cell,n=this.tree.screen.current_record,o=this.tree.get_fields();!n||n.validate(o,!1,!1,!0)?(i=i.prop("checked"),this.field.set_client(t,i)):e.preventDefault()}}),Sao.View.Tree.Many2OneColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-many2one",get_cell:function(){var e=Sao.View.Tree.Many2OneColumn._super.get_cell.call(this);return e.append(jQuery("<a/>",{href:"#"})),e},update_text:function(e,t){(e=e.children("a")).unbind("click"),Sao.View.Tree.Many2OneColumn._super.update_text.call(this,e,t),e.click(function(e){e.stopPropagation();e={};e.model=this.attributes.relation,e.res_id=this.field.get(t),e.mode=["form"],e.name=this.attributes.string,e.context=this.field.get_context(t),Sao.Tab.create(e)}.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(e,t){Sao.View.Tree.SelectionColumn._super.init.call(this,e,t),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(e){Sao.common.selection_mixin.init_selection.call(this,e)},update_selection:function(e,t){Sao.common.selection_mixin.update_selection.call(this,e,this.field,t)},update_text:function(s,r){this.update_selection(r,function(){for(var e,t=this.field.get(r),i=!1,n=0,o=this.selection.length;n<o;n++)if(this.selection[n][0]===t){i=!0,e=this.selection[n][1];break}(i?jQuery.when(e):Sao.common.selection_mixin.get_inactive_selection.call(this,t).then(function(e){return e[1]})).done(function(e){s.text(e).attr("title",e)}.bind(this))}.bind(this))}}),Sao.View.Tree.MultiSelectionColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-multiselection",init:function(e,t){Sao.View.Tree.MultiSelectionColumn._super.init.call(this,e,t),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(e){Sao.common.selection_mixin.init_selection.call(this,e)},update_selection:function(e,t){Sao.common.selection_mixin.update_selection.call(this,e,this.field,t)},update_text:function(t,i){this.update_selection(i,function(){var e=this.field.get_eval(i).map(function(e){for(var t=0;t<this.selection.length;t++)if(this.selection[t][0]===e)return this.selection[t][1];return""}.bind(this)).join(";");t.text(e).attr("title",e)}.bind(this))}}),Sao.View.Tree.ReferenceColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-reference",init:function(e,t){Sao.View.Tree.ReferenceColumn._super.init.call(this,e,t),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(e){Sao.common.selection_mixin.init_selection.call(this,e)},update_selection:function(e,t){Sao.common.selection_mixin.update_selection.call(this,e,this.field,t)},update_text:function(s,r){this.update_selection(r,function(){var e,t,i=this.field.get_client(r),i=i?(e=i[0],i[1]):e="";if(e){for(var n=0,o=this.selection.length;n<o;n++)if(this.selection[n][0]===e){e=this.selection[n][1];break}t=e+","+i}else t=i;s.text(t).attr("title",t)}.bind(this))}}),Sao.View.Tree.DictColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-dict",update_text:function(e,t){t="("+Object.keys(this.field.get_client(t)).length+")";e.text(t).attr("title",t)}}),Sao.View.Tree.DateColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-date",update_text:function(e,t){var i=this.field.get_client(t),t=this.field.date_format(t),i=Sao.common.format_date(t,i);e.text(i).attr("title",i)}}),Sao.View.Tree.TimeColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-time",update_text:function(e,t){var i=this.field.get_client(t),i=Sao.common.format_time(this.field.time_format(t),i);e.text(i).attr("title",i)}}),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(e,t){t="( "+this.field.get_client(t).length+" )";e.text(t).attr("title",t)}}),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(e,t){Sao.View.Tree.BinaryColumn._super.init.call(this,e,t),this.filename=t.filename||null},get_cell:function(){var e=Sao.View.Tree.BinaryColumn._super.get_cell.call(this);return jQuery("<span/>").appendTo(e),e},update_text:function(e,t){var i=this.field.get_size?this.field.get_size(t):this.field.get(t).length,n=i?Sao.common.humanize(i):"";e.children("span").text(n).attr("title",n);n=e.children("button");n.length||(n=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-save")).appendTo(e).click(t,function(e){e.stopPropagation(),this.save_as(e.data)}.bind(this))),i?n.show():n.hide()},save_as:function(e){var t,i=e.model.fields[this.filename];i&&(t=i.get_client(e),Sao.common.guess_mimetype(t)),(this.field.get_data?this.field.get_data(e):jQuery.when(this.field.get(e))).done(function(e){Sao.common.download_file(e,t)}.bind(this))}}),Sao.View.Tree.ImageColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-image",get_cell:function(){var e=jQuery("<img/>",{class:this.class_+" center-block",tabindex:0});return this.height=parseInt(this.attributes.height||100,10),this.width=parseInt(this.attributes.width||300,10),e.css("max-height",this.height),e.css("max-width",this.width),e.css("height","auto"),e.css("width","auto"),e},render:function(i,n){n=n||this.get_cell();var e=function(){var e=function(e){var t=e?(t=new Blob([e]),window.URL.createObjectURL(t)):null;n.attr("src",t)}.bind(this),t=this.field.get_client(i);!t||t>Sao.common.BIG_IMAGE_SIZE?e(null):this.field.get_data(i).done(e)}.bind(this);return i.is_loaded(this.attributes.name)?e():i.load(this.attributes.name).done(e),n}}),Sao.View.Tree.URLColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-url",render:function(e,t){return t=Sao.View.Tree.URLColumn._super.render.call(this,e,t),this.field.set_state(e),this.field.get_state_attrs(e).readonly?t.hide():t.show(),t}}),Sao.View.Tree.ProgressBar=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-progressbar",get_cell:function(){var e=jQuery("<div/>",{class:this.class_+" progress",tabindex:0});return jQuery("<div/>",{class:"progress-bar",role:"progressbar","aria-valuemin":0,"aria-valuemax":100}).appendTo(e).css("min-width: 2em"),e},update_text:function(e,t){var i=(i=this.field.get_client(t,100))&&Sao.i18n.gettext("%1%",i),t=this.field.get(t)||0,e=e.find(".progress-bar");e.attr("aria-valuenow",100*t),e.css("width",100*t+"%"),e.text(i).attr("title",i)}}),Sao.View.Tree.ButtonColumn=Sao.class_(Object,{init:function(e,t){this.view=e,this.type="button",this.attributes=t},render:function(e,t){var i=new Sao.common.Button(this.attributes,t,"btn-sm");t||i.el.click([e,i],this.button_clicked.bind(this));jQuery.map(this.view.screen.model.fields,function(e,t){if("eager"==(e.description.loading||"eager"))return t});return i.set_state(e),i.el},button_clicked:function(e){var t=e.data[0],i=e.data[1];if(t!=this.view.screen.current_record)return!0;e=t.expr_eval(this.attributes.states||{});e.invisible||e.readonly||(i.el.prop("disabled",!0),(i=this.view.rows.find(function(e){return e.record==t}))&&(i._drawed_record=null),this.view.screen.button(this.attributes))}}),Sao.View.TreeXMLViewParser.WIDGETS={biginteger:Sao.View.Tree.IntegerColumn,binary:Sao.View.Tree.BinaryColumn,boolean:Sao.View.Tree.BooleanColumn,callto:Sao.View.Tree.URLColumn,char:Sao.View.Tree.CharColumn,date:Sao.View.Tree.DateColumn,dict:Sao.View.Tree.DictColumn,email:Sao.View.Tree.URLColumn,float:Sao.View.Tree.FloatColumn,image:Sao.View.Tree.ImageColumn,integer:Sao.View.Tree.IntegerColumn,many2many:Sao.View.Tree.Many2ManyColumn,many2one:Sao.View.Tree.Many2OneColumn,numeric:Sao.View.Tree.FloatColumn,one2many:Sao.View.Tree.One2ManyColumn,one2one:Sao.View.Tree.One2OneColumn,progressbar:Sao.View.Tree.ProgressBar,reference:Sao.View.Tree.ReferenceColumn,selection:Sao.View.Tree.SelectionColumn,multiselection:Sao.View.Tree.MultiSelectionColumn,sip:Sao.View.Tree.URLColumn,text:Sao.View.Tree.TextColum,time:Sao.View.Tree.TimeColumn,timedelta:Sao.View.Tree.TimeDeltaColumn,url:Sao.View.Tree.URLColumn},Sao.View.EditableTree={},Sao.View.EditableTree.editable_mixin=function(e){e.el.on("keydown",function(e){e.which!=Sao.common.TAB_KEYCODE&&e.which!=Sao.common.UP_KEYCODE&&e.which!=Sao.common.DOWN_KEYCODE&&e.which!=Sao.common.ESC_KEYCODE&&e.which!=Sao.common.RETURN_KEYCODE||this.focus_out()}.bind(e))},Sao.View.EditableTree.Char=Sao.class_(Sao.View.Form.Char,{class_:"editabletree-char",init:function(e,t){Sao.View.EditableTree.Char._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Date=Sao.class_(Sao.View.Form.Date,{class_:"editabletree-date",init:function(e,t){Sao.View.EditableTree.Date._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Time=Sao.class_(Sao.View.Form.Time,{class_:"editabletree-time",init:function(e,t){Sao.View.EditableTree.Time._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.TimeDelta=Sao.class_(Sao.View.Form.TimeDelta,{class_:"editabletree-timedelta",init:function(e,t){Sao.View.EditableTree.TimeDelta._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Integer=Sao.class_(Sao.View.Form.Integer,{class_:"editabletree-integer",init:function(e,t){delete(t=jQuery.extend({},t)).symbol,Sao.View.EditableTree.Integer._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)},get width(){}}),Sao.View.EditableTree.Float=Sao.class_(Sao.View.Form.Float,{class_:"editabletree-float",init:function(e,t){delete(t=jQuery.extend({},t)).symbol,Sao.View.EditableTree.Float._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)},get width(){}}),Sao.View.EditableTree.Selection=Sao.class_(Sao.View.Form.Selection,{class_:"editabletree-selection",init:function(e,t){Sao.View.EditableTree.Selection._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Boolean=Sao.class_(Sao.View.Form.Boolean,{class_:"editabletree-boolean",init:function(e,t){Sao.View.EditableTree.Boolean._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Many2One=Sao.class_(Sao.View.Form.Many2One,{class_:"editabletree-many2one",init:function(e,t){Sao.View.EditableTree.Many2One._super.init.call(this,e,t)}}),Sao.View.EditableTree.Reference=Sao.class_(Sao.View.Form.Reference,{class_:"editabletree-reference",init:function(e,t){Sao.View.EditableTree.Reference._super.init.call(this,e,t)}}),Sao.View.EditableTree.One2One=Sao.class_(Sao.View.Form.One2One,{class_:"editabletree-one2one",init:function(e,t){Sao.View.EditableTree.One2One._super.init.call(this,e,t)}}),Sao.View.EditableTree.One2Many=Sao.class_(Sao.View.EditableTree.Char,{class_:"editabletree-one2many",init:function(e,t){Sao.View.EditableTree.One2Many._super.init.call(this,e,t)},display:function(e,t){e?this.el.val("("+t.get_client(e).length+")"):this.el.val("")},key_press:function(e){e.which==Sao.common.TAB_KEYCODE&&this.focus_out()},set_value:function(e,t){}}),Sao.View.EditableTree.Binary=Sao.class_(Sao.View.Form.Binary,{class_:"editabletree-binary",init:function(e,t){Sao.View.EditableTree.Binary._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.WIDGETS={biginteger:Sao.View.EditableTree.Integer,binary:Sao.View.EditableTree.Binary,boolean:Sao.View.EditableTree.Boolean,callto:Sao.View.EditableTree.Char,char:Sao.View.EditableTree.Char,date:Sao.View.EditableTree.Date,email:Sao.View.EditableTree.Char,float:Sao.View.EditableTree.Float,integer:Sao.View.EditableTree.Integer,many2many:Sao.View.EditableTree.Many2Many,many2one:Sao.View.EditableTree.Many2One,numeric:Sao.View.EditableTree.Float,one2many:Sao.View.EditableTree.One2Many,one2one:Sao.View.EditableTree.One2One,reference:Sao.View.EditableTree.Reference,selection:Sao.View.EditableTree.Selection,sip:Sao.View.EditableTree.Char,text:Sao.View.EditableTree.Char,time:Sao.View.EditableTree.Time,timedelta:Sao.View.EditableTree.TimeDelta,url:Sao.View.EditableTree.Char}}(),function(){"use strict";Sao.View.GraphXMLViewParser=Sao.class_(Sao.View.XMLViewParser,{init:function(e,t,i){Sao.View.GraphXMLViewParser._super.init.call(this,e,t,i),this._xfield=null,this._yfields=[]},_node_attributes:function(e){for(var t,i={},n=0,o=e.attributes.length;n<o;n++){var s=e.attributes[n];i[s.name]=s.value}return i.name&&(i.string||"#"==i.name||(t=this.field_attrs[i.name],i.string=t.string)),i},_parse_graph:function(e,t){[].forEach.call(e.childNodes,function(e){this.parse(e)}.bind(this));t=new Sao.View.GraphXMLViewParser.WIDGETS[t.type||"vbar"](this.view,this._xfield,this._yfields);this.view.el.append(t.el),this.view.widgets.root=t},_parse_x:function(e,t){for(var i=0;i<e.children.length;i++)this._xfield=this._node_attributes(e.children[i])},_parse_y:function(e,t){for(var i=0;i<e.children.length;i++)this._yfields.push(this._node_attributes(e.children[i]))}}),Sao.View.Graph=Sao.class_(Sao.View,{editable:!1,view_type:"graph",xml_parser:Sao.View.GraphXMLViewParser,init:function(e,t,i,n){this.el=jQuery("<div/>",{class:"graph"}),Sao.View.Graph._super.init.call(this,e,t,i)},display:function(){return this.widgets.root.display(this.group)}}),Sao.View.Graph.Chart=Sao.class_(Object,{_chart_type:void 0,init:function(e,t,i){this.view=e,this.xfield=t,this.yfields=i,this.el=jQuery("<div/>"),this.el.uniqueId()},update_data:function(a){var c,l,d,h,u,_={};this.ids={},_.columns=[["labels"]],_.names={};for(var m={},e=[this.xfield.name],t=0,i=this.yfields.length;t<i;t++)l=this.yfields[t],d=l.key||l.name,_.columns.push([d]),_.names[d]=l.string,m[d]=t+1,e.push(l.name);var n=[],o=function(r){return function(){var e=(c=a[r]).field_get_client(this.xfield.name);e&&(e.isDate||e.isDateTime)&&(e=e.toString());var t,i,n=_.columns[0].indexOf(e);for(n<0&&(n=_.columns[0].push(e)-1),this._add_id(e,c.id),h=0,u=this.yfields.length;h<u;h++){if(l=this.yfields[h],d=l.key||l.name,void 0===(t=_.columns[m[d]])[n]&&(t[n]=null),l.domain){var o,s=jQuery.extend({},Sao.Session.current_session.context);for(o in(s.context=s)._user=Sao.Session.current_session.user_id,a.model.fields)s[o]=c.field_get(o);if(!new Sao.PYSON.Decoder(s).decode(l.domain))continue}t[n]||(t[n]=0),"#"==l.name?t[n]+=1:((i=c.field_get(l.name))&&i.isTimeDelta&&(i=i.asSeconds()),t[n]+=i||0)}}.bind(this)}.bind(this),s=[];for(t=0,i=a.length;t<i;t++)c=a[t],e.forEach(function(t){return function(e){n.push(t.load(e))}}(a[t])),s.push(jQuery.when.apply(jQuery,n).then(o(t)));return jQuery.when.apply(jQuery,s).then(function(){return _})},_add_id:function(e,t){e in this.ids||(this.ids[e]=[]),this.ids[e].push(t)},display:function(e){e=this.update_data(e);return e.done(function(e){c3.generate(this._c3_config(e))}.bind(this)),e},_c3_config:function(e){var t={};t.bindto="#"+this.el.attr("id"),t.data=e,t.data.type=this._chart_type,t.data.x="labels",t.data.onclick=this.action.bind(this);var i,e=this.view.screen.model.fields[this.xfield.name].description.type;"date"==e||"datetime"==e?(i=Sao.common.date_format(this.view.screen.context.date_format),o="datetime"==e?(t.data.xFormat="%Y-%m-%d %H:%M:%S",function(e){return Sao.common.format_datetime(i+" %X",moment(e))}):(t.data.xFormat="%Y-%m-%d",function(e){return Sao.common.format_date(i,moment(e))}),t.axis={x:{type:"timeseries",tick:{format:o}}}):t.axis={x:{type:"category"}};for(var n,e=this.view.attributes.color||Sao.config.graph_color,o=Sao.common.hex2rgb(Sao.common.COLOR_SCHEMES[e]||e),o=Math.max.apply(null,o),s=[],r=0;r<this.yfields.length;r++)n=this.yfields[r],s.push(n.key||n.name);var a=Sao.common.generateColorscheme(e,s,o/(s.length||1));for(r=0;r<this.yfields.length;r++)(n=this.yfields[r]).color&&(a[n.key||n.name]=field.color);return t.data.color=function(e,t){t=t.id||t;return a[t]||e},t},action:function(e,t){var i=this.ids[this._action_key(e)],e=jQuery.extend({},this.view.screen.group._context);delete e.active_ids,delete e.active_id,Sao.Action.exec_keyword("graph_open",{model:this.view.screen.model_name,id:i[0],ids:i},e,!1)},_action_key:function(e){return e.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(e){e=Sao.View.Graph.HorizontalBar._super._c3_config.call(this,e);return e.axis.rotated=!0,e}}),Sao.View.Graph.Line=Sao.class_(Sao.View.Graph.Chart,{_chart_type:"line",_c3_config:function(e){e=Sao.View.Graph.Line._super._c3_config.call(this,e);return e.line={connectNull:!0},e}}),Sao.View.Graph.Pie=Sao.class_(Sao.View.Graph.Chart,{_chart_type:"pie",_c3_config:function(e){for(var t,i,n=Sao.View.Graph.Pie._super._c3_config.call(this,e),o=[],s={},r=0,a=e.columns.length;r<a;r++)"labels"==e.columns[r][0]?t=e.columns[r].slice(1):i=e.columns[r].slice(1);delete n.axis,delete n.data.x;var c,l,d,h,u=this.view.screen.model.fields[this.xfield.name].description.type;for("date"!=u&&"datetime"!=u||(c=Sao.common.date_format(this.view.screen.context.date_format),l=c+" %X",d="datetime"==u?function(e){return Sao.common.format_datetime(l,e)}:function(e){return Sao.common.format_date(c,e)}),r=0,a=t.length;r<a;r++)h=t[r],d&&(h=d(h)),o.push([r,i[r]]),s[r]=h;return n.data.columns=o,n.data.names=s,n},_add_id:function(e,t){var i,n=this.xfield.type;"date"!=n&&"datetime"!=n||(i=Sao.common.date_format(this.view.screen.context.date_format),e="datetime"==n?Sao.common.format_datetime(i+" %X",e):Sao.common.format_date(i,e)),Sao.View.Graph.Pie._super._add_id.call(this,e,t)},_action_key:function(e){return e.id}}),Sao.View.GraphXMLViewParser.WIDGETS={hbar:Sao.View.Graph.HorizontalBar,line:Sao.View.Graph.Line,pie:Sao.View.Graph.Pie,vbar:Sao.View.Graph.VerticalBar}}(),function(){"use strict";Sao.View.CalendarXMLViewParser=Sao.class_(Sao.View.XMLViewParser,{_parse_calendar:function(e,t){[].forEach.call(e.childNodes,function(e){this.parse(e)}.bind(this));var i="datetime"==this.view.screen.model.fields[t.dtstart].description.type?"agendaWeek":"basicWeek",n="datetime"==this.view.screen.model.fields[t.dtstart].description.type?"agendaDay":"basicDay",e="month";"week"==t.mode&&(e=i),"day"==t.mode&&(e=n);i={left:"today prev,next",center:"title",right:"month,"+i+","+n};Sao.i18n.rtl&&((n=jQuery.extend({},i)).left=i.right,n.right=i.left,i=n),this.view.el.fullCalendar({defaultView:e,header:i,timeFormat:"H:mm",events:this.view.get_events.bind(this.view),contentHeight:"auto",locale:Sao.i18n.getlang().slice(0,2),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"),day:Sao.i18n.gettext("Day")},eventRender:this.view.event_render.bind(this.view),eventResize:this.view.event_resize.bind(this.view),eventDrop:this.view.event_drop.bind(this.view),eventClick:this.view.event_click.bind(this.view),dayClick:this.view.day_click.bind(this.view)}),void 0!==t.height&&this.view.el.css("min-height",t.height+"px"),void 0!==t.width&&this.view.el.css("min-width",t.width+"px")},_parse_field:function(e,t){this.view.fields.push(t.name)}}),Sao.View.Calendar=Sao.class_(Sao.View,{editable:!1,view_type:"calendar",xml_parser:Sao.View.CalendarXMLViewParser,init:function(e,t,i){this.processing=!0,this.fields=[],this.el=jQuery("<div/>",{class:"calendar"}),Sao.View.Calendar._super.init.call(this,e,t,i)},get_colors:function(e){var t={};return t.text_color=Sao.config.calendar_colors[0],this.attributes.color&&(t.text_color=e.field_get(this.attributes.color)),t.background_color=Sao.config.calendar_colors[1],this.attributes.background_color&&(t.background_color=e.field_get(this.attributes.background_color)),t},display:function(){this.el.fullCalendar("render"),this.processing||this.el.fullCalendar("refetchEvents")},insert_event:function(e){var t=this.screen.model.fields[this.fields[0]].get_client(e),i=e.model.fields[this.attributes.dtstart],n=i.get_client(e);i.set_state(e);var o=null;this.attributes.dtend&&(o=(s=e.model.fields[this.attributes.dtend]).get_client(e),s.set_state(e));for(var s,r=Sao.common.MODELACCESS.get(this.screen.model_name),a=parseInt(this.attributes.editable||1,10)&&r.write,c=[],l=1;l<this.fields.length;l++)c.push(this.screen.model.fields[this.fields[l]].get_client(e));c=c.join("\n"),n&&((r=n.isDate&&(!o||o.isDate))&&o&&!o.isSame(n)&&"calendar"==this.screen.current_view.view_type&&o.add(1,"day"),o&&o<n||(s={title:t,start:n,end:o,allDay:r,editable:a&&!i.get_state_attrs(e).readonly&&(!o||!s.get_state_attrs(e).readonly),color:(s=this.get_colors(e)).background_color,textColor:s.text_color,record:e,description:c},this.events.push(s)))},get_events:function(e,t,i,n){this.processing=!0,this.start=Sao.DateTime(e.utc()),this.end=Sao.DateTime(t.utc());e=jQuery.when();this.screen.current_view&&"form"!=this.screen.current_view.view_type&&(t=this.screen.screen_container.get_text(),e=this.screen.search_filter(t)),this.events=[];var o=[];e.then(function(){return this.group.forEach(function(t){var i=[];this.fields.forEach(function(e){i.push(t.load(e))});var e=jQuery.when.apply(jQuery,i).then(function(){this.insert_event(t)}.bind(this));o.push(e)}.bind(this)),jQuery.when.apply(jQuery,o).then(function(){n(this.events)}.bind(this)).always(function(){this.processing=!1}.bind(this))}.bind(this))},event_click:function(e,t,i){this.clicked_event||(this.clicked_event=!0,this.screen.current_record=e.record,this.screen.switch_view().always(function(){this.clicked_event=!1}.bind(this)))},event_drop:function(e,t,i,n,o,s){var r=this.attributes.dtstart,a=this.attributes.dtend,c=e.record,l=(c.group,c.field_get(r)),d=l;a&&(d=c.field_get(a));var h=e.start,e=e.end;e!=l&&e||(e=h),l.isDateTime?(e=Sao.DateTime(e.format()).utc(),h=Sao.DateTime(h.format()).utc()):l.isSame(d)||(e.subtract(1,"day"),this.el.fullCalendar("refetchEvents")),l<=h?(a&&c.field_set_client(a,e),c.field_set_client(r,h)):(c.field_set_client(r,h),a&&c.field_set_client(a,e)),c.save()},event_resize:function(e,t,i,n,o,s){var r=this.attributes.dtend,a=e.record,c=(a.group,a.field_get(r)),e=e.end;!0===c.isDateTime?e=Sao.DateTime(e.format()).utc():(e.subtract(1,"day"),this.el.fullCalendar("refetchEvents")),a.field_set_client(r,e=e==c||!e?c:e),a.save()},event_render:function(e,t,i){this.screen.model.fields.date&&"calendar"==this.screen.view_name&&t.find(".fc-time").remove(),t.find(".fc-content").append(jQuery("<div/>",{class:"fc-description"}).text(e.description)),t.css("white-space","pre").css("overflow","hidden").css("text-overflow","ellipsis").attr("title",[e.title,e.description].filter(function(e){return e}).join("\n"))},day_click:function(e,t,i){var n=Sao.common.MODELACCESS.get(this.screen.model_name);parseInt(this.attributes.editable||1,10)&&n.create&&(this.el.fullCalendar("gotoDate",e),this.screen.current_record=null,this.screen.new_())},current_domain:function(){if(!this.start&&!this.end)return[["id","=",-1]];var e=Sao.DateTime(this.start),t=Sao.DateTime(this.end),i=this.attributes.dtstart,n=this.attributes.dtend||i;return["OR",["AND",[i,">=",e],[i,"<",t]],["AND",[n,">=",e],[n,"<",t]],["AND",[i,"<",e],[n,">",t]]]},get_displayed_period:function(){var e=[];return this.start&&this.end&&e.push(this.start,this.end),e},set_default_date:function(e,t){var i=this.attributes.dtstart,n=e.model.fields[i];n instanceof Sao.field.DateTime?t=Sao.DateTime(t):n instanceof Sao.field.Date&&(t=Sao.Date(t)),n.set(e,t),e.on_change([i]),e.on_change_with([i])},get_selected_date:function(){return this.el.fullCalendar("getDate")}})}(),function(){"use strict";Sao.View.ListGroupViewForm=Sao.class_(Sao.View.Form,{editable:!0,get record(){return this._record},set record(e){this._record=e}}),Sao.View.ListForm=Sao.class_(Sao.View,{view_type:"list-form",init:function(e,t,i){Sao.View.ListForm._super.init.call(this,e,t,i),this.editable=!0,this.form_xml=i,this.el=jQuery("<ul/>",{class:"list-group list-form"}),this._view_forms=[]},display:function(){for(var e,t,i,n,o=[],s=[],r=0;r<this.group.length;r++)e=this.group[r],(t=this._view_forms[r])?(i=t.el.parent(),t.record=e):(i=this._create_form(e),s.push(i),t=this._view_forms[this._view_forms.length-1]),~this.group.record_deleted.indexOf(e)||~this.group.record_removed.indexOf(e)?i.addClass("disabled"):i.removeClass("disabled"),this.record===e?i.addClass("list-group-item-selected"):i.removeClass("list-group-item-selected"),o.push(t.display());return 0<s.length&&this.el.append(s),n=this._view_forms.splice(this.group.length),jQuery(n.map(function(e){return e.el[0]})).parent().detach(),jQuery.when.apply(jQuery,o)},_create_form:function(e){var t=new Sao.View.ListGroupViewForm(this.view_id,this.screen,this.form_xml);t.record=e,this._view_forms.push(t);e=jQuery("<li/>",{class:"list-group-item list-form-item"});return e.append(t.el),e.click(this._view_forms.length-1,this._select_row.bind(this)),e},get selected_records(){for(var e,t=[],i=0;i<this._view_forms.length;i++)(e=this._view_forms[i]).el.parent().hasClass("list-group-item-selected")&&t.push(e.record);return t},set_cursor:function(e,t){e&&this.el.animate({scrollTop:this.el[0].scrollHeight})},select_records:function(e,t){var i;jQuery(this._view_forms.map(function(e){return e.el[0]})).parent().removeClass("list-group-item-selected"),null===e&&null===t||((t=t||0)<(e=e||0)&&(i=e,e=t,t=i),this._view_forms.slice(e,t+1).forEach(function(e){e.el.parent().addClass("list-group-item-selected")}))},_select_row:function(e){var t,i=e.data,n=this._view_forms[i];if(e.shiftKey){for(var o=0;o<this._view_forms.length;o++)if(this._view_forms[o].record===this.record){t=this._view_forms[o];break}this.select_records(o,i)}else e.ctrlKey||e.metaKey||this.select_records(null,null),this.record=n.record,n.el.parent().toggleClass("list-group-item-selected");t&&(this.record=t.record)}})}(),function(){"use strict";Sao.Action={report_blob_url:void 0},Sao.Action.exec_action=function(e,n,t){t=t?jQuery.extend({},t):{};var i=Sao.Session.current_session;function o(t,e){if(!n.model||!n.ids)return jQuery.when(t);var i=n.ids.filter(function(e){return 0<=e}).slice(0,5);return i.length?Sao.rpc({method:"model."+n.model+".read",params:[i,["rec_name"],e]},Sao.Session.current_session).then(function(e){e=e.map(function(e){return e.rec_name}).join(Sao.i18n.gettext(", "));return n.ids.length>i.length&&(e+=Sao.i18n.gettext(",...")),Sao.i18n.gettext("%1 (%2)",t,e)}):jQuery.when(t)}n=void 0===n?{}:jQuery.extend({},n),delete t.active_id,delete t.active_ids,delete t.active_model,n.action_id=e.id;var s={};switch(e.type){case"ir.action.act_window":s.view_ids=[],s.mode=null,jQuery.isEmptyObject(e.views)?jQuery.isEmptyObject(e.view_id)||(s.view_ids=[e.view_id[0]]):(s.view_ids=[],s.mode=[],e.views.forEach(function(e){s.view_ids.push(e[0]),s.mode.push(e[1])})),void 0===e.pyson_domain&&(e.pyson_domain="[]");var r={active_model:n.model||null,active_id:n.id||null,active_ids:n.ids||[]};(r=jQuery.extend(r,i.context))._user=i.user_id;var a=new Sao.PYSON.Decoder(r);return s.context=jQuery.extend({},t,a.decode(e.pyson_context||"{}")),(r=jQuery.extend(r,s.context)).context=r,a=new Sao.PYSON.Decoder(r),s.domain=a.decode(e.pyson_domain),s.order=a.decode(e.pyson_order),s.search_value=a.decode(e.pyson_search_value||"[]"),s.tab_domain=[],e.domains.forEach(function(e,t){s.tab_domain.push([e[0],a.decode(e[1]),e[2]])}),r=jQuery.when(e.name),s.model=e.res_model||n.res_model,s.res_id=e.res_id||n.res_id,s.context_model=e.context_model,s.context_domain=e.context_domain,null!==e.limit?s.limit=e.limit:s.limit=Sao.config.limit,s.icon=e["icon.rec_name"]||"",void(r=e.keyword?o(e.name,s.context):r).then(function(e){s.name=e,Sao.Tab.create(s)});case"ir.action.wizard":return s.action=e.wiz_name,s.data=n,s.context=t,s.window=e.window,r=jQuery.when(e.name),void(r="form_action"===(e.keyword||"form_action")?o(e.name,t):r).done(function(e){s.name=e,Sao.Wizard.create(s)});case"ir.action.report":return s.name=e.report_name,s.data=n,s.direct_print=e.direct_print,s.context=t,void Sao.Action.exec_report(s);case"ir.action.url":return void window.open(e.url,"_blank","noreferrer,noopener")}},Sao.Action.exec_keyword=function(e,o,s,r,a){void 0===r&&(r=!0),void 0===a&&(a=!1);var t=o.id,t={method:"model.ir.action.keyword.get_keyword",params:[e,[o.model,t],{}]};return Sao.rpc(t,Sao.Session.current_session).pipe(function(e){var t,i={};for(t in e){var n=e[t];i[n.name.split(" / ").pop()]=n}return Sao.common.selection(Sao.i18n.gettext("Select your action"),i,a).then(function(e){Sao.Action.exec_action(e,o,s)},function(){jQuery.isEmptyObject(i)&&r&&alert(Sao.i18n.gettext("No action defined."))})})},Sao.Action.exec_report=function(e){e.context||(e.context={});var t=jQuery.extend({},e.data),i=jQuery.extend({},Sao.Session.current_session.context);jQuery.extend(i,e.context),i.direct_print=e.direct_print,Sao.rpc({method:"report."+e.name+".execute",params:[t.ids||[],t,i]},Sao.Session.current_session).done(function(e){var t=e[0],i=e[1],e=(e[2],e[3]);Sao.common.download_file(i,e+"."+t)})},Sao.Action.execute=function(e,t,i,n){"number"==typeof e&&(e=Sao.rpc({method:"model.ir.action.get_action_value",params:[e,i]},Sao.Session.current_session,!1)),n&&(e.keyword||(e.keyword={"ir.action.report":"form_report","ir.action.wizard":"form_action","ir.action.act_window":"form_relate"}[e.type])),Sao.Action.exec_action(e,t,i)},Sao.Action.evaluate=function(e,t,i){var n={};return"pyson_email"in(e=jQuery.extend({},e))&&(n=i.expr_eval(e.pyson_email),jQuery.isEmptyObject(n)&&(n={})),"subject"in n||(n.subject=e.name.replace(/_/g,"")),e.email=n,e}}(),function(){"use strict";var n=["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"];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 stretched-link","aria-label":Sao.i18n.gettext("Close")}).append(jQuery("<span/>",{"aria-hidden":!0}).append("×")).click(function(){this.text.text(""),this.el.hide()}.bind(this))).append(this.text),this.el.hide()},message:function(e,t){e?(this.el.removeClass("alert-success alert-info alert-warning alert-danger"),this.el.addClass("alert-"+(t||"info")),this.text.text(e),this.el.show()):(this.text.text(""),this.el.hide())}}),Sao.Window.Form=Sao.class_(Object,{init:function(n,e,t){t=t||{},this.screen=n,this.callback=e,this.many=t.many||0,this.domain=t.domain||null,this.context=t.context||null,this.save_current=t.save_current;var i=jQuery.when(t.title||"").then(function(e){n.breadcrumb.length?(i=jQuery.extend([],n.breadcrumb),e&&i.push(e),this.title=i.slice(-3,-1).map(function(e){return Sao.common.ellipsize(e,30)}).concat(i.slice(-1)).join(" › "),3<i.length&&(this.title="... › "+this.title)):(e=e||Sao.common.MODELNAME.get(this.screen.model_name),this.title=e);var t,i=this.screen.context._datetime;return i&&Sao.common.MODELHISTORY.contains(this.screen.model_name)?(t=Sao.common.date_format(this.screen.context.date_format),i=" @ "+Sao.common.format_datetime(t+" %H:%M:%S.%f",i),t=Sao.common.ellipsize(this.title,80-i.length)+i,e=this.title+i):t=Sao.common.ellipsize(this.title,80),t}.bind(this));this.prev_view=n.current_view,this.screen.screen_container.alternate_view=!0,this.info_bar=new Sao.Window.InfoBar;var o=t.view_type||"form";this.switch_prm=this.screen.switch_view(o).done(function(){t.new_&&this.screen.current_view.view_type==o&&this.screen.new_(void 0,t.rec_name)}.bind(this));var s=new Sao.Dialog("","window-form","lg",!1);this.el=s.modal,this.el.on("keydown",function(e){e.which==Sao.common.ESC_KEYCODE&&(e.preventDefault(),this.response("RESPONSE_CANCEL"))}.bind(this));var r,a,c,e=this.screen.attributes.readonly||this.screen.group.readonly;this._initial_value=null,"form"==o&&(t.new_?r=Sao.i18n.gettext("Delete"):(r=Sao.i18n.gettext("Cancel"),c=this.screen.current_record,this._initial_value=c.get_on_change_value(),c.group.parent&&c.model.fields[c.group.parent_name]&&(a=c.model.fields[c.group.parent_name],this._initial_value[c.group.parent_name]=a.get_eval(c))),s.footer.append(jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(r).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)))),t.new_&&this.many&&s.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?s.footer.append(jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("Save"))):s.footer.append(jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK"))),s.content.submit(function(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this)),"tree"==o&&(a=jQuery("<div/>",{class:"window-form-toolbar"}).appendTo(s.body),c=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(a),this.wid_text=jQuery("<input/>",{type:"input"}).appendTo(a),this.wid_text.hide(),r=jQuery("<div/>",{class:"input-group-btn"}).appendTo(c),a=Sao.common.MODELACCESS.get(this.screen.model_name),c=function(i){return function(e){var t=jQuery(e.target);t.prop("disabled",!0),(i(e)||jQuery.when()).always(function(){t.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(r),this.but_switch.click(c(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(r),this.but_previous.click(c(this.previous.bind(this))),this.label=jQuery("<span/>",{class:"badge"}).appendTo(jQuery("<span/>",{class:"btn hidden-xs"}).appendTo(r)),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(r),this.but_next.click(c(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(r),this.but_add.click(c(this.add.bind(this))),this.but_add.prop("disabled",!a.read||e),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(r),this.but_remove.click(c(this.remove.bind(this))),this.but_remove.prop("disabled",!a.read||e)),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(r),this.but_new.click(c(this.new_.bind(this))),this.but_new.prop("disabled",!a.create||e),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(r),this.but_del.click(c(this.delete_.bind(this))),this.but_del.prop("disabled",!a.delete||e),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(r),this.but_undel.click(c(this.undelete.bind(this))),this.but_undel.prop("disabled",!a.delete||e),this.screen.message_callback=this.record_label.bind(this));var l=jQuery("<div/>").appendTo(s.body);s.body.append(this.info_bar.el),this.switch_prm.done(function(){this.screen.current_view.view_type!=o?this.destroy():(i.done(s.add_title.bind(s)),l.append(this.screen.screen_container.alternate_viewport),this.el.modal("show"))}.bind(this)),this.el.on("shown.bs.modal",function(e){this.screen.display().done(function(){this.screen.set_cursor()}.bind(this))}.bind(this)),this.el.on("hidden.bs.modal",function(e){jQuery(this).remove()})},record_label:function(e){var t="_",i=Sao.common.MODELACCESS.get(this.screen.model_name),n=this.screen.deletable,o=this.screen.group.readonly||this.screen.readonly;1<=e[0]?(t=e[0],this.domain&&this.but_remove.prop("disabled",!1),this.but_next.prop("disabled",e[0]>=e[1]),this.but_previous.prop("disabled",e[0]<=1),i.delete&&!o&&n&&(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));e=t+"/"+e[1];this.label.text(e).attr("title",e)},add:function(){var e=jQuery.extend([],this.domain),t=this.screen.model_name,i=this.wid_text.val(),n=function(e){var t=jQuery.when();if(!jQuery.isEmptyObject(e)){for(var i=[],n=0,o=e.length;n<o;n++)i.push(e[n][0]);this.screen.group.load(i,!0),t=this.screen.display()}t.done(function(){this.screen.set_cursor()}.bind(this)),this.entry.val("")}.bind(this),o=new Sao.common.DomainParser;new Sao.Window.Search(t,n,{sel_multi:!0,context:this.context,domain:e,search_filter:o.quote(i)})},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(r){this.screen.current_view.set_value();var e,a,t,i=this.screen.group.readonly;~["RESPONSE_OK","RESPONSE_ACCEPT"].indexOf(r)&&!i&&this.screen.current_record?this.screen.current_record.validate().then(function(e){return e&&this.screen.attributes.pre_validate?this.screen.current_record.pre_validate():e}.bind(this)).then(function(e){var t=jQuery.Deferred();if(e&&this.save_current)this.screen.save_current().then(t.resolve,t.reject);else if(e&&"form"==this.screen.current_view.view_type){var i,n=this.screen.current_view,o=[];for(i in n.widgets){var s=n.widgets[i];s.screen&&s.screen.attributes.pre_validate&&((s=s.screen.current_record)&&o.push(s.pre_validate()))}jQuery.when.apply(jQuery,o).then(t.resolve,t.reject)}else e?(this.info_bar.message(),t.resolve()):(this.info_bar.message(this.screen.invalid_message(),"danger"),t.reject());t.fail(function(){this.screen.display().done(function(){this.screen.set_cursor()}.bind(this))}.bind(this)),t.done(function(){"RESPONSE_ACCEPT"==r?(this.screen.new_(),this.screen.current_view.display().done(function(){this.screen.set_cursor()}.bind(this)),--this.many,0===this.many&&this.but_new.prop("disabled",!0)):(a=!0,this.callback(a),this.destroy())}.bind(this))}.bind(this)):(e=null,"RESPONSE_CANCEL"==r&&!i&&this.screen.current_record?(a=!1,i=(t=this.screen.current_record)._changed.id,t.id<0||this.save_current?e=this.screen.cancel_current(this._initial_value):t.has_changed()&&(t.cancel(),e=t.reload().then(function(){this.screen.display()}.bind(this))),i&&(t._changed.id=i)):a="RESPONSE_CANCEL"!=r,(e||jQuery.when()).then(function(){this.callback(a),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(e,t){this.resource=e.model.name+","+e.id,this.attachment_callback=t;var t=jQuery.extend({},e.get_context()),i=new Sao.Screen("ir.attachment",{domain:[["resource","=",this.resource]],mode:["tree","form"],context:t}),e=e.rec_name().then(function(e){return Sao.i18n.gettext("Attachments (%1)",e)});Sao.Window.Attachment._super.init.call(this,i,this.callback,{view_type:"tree",title:e}),this.switch_prm=this.switch_prm.then(function(){return i.search_filter()})},callback:function(e){var t=jQuery.when();e&&(t=this.screen.save_current()),this.attachment_callback&&t.always(this.attachment_callback.bind(this))},add_data:function(i,n){var o=this.screen;this.switch_prm.then(function(){o.new_().then(function(e){var t=e.model.fields.data;e.field_set_client(t.description.filename,n),e.field_set_client("data",i),o.display()})})},add_uri:function(t){var i=this.screen;this.switch_prm.then(function(){i.current_record=null,i.switch_view("form").then(function(){i.new_().then(function(e){e.field_set_client("link",t),e.field_set_client("type","link"),i.display()})})})},add_text:function(t){var i=this.screen;this.switch_prm.then(function(){i.current_record=null,i.switch_view("form").then(function(){i.new_().then(function(e){e.field_set_client("description",t),i.display()})})})}}),Sao.Window.Attachment.get_attachments=function(a){var c,e;e=a&&0<=a.id?(c=a.get_context(),Sao.rpc({method:"model.ir.attachment.search_read",params:[[["resource","=",a.model.name+","+a.id]],0,20,null,["rec_name","name","type","link"],c]},a.model.session)):jQuery.when([]);return e.then(function(e){return e.map(function(e){var t=e.rec_name;if("link"==e.type)return[t,e.link];var i,n,o,s,r=Sao.Window.Attachment["open_"+e.type];return[t,(i=r,n=e,o=c,s=a.model.session,function(){return i(n,o,s)})]})})},Sao.Window.Attachment.open_data=function(t,e,i){Sao.rpc({method:"model.ir.attachment.read",params:[[t.id],["data"],e]},i).then(function(e){Sao.common.download_file(e[0].data,t.name)})},Sao.Window.Note=Sao.class_(Sao.Window.Form,{init:function(e,t){this.resource=e.model.name+","+e.id,this.note_callback=t;var t=jQuery.extend({},e.get_context()),i=new Sao.Screen("ir.note",{domain:[["resource","=",this.resource]],mode:["tree","form"],context:t}),e=e.rec_name().then(function(e){return Sao.i18n.gettext("Notes (%1)",e)});Sao.Window.Note._super.init.call(this,i,this.callback,{view_type:"tree",title:e}),this.switch_prm=this.switch_prm.then(function(){return i.search_filter()})},callback:function(e){var t,i=jQuery.when();e&&(t=this.screen.group.model.fields.unread,this.screen.group.forEach(function(e){(e.get_loaded()||e.id<0)&&(e._changed.unread||t.set_client(e,!1))}.bind(this)),i=this.screen.save_current()),this.note_callback&&i.always(this.note_callback.bind(this))}}),Sao.Window.Search=Sao.class_(Object,{init:function(e,t,i){var n=(i=i||{}).views_preload||{};this.model_name=e,this.domain=i.domain||[],this.context=i.context||{},this.order=i.order||null,this.view_ids=i.view_ids,this.views_preload=n,this.sel_multi=i.sel_multi,this.callback=t;t=(t=i.title)||Sao.common.MODELNAME.get(e);this.title=t,this.exclude_field=i.exclude_field||null;var o=new Sao.Dialog(Sao.i18n.gettext("Search %1",this.title),"","lg");this.el=o.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(o.footer),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("Find")).click(function(){this.response("RESPONSE_APPLY")}.bind(this)).appendTo(o.footer),i.new_&&Sao.common.MODELACCESS.get(e).create&&jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("New")).click(function(){this.response("RESPONSE_ACCEPT")}.bind(this)).appendTo(o.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(o.footer),o.content.submit(function(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this)),this.screen=new Sao.Screen(e,{mode:["tree"],context:this.context,domain:this.domain,order:this.order,view_ids:i.view_ids,views_preload:n,row_activate:this.activate.bind(this),readonly:!0,breadcrumb:[this.title]}),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,o.body.append(this.screen.screen_container.el),this.el.modal("show"),this.screen.display(),void 0!==i.search_filter&&this.screen.search_filter(i.search_filter)}.bind(this))}.bind(this)),this.el.on("hidden.bs.modal",function(e){jQuery(this).remove()})},activate:function(){this.response("RESPONSE_OK")},response:function(e){var t,i,n,o=[];if("RESPONSE_OK"==e)t=this.screen.current_view.selected_records;else{if("RESPONSE_APPLY"==e)return void this.screen.search_filter();if("RESPONSE_ACCEPT"==e){e=jQuery.extend([],this.view_ids);jQuery.isEmptyObject(e)||e.shift();var s=new Sao.Screen(this.model_name,{domain:this.domain,context:this.context,order:this.order,mode:["form"],view_ids:e,views_preload:this.views_preload,exclude_field:this.exclude_field});return this.el.modal("hide"),void new Sao.Window.Form(s,function(e){e?(e=s.current_record,this.callback([[e.id,e._values.rec_name||""]])):this.callback(null)}.bind(this),{new_:!0,save_current:!0})}}if(t)for(i in t)n=t[i],o.push([n.id,n._values.rec_name||""]);this.callback(o),this.el.modal("hide")}}),Sao.Window.Preferences=Sao.class_(Object,{init:function(e){this.callback=e;var t=new Sao.Dialog("Preferences","","lg");this.el=t.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(t.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(t.footer),t.content.submit(function(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this)),this.screen=new Sao.Screen("res.user",{mode:[]}),this.screen.attributes.readonly=!1,this.screen.group.readonly=!1,this.screen.group.skip_model_access=!0;var i=function(e){this.screen.current_record.cancel(),this.screen.current_record.set(e),this.screen.current_record.id=this.screen.model.session.user_id,this.screen.current_record.validate(null,!0).then(function(){this.screen.display(!0)}.bind(this)),t.body.append(this.screen.screen_container.el),this.el.modal("show")};this.el.on("hidden.bs.modal",function(e){jQuery(this).remove()}),this.screen.model.execute("get_preferences_fields_view",[],{}).then(function(e){this.screen.add_view(e),this.screen.switch_view().done(function(){this.screen.new_(!1),this.screen.model.execute("get_preferences",[!1],{}).then(i.bind(this),this.destroy)}.bind(this))}.bind(this),this.destroy)},response:function(e){var t=function(){this.destroy(),this.callback()}.bind(this),i=jQuery.when();(i="RESPONSE_OK"==e?this.screen.current_record.validate().then(function(e){if(e){e=jQuery.extend({},this.screen.get());return this.screen.model.execute("set_preferences",[e],{})}}.bind(this)):i).done(t)},destroy:function(){this.el.modal("hide")}}),Sao.Window.Revision=Sao.class_(Object,{init:function(e,t){this.callback=t;t=new Sao.Dialog(Sao.i18n.gettext("Revision"),"","lg");this.el=t.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(t.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(t.footer),t.content.submit(function(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this));t=jQuery("<div/>",{class:"form-group"}).appendTo(t.body);jQuery("<label/>",{for:"revision",text:"Revision"}).appendTo(t),this.select=jQuery("<select/>",{class:"form-control",id:"revision",placeholder:Sao.i18n.gettext("Revision")}).appendTo(t);var i=Sao.common.date_format();this.select.append(jQuery("<option/>",{value:null,text:""})),e.forEach(function(e){var t=e[2];e=e[0],this.select.append(jQuery("<option/>",{value:e.valueOf(),text:Sao.common.format_datetime(i+" %H:%M:%S.%f",e)+" "+t}))}.bind(this)),this.el.modal("show"),this.el.on("hidden.bs.modal",function(e){jQuery(this).remove()})},response:function(e){var t=null;"RESPONSE_OK"==e&&(t=(t=this.select.val())&&Sao.DateTime(parseInt(t,10))),this.el.modal("hide"),this.callback(t)}}),Sao.Window.CSV=Sao.class_(Object,{init:function(e){this.dialog=new Sao.Dialog(e,"csv","lg"),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(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this)).appendTo(this.dialog.footer);var t=jQuery("<div/>",{class:"row"}).appendTo(this.dialog.body),e=jQuery("<div/>",{class:"col-md-5"}).append(jQuery("<div/>",{class:"panel panel-default"}).append(jQuery("<div/>",{class:"panel-heading"}).append(jQuery("<h3/>",{class:"panel-title",text:Sao.i18n.gettext("All Fields")})))).appendTo(t);this.fields_all=jQuery("<ul/>",{class:"list-unstyled column-fields panel-body"}).css("cursor","pointer").appendTo(e.find(".panel")),this.model_populate(this._get_fields(this.screen.model_name)),this.view_populate(this.fields_model,this.fields_all),this.column_buttons=jQuery("<div/>",{class:"col-md-2"}).appendTo(t);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(e,t){this.sig_sel_add(t)}.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);e=jQuery("<div/>",{class:"col-md-5"}).append(jQuery("<div/>",{class:"panel panel-default"}).append(jQuery("<div/>",{class:"panel-heading"}).append(jQuery("<h3/>",{class:"panel-title",text:Sao.i18n.gettext("Fields Selected")})))).appendTo(t);this.fields_selected=jQuery("<ul/>",{class:"list-unstyled column-fields panel-body"}).css("cursor","pointer").appendTo(e.find(".panel")),this.chooser_form=jQuery("<div/>",{class:"form-inline"}).appendTo(this.dialog.body);t=jQuery("<div/>",{}).appendTo(this.dialog.body),jQuery("<label/>",{text:Sao.i18n.gettext("CSV Parameters")}).append(jQuery("<span/>",{class:"caret"}).html(" ")).css("cursor","pointer").on("click",function(){this.expander_csv.collapse("toggle")}.bind(this)).appendTo(t);this.expander_csv=jQuery("<div/>",{id:"expander_csv",class:"collapse form-inline"}).appendTo(t);e=jQuery("<label/>",{text:Sao.i18n.gettext("Delimiter:"),class:"control-label",for:"input-delimiter"}),t=",";navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(t=";"),this.el_csv_delimiter=jQuery("<input/>",{type:"text",class:"form-control",id:"input-delimiter",size:"1",maxlength:"1",value:t}),jQuery("<div/>",{class:"form-group"}).append(e).append(this.el_csv_delimiter).appendTo(this.expander_csv),this.expander_csv.append(" ");e=jQuery("<label/>",{text:Sao.i18n.gettext("Quote Char:"),class:"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(e).append(this.el_csv_quotechar).appendTo(this.expander_csv),this.expander_csv.append(" "),this.el.modal("show"),this.el.on("hidden.bs.modal",function(){jQuery(this).remove()})},_get_fields:function(e){return Sao.rpc({method:"model."+e+".fields_get"},this.session,!1)},on_row_expanded:function(e){var t=jQuery("<ul/>").css("list-style","none").insertAfter(e.view);this.children_expand(e),this.view_populate(e.children,t)},destroy:function(){this.el.modal("hide")}}),Sao.Window.Import=Sao.class_(Sao.Window.CSV,{init:function(e,t){this.name=e,this.screen=t,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",e)),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);t=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(t).append(jQuery("<div/>",{class:"col-sm-6"}).append(this.file_input)).appendTo(this.chooser_form);e=jQuery("<label/>",{text:Sao.i18n.gettext("Encoding:"),class:"control-label",for:"input-encoding"});this.el_csv_encoding=jQuery("<select/>",{class:"form-control",id:"input-encoding"});for(var i=0;i<n.length;i++)jQuery("<option/>",{val:n[i]}).append(n[i]).appendTo(this.el_csv_encoding);t="utf-8";navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(t="cp1252"),this.el_csv_encoding.children('option[value="'+t+'"]').attr("selected","selected"),jQuery("<div/>",{class:"form-group"}).append(e).append(this.el_csv_encoding).appendTo(this.expander_csv),this.expander_csv.append(" ");e=jQuery("<label/>",{text:Sao.i18n.gettext("Lines to Skip:"),class:"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(e).append(this.el_csv_skip).appendTo(this.expander_csv),this.expander_csv.append(" "),Sortable.create(this.fields_selected.get(0),{handle:".draggable-handle",ghostClass:"dragged-row"})},sig_sel_add:function(e){var t=(e=jQuery(e)).attr("field"),i=jQuery("<li/>",{field:t,class:"draggable-handle"}).text(e.attr("name")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-drag")).click(function(e){e.ctrlKey||e.metaKey?i.toggleClass("bg-primary"):jQuery(e.target).addClass("bg-primary").siblings().removeClass("bg-primary")}).appendTo(this.fields_selected)},view_populate:function(s,t){Object.keys(s).sort(function(e,t){return s[t].string<s[e].string?-1:1}).reverse().forEach(function(i){var e=s[i].string||i,n=jQuery("<li/>",{field:s[i].field,name:s[i].name}).text(e).click(function(e){e.ctrlKey||e.metaKey?n.toggleClass("bg-primary"):(this.fields_all.find("li").removeClass("bg-primary"),n.addClass("bg-primary"))}.bind(this)).appendTo(t);s[i].view=n;var o=Sao.common.ICONFACTORY.get_icon_img("tryton-arrow-right").data("expanded",!1).click(function(e){var t;e.stopPropagation();e=o.data("expanded");o.data("expanded",!e),e?(t="tryton-arrow-right",n.next("ul").remove()):(t="tryton-arrow-down",this.on_row_expanded(s[i])),Sao.common.ICONFACTORY.get_icon_url(t).then(function(e){o.attr("src",e)})}.bind(this)).prependTo(n);o.css("visibility",s[i].relation?"visible":"hidden")}.bind(this))},model_populate:function(o,s,r,a){s=s||this.fields_model,r=r||"",a=a||"",Object.keys(o).forEach(function(e){var t,i,n;o[e].readonly&&"id"!=e||(t=o[e].string||e,t=a+t,i="one2many"==o[e].type?o[e].relation:null,n={name:t,field:r+e,relation:i,string:o[e].string},s[e]=n,this.fields[r+e]=n,this.fields_invert[t]=r+e,i&&(n.children={}))}.bind(this))},children_expand:function(e){jQuery.isEmptyObject(e.children)&&e.relation&&this.model_populate(this._get_fields(e.relation),e.children,e.field+"/",e.name+"/")},autodetect:function(){this.file_input.val()?(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(e,t,i,n){Sao.common.warning(Sao.i18n.gettext("An error occured in loading the file."))},complete:function(e){e.data[0].forEach(function(e){var t,i;e in this.fields_invert||e in this.fields||(t=this.fields_model,i=e.split("/").slice(0,-1),this._traverse(t,"",i,0)),this._auto_select(e)}.bind(this))}.bind(this)})):Sao.common.message.run(Sao.i18n.gettext("You must select an import file first."))},_auto_select:function(e){var t,i;if(e in this.fields_invert)i=this.fields_invert[t=e];else{if(!(e in this.fields))return void Sao.common.warning.run(Sao.i18n.gettext("Error processing the file at field %1.",e),Sao.i18n.gettext("Error"));t=this.fields[e].name,i=[e]}var n=jQuery("<li/>",{field:i}).text(t).click(function(){n.addClass("bg-primary").siblings().removeClass("bg-primary")}).appendTo(this.fields_selected)},_traverse:function(e,t,i,n){for(var o,s=Object.keys(e),r=0;r<s.length;r++)if((o=e[s[r]]).name==t+i[n]||o.field==t+i[n]){this.children_expand(o),t+=i[n]+"/",o.children&&this._traverse(o.children,t,i,++n);break}},response:function(e){var i;"RESPONSE_OK"==e?(i=[],this.fields_selected.children("li").each(function(e,t){i.push(t.getAttribute("field"))}),(e=this.file_input.val())?this.import_csv(e,i).then(function(){this.destroy()}.bind(this)):this.destroy()):this.destroy()},import_csv:function(e,t){var i=this.el_csv_skip.val(),n=this.el_csv_encoding.val(),o=jQuery.Deferred();return Papa.parse(this.file_input[0].files[0],{delimiter:this.el_csv_delimiter.val(),quoteChar:this.el_csv_quotechar.val(),encoding:n,error:function(e,t,i,n){Sao.common.warning.run(Sao.i18n.gettext("Error occured in loading the file")).always(o.reject)},complete:function(e){e=e.data.slice(i,e.data.length-1);Sao.rpc({method:"model."+this.screen.model_name+".import_data",params:[t,e,{}]},this.session).then(function(e){return Sao.common.message.run(Sao.i18n.ngettext("%1 record imported","%1 records imported",e))}).then(o.resolve,o.reject)}.bind(this)}),o.promise()}}),Sao.Window.Export=Sao.class_(Sao.Window.CSV,{init:function(e,t,i){this.name=e,this.screen=t,this.session=Sao.Session.current_session,Sao.Window.Export._super.init.call(this,Sao.i18n.gettext("CSV Export: %1",e));var n=this.screen.model.fields;i.forEach(function(e){var t=n[e].description.type;"selection"==t?this.sel_field(e+".translated"):"reference"==t?(this.sel_field(e+".translated"),this.sel_field(e+"/rec_name")):this.sel_field(e)}.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),this.button_url=jQuery("<a/>",{class:"btn btn-default btn-block",target:"_blank",rel:"noreferrer noopener"}).text(" "+Sao.i18n.gettext("URL Export")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-public")).appendTo(this.column_buttons),this.dialog.body.on("change click",this.set_url.bind(this)),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);i=jQuery("<div/>",{class:"panel panel-default"}).append(jQuery("<div/>",{class:"panel-heading"}).append(jQuery("<h3/>",{class:"panel-title",text:Sao.i18n.gettext("Predefined Exports")}))).appendTo(this.column_buttons);this.predef_exports_list=jQuery("<ul/>",{class:"list-unstyled predef-exports panel-body"}).css("cursor","pointer").appendTo(i),this.selected_records=jQuery("<select/>",{class:"form-control",id:"input-records"}).append(jQuery("<option/>",{val:!0,selected:!this.screen_is_tree}).text(Sao.i18n.gettext("Selected Records"))).append(jQuery("<option/>",{val:!1,selected:!!this.screen_is_tree}).text(Sao.i18n.gettext("Listed Records"))),this.ignore_search_limit=jQuery("<input/>",{type:"checkbox"}),this.selected_records.change(function(){this.ignore_search_limit.parents(".form-group").first().toggle(!JSON.parse(this.selected_records.val())&&!this.screen_is_tree)}.bind(this)),jQuery("<div/>",{class:"form-group"}).appendTo(this.chooser_form).append(jQuery("<label/>",{text:Sao.i18n.gettext("Export:"),class:"control-label",for:"input-records"})).append(this.selected_records),jQuery("<div/>",{class:"form-group"}).appendTo(this.chooser_form).append(jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>",{text:" "+Sao.i18n.gettext("Ignore search limit")}).prepend(this.ignore_search_limit))).hide(),this.el_csv_locale=jQuery("<input/>",{type:"checkbox",checked:"checked"}),jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>",{text:" "+Sao.i18n.gettext("Use locale format")}).prepend(this.el_csv_locale)).appendTo(this.expander_csv),this.expander_csv.append(" "),this.el_add_field_names=jQuery("<input/>",{type:"checkbox",checked:"checked"}),jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>",{text:" "+Sao.i18n.gettext("Add Field Names")}).prepend(this.el_add_field_names)).appendTo(this.expander_csv),this.expander_csv.append(" "),this.set_url(),Sortable.create(this.fields_selected.get(0),{handle:".draggable-handle",ghostClass:"dragged-row"})},get context(){return this.screen.context},get screen_is_tree(){return Boolean(this.screen.current_view&&"tree"==this.screen.current_view.view_type&&this.screen.current_view.children_field)},view_populate:function(s,t){Object.keys(s).sort(function(e,t){return s[t].string<s[e].string?-1:1}).reverse().forEach(function(i){var e=s[i].path,n=jQuery("<li/>",{path:e}).text(s[i].string).click(function(e){e.ctrlKey||e.metaKey?n.toggleClass("bg-primary"):(this.fields_all.find("li").removeClass("bg-primary"),n.addClass("bg-primary"))}.bind(this)).appendTo(t);s[i].view=n;var o=Sao.common.ICONFACTORY.get_icon_img("tryton-arrow-right").data("expanded",!1).click(function(e){var t;e.stopPropagation();e=o.data("expanded");o.data("expanded",!e),e?(t="tryton-arrow-right",n.next("ul").remove()):(t="tryton-arrow-down",this.on_row_expanded(s[i])),Sao.common.ICONFACTORY.get_icon_url(t).then(function(e){o.attr("src",e)})}.bind(this)).prependTo(n);o.css("visibility",s[i].children?"visible":"hidden")}.bind(this))},model_populate:function(o,s,r,a){s=s||this.fields_model,r=r||"",a=a||"",Object.keys(o).forEach(function(e){var t=o[e],i=t.string||e,n=[{name:e,field:t,string:i}];"selection"==t.type?n.push({name:e+".translated",field:t,string:Sao.i18n.gettext("%1 (string)",i)}):"reference"==t.type&&(n.push({name:e+".translated",field:t,string:Sao.i18n.gettext("%1 (model name)",i)}),n.push({name:e+"/rec_name",field:t,string:Sao.i18n.gettext("%1 (record name)",i)})),n.forEach(function(e){var t=r+e.name,i=a+e.string,i={path:t,string:e.string,long_string:i,relation:e.field.relation};s[e.name]=i,this.fields[t]=i,-1==e.name.indexOf(".")&&e.field.relation&&(i.children={})}.bind(this))}.bind(this))},children_expand:function(e){jQuery.isEmptyObject(e.children)&&e.relation&&this.model_populate(this._get_fields(e.relation),e.children,e.path+"/",e.long_string+"/")},sig_sel_add:function(e){e=(e=jQuery(e)).attr("path");this.sel_field(e)},fill_predefwin:function(){Sao.rpc({method:"model.ir.export.search_read",params:[[["resource","=",this.screen.model_name]],0,null,null,["name","export_fields.name"],{}]},this.session).done(function(e){e.forEach(function(e){this.predef_exports[e.id]=e["export_fields."].map(function(e){return e.name}),this.add_to_predef(e.id,e.name),this.predef_exports_list.children("li").first().focus()}.bind(this))}.bind(this))},add_to_predef:function(e,t){var i=jQuery("<li/>",{text:t,export_id:e,tabindex:0}).on("keypress",function(e){e=e.keyCode||e.which;13!=e&&32!=e||i.click()}).click(function(e){i.toggleClass("bg-primary").siblings().removeClass("bg-primary"),i.hasClass("bg-primary")&&this.sel_predef(i.attr("export_id"))}.bind(this));this.predef_exports_list.append(i)},addreplace_predef:function(){for(var i,e,n,o=[],t=this.fields_selected.children("li"),s=0;s<t.length;s++)o.push(t[s].getAttribute("path"));0!==o.length&&(e=function(t){var e=i?Sao.rpc({method:"model.ir.export.update",params:[[i],o,this.context]},this.session).then(function(){return i}):Sao.rpc({method:"model.ir.export.create",params:[[{name:t,resource:this.screen.model_name,export_fields:[["create",o.map(function(e){return{name:e}})]]}],this.context]},this.session).then(function(e){return e[0]});return e.then(function(e){this.session.cache.clear("model."+this.screen.model_name+".view_toolbar_get"),this.predef_exports[e]=o,0===n.length?this.add_to_predef(e,t):n.attr("export_id",e)}.bind(this))}.bind(this),0===(n=this.predef_exports_list.children("li.bg-primary")).length?(i=null,Sao.common.ask.run(Sao.i18n.gettext("What is the name of this export?")).then(e)):(i=n.attr("export_id"),Sao.common.sur.run(Sao.i18n.gettext("Override %1 definition?",n.text())).then(e)))},remove_predef:function(){var e,t=this.predef_exports_list.children("li.bg-primary");0!==t.length&&(e=jQuery(t).attr("export_id"),Sao.rpc({method:"model.ir.export.delete",params:[[e],{}]},this.session).then(function(){this.session.cache.clear("model."+this.screen.model_name+".view_toolbar_get"),delete this.predef_exports[e],t.remove()}.bind(this)))},sel_predef:function(e){this.fields_selected.empty(),this.predef_exports[e].forEach(function(e){var t,i;e in this.fields||(t=this.fields_model,i=e.split("/").slice(0,-1),this._traverse(t,"",i,0)),e in this.fields&&this.sel_field(e)}.bind(this))},_traverse:function(e,t,i,n){for(var o,s=Object.keys(e),r=0;r<s.length;r++)if((o=e[s[r]]).path==t+i[n]){this.children_expand(o),t+=i[n]+"/",o.children&&this._traverse(o.children,t,i,++n);break}},sel_field:function(e){var t=this.fields[e].long_string;this.fields[e].relation&&(e+="/rec_name");var i=jQuery("<li/>",{path:e,class:"draggable-handle"}).text(t).click(function(e){e.ctrlKey||e.metaKey?i.toggleClass("bg-primary"):jQuery(e.target).addClass("bg-primary").siblings().removeClass("bg-primary")}).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-drag")).appendTo(this.fields_selected)},response:function(e){var i,n,t,o,s;"RESPONSE_OK"==e?(i=[],n=[],this.fields_selected.children("li").each(function(e,t){i.push(t.getAttribute("path")),n.push(t.innerText)}),(JSON.parse(this.selected_records.val())?(s=this.screen.selected_records.map(function(e){return e.id}),t=this.screen.selected_paths,Sao.rpc({method:"model."+this.screen.model_name+".export_data",params:[s,i,this.context]},this.session)):this.screen_is_tree?(s=this.screen.listed_records.map(function(e){return e.id}),t=this.screen.listed_paths,Sao.rpc({method:"model."+this.screen.model_name+".export_data",params:[s,i,this.context]},this.session)):(e=this.screen.search_domain(this.screen.screen_container.get_text()),s=this.ignore_search_limit.prop("checked")?(o=0,null):(o=this.screen.offset,this.screen.limit),Sao.rpc({method:"model."+this.screen.model_name+".export_data_domain",params:[e,i,o,s,this.screen.order,this.context]},this.session))).then(function(e){this.export_csv(n,e,t).then(function(){this.destroy()}.bind(this))}.bind(this))):this.destroy()},export_csv:function(e,t,i){var n=this.el_csv_locale.prop("checked"),o={};o.data=t.map(function(e,t){t=i&&i[t]?i[t].length-1:0;return Sao.Window.Export.format_row(e,t,n)}),this.el_add_field_names.is(":checked")&&(o.fields=e);o=Papa.unparse(o,{quoteChar:this.el_csv_quotechar.val(),delimiter:this.el_csv_delimiter.val()});return navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(o=Sao.BOM_UTF8+o),Sao.common.download_file(o,this.name+".csv",{type:"text/csv;charset=utf-8"}),Sao.common.message.run(Sao.i18n.ngettext("%1 record saved","%1 records saved",t.length))},set_url:function(){var e,t=[this.session.database,"data",this.screen.model_name],i=[];JSON.parse(this.selected_records.val())?e=this.screen.current_view.selected_records.map(function(e){return e.id}):(e=this.screen.search_domain(this.screen.screen_container.get_text()),this.ignore_search_limit.prop("checked")||(i.push(["s",this.screen.limit.toString()]),i.push(["p",Math.floor(this.screen.offset/this.screen.limit).toString()])),this.screen.order&&this.screen.order.forEach(function(e){i.push(["o",e.map(function(e){return e}).join(",")])})),i.splice(0,0,["d",JSON.stringify(Sao.rpc.prepareObject(e))]),jQuery.isEmptyObject(this.screen.local_context)||i.push(["c",JSON.stringify(Sao.rpc.prepareObject(this.screen.local_context))]),this.fields_selected.children("li").each(function(e,t){i.push(["f",t.getAttribute("path")])}),i.push(["dl",this.el_csv_delimiter.val()]),i.push(["qc",this.el_csv_quotechar.val()]),this.el_add_field_names.is(":checked")||i.push(["h","0"]),this.el_csv_locale.prop("checked")&&i.push(["loc","1"]),i=i.map(function(e){return e.map(encodeURIComponent).join("=")}).join("&"),this.button_url.attr("href","/"+t.join("/")+"?"+i)}}),Sao.Window.Export.format_row=function(e,i,n){void 0===i&&(i=0),void 0===n&&(n=!0);var o=[];return e.forEach(function(e,t){n?e.isDateTime?e=e.format(Sao.common.date_format()+" "+Sao.common.moment_format("%X")):e.isDate?e=e.format(Sao.common.date_format()):e.isTimeDelta?e=Sao.common.timedelta.format(e,{s:1,m:60,h:3600}):isNaN(Number(e))||(e=e.toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),{minimumFractionDigits:0,maximumFractionDigits:20})):e.isTimeDelta?e=e.asSeconds():"boolean"==typeof e&&(e+=0),0===t&&i&&"string"==typeof e&&(e=" ".repeat(i)+e),o.push(e)}),o},Sao.Window.EmailEntry=Sao.class_(Sao.common.InputCompletion,{init:function(e,t){this.session=t,Sao.Window.EmailEntry._super.init.call(this,e,this._email_source,this._email_match_selected,this._email_format)},_email_match_selected:function(e){this.input.val(e[2])},_email_source:function(e){return this.input[0].selectionStart<this.input.val().length?jQuery.when([]):Sao.rpc({method:"model.ir.email.complete",params:[e,Sao.config.limit,{}]},this.session)},_email_format:function(e){return e[1]}}),Sao.Window.Email=Sao.class_(Object,{init:function(e,t,i,n){this.record=t,this.dialog=new Sao.Dialog(Sao.i18n.gettext("E-mail %1",e),"email","lg"),this.el=this.dialog.modal,this.dialog.content.addClass("form-horizontal");var o=this.dialog.body;function s(e,t,i){var n=jQuery("<div/>",{class:"form-group"}).appendTo(o);jQuery("<label/>",{class:"control-label col-sm-1",text:t,for:"email-"+e}).appendTo(n);n=jQuery("<input/>",{type:"text",class:"form-control input-sm",id:"email-"+e}).appendTo(jQuery("<div/>",{class:"col-sm-11"}).appendTo(n));return i&&n.attr("required",!0),n}this.to=s("to",Sao.i18n.gettext("To:"),!0),this.cc=s("cc",Sao.i18n.gettext("Cc:")),this.bcc=s("bcc",Sao.i18n.gettext("Bcc:")),[this.to,this.cc,this.bcc].forEach(function(e){new Sao.Window.EmailEntry(e,this.record.model.session)}.bind(this)),this.subject=s("subject",Sao.i18n.gettext("Subject:"),!0);e=jQuery("<div/>",{class:"panel panel-default"}).appendTo(o).append(jQuery("<div/>",{class:"panel-heading"}).append(Sao.common.richtext_toolbar()));this.body=jQuery("<div>",{class:"email-richtext form-control input-sm mousetrap",contenteditable:!0,spellcheck:!0,id:"email-body"}).appendTo(jQuery("<div/>",{class:"panel-body"}).appendTo(e));var r=jQuery("<div/>",{class:"col-md-4"}).appendTo(o);jQuery("<label/>",{text:Sao.i18n.gettext("Reports")}).appendTo(r),this.print_actions={};for(var a=0;a<i.length;a++){var c=i[a],l=jQuery("<input/>",{type:"checkbox"});jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>").text(Sao.i18n.gettext(c.name)).prepend(l)).appendTo(r),this.print_actions[c.id]=l}e=jQuery("<div/>",{class:"col-md-4"}).appendTo(o);jQuery("<label/>",{text:Sao.i18n.gettext("Attachments")}).appendTo(e),this.attachments=jQuery("<select/>",{class:"form-control input-sm",name:"attachments",multiple:!0}).appendTo(e),Sao.rpc({method:"model.ir.attachment.search_read",params:[[["resource","=",t.model.name+","+t.id],["OR",["data","!=",null],["file_id","!=",null]]],0,null,null,["rec_name"],t.get_context()]},t.model.session).then(function(e){e.forEach(function(e){this.attachments.append(jQuery("<option/>",{value:JSON.stringify(e.id),text:e.rec_name}))}.bind(this))}.bind(this)),this.files=jQuery("<div/>",{class:"col-md-4"}).appendTo(o),jQuery("<label/>",{text:Sao.i18n.gettext("Files")}).appendTo(this.files),this._add_file_button(),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(" "+Sao.i18n.gettext("Cancel")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-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("Send")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-send")).appendTo(this.dialog.footer),this.dialog.content.submit(function(e){e.preventDefault(),this.response("RESPONSE_OK")}.bind(this)),this._fill_with(n),this.el.modal("show"),this.el.on("hidden.bs.modal",function(){jQuery(this).remove()})},_add_file_button:function(){var e=jQuery("<div/>").appendTo(this.files),t=jQuery("<input/>",{type:"file"}).appendTo(e),i=jQuery("<a/>",{class:"close",title:Sao.i18n.gettext("Remove File")}).append(jQuery("<span/>",{"aria-hidden":!0,text:"x"})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Remove")));i.hide(),i.appendTo(e),t.on("change",function(){i.show(),this._add_file_button()}.bind(this)),i.click(function(){e.remove()})},get_files:function(){var n=[],o=[];return this.files.find("input[type=file]").each(function(e,t){var i;t.files.length&&(i=jQuery.Deferred(),n.push(i),Sao.common.get_file_data(t.files[0],function(e,t){o.push([t,e]),i.resolve()}))}),jQuery.when.apply(jQuery,n).then(function(){return o})},get_attachments:function(){var e=this.attachments.val();return e?e.map(function(e){return JSON.parse(e)}):[]},_fill_with:function(e){e=e?Sao.rpc({method:"model.ir.email.template.get",params:[e,this.record.id,{}]},this.record.model.session):Sao.rpc({method:"model.ir.email.template.get_default",params:[this.record.model.name,this.record.id,{}]},this.record.model.session);e.then(function(e){this.to.val((e.to||[]).join(", ")),this.cc.val((e.cc||[]).join(", ")),this.bcc.val((e.bcc||[]).join(", ")),this.subject.val(e.subject||""),this.body.html(Sao.HtmlSanitizer.sanitize(e.body||""));var t,i=e.reports||[];for(t in this.print_actions)this.print_actions[t].prop("checked",~i.indexOf(parseInt(t,10)))}.bind(this))},response:function(e){if("RESPONSE_OK"==e){var t,i=this.to.val(),n=this.cc.val(),o=this.bcc.val(),s=this.subject.val(),r=Sao.common.richtext_normalize(this.body.html()),a=[];for(t in this.print_actions)this.print_actions[t].prop("checked")&&a.push(t);var c=this.get_attachments(),l=this.record;this.get_files().then(function(e){return Sao.rpc({method:"model.ir.email.send",params:[i,n,o,s,r,e,[l.model.name,l.id],a,c,{}]},l.model.session)}).then(function(){this.destroy()}.bind(this))}else this.destroy()},destroy:function(){this.el.modal("hide")}})}(),function(){"use strict";Sao.Wizard=Sao.class_(Object,{init:function(e){this.widget=jQuery("<div/>",{class:"wizard"}),this.name=e||Sao.i18n.gettext("Wizard"),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(e){this.action=e.action,this.action_id=e.data.action_id,this.id=e.data.id,this.ids=e.data.ids,this.model=e.data.model,this.context=jQuery.extend({},e.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(e){this.session_id=e[0],this.start_state=this.state=e[1],this.end_state=e[2],this.process()}.bind(this),function(){this.destroy()}.bind(this))},process:function(){this.__processing||this.__waiting_response||function(){var e,t;this.state!=this.end_state?(e=jQuery.extend({},this.context),t={},this.screen&&(t[this.screen_state]=this.screen.get_on_change_value()),Sao.rpc({method:"wizard."+this.action+".execute",params:[this.session_id,t,this.state,e]},this.session).then(function(e){var t;e.view?(this.clean(),t=e.view,this.update(t.fields_view,t.buttons),this.screen.new_(!1).then(function(){this.screen.current_record.set_default(t.defaults),this.update_buttons(),this.screen.set_cursor()}.bind(this)),this.screen_state=t.state,this.__waiting_response=!0):this.state=this.end_state;var i=function(){e.actions&&e.actions.forEach(function(e){var t=jQuery.extend({},this.context);delete t.active_id,delete t.active_ids,delete t.active_model,delete t.action_id,Sao.Action.execute(e[0],e[1],t)}.bind(this))}.bind(this);this.state==this.end_state?this.end().then(i):i(),this.__processing=!1}.bind(this),function(e){this.__processing=!1}.bind(this))):this.end()}.call(this)},destroy:function(e){},end:function(){return Sao.rpc({method:"wizard."+this.action+".delete",params:[this.session_id,this.session.context]},this.session).then(function(e){this.destroy(e)}.bind(this))},clean:function(){this.widget.empty(),this.states={}},response:function(e){if(this.__waiting_response=!1,this.screen.current_view.set_value(),e.validate&&!this.screen.current_record.validate(null,null,null,!0))return this.screen.display(!0),void this.info_bar.message(this.screen.invalid_message(),"danger");this.info_bar.message(),this.state=e.state,this.process()},_get_button:function(e){var t="btn-default";e.default?t="btn-primary":e.state==this.end_state&&(t="btn-link");t=new Sao.common.Button(e,void 0,void 0,t);return this.states[e.state]=t},update_buttons:function(){var e,t=this.screen.current_record;for(e in this.states)this.states[e].set_state(t)},update:function(e,t){t.forEach(function(e){this._get_button(e)}.bind(this)),this.screen=new Sao.Screen(e.model,{mode:[],context:this.context}),this.screen.add_view(e),this.screen.switch_view(),this.screen.group_changed_callback=this.update_buttons.bind(this),this.header.append(jQuery("<h4/>",{class:"model-title",title:this.name}).text(Sao.common.ellipsize(this.name,80))),this.widget.append(this.screen.screen_container.el)}}),Sao.Wizard.create=function(e){var t,i;e.window?(t=new Sao.Wizard.Form(e.name),i=new Sao.Tab.Wizard(t),Sao.Tab.add(i)):t=new Sao.Wizard.Dialog(e.name),t.run(e)},Sao.Wizard.Form=Sao.class_(Sao.Wizard,{init:function(e){Sao.Wizard.Form._super.init.call(this,e),this.tab=null,this.header=jQuery("<div/>",{class:"modal-header"}),this.form=jQuery("<div/>",{class:"wizard-form"}).append(this.header).append(this.widget),this.footer=jQuery("<div/>",{class:"modal-footer"}).appendTo(this.form)},clean:function(){Sao.Wizard.Form._super.clean.call(this),this.header.empty(),this.footer.empty()},_get_button:function(e){var t=Sao.Wizard.Form._super._get_button.call(this,e);return this.footer.append(t.el),t.el.click(function(){this.response(e)}.bind(this)),t},destroy:function(e){switch(Sao.Wizard.Form._super.destroy.call(this,e),e){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(e){Sao.Wizard.Dialog._super.init.call(this,e);e=new Sao.Dialog(e,"wizard-dialog","md",!1);this.dialog=e.modal,this.header=e.header,this.content=e.content,this.footer=e.footer,this.dialog.on("keydown",function(e){e.which==Sao.common.ESC_KEYCODE&&(e.preventDefault(),this.end_state in this.states&&this.response(this.states[this.end_state].attributes))}.bind(this)),e.body.append(this.widget).append(this.info_bar.el)},clean:function(){Sao.Wizard.Dialog._super.clean.call(this),this.header.empty(),this.footer.empty()},_get_button:function(t){var e=Sao.Wizard.Dialog._super._get_button.call(this,t);return this.footer.append(e.el),t.default?(this.content.unbind("submit"),this.content.submit(function(e){this.response(t),e.preventDefault()}.bind(this)),e.el.attr("type","submit")):e.el.click(function(){this.response(t)}.bind(this)),e},update:function(e,t){this.content.unbind("submit"),Sao.Wizard.Dialog._super.update.call(this,e,t),this.show()},destroy:function(n){Sao.Wizard.Dialog._super.destroy.call(this,n);var e=function(){this.dialog.remove();var e=jQuery(".wizard-dialog").filter(":visible")[0],t=!1,i=(e=e||Sao.Tab.tabs.get_current())&&this.model&&Sao.main_menu_screen.model_name!=this.model?e.screen:(t=!0,Sao.main_menu_screen);i&&(e=jQuery.when(),i.current_record&&!t&&(t=i.model_name==this.model?this.ids:[i.current_record.id],e=i.reload(t,!0)),n&&e.then(function(){i.client_action(n)}))}.bind(this);(this.dialog.data("bs.modal")||{}).isShown?(this.dialog.on("hidden.bs.modal",e),this.dialog.modal("hide")):e()},show:function(){var e=this.screen.current_view;if("form"==e.view_type)for(var t=!1,i=e.get_fields(),n=0;n<i.length;n++){for(var o=i[n],s=e.widgets[o],r=0;r<s.length;r++)if(s[r].expand){t=!0;break}if(t)break}else t=!0;t?this.dialog.find(".modal-dialog").removeClass("modal-md modal-sm").addClass("modal-lg"):this.dialog.find(".modal-dialog").removeClass("modal-lg modal-sm").addClass("modal-md"),this.dialog.modal("show")},hide:function(){this.dialog.modal("hide")},state_changed:function(){this.process()}})}(),function(){"use strict";Sao.View.BoardXMLViewParser=Sao.class_(Sao.View.FormXMLViewParser,{_parse_board:function(e,t){var i=new Sao.View.Form.Container(Number(e.getAttribute("col")||4));if(this.view.el.append(i.el),this.parse_child(e,i),0<this._containers.length)throw"AssertionError"},_parse_action:function(e,t){var i;void 0===t.yexpand&&(t.yexpand=!0),void 0===t.yfill&&(t.yfill=!0),i=new Sao.View.Board.Action(t,this.view.context),this.view.actions.push(i),this.container.add(i,t)}}),Sao.View.Board=Sao.class_(Object,{xml_parser:Sao.View.BoardXMLViewParser,init:function(e,t){this.context=t,this.actions=[],this.containers=[],this.state_widgets=[],this.el=jQuery("<div/>",{class:"board"}),new this.xml_parser(this,null,{}).parse(e.children()[0]);for(var i=[],n=0,o=this.actions.length;n<o;n++)i.push(this.actions[n].action_prm);this.actions_prms=jQuery.when.apply(jQuery,i)},reload:function(){for(var e=0;e<this.actions.length;e++)this.actions[e].display();for(e=0;e<this.state_widgets.length;e++)this.state_widgets[e].set_state(null)}}),Sao.View.Board.Action=Sao.class_(Object,{init:function(o,s){void 0===s&&(s={});var r=Sao.Session.current_session;this.name=o.name,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);var e=new Sao.Model("ir.action.act_window");this.action_prm=e.execute("get",[this.name],{}),this.action_prm.done(function(e){var i={};this.action=e,i.view_ids=[],i.mode=null,jQuery.isEmptyObject(e.views)?jQuery.isEmptyObject(e.view_id)||(i.view_ids=[e.view_id[0]]):(i.view_ids=[],i.mode=[],e.views.forEach(function(e){i.view_ids.push(e[0]),i.mode.push(e[1])})),"pyson_domain"in this.action||(this.action.pyson_domain="[]");var t={};(t=jQuery.extend(t,r.context))._user=r.user_id;var n=new Sao.PYSON.Decoder(t);i.context=jQuery.extend({},s,n.decode(e.pyson_context||"{}")),(t=jQuery.extend(t,i.context)).context=t,n=new Sao.PYSON.Decoder(t),i.domain=n.decode(e.pyson_domain),i.order=n.decode(e.pyson_order),i.search_value=n.decode(e.pyson_search_value||"[]"),i.tab_domain=[],e.domains.forEach(function(e,t){i.tab_domain.push([e[0],n.decode(e[1]),e[2]])}),i.context_model=e.context_model,i.context_domain=e.context_domain,null!==e.limit?i.limit=e.limit:i.limit=Sao.config.limit,this.context=t,this.domain=[],this.update_domain([]),i.row_activate=this.row_activate.bind(this),this.screen=new Sao.Screen(this.action.res_model,i),o.string?this.title.text(o.string):this.title.text(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))},row_activate:function(){var e;this.screen.current_record&&("tree"==this.screen.current_view.view_type&&1==this.screen.current_view.attributes.keyword_open?(e=this.screen.current_view.selected_records.map(function(e){return e.id}),Sao.Action.exec_keyword("tree_open",{model:this.screen.model_name,id:this.screen.current_record.id,ids:e},jQuery.extend({},this.screen.group._context),!1)):new Sao.Window.Form(this.screen,function(e){e?this.screen.current_record.save():this.screen.current_record.cancel()}.bind(this),{title:this.title.text()}))},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(e){var t,i,n,o,s=jQuery.extend({},this.context);for((s.context=s)._user=Sao.Session.current_session.user_id,t=0,i=e.length;t<i;t++)(n=e[t].get_active())&&(s[e[t].name]=n);o=new Sao.PYSON.Decoder(s).decode(this.action.pyson_domain),Sao.common.compare(this.domain,o)||(this.domain.splice(0,this.domain.length),jQuery.extend(this.domain,o),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(n,o){o=o||1;var e,s=Sao.Session.current_session;s&&((e=jQuery.ajax({headers:{Authorization:"Session "+s.get_auth()},contentType:"application/json",data:JSON.stringify({last_message:n,channels:Sao.Bus.channels}),dataType:"json",url:"/"+s.database+"/bus",type:"POST",timeout:Sao.config.bus_timeout})).done(function(e){Sao.Session.current_session==s&&(e.message&&(n=e.message.message_id,Sao.Bus.handle(e.message)),Sao.Bus.listen(n,1))}),e.fail(function(e,t,i){Sao.Session.current_session==s&&("timeout"===i?Sao.Bus.listen(n,1):501==e.status?console.log("Bus not supported"):window.setTimeout(Sao.Bus.listen,Math.min(1e3*o,Sao.config.bus_timeout),n,2*o))}))},Sao.Bus.handle=function(e){"notification"===e.type&&function(e){try{if("granted"!=Notification.permission)return}catch(e){return(console.error||console.log).call(console,e,e.stack)}new Notification(e.title,{body:e.body||""})}(e)}}(),function(){"use strict";var i={translate_view:function(e){e=e.model;Sao.Tab.create({model:"ir.translation",domain:[["model","=",e]],mode:["tree","form"],name:Sao.i18n.gettext("Translate view")})},get_plugins:function(e){var t=Sao.common.MODELACCESS.get("ir.translation");return t.read&&t.write?[[Sao.i18n.gettext("Translate view"),i.translate_view]]:[]}};Sao.Plugins.push(i)}(),function(){"use strict";var a={B:!0,BODY:!0,BR:!0,DIV:!0,FONT:!0,I:!0,U:!0},c={align:!0,color:!0,face:!0,size:!0};Sao.HtmlSanitizer={},Sao.HtmlSanitizer.sanitize=function(e){if(""==(e=e.trim()))return"";if("<br>"==e)return"";var t=document.createElement("iframe");if(void 0===t.sandbox)return console.warn("Your browser do not support sandboxed iframes, unable to sanitize HTML."),e;t.sandbox="allow-same-origin",t.style.display="none",document.body.appendChild(t);var r=t.contentDocument||t.contentWindow.document;null==r.body&&r.write("<body></body>"),r.body.innerHTML=e;e=function e(t){if(t.nodeType==Node.TEXT_NODE)i=t.cloneNode(!0);else if(t.nodeType==Node.ELEMENT_NODE&&a[t.tagName]){if("BR"!=t.tagName&&""==t.innerHTML.trim())return document.createDocumentFragment();for(var i=r.createElement(t.tagName),n=0;n<t.attributes.length;n++){var o=t.attributes[n];c[o.name]&&i.setAttribute(o.name,o.value)}for(n=0;n<t.childNodes.length;n++){var s=e(t.childNodes[n]);i.appendChild(s,!1)}}else i=document.createDocumentFragment(),"SCRIPT"!=t.tagName&&(i.textContent=t.textContent);return i}(r.body);return document.body.removeChild(t),e.innerHTML.replace(/<br[^>]*>(\S)/g,"<br>\n$1").replace(/div><div/g,"div>\n<div")}}();
|
|
5
|
+
var Sao={};function eval_pyson(value){with(Sao.PYSON.eval)return eval("("+value+")")}!function(){"use strict";"contains"in String.prototype||(String.prototype.contains=function(e,t){return-1!==String.prototype.indexOf.call(this,e,t)}),String.prototype.startsWith||Object.defineProperty(String.prototype,"startsWith",{enumerable:!1,configurable:!1,writable:!1,value:function(e,t){return this.indexOf(e,t=t||0)===t}}),String.prototype.endsWith||Object.defineProperty(String.prototype,"endsWith",{enumerable:!1,configurable:!1,writable:!1,value:function(e,t){t=t||this.length,t-=e.length;e=this.lastIndexOf(e);return-1!==e&&e===t}}),String.prototype.padEnd||(String.prototype.padEnd=function(e,t){return e>>=0,t=String(void 0!==t?t:" "),this.length>e?String(this):((e-=this.length)>t.length&&(t+=t.repeat(e/t.length)),String(this)+t.slice(0,e))}),String.prototype.padStart||(String.prototype.padStart=function(e,t){return e>>=0,t=String(void 0!==t?t:" "),this.length>e?String(this):((e-=this.length)>t.length&&(t+=t.repeat(e/t.length)),t.slice(0,e)+String(this))}),Array.prototype.some||(Array.prototype.some=function(e){if(null===this)throw new TypeError;var t,i,n=Object(this),o=n.length>>>0;if("function"!=typeof e)throw new TypeError;for(t=arguments[1],i=0;i<o;i++)if(i in n&&e.call(t,n[i],i,n))return!0;return!1}),Array.from||(Array.from=function(e){var t=[];return e.forEach(function(e){t.push(e)}),t}),Sao.setdefault=function(e,t,i){return e.hasOwnProperty(t)||(e[t]=i),e[t]};try{document.execCommand("styleWithCSS",!1,!1)}catch(e){}try{document.execCommand("useCSS",!1,!0)}catch(e){}var e;jQuery.fn.extend({uniqueId:(e=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})})}),window.onbeforeunload=function(e){if(Sao.main_menu_screen&&Sao.main_menu_screen.save_tree_state(!0),Sao.Tab.tabs.length){var t=Sao.i18n.gettext("Are your sure to leave?");return e.returnValue=t}},Sao.class_=function(e,t){var i=function(){if(!(this instanceof i))throw new Error("Constructor function requires new operator");this.Class=i,this.init&&this.init.apply(this,arguments)};if(i.prototype=Object.create(e.prototype),i._super=e.prototype,t)for(var n in t)Object.defineProperty(i.prototype,n,Object.getOwnPropertyDescriptor(t,n));function o(e){return i.apply(this,e)}return o.prototype=i.prototype,i.new_=function(e){return new o(e)},i},Sao.Decimal=Number;var t=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"):t.call(this)},Sao.Date=function(e,t,i){var n;return void 0===t?(n=moment(e),e=void 0):n=moment(),n.year(e),n.month(t),n.date(i),n.set({hour:0,minute:0,second:0,millisecond:0}),n.isDate=!0,n},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(e,t,i,n,o,s,r,a){var c;return void 0===t?(c=moment(e),e=void 0):(void 0===n&&(n=0),void 0===o&&(o=0),void 0===s&&(s=0),void 0===r&&(r=0),c=moment()),a&&c.utc(),c.year(e),c.month(t),c.date(i),void 0!==t&&(c.hour(n),c.minute(o),c.second(s),c.milliseconds(r)),c.isDateTime=!0,c.local(),c.todate=function(){return Sao.Date(this.year(),this.month(),this.date())},c.totime=function(){return Sao.Time(this.hour(),this.minute(),this.second(),this.millisecond())},c},Sao.DateTime.combine=function(e,t){return Sao.DateTime(e.year(),e.month(),e.date(),t.hour(),t.minute(),t.second(),t.millisecond())},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(e,t,i,n){n=moment({hour:e,minute:t,second:i,millisecond:n||0});return n.isTime=!0,n},Sao.TimeDelta=function(e,t,i,n,o,s){s=moment.duration({days:e,seconds:t,milliseconds:i,minutes:n,hours:o,weeks:s});return s.isTimeDelta=!0,s},Sao.config={},Sao.config.limit=1e3,Sao.config.display_size=20,Sao.config.bug_url="https://bugs.tryton.org/",Sao.config.title="Tryton",Sao.config.icon_colors="#267f82,#3e4950,#e78e42".split(","),Sao.config.calendar_colors="#fff,#267f82".split(","),Sao.config.graph_color="#267f82",Sao.config.bus_timeout=6e5,Sao.i18n=i18n(),Sao.i18n.setlang=function(i){return i=i||(navigator.language||navigator.browserLanguage||navigator.userLanguage||"en").replace("-","_"),jQuery("html").attr("lang",i),Sao.i18n.setLocale(i),moment.locale(i.slice(0,2)),jQuery.getJSON("locale/"+i+".json").then(function(e){for(var t in e[""].language||(e[""].language=i),e[""]["plural-forms"]||(e[""]["plural-forms"]="nplurals=2; plural=(n!=1);"),e)""!==t&&(e[t]=2==e[t].length?e[t][1]:e[t].slice(1));Sao.i18n.loadJSON(e)},function(){if(~i.indexOf("_"))return Sao.i18n.setlang(i.split("_").slice(0,-1).join("_"))})},Sao.i18n.getlang=function(){return Sao.i18n.getLocale()},Sao.i18n.BC47=function(e){return e.replace("_","-")},Sao.i18n.set_direction=function(e){Sao.i18n.rtl="rtl"===e,jQuery("html").attr("dir",e),jQuery(".row-offcanvas").removeClass("row-offcanvas-left row-offcanvas-right").addClass(Sao.i18n.rtl?"row-offcanvas-right":"row-offcanvas-left")},Sao.i18n.locale={},Sao.BOM_UTF8="\ufeff",Sao.get_preferences=function(){var e=Sao.Session.current_session;return e.reload_context().then(function(){return Sao.rpc({method:"model.res.user.get_preferences",params:[!1,{}]},e).then(function(i){var e=[];return e.push(Sao.common.MODELACCESS.load_models()),e.push(Sao.common.ICONFACTORY.load_icons()),e.push(Sao.common.MODELHISTORY.load_history()),e.push(Sao.common.VIEW_SEARCH.load_searches()),jQuery.when.apply(jQuery,e).then(function(){(i.actions||[]).forEach(function(e){Sao.Action.execute(e,{},null,{})}),Sao.set_title();var e=i.language!=Sao.i18n.getLocale(),t=jQuery.Deferred();return Sao.i18n.setlang(i.language).always(function(){e&&Sao.user_menu(i),t.resolve(i)}),Sao.i18n.set_direction(i.language_direction),Sao.i18n.locale=i.locale,Sao.common.MODELNAME.clear(),t})})})},Sao.set_title=function(e){e=[e,Sao.config.title];document.title=e.filter(function(e){return e}).join(" - "),jQuery("#title").text(Sao.config.title)},Sao.set_url=function(e,t){var i=Sao.Session.current_session;i&&(i="#"+i.database,e&&(i+="/"+e),window.location=i),Sao.set_title(t)},window.onhashchange=function(){var e=Sao.Session.current_session;if(e){var t,e="#"+e.database;if(window.location.hash==e)i="";else{if(!window.location.hash.startsWith(e+"/"))return;i=window.location.hash.substr(e.length+1)}if(i){for(var i=decodeURIComponent(i),n=0;n<Sao.Tab.tabs.length;n++)if(t=Sao.Tab.tabs[n],decodeURIComponent(t.get_url())==i)return void t.show();Sao.open_url()}else(t=Sao.Tab.tabs.get_current())&&Sao.set_url(t.get_url(),t.name)}},Sao.open_url=function(e){function i(e){return Sao.rpc.convertJSONObject(jQuery.parseJSON(e))}var t,n=(e=void 0===e?window.location.hash.substr(1):e).indexOf(";"),o={};switch(0<=n?(t=e.substring(0,n),e.substring(n+1).split("&").forEach(function(e){e&&(e=e.split("=").map(decodeURIComponent),o[e[0]]=e[1])})):t=e,(t=t.split("/").slice(1)).shift()){case"model":!function(e){var t={};if(t.model=e.shift(),t.model){try{t.view_ids=i(o.views||"[]"),t.limit=i(o.limi||"null"),t.name=i(o.name||'""'),t.search_value=i(o.search_value||"[]"),t.domain=i(o.domain||"[]"),t.context=i(o.context||"{}"),t.context_model=o.context_model,t.tab_domain=i(o.tab_domain||"[]")}catch(e){return}e=e.shift();if(e){if(e=Number(e),isNaN(e))return;t.res_id=e,t.mode=["form","tree"]}try{Sao.Tab.create(t)}catch(e){return}}}(t);break;case"wizard":!function(e){var t={};if(t.action=e[0],t.action){try{t.data=i(o.data||"{}"),t.direct_print=i(o.direct_print||"false"),t.name=i(o.name||'""'),t.window=i(o.window||"false"),t.context=i(o.context||"{}")}catch(e){return}try{Sao.Wizard.create(t)}catch(e){return}}}(t);break;case"report":!function(e){var t={};if(t.name=e[0],t.name){try{t.data=i(o.data||"{}"),t.direct_print=i(o.direct_print||"false"),t.context=i(o.context||"{}")}catch(e){return}try{Sao.Action.exec_report(t)}catch(e){return}}}(t);break;case"url":!function(){var e;try{e=i(o.url||"false")}catch(e){return}e&&window.open(e,"_blank","noreferrer,noopener")}()}},Sao.login=function(){Sao.set_title(),Sao.i18n.setlang().always(function(){Sao.Session.get_credentials().then(function(e){return(Sao.Session.current_session=e).reload_context()}).then(Sao.get_preferences).then(function(e){Sao.menu(e),Sao.user_menu(e),Sao.open_url(),Sao.Bus.listen()})})},Sao.logout=function(){var e=Sao.Session.current_session;Sao.Tab.tabs.close(!0).done(function(){jQuery("#user-preferences").empty(),jQuery("#user-favorites").empty(),jQuery("#global-search").empty(),jQuery("#menu").empty(),e.do_logout().always(Sao.login),Sao.set_title()})},Sao.preferences=function(){Sao.Tab.tabs.close(!0).done(function(){jQuery("#user-preferences").empty(),jQuery("#user-favorites").empty(),jQuery("#menu").empty(),new Sao.Window.Preferences(function(){Sao.Session.current_session.reset_context(),Sao.get_preferences().then(function(e){Sao.menu(e),Sao.user_menu(e)})})})},Sao.favorites_menu=function(){var e,t,s;jQuery(window).click(function(){Sao.favorites_menu_clear()}),jQuery("#user-favorites").children(".dropdown-menu").length||(t=Sao.main_menu_screen.model_name+".favorite",e=Sao.Session.current_session,t={method:"model."+t+".get"},s=jQuery("<ul/>",{class:"dropdown-menu","aria-expanded":"false","aria-labelledby":"user-favorites"}),jQuery("#user-favorites").append(s),Sao.rpc(t,e).then(function(e){e.forEach(function(e){var t=jQuery("<a/>",{href:"#"}),i=e[0],n=jQuery("<li/>",{role:"presentation"}),o=Sao.common.ICONFACTORY.get_icon_img(e[2],{class:"favorite-icon"});t.append(o),n.append(t),t.append(e[1]),t.click(function(e){e.preventDefault(),Sao.favorites_menu_clear(),Sao.Action.exec_keyword("tree_open",{model:Sao.main_menu_screen.model_name,id:i})}),s.append(n)}),s.append(jQuery("<li/>",{class:"divider"})),jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{href:"#"}).click(function(e){e.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(s)}))},Sao.favorites_menu_clear=function(){jQuery("#user-favorites").children(".dropdown-menu").remove()},Sao.user_menu=function(e){jQuery("#user-preferences").empty(),jQuery("#user-favorites").empty();var t=jQuery("<a/>",{href:"#",title:e.status_bar}).click(function(e){e.preventDefault(),Sao.preferences()}).text(e.status_bar);jQuery("#user-preferences").append(t),e.avatar_badge_url&&t.prepend(jQuery("<img/>",{src:e.avatar_badge_url+"?s=15",class:"img-circle img-badge"})),e.avatar_url&&t.prepend(jQuery("<img/>",{src:e.avatar_url+"?s=30",class:"img-circle"}));e=Sao.i18n.gettext("Logout");jQuery("#user-logout > a").attr("title",e).attr("aria-label",e).off().click(Sao.logout).find("span:not(.icon)").text(e)},Sao.main_menu_row_activate=function(){var e=Sao.main_menu_screen;return Sao.Action.exec_keyword("tree_open",{model:e.model_name,id:e.get_id()},null,!1)},Sao.menu=function(e){var t,i,n,o;e?(t=(i=new Sao.PYSON.Decoder).decode(e.pyson_menu),e=!1,jQuery.isEmptyObject(t.views)?t.view_id&&(e=[t.view_id[0]]):e=t.views.map(function(e){return e[0]}),o=(i=new Sao.PYSON.Decoder(Sao.Session.current_session.context)).decode(t.pyson_context||"{}"),i=i.decode(t.pyson_domain),n=new Sao.Tab.Form(t.res_model,{mode:["tree"],view_ids:e,domain:i,context:o,selection_mode:Sao.common.SELECTION_NONE,limit:null,row_activate:Sao.main_menu_row_activate}),Sao.main_menu_screen=n.screen,Sao.main_menu_screen.switch_callback=null,Sao.Tab.tabs.splice(Sao.Tab.tabs.indexOf(n),1),n.view_prm.done(function(){var e=n.screen.current_view;e.table.removeClass("table table-bordered table-striped"),e.table.addClass("no-responsive"),e.table.find("thead").hide();e=new Sao.GlobalSearch;jQuery("#global-search").empty(),jQuery("#global-search").append(e.el),jQuery("#menu").empty(),jQuery("#menu").append(n.screen.screen_container.content_box.detach());e=new s(n.screen.model.fields.favorite);n.screen.views[0].table.find("> colgroup").append(e.col),n.screen.views[0].table.find("> thead > tr").append(e.header),n.screen.views[0].columns.push(e)})):(o=Sao.Session.current_session,Sao.rpc({method:"model.res.user.get_preferences",params:[!1,{}]},o).then(Sao.menu))},Sao.main_menu_screen=null;var s=Sao.class_(Object,{init:function(e){this.field=e,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(t,i){return i=i||this.get_cell(),t.load(this.field.name).done(function(){var e;null!==t._values.favorite&&(e="tryton-star",t._values.favorite||(e+="-border"),i.data("star",Boolean(t._values.favorite)),Sao.common.ICONFACTORY.get_icon_url(e).then(function(e){i.attr("src",e)}),i.click({record:t,button:i},this.favorite_click))}.bind(this)),i},favorite_click:function(e){e.stopImmediatePropagation();var t=e.data.button,i=t.data("star"),n=i?(o="tryton-star-border","unset"):(o="tryton-star","set");t.data("star",!i),Sao.common.ICONFACTORY.get_icon_url(o).then(function(e){t.attr("src",e)});var i=Sao.main_menu_screen.model_name+".favorite",o=Sao.Session.current_session,e={method:"model."+i+"."+n,params:[e.data.record.id,o.context]};Sao.rpc(e,o),Sao.favorites_menu_clear()}});function i(){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+shift+e",label:Sao.i18n.gettext("E-Mail"),id:"email"},{shortcut:"alt+shift+tab",label:Sao.i18n.gettext("Previous tab"),callback:function(){Sao.Tab.previous_tab()}},{shortcut:"alt+tab",label:Sao.i18n.gettext("Next tab"),callback:function(){Sao.Tab.next_tab()}},{shortcut:"ctrl+k",label:Sao.i18n.gettext("Global search"),callback:function(){jQuery("#main_navbar:hidden").collapse("show"),jQuery("#global-search-entry").focus()}},{shortcut:"f1",label:Sao.i18n.gettext("Show this help"),callback:function(){!function(){var e=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(e.header);var t=jQuery("<div/>",{class:"row"}).appendTo(e.body),n=jQuery("<dl/>",{class:"dl-horizontal col-md-6"}).append(jQuery("<h5/>").text(Sao.i18n.gettext("Global shortcuts"))).appendTo(t),o=jQuery("<dl/>",{class:"dl-horizontal col-md-6"}).append(jQuery("<h5/>").text(Sao.i18n.gettext("Tab shortcuts"))).appendTo(t);i().forEach(function(e){var t=jQuery("<dt/>").text(e.label),i=jQuery("<dd/>").append(jQuery("<kbd>").text(e.shortcut)),e=e.id?o:n;t.appendTo(e),i.appendTo(e)}),e.modal.on("hidden.bs.modal",function(){jQuery(this).remove()}),e.modal.modal("show")}()}}]}function n(){var i=1040;jQuery(".modal.in").each(function(e){var t=jQuery(this);i++,t.css("zIndex",i),t.next(".modal-backdrop.in").addClass("hidden").css("zIndex",i-1)}),jQuery(".modal.in:visible:last").focus().next(".modal-backdrop.in").removeClass("hidden")}Sao.Dialog=Sao.class_(Object,{init:function(e,t,i,n){i=i||"sm",void 0===n&&(n=!0),this.modal=jQuery("<div/>",{class:t+" modal fade",role:"dialog","data-backdrop":"static","data-keyboard":n}),this.content=jQuery("<form/>",{class:"modal-content"}).appendTo(jQuery("<div/>",{class:"modal-dialog modal-"+i}).appendTo(this.modal)),this.header=jQuery("<div/>",{class:"modal-header"}).appendTo(this.content),e&&this.add_title(e),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(){0<jQuery(document.activeElement).closest(this.el)||jQuery(this).find(':input:visible:not([readonly]):not([tabindex^="-"]):first').focus()})},add_title:function(e){this.header.append(jQuery("<h4/>",{class:"modal-title",title:e}).text(Sao.common.ellipsize(e,120)))}}),Sao.GlobalSearch=Sao.class_(Object,{init:function(){this.el=jQuery("<div/>",{class:"global-search-container"});var e=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(e),this.search_entry=jQuery("<input>",{id:"global-search-entry",class:"form-control mousetrap",placeholder:Sao.i18n.gettext("Action")}).appendTo(e);var t=new Sao.common.InputCompletion(this.el,this.update.bind(this),this.match_selected.bind(this),this.format.bind(this));t.input.keydown(function(e){e.which==Sao.common.RETURN_KEYCODE&&(t.dropdown.hasClass("open")||(e.preventDefault(),t.menu.dropdown("toggle")))})},format:function(e){var t=jQuery("<div/>");return Sao.common.ICONFACTORY.get_icon_img(e.icon,{class:"global_search-icon"}).appendTo(t),jQuery("<span/>",{class:"global-search-text"}).text(e.record_name).appendTo(t),t},update:function(e){var t=new Sao.Model("ir.model");return e?t.execute("global_search",[e,Sao.config.limit,Sao.main_menu_screen.model_name],Sao.main_menu_screen.context).then(function(e){for(var t=[],i=0,n=e.length;i<n;i++)t.push({model:e[i][1],model_name:e[i][2],record_id:e[i][3],record_name:e[i][4],icon:e[i][5]});return t}.bind(this)):jQuery.when([])},match_selected:function(e){e.model==Sao.main_menu_screen.model_name?Sao.Action.exec_keyword("tree_open",{model:e.model,id:e.record_id}):(e={model:e.model,res_id:e.record_id,mode:["form","tree"],name:e.model_name},Sao.Tab.create(e)),this.search_entry.val("")}}),jQuery(document).ready(function(){"undefined"!=typeof Mousetrap&&i().forEach(function(i){Mousetrap.bind(i.shortcut,function(){var e,t;return i.id?(e=Sao.Tab.tabs.get_current())&&((t=$(":focus")).blur(),e.el.find('a[id="'+i.id+'"]').click(),t.focus()):i.callback&&jQuery.when().then(i.callback),!1})});try{Notification.requestPermission()}catch(e){(console.error||console.log).call(console,e,e.stack)}Sao.login()}),Sao.Plugins=[],jQuery(document).on("show.bs.modal",".modal",function(e){jQuery(this).appendTo(jQuery("body"))}).on("shown.bs.modal",".modal.in",function(e){n()}).on("hidden.bs.modal",".modal",function(e){n(),jQuery(".modal:visible").length&&$(document.body).addClass("modal-open")}),jQuery(document).on("keydown","textarea",function(e){var t;"PageUp"!==e.key&&"PageDown"!==e.key||(t="PageUp"===e.key?0:e.target.textLength,e.preventDefault(),e.target.setSelectionRange(t,t))})}(),function(){"use strict";Sao.rpc=function(c,l,d){var h,u=jQuery.Deferred();l=l||new Sao.Session,void 0===d&&(d=!0);var _=jQuery.extend([],c.params);if(_.push(jQuery.extend({},l.context,_.pop())),l.cache&&l.cache.cached(c.method)&&void 0!==(h=l.cache.get(c.method,JSON.stringify(Sao.rpc.prepareObject(_)))))return d?jQuery.when(h):h;var e=Sao.common.processing.show();if(jQuery.ajax({async:d,headers:{Authorization:"Session "+l.get_auth()},contentType:"application/json",data:JSON.stringify(Sao.rpc.prepareObject({id:Sao.rpc.id++,method:c.method,params:_})),dataType:"json",url:"/"+(l.database||"")+"/",type:"post",complete:[function(){Sao.common.processing.hide(e)}],success:function(e,t,i){var n,o,s,r,a;null===e?Sao.common.warning.run("",Sao.i18n.gettext("Unable to reach the server.")).always(u.reject):e.error?"UserWarning"==e.error[0]?(n=e.error[1][0],a=e.error[1][1],o=e.error[1][2],Sao.common.userwarning.run(o,a).then(function(e){~["always","ok"].indexOf(e)?Sao.rpc({method:"model.res.user.warning.create",params:[[{user:l.user_id,name:n,always:"always"==e}],{}]},l).done(function(){d?Sao.rpc(c,l).then(u.resolve,u.reject):u.resolve()}):u.reject()},u.reject)):"UserError"==e.error[0]?(a=e.error[1][0],o=e.error[1][1],s=e.error[1][2],jQuery.isEmptyObject(s)||(r=s[1],s=s[0],(r=new Sao.common.DomainParser(r)).stringable(s)&&(o+="\n"+r.string(s))),Sao.common.warning.run(o,a).always(u.reject)):"ConcurrencyException"==e.error[0]?d&&c.method.startsWith("model.")&&(c.method.endsWith(".write")||c.method.endsWith(".delete"))&&1==c.params[0].length?(a=c.method.split(".").slice(1,-1).join("."),Sao.common.concurrency.run(a,c.params[0][0],c.params.slice(-1)[0]).then(function(){delete c.params.slice(-1)[0]._timestamp,Sao.rpc(c,l).then(u.resolve,u.reject)},u.reject)):Sao.common.message.run("Concurrency Exception","tryton-warning").always(u.reject):Sao.common.error.run(e.error[0],e.error[1]).always(u.reject):(h=e.result,!l.cache||(i=i.getResponseHeader("X-Tryton-Cache"))&&(i=parseInt(i,10),l.cache.set(c.method,JSON.stringify(Sao.rpc.prepareObject(_)),i,h)),u.resolve(h))},error:function(e,t,i){401==e.status?Sao.Session.renew(l).then(function(){d?Sao.rpc(c,l).then(u.resolve,u.reject):u.resolve()},u.reject):(429==e.status?Sao.common.message.run(Sao.i18n.gettext("Too many requests. Try again later."),"tryton-error"):Sao.common.error.run(t,i)).always(u.reject)}}),d)return u.promise();if(void 0===h)throw u;return h},Sao.rpc.id=0,Sao.rpc.convertJSONObject=function(e,t,i){if(e instanceof Array)for(var n=0,o=e.length;n<o;n++)Sao.rpc.convertJSONObject(e[n],n,e);else if("string"!=typeof e&&"number"!=typeof e&&null!==e)if(e&&e.__class__){switch(e.__class__){case"datetime":e=Sao.DateTime(e.year,e.month-1,e.day,e.hour,e.minute,e.second,Math.ceil(e.microsecond/1e3),!0);break;case"date":e=Sao.Date(e.year,e.month-1,e.day);break;case"time":e=Sao.Time(e.hour,e.minute,e.second,Math.ceil(e.microsecond/1e3));break;case"timedelta":e=Sao.TimeDelta(null,e.seconds);break;case"bytes":for(var s=atob(e.base64.replace(/\s/g,"")),r=new ArrayBuffer(s.length),a=new Uint8Array(r),c=0;c<s.length;c++)a[c]=s.charCodeAt(c);e=a;break;case"Decimal":e=new Sao.Decimal(e.decimal)}i&&(i[t]=e)}else for(var l in e)Sao.rpc.convertJSONObject(e[l],l,e);return i||e},Sao.rpc.prepareObject=function(e,t,i){if(e instanceof Array)for(var n=0,o=(e=jQuery.extend([],e)).length;n<o;n++)Sao.rpc.prepareObject(e[n],n,e);else if("string"!=typeof e&&"number"!=typeof e&&"boolean"!=typeof e&&null!=e)if(e.isDate)e={__class__:"date",year:e.year(),month:e.month()+1,day:e.date()};else if(e.isDateTime)e={__class__:"datetime",year:(e=e.clone()).utc().year(),month:e.utc().month()+1,day:e.utc().date(),hour:e.utc().hour(),minute:e.utc().minute(),second:e.utc().second(),microsecond:1e3*e.utc().millisecond()};else if(e.isTime)e={__class__:"time",hour:e.hour(),minute:e.minute(),second:e.second(),microsecond:1e3*e.millisecond()};else if(e.isTimeDelta)e={__class__:"timedelta",seconds:e.asSeconds()};else if(e instanceof Sao.Decimal)e={__class__:"Decimal",decimal:e.toString()};else if(e instanceof Uint8Array){for(var s=[],r=0;65535*r<e.length;r++)s.push(String.fromCharCode.apply(null,e.subarray(65535*r,65535*(r+1))));e={__class__:"bytes",base64:btoa(s.join(""))}}else for(var a in e=jQuery.extend({},e))Sao.rpc.prepareObject(e[a],a,e);return i&&(i[t]=e),i||e},jQuery.ajaxSetup({converters:{"text json":function(e){return Sao.rpc.convertJSONObject(jQuery.parseJSON(e))}}})}(),function(){"use strict";Sao.PYSON={},Sao.PYSON.eval={True:!0,False:!1},Sao.PYSON.toString=function(t){return t instanceof Sao.PYSON.PYSON?t.toString():t instanceof Array?"["+t.map(Sao.PYSON.toString).join(", ")+"]":t instanceof Object?"{"+Object.keys(t).map(function(e){return Sao.PYSON.toString(e)+": "+Sao.PYSON.toString(t[e])}).join(", ")+"}":JSON.stringify(t)},Sao.PYSON.PYSON=Sao.class_(Object,{init:function(){},pyson:function(){throw"NotImplementedError"},types:function(){throw"NotImplementedError"},get:function(e,t){return Sao.PYSON.Get(this,e,t=void 0===t?"":t)},in_:function(e){return Sao.PYSON.In(this,e)},contains:function(e){return Sao.PYSON.In(e,this)},toString:function(){return this.pyson().__class__+"("+this.__string_params__().map(Sao.PYSON.toString).join(", ")+")"},__string_params__:function(){throw"NotImplementedError"}}),Sao.PYSON.PYSON.eval_=function(e,t){throw"NotImplementedError"},Sao.PYSON.PYSON.init_from_object=function(e){throw"NotImplementedError"},Sao.PYSON.Encoder=Sao.class_(Object,{prepare:function(e,t,i){if(null!=e)if(e instanceof Array)for(var n=0,o=(e=jQuery.extend([],e)).length;n<o;n++)this.prepare(e[n],n,e);else if(e._isAMomentObject)e=(e.isDate?new Sao.PYSON.Date(e.year(),e.month()+1,e.date()):new Sao.PYSON.DateTime(e.year(),e.month()+1,e.date(),e.hours(),e.minutes(),e.seconds(),1e3*e.milliseconds())).pyson();else if(e instanceof Sao.Decimal)e=e.valueOf();else if(e instanceof Object&&!(e instanceof Sao.PYSON.PYSON))for(var s in e=jQuery.extend({},e))this.prepare(e[s],s,e);return i&&(i[t]=e),i||e},encode:function(e){return e=this.prepare(e),JSON.stringify(e,function(e,t){return t instanceof Sao.PYSON.PYSON?this.prepare(t.pyson()):null==t?null:t}.bind(this))}}),Sao.PYSON.Decoder=Sao.class_(Object,{init:function(e,t){this.__context=e||{},this.noeval=t||!1},decode:function(e){return JSON.parse(e,function(e,t){if("object"==typeof t&&null!==t){var i=Sao.PYSON[t.__class__];if(i){if(this.noeval){var n=jQuery.extend({},t);return delete n.__class__,Sao.PYSON[t.__class__].init_from_object(n)}return i.eval_(t,this.__context)}}return t}.bind(this))}}),Sao.PYSON.eval.Eval=function(e,t){return new Sao.PYSON.Eval(e,t)},Sao.PYSON.Eval=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t){void 0===t&&(t=""),Sao.PYSON.Eval._super.init.call(this),this._value=e,this._default=t},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(e,t){var i=e.v.indexOf(".");return 0<=i&&!(e.v in t)?Sao.PYSON.Eval.eval_({v:e.v.substring(i+1),d:e.d},t[e.v.substring(0,i)]||{}):e.v in t&&void 0!==t[e.v]?t[e.v]:e.d},Sao.PYSON.Eval.init_from_object=function(e){return new Sao.PYSON.Eval(e.v,e.d)},Sao.PYSON.eval.Not=function(e){return new Sao.PYSON.Not(e)},Sao.PYSON.Not=Sao.class_(Sao.PYSON.PYSON,{init:function(e){Sao.PYSON.Not._super.init.call(this),e instanceof Sao.PYSON.PYSON?(jQuery(e.types()).not(["boolean","object"]).length||jQuery(["boolean"]).not(e.types()).length)&&(e=new Sao.PYSON.Bool(e)):"boolean"!=typeof e&&(e=Sao.PYSON.Bool(e)),this._value=e},pyson:function(){return{__class__:"Not",v:this._value}},types:function(){return["boolean"]},__string_params__:function(){return[this._value]}}),Sao.PYSON.Not.eval_=function(e,t){return!e.v},Sao.PYSON.Not.init_from_object=function(e){return new Sao.PYSON.Not(e.v)},Sao.PYSON.eval.Bool=function(e){return new Sao.PYSON.Bool(e)},Sao.PYSON.Bool=Sao.class_(Sao.PYSON.PYSON,{init:function(e){Sao.PYSON.Bool._super.init.call(this),this._value=e},pyson:function(){return{__class__:"Bool",v:this._value}},types:function(){return["boolean"]},__string_params__:function(){return[this._value]}}),Sao.PYSON.Bool.eval_=function(e,t){return moment.isMoment(e.v)&&e.v.isTime?Boolean(e.v.hour()||e.v.minute()||e.v.second()||e.v.millisecond()):moment.isDuration(e.v)||e.v instanceof Number?Boolean(e.v.valueOf()):e.v instanceof Object?!jQuery.isEmptyObject(e.v):Boolean(e.v)},Sao.PYSON.Bool.init_from_object=function(e){return new Sao.PYSON.Bool(e.v)},Sao.PYSON.eval.And=function(){return Sao.PYSON.And.new_(arguments)},Sao.PYSON.And=Sao.class_(Sao.PYSON.PYSON,{init:function(){var e=jQuery.extend([],arguments);Sao.PYSON.And._super.init.call(this);for(var t=0,i=e.length;t<i;t++){var n=e[t];n instanceof Sao.PYSON.PYSON?(jQuery(n.types()).not(["boolean"]).length||jQuery(["boolean"]).not(n.types()).length)&&(e[t]=new Sao.PYSON.Bool(n)):"boolean"!=typeof n&&(e[t]=new Sao.PYSON.Bool(n))}if(e.length<2)throw"must have at least 2 statements";this._statements=e},pyson:function(){return{__class__:"And",s:this._statements}},types:function(){return["boolean"]},__string_params__:function(){return this._statements}}),Sao.PYSON.And.eval_=function(e,t){for(var i=!0,n=0,o=e.s.length;n<o;n++)var s=e.s[n],i=i&&s;return i},Sao.PYSON.And.init_from_object=function(e){return Sao.PYSON.And.new_(e.s)},Sao.PYSON.eval.Or=function(){return Sao.PYSON.Or.new_(arguments)},Sao.PYSON.Or=Sao.class_(Sao.PYSON.And,{pyson:function(){var e=Sao.PYSON.Or._super.pyson.call(this);return e.__class__="Or",e}}),Sao.PYSON.Or.eval_=function(e,t){for(var i=!1,n=0,o=e.s.length;n<o;n++)var s=e.s[n],i=i||s;return i},Sao.PYSON.Or.init_from_object=function(e){return new Sao.PYSON.Or.new_(e.s)},Sao.PYSON.eval.Equal=function(e,t){return new Sao.PYSON.Equal(e,t)},Sao.PYSON.Equal=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t){var i,n;if(Sao.PYSON.Equal._super.init.call(this),i=e instanceof Sao.PYSON.PYSON?e.types():[typeof e],n=t instanceof Sao.PYSON.PYSON?t.types():[typeof t],jQuery(i).not(n).length||jQuery(n).not(i).length)throw"statements must have the same type";this._statement1=e,this._statement2=t},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(e,t){return e.s1 instanceof Array&&e.s2 instanceof Array?Sao.common.compare(e.s1,e.s2):moment.isMoment(e.s1)&&moment.isMoment(e.s2)?e.s1.isDate==e.s2.isDate&&e.s1.isDateTime==e.s2.isDateTime&&e.s1.valueOf()==e.s2.valueOf():e.s1==e.s2},Sao.PYSON.Equal.init_from_object=function(e){return new Sao.PYSON.Equal(e.s1,e.s2)},Sao.PYSON.eval.Greater=function(e,t,i){return new Sao.PYSON.Greater(e,t,i)},Sao.PYSON.Greater=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i){Sao.PYSON.Greater._super.init.call(this);for(var n=[e,t],o=0;o<2;o++){var s=n[o];if(s instanceof Sao.PYSON.PYSON){if(!(s instanceof Sao.PYSON.DateTime||s instanceof Sao.PYSON.Date)&&jQuery(s.types()).not(["number"]).length)throw"statement must be an integer, float, date or datetime"}else if(!~["number","object"].indexOf(typeof s))throw"statement must be an integer, float, date or datetime"}(i=void 0===i?!1:i)instanceof Sao.PYSON.PYSON?(jQuery(i.types()).not(["boolean"]).length||jQuery(["boolean"]).not(i.types()).length)&&(i=new Sao.PYSON.Bool(i)):"boolean"!=typeof i&&(i=new Sao.PYSON.Bool(i)),this._statement1=e,this._statement2=t,this._equal=i},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(e){for(var t=[(e=jQuery.extend({},e)).s1,e.s2],i=0;i<2;i++)t[i]instanceof moment?t[i]=t[i].valueOf():t[i]=Number(t[i]);return e.s1=t[0],e.s2=t[1],e},Sao.PYSON.Greater.eval_=function(e,t){return null!=e.s1&&null!=e.s2&&((e=Sao.PYSON.Greater._convert(e)).e?e.s1>=e.s2:e.s1>e.s2)},Sao.PYSON.Greater.init_from_object=function(e){return new Sao.PYSON.Greater(e.s1,e.s2,e.e)},Sao.PYSON.eval.Less=function(e,t,i){return new Sao.PYSON.Less(e,t,i)},Sao.PYSON.Less=Sao.class_(Sao.PYSON.Greater,{pyson:function(){var e=Sao.PYSON.Less._super.pyson.call(this);return e.__class__="Less",e}}),Sao.PYSON.Less._convert=Sao.PYSON.Greater._convert,Sao.PYSON.Less.eval_=function(e,t){return null!=e.s1&&null!=e.s2&&((e=Sao.PYSON.Less._convert(e)).e?e.s1<=e.s2:e.s1<e.s2)},Sao.PYSON.Less.init_from_object=function(e){return new Sao.PYSON.Less(e.s1,e.s2,e.e)},Sao.PYSON.eval.If=function(e,t,i){return new Sao.PYSON.If(e,t,i)},Sao.PYSON.If=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i){var n,o;if(Sao.PYSON.If._super.init.call(this),e instanceof Sao.PYSON.PYSON?(jQuery(e.types()).not(["boolean"]).length||jQuery(["boolean"]).not(e.types()).length)&&(e=new Sao.PYSON.Bool(e)):"boolean"!=typeof e&&(e=new Sao.PYSON.Bool(e)),n=t instanceof Sao.PYSON.PYSON?t.types():[typeof t],o=(i=void 0===i?null:i)instanceof Sao.PYSON.PYSON?i.types():[typeof i],jQuery(n).not(o).length||jQuery(o).not(n).length)throw"then and else statements must be the same type";this._condition=e,this._then_statement=t,this._else_statement=i},pyson:function(){return{__class__:"If",c:this._condition,t:this._then_statement,e:this._else_statement}},types:function(){return this._then_statement instanceof Sao.PYSON.PYSON?this._then_statement.types():[typeof this._then_statement]},__string_params__:function(){return[this._condition,this._then_statement,this._else_statement]}}),Sao.PYSON.If.eval_=function(e,t){return e.c?e.t:e.e},Sao.PYSON.If.init_from_object=function(e){return new Sao.PYSON.If(e.c,e.t,e.e)},Sao.PYSON.eval.Get=function(e,t,i){return new Sao.PYSON.Get(e,t,i)},Sao.PYSON.Get=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i){if(Sao.PYSON.Get._super.init.call(this),void 0===i&&(i=null),e instanceof Sao.PYSON.PYSON){if(jQuery(e.types()).not(["object"]).length||jQuery(["object"]).not(e.types()).length)throw"obj must be a dict"}else if(!(e instanceof Object))throw"obj must be a dict";if(this._obj=e,t instanceof Sao.PYSON.PYSON){if(jQuery(t.types()).not(["string"]).length||jQuery(["string"]).not(t.types()).length)throw"key must be a string"}else if("string"!=typeof t)throw"key must be a string";this._key=t,this._default=i},pyson:function(){return{__class__:"Get",v:this._obj,k:this._key,d:this._default}},types:function(){return this._default instanceof Sao.PYSON.PYSON?this._default.types():[typeof this._default]},__string_params__:function(){return[this._obj,this._key,this._default]}}),Sao.PYSON.Get.eval_=function(e,t){return e.k in e.v?e.v[e.k]:e.d},Sao.PYSON.Get.init_from_object=function(e){return new Sao.PYSON.Get(e.v,e.k,e.d)},Sao.PYSON.eval.In=function(e,t){return new Sao.PYSON.In(e,t)},Sao.PYSON.In=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t){if(Sao.PYSON.In._super.init.call(this),e instanceof Sao.PYSON.PYSON){if(jQuery(e.types()).not(["string","number"]).length)throw"key must be a string or a number"}else if(!~["string","number"].indexOf(typeof e))throw"key must be a string or a number";if(t instanceof Sao.PYSON.PYSON){if(jQuery(t.types()).not(["object"]).length||jQuery(["object"]).not(t.types()).length)throw"obj must be a dict or a list"}else if(!(t instanceof Object))throw"obj must be a dict or a list";this._key=e,this._obj=t},pyson:function(){return{__class__:"In",k:this._key,v:this._obj}},types:function(){return["boolean"]},__string_params__:function(){return[this._key,this._obj]}}),Sao.PYSON.In.eval_=function(e,t){return!!e.v&&(e.v.indexOf?Boolean(~e.v.indexOf(e.k)):!!e.v[e.k])},Sao.PYSON.In.init_from_object=function(e){return new Sao.PYSON.In(e.k,e.v)},Sao.PYSON.eval.Date=function(e,t,i,n,o,s){return new Sao.PYSON.Date(e,t,i,n,o,s)},Sao.PYSON.Date=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i,n,o,s,r){Sao.PYSON.Date._super.init.call(this),void 0===t&&(t=null),void 0===i&&(i=null),void 0===n&&(n=0),void 0===o&&(o=0),void 0===s&&(s=0),this._test(e=void 0===e?null:e,"year"),this._test(t,"month"),this._test(i,"day"),this._test(n,"delta_years"),this._test(s,"delta_days"),this._test(o,"delta_months"),this._year=e,this._month=t,this._day=i,this._delta_years=n,this._delta_months=o,this._delta_days=s,this._start=r||null},pyson:function(){return{__class__:"Date",y:this._year,M:this._month,d:this._day,dy:this._delta_years,dM:this._delta_months,dd:this._delta_days,start:this._start}},types:function(){return["object"]},_test:function(e,t){if(e instanceof Sao.PYSON.PYSON){if(jQuery(e.types()).not(["number","object"]).length)throw t+" must be an integer or None"}else if("number"!=typeof e&&null!==e)throw t+" must be an integer or None"},__string_params__:function(){return[this._year,this._month,this._day,this._delta_years,this._delta_months,this._delta_days,this._start]}}),Sao.PYSON.Date.eval_=function(e,t){var i=e.start;return(i=i&&i.isDateTime?Sao.Date(i.year(),i.month(),i.date()):i)&&i.isDate||(i=Sao.Date()),e.y&&i.year(e.y),e.M&&i.month(e.M-1),e.d&&i.date(e.d),e.dy&&i.add(e.dy,"y"),e.dM&&i.add(e.dM,"M"),e.dd&&i.add(e.dd,"d"),i},Sao.PYSON.Date.init_from_object=function(e){return new Sao.PYSON.Date(e.y,e.M,e.d,e.dy,e.dM,e.dd,e.start)},Sao.PYSON.eval.DateTime=function(e,t,i,n,o,s,r,a,c,l,d,h,u,_){return new Sao.PYSON.DateTime(e,t,i,n,o,s,r,a,c,l,d,h,u,_)},Sao.PYSON.DateTime=Sao.class_(Sao.PYSON.Date,{init:function(e,t,i,n,o,s,r,a,c,l,d,h,u,_,m){Sao.PYSON.DateTime._super.init.call(this,e,t,i,a,c,l,m),void 0===o&&(o=null),void 0===s&&(s=null),void 0===r&&(r=null),void 0===d&&(d=0),void 0===h&&(h=0),void 0===u&&(u=0),void 0===_&&(_=0),this._test(n=void 0===n?null:n,"hour"),this._test(o,"minute"),this._test(s,"second"),this._test(r,"microsecond"),this._test(d,"delta_hours"),this._test(h,"delta_minutes"),this._test(u,"delta_seconds"),this._test(_,"delta_microseconds"),this._hour=n,this._minute=o,this._second=s,this._microsecond=r,this._delta_hours=d,this._delta_minutes=h,this._delta_seconds=u,this._delta_microseconds=_},pyson:function(){var e=Sao.PYSON.DateTime._super.pyson.call(this);return e.__class__="DateTime",e.h=this._hour,e.m=this._minute,e.s=this._second,e.ms=this._microsecond,e.dh=this._delta_hours,e.dm=this._delta_minutes,e.ds=this._delta_seconds,e.dms=this._delta_microseconds,e},__string_params__:function(){var e=Sao.PYSON.DateTime._super.__string_params__.call(this);return[e[0],e[1],e[2],this._hour,this._minute,this._second,this._microsecond,e[3],e[4],e[5],this._delta_hours,this._delta_minutes,this._delta_seconds,this._delta_microseconds,e[6]]}}),Sao.PYSON.DateTime.eval_=function(e,t){var i=e.start;return(i=i&&i.isDate?Sao.DateTime.combine(i,Sao.Time()):i)&&i.isDateTime||(i=Sao.DateTime()).utc(),e.y&&i.year(e.y),e.M&&i.month(e.M-1),e.d&&i.date(e.d),null!==e.h&&i.hour(e.h),null!==e.m&&i.minute(e.m),null!==e.s&&i.second(e.s),null!==e.ms&&i.milliseconds(e.ms/1e3),e.dy&&i.add(e.dy,"y"),e.dM&&i.add(e.dM,"M"),e.dd&&i.add(e.dd,"d"),e.dh&&i.add(e.dh,"h"),e.dm&&i.add(e.dm,"m"),e.ds&&i.add(e.ds,"s"),e.dms&&i.add(e.dms/1e3,"ms"),i},Sao.PYSON.DateTime.init_from_object=function(e){return new Sao.PYSON.DateTime(e.y,e.M,e.d,e.h,e.m,e.s,e.ms,e.dy,e.dM,e.dd,e.dh,e.dm,e.ds,e.dms)},Sao.PYSON.eval.TimeDelta=function(e,t,i){return new Sao.PYSON.TimeDelta(e,t,i)},Sao.PYSON.TimeDelta=Sao.class_(Sao.PYSON.PYSON,{init:function(e,t,i){function n(e,t){if(e instanceof Sao.PYSON.TimeDelta){if(jQuery(e.types()).not(["number"]).length)throw t+" must be an integer"}else if("number"!=typeof e)throw t+" must be an integer";return e}Sao.PYSON.TimeDelta._super.init.call(this),void 0===t&&(t=0),void 0===i&&(i=0),this._days=n(e=void 0===e?0:e,"days"),this._seconds=n(t,"seconds"),this._microseconds=n(i,"microseconds")},pyson:function(){return{__class__:"TimeDelta",d:this._days,s:this._seconds,m:this._microseconds}},types:function(){return["object"]},__string_params__:function(){return[this._days,this._seconds,this._microseconds]}}),Sao.PYSON.TimeDelta.eval_=function(e,t){return Sao.TimeDelta(e.d,e.s,e.m/1e3)},Sao.PYSON.TimeDelta.init_from_object=function(e){return new Sao.PYSON.TimeDelta(e.d,e.s,e.microseconds)},Sao.PYSON.eval.Len=function(e){return new Sao.PYSON.Len(e)},Sao.PYSON.Len=Sao.class_(Sao.PYSON.PYSON,{init:function(e){if(Sao.PYSON.Len._super.init.call(this),e instanceof Sao.PYSON.PYSON){if(jQuery(e.types()).not(["object","string"]).length||jQuery(["object","string"]).not(e.types()).length)throw"value must be an object or a string"}else if("object"!=typeof e&&"string"!=typeof e)throw"value must be an object or a string";this._value=e},pyson:function(){return{__class__:"Len",v:this._value}},types:function(){return["integer"]},__string_params__:function(){return[this._value]}}),Sao.PYSON.Len.eval_=function(e,t){return("object"==typeof e.v?Object.keys(e.v):e.v).length},Sao.PYSON.Len.init_from_object=function(e){return new Sao.PYSON.Len(e.v)}}(),function(){"use strict";Sao.Session=Sao.class_(Object,{init:function(e,t){this.user_id=null,this.session=null,this.cache=new i,this.prm=jQuery.when(),this.database=e,this.login=t,this.restore(),this.context={},this.restore_context(),Sao.Session.current_session||(Sao.Session.current_session=this)},get_auth:function(){return e=this.login+":"+this.user_id+":"+this.session,window.btoa(unescape(encodeURIComponent(e)));var e},do_login:function(e){var t=jQuery.Deferred(),i=this.login,n=JSON.parse(localStorage.getItem("sao_device_cookies")),o=null;n&&n[this.database]&&(o=n[this.database][this.login]);return new Sao.Login(function(e){return e.device_cookie=o,{method:"common.db.login",params:[i,e,Sao.i18n.getlang()]}},this).run().then(function(e){this.login=i,this.user_id=e[0],this.session=e[1],this.store(),this.renew_device_cookie(),t.resolve()}.bind(this),function(){this.user_id=null,this.session=null,this.store(),t.reject()}.bind(this)),t.promise()},do_logout:function(){if(!this.user_id||!this.session)return jQuery.when();var e=jQuery.ajax({headers:{Authorization:"Session "+this.get_auth()},contentType:"application/json",data:JSON.stringify({id:0,method:"common.db.logout",params:[]}),dataType:"json",url:"/"+this.database+"/",type:"post"});return this.unstore(),this.database=null,this.login=null,this.user_id=null,this.session=null,Sao.Session.current_session===this&&(Sao.Session.current_session=null),e},reload_context:function(){var e={method:"model.res.user.get_preferences",params:[!0,this.context]};return this.reset_context(),Sao.rpc(e,this).then(function(e){jQuery.extend(this.context,e),this.store_context()}.bind(this))},reset_context:function(){this.context={client:Sao.Bus.id}},restore_context:function(){this.reset_context();var e=sessionStorage.getItem("sao_context_"+this.database);null!==e&&jQuery.extend(this.context,Sao.rpc.convertJSONObject(JSON.parse(e)))},store_context:function(){var e=jQuery.extend({},this.context);delete e.client,e=JSON.stringify(Sao.rpc.prepareObject(e)),sessionStorage.setItem("sao_context_"+this.database,e)},restore:function(){var e;!this.database||this.session||null!==(e=localStorage.getItem("sao_session_"+this.database))&&(e=JSON.parse(e),this.login&&this.login!=e.login||(this.login=e.login,this.user_id=e.user_id,this.session=e.session))},store:function(){var e={login:this.login,user_id:this.user_id,session:this.session},e=JSON.stringify(e);localStorage.setItem("sao_session_"+this.database,e)},unstore:function(){localStorage.removeItem("sao_session_"+this.database)},renew_device_cookie:function(){var t=JSON.parse(localStorage.getItem("sao_device_cookies")),e=t&&this.database in t?t[this.database][this.login]:null;Sao.rpc({method:"model.res.user.device.renew",params:[e,{}]},this).done(function(e){t=(t=JSON.parse(localStorage.getItem("sao_device_cookies")))||{},this.database in t||(t[this.database]={}),t[this.database][this.login]=e,localStorage.setItem("sao_device_cookies",JSON.stringify(t))}.bind(this))}}),Sao.Session.login_dialog=function(){var e=new Sao.Dialog(Sao.i18n.gettext("Login"),"lg");return e.database_select=jQuery("<select/>",{class:"form-control",id:"database"}).hide(),e.database_input=jQuery("<input/>",{class:"form-control",id:"database"}).hide(),e.login_input=jQuery("<input/>",{class:"form-control",id:"login",placeholder:Sao.i18n.gettext("User name")}),e.body.append(jQuery("<div/>",{class:"form-group"}).append(jQuery("<label/>",{class:"control-label",for:"database"}).text(Sao.i18n.gettext("Database"))).append(e.database_select).append(e.database_input)).append(jQuery("<div/>",{class:"form-group"}).append(jQuery("<label/>",{class:"control-label",for:"login"}).text(Sao.i18n.gettext("User name"))).append(e.login_input)),e.button=jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(" "+Sao.i18n.gettext("Login")).appendTo(e.footer),e},Sao.Session.get_credentials=function(){function n(){return window.location.hash.replace(/^(#(!|))/,"").split("/",1)[0]||null}var o=jQuery.Deferred(),i=n(),s=new Sao.Session(i,null);if(s.session)return o.resolve(s),o;function r(){return a.modal.find("input,select").filter(":visible:not([readonly])").filter(function(){return!jQuery(this).val()})}var a=Sao.Session.login_dialog();return a.modal.modal({backdrop:!1,keyboard:!1}),a.modal.find("form").unbind().submit(function(e){var t,i;t=a.login_input.val(),i=a.database_select.val()||a.database_input.val(),a.modal.find(".has-error").removeClass("has-error"),t&&i?(a.button.focus(),a.button.prop("disabled",!0),a.modal.modal("hide"),s.database=i,s.login=t,s.restore(),(s.session?jQuery.when():s.do_login()).then(function(){o.resolve(s),a.modal.remove(),n()!=i&&(window.location="#"+i)},function(){a.button.prop("disabled",!1),a.modal.modal("show"),r().closest(".form-group").addClass("has-error"),r().first().focus()})):r().closest(".form-group").addClass("has-error"),e.preventDefault()}),a.modal.on("shown.bs.modal",function(){r().first().focus()}),jQuery.when(Sao.DB.list()).then(function(e){var t;1==(e=e||[]).length?(i=e[0],t=a.database_input):(t=a.database_select,e.forEach(function(e){t.append(jQuery("<option/>",{value:e,text:e}))})),t.prop("readonly",1==e.length),t.show(),t.val(i||"")},function(){a.database_input.show()}),o.promise()},Sao.Session.renew=function(e){if("pending"==e.prm.state())return e.prm;var t=jQuery.Deferred();return e.prm=t.promise(),e.do_login().then(t.resolve,function(){Sao.logout(),t.reject()}).done(function(){Sao.Bus.listen()}),e.prm},Sao.Session.current_session=null,Sao.Login=Sao.class_(Object,{init:function(e,t){this.func=e,this.session=t||Sao.Session.current_session},run:function(o){void 0===o&&(o={});var s=jQuery.Deferred(),e=Sao.common.processing.show(),t=this.func(o);t.id=0;t={contentType:"application/json",data:JSON.stringify(t),dataType:"json",url:"/"+this.session.database+"/",type:"post",complete:[function(){Sao.common.processing.hide(e)}]};this.session.user_id&&this.session.session&&(t.headers={Authorization:"Session "+this.session.get_auth()});t=jQuery.ajax(t);return t.done(function(e){if(null===e)Sao.common.warning.run("",Sao.i18n.gettext("Unable to reach the server.")),s.reject();else if(e.error){if(e.error[0].startsWith("401"))return this.run({}).then(s.resolve,s.reject);var t,i,n;e.error[0].startsWith("429")?Sao.common.message.run(Sao.i18n.gettext("Too many requests. Try again later."),"tryton-error").always(s.resolve):e.error[0].startsWith("404")?s.reject():"LoginException"!=e.error[0]?(Sao.common.error.run(e.error[0],e.error[1]),s.reject()):(t=e.error[1],i=t[0],n=t[1],this["get_"+t[2]](n).then(function(e){return o[i]=e,this.run(o).then(s.resolve,s.reject)}.bind(this),s.reject))}else s.resolve(e.result)}.bind(this)),t.fail(function(e,t,i){401==e.status?this.run({}).then(s.resolve,s.reject):429==e.status?Sao.common.message.run(Sao.i18n.gettext("Too many requests. Try again later."),"tryton-error").always(s.resolve):(Sao.common.error.run(t,i),s.reject())}.bind(this)),s.promise()},get_char:function(e){return Sao.common.ask.run(e)},get_password:function(e){return Sao.common.ask.run(e,!1)}});var i=Sao.class_(Object,{init:function(){this.store={}},cached:function(e){return e in this.store},set:function(e,t,i,n){i=new Date((new Date).getTime()+1e3*i),Sao.setdefault(this.store,e,{})[t]={expire:i,value:JSON.stringify(Sao.rpc.prepareObject(n))}},get:function(e,t){var i=new Date,n=Sao.setdefault(this.store,e,{})[t];if(n){if(!(n.expire<i))return Sao.rpc.convertJSONObject(jQuery.parseJSON(n.value));delete this.store[e][t]}},clear:function(e){e?this.store[e]={}:this.store={}}});Sao.DB={},Sao.DB.list=function(){var e=Sao.common.processing.show();return jQuery.ajax({contentType:"application/json",data:JSON.stringify({id:0,method:"common.db.list",params:[]}),dataType:"json",url:"/",type:"post",complete:[function(){Sao.common.processing.hide(e)}]}).then(function(e){return e.result})}}(),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(e,t){if(e.length!=t.length)return!1;for(var i=0;i<e.length;i++){var n=e[i],o=t[i];if(n instanceof Array&&o instanceof Array){if(!Sao.common.compare(n,o))return!1}else if(moment.isMoment(n)&&moment.isMoment(o)){if(n.isDate!=o.isDate&&n.isDateTime!=o.isDateTime&&n.valueOf()!=o.valueOf())return!1}else if(n instanceof Number||o instanceof Number){if(Number(n)!==Number(o))return!1}else if(n!=o)return!1}return!0},Sao.common.contains=function(e,t){for(var i=0;i<e.length;i++)if(Sao.common.compare(e[i],t))return!0;return!1},Sao.common.intersect=function(e,t){for(var i=0,n=0,o=[];i<e.length&&n<t.length;)e[i]<t[n]?i++:(e[i]>t[n]||(o.push(e[i]),i++),n++);return o},Sao.common.scrollIntoViewIfNeeded=function(e){var t=(e=e[0]).getBoundingClientRect();t.bottom>window.innerHeight&&e.scrollIntoView(!1),t.top<0&&e.scrollIntoView()},Sao.common.click_press=function(i,n){return function e(t){if("keypress"!=t.type||t.which==Sao.common.RETURN_KEYCODE)return n&&jQuery(this).off("click keypress",null,e),i(t)}},Sao.common.product=function(e,t){t=t||1;for(var i=[],n=0;n<t;)i=i.concat(e),n++;var o=[[]];return i.forEach(function(e){var i=[];o.forEach(function(t){e.forEach(function(e){i.push(t.concat([e]))})}),o=i}),o},Sao.common.selection=function(e,t,i){void 0===i&&(i=!1);var n=jQuery.Deferred();if(jQuery.isEmptyObject(t))return n.reject(),n;var o=Object.keys(t).sort();if(1==o.length&&!i){i=o[0];return n.resolve(t[i]),n}var s=new Sao.Dialog(e||Sao.i18n.gettext("Your selection:"),"selection-dialog");return o.forEach(function(e,t){jQuery("<div/>",{class:"radio"}).append(jQuery("<label/>").text(" "+e).prepend(jQuery("<input/>",{type:"radio",name:"selection",value:t}))).appendTo(s.body)}),s.body.find("input").first().prop("checked",!0),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){s.modal.modal("hide"),n.reject()}).appendTo(s.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){var e=s.body.find("input:checked").attr("value");s.modal.modal("hide"),n.resolve(t[o[e]])}).appendTo(s.footer),s.modal.on("hidden.bs.modal",function(e){jQuery(this).remove()}),s.modal.modal("show"),n},Sao.common.moment_format=function(e){return e.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(e){var t;return jQuery.isEmptyObject(e)&&(e="%x",!Sao.Session.current_session||(t=Sao.Session.current_session.context).locale&&t.locale.date&&(e=t.locale.date)),Sao.common.moment_format(e)},Sao.common.format_time=function(e,t){return t?t.format(Sao.common.moment_format(e)):""},Sao.common.parse_time=function(i,n){if(!n)return null;function e(e){var t=i.indexOf(e);if(~t){e=parseInt(n.slice(t,t+e.length),10);if(!isNaN(e))return e}return 0}return Sao.Time(e("%H"),e("%M"),e("%S"),e("%f"))},Sao.common.format_date=function(e,t){return t?t.format(Sao.common.moment_format(e)):""},Sao.common.parse_date=function(e,t){e=moment(t,Sao.common.moment_format(e));return e=e.isValid()?Sao.Date(e.year(),e.month(),e.date()):null},Sao.common.format_datetime=function(e,t){return t?t.format(Sao.common.moment_format(e)):""},Sao.common.parse_datetime=function(e,t){e=moment(t,Sao.common.moment_format(e));return e=e.isValid()?Sao.DateTime(e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.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(e,t){if(!e)return"";t=t||Sao.common.timedelta.DEFAULT_CONVERTER;var i=[],n=(e=e.asSeconds())<0?"-":"";e=Math.abs(e),t=Object.keys(Sao.common.timedelta._get_separator()).map(function(e){return[e,t[e]]});for(var o,s,r=[],a=0;a<t.length;a++){var c,l,d=t[a][0];(l=t[a][1])?(e-=(c=Math.floor(e/l))*l,r.push(c)):r.push(0)}for(a=0;a<t.length-3;a++)d=t[a][0],(l=r[a])&&i.push(l+Sao.common.timedelta._get_separator()[d]);return(jQuery(r.slice(-3)).is(function(e,t){return t})||jQuery.isEmptyObject(i))&&(s=(o=r.slice(-3))[0].toString().padStart(2,"0"),s+=":"+o[1].toString().padStart(2,"0"),(o[2]||e)&&(s+=":"+o[2].toString().padStart(2,"0")),i.push(s)),i=n+i.reduce(function(e,t){return e?e+" "+t:t}),e&&(jQuery(r.slice(-3)).is(function(e,t){return t})||(i+=" "),i+=(""+e.toFixed(6)).slice(1)),i},Sao.common.timedelta.parse=function(e,t){if(!e)return null;t=t||Sao.common.timedelta.DEFAULT_CONVERTER;var i,n,o=Sao.common.timedelta._get_separator();for(n in o)i=o[n],e=e.replace(i,i+" ");for(var s=0,r=e.split(" "),a=0;a<r.length;a++){var c=r[a];if(c.contains(":"))for(var l=c.split(":"),d=[t.h,t.m,t.s],h=0;h<Math.min(l.length,d.length);h++){var u=l[h],_=d[h],m=Math.abs(parseFloat(u))*_;isNaN(m)||(s+=m)}else{var p,f=!1;for(p in o)if(i=o[p],c.endsWith(i)){c=c.slice(0,-i.length),m=Math.abs(parseFloat(c))*t[p],isNaN(m)||(s+=m),f=!0;break}f||(m=Math.abs(parseFloat(c)),isNaN(m)||(s+=m))}}return e.contains("-")&&(s*=-1),Sao.TimeDelta(null,s)},Sao.common.ModelAccess=Sao.class_(Object,{init:function(){this.batchnum=100,this._models=[],this._access={}},load_models:function(e){e||(this._access={}),this._models=Sao.rpc({method:"model.ir.model.list_models",params:[{}]},Sao.Session.current_session,!1)},get:function(e){if(void 0!==this._access[e])return this._access[e];var t=this._models.indexOf(e);t<0&&(this.load_models(!1),t=this._models.indexOf(e));t=this._models.slice(Math.max(0,t-Math.floor(this.batchnum/2)),t+Math.floor(this.batchnum/2)),t=Sao.rpc({method:"model.ir.model.access.get_access",params:[t,{}]},Sao.Session.current_session,!1);return this._access=jQuery.extend(this._access,t),this._access[e]}}),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(e){this._models=e}.bind(this))},contains:function(e){return~this._models.indexOf(e)}}),Sao.common.MODELHISTORY=new Sao.common.ModelHistory,Sao.common.ModelName=Sao.class_(Object,{init:function(){this._names={}},load_names:function(){this._names=Sao.rpc({method:"model.ir.model.get_names",params:[{}]},Sao.Session.current_session,!1)},get:function(e){return jQuery.isEmptyObject(this._names)&&this.load_names(),this._names[e]||""},clear:function(){this._names={}}}),Sao.common.MODELNAME=new Sao.common.ModelName,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(e){this.searches=e}.bind(this))},get:function(e){return this.searches[e]||[]},add:function(t,i,n){return Sao.rpc({method:"model.ir.ui.view_search.create",params:[[{model:t,name:i,domain:this.encoder.encode(n)}],{}]},Sao.Session.current_session).then(function(e){e=e[0];void 0===this.searches[t]&&(this.searches[t]=[]),this.searches[t].push([e,i,n,!0])}.bind(this))},remove:function(t,i){return Sao.rpc({method:"model.ir.ui.view_search.delete",params:[[i],{}]},Sao.Session.current_session).then(function(){for(var e=0;e<this.searches[t].length;e++)if(this.searches[t][e][0]===i){this.searches[t].splice(e,1);break}}.bind(this))}}),Sao.common.VIEW_SEARCH=new Sao.common.ViewSearch,Sao.common.humanize=function(e){for(var t=["bytes","KB","MB","GB","TB","PB"],i=0,n=t.length;i<n;i++){if(e<1e3)return e.toPrecision(4)+" "+t[i];e/=1e3}},Sao.common.EvalEnvironment=function(e,t){var i;if("eval"==(t=void 0===t?"eval":t))i=e.get_eval();else for(var n in i={},e.model.fields){var o=e.model.fields[n];i[n]=o.get_on_change_value(e)}return i.id=e.id,e.group.parent&&Object.defineProperty(i,"_parent_"+e.group.parent_name,{enumerable:!0,get:function(){return Sao.common.EvalEnvironment(e.group.parent,t)}}),i.get=function(e,t){return this.hasOwnProperty(e)?this[e]:t},i},Sao.common.selection_mixin={},Sao.common.selection_mixin.init=function(){this.selection=null,this.help=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(t,i){t||(t={},(this.attributes.selection_change_with||[]).forEach(function(e){t[e]=null}));function e(e){e=jQuery.extend([],e),void 0!==this.attributes.sort&&!this.attributes.sort||e.sort(function(e,t){return e[1].localeCompare(t[1])}),this.selection=jQuery.extend([],e),this.help=this.attributes.help_selection||{},i&&i(this.selection,this.help)}var n=JSON.stringify(t),o=this.attributes.selection||[],s=(this.attributes.help_selection,o instanceof Array||n in this._values2selection?(n in this._values2selection&&(o=this._values2selection[n]),e.call(this,o),jQuery.when()):(s=(s=jQuery.isEmptyObject(this.attributes.selection_change_with)?this.model.execute(o,[]):this.model.execute(o,[t])).then(function(e){return this._values2selection[n]=e}.bind(this))).then(e.bind(this)));this.inactive_selection=[],this._selection_prm=s},Sao.common.selection_mixin.update_selection=function(t,i,a){this._selection_prm.done(function(){var n,o,s,r,e;i?(n=i.get_domain(t),"relation"in this.attributes?(o=i.get_context(t),(s=JSON.stringify([n,o]))in this._domain_cache&&(this.selection=this._domain_cache[s],this._last_domain=[n,o]),null!==this._last_domain&&Sao.common.compare(n,this._last_domain[0])&&JSON.stringify(o)==JSON.stringify(this._last_domain[1])?a&&a(this.selection,this.help):(e=["rec_name"],(r=this.attributes.help_field)&&e.push(r),(e=Sao.rpc({method:"model."+this.attributes.relation+".search_read",params:[n,0,null,null,e,o]},t.model.session)).done(function(e){var t=[];e.forEach(function(e){t.push([e.id,e.rec_name])}),this.nullable_widget&&t.push([null,""]);var i={};r&&e.forEach(function(e){i[e.id]=e[r]}),this._last_domain=[n,o],this._domain_cache[s]=t,this.selection=jQuery.extend([],t),this.help=i,a&&a(this.selection,this.help)}.bind(this)),e.fail(function(){this._last_domain=null,this.selection=[],a&&a(this.selection,this.help)}.bind(this)))):(e=this.attributes.selection_change_with||[],delete(e=t._get_on_change_args(e)).id,Sao.common.selection_mixin.init_selection.call(this,e,function(){Sao.common.selection_mixin.filter_selection.call(this,n,t,i),a&&a(this.selection,this.help)}.bind(this)))):a&&a(this.selection,this.help)}.bind(this))},Sao.common.selection_mixin.filter_selection=function(i,e,t){var n,o,s;jQuery.isEmptyObject(i)||(n=new Sao.common.DomainInversion,s=function(e){var t={};return t[this.field_name]=e[0],n.eval_domain(i,t)}.bind(this),s="reference"==t.description.type?(e=t.get_models(e),o=e,function(e){return~o.indexOf(e[0])||jQuery.isEmptyObject(o)}):s,this.selection=this.selection.filter(s))},Sao.common.selection_mixin.get_inactive_selection=function(e){if(!this.attributes.relation)return jQuery.when([]);for(var t=0,i=this.inactive_selection.length;t<i;t++)if(e==this.inactive_selection[t][0])return jQuery.when(this.inactive_selection[t]);return Sao.rpc({method:"model."+this.attributes.relation+".read",params:[[e],["rec_name"],{}]},Sao.Session.current_session).then(function(e){return this.inactive_selection.push([e[0].id,e[0].rec_name]),[e[0].id,e[0].rec_name]}.bind(this))},Sao.common.Button=Sao.class_(Object,{init:function(e,t,i,n){this.attributes=e,t?this.el=t:(this.el=jQuery("<button/>",{title:e.string||"",name:e.name||""}),this.el.text(e.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",n||"btn-default",i||""].join(" ")),this.el.attr("type","button"),this.icon.attr("aria-hidden",!0),this.set_icon(e.icon)},set_icon:function(e){if(!e)return this.icon.attr("src",""),void this.icon.hide();Sao.common.ICONFACTORY.get_icon_url(e).done(function(e){this.icon.attr("src",e),this.icon.show()}.bind(this))},set_state:function(e){var t=e?e.expr_eval(this.attributes.states||{}):{};if(t.invisible?this.el.hide():this.el.show(),this.el.prop("disabled",Boolean(t.readonly)),this.set_icon(t.icon||this.attributes.icon),this.attributes.rule&&(e?e.get_button_clicks(this.attributes.name):jQuery.when()).then(function(e){var t=this.el.children(".badge"),i=[],n="";if(!jQuery.isEmptyObject(e)){for(var o in e)i.push(e[o]);n=Sao.i18n.gettext("By: ")+i.join(Sao.i18n.gettext(", "))}t.text(i.length||""),t.attr("title",n)}.bind(this)),(void 0===this.attributes.type||"class"===this.attributes.type)&&e)for(var i=e.group.parent;i;){if(i.has_changed()){this.el.prop("disabled",!0);break}i=i.group.parent}}}),Sao.common.udlex=Sao.class_(Object,{init:function(e){var t=Sao.class_(Object,{init:function(e){this.stream=e.split(""),this.i=0},read:function(e){if(this.i>=this.stream.length)return null;var t=this.stream.slice(this.i,this.i+(e=void 0===e?1:e)).join();return this.i+=e,t}});this.instream=new t(e),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 0<this.pushback.length?this.pushback.shift():this.read_token()},read_token:function(){for(var e=!1,t=" ";;){var i=this.instream.read(1);if(null===this.state){this.token="";break}if(" "==this.state){if(!i){this.state=null;break}if(this.whitespace.contains(i)){if(this.token||e)break}else if(!this.commenters.contains(i))if(this.escape.contains(i))t="a",this.state=i;else if(~this.nowordchars.indexOf(i)){if(this.quotes.contains(i))this.state=i;else if(this.whitespace_split)this.token=i,this.state="a";else if(this.token=i,this.token||e)break}else this.token=i,this.state="a"}else if(this.quotes.contains(this.state)){if(e=!0,!i)throw"no closing quotation";i==this.state?this.state="a":this.escape.contains(i)&&this.escapedquotes.contains(this.state)?(t=this.state,this.state=i):this.token=this.token+i}else if(this.escape.contains(this.state)){if(!i)throw"no escaped character";this.quotes.contains(t)&&i!=this.state&&i!=t&&(this.token=this.token+this.state),this.token=this.token+i,this.state=t}else if("a"==this.state){if(!i){this.state=null;break}if(this.whitespace.contains(i)){if(this.state=" ",this.token||e)break}else if(!this.commenters.contains(i))if(this.quotes.contains(i))this.state=i;else if(this.escape.contains(i))t="a",this.state=i;else if(!~this.nowordchars.indexOf(i)||this.quotes.contains(i)||this.whitespace_split)this.token=this.token+i;else if(this.pushback.unshift(i),this.state=" ",this.token)break}}var n=this.token;return this.token="",n=!e&&""===n?null:n},next:function(){var e=this.get_token();return e==this.eof?null:e}}),Sao.common.DomainParser=Sao.class_(Object,{OPERATORS:["!=","<=",">=","=","!","<",">"],init:function(e,t){this.fields={},this.strings={},this.context=t,this.update_fields(e)},update_fields:function(e,t,i){for(var n in t=t||"",i=i||"",e){var o,s=e[n];!s.searchable&&void 0!==s.searchable||"rec_name"===n||(s=jQuery.extend({},s),o=t?t+"."+n:n,n=i?i+"."+s.string:s.string,s.string=n,s.name=o,this.fields[o]=s,(s=(this.strings[s.string.toLowerCase()]=s).relation_fields)&&this.update_fields(s,o,n))}},parse:function(t){try{for(var e=new Sao.common.udlex(t),i=[];;){var n=e.next();if(null===n)break;i.push(n)}return i=this.group_operator(i),i=this.parenthesize(i),i=this.group(i),i=this.operatorize(i,"or"),i=this.operatorize(i,"and"),i=this.parse_clause(i),this.simplify(i)}catch(e){if("no closing quotation"==e)return this.parse(t+'"');throw e}},stringable:function(e){var t=function(e){if(!e)return!0;var t=function(e){return e instanceof Array};if((~["AND","OR"].indexOf(e[0])||t(e[0]))&&e.slice(1).every(t))return this.stringable(e);var i=e[0],t=e[2];if((i=i.endsWith(".rec_name")?i.slice(0,-9):i)in this.fields){var n=this.fields[i];if(~["many2one","one2one","one2many","many2many"].indexOf(n.type)){e=function(e){if("many2one"==n.type){if("string"!=typeof e&&null!==e)return!1}else if("string"!=typeof e)return!1;return!0};return t instanceof Array?t.every(e):e(t)}return"multiselection"!=n.type||(!t||jQuery.isEmptyObject(t)||t instanceof Array)}return"rec_name"==i}.bind(this);return!e||(e=~["AND","OR"].indexOf(e[0])?e.slice(1):e).every(t)},string:function(e){var t=(t=function(e){if(jQuery.isEmptyObject(e))return"";if("string"!=typeof e[0]||~["AND","OR"].indexOf(e[0]))return"("+this.string(e)+")";var t=e[0],i=e[1],n=e[2];if(!((t=t.endsWith(".rec_name")?t.slice(0,-9):t)in this.fields))return this.is_full_text(n)&&(n=n.slice(1,-1)),this.quote(n);var o=this.fields[t],t=null;3<e.length&&(t=e[3]),i.contains("ilike")&&(this.is_full_text(n)?n=n.slice(1,-1):this.is_like(n)||(i="ilike"==i?"=":"!",n=this.unescape(n)));e=this.default_operator(o);e==i.trim()?(i="",~this.OPERATORS.indexOf(n)&&(i='"" ')):i.contains(e)&&(i.contains("not")||i.contains("!"))&&(i=i.replace(e,"").replace("not","!").trim()),i.endsWith("in")&&(i="not in"==i?"!":"");t=this.format_value(o,n,t);return~this.OPERATORS.indexOf(i)&&~["char","text","selection"].indexOf(o.type)&&""===n&&(t='""'),this.quote(o.string)+": "+i+t}).bind(this);if(jQuery.isEmptyObject(e))return"";var i=" ";return"AND"!=e[0]&&"OR"!=e[0]||("OR"==e[0]&&(i=" or "),e=e.slice(1)),e.map(t).join(i)},completion:function(e){var t=[],i=this.parse(e),n=0;for(_=e.length;0<_&&(")"!=e[_]&&" "!=e[_]);_--)")"==e[_]&&(n+=1);var o=this.ending_clause(i),s=o[0],r=o[1]-n,o=this.string(i);(o=0<r?o.substring(0,o.length-r):o)!=e&&t.push(o);function a(e,t){return 0<t?e.substring(0,e.length-t):e}var c,l,d,h;if(null!==s&&0===n)for(var u=this.complete(s),_=0,m=u.length;_<m;_++)c=u[_],c=this.string(this.replace_ending_clause(i,c)),t.push(a(c,r));if(0<e.length){if(" "!=e.substr(e.length-1,1))return t;if(2<=e.length||":"==e.substr(e.length-2,1))return t}for(h in this.strings){l=this.strings[h],p="","ilike"!=(d=this.default_operator(l))&&"not ilike"!=d||(p=this.likify(p));var p=this.append_ending_clause(i,[l.name,d,p],r),p=this.string(p);t.push(a(p,r))}return t},complete:function(e){var t,i,n,o,s=[];if(1==e.length?t=e[0]:3==e.length?(t=e[0],i=e[1],n=e[2]):(t=e[0],i=e[1],n=e[2],e[3],t.endsWith(".rec_name")&&(t=t.substring(0,t.length-9))),"rec_name"==t&&("ilike"==i&&((e=n.replace(/%%/g,"__")).startsWith("%")||e.endsWith("%")?n=e.substring(1,e.length-1):~e.indexOf("%")&&(n=n.replace(/%%/g,"%")),i=null),t=n,n=""),!((t=null==t?"":t).toLowerCase()in this.strings||t in this.fields)){for(var r in this.strings)(o=this.strings[r]).string.toLowerCase().startsWith(t.toLowerCase())&&(n="","ilike"==(i=this.default_operator(o))&&(n=this.likify(n)),s.push([o.name,i,n]));return s}if(o=t in this.fields?this.fields[t]:this.strings[t.toLowerCase()],i)for(var a=this.complete_value(o,n),c=0,l=a.length;c<l;c++)s.push([o.name,i,a[c]]);else n="","ilike"!=(i=this.default_operator(o))&&"not ilike"!=i||(n=this.likify(n)),s.push([o.name,i,n]);return s},is_subdomain:function(e){return e instanceof Array&&!e.clause},ending_clause:function(e,t){if(void 0===t&&(t=0),0===e.length)return[null,t];e=e[e.length-1];return this.is_subdomain(e)?this.ending_clause(e,t+1):[e,t]},replace_ending_clause:function(e,t){for(var i=[],n=0,o=e.length-1;n<o;n++)i.push(e[n]);return this.is_subdomain(e[n])?i.push(this.replace_ending_clause(e[n],t)):i.push(t),i},append_ending_clause:function(e,t,i){if(0===e.length)return[t];var n=e.slice(0,-1),e=e[e.length-1];return this.is_subdomain(e)?n.push(this.append_ending_clause(e,t,i-1)):(n.push(e),0===i&&n.push(t)),n},complete_value:function(s,r){var e=function(){for(var e,t=[],i=null!==r?r:"",i=(i=r instanceof Array?r[r.length-1]||"":i).replace(/^%*|%*$/g,""),n=0,o=s.selection.length;n<o;n++)e=s.selection[n][0],s.selection[n][1].toLowerCase().startsWith(i.toLowerCase())&&(r instanceof Array?t.push(r.slice(0,-1).concat([e])):t.push(e));return t},e={boolean:function(){return null==r?[!0,!1]:r?[!1]:[!0]},selection:e,multiselection:e,reference:function(){for(var e,t=[],i=null!==r?r:"",i=(i=r instanceof Array?r[r.length-1]:i).replace(/^%*|%*$/g,""),n=0,o=s.selection.length;n<o;n++)e=s.selection[n][0],s.selection[n][1].toLowerCase().startsWith(i.toLowerCase())&&(r instanceof Array?t.push(r.slice(0,-1).concat([e])):t.push(this.likify(e)));return t}.bind(this),datetime:function(){return[Sao.Date(),Sao.DateTime().utc()]},date:function(){return[Sao.Date()]},time:function(){return[Sao.Time()]}};return s.type in e?e[s.type]():[]},group_operator:function(e){var t=e[0],i=[];return e.slice(1).forEach(function(e){t="="==e&&t&&~this.OPERATORS.indexOf(t+e)?(i.push(t+e),null):(null!==t&&i.push(t),e)}.bind(this)),null!==t&&i.push(t),i},parenthesize:function(e){var t=[],i=t,n=[];return e.forEach(function(e,t){void 0!==i&&("("==e?(n.push(i),i=i[i.push([])-1]):")"==e?i=n.pop():i.push(e))}),t},group:function(e){var t=[],l=(l=function(e){function t(e){(e=[e]).clause=!0,o.push(e)}var o=[],i=e.indexOf(":");if(!~i)return e.forEach(t),o;for(var n=0;n<i;n++)if((s=e.slice(n,i).join(" ")).toLowerCase()in this.strings){jQuery.isEmptyObject(e.slice(0,n))?t(null):e.slice(0,n).forEach(t);var s=[s],r=[""].concat(this.OPERATORS);i+1<e.length&&~r.indexOf(e[i+1])?(s=s.concat([e[i+1]]),i+=1):s=s.concat([null]);for(var a,c=[];i+2<e.length&&";"==e[i+2];)c.push(e[i+1]),i+=2;l(e.slice(i+1)).forEach(function(i,n){return function(e){var t;jQuery.isEmptyObject(i)?o.push(e):(jQuery.isEmptyObject(n)?(t=i.concat(e)).clause=!0:(null!==e[0]&&n.push(e[0]),(t=i.concat([n])).clause=!0),o.push(t),i.splice(0,i.length))}}(s,c)),jQuery.isEmptyObject(s)||(jQuery.isEmptyObject(c)?(a=s.concat([null])).clause=!0:(a=s.concat([c])).clause=!0,o.push(a));break}return o}).bind(this),i=[];return e.forEach(function(e){this.is_generator(e)?(l(i).forEach(function(e){Sao.common.compare(e,[null])||t.push(e)}),i=[],t.push(this.group(e))):i.push(e)}.bind(this)),l(i).forEach(function(e){Sao.common.compare(e,[null])||t.push(e)}),t},is_generator:function(e){return e instanceof Array&&void 0===e.clause},operatorize:function(e,t){var i=[];t=t||"or";for(var n=function(e){return e instanceof Array?Sao.common.compare(e,[t]):e==t},o=(e=jQuery.extend([],e)).shift();n(o);)o=e.shift();if(void 0===o)return i;this.is_generator(o)&&(o=this.operatorize(o,t));for(var s=null;!jQuery.isEmptyObject(e);)if(s=e.shift(),n(s=this.is_generator(s)&&!n(s)?this.operatorize(s,t):s)){for(s=e.shift();n(s);)s=e.shift();void 0!==(s=this.is_generator(s)?this.operatorize(s,t):s)?o=[t.toUpperCase(),o,s]:n(o)||(i.push([t.toUpperCase(),o]),o=null),s=null}else n(o)||i.push(o),o=s;return jQuery.isEmptyObject(e)&&(null===s||n(s)?null===o||n(o)||i.push(o):i.push(s)),i},_clausify:function(e){return e.clause=!0,e},parse_clause:function(e){var c=[];return e.forEach(function(e){var t,i,n,o,s,r,a;this.is_generator(e)?c.push(this.parse_clause(e)):"OR"===e||"AND"===e?c.push(e):1!=e.length||e[0]instanceof Array?3==e.length&&e[0].toLowerCase()in this.strings&&(e[0],t=e[1],s=e[2],n=(i=this.strings[e[0].toLowerCase()]).name,o=null,"reference"==i.type?(o=(r=this.split_target_value(i,s))[0],s=r[1],o&&(n+=".rec_name")):"multiselection"==i.type&&(null===s||s instanceof Array||(s=[s])),t=t||this.default_operator(i),"!"==(t=s instanceof Array&&"multiselection"!=i.type?"!"==t?"not in":"in":t)&&(t=this.negate_operator(this.default_operator(i))),null===s&&t.endsWith("in")&&(t=t.startsWith("not")?"!=":"="),~["integer","float","numeric","datetime","date","time"].indexOf(i.type)&&"string"==typeof s&&s.contains("..")?(a=s.split("..",2),r=this.convert_value(i,a[0],this.context),a=this.convert_value(i,a[1],this.context),c.push([this._clausify([n,">=",r]),this._clausify([n,"<=",a])])):(s instanceof Array?(s=s.map(function(e){return this.convert_value(i,e,this.context)}.bind(this)),~["many2one","one2many","many2many","one2one","many2many","one2one"].indexOf(i.type)&&(n+=".rec_name")):s=this.convert_value(i,s,this.context),t.contains("like")&&(s=this.likify(s)),o?c.push(this._clausify([n,t,s,o])):c.push(this._clausify([n,t,s])))):c.push(this._clausify(["rec_name","ilike",this.likify(e[0])]))}.bind(this)),c},likify:function(e,t){if(!e)return"%";t=e.replace((t=t||"\\")+"%","").replace(t+"_","");return t.contains("%")||t.contains("_")?e:"%"+e+"%"},is_full_text:function(e,t){t=t||"\\";for(var i=e;"%"==i.charAt(0);)i=i.substring(1);for(;"%"==i.charAt(i.length-1);)i=i.substring(0,i.length-1);return!(i=i.replace(t+"%","").replace(t+"_","")).contains("%")&&!i.contains("_")&&(e.startsWith("%")&&e.endsWith("%"))},is_like:function(e,t){t=e.replace((t=t||"\\")+"%","").replace(t+"_","");return t.contains("%")||t.contains("_")},unescape:function(e,t){return e.replace((t=t||"\\")+"%","%").replace(t+"_","_")},quote:function(e){if("string"!=typeof e)return e;(e=e.contains("\\")?e.replace(new RegExp("\\\\","g"),"\\\\"):e).contains('"')&&(e=e.replace(new RegExp('"',"g"),'\\"'));for(var t=[":"," ","(",")"].concat(this.OPERATORS),i=0;i<t.length;i++){var n=t[i];if(e.contains(n))return'"'+e+'"'}return e},default_operator:function(e){return~["char","text","many2one","many2many","one2many","reference","one2one"].indexOf(e.type)?"ilike":"multiselection"==e.type?"in":"="},negate_operator:function(e){switch(e){case"ilike":return"not ilike";case"=":return"!=";case"in":return"not in"}},time_format:function(e){return new Sao.PYSON.Decoder({}).decode(e.format)},split_target_value:function(e,t){var i=null;if("string"==typeof t)for(var n=0;n<e.selection.length;n++){var o=e.selection[n],s=o[0],o=o[1];if(t.toLowerCase().startsWith(o.toLowerCase()+",")){i=s,t=t.slice(o.length+1);break}}return[i,t]},convert_value:function(n,o,e){e=e||{};var t=function(){if("string"==typeof o)for(var e=0;e<n.selection.length;e++){var t=n.selection[e],i=t[0],t=t[1];if(o.toLowerCase()==t.toLowerCase())return i}return o},t={boolean:function(){return"string"==typeof o?[Sao.i18n.gettext("y"),Sao.i18n.gettext("Yes"),Sao.i18n.gettext("True"),Sao.i18n.gettext("t"),"1"].some(function(e){return e.toLowerCase().startsWith(o.toLowerCase())}):null},float:function(){var e=Number(n.factor||1),t=Number(o);return isNaN(t)||""===o||null===o?null:t/e},integer:function(){var e=Number(n.factor||1,10),t=parseInt(o,10);return isNaN(t)?null:t/e},numeric:function(){var e=Number(n.factor||1),t=Number(o);return isNaN(t.valueOf())||""===o||null===o?null:new Sao.Decimal(t/e)},selection:t,multiselection:t,reference:t,datetime:function(){return Sao.common.parse_datetime(Sao.common.date_format(e.date_format)+" "+this.time_format(n),o)}.bind(this),date:function(){return Sao.common.parse_date(Sao.common.date_format(e.date_format),o)},time:function(){try{return Sao.common.parse_time(this.time_format(n),o)}catch(e){return null}}.bind(this),timedelta:function(){var e=null;return n.converter&&(e=this.context[n.converter]),Sao.common.timedelta.parse(o,e)}.bind(this),many2one:function(){return""===o?null:o}}[n.type];return t?t():o},format_value:function(o,s,t,e){void 0===t&&(t=null),e=e||{};function i(){if(o.selection instanceof Array)for(var e=0;e<o.selection.length;e++)if(o.selection[e][0]==s)return o.selection[e][1];return s||""}var n=function(){if(!s&&0!==s&&s!==new Sao.Decimal(0))return"";var e,t=0,i=Number(o.factor||1),n=String(s*i);return n.contains("e")&&(e=n.split("e")[1],n=n.split("e")[0],t-=parseInt(e)),n.contains(".")&&(t+=n.replace(/0+$/,"").split(".")[1].length),(s*i).toFixed(t)},n={boolean:function(){return!1===s?Sao.i18n.gettext("False"):s?Sao.i18n.gettext("True"):""},integer:function(){var e=Number(o.factor||1);return s||0===s?""+parseInt(parseInt(s,10)*e,10):""},float:n,numeric:n,selection:i,multiselection:i,reference:function(){if(!t)return i();for(var e=0;e<o.selection.length;e++)if(o.selection[e][0]==t){t=o.selection[e][1];break}return t+","+s},datetime:function(){return s?s.isDate||!(s.hour()||s.minute()||s.second())?Sao.common.format_date(Sao.common.date_format(e.date_format),s):Sao.common.format_datetime(Sao.common.date_format(e.date_format)+" "+this.time_format(o),s):""}.bind(this),date:function(){return Sao.common.format_date(Sao.common.date_format(e.date_format),s)},time:function(){return s?Sao.common.format_time(this.time_format(o),s):""}.bind(this),timedelta:function(){if(!s||!s.valueOf())return"";var e=null;return o.converter&&(e=this.context[o.converter]),Sao.common.timedelta.format(s,e)}.bind(this),many2one:function(){return null===s?"":s}};if(s instanceof Array)return s.map(function(e){return this.format_value(o,e)}.bind(this)).join(";");n=n[o.type];return n?this.quote(n(s)):null===s?"":this.quote(s)},simplify:function(e){return this.is_subdomain(e)?1==e.length&&this.is_subdomain(e[0])?this.simplify(e[0]):2!=e.length||"AND"!=e[0]&&"OR"!=e[0]||!this.is_subdomain(e[1])?(e=3==e.length&&("AND"==e[0]||"OR"==e[0])&&this.is_subdomain(e[1])&&e[0]==e[1][0]?this.simplify(e[1]).concat([e[2]]):e).map(this.simplify.bind(this)):this.simplify(e[1]):e}}),Sao.common.DomainInversion=Sao.class_(Object,{and:function(e,t){return e&&t},or:function(e,t){return e||t},OPERATORS:{"=":function(e,t){return Sao.common.DomainInversion.equals(e,t)},">":function(e,t){return t<e},"<":function(e,t){return e<t},"<=":function(e,t){return e<=t},">=":function(e,t){return t<=e},"!=":function(e,t){return!Sao.common.DomainInversion.equals(e,t)},in:function(e,t){return Sao.common.DomainInversion.in_(e,t)},"not in":function(e,t){return!Sao.common.DomainInversion.in_(e,t)},like:function(e,t){return Sao.common.DomainInversion.sql_like(e,t,!1)},ilike:function(e,t){return Sao.common.DomainInversion.sql_like(e,t,!0)},"not like":function(e,t){return!Sao.common.DomainInversion.sql_like(e,t,!1)},"not ilike":function(e,t){return!Sao.common.DomainInversion.sql_like(e,t,!0)},child_of:function(){return!0},"not child_of":function(){return!0}},locale_part:function(e,t,i){return void 0===i&&(i="id"),e===t?i:e.contains(".")?e.split(".").slice(1).join("."):e},is_leaf:function(e){return e instanceof Array&&2<e.length&&"string"==typeof e[1]},constrained_leaf:function(e,t){void 0===t&&(t=this.and);e[0];var i=e[1];e[2];return!!("="===i&t===this.and)},eval_leaf:function(e,t,i){void 0===i&&(i=this.and);var n=e[0],i=e[1],e=e[2];if(n.contains("."))return Boolean(t[n.split(".")[0]]);n=t[n];return~["=","!="].indexOf(i)||null!=n&&null!=e||~["in","not in"].indexOf(i)&&null==n&&e instanceof Array&&~e.indexOf(null)?((n=(e=n&&n._isAMomentObject&&!e?(n.isDateTime?Sao.DateTime:Sao.Date).min:e)&&e._isAMomentObject&&!n?(e.isDateTime?Sao.DateTime:Sao.Date).min:n)instanceof Array&null===e&&(e=[]),"string"==typeof n&&e instanceof Array&&2==e.length?e=e.join(","):n instanceof Array&&"string"==typeof e&&2==n.length&&(n=n.join(",")),!((i=~["=","!="].indexOf(i)&&n instanceof Array&&"number"==typeof e?{"=":"in","!=":"not in"}[i]:i)in this.OPERATORS)||this.OPERATORS[i](n,e)):void 0},inverse_leaf:function(e){return~["AND","OR"].indexOf(e)?e:this.is_leaf(e)?!e[1].contains("child_of")||e[0].contains(".")||3==e.length?e:[e[3]].concat(e.slice(1)):e.map(this.inverse_leaf.bind(this))},filter_leaf:function(e,t,i){return~["AND","OR"].indexOf(e)?e:this.is_leaf(e)?e[0].startsWith(t)&&3<e.length&&e[3]!==i?["id","=",null]:e:e.map(function(e){return this.filter_leaf(e,t,i)}.bind(this))},eval_domain:function(e,t,i){return void 0===i&&(i=this.and),this.is_leaf(e)?this.eval_leaf(e,t,i):!(!jQuery.isEmptyObject(e)||i!=this.and)||(!jQuery.isEmptyObject(e)||i!=this.or)&&("AND"==e[0]?this.eval_domain(e.slice(1),t):"OR"==e[0]?this.eval_domain(e.slice(1),t,this.or):i(Boolean(this.eval_domain(e[0],t)),Boolean(this.eval_domain(e.slice(1),t,i))))},localize_domain:function(e,t,i){if(~["AND","OR",!0,!1].indexOf(e))return e;if(this.is_leaf(e)){if(e[1].contains("child_of"))return 1<e[0].split(".").length?[e[0].split(".").slice(1).join(".")].concat(e.slice(1)):3==e.length?e:[e[3]].concat(e.slice(1,-1));var n="id";"string"==typeof e[2]&&(n="rec_name");var o=i?3:4;return[this.locale_part(e[0],t,n)].concat(e.slice(1,o)).concat(e.slice(4))}return e.map(function(e){return this.localize_domain(e,t,i)}.bind(this))},prepare_reference_domain:function(e,t){function i(e){var t,i,n=null,o=null;return"string"==typeof e&&e.contains(",")?((i=(t=e.split(",")).splice(0,1)).push(t.join(",")),n=i[0],"%"!=(o=i[1])&&(o=parseInt(o,10),isNaN(o)&&(n=null,o=e))):o=e instanceof Array&&2==e.length&&"string"==typeof e[0]&&("number"==typeof e[1]||"%"==e[1])?(n=e[0],e[1]):e,[n,o]}var n,o,s;if(~["AND","OR"].indexOf(e))return e;if(this.is_leaf(e)){if(e[0]!=t)return e;if("="==e[1]||"!="==e[1]){if(n=(s=i(e[2]))[0],o=s[1],n)return"%"==o?"="==e[1]?[t+".id","!=",null,n]:[t,"not like",e[2]]:[t+".id",e[1],o,n]}else if("in"==e[1]||"not in"==e[1]){for(var r={},a=!1,c=0;c<e[2].length;c++){if(n=(s=i(e[2][c]))[0],o=s[1],!n){a=!0;break}n in r||(r[n]=[]),r[n].push(o)}if(!a){var l,d="in"==e[1]?["OR"]:["AND"];for(n in r)~(l=r[n]).indexOf("%")?"in"==e[1]?d.push([t+".id","!=",null,n]):d.push([t,"not like",n+",%"]):d.push([t+".id",e[1],l.map(Number),n]);return d}}return[]}return e.map(function(e){return this.prepare_reference_domain(e,t)}.bind(this))},extract_reference_models:function(e,s){if(~["AND","OR"].indexOf(e))return[];if(this.is_leaf(e))return e[0].split(".",1)[0]==s&&3<e.length?[e[3]]:[];var r=[];return e.map(function(e){for(var t=this.extract_reference_models(e,s),i=0,n=t.length;i<n;i++){var o=t[i];~r.indexOf(o)||r.push(o)}}.bind(this)),r},simplify:function(e){return this.is_leaf(e)||~["OR","AND"].indexOf(e)?e:e instanceof Array&&1==e.length&&~["OR","AND"].indexOf(e[0])?[]:e instanceof Array&&1==e.length&&!this.is_leaf(e[0])?this.simplify(e[0]):e instanceof Array&&2==e.length&&~["AND","OR"].indexOf(e[0])?[this.simplify(e[1])]:e.map(this.simplify.bind(this))},merge:function(e,t){if(jQuery.isEmptyObject(e)||~["AND","OR"].indexOf(e))return[];var i="OR"==e[0]?"OR":"AND";return this.is_leaf(e)?[e]:void 0===t?[i].concat([].concat.apply([],e.map(function(e){return this.merge(e,i)}.bind(this)))):i==t?[].concat.apply([],e.map(function(e){return this.merge(e,i)}.bind(this))):[this.merge(e)]},concat:function(e,t){var i=[];return t&&i.push(t),e.forEach(function(e){jQuery.isEmptyObject(e)||i.push(e)}),this.simplify(this.merge(i))},unique_value:function(e){if(e instanceof Array&&1==e.length){var t=(e=e[0])[0],i=e[2],n=0;if(4==e.length&&t.endsWith(".id")&&(n=1,i=[e[3],i]),t.split(".").length-1==n&&"="==e[1])return[!0,e[1],i]}return[!1,null,null]},parse:function(e){var t=Sao.common.DomainInversion.And,i=Sao.common.DomainInversion.Or;if(this.is_leaf(e))return e;if(jQuery.isEmptyObject(e))return new t([]);if("OR"===e[0])return new i(e.slice(1));i=0;return"AND"===e[0]&&(i=1),new t(e.slice(i))},domain_inversion:function(e,t,i){void 0===i&&(i={});e=this.parse(e);return!~e.variables.indexOf(t)||e.inverse(t,i)}}),Sao.common.DomainInversion.equals=function(e,t){return e instanceof Array&&t instanceof Array?Sao.common.compare(e,t):moment.isMoment(e)&&moment.isMoment(t)?e.isDate==t.isDate&&e.isDateTime==t.isDateTime&&e.valueOf()==t.valueOf():e instanceof Number||t instanceof Number?Number(e)===Number(t):e===t},Sao.common.DomainInversion.in_=function(e,t){if(e instanceof Array){if(t instanceof Array){for(var i=0,n=e.length;i<n;i++)if(~t.indexOf(e[i]))return!0;return!1}return Boolean(~e.indexOf(t))}return Boolean(~t.indexOf(e))},Sao.common.DomainInversion.sql_like=function(e,t,i){for(var n,o=!1,s=[],r=t.split(/(.|\\)/),a=1,c=r.length;a<c;a+=2)n=r[a],o?("%"==n||"_"==n?s.push(n):s.push("\\",n),o=!1):"\\"==n?o=!0:"_"==n?s.push("."):"%"==n?s.push(".*"):s.push(n);t.startsWith("%")||s.splice(0,0,"^"),t.endsWith("%")||s.push("$");i=i?"i":"";return new RegExp(s.join(""),i).test(e)},Sao.common.DomainInversion.And=Sao.class_(Object,{init:function(e){this.domain_inversion=new Sao.common.DomainInversion,this.branches=e.map(this.domain_inversion.parse.bind(this.domain_inversion)),this.variables=[];for(var t=0,i=this.branches.length;t<i;t++){var n=this.branches[t];this.domain_inversion.is_leaf(n)?this.variables.push(this.base(n[0])):n instanceof Sao.common.DomainInversion.And&&(this.variables=this.variables.concat(n.variables))}},base:function(e){return e.contains(".")?e.split(".")[0]:e},inverse:function(e,t){for(var i=Sao.common.DomainInversion,n=[],o=0,s=this.branches.length;o<s;o++){var r=this.branches[o];if(r instanceof i.And){var a=r.inverse(e,t),c="boolean"==typeof a;if(~r.variables.indexOf(e))if(c){if(!a)return!1}else n.push(a)}else if(this.domain_inversion.is_leaf(r)&&this.base(r[0])===e)n.push(r);else{a=r[0];if(a in t&&!(a in t&&(this.domain_inversion.eval_leaf(r,t,this.domain_inversion.and)||this.domain_inversion.constrained_leaf(r,this.domain_inversion.and))))return!1;n.push(!0)}}return n=n.filter(function(e){return!0!==e}),!!jQuery.isEmptyObject(n)||this.domain_inversion.simplify(n)}}),Sao.common.DomainInversion.Or=Sao.class_(Sao.common.DomainInversion.And,{inverse:function(t,i){var e=Sao.common.DomainInversion,n=[];if(!jQuery.isEmptyObject(this.variables.filter(function(e){return!(e in i)&&e!=t})))return!0;for(var o=0,s=this.branches.length;o<s;o++){var r=this.branches[o];if(r instanceof e.And){var a=r.inverse(t,i),c="boolean"==typeof a;if(~r.variables.indexOf(t))if(c){if(a)return!0}else n.push(a);else if(c&&a)return!0}else if(this.domain_inversion.is_leaf(r)&&this.base(r[0])==t)n.push(r);else{a=r[0];if((a=this.base(a))in i&&this.domain_inversion.eval_leaf(r,i,this.domain_inversion.or)||this.domain_inversion.constrained_leaf(r,this.domain_inversion.or))return!0;a in i&&!this.domain_inversion.eval_leaf(r,i,this.domain_inversion.or)&&n.push(!1)}}return n=n.filter(function(e){return!1!==e}),!jQuery.isEmptyObject(n)&&this.domain_inversion.simplify(["OR"].concat(n))}}),Sao.common.mimetypes={csv:"text/csv",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",gif:"image/gif",html:"text/html",jpeg:"image/jpeg",jpg:"image/jpeg",mpeg:"video/mpeg",mpg:"video/mpeg",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"audio/ogg",pdf:"application/pdf",png:"image/png",svg:"image/svg+xml",text:"text/plain",tif:"image/tif",tiff:"image/tif",txt:"text/plain",webp:"image/webp",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",xml:"application/xml",xpm:"image/x-xpixmap"},Sao.common.guess_mimetype=function(e){for(var t in Sao.common.mimetypes)if(new RegExp(".*."+t+"$","i").test(e))return Sao.common.mimetypes[t];return"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-question","tryton-refresh","tryton-remove","tryton-save","tryton-search","tryton-send","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(s){if(!(s=s||!1))for(var e in this.load_icons)this.load_icons.hasOwnProperty(e)&&window.URL.revokeObjectURL(this.load_icons[e]);return new Sao.Model("ir.ui.icon").execute("list_icons",[],{}).then(function(e){var t,i;s||(this.name2id={},this.loaded_icons={}),this.tryton_icons=[];for(var n=0,o=e.length;n<o;n++)t=e[n][0],i=e[n][1],s&&i in this.loaded_icons||(this.tryton_icons.push([t,i]),this.name2id[i]=t)}.bind(this))},register_icon:function(o){if(!o)return jQuery.when();if(o in this.loaded_icons||~Sao.common.LOCAL_ICONS.indexOf(o))return jQuery.when();if("pending"==this.register_prm.state())return this.register_prm.then(function(){return this.register_icon(o)}.bind(this));var e=o in this.name2id?jQuery.when():this.load_icons(!0),s=new Sao.Model("ir.ui.icon");return this.register_prm=e.then(function(){var i=function(e){for(var t=0,i=this.tryton_icons.length;t<i;t++){var n=this.tryton_icons[t];if(Sao.common.compare(n,e))break}return t}.bind(this),e=i([this.name2id[o],o]),t=(t=Math.round(e-this.batchnum/2))<0?0:t,e=Math.round(e+this.batchnum/2),n=[];return this.tryton_icons.slice(t,e).forEach(function(e){n.push(e[0])}),s.execute("read",[n,["name","icon"]],{}).then(function(e){e.forEach(function(e){var t=this._convert(e.icon);this.loaded_icons[e.name]=t,delete this.name2id[e.name],this.tryton_icons.splice(i([e.id,e.name]),1)}.bind(this))}.bind(this))}.bind(this)),this.register_prm},_convert:function(e){var t=jQuery.parseXML(e);jQuery(t).find("svg").attr("fill",Sao.config.icon_colors[0]),e=(new XMLSerializer).serializeToString(t);e=new Blob([e],{type:"image/svg+xml"});return window.URL.createObjectURL(e)},get_icon_url:function(t){return t?this.register_icon(t).then(function(){return t in this.loaded_icons?this.loaded_icons[t]:jQuery.get("images/"+t+".svg",null,null,"text").then(function(e){e=this._convert(e);return this.loaded_icons[t]=e}.bind(this))}.bind(this)):jQuery.when("")},get_icon_img:function(e,t){(t=t||{}).class||(t.class="icon");var i=jQuery("<img/>",t);return e&&this.get_icon_url(e).then(function(e){i.attr("src",e)}),i}}),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_,void 0,!1)},run:function(){if(this.running)return jQuery.when();var e=Array.prototype.slice.call(arguments),t=jQuery.Deferred();e.push(t);var i=this.build_dialog.apply(this,e);return i.content.submit(function(e){i.footer.find("button.btn-primary").first().click(),e.preventDefault()}.bind(this)),this.running=!0,i.modal.modal("show"),i.modal.on("shown.bs.modal",function(){i.modal.find("input,select").filter(":visible").first().focus()}),i.modal.on("keydown",function(e){e.which==Sao.common.ESC_KEYCODE&&(this.close(i),t.reject())}.bind(this)),t},close:function(e){e.modal.on("hidden.bs.modal",function(e){jQuery(this).remove()}),e.modal.modal("hide"),this.running=!1}}),Sao.common.MessageDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"message-dialog",build_dialog:function(e,t,i){var n=Sao.common.MessageDialog._super.build_dialog.call(this);return n.header.remove(),n.body.append(jQuery("<div/>",{class:"alert alert-info",role:"alert"}).append(Sao.common.ICONFACTORY.get_icon_img(t,{"aria-hidden":!0})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Message: "))).append(jQuery("<span/>").text(e).css("white-space","pre-wrap"))),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(n),i.resolve("ok")}.bind(this)).appendTo(n.footer),n},run:function(e,t){return Sao.common.MessageDialog._super.run.call(this,e,t||"tryton-info")}}),Sao.common.message=new Sao.common.MessageDialog,Sao.common.WarningDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"warning-dialog",build_dialog:function(e,t,i){var n=Sao.common.WarningDialog._super.build_dialog.call(this),t=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(t).css("white-space","pre-wrap"));return e&&t.append(jQuery("<span/>").text(e).css("white-space","pre-wrap")),n.body.append(t),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(n),i.resolve("ok")}.bind(this)).appendTo(n.footer),n}}),Sao.common.warning=new Sao.common.WarningDialog,Sao.common.UserWarningDialog=Sao.class_(Sao.common.WarningDialog,{class_:"user-warning-dialog",build_dialog:function(e,t,i){var n=Sao.common.UserWarningDialog._super.build_dialog.call(this,e,t,i),o=jQuery("<input/>",{type:"checkbox"});return n.body.append(jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>").text(Sao.i18n.gettext("Always ignore this warning.")).prepend(o))),n.body.append(jQuery("<p/>").text(Sao.i18n.gettext("Do you want to proceed?"))),n.footer.empty(),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("No")).click(function(){this.close(n),i.reject()}.bind(this)).appendTo(n.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("Yes")).click(function(){this.close(n),o.prop("checked")&&i.resolve("always"),i.resolve("ok")}.bind(this)).appendTo(n.footer),n}}),Sao.common.userwarning=new Sao.common.UserWarningDialog,Sao.common.ConfirmationDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"confirmation-dialog",build_dialog:function(e){var t=Sao.common.ConfirmationDialog._super.build_dialog.call(this);return t.header.remove(),t.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(e).css("white-space","pre-wrap"))),t}}),Sao.common.SurDialog=Sao.class_(Sao.common.ConfirmationDialog,{build_dialog:function(e,t){var i=Sao.common.SurDialog._super.build_dialog.call(this,e);return jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(i),t.reject()}.bind(this)).appendTo(i.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(i),t.resolve()}.bind(this)).appendTo(i.footer),i}}),Sao.common.sur=new Sao.common.SurDialog,Sao.common.Sur3BDialog=Sao.class_(Sao.common.ConfirmationDialog,{build_dialog:function(e,t){var i=Sao.common.SurDialog._super.build_dialog.call(this,e);return jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(i),t.resolve("cancel")}.bind(this)).appendTo(i.footer),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("No")).click(function(){this.close(i),t.resolve("ko")}.bind(this)).appendTo(i.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("Yes")).click(function(){this.close(i),t.resolve("ok")}.bind(this)).appendTo(i.footer),i}}),Sao.common.sur_3b=new Sao.common.Sur3BDialog,Sao.common.AskDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"ask-dialog",run:function(){var e=Array.prototype.slice.call(arguments);return 1==e.length&&e.push(!0),Sao.common.AskDialog._super.run.apply(this,e)},build_dialog:function(e,t,i){var n=Sao.common.AskDialog._super.build_dialog.call(this);n.header.remove();var o=jQuery("<input/>",{class:"form-control",type:t?"input":"password",id:"ask-dialog-entry"});return n.body.append(jQuery("<div/>",{class:"form-group"}).append(jQuery("<label/>",{for:"ask-dialog-entry"}).text(e)).append(o)),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(n),i.reject()}.bind(this)).appendTo(n.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(function(){this.close(n),i.resolve(o.val())}.bind(this)).appendTo(n.footer),n}}),Sao.common.ask=new Sao.common.AskDialog,Sao.common.ConcurrencyDialog=Sao.class_(Sao.common.UniqueDialog,{class_:"ask-dialog",build_dialog:function(t,i,n,o){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-info",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),o.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.rpc({method:"model."+t+".read",params:[[i],["rec_name"],n]},Sao.Session.current_session).then(function(e){e=e[0].rec_name;Sao.Tab.create({model:t,res_id:i,name:Sao.i18n.gettext("Compare: %1",e),domain:[["id","=",i]],context:n,mode:["form"]}),o.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),o.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(e,t,i){var n=Sao.common.ConcurrencyDialog._super.build_dialog.call(this);return n.modal.find(".modal-dialog").removeClass("modal-sm").addClass("modal-lg"),n.add_title(Sao.i18n.gettext("Application Error")),n.body.append(jQuery("<div/>",{class:"alert alert-danger",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(t))).append(jQuery("<p/>").append(jQuery("<a/>",{class:"btn btn-link",href:Sao.config.bug_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(n),i.resolve()}.bind(this)).appendTo(n.footer),n}}),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"});for(var e=jQuery("<span/>",{class:"label label-info",text:Sao.i18n.gettext("Processing")}).appendTo(this.el),t=0;t<3;t++)e.append(jQuery("<span/>",{class:"dot",text:"."}));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(e){window.clearTimeout(e),0<this.queries&&--this.queries,this.queries<=0&&(this.queries=0,this.el.hide())}}),Sao.common.processing=new Sao.common.Processing,Sao.common.set_overflow=function(e,t){var i,t="hide"==t?i="":(i="visible","none");e.closest(".treeview").css("overflow",i).css("max-height",t),e.closest(".modal-body").css("overflow",i),e.closest(".navbar-collapse.in").css("overflow-y",i),e.closest(".content-box").css("overflow-y",i),e.closest("fieldset.form-group_").css("overflow",i),Sao.common.scrollIntoViewIfNeeded(e)},Sao.common.InputCompletion=Sao.class_(Object,{init:function(e,t,i,n){e.is("input")?(e.wrap('<div class="dropdown"/>'),this.dropdown=e.parent()):(e.addClass("dropdown"),this.dropdown=e),this.input=e.find("input").add(e.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=t,this.match_selected=i,this.format=n,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(e){e.which==Sao.common.ESC_KEYCODE?this.dropdown.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),this.menu.dropdown("toggle")):e.which==Sao.common.DOWN_KEYCODE&&this.dropdown.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),this.menu.find("li > a").first().focus())}.bind(this)),this.menu.keydown(function(e){e.which==Sao.common.ESC_KEYCODE&&(e.preventDefault(),e.stopPropagation(),this.menu.dropdown("toggle"))}.bind(this)),this.dropdown.on("hide.bs.dropdown",function(){this.input.focus(),Sao.common.set_overflow(this.input,"hide")}.bind(this)),this.dropdown.on("show.bs.dropdown",function(){Sao.common.set_overflow(this.input,"show")}.bind(this))},set_actions:function(e,t){void 0!==t&&(this.action_activated=t),this.menu.find("li.action").remove(),jQuery.isEmptyObject(e)?this.separator.hide():(this.separator.show(),e.forEach(function(e){var t=e[0],e=e[1];jQuery("<li/>",{class:"action action-"+t}).append(jQuery("<a/>",{href:"#"}).text(this._format_action(e))).click(function(e){e.preventDefault(),this.action_activated&&this.action_activated(t),this.input.val("")}.bind(this)).appendTo(this.menu)},this))},_format:function(e){return this.format?this.format(e):jQuery("<span/>").text(e)},_format_action:function(e){return this.format_action?this.format_action(e):e},_input:function(t){t==this.input.val()&&(this.source instanceof Array?jQuery.when(source.filter(function(e){return e.toLowerCase().startsWith(t.toLowerCase())})):this.source(t)).then(function(e){t==this.input.val()&&this._set_selection(e)}.bind(this))},_set_selection:function(e){void 0===e&&(e=[]),this.menu.find("li.completion").remove(),e.reverse().forEach(function(t){jQuery("<li/>",{class:"completion"}).append(jQuery("<a/>",{href:"#"}).append(this._format(t))).click(function(e){e.preventDefault(),this.match_selected&&this.match_selected(t),this.input.focus()}.bind(this)).prependTo(this.menu)},this),this.input.val()&&(this.menu.find("li.completion").length||this.menu.find("li.action").length)?this.dropdown.hasClass("open")||this.menu.dropdown("toggle"):this.dropdown.hasClass("open")&&this.menu.dropdown("toggle")}}),Sao.common.get_completion=function(e,t,i,n){i=new Sao.common.InputCompletion(e,t,i,function(e){return e.rec_name});n&&i.set_actions([["search",Sao.i18n.gettext("Search...")],["create",Sao.i18n.gettext("Create...")]],n)},Sao.common.update_completion=function(e,t,i,n,o){var s=e.val();if(!s||!n)return jQuery.when();void 0===o&&(o=i.get_domain(t));e=i.get_search_context(t);o=[["rec_name","ilike",(0,(new Sao.common.DomainParser).likify)(s)],o];t=i.get_search_order(t);return new Sao.Model(n).execute("search_read",[o,0,Sao.config.limit,t,["rec_name"]],e)},Sao.common.Paned=Sao.class_(Object,{init:function(e){var t;this._orientation=e,this.el=jQuery("<div/>"),"horizontal"==e?(t=jQuery("<div/>",{class:"row"}).appendTo(this.el),this.child1=jQuery("<div/>",{class:"col-md-6"}).appendTo(t),this.child2=jQuery("<div/>",{class:"col-md-6"}).appendTo(t)):"vertical"==e&&(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(e){e=e.find("input","textarea");return e.sort(function(e,t){return"tabindex"in e.attributes&&"tabindex"in t.attributes?parseInt(e.attributes.tabindex.value)-parseInt(t.attributes.tabindex.value):"tabindex"in e.attributes?-1:"tabindex"in t.attributes?1:0}),e},Sao.common.find_focusable_child=function(e){var t,i,n,o;if(!e.is(":visible"))return null;if(~["input","select","textarea"].indexOf(e[0].tagName.toLowerCase())&&!e.prop("readonly"))return e;for(t=0,i=(n=Sao.common.get_focus_chain(e)).length;t<i;t++)if(o=Sao.common.find_focusable_child(jQuery(n[t])))return o},Sao.common.find_first_focus_widget=function(e,t){var i,n,o,s;if(1==t.length)return jQuery(t[0]);for(o=Sao.common.get_focus_chain(e),i=0;i<o.length;i++){for(s=[],n=0;n<t.length;n++)0<jQuery(t[n]).closest(o[i]).length&&s.push(t[n]);if(0<s.length)return Sao.common.find_first_focus_widget(jQuery(o[i]),s)}},Sao.common.apply_label_attributes=function(e,t,i){t?e.removeClass("editable required"):(e.addClass("editable"),i?e.addClass("required"):e.removeClass("required"))},Sao.common.download_file=function(e,t,i){void 0===i&&(i={type:Sao.common.guess_mimetype(t)});var n,o,e=new Blob([e],i);window.navigator&&window.navigator.msSaveOrOpenBlob?window.navigator.msSaveOrOpenBlob(e,t):(i=window.URL.createObjectURL(e),n=new Sao.Dialog(Sao.i18n.gettext("Download")),e=function(){n.modal.modal("hide")},o=jQuery("<a/>",{href:i,download:t,text:t,target:"_blank"}).appendTo(n.body).click(e),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("Close")).click(e).appendTo(n.footer),n.modal.on("shown.bs.modal",function(){o[0].click()}),n.modal.modal("show"),n.modal.on("hidden.bs.modal",function(){jQuery(this).remove(),window.URL.revokeObjectURL(this.blob_url)}))},Sao.common.get_input_data=function(e,t,i){for(var n=0;n<e[0].files.length;n++)Sao.common.get_file_data(e[0].files[n],t,i)},Sao.common.get_file_data=function(t,i,n){var o=new FileReader;o.onload=function(){var e=new Uint8Array(o.result);n&&(e=String.fromCharCode.apply(null,e)),i(e,t.name)},o.readAsArrayBuffer(t)},Sao.common.ellipsize=function(e,t){if(e.length<=t)return e;var i=Sao.i18n.gettext("...");return e.slice(0,t-i.length)+i},Sao.common.debounce=function(t,i){return function(){var e=[].slice(arguments);clearTimeout(t._debounceTimeout),t._debounceTimeout=setTimeout(function(){t.apply(this,e)}.bind(this),i)}.bind(this)},Sao.common.uuid4=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})},Sao.common.COLOR_SCHEMES={red:"#cf1d1d",green:"#3fb41b",blue:"#224565",grey:"#444444",black:"#000000",darkcyan:"#305755"},Sao.common.hex2rgb=function(e,t){t=t||2;var i=parseInt("f".repeat(t),16);return[parseInt(e.substring(1,t+1),16)/i,parseInt(e.substring(t+1,2*t+1),16)/i,parseInt(e.substring(2*t+1,3*t+1),16)/i]},Sao.common.rgb2hex=function(e,t){t=t||2;var i=parseInt("f".repeat(t),16);return"#"+e.map(function(e){return Math.round(e*i).toString(16)}).join("")},Sao.common.rgb2hsv=function(e){var t=e[0],i=e[1],n=e[2],o=Math.max.apply(null,e),s=Math.min.apply(null,e);if(s==o)return[0,0,o];var r=(o-t)/(o-s),e=(o-i)/(o-s),n=(o-n)/(o-s),r=t==o?n-e:i==o?2+r-n:4+e-r;return[r=r/6%1,(o-s)/o,o]},Sao.common.hsv2rgb=function(e){var t=e[0],i=e[1],n=e[2];if(0==i)return[n,n,n];var o=Math.trunc(6*t),s=6*t-o,e=n*(1-i),t=n*(1-i*s),s=n*(1-i*(1-s));return 0==(o%=6)?[n,s,e]:1==o?[t,n,e]:2==o?[e,n,s]:3==o?[e,t,n]:4==o?[s,e,n]:5==o?[n,e,t]:void 0},Sao.common.generateColorscheme=function(e,t,i){void 0===i&&(i=.1);var e=Sao.common.hex2rgb(Sao.common.COLOR_SCHEMES[e]||e),e=Sao.common.rgb2hsv(e),n=e[0],o=e[1],s=e[2];t.length&&(i=Math.min(i,(1-s)/t.length));for(var r={},a=0;a<t.length;a++)r[t[a]]=Sao.common.rgb2hex(Sao.common.hsv2rgb([(n+.618033988749895*a)%1,o,(s+i*a)%1]));return r},Sao.common.richtext_toolbar=function(){function o(e){document.execCommand(e.data)}function e(e){var t,i=jQuery("<div/>",{class:"btn-group",role:"group"}).appendTo(s);for(t in e){var n=e[t];jQuery("<button/>",{class:"btn btn-default",type:"button"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-format-"+n.icon)).appendTo(i).click(n.command,o)}}var s=jQuery("<div/>",{class:"btn-toolbar",role:"toolbar"});e([{icon:"bold",command:"bold"},{icon:"italic",command:"italic"},{icon:"underline",command:"underline"}]);var t,i=[{heading:Sao.i18n.gettext("Font"),options:["Normal","Serif","Sans","Monospace"],command:"fontname"},{heading:Sao.i18n.gettext("Size"),options:[1,2,3,4,5,6,7],command:"fontsize"}];for(t in i){var n=i[t],r=jQuery("<div/>",{class:"btn-group",role:"group"}).appendTo(s),r=(jQuery("<button/>",{class:"btn btn-default dropdown-toggle",type:"button","data-toggle":"dropdown","aria-expanded":!1,"aria-haspopup":!0}).append(n.heading).append(jQuery("<span/>",{class:"caret"})).appendTo(r),jQuery("<ul/>",{class:"dropdown-menu"}).appendTo(r));n.options.forEach(function(e,i){return function(t){e.append(jQuery("<li/>").append(jQuery("<a/>",{href:"#"}).text(t).click(function(e){e.preventDefault(),document.execCommand(i.command,!1,t)})))}}(r,n))}return e([{icon:"align-left",command:Sao.i18n.rtl?"justifyRight":"justifyLeft"},{icon:"align-center",command:"justifyCenter"},{icon:"align-right",command:Sao.i18n.rtl?"justifyLeft":"justifyRight"},{icon:"align-justify",command:"justifyFull"}]),[["foreColor","#000000"]].forEach(function(e){var t=e[0],e=e[1];jQuery("<input/>",{class:"btn btn-default",type:"color"}).appendTo(s).change(function(){document.execCommand(t,!1,jQuery(this).val())}).focusin(function(){document.execCommand(t,!1,jQuery(this).val())}).val(e)}),s},Sao.common.richtext_normalize=function(e){e=jQuery("<div/>").html(e);return e.find("div").each(function(e,t){var i;(t=jQuery(t)).css("text-align")&&(i=t.css("text-align").split("-").pop(),t.attr("align",i),t.css("text-align","")),"start"==t.attr("align")&&(Sao.i18n.rtl?t.attr("align","right"):t.attr("align","left"))}),e.html()}}(),function(){"use strict";Sao.Model=Sao.class_(Object,{init:function(e,t){this.name=e,this.session=Sao.Session.current_session,this.fields={}},add_fields:function(e){var t,i=[];for(t in e){var n,o=e[t];t in this.fields?jQuery.extend(this.fields[t].description,o):(n=Sao.field.get(o.type),this.fields[t]=new n(o),i.push(t))}return i},execute:function(e,t,i,n){i={method:"model."+this.name+"."+e,params:t.concat(i=void 0===i?{}:i)};return Sao.rpc(i,this.session,n)},copy:function(e,t){if(jQuery.isEmptyObject(e))return jQuery.when();e=e.map(function(e){return e.id});return this.execute("copy",[e,{}],t)}}),Sao.Group=function(e,t,i){return i.prm=jQuery.when(),i.model=e,i._context=t,i.on_write=[],i.parent=void 0,i.screens=[],i.parent_name="",i.children=[],i.child_name="",i.parent_datetime_field=void 0,i.record_removed=[],i.record_deleted=[],i.__readonly=!1,i.exclude_field=null,i.skip_model_access=!1,i.forEach(function(e,t,i){e.group=i}),Object.defineProperty(i,"readonly",{get:function(){var e=Sao.common.MODELACCESS.get(this.model.name);return!(!this.context._datetime&&(e.write||e.create||this.skip_model_access))||this.__readonly},set:function(e){this.__readonly=e}}),i.load=function(e,t,i){void 0!==i&&-1!=i||(i=this.length);for(var n=[],o=0,s=e.length;o<s;o++){var r=e[o],a=this.get(r);a||(((a=new Sao.Record(this.model,r)).group=this).splice(i,0,a),i+=1),n.push(a)}var c,l=[];for(o=0,s=this.record_removed.length;o<s;o++)c=this.record_removed[o],~e.indexOf(c.id)||l.push(c);this.record_removed=l;var d=[];for(o=0,s=this.record_deleted.length;o<s;o++)c=this.record_deleted[o],~e.indexOf(c.id)||d.push(c);this.record_deleted=d,n.length&&t&&(n.forEach(function(e){e._changed.id=!0}),t=this.root_group,this.changed(),t.screens.forEach(function(e){e.display()}))},i.get=function(e){for(var t=0,i=this.length;t<i;t++){var n=this[t];if(n.id==e)return n}},i.new_=function(e,t,i){t=new Sao.Record(this.model,t);return t.group=this,e&&t.default_get(i),t},i.add=function(e,t,i){for(var n in void 0!==t&&-1!=t||(t=this.length),t=Math.min(t,this.length),void 0===i&&(i=!0),e.group!=this&&(e.group=this),this.indexOf(e)<0&&this.splice(t,0,e),this.record_removed)n.id==e.id&&this.record_removed.splice(this.record_removed.indexOf(n),1);for(var o in this.record_deleted)o.id==e.id&&this.record_deleted.splice(this.record_deleted.indexOf(o),1);return e._changed.id=!0,i&&(this.changed(),this.parent&&this.model.fields[this.parent_name]&&(((t=this.model.fields[this.parent_name])instanceof Sao.field.Many2One||t instanceof Sao.field.Reference)&&(i=[this.parent.id,""],t instanceof Sao.field.Reference&&(i=[this.parent.model.name,i]),t.set_client(e,i)))),e},i.remove=function(e,t,i,n,o){void 0===i&&(i=!0),void 0===o&&(o=!0);this.indexOf(e);0<=e.id&&(t?(~this.record_deleted.indexOf(e)&&this.record_deleted.splice(this.record_deleted.indexOf(e),1),~this.record_removed.indexOf(e)||this.record_removed.push(e)):(~this.record_removed.indexOf(e)&&this.record_removed.splice(this.record_removed.indexOf(e),1),~this.record_deleted.indexOf(e)||this.record_deleted.push(e))),e.group.parent&&(e.group.parent._changed.id=!0),i&&(e._changed.id=!0),(e.id<0||n)&&this._remove(e),o&&e.group.changed()},i._remove=function(e){e=this.indexOf(e);this.splice(e,1)},i.unremove=function(e){this.record_removed.splice(this.record_removed.indexOf(e),1),this.record_deleted.splice(this.record_deleted.indexOf(e),1),e.group.changed()},i.clear=function(){this.splice(0,this.length),this.record_removed=[],this.record_deleted=[]},i.changed=function(){if(!this.parent)return jQuery.when.apply(jQuery,this.screens.map(function(e){return e.group_changed_callback&&e.group_changed_callback(),e.display()}));this.parent._changed[this.child_name]=!0,this.parent.model.fields[this.child_name].changed(this.parent),this.parent.validate(null,!0,!1,!0),this.parent.group.changed()},i.delete_=function(t){if(jQuery.isEmptyObject(t))return jQuery.when();var i=this.root_group;console.assert(t.every(function(e){return e.model.name==this.model.name}.bind(this)),"records not from the same model"),console.assert(t.every(function(e){return e.group.root_group==i}),"records not from the same root group"),t=t.filter(function(e){return 0<=e.id});var n=this.context;n._timestamp={},t.forEach(function(e){jQuery.extend(n._timestamp,e.get_timestamp())});var o=t.map(function(e){return e.id});return i.on_write_ids(o).then(function(e){return t.forEach(function(e){e.destroy()}),e=e.filter(function(e){return!~o.indexOf(e)}),this.model.execute("delete",[o],n).then(function(){i.reload(e)})}.bind(this))},Object.defineProperty(i,"root_group",{get:function(){for(var e=this,t=this.parent;t;)e=t.group,t=t.parent;return e}}),i.save=function(){var t=[];return this.forEach(function(e){t.push(e.save())}),jQuery.isEmptyObject(this.record_deleted)||(this.record_deleted.forEach(function(e){this._remove(e)}.bind(this)),t.push(this.delete_(this.record_deleted)),this.record_deleted.splice(0,this.record_deleted.length)),jQuery.when.apply(jQuery,t)},i.written=function(t){return"number"==typeof t&&(t=[t]),this.on_write_ids(t).then(function(e){e=e.filter(function(e){return!~t.indexOf(e)}),this.root_group.reload(e)}.bind(this))},i.reload=function(t){this.children.forEach(function(e){e.reload(t)}),t.forEach(function(e){e=this.get(e);e&&jQuery.isEmptyObject(e._changed)&&e.cancel()}.bind(this))},i.on_write_ids=function(t){var i=[],n=[];return this.on_write.forEach(function(e){e=this.model.execute(e,[t],this._context).then(function(e){jQuery.extend(n,e)});i.push(e)}.bind(this)),jQuery.when.apply(jQuery,i).then(function(){return n.filter(function(e,t,i){return t==i.indexOf(e)})})},i.set_parent=function(e){(this.parent=e)&&e.model.name==this.model.name&&this.parent.group.children.push(this)},i.add_fields=function(e){var i,e=this.model.add_fields(e);jQuery.isEmptyObject(this)||(i=[],this.forEach(function(e){e.id<0&&i.push(e)}),i.length&&e.length&&this.model.execute("default_get",[e,this.context]).then(function(t){i.forEach(function(e){e.set_default(t,!0,!1)}),this.root_group.screens.forEach(function(e){return e.display()})}.bind(this)))},i.destroy=function(){var e;!this.parent||~(e=this.parent.group.children.indexOf(this))&&this.parent.group.children.splice(e,1),this.parent=null},Object.defineProperty(i,"domain",{get:function(){var t=[];if(this.screens.forEach(function(e){e.attributes.domain&&t.push(e.attributes.domain)}),this.parent&&this.child_name){var e=this.parent.model.fields[this.child_name];return[t,e.get_domain(this.parent)]}return t}}),Object.defineProperty(i,"context",{get:function(){return this._get_context()},set:function(e){this._context=jQuery.extend({},e)}}),Object.defineProperty(i,"local_context",{get:function(){return this._get_context(!0)}}),i._get_context=function(e){var t,i,n=e?{}:jQuery.extend({},this.model.session.context);return this.parent&&(t=this.parent.get_context(e),jQuery.extend(n,t),this.child_name in this.parent.model.fields&&(i=this.parent.model.fields[this.child_name],jQuery.extend(n,i.get_context(this.parent,t,e)))),jQuery.extend(n,this._context),this.parent_datetime_field&&(n._datetime=this.parent.get_eval()[this.parent_datetime_field]),n},i.clean4inversion=function(e){if(jQuery.isEmptyObject(e))return[];var t=new Sao.common.DomainInversion,i=e[0],e=e.slice(1);return~["AND","OR"].indexOf(i)||(t.is_leaf(i)?(t=i[0])in this.model.fields&&this.model.fields[t].description.readonly&&(i=[]):i=this.clean4inversion(i)),[i].concat(this.clean4inversion(e))},i.domain4inversion=function(){var e=this.domain;return this.__domain4inversion&&Sao.common.compare(this.__domain4inversion[0],e)||(this.__domain4inversion=[e,this.clean4inversion(e)]),this.__domain4inversion[1]},i.get_by_path=function(i){i=jQuery.extend([],i);var n=null,o=this,s=function(){if(jQuery.isEmptyObject(i))return n;var e=i[0][0],t=i[0][1];return i.splice(0,1),(n=o.get(t))?e?n.load(e).then(function(){return(o=n._values[e])?s():null}):s():null};return jQuery.when().then(s)},i.set_sequence=function(e,t){for(var i,n,o,s,r=!1,a=null,c=0===t?function(e,t){return t<e}:function(e,t){return e<t},l=0;l<this.length;l++)((i=this[l]).get_loaded([e])||r||i.id<0)&&(n=a?a.field_get(e):null,o=!1,null===(s=i.field_get(e))?n?o=!0:a&&(0<=i.id?o=c(i.id,a.id):0===t&&(o=!0)):s===n?a&&(0<=i.id?o=c(i.id,a.id):0===t&&(o=!0)):s<=(n||0)&&(o=!0),o&&(null===n&&(n=0),i.field_set_client(e,n+=1),r=i)),a=i},i},Sao.Record=Sao.class_(Object,{id_counter:-1,init:function(e,t){this.model=e,this.group=Sao.Group(e,{},[]),this.id=null==t?Sao.Record.prototype.id_counter:t,this.id<0&&Sao.Record.prototype.id_counter--,this._values={},this._changed={},this._loaded={},this.fields={},this._timestamp=null,this._write=!0,this._delete=!0,this.resources=null,this.button_clicks={},this.links_counts={},this.state_attrs={},this.autocompletion={},this.exception=!1,this.destroyed=!1},has_changed:function(){return!jQuery.isEmptyObject(this._changed)},save:function(t){void 0===t&&(t=!1);var e=this.get_context(),i=jQuery.when();if(this.id<0||this.has_changed()){var n=this.get();if(this.id<0)try{this.id=this.model.execute("create",[[n]],e,!1)[0]}catch(e){return e.promise?e.then(function(){return this.save(t)}.bind(this)):jQuery.Deferred().reject()}else jQuery.isEmptyObject(n)||(e._timestamp=this.get_timestamp(),i=this.model.execute("write",[[this.id],n],e));i=i.done(function(){if(this.cancel(),t)return this.reload()}.bind(this)),this.group&&(i=i.done(function(){return this.group.written(this.id)}.bind(this)))}return this.group.parent&&(delete this.group.parent._changed[this.group.child_name],i=i.done(function(){return this.group.parent.save(t)}.bind(this))),i},reload:function(e){if(this.id<0)return jQuery.when();if(e){e=e.map(function(e){return this.load(e)}.bind(this));return jQuery.when.apply(jQuery,e)}return this.load("*")},is_loaded:function(e){return this.id<0||e in this._loaded},load:function(t,e){if(void 0===e&&(e=!0),this.destroyed||this.is_loaded(t))return e?jQuery.when():"*"!==t?this.model.fields[t]:void 0;if(e&&"pending"==this.group.prm.state())return this.group.prm.then(function(){return this.load(t)}.bind(this));var i,a={};if(a[this.id]=this,"*"==t){var n="eager",o=new Set,s=function(e){o.add(e)};for(u in this.model.fields)"lazy"==((i=this.model.fields[u]).description.loading||"eager")&&(n="lazy"),i.views.forEach(s)}else n=this.model.fields[t].description.loading||"eager",o=this.model.fields[t].views;var r={};if("eager"==n)for(u in this.model.fields)"eager"==((i=this.model.fields[u]).description.loading||"eager")&&(r[u]=i);else r=this.model.fields;var c=[];for(u in r)i=r[u],u in this._loaded||o.size&&!Sao.common.intersect(Array.from(o).sort(),Array.from(i.views).sort())||c.push(u);var l,d=c.slice(),h=["many2one","one2one","reference"];for(l in c){var u=c[l],_=this.model.fields[u].description;~h.indexOf(_.type)&&d.push(u+".rec_name")}~c.indexOf("rec_name")||d.push("rec_name"),d.push("_timestamp"),d.push("_write"),d.push("_delete");var m=jQuery.extend({},this.get_context());if("eager"==n){var p,f=parseInt(Sao.config.limit/d.length,10),g=function(e){return!e.destroyed&&0<=e.id&&!(t in e._loaded)},v=function(e){return g(e)&&void 0===a[e.id]&&(e.group===this.group||JSON.stringify(e.get_context())===JSON.stringify(m))}.bind(this),b=this.group.parent&&this.group.parent.model.name==this.model.name?(p=(p=[]).concat.apply(p,this.group.parent.group.children),v):(p=this.group,g),S=p.indexOf(this);if(~S)for(var y,w=p.length,x=1;Object.keys(a).length<f&&(0<=S-x||S+x<w)&&x<2*f;)0<=S-x&&b(y=p[S-x])&&(a[y.id]=y),S+x<w&&b(y=p[S+x])&&(a[y.id]=y),x++}for(u in this.model.fields)this.model.fields.hasOwnProperty(u)&&"binary"==this.model.fields[u].description.type&&~d.indexOf(u,d)&&(m[this.model.name+"."+u]="size");var j=this.model.execute("read",[Object.keys(a).map(function(e){return parseInt(e,10)}),d],m,e),O=function(e,t){void 0===t&&(t=!1);var i,n={};for(i in e.forEach(function(e,t,i){n[e.id]=e}),a)if(a.hasOwnProperty(i)){var o=a[i];o.exception||(o.exception=t);var s=n[i];if(o&&s){for(var r in this._changed)this._changed.hasOwnProperty(r)&&delete s[r];o.set(s)}}}.bind(this),v=function(){var e,t,i=[];for(t in a){for(var n in e={id:t},d)e[d[n]]=null;i.push(e)}return O(i,!0)};return e?(this.group.prm=j.then(O,v),this.group.prm):(j?O(j):v(),"*"!==t?this.model.fields[t]:void 0)},set:function(e,t){void 0===t&&(t=!0);var i,n,o={},s=[];for(var r in e)e.hasOwnProperty(r)&&(n=e[r],"_timestamp"!=r?"_write"!=r&&"_delete"!=r?r in this.model.fields?(this.model.fields[r]instanceof Sao.field.One2Many&&(o[r]=n),(this.model.fields[r]instanceof Sao.field.Many2One||this.model.fields[r]instanceof Sao.field.Reference)&&(this._values[i=r+"."]=e[i]||{}),this.model.fields[r].set(this,n),this._loaded[r]=!0,s.push(r)):"rec_name"==r&&(this._values[r]=n):this[r]=n:this._timestamp||(this._timestamp=n));for(r in o)n=o[r],this.model.fields[r].set(this,n),this._loaded[r]=!0;t&&this.validate(s,!0,!1,!1)},get:function(){var e,t,i={};for(e in this.model.fields)this.model.fields.hasOwnProperty(e)&&((t=this.model.fields[e]).description.readonly&&(!(t instanceof Sao.field.One2Many)||t instanceof Sao.field.Many2Many)||void 0===this._changed[e]&&0<=this.id||(i[e]=t.get(this),t instanceof Sao.field.One2Many&&0===i[e].length&&delete i[e]));return i},invalid_fields:function(){var e,t={};for(e in this.model.fields){var i=this.model.fields[e].get_state_attrs(this).invalid;i&&(t[e]=i)}return t},get_context:function(e){return e?this.group.local_context:this.group.context},field_get:function(e){return this.model.fields[e].get(this)},field_set:function(e,t){this.model.fields[e].set(this,t)},field_get_client:function(e){return this.model.fields[e].get_client(this)},field_set_client:function(e,t,i){this.model.fields[e].set_client(this,t,i)},default_get:function(e){if(jQuery.isEmptyObject(this.model.fields))return jQuery.when();var t=this.get_context();return void 0===t.default_rec_name&&(t.default_rec_name=e),this.model.execute("default_get",[Object.keys(this.model.fields)],t).then(function(e){var t;return this.group.parent&&this.group.parent_name in this.group.model.fields&&((t=this.group.model.fields[this.group.parent_name])instanceof Sao.field.Reference?e[this.group.parent_name]=[this.group.parent.model.name,this.group.parent.id]:t.description.relation==this.group.parent.model.name&&(e[this.group.parent_name]=this.group.parent.id)),this.set_default(e)}.bind(this))},set_default:function(e,t,i){void 0===t&&(t=!0),void 0===i&&(i=!0);var n,o,s,r=[],a=[];for(n in e)e.hasOwnProperty(n)&&(o=e[n],n in this.model.fields&&n!=this.group.exclude_field&&((this.model.fields[n]instanceof Sao.field.Many2One||this.model.fields[n]instanceof Sao.field.Reference)&&(this._values[s=n+"."]=e[s]||{}),r.push(this.model.fields[n].set_default(this,o)),this._loaded[n]=!0,a.push(n)));return jQuery.when.apply(jQuery,r).then(function(){this.on_change(a),this.on_change_with(a);var e=function(){if(i)return jQuery.when.apply(jQuery,this.group.root_group.screens.map(function(e){return e.display()}))}.bind(this);return t?this.validate(null,!0).then(e):e()}.bind(this))},get_timestamp:function(){var e,t={};for(e in t[this.model.name+","+this.id]=this._timestamp,this.model.fields)this.model.fields.hasOwnProperty(e)&&e in this._loaded&&jQuery.extend(t,this.model.fields[e].get_timestamp(this));return t},get_eval:function(){var e,t={};for(e in this.model.fields)!this.model.fields.hasOwnProperty(e)&&0<=this.id||(t[e]=this.model.fields[e].get_eval(this));return t.id=this.id,t},get_on_change_value:function(e){var t,i={};for(t in this.model.fields)e&&~e.indexOf(t)||0<=this.id&&(!this._loaded[t]||!this._changed[t])||(i[t]=this.model.fields[t].get_on_change_value(this));return i.id=this.id,i},_get_on_change_args:function(e){var i={},n=Sao.common.EvalEnvironment(this,"on_change");return e.forEach(function(e){var t=n;e.split(".").forEach(function(e){void 0!==t&&(t=t[e])}),i[e]=t}),i},on_change:function(e){var t,i={};if(e.forEach(function(e){e=this.model.fields[e].description.on_change;jQuery.isEmptyObject(e)||(i=jQuery.extend(i,this._get_on_change_args(e)))}.bind(this)),!jQuery.isEmptyObject(i)){try{1==e.length?(t=[]).push(this.model.execute("on_change_"+e[0],[i],this.get_context(),!1)):t=this.model.execute("on_change",[i,e],this.get_context(),!1)}catch(e){return}t.forEach(this.set_on_change,this)}},on_change_with:function(e){var t,i,n,o={},s={},r={};for(t in this.model.fields)if(this.model.fields.hasOwnProperty(t)&&(i=this.model.fields[t].description.on_change_with,!jQuery.isEmptyObject(i))){for(var a=0;a<e.length&&!~i.indexOf(e[a]);a++);a>=e.length||(jQuery.isEmptyObject(Sao.common.intersect(Object.keys(o).sort(),i.sort()))?(o[t]=!0,s=jQuery.extend(s,this._get_on_change_args(i)),(this.model.fields[t]instanceof Sao.field.Many2One||this.model.fields[t]instanceof Sao.field.Reference)&&delete this._values[t+"."]):r[t]=!0)}if((o=Object.keys(o)).length){try{1==o.length?(t=o[0],(n={})[t]=this.model.execute("on_change_with_"+t,[s],this.get_context(),!1)):n=this.model.execute("on_change_with",[s,o],this.get_context(),!1)}catch(e){return}this.set_on_change(n)}for(t in r){i=this.model.fields[t].description.on_change_with,s=this._get_on_change_args(i);try{n=this.model.execute("on_change_with_"+t,[s],this.get_context(),!1)}catch(e){return}this.load(t,!1).set_on_change(this,n)}},set_on_change:function(e){for(var t in e){var i,n=e[t];t in this.model.fields&&((this.model.fields[t]instanceof Sao.field.Many2One||this.model.fields[t]instanceof Sao.field.Reference)&&(this._values[i=t+"."]=e[i]||{}),this.load(t,!1).set_on_change(this,n))}},autocomplete_with:function(e){for(var t in this.model.fields)~(this.model.fields[t].description.autocomplete||[]).indexOf(e)&&this.do_autocomplete(t)},do_autocomplete:function(e){this.autocompletion[e]=[];var t,i=this.model.fields[e].description.autocomplete,i=this._get_on_change_args(i);try{t=this.model.execute("autocomplete_"+e,[i],this.get_context(),!1)}catch(e){t=[]}this.autocompletion[e]=t},reset:function(e){this.cancel(),this.set(e,!0),this.group.parent&&(this.group.parent.on_change([this.group.child_name]),this.group.parent.on_change_with([this.group.child_name]))},expr_eval:function(e){if("string"!=typeof e)return e;if(e){if("[]"==e)return[];if("{}"==e)return{};var t,i=this.get_eval();return i.context=this.get_context(),i.active_model=this.model.name,i.active_id=this.id,this.group.parent&&this.group.parent_name&&(t=Sao.common.EvalEnvironment(this.group.parent),i["_parent_"+this.group.parent_name]=t),new Sao.PYSON.Decoder(i).decode(e)}},rec_name:function(){return this.model.execute("read",[[this.id],["rec_name"]],this.get_context()).then(function(e){return e[0].rec_name})},validate:function(n,o,s,r){var e=function(){var e,t,i=!0;for(e in this.model.fields)r&&0<=this.id&&!(e in this._loaded)||this.model.fields.hasOwnProperty(e)&&(t=this.model.fields[e],n&&!~n.indexOf(e)||t.description.readonly||e!=this.group.exclude_field&&(t.validate(this,o,s)||(i=!1)));return i}.bind(this);return r?e():this._check_load(n).then(e)},pre_validate:function(){if(jQuery.isEmptyObject(this._changed))return jQuery.Deferred().resolve(!0);var e=this._get_on_change_args(Object.keys(this._changed).concat(["id"]));return this.model.execute("pre_validate",[e],this.get_context()).then(function(){return!0},function(){return!1})},cancel:function(){this._loaded={},this._changed={},this._timestamp=null,this.button_clicks={},this.links_counts={}},_check_load:function(e){return this.get_loaded(e)?jQuery.when():this.reload(e)},get_loaded:function(e){if(jQuery.isEmptyObject(e))return Sao.common.compare(Object.keys(this.model.fields).sort(),Object.keys(this._loaded).sort());var t=!0;return e.forEach(function(e){e in this._loaded||e in this._changed||(t=!1)}.bind(this)),t},get root_parent(){for(var e=this;e.group.parent;)e=e.group.parent;return e},get_path:function(e){for(var t=[],i=this,n="";i&&(t.push([n,i.id]),i.group!==e);)n=i.group.child_name,i=i.group.parent;return t.reverse(),t},get_index_path:function(e){for(var t=[],i=this;i&&(t.push(i.group.indexOf(i)),i.group!==e);)i=i.group.parent;return t.reverse(),t},children_group:function(t){var i=jQuery.Deferred();return t?this._check_load([t]).done(function(){var e=this._values[t];void 0!==e?(e.model.fields!==this.group.model.fields&&(jQuery.extend(this.group.model.fields,e.model.fields),e.model.fields=this.group.model.fields),e.on_write=this.group.on_write,e.readonly=this.group.readonly,jQuery.extend(e._context,this.group._context),i.resolve(e)):i.resolve(null)}.bind(this)):i.resolve([]),i},get deleted(){return Boolean(~this.group.record_deleted.indexOf(this))},get removed(){return Boolean(~this.group.record_removed.indexOf(this))},get readonly(){return this.deleted||this.removed||this.exception||!this._write},get deletable(){return this._delete},get identity(){return JSON.stringify(Object.keys(this._values).reduce(function(e,t){var i=this.model.fields[t];return i&&(i instanceof Sao.field.Binary?e[t]=i.get_size(this):e[t]=i.get(this)),e}.bind(this),{}))},set_field_context:function(){for(var e in this.model.fields){var t,i;this.model.fields.hasOwnProperty(e)&&(i=this.model.fields[e],(t=this._values[e])instanceof Array&&((e=Object.getOwnPropertyDescriptor(t,"context"))&&e.set&&((i=i.description.context)&&(t.context=this.expr_eval(i)))))}},get_resources:function(e){e=0<=this.id&&(!this.resources||e)?this.model.execute("resources",[this.id],this.get_context()).then(function(e){return this.resources=e}.bind(this)):jQuery.when(this.resources);return e},get_button_clicks:function(t){if(this.id<0)return jQuery.when();var e=this.button_clicks[t];return void 0!==e?jQuery.when(e):Sao.rpc({method:"model.ir.model.button.click.get_click",params:[this.model.name,t,this.id,{}]},this.model.session).then(function(e){return this.button_clicks[t]=e}.bind(this))},destroy:function(){for(var e=Object.values(this._values),t=0;t<e.length;t++){var i=e[t];i&&i.hasOwnProperty("destroy")&&i.destroy()}this.destroyed=!0}}),Sao.field={},Sao.field.get=function(e){switch(e){case"char":return Sao.field.Char;case"selection":return Sao.field.Selection;case"multiselection":return Sao.field.MultiSelection;case"datetime":case"timestamp":return Sao.field.DateTime;case"date":return Sao.field.Date;case"time":return Sao.field.Time;case"timedelta":return Sao.field.TimeDelta;case"float":return Sao.field.Float;case"numeric":return Sao.field.Numeric;case"integer":case"biginteger":return Sao.field.Integer;case"boolean":return Sao.field.Boolean;case"many2one":return Sao.field.Many2One;case"one2one":return Sao.field.One2One;case"one2many":return Sao.field.One2Many;case"many2many":return Sao.field.Many2Many;case"reference":return Sao.field.Reference;case"binary":return Sao.field.Binary;case"dict":return Sao.field.Dict;default:return Sao.field.Char}},Sao.field.Field=Sao.class_(Object,{_default:null,init:function(e){this.description=e,this.name=e.name,this.views=new Set},set:function(e,t){e._values[this.name]=t},get:function(e){e=e._values[this.name];return e=void 0===e?this._default:e},_has_changed:function(e,t){return JSON.stringify(e)!=JSON.stringify(t)},set_client:function(e,t,i){var n=this.get(e);this.set(e,t),this._has_changed(n,this.get(e))?(e._changed[this.name]=!0,this.changed(e),e.validate(null,!0,!1,!0),e.group.changed()):i&&(e._changed[this.name]=!0,this.changed(e),e.validate(null,!0,!1,!0),e.group.root_group.screens.forEach(function(e){e.display()}))},get_client:function(e){return this.get(e)},set_default:function(e,t){this.set(e,t),e._changed[this.name]=!0},set_on_change:function(e,t){this.set(e,t),e._changed[this.name]=!0},changed:function(e){e.on_change([this.name]),e.on_change_with([this.name]),e.autocomplete_with(this.name),e.set_field_context()},get_timestamp:function(e){return{}},get_context:function(e,t,i){i=t?jQuery.extend({},t):e.get_context(i);return jQuery.extend(i,e.expr_eval(this.description.context||{})),i},get_search_context:function(e){var t=this.get_context(e);return jQuery.extend(t,e.expr_eval(this.description.search_context||{})),t},get_search_order:function(e){return e.expr_eval(this.description.search_order||null)},get_domains:function(e,t){t=(new Sao.common.DomainInversion).domain_inversion([e.group.domain4inversion(),t||[]],this.name,Sao.common.EvalEnvironment(e));return"boolean"!=typeof t||t?"boolean"==typeof t&&t&&(t=[]):t=[["id","=",null]],[t,e.expr_eval(this.description.domain||[])]},get_domain:function(e){var t=this.get_domains(e),i=t[0],e=t[1],t=new Sao.common.DomainInversion;return t.concat([t.localize_domain(i),e])},validation_domains:function(e,t){return(new Sao.common.DomainInversion).concat(this.get_domains(e,t))},get_eval:function(e){return this.get(e)},get_on_change_value:function(e){return this.get_eval(e)},set_state:function(t,e){void 0===e&&(e=["readonly","required","invisible"]);var i=t.expr_eval(this.description.states||{});e.forEach(function(e){"readonly"==e&&this.description.readonly||(void 0!==i[e]?this.get_state_attrs(t)[e]=i[e]:void 0!==this.description[e]&&(this.get_state_attrs(t)[e]=this.description[e]))}.bind(this)),(t.group.readonly||this.get_state_attrs(t).domain_readonly)&&(this.get_state_attrs(t).readonly=!0)},get_state_attrs:function(e){return this.name in e.state_attrs||(e.state_attrs[this.name]=jQuery.extend({},this.description)),(e.group.readonly||e.readonly)&&(e.state_attrs[this.name].readonly=!0),e.state_attrs[this.name]},_is_empty:function(e){return!this.get_eval(e)},check_required:function(e){var t=this.get_state_attrs(e);return 1!=t.required||!this._is_empty(e)||1==t.readonly},validate:function(e,t,i){if(this.description.readonly)return!0;var n=!1;this.get_state_attrs(e).domain_readonly=!1;var o,s,r,a,c,l,d=new Sao.common.DomainInversion,h=d.simplify(this.validation_domains(e,i));return t||this.check_required(e)||(n="required"),"boolean"==typeof h?h||(n="domain"):Sao.common.compare(h,[["id","=",null]])?n="domain":(a=(r=d.unique_value(h))[0],c=r[1],o=r[2],a&&(!1===o&&(o=null),s=!0,r="AND"==(t=jQuery.isEmptyObject(e.group.domain)?d.merge(h):d.merge(e.group.domain))[0],c.contains(".")&&(a=c.split(".",1)[0],c=c.split(".",1)[1],l=[],r&&d.localize_domain(t.slice(1)).forEach(function(e){l.push(e)}),"id"==c&&~l.indexOf(a)||(s=!1)),s&&!i&&(this.set_client(e,o),this.get_state_attrs(e).domain_readonly=r)),d.eval_domain(h,Sao.common.EvalEnvironment(e))||(n=h)),!(this.get_state_attrs(e).invalid=n)}}),Sao.field.Char=Sao.class_(Sao.field.Field,{_default:"",get:function(e){return Sao.field.Char._super.get.call(this,e)||this._default}}),Sao.field.Selection=Sao.class_(Sao.field.Field,{_default:null}),Sao.field.MultiSelection=Sao.class_(Sao.field.Field,{_default:null,get:function(e){e=Sao.field.MultiSelection._super.get.call(this,e);return jQuery.isEmptyObject(e)?e=this._default:e.sort(),e},get_eval:function(e){e=Sao.field.MultiSelection._super.get_eval.call(this,e);return e=null===e?[]:e},set_client:function(e,t,i){t=t&&t.slice().sort(),Sao.field.MultiSelection._super.set_client.call(this,e,t,i)}}),Sao.field.DateTime=Sao.class_(Sao.field.Field,{_default:null,time_format:function(e){return e.expr_eval(this.description.format)},set_client:function(e,t,i){var n;t&&(t.isTime?t=(n=this.get(e))?Sao.DateTime.combine(n,t):null:t.isDate&&(n=this.get(e)||Sao.Time(),t=Sao.DateTime.combine(t,n))),Sao.field.DateTime._super.set_client.call(this,e,t,i)},date_format:function(e){e=this.get_context(e);return Sao.common.date_format(e.date_format)}}),Sao.field.Date=Sao.class_(Sao.field.Field,{_default:null,set_client:function(e,t,i){t&&!t.isDate&&(t.isDate=!0,t.isDateTime=!1),Sao.field.Date._super.set_client.call(this,e,t,i)},date_format:function(e){e=this.get_context(e);return Sao.common.date_format(e.date_format)}}),Sao.field.Time=Sao.class_(Sao.field.Field,{_default:null,time_format:function(e){return e.expr_eval(this.description.format)},set_client:function(e,t,i){t&&(t.isDate||t.isDateTime)&&(t=Sao.Time(t.hour(),t.minute(),t.second(),t.millisecond())),Sao.field.Time._super.set_client.call(this,e,t,i)}}),Sao.field.TimeDelta=Sao.class_(Sao.field.Field,{_default:null,converter:function(e){return e.context[this.description.converter]},set_client:function(e,t,i){"string"==typeof t&&(t=Sao.common.timedelta.parse(t,this.converter(e.group))),Sao.field.TimeDelta._super.set_client.call(this,e,t,i)},get_client:function(e){var t=Sao.field.TimeDelta._super.get_client.call(this,e);return Sao.common.timedelta.format(t,this.converter(e.group))}}),Sao.field.Float=Sao.class_(Sao.field.Field,{_default:null,digits:function(e,t){void 0===t&&(t=1);e=e.expr_eval(this.description.digits);if(e&&e.every(function(e){return null!==e})){t=Math.round(Math.log(Math.abs(t))/Math.LN10);return[e[0]+t,e[1]-t]}},get_symbol:function(e,t){if(e&&t in e.model.fields){var i=this.get(e)||0,n=1;i<0?n=-1:0===i&&(n=0);i=e.model.fields[t],t=i.description.relation,i=i.get(e);if(t&&null!==i&&0<=i)return Sao.rpc({method:"model."+t+".get_symbol",params:[i,n,e.get_context()]},e.model.session,!1)||["",1]}return["",1]},check_required:function(e){var t=this.get_state_attrs(e);return 1!=t.required||null!==this.get(e)||1==t.readonly},convert:function(e){return e||0===e?(e=Number(e),isNaN(e)?this._default:e):null},apply_factor:function(e,t,i){return null!==t&&(t/=i,(e=this.digits(e))&&(t=t.toFixed(e[1])),t=this.convert(t)),t},set_client:function(e,t,i,n){void 0===n&&(n=1),t=this.apply_factor(e,this.convert(t),n),Sao.field.Float._super.set_client.call(this,e,t,i)},get_client:function(e,t){void 0===t&&(t=1);var i=this.get(e);if(null===i)return"";var n={},e=this.digits(e,t);return e&&(n.minimumFractionDigits=e[1],n.maximumFractionDigits=e[1]),(i*t).toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),n)}}),Sao.field.Numeric=Sao.class_(Sao.field.Float,{convert:function(e){return e||0===e?(e=new Sao.Decimal(e),isNaN(e.valueOf())?this._default:e):null}}),Sao.field.Integer=Sao.class_(Sao.field.Float,{convert:function(e){return e=parseInt(e,10),e=isNaN(e)?this._default:e}}),Sao.field.Boolean=Sao.class_(Sao.field.Field,{_default:!1,set_client:function(e,t,i){t=Boolean(t),Sao.field.Boolean._super.set_client.call(this,e,t,i)},get:function(e){return Boolean(e._values[this.name])},get_client:function(e){return Boolean(e._values[this.name])}}),Sao.field.Many2One=Sao.class_(Sao.field.Field,{_default:null,check_required:function(e){var t=this.get_state_attrs(e);return 1!=t.required||null!==this.get(e)||1==t.readonly},get_client:function(e){var t=(e._values[this.name+"."]||{}).rec_name;return void 0===t&&(this.set(e,this.get(e)),t=(e._values[this.name+"."]||{}).rec_name||""),t},set:function(e,t){var i,n=(e._values[this.name+"."]||{}).rec_name||"";!n&&0<=t&&null!==t&&(i=e.model.fields[this.name].description.relation,n=Sao.rpc({method:"model."+i+".read",params:[[t],["rec_name"],e.get_context()]},e.model.session,!1)[0].rec_name),Sao.setdefault(e._values,this.name+".",{}).rec_name=n,e._values[this.name]=t},set_client:function(e,t,i){var n;t instanceof Array?(n=t[1],t=t[0]):n=t==this.get(e)&&(e._values[this.name+"."]||{}).rec_name||"",Sao.setdefault(e._values,this.name+".",{}).rec_name=n,Sao.field.Many2One._super.set_client.call(this,e,t,i)},get_context:function(e,t,i){i=Sao.field.Many2One._super.get_context.call(this,e,t,i);return this.description.datetime_field&&(i._datetime=e.get_eval()[this.description.datetime_field]),i},validation_domains:function(e,t){return this.get_domains(e,t)[0]},get_domain:function(e){var t=this.get_domains(e),i=t[0],e=t[1],t=new Sao.common.DomainInversion;return t.concat([t.localize_domain(i,this.name),e])},get_on_change_value:function(e){return e.group.parent_name==this.name&&e.group.parent?e.group.parent.get_on_change_value([e.group.child_name]):Sao.field.Many2One._super.get_on_change_value.call(this,e)}}),Sao.field.One2One=Sao.class_(Sao.field.Many2One,{}),Sao.field.One2Many=Sao.class_(Sao.field.Field,{init:function(e){Sao.field.One2Many._super.init.call(this,e)},_default:null,_set_value:function(e,t,i,n){this._set_default_value(e);var o,s=e._values[this.name];jQuery.when();if(jQuery.isEmptyObject(t)&&(t=[]),"list values"==(o=jQuery.isEmptyObject(t)||!isNaN(parseInt(t[0],10))?"list ids":"list values")){var r=this.get_context(e),a={};if(t.forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(t in s.model.fields||~t.indexOf(".")||(a[t]=!0))}),!jQuery.isEmptyObject(a)){var c,r={method:"model."+this.description.relation+".fields_get",params:[Object.keys(a),r]};try{c=Sao.rpc(r,e.model.session,!1)}catch(e){return}s.add_fields(c)}}if("list ids"==o){for(var l=[],d=0,h=s.length;d<h;d++){var u=s[d];~t.indexOf(u.id)||l.push(u)}for(d=0,h=l.length;d<h;d++){var _=l[d];s.remove(_,!0,!0,!1,!1)}s.load(t,n||i)}else t.forEach(function(e){var t=s.new_(!1);i?(t.set_default(e,!1,!1),s.add(t,-1,!1)):(t.set(e),s.push(t))})},set:function(e,t,i){void 0===i&&(i=!1);var n,o=e._values[this.name];void 0!==o?(n=o.model,o.destroy()):n=e.model.name==this.description.relation?e.model:new Sao.Model(this.description.relation),e._values[this.name]=void 0,this._set_default_value(e,n),this._set_value(e,t,i)},get:function(e){var t=e._values[this.name];if(void 0===t)return[];for(var i=t.record_removed,n=t.record_deleted,e=[],o=this.description.relation_field||"",s=[],r=[],a=[],c=0,l=t.length;c<l;c++){var d,h=t[c];~i.indexOf(h)||~n.indexOf(h)||(0<=h.id?h.has_changed()&&(delete(d=h.get())[o],jQuery.isEmptyObject(d)||(a.push([h.id]),a.push(d)),s.push(h.id)):(delete(d=h.get())[o],r.push(d)))}return jQuery.isEmptyObject(s)||e.push(["add",s]),jQuery.isEmptyObject(r)||e.push(["create",r]),jQuery.isEmptyObject(a)||e.push(["write"].concat(a)),jQuery.isEmptyObject(i)||e.push(["remove",i.map(function(e){return e.id})]),jQuery.isEmptyObject(n)||e.push(["delete",n.map(function(e){return e.id})]),e},set_client:function(e,t,i){"number"==typeof(t=null===t?[]:t)&&(t=[t]);var n=this.get_eval(e),n=!Sao.common.compare(n.sort(),t.sort());this._set_value(e,t,!1,n),n?(e._changed[this.name]=!0,this.changed(e),e.validate(null,!0,!1,!0),e.group.changed()):i&&(e._changed[this.name]=!0,this.changed(e),e.validate(null,!0,!1,!0),e.group.root_group.screens.forEach(function(e){e.display()}))},get_client:function(e){return this._set_default_value(e),e._values[this.name]},set_default:function(e,t){return e._changed[this.name]=!0,this.set(e,t,!0)},set_on_change:function(e,t){var i;if(e._changed[this.name]=!0,this._set_default_value(e),t instanceof Array)return this._set_value(e,t,!1,!0);if(t&&(t.add||t.update)){var n=this.get_context(e),o=e._values[this.name].model.fields,s={},r=[];if(t.add)for(var a=0;a<t.add.length;a++)r.push(t.add[a][1]);if([r,t.update].forEach(function(e){jQuery.isEmptyObject(e)||e.forEach(function(e){Object.keys(e).forEach(function(e){e in o||"id"==e||~e.indexOf(".")||(s[e]=!0)})})}),jQuery.isEmptyObject(s))i={};else{n={method:"model."+this.description.relation+".fields_get",params:[Object.keys(s),n]};try{i=Sao.rpc(n,e.model.session,!1)}catch(e){return}}}var c=e._values[this.name];t&&t.delete&&t.delete.forEach(function(e){e=c.get(e);e&&c.remove(e,!1,!0,!1,!1)}.bind(this)),t&&t.remove&&t.remove.forEach(function(e){e=c.get(e);e&&c.remove(e,!0,!0,!1,!1)}.bind(this)),t&&(t.add||t.update)&&(t.update&&t.update.forEach(function(e){if(e.id){var t=c.get(e.id);if(t){var i,n={};for(i in e)i in s||(n[i]=e[i]);t.set_on_change(n)}}}),c.add_fields(i),t.add&&t.add.forEach(function(e){var t,i=e[0],n=e[1],e=n.id;delete n.id,t=(t=e?c.get(e):t)||c.new_(!1,e),c.add(t,i,!1),t.set_on_change(n)}),t.update&&t.update.forEach(function(e){var t;!e.id||(t=c.get(e.id))&&t.set_on_change(e)}))},_set_default_value:function(e,t){var i;void 0===e._values[this.name]&&(t=t||new Sao.Model(this.description.relation),e.model.name==this.description.relation&&(t=e.model),i=e.expr_eval(this.description.context||{}),(i=Sao.Group(t,i,[])).set_parent(e),i.parent_name=this.description.relation_field,i.child_name=this.name,i.parent_datetime_field=this.description.datetime_field,e._values[this.name]=i)},get_timestamp:function(e){var t={},i=e._values[this.name]||[],e=i.filter(function(e){return e.has_changed()});return jQuery.extend(e,i.record_removed,i.record_deleted).forEach(function(e){jQuery.extend(t,e.get_timestamp())}),t},get_eval:function(e){var t=[],i=e._values[this.name];if(void 0===i)return t;for(var n=i.record_removed,o=i.record_deleted,s=0,r=e._values[this.name].length;s<r;s++){var a=i[s];~n.indexOf(a)||~o.indexOf(a)||t.push(a.id)}return t},get_on_change_value:function(e){var t=[],i=e._values[this.name];if(void 0===i)return t;for(var n=0,o=e._values[this.name].length;n<o;n++){var s=i[n];s.deleted||s.removed||t.push(s.get_on_change_value([this.description.relation_field||""]))}return t},get_removed_ids:function(e){return e._values[this.name].record_removed.map(function(e){return e.id})},get_domain:function(e){return this.get_domains(e)[1]},validation_domains:function(e,t){return this.get_domains(e,t)[0]},validate:function(e,t,i){var n=!1,o=new Sao.common.DomainInversion,s=o.localize_domain(o.domain_inversion(e.group.clean4inversion(i||[]),this.name,Sao.common.EvalEnvironment(e)),this.name);"boolean"==typeof s&&(s=s?[]:[["id","=",null]]);for(var r=0,a=(e._values[this.name]||[]).length;r<a;r++){var c=e._values[this.name][r];!c.get_loaded()&&0<=c.id&&!i||c.validate(null,t,s,!0)||(n="children")}o=Sao.field.One2Many._super.validate.call(this,e,t,i);return o&&n?(this.get_state_attrs(e).invalid=n,!1):o},set_state:function(e,t){this._set_default_value(e),Sao.field.One2Many._super.set_state.call(this,e,t)},_is_empty:function(e){return jQuery.isEmptyObject(this.get_eval(e))}}),Sao.field.Many2Many=Sao.class_(Sao.field.One2Many,{get_on_change_value:function(e){return this.get_eval(e)}}),Sao.field.Reference=Sao.class_(Sao.field.Field,{_default:null,get_client:function(e){return e._values[this.name]?[e._values[this.name][0],(e._values[this.name+"."]||{}).rec_name||""]:null},get:function(e){return e._values[this.name]&&e._values[this.name][0]&&null!==e._values[this.name][1]&&-1<=e._values[this.name][1]?e._values[this.name].join(","):null},set_client:function(e,t,i){var n,o,s;t&&(n=(t="string"==typeof t?t.split(","):t)[0],(o=t[1])instanceof Array?(s=o[1],o=o[0]):s=[n,o=o&&!isNaN(parseInt(o,10))?parseInt(o,10):o].join(",")==this.get(e)&&(e._values[this.name+"."]||{}).rec_name||"",Sao.setdefault(e._values,this.name+".",{}).rec_name=s,t=[n,o]),Sao.field.Reference._super.set_client.call(this,e,t,i)},set:function(e,t){var i,n;t?("string"==typeof t?(i=t.split(",")[0],(n=t.split(",")[1])?isNaN(parseInt(n,10))||(n=parseInt(n,10)):n=null):(i=t[0],n=t[1]),t=(e._values[this.name+"."]||{}).rec_name||"",i&&null!==n&&0<=n?!t&&0<=n&&(t=Sao.rpc({method:"model."+i+".read",params:[[n],["rec_name"],e.get_context()]},e.model.session,!1)[0].rec_name):t=i?"":n,Sao.setdefault(e._values,this.name+".",{}).rec_name=t,e._values[this.name]=[i,n]):e._values[this.name]=this._default},get_on_change_value:function(e){return e.group.parent_name==this.name&&e.group.parent?[e.group.parent.model.name,e.group.parent.get_on_change_value([e.group.child_name])]:Sao.field.Reference._super.get_on_change_value.call(this,e)},get_context:function(e,t,i){i=Sao.field.Reference._super.get_context.call(this,e,t,i);return this.description.datetime_field&&(i._datetime=e.get_eval()[this.description.datetime_field]),i},validation_domains:function(e,t){return this.get_domains(e,t)[0]},get_domain:function(e){var t=null;e._values[this.name]&&(t=e._values[this.name][0]);var i=this.get_domains(e),n=i[0],e=i[1],i=new Sao.common.DomainInversion,n=i.filter_leaf(n,this.name,t);return n=i.prepare_reference_domain(n,this.name),i.concat([i.localize_domain(n,this.name,!0),e])},get_models:function(e){var t=this.get_domains(e),i=new Sao.common.DomainInversion,e=i.prepare_reference_domain(t[0],this.name);return i.extract_reference_models(i.concat([e,t[1]]),this.name)},_is_empty:function(e){var t=Sao.field.Reference._super._is_empty.call(this,e);return t=!t&&e._values[this.name][1]<0?!0:t}}),Sao.field.Binary=Sao.class_(Sao.field.Field,{_default:null,_has_changed:function(e,t){return e!=t},get_size:function(e){e=e._values[this.name]||0;return e instanceof Uint8Array||"string"==typeof e?e.length:e},get_data:function(t){var e=t._values[this.name]||[],i=jQuery.when(e);if(!(e instanceof Uint8Array)&&"string"!=typeof e){if(t.id<0)return i;e=t.get_context(),i=t.model.execute("read",[[t.id],[this.name]],e).then(function(e){return e=e[0][this.name],this.set(t,e),e}.bind(this))}return i}}),Sao.field.Dict=Sao.class_(Sao.field.Field,{_default:{},init:function(e){Sao.field.Dict._super.init.call(this,e),this.schema_model=new Sao.Model(e.schema_model),this.keys={}},set:function(e,t){if(t){var i,n=[];for(i in t)n.push(i);n.sort();var o,s={};for(o in n)s[i=n[o]]=t[i];t=s}Sao.field.Dict._super.set.call(this,e,t)},get:function(e){return Sao.field.Dict._super.get.call(this,e)||this._default},get_client:function(e){return Sao.field.Dict._super.get_client.call(this,e)||this._default},validation_domains:function(e,t){return this.get_domains(e,t)[0]},get_domain:function(e){var t=new Sao.common.DomainInversion,i=this.get_domains(e),e=i[0],i=i[1];return t.concat([t.localize_domain(e),i])},date_format:function(e){e=this.get_context(e);return Sao.common.date_format(e.date_format)},time_format:function(e){return"%X"},add_keys:function(e,t){this.description.schema_model;var i=this.get_context(t),n=this.get_domain(t),o=Math.min(10,Sao.config.limit);e=jQuery.extend([],e);for(var s=function(e){return this.schema_model.execute("get_keys",[e],i).then(r)}.bind(this),r=function(e){for(var t=0,i=e.length;t<i;t++){var n=e[t];this.keys[n.name]=n}}.bind(this),a=[];0<e.length;){var c=e.splice(0,o);a.push(this.schema_model.execute("search",[[["name","in",c],n],0,Sao.config.limit,null],i).then(s))}return jQuery.when.apply(jQuery,a)},add_new_keys:function(e,t){t=this.get_context(t);return this.schema_model.execute("get_keys",[e],t).then(function(e){var t=[];return e.forEach(function(e){this.keys[e.name]=e,t.push(e.name)}.bind(this)),t}.bind(this))},validate:function(e,t,i){t=Sao.field.Dict._super.validate.call(this,e,t,i);if(this.description.readonly)return t;var n,o,s=new Sao.PYSON.Decoder,i=this.get_eval(e),r=[];for(n in i)n in this.keys&&((o=this.keys[n].domain)&&r.push(s.decode(o)));i=(new Sao.common.DomainInversion).eval_domain(r,i);return i||(this.get_state_attrs(e).invalid="domain"),t&&i}})}(),function(){"use strict";Sao.Tab=Sao.class_(Object,{init:function(e){Sao.Tab.tabs.push(this),this.attributes=jQuery.extend({},e),this.buttons={},this.menu_buttons={},this.id="tab-"+Sao.Tab.counter++,this.name="",this.name_el=jQuery("<span/>"),this.view_prm=jQuery.when()},menu_def:function(){return[{id:"switch_",icon:"tryton-switch",label:Sao.i18n.gettext("Switch"),tooltip:Sao.i18n.gettext("Switch view")},{id:"previous",icon:"tryton-back",label:Sao.i18n.gettext("Previous"),tooltip:Sao.i18n.gettext("Previous Record")},{id:"next",icon:"tryton-forward",label:Sao.i18n.gettext("Next"),tooltip:Sao.i18n.gettext("Next Record")},{id:"search",icon:"tryton-search",label:Sao.i18n.gettext("Search")},null,{id:"new_",icon:"tryton-create",label:Sao.i18n.gettext("New"),tooltip:Sao.i18n.gettext("Create a new record")},{id:"save",icon:"tryton-save",label:Sao.i18n.gettext("Save"),tooltip:Sao.i18n.gettext("Save this record")},{id:"reload",icon:"tryton-refresh",label:Sao.i18n.gettext("Reload/Undo"),tooltip:Sao.i18n.gettext("Reload")},{id:"copy",icon:"tryton-copy",label:Sao.i18n.gettext("Duplicate")},{id:"delete_",icon:"tryton-delete",label:Sao.i18n.gettext("Delete")},null,{id:"logs",icon:"tryton-log",label:Sao.i18n.gettext("View Logs...")},{id:this.screen&&Sao.common.MODELHISTORY.contains(this.screen.model_name)?"revision":null,icon:"tryton-history",label:Sao.i18n.gettext("Show revisions...")},null,{id:"attach",icon:"tryton-attach",label:Sao.i18n.gettext("Attachment"),tooltip:Sao.i18n.gettext("Add an attachment to the record"),dropdown:!0},{id:"note",icon:"tryton-note",label:Sao.i18n.gettext("Note"),tooltip:Sao.i18n.gettext("Add a note to the record")},{id:"action",icon:"tryton-launch",label:Sao.i18n.gettext("Action")},null,{id:"relate",icon:"tryton-link",label:Sao.i18n.gettext("Relate")},{id:"print",icon:"tryton-print",label:Sao.i18n.gettext("Print")},{id:"email",icon:"tryton-email",label:Sao.i18n.gettext("E-Mail..."),tooltip:Sao.i18n.gettext("Send an e-mail using the record")},null,{id:"export",icon:"tryton-export",label:Sao.i18n.gettext("Export")},{id:"import",icon:"tryton-import",label:Sao.i18n.gettext("Import")},null,{id:"close",icon:"tryton-close",label:Sao.i18n.gettext("Close Tab")}]},create_tabcontent:function(){this.el=jQuery("<div/>",{class:"panel panel-default "+this.class_});var e=this.create_toolbar().appendTo(this.el);this.title=e.find(".title"),this.main=jQuery("<div/>",{class:"panel-body row"}).appendTo(this.el),this.content=jQuery("<div/>",{class:"col-xs-12"}).appendTo(this.main),this.info_bar&&this.el.append(this.info_bar.el)},set_menu:function(n){var o;this.menu_def().forEach(function(t){if(t){if(!this[t.id])return;var e=jQuery("<li/>",{role:"presentation"}),i=jQuery("<a/>",{id:t.id,role:"menuitem",href:"#",tabindex:-1}).text(" "+t.label).prepend(Sao.common.ICONFACTORY.get_icon_img(t.icon,{"aria-hidden":"true"})).appendTo(e);this.menu_buttons[t.id]=e,i.click(function(e){e.preventDefault(),this[t.id]()}.bind(this))}else{if(t||!o)return;e=jQuery("<li/>",{role:"separator",class:"divider hidden-xs"})}(o=e).appendTo(n)}.bind(this))},create_toolbar:function(){var i,n=jQuery("<nav/>",{class:"toolbar panel-heading",role:"toolbar"}).append(jQuery("<div/>",{class:"container-fluid navbar-inverse"}).append(jQuery("<div/>",{class:"dropdown navbar-header navbar-left flip"}).append(jQuery("<a/>",{href:"#",class:"navbar-brand dropdown-toggle","data-toggle":"dropdown",role:"button","aria-expanded":!1,"aria-haspopup":!0}).append(jQuery("<span/>",{class:"title"})).append(jQuery("<span/>",{class:"caret"}))).append(jQuery("<ul/>",{class:"dropdown-menu",role:"menu"})).append(jQuery("<button/>",{type:"button",class:"close visible-xs","aria-label":Sao.i18n.gettext("Close")}).append(jQuery("<span/>",{"aria-hidden":!0}).append("×")).click(function(){this.close()}.bind(this)))).append(jQuery("<div/>",{class:"btn-toolbar navbar-right flip",role:"toolbar"})));this.set_menu(n.find('ul[role*="menu"]'));return this.menu_def().forEach(function(e){var t;e&&e.tooltip?e.id&&this[e.id]&&(i=i||jQuery("<div/>",{class:"btn-group",role:"group"}).appendTo(n.find(".btn-toolbar")),t={type:"button",class:"btn btn-default navbar-btn",title:e.label,id:e.id},e.dropdown&&(t.class+=" dropdown-toggle",t["data-toggle"]="dropdown",t["aria-expanded"]=!1,t["aria-haspopup"]=!0),t=jQuery("<button/>",t).append(Sao.common.ICONFACTORY.get_icon_img(e.icon,{"aria-hidden":"true"})),this.buttons[e.id]=t,e.dropdown?jQuery("<div/>",{class:"btn-group dropdown",role:"group"}).append(t.append(jQuery("<span/>",{class:"caret"}))).append(jQuery("<ul/>",{class:"dropdown-menu",role:"menu","aria-labelledby":e.id})).appendTo(i):t.appendTo(i),this.buttons[e.id].click(e,function(e){var t=e.data,i=this.buttons[t.id];i.data("disabled")?e.preventDefault():(i.data("disabled",!0),(this[t.id](this)||jQuery.when()).always(function(){i.data("disabled",!1)}))}.bind(this))):i=null}.bind(this)),this.buttons.previous&&(this.status_label=jQuery("<span/>",{class:"badge"}).appendTo(jQuery("<div/>",{class:"navbar-text hidden-xs"}).insertAfter(this.buttons.previous)),this.buttons.previous.addClass("hidden-xs")),this.buttons.next&&this.buttons.next.addClass("hidden-xs"),n.find(".btn-toolbar > .btn-group").last().addClass("hidden-xs").find(".dropdown").on("show.bs.dropdown",function(){jQuery(this).parents(".btn-group").removeClass("hidden-xs")}).on("hide.bs.dropdown",function(){jQuery(this).parents(".btn-group").addClass("hidden-xs")}),n},show:function(){jQuery("#tablist").find('a[href="#'+this.id+'"]').tab("show")},close:function(){var i=jQuery("#tabs"),n=jQuery("#tablist").find("#nav-"+this.id),o=i.find("#"+this.id);return this.show(),this._close_allowed().then(function(){var e=n.nextAll("li").first();e.length||(e=n.prevAll("li").first()),n.remove(),o.remove();var t=Sao.Tab.tabs.indexOf(this);0<=t&&Sao.Tab.tabs.splice(t,1),e.length?e.find("a").tab("show"):Sao.set_url(),i.trigger("ready")}.bind(this))},_close_allowed:function(){return jQuery.when()},set_name:function(e){this.name=e,this.name_el.text(Sao.common.ellipsize(e,20)),this.name_el.attr("title",e)},get_url:function(){},compare:function(e){return!1}}),Sao.Tab.counter=0,Sao.Tab.tabs=[],Sao.Tab.tabs.close=function(e){if(e&&Sao.Tab.tabs.length)return Sao.common.sur.run(Sao.i18n.gettext("The following action requires to close all tabs.\nDo you want to continue?")).then(function(){return Sao.Tab.tabs.close(!1)});if(Sao.Tab.tabs.length){var t=Sao.Tab.tabs[0];return t.close().then(function(){return~Sao.Tab.tabs.indexOf(t)?jQuery.Deferred().reject():Sao.Tab.tabs.close()})}return Sao.main_menu_screen?Sao.main_menu_screen.save_tree_state().then(function(){Sao.main_menu_screen=null}):jQuery.when()},Sao.Tab.tabs.get_current=function(){return jQuery("#tablist").find("li.active").data("tab")},Sao.Tab.tabs.close_current=function(){this.get_current().close()},Sao.Tab.create=function(e){var t=jQuery("#tablist");void 0===e.context&&(e.context={});for(var i,n=0;n<Sao.Tab.tabs.length;n++){var o=Sao.Tab.tabs[n];if(o.compare(e))return void t.find('a[href="#'+o.id+'"]').tab("show")}(i=e.model?new Sao.Tab.Form(e.model,e):new Sao.Tab.Board(e)).view_prm.done(function(){Sao.Tab.add(i)})},Sao.Tab.add=function(t){var i=jQuery("#tabs"),e=jQuery("#tablist"),n=jQuery("#tabcontent"),o=jQuery("<a/>",{"aria-controls":t.id,role:"tab","data-toggle":"tab",href:"#"+t.id}).on("show.bs.tab",function(){Sao.set_url(t.get_url(),t.name)}).append(jQuery("<button/>",{class:"close"}).append(jQuery("<span/>",{"aria-hidden":!0}).append("×")).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Close"))).click(function(e){e.preventDefault(),t.close()})).append(t.name_el);jQuery("<li/>",{role:"presentation","data-placement":"bottom",id:"nav-"+t.id}).append(o).appendTo(e).data("tab",t),jQuery("<div/>",{role:"tabpanel",class:"tab-pane",id:t.id}).append(t.el).appendTo(n),o.on("hide.bs.tab",function(e){jQuery(e.target).data("scrollTop",i.scrollTop())}),o.on("shown.bs.tab",function(e){i.scrollTop(jQuery(e.target).data("scrollTop")||0)}),o.tab("show"),i.trigger("ready")},Sao.Tab.previous_tab=function(){Sao.Tab.move("prevAll")},Sao.Tab.next_tab=function(){Sao.Tab.move("nextAll")},Sao.Tab.move=function(e){var t=this.tabs.get_current(),i=jQuery("#tabs"),n=jQuery("#tablist"),t=n.find("#nav-"+t.id)[e]("li").first();(t=!t.length?"prevAll"==e?n.find("li").last():n.find("li").first():t)&&(t.find("a").tab("show"),i.trigger("ready"))},Sao.Tab.Form=Sao.class_(Sao.Tab,{class_:"tab-form",init:function(e,t){Sao.Tab.Form._super.init.call(this,t);var i=(i=(t=jQuery.extend({},t)).name)||Sao.common.MODELNAME.get(e);this.set_name(i),t.breadcrumb=[i];var n=new Sao.Screen(e,t);(n.tab=this).screen=n,this.info_bar=new Sao.Window.InfoBar,this.create_tabcontent(),this.attachment_screen=null,n.message_callback=this.record_message.bind(this),n.switch_callback=function(){this===Sao.Tab.tabs.get_current()&&Sao.set_url(this.get_url(),this.name)}.bind(this),this.set_buttons_sensitive(),this.view_prm=this.screen.switch_view().done(function(){this.screen.count_tab_domain(),this.content.append(n.screen_container.el),t.res_id?(jQuery.isArray(t.res_id)||(t.res_id=[t.res_id]),n.group.load(t.res_id),n.current_record=n.group.get(t.res_id),n.display()):("form"==n.current_view.view_type&&n.new_(),~["tree","graph","calendar"].indexOf(n.current_view.view_type)&&n.search_filter()),this.update_revision()}.bind(this))},create_toolbar:function(){var n=Sao.Tab.Form._super.create_toolbar.call(this),r=this.screen,s=r.model.execute("view_toolbar_get",[],r.context,!1);return[["action","tryton-launch",Sao.i18n.gettext("Launch action")],["relate","tryton-link",Sao.i18n.gettext("Open related records")],["print","tryton-print",Sao.i18n.gettext("Print report")]].forEach(function(o){var e=jQuery("<div/>",{class:"btn-group dropdown",role:"group"}).append(jQuery("<button/>",{type:"button",class:"btn btn-default navbar-btn dropdown-toggle","data-toggle":"dropdown","aria-expanded":!1,"aria-haspopup":!0,title:o[2],id:o[0]}).append(Sao.common.ICONFACTORY.get_icon_img(o[1],{"aria-hidden":"true"})).append(jQuery("<span/>",{class:"caret"}))).append(jQuery("<ul/>",{class:"dropdown-menu",role:"menu","aria-labelledby":o[0]})).insertBefore(n.find("button#email")),t=e.find("button");this.buttons[o[0]]=t,e.on("show.bs.dropdown",function(){jQuery(this).parents(".btn-group").removeClass("hidden-xs")}).on("hide.bs.dropdown",function(){jQuery(this).parents(".btn-group").addClass("hidden-xs")});var i=e.find(".dropdown-menu");t.click(function(){i.find(["."+o[0]+"_button",".divider-button","."+o[0]+"_plugin",".divider-plugin"].join(",")).remove();var e=r.get_buttons().filter(function(e){return o[0]==(e.attributes.keyword||"action")});e.length&&i.append(jQuery("<li/>",{role:"separator",class:"divider divider-button"})),e.forEach(function(t){jQuery("<li/>",{role:"presentation",class:o[0]+"_button"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(t.attributes.string||"")).click(function(e){e.preventDefault(),r.button(t.attributes)}).appendTo(i)});var n=[];Sao.Plugins.forEach(function(e){e.get_plugins(r.model.name).forEach(function(e){var t=e[0],i=e[1];(e[2]||"action")==o[0]&&n.push([t,i])})}),n.length&&i.append(jQuery("<li/>",{role:"separator",class:"divider divider-plugin"})),n.forEach(function(e){var t=e[0],n=e[1];jQuery("<li/>",{role:"presentation",class:o[0]+"_plugin"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(t)).click(function(e){e.preventDefault();var t=r.current_view.selected_records.map(function(e){return e.id}),i=r.current_record?r.current_record.id:null,e=r.context_screen?r.context_screen.model_name:null;n({model:r.model.name,model_context:e,id:i,ids:t,paths:r.selected_paths})}).appendTo(i)})}),s[o[0]].forEach(function(s){jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(s.name)).click(function(e){e.preventDefault(),this.modified_save().then(function(){var e=jQuery.extend({},s),t=null;r.current_record&&(t=r.current_record.id);var i="listed"==s.records?(o=r.listed_records,r.listed_paths):(o=r.selected_records,r.selected_paths),n=o.map(function(e){return e.id}),o=r.context_screen?r.context_screen.model_name:null,i={model:r.model_name,model_context:o,id:t,ids:n,paths:i};Sao.Action.execute(e,i,jQuery.extend({},r.local_context))})}.bind(this)).appendTo(i)}.bind(this)),"action"!=o[0]&&(t._can_be_sensitive=Boolean(i.children().length)),"print"==o[0]&&s.exports.length&&(t._can_be_sensitive=!0,s.print.length&&i.append(jQuery("<li/>",{role:"separator",class:"divider"})),s.exports.forEach(function(t){jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(t.name)).click(function(e){e.preventDefault(),this.do_export(t)}.bind(this)).appendTo(i)}.bind(this)))}.bind(this)),this.buttons.attach.on("dragover",!1).on("drop",this.attach_drop.bind(this)),n},create_tabcontent:function(){Sao.Tab.Form._super.create_tabcontent.call(this),this.attachment_preview=jQuery("<div/>",{class:"col-xs-12 attachment-preview"}).prependTo(this.main)},compare:function(e){if(!e)return!1;var t=Sao.common.compare;return this.screen.model_name===e.model&&this.attributes.res_id===e.res_id&&t(this.attributes.domain||[],e.domain||[])&&t(this.attributes.view_ids||[],e.view_ids||[])&&(e.view_ids||t(this.attributes.mode||["tree","form"],e.mode||["tree","form"]))&&JSON.stringify(this.screen.local_context)===JSON.stringify(e.context)&&t(this.attributes.search_value||[],e.search_value||[])&&JSON.stringify(this.screen.attributes.tab_domain)===JSON.stringify(e.tab_domain)},_close_allowed:function(){return this.modified_save().then(null,function(e){return e?jQuery.Deferred().resolve():jQuery.Deferred().reject()})},modified_save:function(){return this.screen.save_tree_state(),this.screen.current_view.set_value(),this.screen.modified()?Sao.common.sur_3b.run(Sao.i18n.gettext("This record has been modified\ndo you want to save it?")).then(function(e){switch(e){case"ok":return this.save();case"ko":var t=this.screen.current_record.id;return this.reload(!1).then(function(){return t<0?jQuery.Deferred().reject(!0):this.screen.current_record&&t!=this.screen.current_record.id?jQuery.Deferred().reject():void 0}.bind(this));default:return jQuery.Deferred().reject()}}.bind(this)):jQuery.when()},new_:function(){return Sao.common.MODELACCESS.get(this.screen.model_name).create?this.modified_save().then(function(){return this.screen.new_().then(function(){this.info_bar.message()}.bind(this))}.bind(this)):jQuery.when()},save:function(e){e&&this.screen.save_tree_state();e=Sao.common.MODELACCESS.get(this.screen.model_name);return e.write||e.create?this.screen.save_current().then(function(){this.info_bar.message(Sao.i18n.gettext("Record saved."),"info"),this.screen.count_tab_domain(!0)}.bind(this),function(){return this.info_bar.message(this.screen.invalid_message(),"danger"),jQuery.Deferred().reject()}.bind(this)):jQuery.Deferred().reject()},switch_:function(){return this.modified_save().then(function(){return this.screen.switch_view()}.bind(this))},reload:function(e){void 0===e&&(e=!0);var t=function(){return this.screen.cancel_current().then(function(){var t=!1,i=null;return this.screen.current_record&&(i=this.screen.current_record.id),"form"!=this.screen.current_view.view_type?this.screen.search_filter(this.screen.screen_container.search_entry.val()).then(function(){return this.screen.group.forEach(function(e){e.id==i&&(this.screen.current_record=e,t=!0)}.bind(this)),t}.bind(this)):t}.bind(this)).then(function(e){return this.screen.display(e).then(function(){this.info_bar.message(),this.screen.count_tab_domain()}.bind(this))}.bind(this))}.bind(this);return e?this.modified_save().then(t):(this.screen.save_tree_state(!1),t())},copy:function(){return Sao.common.MODELACCESS.get(this.screen.model_name).create?this.modified_save().then(function(){return this.screen.copy().then(function(){this.info_bar.message(Sao.i18n.gettext("Working now on the duplicated record(s)."),"info"),this.screen.count_tab_domain(!0)}.bind(this))}.bind(this)):jQuery.when()},delete_:function(){if(!Sao.common.MODELACCESS.get(this.screen.model_name).delete)return jQuery.when();var e="form"==this.screen.current_view.view_type?Sao.i18n.gettext("Are you sure to remove this record?"):Sao.i18n.gettext("Are you sure to remove those records?");return Sao.common.sur.run(e).then(function(){return this.screen.remove(!0,!1,!0).then(function(){this.info_bar.message(Sao.i18n.gettext("Records removed."),"info"),this.screen.count_tab_domain(!0)}.bind(this),function(){this.info_bar.message(Sao.i18n.gettext("Records not removed."),"danger")}.bind(this))}.bind(this))},previous:function(){return this.modified_save().then(function(){var e=this.screen.display_previous();return this.info_bar.message(),e}.bind(this))},next:function(){return this.modified_save().then(function(){var e=this.screen.display_next();return this.info_bar.message(),e}.bind(this))},search:function(){var e=this.screen.screen_container.search_entry;return e.is(":visible")&&window.setTimeout(function(){e.focus()},0),jQuery.when()},logs:function(){var e=this.screen.current_record;if(!e||e.id<0)return this.info_bar.message(Sao.i18n.gettext("You have to select one record."),"info"),jQuery.when();var t=[["id",Sao.i18n.gettext("ID:")],["create_uid.rec_name",Sao.i18n.gettext("Created by:")],["create_date",Sao.i18n.gettext("Created at:")],["write_uid.rec_name",Sao.i18n.gettext("Edited by:")],["write_date",Sao.i18n.gettext("Edited at:")]];return this.screen.model.execute("read",[[e.id],t.map(function(e){return e[0]})],this.screen.context).then(function(o){o=o[0];var s="";t.forEach(function(e){var t=e[0],i=e[1],n=o,e=t.split("."),t=e.splice(-1);e.forEach(function(e){n=n[e+"."]||{}}),(n=(n||{})[t]||"/")&&n.isDateTime&&(n=Sao.common.format_datetime(Sao.common.date_format()+" %H:%M:%S",n)),s+=i+" "+n+"\n"}),s+=Sao.i18n.gettext("Model: ")+this.screen.model.name,Sao.common.message.run(s)}.bind(this))},revision:function(){var i=null;this.screen.current_record&&(i=this.screen.current_record.id);var t=function(t){return function(e){e&&e.add(1,"milliseconds"),(e="form"==this.screen.current_view.view_type&&e<t[t.length-1][0]?t[t.length-1][0]:e)!=this.screen.context._datetime&&(this.screen.clear(),this.screen.group._context._datetime=e,"form"!=this.screen.current_view.view_type?this.screen.search_filter(this.screen.screen_container.search_entry.val()):this.screen.group.load([i]),this.screen.display(!0),this.update_revision())}.bind(this)}.bind(this);return this.modified_save().then(function(){var e=this.screen.current_view.selected_records.map(function(e){return e.id});return this.screen.model.execute("history_revisions",[e],this.screen.context).then(function(e){new Sao.Window.Revision(e,t(e))})}.bind(this))},update_revision:function(){var e,t,i=this.screen.context._datetime;t=i?(e=Sao.common.date_format(this.screen.context.date_format),t=" @ "+Sao.common.format_datetime(e+" %H:%M:%S.%f",i),e=Sao.common.ellipsize(this.name,80-t.length)+t,this.name+t):(e=Sao.common.ellipsize(this.name,80),this.name),this.title.text(e),this.title.attr("title",t),this.set_buttons_sensitive(i)},set_buttons_sensitive:function(e){e?["new_","save","delete_","copy","import"].forEach(function(e){this.buttons[e]&&this.buttons[e].addClass("disabled"),this.menu_buttons[e]&&this.menu_buttons[e].addClass("disabled")}.bind(this)):[["new_",(e=Sao.common.MODELACCESS.get(this.screen.model_name)).create],["save",e.create||e.write],["delete_",e.delete],["copy",e.create],["import",e.create]].forEach(function(e){var t=e[0],e=e[1];this.buttons[t]&&this.buttons[t].toggleClass("disabled",!e),this.menu_buttons[t]&&this.menu_buttons[t].toggleClass("disabled",!e)}.bind(this))},attach:function(e){var t,n,o=function(){return new Sao.Window.Attachment(t,function(){this.refresh_resources(!0)}.bind(this))}.bind(this),i=function(){this.attachment_preview.children().length?(this.attachment_preview.empty(),this.attachment_screen=null,this.attachment_preview.removeClass("col-md-4 col-md-push-8"),this.content.removeClass("col-md-8 col-md-pull-4")):(this.attachment_preview.append(this._attachment_preview_el()),this.refresh_attachment_preview(),this.attachment_preview.addClass("col-md-4 col-md-push-8"),this.content.addClass("col-md-8 col-md-pull-4"))}.bind(this),s=this.buttons.attach.parents(".dropdown");e?(t=this.screen.current_record,(n=s.find(".dropdown-menu")).empty(),Sao.Window.Attachment.get_attachments(t).then(function(e){e.forEach(function(e){var t=e[0],i=e[1],t=jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(t).appendTo(jQuery("<li/>",{role:"presentation"}).appendTo(n));"string"==typeof i?(t.attr("href",i),t.attr("target","_new")):t.click(function(e){e.preventDefault(),i()})})}).always(function(){n.append(jQuery("<li/>",{class:"divider"})),n.append(jQuery("<li/>",{role:"presentation",class:"input-file"}).append(jQuery("<input/>",{type:"file",role:"menuitem",multiple:!0,tabindex:-1}).change(function(){var i=o();Sao.common.get_input_data(jQuery(this),function(e,t){i.add_data(e,t)})})).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(Sao.i18n.gettext("Add...")))),n.append(jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(Sao.i18n.gettext("Preview")).click(function(e){e.preventDefault(),i()}))),n.append(jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(Sao.i18n.gettext("Manage...")).click(function(e){e.preventDefault(),o()})))})):window.setTimeout(function(){this.buttons.attach.click()}.bind(this))},attach_drop:function(e){e.preventDefault(),e.stopPropagation(),e=e.originalEvent;var t=this.screen.current_record;if(t&&!(t.id<0)){var i,n,o=[],s=[],r=[];if(e.dataTransfer.items)for(console.log(e.dataTransfer.items),i=0;i<e.dataTransfer.items.length;i++){var a,c=e.dataTransfer.items[i];if("string"==c.kind){if("text/uri-list"==c.type)a=s;else{if("text/plain"!=c.type)continue;a=r}c=jQuery.Deferred();e.dataTransfer.items[i].getAsString(c.resolve),a.push(c);break}(n=e.dataTransfer.items[i].getAsFile())&&o.push(n)}else for(i=0;i<e.dataTransfer.files.length;i++)(n=e.dataTransfer.files[i])&&o.push(n);var l=new Sao.Window.Attachment(t,function(){this.refresh_resources(!0)}.bind(this));o.forEach(function(e){Sao.common.get_file_data(e,function(e,t){l.add_data(e,t)})}),jQuery.when.apply(jQuery,s).then(function(){function e(e){return Boolean(e)}for(var t=0;t<arguments.length;t++)arguments[t].split("\r\n").filter(e).forEach(l.add_uri,l)}),jQuery.when.apply(jQuery,r).then(function(){for(var e=0;e<arguments.length;e++)l.add_text(arguments[e])}),e.dataTransfer.items?e.dataTransfer.items.clear():e.dataTransfer.clearData()}},_attachment_preview_el:function(){var e=jQuery("<div/>",{class:"text-center"}),t=jQuery("<div/>",{class:"btn-group"}).appendTo(e),n=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(t),o=jQuery("<span/>",{class:"badge"}).text("(0/0)").appendTo(jQuery("<span/>",{class:"btn btn-sm btn-link"}).appendTo(t)),s=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(t),i=new Sao.Screen("ir.attachment",{readonly:!0,mode:["form"],context:{preview:!0}});return this.attachment_screen=i,n.click(function(){i.display_previous()}),s.click(function(){i.display_next()}),i.message_callback=function(e){var t=e[0],i=e[1],e=(t||"_")+"/"+i;o.text(e).attr("title",e),n.prop("disabled",!t||t<=1),s.prop("disabled",!t||i<=t)},i.switch_view().done(function(){e.append(i.screen_container.el)}),e},refresh_attachment_preview:function(e){var t;!this.attachment_screen||(t=this.screen.current_record)&&(t=[["resource","=",t.model.name+","+t.id],["type","=","data"]],Sao.common.compare(this.attachment_screen.domain,t)&&!e||(this.attachment_screen.domain=t,this.attachment_screen.search_filter()))},note:function(){var e=this.screen.current_record;!e||e.id<0||new Sao.Window.Note(e,function(){this.refresh_resources(!0)}.bind(this))},email:function(){function a(e){return"ir.action.report"==e.type}this.buttons.email.hasClass("disabled")||this.modified_save().then(function(){var s,r=this.screen.current_record;!r||r.id<0||(s=this.title.text(),this.screen.model.execute("view_toolbar_get",[],this.screen.context).then(function(e){for(var i=e.print.filter(a),n={},t=0;t<e.emails.length;t++){var o=e.emails[t];n[o.name]=o.id}r.rec_name().then(function(t){function e(e){new Sao.Window.Email(s+": "+t,r,i,e)}Sao.common.selection(Sao.i18n.gettext("Template"),n,!0).then(e,e)})}))}.bind(this))},refresh_resources:function(e){var t=this.screen.current_record;t?t.get_resources(e).always(this.update_resources.bind(this)):this.update_resources(),e&&this.refresh_attachment_preview(!0)},update_resources:function(e){e=e||{};var t=this.screen.get_id(),s=t<0||null==t,i=function(e,t,i,n){var o=this.buttons[e],e=o.find(".badge");e.length||(e=jQuery("<span/>",{class:"badge"}).appendTo(o)),n=n?Sao.config.icon_colors[n]:"",e.css("background-color",n),e.css("color","#fff"),e.text(i),o.attr("title",t),o.prop("disabled",s)}.bind(this),n=(o=e.attachment_count||0)||"";99<o&&(n="99+"),i("attach",Sao.i18n.gettext("Attachment (%1)",o),n,1);var o=e.note_count||0,t=e.note_unread||0,n="",e=0<t?2:1;o&&(n=9<o?"+":o,n=9<t?"+/"+n:t+"/"+n),i("note",Sao.i18n.gettext("Note (%1/%2)",t,o),n,e)},record_message:function(n){var e;n&&(e="_",0!==n[0]&&(e=n[0]),["print","relate","email","save","attach"].forEach(function(t){var e=this.buttons[t],i=e._can_be_sensitive;void 0===i&&(i=!0),"print"==t||"relate"==t||"email"==t?i|=this.screen.get_buttons().some(function(e){return(e.attributes.keyword||"action")==t}):"save"==t&&(i&=!this.screen.readonly),e.prop("disabled",!(n[0]&&i))}.bind(this)),this.buttons.switch_.prop("disabled",1<this.attributes.view_ids),this.menu_buttons.delete_.toggleClass("disabled",!this.screen.deletable),this.menu_buttons.save.toggleClass("disabled",this.screen.readonly),e=e+" / "+n[1],n[1]<n[2]&&null!==this.screen.limit&&n[2]>this.screen.limit&&(e+=Sao.i18n.gettext(" of ")+n[2]),this.status_label.text(e).attr("title",e)),this.info_bar.message(),this.refresh_attachment_preview()},action:function(){window.setTimeout(function(){this.buttons.action.click()}.bind(this))},relate:function(){window.setTimeout(function(){this.buttons.relate.click()}.bind(this))},print:function(){window.setTimeout(function(){this.buttons.print.click()}.bind(this))},export:function(){this.modified_save().then(function(){new Sao.Window.Export(this.title.text(),this.screen,this.screen.current_view.get_fields())}.bind(this))},do_export:function(o){this.modified_save().then(function(){var e,i=this.screen.current_view&&"tree"==this.screen.current_view.view_type&&this.screen.current_view.children_field?(e=this.screen.listed_records.map(function(e){return e.id}),this.screen.listed_paths):(e=this.screen.selected_records.map(function(e){return e.id}),this.screen.selected_paths),n=o["export_fields."].map(function(e){return e.name});this.screen.model.execute("export_data",[e,n],this.screen.context).then(function(e){var t={fields:n,data:e};t.data=e.map(function(e,t){t=i&&i[t]?i[t].length-1:0;return Sao.Window.Export.format_row(e,t)});e=",";navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(e=";");e=Papa.unparse(t,{quoteChar:'"',delimiter:e});navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(e=Sao.BOM_UTF8+e),Sao.common.download_file(e,o.name+".csv",{type:"text/csv;charset=utf-8"})})}.bind(this))},import:function(){Sao.common.MODELACCESS.get(this.screen.model_name).create&&new Sao.Window.Import(this.title.text(),this.screen)},get_url:function(){return this.screen.get_url(this.name)}}),Sao.Tab.Board=Sao.class_(Sao.Tab,{class_:"tab-board",init:function(e){Sao.Tab.Board._super.init.call(this,e),this.model=e.model,this.view_id=0<e.view_ids.length?e.view_ids[0]:null,this.context=e.context;var e=(e=e.name)||Sao.common.MODELNAME.get(this.model);this.name=e,this.dialogs=[],this.board=null,e=new Sao.Model("ir.ui.view"),this.view_prm=e.execute("read",[[this.view_id],["arch"]],this.context),this.view_prm.done(function(e){e=jQuery(jQuery.parseXML(e[0].arch));this.board=new Sao.View.Board(e,this.context),this.board.actions_prms.done(function(){for(var e=0,t=this.board.actions.length;e<t;e++)this.board.actions[e].screen.tab=this;this.board.reload()}.bind(this)),this.content.append(this.board.el)}.bind(this)),this.create_tabcontent(),this.set_name(this.name),this.title.text(this.name_el.text())},compare:function(e){if(!e)return!1;var t=Sao.common.compare;return this.model===e.model&&t(this.attributes.view_ids||[],e.view_ids||[])&&JSON.stringify(this.context)===JSON.stringify(e.context)},reload:function(){this.board.reload()},record_message:function(){for(var e=this.board.actions.length,t=0;t<e;t++)this.board.actions[t].update_domain(this.board.actions)},refresh_resources:function(){},update_resources:function(){}}),Sao.Tab.Wizard=Sao.class_(Sao.Tab,{class_:"tab-wizard",init:function(e){Sao.Tab.Wizard._super.init.call(this),this.wizard=e,this.set_name(e.name),(e.tab=this).create_tabcontent(),this.title.text(this.name_el.text()),this.content.remove(),this.content=e.form,this.main.css("padding-top",0).append(e.form)},create_toolbar:function(){return jQuery("<span/>")},_close_allowed:function(){var e=this.wizard;e.state!==e.end_state&&e.end_state in e.states&&e.response(e.states[e.end_state].attributes);var t=jQuery.Deferred();return e.state===e.end_state?t.resolve():t.reject(),t.promise()}})}(),function(){"use strict";Sao.ScreenContainer=Sao.class_(Object,{init:function(e){this.alternate_viewport=jQuery("<div/>",{class:"screen-container"}),this.alternate_view=!1,this.search_modal=null,this.search_form=null,this.last_search_text="",this.tab_domain=e||[],this.tab_counter=[],this.el=jQuery("<div/>",{class:"screen-container"}),this.filter_box=jQuery("<form/>",{class:"filter-box"}).submit(function(e){this.do_search(),e.preventDefault()}.bind(this));var t=jQuery("<div/>",{class:"row"}).appendTo(this.filter_box);this.el.append(this.filter_box),this.filter_button=jQuery("<button/>",{type:"button",class:"btn btn-link"}).text(Sao.i18n.gettext("Filters")),this.filter_button.click(this.search_box.bind(this)),this.search_entry=jQuery("<input/>",{class:"form-control mousetrap",placeholder:Sao.i18n.gettext("Search"),autocomplete:"off"}),this.search_list=jQuery("<datalist/>"),this.search_list.uniqueId(),this.search_entry.attr("list",this.search_list.attr("id")),this.search_entry.on("input",this.update.bind(this));var i=jQuery("<button/>",{type:"button",class:"btn btn-default hidden-md hidden-lg","aria-label":Sao.i18n.gettext("Clear Search"),title:Sao.i18n.gettext("Clear Search")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-clear"));i.hide(),i.click(function(){this.search_entry.val("").change(),this.do_search()}.bind(this)),this.search_entry.on("keyup change",function(){this.search_entry.val()?i.show():i.hide(),this.bookmark_match()}.bind(this));e=jQuery("<button/>",{type:"submit",class:"btn btn-default","aria-label":Sao.i18n.gettext("Search"),title:Sao.i18n.gettext("Search")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-search"));this.but_active=jQuery("<button/>",{type:"button",class:"btn btn-default hidden-xs","aria-expanded":!1}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-archive",{"aria-hidden":!0})),this._set_active_tooltip(),this.but_active.click(this.search_active.bind(this)),this.but_bookmark=jQuery("<button/>",{type:"button",class:"btn btn-default dropdown-toggle","data-toggle":"dropdown","aria-expanded":!1,"aria-label":Sao.i18n.gettext("Bookmarks"),title:Sao.i18n.gettext("Bookmarks")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-bookmark",{"aria-hidden":!0})).uniqueId();var n,o,s=jQuery("<ul/>",{class:"dropdown-menu dropdown-menu-right",role:"menu","aria-labelledby":this.but_bookmark.attr("id")});this.but_bookmark.click(function(){s.empty();for(var e=this.bookmarks(),t=0;t<e.length;t++){var i=e[t][1],n=e[t][2];jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{role:"menuitem",href:"#",tabindex:-1}).text(i).click(n,this.bookmark_activate.bind(this))).appendTo(s)}}.bind(this)),this.but_star=jQuery("<button/>",{class:"btn btn-default hidden-xs",type:"button"}).append(jQuery("<img/>",{class:"icon","aria-hidden":!0}).data("star",!1)).click(this.star_click.bind(this)),this.set_star(),jQuery("<div/>",{class:"input-group input-group-sm"}).append(jQuery("<span/>",{class:"input-group-btn"}).append(this.filter_button)).append(this.search_entry).append(this.search_list).append(jQuery("<span/>",{class:"input-group-btn"}).append(i).append(e).append(this.but_star).append(this.but_bookmark).append(s).append(this.but_active)).appendTo(jQuery("<div/>",{class:"col-sm-10 col-xs-12"}).appendTo(t)),this.but_prev=jQuery("<button/>",{type:"button",class:"btn btn-default btn-sm","aria-label":Sao.i18n.gettext("Previous"),title:Sao.i18n.gettext("Previous")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-back",{"aria-hidden":!0})),this.but_prev.click(this.search_prev.bind(this)),this.but_next=jQuery("<button/>",{type:"button",class:"btn btn-default btn-sm","aria-label":Sao.i18n.gettext("Next"),title:Sao.i18n.gettext("Next")}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-forward",{"aria-hidden":!0})),this.but_next.click(this.search_next.bind(this)),jQuery("<div/>",{class:"btn-group",role:"group"}).append(this.but_prev).append(this.but_next).appendTo(jQuery("<div/>",{class:"col-sm-2 pull-right"}).appendTo(t)),this.content_box=jQuery("<div/>",{class:"content-box"}),jQuery.isEmptyObject(this.tab_domain)?this.tab=null:(this.tab=jQuery("<div/>",{class:"tab-domain"}).appendTo(this.el),n=jQuery("<ul/>",{class:"nav nav-tabs",role:"tablist"}).appendTo(this.tab),jQuery("<div/>",{class:"tab-content"}).appendTo(this.tab),this.tab_domain.forEach(function(e,t){var i=e[0],e=jQuery("<span/>",{class:"badge"});jQuery("<li/>",{role:"presentation",id:"nav-"+t}).append(jQuery("<a/>",{"aria-controls":t,role:"tab","data-toggle":"tab",href:"#"+t}).text(i+" ").append(e)).appendTo(n);this.tab_counter.push(e)}.bind(this)),n.find("a:first").tab("show"),o=this,n.find("a").click(function(e){e.preventDefault(),jQuery(this).tab("show"),o.do_search(),o.screen.count_tab_domain(!0)})),this.el.append(this.content_box)},set_text:function(e){this.search_entry.val(e),this.bookmark_match()},update:function(){var e=this.screen.domain_parser.completion(this.get_text());this.search_list.empty(),e.forEach(function(e){jQuery("<option/>",{value:e.trim()}).appendTo(this.search_list)},this)},set_star:function(e){var t,i=this.but_star.children("img"),n=e?(t="tryton-star",Sao.i18n.gettext("Remove this bookmark")):(t="tryton-star-border",Sao.i18n.gettext("Bookmark this filter"));this.but_star.data("star",Boolean(e)),this.but_star.attr("title",n),this.but_star.attr("aria-label",n),Sao.common.ICONFACTORY.get_icon_url(t).then(function(e){i.attr("src",e)})},get_star:function(){return this.but_star.data("star")},star_click:function(){var i,e=this.get_star(),n=this.screen.model_name,o=function(){this.bookmark_match(),this.but_bookmark.prop("disabled",jQuery.isEmptyObject(this.bookmarks()))}.bind(this);e?(e=this.bookmark_match(),Sao.common.VIEW_SEARCH.remove(n,e).then(function(){o()})):(i=this.get_text())&&Sao.common.ask.run(Sao.i18n.gettext("Bookmark Name:")).then(function(e){var t;e&&(t=this.screen.domain_parser.parse(i),Sao.common.VIEW_SEARCH.add(n,e,t).then(function(){o()}),this.set_text(this.screen.domain_parser.string(t)))}.bind(this))},bookmarks:function(){return Sao.common.VIEW_SEARCH.get(this.screen.model_name).filter(function(e){return this.screen.domain_parser.stringable(e[2])}.bind(this))},bookmark_activate:function(e){e.preventDefault();e=e.data;this.set_text(this.screen.domain_parser.string(e)),this.do_search()},bookmark_match:function(){var e=this.get_text();if(e){for(var t=this.screen.domain_parser.parse(e),i=(this.get_star(),this.bookmarks()),n=0;n<i.length;n++){var o=i[n][0],s=(i[n][1],i[n][2]),r=i[n][3];if(this.screen.domain_parser.string(s)===e||Sao.common.compare(s,t))return this.set_star(!0),this.but_star.prop("disabled",!r),o}this.but_star.prop("disabled",!e)}this.set_star(!1)},search_prev:function(){this.screen.search_prev(this.get_text())},search_next:function(){this.screen.search_next(this.get_text())},search_active:function(){this.but_active.toggleClass("active"),this._set_active_tooltip(),this.screen.search_filter(this.get_text())},_set_active_tooltip:function(){var e=this.but_active.hasClass("active")?Sao.i18n.gettext("Show active records"):Sao.i18n.gettext("Show inactive records");this.but_active.attr("aria-label",e),this.but_active.attr("title",e)},get_tab_index:function(){return this.tab?this.tab.find("li").index(this.tab.find("li.active")):-1},get_tab_domain:function(){if(!this.tab)return[];var e=this.get_tab_index();return e<0?[]:this.tab_domain[e][1]},set_tab_counter:function(e,t){!jQuery.isEmptyObject(this.tab_counter)&&this.tab&&((t=null==t?this.tab.find("li").index(this.tab.find("li.active")):t)<0||(t=this.tab_counter[t],null===e?(t.attr("title",""),t.text("")):(t.attr("title",e),t.text(99<e?"99+":e))))},do_search:function(){return this.screen.search_filter(this.get_text())},set_screen:function(e){this.screen=e,this.but_bookmark.prop("disabled",jQuery.isEmptyObject(this.bookmarks())),this.bookmark_match()},show_filter:function(){this.filter_box.show(),this.tab&&this.tab.show()},hide_filter:function(){this.filter_box.hide(),this.tab&&this.tab.hide()},set:function(e){this.alternate_view?(this.alternate_viewport.children().detach(),this.alternate_viewport.append(e)):(this.content_box.children().detach(),this.content_box.append(e))},get_text:function(){return this.search_entry.val()},search_box:function(){var s=this.screen.domain_parser,t=function(){this.search_modal.modal("hide");for(var e="",t=s.quote.bind(s),i=0;i<this.search_form.fields.length;i++){var n=this.search_form.fields[i][0],o=this.search_form.fields[i][1],o=o instanceof Sao.ScreenContainer.Between||o instanceof Sao.ScreenContainer.Selection?o.get_value(t):t(o.val());o&&(e+=t(n)+": "+o+" ")}this.set_text(e),this.do_search().then(function(){this.last_search_text=this.get_text()}.bind(this))}.bind(this);if(!this.search_modal){var e=new Sao.Dialog(Sao.i18n.gettext("Filters"),"","lg");this.search_modal=e.modal,this.search_form=e.content,this.search_form.addClass("form-horizontal"),this.search_form.submit(function(e){t(),e.preventDefault()});var i,n=[];for(i in s.fields)!(u=s.fields[i]).searchable&&void 0!==u.searchable||u.name.contains(".")||n.push(u);var o="filter-"+this.screen.model_name+"-";this.search_form.fields=[];for(var r=0;r<n.length;r++){var a,c,l,d,h,u=n[r],_=jQuery("<div/>",{class:"form-group form-group-sm"}).append(jQuery("<label/>",{class:"col-sm-4 control-label",for:o+u.name,text:u.string})).appendTo(e.body);switch(u.type){case"boolean":c=a=jQuery("<select/>",{class:"form-control input-sm",id:o+u.name}),["",Sao.i18n.gettext("True"),Sao.i18n.gettext("False")].forEach(function(t){return function(e){jQuery("<option/>",{value:e,text:e}).appendTo(t)}}(a));break;case"selection":case"multiselection":a=(c=new Sao.ScreenContainer.Selection(u.selection,o+u.name)).el;break;case"date":l=Sao.common.date_format(this.screen.context.date_format),a=(c=new Sao.ScreenContainer.Dates(l,o+u.name)).el;break;case"datetime":d=Sao.common.date_format(this.screen.context.date_format),h=new Sao.PYSON.Decoder({}).decode(u.format),h=Sao.common.moment_format(h),a=(c=new Sao.ScreenContainer.DateTimes(l=d+" "+h,o+u.name)).el;break;case"time":h=new Sao.PYSON.Decoder({}).decode(u.format),l=Sao.common.moment_format(h),a=(c=new Sao.ScreenContainer.Times(l,o+u.name)).el;break;case"integer":case"float":case"numeric":a=(c=new Sao.ScreenContainer.Numbers(o+u.name)).el;break;default:c=a=jQuery("<input/>",{class:"form-control input-sm",type:"text",placeholder:u.string,id:o+u.name})}jQuery("<div/>",{class:"col-sm-8"}).append(a).appendTo(_),this.search_form.fields.push([u.string,c,a])}jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("Find")).click(t).appendTo(e.footer)}if(this.search_modal.modal("show"),this.last_search_text.trim()!==this.get_text().trim()){for(var m=0;m<this.search_form.fields.length;m++){var p=this.search_form.fields[m][1];p instanceof Sao.ScreenContainer.Selection?p.set_value([]):p instanceof Sao.ScreenContainer.Between?p.set_value(null,null):p.val("")}this.search_form.fields[0][2].focus()}}}),Sao.ScreenContainer.Between=Sao.class_(Object,{init:function(e){this.el=jQuery("<div/>",{class:"row",id:e}),this.from=this.build_entry(Sao.i18n.gettext("From"),jQuery("<div/>",{class:"col-md-5"}).appendTo(this.el)),jQuery("<p/>",{class:"text-center"}).append("..").appendTo(jQuery("<div/>",{class:"col-md-1"}).appendTo(this.el)),this.to=this.build_entry(Sao.i18n.gettext("To"),jQuery("<div/>",{class:"col-md-5"}).appendTo(this.el))},build_entry:function(e,t){},get_value:function(e){var t=this._get_value(this.from),i=this._get_value(this.to);return t&&i?t!==i?e(t)+".."+e(i):e(t):t?">="+e(t):i?"<="+e(i):void 0},_get_value:function(e){},set_value:function(e,t){this._set_value(this.from,e),this._set_value(this.to,t)},_set_value:function(e,t){},_from_changed:function(e){this._set_value(this.to,this._get_value(this.from))}}),Sao.ScreenContainer.BetweenDates=Sao.class_(Sao.ScreenContainer.Between,{init:function(e,t){this.format=e,Sao.ScreenContainer.BetweenDates._super.init.call(this,t),this.from.change(this._from_changed.bind(this))},_get_value:function(e,t){return e.find("input[type=text]").val()},_set_value:function(e,t){e.find("input[type=text]").val(t)}}),Sao.ScreenContainer.Dates=Sao.class_(Sao.ScreenContainer.BetweenDates,{_input:"date",_input_format:"%Y-%m-%d",_format:Sao.common.format_date,_parse:Sao.common.parse_date,build_entry:function(e,t){var i=jQuery("<div/>",{class:"input-group input-group-sm input-icon input-icon-secondary input-"+this._input}).appendTo(t),n=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap"}).appendTo(i),o=jQuery("<input/>",{type:this._input,role:"button",tabindex:-1});o.click(function(){var e=this._parse(this.format,n.val()),e=this._format(this._input_format,e);o.val(e)}.bind(this)),o.change(function(){var e=o.val();e&&(e=this._parse(this._input_format,e),e=this._format(this.format,e),n.val(e),n.focus())}.bind(this)),o[0].type==this._input&&(t=jQuery("<div/>",{class:"icon-input icon-secondary","aria-label":Sao.i18n.gettext("Open the calendar"),title:Sao.i18n.gettext("Open the calendar")}).appendTo(i),o.appendTo(t),Sao.common.ICONFACTORY.get_icon_img("tryton-date").appendTo(t));var s=new Mousetrap(n[0]);return s.bind("enter",function(e,t){var i=this._parse(this.format,n.val()),i=this._format(this.format,i);n.val(i)}.bind(this)),s.bind("=",function(e,t){e.preventDefault(),n.val(this._format(this.format,moment()))}.bind(this)),Sao.common.DATE_OPERATORS.forEach(function(i){s.bind(i[0],function(e,t){e.preventDefault();e=this._parse(this.format,n.val())||Sao.DateTime();e.add(i[1]),n.val(this._format(this.format,e))}.bind(this))}.bind(this)),i}}),Sao.ScreenContainer.DateTimes=Sao.class_(Sao.ScreenContainer.Dates,{_input:"datetime-local",_input_format:"%Y-%m-%dT%H:%M:%S",_format:Sao.common.format_datetime,_parse:Sao.common.parse_datetime}),Sao.ScreenContainer.Times=Sao.class_(Sao.ScreenContainer.Dates,{_input:"time",_input_format:"%H:%M:%S",_format:Sao.common.format_time,_parse:Sao.common.parse_time,build_entry:function(e,t){t=Sao.ScreenContainer.Times._super.build_entry.call(this,e,t);return~navigator.userAgent.indexOf("Firefox")&&t.find(".icon-input").hide(),t}}),Sao.ScreenContainer.Numbers=Sao.class_(Sao.ScreenContainer.Between,{init:function(e){Sao.ScreenContainer.Numbers._super.init.call(this,e),this.from.change(this._from_changed.bind(this))},build_entry:function(e,t){return jQuery("<input/>",{class:"form-control input-sm",type:"number",step:"any"}).appendTo(t)},_get_value:function(e,t){return e.val()},_set_value:function(e,t){return e.val(t)}}),Sao.ScreenContainer.Selection=Sao.class_(Object,{init:function(e,t){this.el=jQuery("<select/>",{class:"form-control input-sm",multiple:!0,id:t}),e.forEach(function(e){jQuery("<option/>",{value:e[1],text:e[1]}).appendTo(this.el)}.bind(this))},get_value:function(e){var t=this.el.val();return t=jQuery.isEmptyObject(t)?null:jQuery.map(t,e).reduce(function(e,t){return e&&(e+=";"),e+t})},set_value:function(e){this.el.val(e)}}),Sao.Screen=Sao.class_(Object,{init:function(e,t){this.model_name=e,this.model=new Sao.Model(e,t),this.attributes=jQuery.extend({},t),this.view_ids=jQuery.extend([],t.view_ids),this.view_to_load=jQuery.extend([],t.mode||["tree","form"]),this.views=[],this.views_preload=t.views_preload||{},this.exclude_field=t.exclude_field,this.new_group(t.context||{}),this.current_view=null,this.current_record=null,this.domain=t.domain||[],this.context_domain=t.context_domain,this.size_limit=null,void 0===this.attributes.limit||null===this.attributes.limit?this.limit=Sao.config.limit:this.limit=t.limit,this.offset=0,this.order=this.default_order=t.order;e=Sao.common.MODELACCESS.get(e);e.write||e.create||(this.attributes.readonly=!0),this.search_count=0,this.screen_container=new Sao.ScreenContainer(t.tab_domain),this.breadcrumb=t.breadcrumb||[],this.context_screen=null,t.context_model&&(this.context_screen=new Sao.Screen(t.context_model,{mode:["form"],context:t.context}),this.context_screen_prm=this.context_screen.switch_view().then(function(){return jQuery("<div/>",{class:"row"}).append(jQuery("<div/>",{class:"col-md-12"}).append(this.context_screen.screen_container.el)).prependTo(this.screen_container.filter_box),this.context_screen.new_(!1).then(function(e){return e.default_get()})}.bind(this))),t.row_activate?this.row_activate=t.row_activate:this.row_activate=this.default_row_activate,this.tree_states={},this.tree_states_done=[],this.fields_view_tree={},this._domain_parser={},this.pre_validate=!1,this.tab=null,this.message_callback=null,this.switch_callback=null,this.group_changed_callback=null},get readonly(){var e=this.selected_records.some(function(e){return e.readonly});return this.attributes.readonly||e},get deletable(){return this.selected_records.every(function(e){return e.deletable})},load_next_view:function(){if(jQuery.isEmptyObject(this.view_to_load))return jQuery.when();var e;jQuery.isEmptyObject(this.view_ids)||(e=this.view_ids.shift());var t=this.view_to_load.shift();return this.add_view_id(e,t)},add_view_id:function(e,t){var i;if(e&&this.views_preload[String(e)])i=this.views_preload[String(e)];else{if(e||!this.views_preload[t])return this.model.execute("fields_view_get",[e,t],this.context).pipe(this.add_view.bind(this));i=this.views_preload[t]}return this.add_view(i),jQuery.when()},add_view:function(e){var t=e.arch,i=e.fields,n=e.view_id,t=jQuery(jQuery.parseXML(t));"tree"==t.children().prop("tagName")&&(this.fields_view_tree[n]=e);var o,s="eager";for(o in"form"==t.children().prop("tagName")&&(s="lazy"),i)o in this.model.fields&&"eager"!=s?i[o].loading=this.model.fields[o].description.loading:i[o].loading=s;for(o in this.group.add_fields(i),i)this.group.model.fields[o].views.add(n);e=Sao.View.parse(this,n,e.type,t,e.field_childs);return this.views.push(e),e},get number_of_views(){return this.views.length+this.view_to_load.length},switch_view:function(r,a,c){if(c=void 0===c||c,a=null!=a?Number(a):null,this.current_view){this.current_view.set_value(),this.current_record&&!~this.current_record.group.indexOf(this.current_record)&&(this.current_record=null);var e=this.current_view.get_fields();if(this.current_record&&this.current_view.editable&&!this.current_record.validate(e,!1,!1,!0))return this.screen_container.set(this.current_view.el),this.current_view.display().done(function(){this.set_cursor()}.bind(this))}var l=function(){return!!this.current_view&&(!(!r&&null===a)&&(null!==a?this.current_view.view_id==a:this.current_view.view_type==r))}.bind(this),d=function(){for(var e=function(){return this.screen_container.set(this.current_view.el),(c?this.display().done(function(){this.set_cursor()}.bind(this)):jQuery.when()).done(function(){this.switch_callback&&this.switch_callback()}.bind(this))}.bind(this),t=function(){return!(!r&&null===a)&&!(r&&!a&&!this.view_to_load.length)}.bind(this),i=function(){this.current_view=this.views[this.views.length-1]}.bind(this),n=function(){return i(),(t()?d:e)()}.bind(this),o=function(e){return e.view_id==a};!l();){if(this.view_to_load.length)return this.load_next_view().then(n);if(null!==a&&!this.views.find(o))return this.add_view_id(a,r).then(i);var s=this.views.indexOf(this.current_view);if(this.current_view=this.views[(s+1)%this.views.length],!t())break}return e()}.bind(this);return d()},search_filter:function(e,i){if(i=i||!1,this.context_screen&&!i){if("pending"==this.context_screen_prm.state())return this.context_screen_prm.then(function(){return this.search_filter(e)}.bind(this));var t=this.context_screen.current_record;if(t&&!t.validate(null,!1,null,!0))return this.new_group(),this.context_screen.display(!0),jQuery.when();t=this.context_screen.get_on_change_value();delete t.id,this.new_group(jQuery.extend(this.local_context,t))}var n=this.search_domain(e,!0),o=this.context;this.screen_container.but_active.hasClass("active")&&(o.active_test=!1);var s=function(){return this.model.execute("search",[n,this.offset,this.limit,this.order],o).then(function(e){return e.length||this.offset<=0?e:(this.offset=Math.max(this.offset-this.limit,0),s())}.bind(this))}.bind(this);return s().then(function(t){var e=jQuery.when(this.search_count);return i||(null!==this.limit&&t.length==this.limit?e=this.model.execute("search_count",[n],o).then(function(e){return this.search_count=e,this.search_count}.bind(this),function(){return this.search_count=0,this.search_count}.bind(this)):this.search_count=t.length),e.then(function(e){return this.screen_container.but_next.prop("disabled",!(void 0!==this.limit&&t.length==this.limit&&e>this.limit+this.offset)),this.screen_container.but_prev.prop("disabled",this.offset<=0),i?t:(this.clear(),this.load(t).then(function(){this.count_tab_domain()}.bind(this)))}.bind(this))}.bind(this))},search_domain:function(e,t,i){t=t||!1,i=void 0===i||i;var n,o=[];return!this.group.parent&&this.domain_parser?(n=this.domain_parser,e||""===e?o=n.parse(e):(o=this.attributes.search_value,this.attributes.search_value=null),t&&this.screen_container.set_text(n.string(o))):o=[["id","in",this.group.map(function(e){return e.id})]],jQuery.isEmptyObject(o)?o=this.domain:jQuery.isEmptyObject(this.domain)||(o=["AND",o,this.domain]),this.screen_container.but_active.hasClass("active")&&(o=jQuery.isEmptyObject(o)?[["active","=",!1]]:[o,["active","=",!1]]),this.current_view&&"calendar"==this.current_view.view_type&&(o=jQuery.isEmptyObject(o)?this.current_view.current_domain():["AND",o,this.current_view.current_domain()]),this.context_domain&&(o=["AND",o,new Sao.PYSON.Decoder(this.context).decode(this.context_domain)]),i&&(i=this.screen_container.get_tab_domain(),jQuery.isEmptyObject(i)||(o=["AND",o,i])),o},count_tab_domain:function(i){void 0===i&&(i=!1);var n=this.search_domain(this.screen_container.get_text(),!1,!1),o=this.screen_container.get_tab_index();this.screen_container.tab_domain.forEach(function(e,t){!e[2]||i&&t!=o||(e=["AND",e[1],n],this.screen_container.set_tab_counter(null,t),this.group.model.execute("search_count",[e],this.context).then(function(e){this.screen_container.set_tab_counter(e,t)}.bind(this)))}.bind(this))},get context(){var e=this.group.context;return this.context_screen&&(e.context_model=this.context_screen.model_name),e},get local_context(){var e=this.group.local_context;return this.context_screen&&(e.context_model=this.context_screen.model_name),e},set_group:function(e){var t,i={},n={};if(this.group){for(t in this.group.model.fields){var o=this.group.model.fields[t];i[t]=o.description,n[t]=o.views}this.group.screens.splice(this.group.screens.indexOf(this),1),jQuery.extend(e.on_write,this.group.on_write),e.on_write=e.on_write.filter(function(e,t,i){return t==i.indexOf(e)}),this.group.parent&&!e.parent&&(e.parent=this.group.parent)}e.screens.push(this),this.tree_states_done=[],this.views.map(function(e){e.reset()}),this.group=e,this.model=e.model,this.group.parent&&(this.order=null),e&&e.length?this.current_record=e[0]:this.current_record=null,this.group.add_fields(i);var s=function(e){this.group.model.fields[t].views.add(e)}.bind(this);for(t in n)n[t].forEach(s);this.group.exclude_field=this.exclude_field},new_group:function(e){e=e||this.context;e=new Sao.Group(this.model,e,[]);e.readonly=this.attributes.readonly,this.set_group(e)},get current_record(){return this.__current_record},set current_record(e){var t,i,n;this.__current_record=e,this.message_callback&&(n=i=null,e&&(i=0<=(t=this.group.indexOf(e))?t+this.offset+1:e.get_index_path(),n=e.id),n=[i||0,this.group.length+this.offset,this.search_count,n],this.message_callback(n)),this.switch_callback&&this.switch_callback(),this.tab&&(e?e.get_resources().always(this.tab.update_resources.bind(this.tab)):this.tab.update_resources(),this.tab.record_message())},load:function(e,t,i){return void 0===t&&(t=!0),this.group.load(e,i),this.current_view.reset(),e.length&&"calendar"!=this.current_view.view_type?this.current_record=this.group.get(e[0]):this.current_record=null,this.display().then(function(){t&&this.set_cursor()}.bind(this))},display:function(e){var t=[];if(this.current_record&&~this.current_record.group.indexOf(this.current_record)||(this.group&&this.group.length&&"calendar"!=this.current_view.view_type?this.current_record=this.group[0]:this.current_record=null),this.views){var i=this.search_active(~["tree","graph","calendar"].indexOf(this.current_view.view_type));t.push(i);for(var n=0;n<this.views.length;n++)this.views[n]&&(this.views[n]==this.current_view||this.views[n].el.parent().length)&&t.push(this.views[n].display())}return jQuery.when.apply(jQuery,t).then(function(){return this.set_tree_state().then(function(){this.current_record=this.current_record,e&&this.set_cursor(!1,!1)}.bind(this))}.bind(this))},display_next:function(){var e=this.current_view;if(e.set_value(),this.set_cursor(!1,!1),~["tree","form","list-form"].indexOf(e.view_type)&&this.current_record&&this.current_record.group){for(var t=this.current_record.group,i=this.current_record;t;){var n=t.indexOf(i);if(n<t.length-1){i=t[n+1];break}if(!t.parent||i.group.model.name!=t.parent.group.model.name)break;i=t.parent,t=t.parent.group}this.current_record=i}else this.current_record=this.group[0];return this.set_cursor(!1,!1),e.display()},display_previous:function(){var e=this.current_view;if(e.set_value(),this.set_cursor(!1,!1),~["tree","form","list-form"].indexOf(e.view_type)&&this.current_record&&this.current_record.group){for(var t=this.current_record.group,i=this.current_record;t;){var n=t.indexOf(i);if(0<n){i=t[n-1];break}if(!t.parent||i.group.model.name!=t.parent.group.model.name)break;i=t.parent,t=t.parent.group}this.current_record=i}else this.current_record=this.group[0];return this.set_cursor(!1,!1),e.display()},get selected_records(){return this.current_view?this.current_view.selected_records:[]},get selected_paths(){if(this.current_view&&"tree"==this.current_view.view_type)return this.current_view.get_selected_paths()},get listed_records(){return this.current_view&&"tree"==this.current_view.view_type?this.current_view.listed_records:this.current_record?[this.current_record]:[]},get listed_paths(){if(this.current_view&&"tree"==this.current_view.view_type)return this.current_view.get_listed_paths()},clear:function(){this.current_record=null,this.group.clear(),this.tree_states_done=[],this.views.map(function(e){e.reset()})},default_row_activate:function(){"tree"==this.current_view.view_type&&1==this.current_view.attributes.keyword_open?Sao.Action.exec_keyword("tree_open",{model:this.model_name,id:this.get_id(),ids:[this.get_id()]},this.local_context,!1):this.modified()||this.switch_view("form")},get_id:function(){if(this.current_record)return this.current_record.id},new_:function(n,o){var s=this.current_view;void 0===n&&(n=!0);var r,e=jQuery.when();return"calendar"==this.current_view.view_type&&(r=this.current_view.get_selected_date(),e=this.switch_view("form",void 0,!1)),(e=this.current_view&&("tree"==this.current_view.view_type&&!this.current_view.editable||"graph"==this.current_view.view_type)?this.switch_view("form",void 0,!1):e).then(function(){if(this.current_view.editable){var e=(this.current_record||this).group,t=e.new_(!1,void 0,o),i=n?t.default_get(o):jQuery.when();return i.then(function(){return e.add(t,this.new_position),this.current_record=t,"calendar"==s.view_type&&s.set_default_date(t,r),this.display().done(function(){this.set_cursor(!0,!0)}.bind(this)),t}.bind(this))}}.bind(this))},get new_position(){var e=null!==this.order?this.order:this.default_order;if(e)for(var t=0;t<e.length;t++){var i=e[t][0],n=e[t][1];if("id"==i&&n){if(n.startsWith("DESC"))return 0;if(n.startsWith("ASC"))return-1}}return this.group.parent?-1:0},set_on_write:function(e){e&&(~this.group.on_write.indexOf(e)||this.group.on_write.push(e))},cancel_current:function(e){var t=[];return this.current_record&&(this.current_record.cancel(),this.current_record.id<0&&(e?(this.current_record.reset(e),this.display()):t.push(this.remove(!1,!1,!1,[this.current_record])))),jQuery.when.apply(jQuery,t)},save_current:function(){var e=this.current_record;if(!e){if("tree"!=this.current_view.view_type||!this.group||!this.group.length)return jQuery.when();this.current_record=this.group[0],e=this.current_record}this.current_view.set_value();var t=this.current_view.get_fields(),i=e.get_path(this.group),n=jQuery.Deferred();if("tree"==this.current_view.view_type)n=this.group.save().then(function(){return this.current_record}.bind(this));else{if(!e.validate(t,null,null,!0))return this.current_view.display().then(function(){return this.set_cursor(),jQuery.Deferred().reject()}.bind(this));n=e.save().then(function(){return e})}t=function(){return this.display().then(function(){return n},function(){return n})}.bind(this);return n.then(function(e){return i&&e&&e.id&&i.splice(-1,1,[i[i.length-1][0],e.id]),this.group.get_by_path(i).then(function(e){this.current_record=e}.bind(this))}.bind(this)).then(t,t)},set_cursor:function(e,t){this.current_view&&~["tree","form","list-form"].indexOf(this.current_view.view_type)&&this.current_view.set_cursor(e,t)},modified:function(){function e(e){return e.has_changed()||e.id<0}if("tree"!=this.current_view.view_type){if(this.current_record&&e(this.current_record))return!0}else if(this.group.some(e))return!0;return!!this.current_view.modified},unremove:function(){this.current_view.selected_records.forEach(function(e){e.group.unremove(e)})},remove:function(i,n,o,s){var e=jQuery.when();if(s=s||this.current_view.selected_records,jQuery.isEmptyObject(s))return e;i&&(e=this.group.delete_(s));var t=s[0],r=t.group,a=r.indexOf(t),c=t.get_path(this.group);return e.then(function(){s.forEach(function(e){e.group.remove(e,n,!0,o,!1)}),s[0].group.changed();var e,t=[];return i&&s.forEach(function(e){e.group.parent&&t.push(e.group.parent.save(!1)),~e.group.record_deleted.indexOf(e)&&e.group.record_deleted.splice(e.group.record_deleted.indexOf(e),1),~e.group.record_removed.indexOf(e)&&e.group.record_removed.splice(e.group.record_removed.indexOf(e),1)}),0<a?(e=r[a-1],c.splice(-1,1,[c[c.length-1][0],e.id])):c.splice(-1,1),jQuery.isEmptyObject(c)?this.group.length&&(this.current_record=this.group[0]):t.push(this.group.get_by_path(c).then(function(e){this.current_record=e}.bind(this))),jQuery.when.apply(jQuery,t).then(function(){return this.display().done(function(){this.set_cursor()}.bind(this))}.bind(this))}.bind(this))},copy:function(){var t=jQuery.Deferred(),e=this.current_view.selected_records;return this.model.copy(e,this.context).then(function(e){this.group.load(e,!1,this.new_position),jQuery.isEmptyObject(e)||(this.current_record=this.group.get(e[0])),this.display().always(t.resolve)}.bind(this),t.reject),t.promise()},search_active:function(e){return e&&!this.group.parent?(this.screen_container.set_screen(this),this.screen_container.show_filter()):this.screen_container.hide_filter(),jQuery.when()},get domain_parser(){var e,t=this.current_view?this.current_view.view_id:null;if(t in this._domain_parser)return this._domain_parser[t];t in this.fields_view_tree?e=this.fields_view_tree[t]:(e=this.model.execute("fields_view_get",[!1,"tree"],this.context,!1),this.fields_view_tree[t]=e);var i,n,o,s=jQuery.extend({},e.fields);for(i in s){var r=s[i];"selection"!=r.type&&"reference"!=r.type||r.selection instanceof Array||((r=jQuery.extend({},r)).selection=this.get_selection(r),s[i]=r)}return"arch"in e&&(n=jQuery(jQuery.parseXML(e.arch)),o={},n.find("tree").children().each(function(e,t){var i,n;"field"==t.tagName&&((i=t.getAttribute("name"))in o||(o[i]=s[i],["string","factor"].forEach(function(e){t.getAttribute(e)&&(o[i][e]=t.getAttribute(e))})),!(n=t.getAttribute("symbol"))||n in o||(o[n]=s[n]))}),s=o),"active"in e.fields?this.screen_container.but_active.show():this.screen_container.but_active.hide(),[["id",Sao.i18n.gettext("ID"),"integer"],["create_uid",Sao.i18n.gettext("Created by"),"many2one"],["create_date",Sao.i18n.gettext("Created at"),"datetime"],["write_uid",Sao.i18n.gettext("Modified by"),"many2one"],["write_date",Sao.i18n.gettext("Modified at"),"datetime"]].forEach(function(e){var t=e[0],i=e[1],e=e[2];t in s||(s[t]={string:i,name:t,type:e},"datetime"==e&&(s[t].format='"%H:%M:%S"'))}),e=new Sao.common.DomainParser(s,this.context),this._domain_parser[t]=e},get_selection:function(e){var t,i=e.selection_change_with,e=jQuery.isEmptyObject(i)?this.model.execute(e.selection,[],void 0,!1):(t={},i.forEach(function(e){t[e]=null}),this.model.execute(e.selection,[t],void 0,!1));return e.sort(function(e,t){return e[1].localeCompare(t[1])})},search_prev:function(e){this.limit&&(this.offset=Math.max(this.offset-this.limit,0)),this.search_filter(e)},search_next:function(e){this.limit&&(this.offset+=this.limit),this.search_filter(e)},invalid_message:function(n){var e,t={};for(e in(n=n||this.current_record).model.fields){var i=n.model.fields[e];t[e]=i.description}var o=new Sao.common.DomainParser(t),s=[],r=n.invalid_fields();return Object.keys(r).sort().forEach(function(e){var t=r[e],i=n.model.fields[e].description.string;"required"==t||Sao.common.compare(t,[[e,"!=",null]])?s.push(Sao.i18n.gettext('"%1" is required.',i)):"domain"==t?s.push(Sao.i18n.gettext('"%1" is not valid according to its domain.',i)):"children"==t?s.push(Sao.i18n.gettext('The values of "%1" are not valid.',i)):o.stringable(t)?s.push(o.string(t)):s.push(Sao.i18n.gettext('"%1" is not valid according to its domain.'),i)}),5<s.length&&(s.splice(5,s.length),s.push("...")),s.join("\n")},get:function(){return this.current_record?(this.current_view.set_value(),this.current_record.get()):null},get_on_change_value:function(){return this.current_record?(this.current_view.set_value(),this.current_record.get_on_change_value()):null},reload:function(e,t){this.group.reload(e);var i=[];return t&&i.push(this.group.written(e)),this.group.parent&&i.push(this.group.parent.root_parent.reload()),jQuery.when.apply(jQuery,i).then(function(){this.display()}.bind(this))},get_buttons:function(){var e=this.current_view.selected_records;if(jQuery.isEmptyObject(e))return[];var i=this.current_view.get_buttons();return e.forEach(function(t){i=i.filter(function(e){if("instance"===e.attributes.type)return!1;e=t.expr_eval(e.attributes.states||{});return!(e.invisible||e.readonly)})}),i},button:function(n){var o,s=this.current_view.selected_records;this.current_view.set_value();for(var t=this.current_view.get_fields(),e=[],r=function(e){return function(){this.display(!0),e.validate(t)}.bind(this)}.bind(this),i=0;i<s.length;i++){var a=s[i],c=a.expr_eval(n.states||{}).pre_validate||[];e.push(a.validate(t,!1,c))}return jQuery.when.apply(jQuery,e).then(function(){for(var i=0;i<s.length;i++){var e=s[i];if(!arguments[i])return void Sao.common.warning.run(this.invalid_message(e),Sao.i18n.gettext("Pre-validation")).then(r(e))}var t=jQuery.when();return(t=n.confirm?Sao.common.sur.run(n.confirm):t).then(function(){var t=this.current_record;if("instance"!==n.type)return t.save(!1).then(function(){var e=this.context;for(e._timestamp={},o=[],i=0;i<s.length;i++)t=s[i],jQuery.extend(e._timestamp,t.get_timestamp()),o.push(t.id);return t.model.execute(n.name,[o],e).then(function(e){return this.reload(o,!0).then(function(){"string"==typeof e?this.client_action(e):e&&Sao.Action.execute(e,{model:this.model_name,id:this.current_record.id,ids:o},null,this.context,!0)}.bind(this))}.bind(this)).fail(function(){return this.reload(o,!0)}.bind(this))}.bind(this));var e=t.expr_eval(n.change||[]),e=t._get_on_change_args(e);return t.model.execute(n.name,[e],this.context).then(function(e){t.set_on_change(e),t.group.changed(),t.group.root_group.screens.forEach(function(e){e.display()})})}.bind(this))}.bind(this))},client_action:function(e){var t=Sao.common.MODELACCESS.get(this.model_name);"new"==e?t.create&&this.new_():"delete"==e?!t.delete||this.current_record&&!this.current_record.deletable||this.remove(!this.group.parent,!1,!this.group.parent):"remove"==e?t.write&&t.read&&this.group.parent&&this.remove(!1,!0,!1):"copy"==e?t.create&&this.copy():"next"==e?this.display_next():"previous"==e?this.display_previous():"close"==e?Sao.Tab.tabs.close_current():e.startsWith("switch")?this.switch_view.apply(this,e.split(" ",3).slice(1)):"reload"==e?~["tree","graph","calendar"].indexOf(this.current_view.view_type)&&!this.group.parent&&this.search_filter():"reload menu"==e?Sao.Session.current_session.reload_context().then(function(){Sao.menu()}):"reload context"==e&&Sao.Session.current_session.reload_context()},get_url:function(e){function t(e){return JSON.stringify(Sao.rpc.prepareObject(e))}var i=[];jQuery.isEmptyObject(this.domain)||i.push(["domain",t(this.domain)]);var n=this.local_context;jQuery.isEmptyObject(n)||i.push(["context",t(n)]),this.context_screen&&i.push(["context_model",this.context_screen.model_name]),e&&i.push(["name",t(e)]),jQuery.isEmptyObject(this.attributes.tab_domain)||i.push(["tab_domain",t(this.attributes.tab_domain)]);var o,n=["model",this.model_name],e=this.views.map(function(e){return e.view_id}).concat(this.view_ids);return"form"!=this.current_view.view_type?(o=this.attributes.search_value||(o=this.screen_container.get_text(),this.domain_parser.parse(o)),jQuery.isEmptyObject(o)||i.push(["search_value",t(o)])):this.current_record&&-1<this.current_record.id&&(n.push(this.current_record.id),o=e.indexOf(this.current_view.view_id),e=e.slice(o).concat(e.slice(0,o))),jQuery.isEmptyObject(e)||i.push(["views",t(e)]),i=i.map(function(e){return e.map(encodeURIComponent).join("=")}).join("&"),n=n.join("/"),i&&(n+=";"+i),n},save_tree_state:function(e){var t,i,n,o,s=[];e=void 0===e||e;for(var r,a,c,l=this.group.parent?this.group.parent.id:null,d=function(){Sao.Session.current_session.cache.clear("model.ir.ui.view_tree_state.get")},h=0,u=this.views.length;h<u;h++)if("form"==(t=this.views[h]).view_type){for(var _ in t.widgets)if(t.widgets.hasOwnProperty(_))for(n=0,o=(i=t.widgets[_]).length;n<o;n++)i[n].screen&&(c=i[n].screen.save_tree_state(e),s.push(c));1==this.views.length&&this.current_record&&(l in this.tree_states||(this.tree_states[l]={}),this.tree_states[l][t.children_field||null]=[[],[[this.current_record.id]]])}else"tree"==t.view_type&&(r=t.get_expanded_paths(),a=t.get_selected_paths(),l in this.tree_states||(this.tree_states[l]={}),this.tree_states[l][t.children_field||null]=[r,a],e&&t.attributes.tree_state&&(c=new Sao.Model("ir.ui.view_tree_state").execute("set",[this.model_name,this.get_tree_domain(l),t.children_field,JSON.stringify(r),JSON.stringify(a)],{}).then(d),s.push(c)));return jQuery.when.apply(jQuery,s)},get_tree_domain:function(e){e=e?(this.domain||[]).concat([[this.exclude_field,"=",e]]):this.domain;return JSON.stringify(Sao.rpc.prepareObject(e))},set_tree_state:function(){var t,e,r=this.current_view;return~["tree","form"].indexOf(r.view_type)&&!~this.tree_states_done.indexOf(r)&&("form"!=r.view_type||jQuery.isEmptyObject(this.tree_states_done))?("tree"!=r.view_type||r.attributes.tree_state||this.tree_states_done.push(r),(t=this.group.parent?this.group.parent.id:null)<0?jQuery.when():(t in this.tree_states||(this.tree_states[t]={}),e=void 0===(e=this.tree_states[t][r.children_field||null])?new Sao.Model("ir.ui.view_tree_state").execute("get",[this.model_name,this.get_tree_domain(t),r.children_field],{}).then(function(e){return e=[JSON.parse(e[0]),JSON.parse(e[1])],t in this.tree_states||(this.tree_states[t]={}),this.tree_states[t][r.children_field||null]=e}.bind(this)):jQuery.when(e),this.tree_states_done.push(r),e.done(function(e){var t,i=e[0],n=e[1];if("tree"==r.view_type)return r.display(n,i);if(!jQuery.isEmptyObject(n)){for(var o=0;o<n[0].length;o++){var s=this.group.get(n[0][o]);if(!s)break;t=s}t&&t!=this.current_record&&(this.current_record=t,r.display())}}.bind(this)))):jQuery.when()}})}(),function(){"use strict";Sao.View=Sao.class_(Object,{view_type:null,el:null,mnemonic_widget:null,view_id:null,modified:null,editable:null,children_field:null,xml_parser:null,init:function(e,t,i){this.view_id=e,this.screen=t,this.widgets={},this.state_widgets=[];var n=i.children()[0].attributes;this.attributes={};for(var o=0,s=n.length;o<s;o++){var r=n[o];this.attributes[r.name]=r.value}t.set_on_write(this.attributes.on_write);var a,c={};for(a in this.screen.model.fields)c[a]=this.screen.model.fields[a].description;this.xml_parser&&new this.xml_parser(this,this.screen.exclude_field,c).parse(i.children()[0]),this.reset()},set_value:function(){},get record(){return this.screen.current_record},set record(e){this.screen.current_record=e},get group(){return this.screen.group},get selected_records(){return[]},get_fields:function(){return[]},get_buttons:function(){return[]},reset:function(){}}),Sao.View.idpath2path=function(e,t){var i,n=[];if(!t)return[];for(var o=0,s=e.rows.length;o<s;o++)if(e.rows[o].record.id==t[0]){n.push(o),i=Sao.View.idpath2path(e.rows[o],t.slice(1,t.length)),n=n.concat(i);break}return n},Sao.View.parse=function(e,t,i,n,o){switch(i){case"tree":return new Sao.View.Tree(t,e,n,o);case"form":return new Sao.View.Form(t,e,n);case"graph":return new Sao.View.Graph(t,e,n);case"calendar":return new Sao.View.Calendar(t,e,n);case"list-form":return new Sao.View.ListForm(t,e,n)}},Sao.View.XMLViewParser=Sao.class_(Object,{init:function(e,t,i){this.view=e,this.exclude_field=t,this.field_attrs=i},_node_attributes:function(e){for(var t={},i=0;i<e.attributes.length;i++){var n=e.attributes[i];t[n.name]=n.value}var o={};return t.name&&(o=this.field_attrs[t.name]||{}),["readonly","homogeneous"].forEach(function(e){t[e]&&(t[e]=1==t[e])}),["yexpand","yfill","xexpand","xfill","colspan","position","height","width"].forEach(function(e){t[e]&&(t[e]=Number(t[e]))}),["xalign","yalign"].forEach(function(e){t[e]&&(t[e]=Number(t[e]))}),jQuery.isEmptyObject(o)||(t.widget||(t.widget=o.type),"label"==e.tagName&&void 0===t.string&&(t.string=o.string+Sao.i18n.gettext(":")),"field"!=e.tagName||t.help||(t.help=o.help),["relation","domain","selection","string","states","relation_field","views","invisible","add_remove","sort","context","size","filename","autocomplete","translate","create","delete","selection_change_with","schema_model","required","help_selection","help_field","order"].forEach(function(e){e in o&&!(e in t)&&(t[e]=o[e])})),t},parse:function(e){var t;e.tagName&&(t=this._node_attributes(e),this["_parse_"+e.tagName](e,t))}})}(),function(){"use strict";Sao.View.FormXMLViewParser=Sao.class_(Sao.View.XMLViewParser,{init:function(e,t,i){Sao.View.FormXMLViewParser._super.init.call(this,e,t,i),this._containers=[],this._mnemonics={}},get container(){return 0<this._containers.length?this._containers[this._containers.length-1]:null},_parse_form:function(e,t){var i=new Sao.View.Form.Container(Number(e.getAttribute("col")||4));if(this.view.containers.push(i),this.parse_child(e,i),0<this._containers.length)throw"AssertionError";this.view.el.append(i.el)},parse_child:function(e,t){t&&this._containers.push(t),[].forEach.call(e.childNodes,function(e){this.parse(e)}.bind(this)),t&&this._containers.pop()},_parse_field:function(e,t){var i,n=t.name;n&&n==this.exclude_field?this.container.add(null,t):(i=new Sao.View.FormXMLViewParser.WIDGETS[t.widget](this.view,t),this.view.widgets[n]||(this.view.widgets[n]=[]),this.view.widgets[n].push(i),i.position=this.view.widget_id+=1,i.expand&&(void 0===t.yexpand&&(t.yexpand=!0),void 0===t.yfill&&(t.yfill=!0)),void 0!==t.height&&(i.el.css("min-height",t.height+"px"),1==i.el.children().length&&i.el.children().css("min-height","inherit")),void 0!==t.width&&i.el.css("min-width",t.width+"px"),this.container.add(i,t),this._mnemonics[n]&&i.labelled&&((n=this._mnemonics[n]).label_el.uniqueId(),i.labelled.uniqueId(),i.labelled.attr("aria-labelledby",n.el.attr("id")),n.label_el.attr("for",i.labelled.attr("id"))))},_parse_button:function(e,t){var i=new Sao.common.Button(t);i.el.click(i,this.view.button_clicked.bind(this.view)),this.view.state_widgets.push(i),this.container.add(i,t)},_parse_link:function(e,t){var i=new Sao.View.Form.Link(t);this.view.state_widgets.push(i),this.container.add(i,t)},_parse_image:function(e,t){var i=new Sao.View.Form.Image_(t);this.view.state_widgets.push(i),this.container.add(i,t)},_parse_separator:function(e,t){var i,n=t.name;n&&n==this.exclude_field?this.container.add(null,t):(i=t.string,i=new Sao.View.Form.Separator(i,t),this.view.state_widgets.push(i),this.container.add(i,t),n&&(this._mnemonics[n]=i))},_parse_label:function(e,t){var i,n=t.name;n&&n==this.exclude_field?this.container.add(null,t):(void 0===t.xexpand&&(t.xexpand=0),void 0===t.xalign&&(t.xalign=1),i=new Sao.View.Form.Label(t.string,t),this.view.state_widgets.push(i),this.container.add(i,t),n&&(this._mnemonics[n]=i))},_parse_newline:function(e,t){this.container.add_row()},_parse_notebook:function(e,t){void 0===t.colspan&&(t.colspan=4);var i=new Sao.View.Form.Notebook(t);void 0!==t.height&&i.el.css("min-height",t.height+"px"),void 0!==t.width&&i.el.css("min-width",t.width+"px"),this.view.state_widgets.push(i),this.view.notebooks.push(i),this.container.add(i,t),this.parse_child(e,i)},_parse_page:function(e,t){var i;t.name&&t.name==this.exclude_field||(i=new Sao.View.Form.Container(Number(e.getAttribute("col")||4)),this.view.containers.push(i),this.parse_child(e,i),t=new Sao.View.Form.Page(this.container.add(i.el,t.string,t.icon),t),this.view.state_widgets.push(t))},_parse_group:function(e,t){var i,n=new Sao.View.Form.Container(Number(e.getAttribute("col")||4));this.view.containers.push(n),this.parse_child(e,n),void 0===t.xalign&&(t.xalign=.5),void 0===t.yalign&&(t.yalign=.5),t.name&&t.name==this.exclude_field?this.container.add(null,t):(void 0!==t.expandable?((i=new Sao.View.Form.Expander(t)).set_expanded("1"===t.expandable),this.view.expandables.push(i)):i=new Sao.View.Form.Group(t),i.add(n),this.view.state_widgets.push(i),this.container.add(i,t))},_parse_hpaned:function(e,t){this._parse_paned(e,t,"horizontal")},_parse_vpaned:function(e,t){this._parse_paned(e,t,"vertical")},_parse_paned:function(e,t,i){i=new Sao.common.Paned(i);this.container.add(i,t),this.parse_child(e,i)},_parse_child:function(e,t){var i=this.container,n=new Sao.View.Form.Container(Number(e.getAttribute("col")||4));this.view.containers.push(n),this.parse_child(e,n),(i.get_child1().children().length?i.get_child2():i.get_child1()).append(n.el)}}),Sao.View.Form=Sao.class_(Sao.View,{editable:!0,view_type:"form",xml_parser:Sao.View.FormXMLViewParser,init:function(e,t,i){this.el=jQuery("<div/>",{class:"form"}),this.notebooks=[],this.expandables=[],this.containers=[],this.widget_id=0,Sao.View.Form._super.init.call(this,e,t,i)},get_fields:function(){return Object.keys(this.widgets)},get_buttons:function(){var e,t=[];for(e in this.state_widgets){var i=this.state_widgets[e];i instanceof Sao.common.Button&&t.push(i)}return t},display:function(){var i,e,n,t=this.record,o=[];if(t){var s=new Set;for(n in this.widgets){e=t.model.fields[n].description.depends||[],s.add(n);for(var r=0;r<e.length;r++){var a=e[r];!a.startsWith("_parent")&&a in t.model.fields&&s.add(a)}}var c=[];s.forEach(function(e){i=t.model.fields[e],c.push([e,i.description.loading||!0,i.views.size])}),c.sort(function(e,t){return!e[1]&&t[1]?-1:e[1]&&!t[1]?1:e[2]-t[2]}),c.forEach(function(e){e=e[0];o.push(t.load(e))})}function l(e){e.display()}return jQuery.when.apply(jQuery,o).done(function(){var e=this.record;for(n in this.widgets){var t=this.widgets[n];i=null,(i=e?e.model.fields[n]:i)&&i.set_state(e),t.forEach(l)}}.bind(this)).done(function(){var e,t=this.record;for(e in this.state_widgets)this.state_widgets[e].set_state(t);for(e in this.containers)this.containers[e].resize()}.bind(this))},set_value:function(){var t=this.record;if(t){var e,i,n,o=function(e){e.set_value(t,this)};for(e in this.widgets)e in t.model.fields&&(i=this.widgets[e],n=t.model.fields[e],i.forEach(o,n))}},button_clicked:function(e){e=e.data;e.el.prop("disabled",!0),this.screen.button(e.attributes)},get selected_records(){return this.record?[this.record]:[]},get modified(){for(var e in this.widgets)for(var t=this.widgets[e],i=0;i<t.length;i++)if(t[i].modified)return!0;return!1},set_cursor:function(e,t){var i,n,o,s,r,a,c,l,d,h,u=0<jQuery(document.activeElement).closest(this.el).length;if(t||!u){if(t)for(i=0;i<this.notebooks.length;i++)(r=this.notebooks[i]).set_current_page();this.attributes.cursor in this.widgets?s=Sao.common.find_focusable_child(this.widgets[this.attributes.cursor][0].el):(a=Sao.common.find_focusable_child(this.el))&&a.focus()}t=this.record;if(t){var _=[],m=this.el.find(".has-error");for(n in t.invalid_fields())for(l=this.widgets[n]||[],i=0;i<m.length;i++)for(d=jQuery(m[i]),o=0;o<l.length;o++)if(0<d.closest(l[o].el).length){_.push(d);break}0<_.length&&(s=Sao.common.find_first_focus_widget(this.el,_))}if(s){for(i=0;i<this.notebooks.length;i++)for(h=(r=this.notebooks[i]).get_n_pages(),o=0;o<h;o++)if(a=r.get_nth_page(o),0<jQuery(s).closest(a).length){r.set_current_page(o);break}for(i=0;i<this.expandables.length;i++)c=this.expandables[i],0<jQuery(s).closest(c.el).length&&c.set_expanded(!0);jQuery(s).find("input,select,textarea").addBack(s).focus()}}}),Sao.View.Form.Container=Sao.class_(Object,{init:function(e){this.col=e=(e=void 0===e?4:e)<0?0:e,this.el=jQuery("<table/>",{class:"form-container responsive responsive-noheader"}),this.body=jQuery("<tbody/>").appendTo(this.el),this.col<=0?this.el.addClass("form-hcontainer"):1==this.col&&this.el.addClass("form-vcontainer"),this.add_row()},add_row:function(){this.body.append(jQuery("<tr/>"))},rows:function(){return this.body.children("tr")},row:function(){return this.rows().last()},add:function(e,t){var i=t.colspan;void 0===i&&(i=1);var n=t.xfill;void 0===n&&(n=1);var o=t.xexpand;void 0===o&&(o=1);var s,r,a=this.row();0<this.col&&(s=0,a.children().map(function(e,t){s+=Number(jQuery(t).attr("colspan")||1)}),s+i>this.col&&(this.add_row(),a=this.row())),e&&(r=e.el);var c,i=jQuery("<td/>",{colspan:i,class:e&&e.class_||""}).append(r);a.append(i),e&&(t.yexpand&&i.css("height","100%"),t.yfill&&i.css("vertical-align","top"),void 0!==t.xalign&&(.5!=t.xalign?c=Sao.i18n.rtl?.5<=t.xalign?"left":"right":.5<=t.xalign?"right":"left":o||(c="center"),i.css("text-align",c)),o&&(i.addClass("xexpand"),i.css("width","100%")),n&&(i.addClass("xfill"),o&&r.css("width","100%")),t.help&&e.el.attr("title",t.help))},resize:function(){var s,r,e=this.rows().toArray(),a=[],c=this.col,t=!1,n=.9;this.el.parents("td").each(function(){var e=this.style.width;e.endsWith("%")&&(n*=parseFloat(e.slice(0,-1),10)/100)});function l(e){e=jQuery(e);var i=[];return s=0,e.children().map(function(){var e=jQuery(this),t=Math.min(Number(e.attr("colspan")),c||1);e.hasClass("xexpand")&&!jQuery.isEmptyObject(e.children())&&"none"!=e.children(":not(.tooltip)").css("display")&&i.push([e,s]),s+=t}),i}e.sort(function(e,t){if(e=l(e),t=l(t),e.length!=t.length)return t.length-e.length;function i(e,t){return t=t[0],e+Math.min(Number(t.attr("colspan")),c||1)}return e.reduce(i,0)-t.reduce(i,0)}),e.forEach(function(e){e=jQuery(e);var e=l(e),o=100/e.length;e.forEach(function(e){var t=e[0];s=e[1];var i=Math.min(Number(t.attr("colspan")),c||1),n=0;for(r=0;r<i;r++)n+=a[s+r]||0;for(r=0;r<i;r++)n?o<n&&a[s+r]&&(a[s+r]-=(n-o)/(n/a[s+r])):a[s+r]=o/i}),jQuery.isEmptyObject(e)||(t=!0)}),e.forEach(function(e){e=jQuery(e),s=0,e.children().map(function(){var e=jQuery(this),t=Math.min(Number(e.attr("colspan")),c||1);if(e.hasClass("xexpand")&&"none"!=e.children(":not(.tooltip)").css("display")){var i=0;for(r=0;r<t;r++)i+=a[s+r]||0;e.css("width",i+"%"),0<i&&e.css("max-width",i*n+"vw")}else e.css("width","");"none"==e.children().css("display")?(e.css("visibility","collapse"),c<=1&&e.hide()):(e.css("visibility","visible"),c<=1&&e.show()),s+=t})}),!t||this.el.closest("td").length&&!this.el.closest("td").hasClass("xexpand")?this.el.css("width",""):this.el.css("width","100%")}}),Sao.View.Form.StateWidget=Sao.class_(Object,{init:function(e){this.attributes=e},set_state:function(e){e=e?e.expr_eval(this.attributes.states||{}):{},e=e.invisible;(e=void 0===e?this.attributes.invisible:e)?this.hide():this.show()},show:function(){this.el.show()},hide:function(){this.el.hide()}}),Sao.View.Form.LabelMixin=Sao.class_(Sao.View.Form.StateWidget,{set_state:function(e){var t,i;Sao.View.Form.LabelMixin._super.set_state.call(this,e),this.attributes.name&&e&&(t=e.model.fields[this.attributes.name]),void 0===this.attributes.string||this.attributes.string||(i="",t&&e&&(i=t.get_client(e)||""),this.label_el.text(i)),void 0===(e=e?e.expr_eval(this.attributes.states||{}):{}).readonly&&(e.readonly=!t),Sao.common.apply_label_attributes(this.label_el,t&&t.description.readonly||e.readonly,t&&t.description.required||e.required)}}),Sao.View.Form.Separator=Sao.class_(Sao.View.Form.LabelMixin,{init:function(e,t){Sao.View.Form.Separator._super.init.call(this,t),this.el=jQuery("<div/>",{class:"form-separator"}),this.label_el=jQuery("<label/>"),e&&this.label_el.text(e),this.el.append(this.label_el),this.el.append(jQuery("<hr/>"))}}),Sao.View.Form.Label=Sao.class_(Sao.View.Form.LabelMixin,{class_:"form-label",init:function(e,t){Sao.View.Form.Label._super.init.call(this,t),this.el=this.label_el=jQuery("<label/>",{text:e,class:this.class_})}}),Sao.View.Form.Notebook=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-notebook",init:function(e){Sao.View.Form.Notebook._super.init.call(this,e),this.el=jQuery("<div/>",{class:this.class_}),this.nav=jQuery("<ul/>",{class:"nav nav-tabs",role:"tablist"}).appendTo(this.el),this.panes=jQuery("<div/>",{class:"tab-content"}).appendTo(this.el),this.selected=!1},add:function(e,t,i){var n=jQuery("<div/>",{role:"tabpanel",class:"tab-pane"}).uniqueId(),o=n.attr("id"),i=Sao.common.ICONFACTORY.get_icon_img(i),i=jQuery("<li/>",{role:"presentation"}).append(jQuery("<a/>",{"aria-controls":o,role:"tab","data-toggle":"tab",href:"#"+o}).text(t).prepend(i)).appendTo(this.nav);return n.append(e).appendTo(this.panes),this.selected||(i.addClass("active"),n.addClass("active"),this.selected=!0),i},set_current_page:function(e){e=void 0===e?":visible:first":":eq("+e+"):visible";this.nav.find("li"+e+" a").tab("show")},get_n_pages:function(){return this.nav.find("li[role='presentation']").length},get_nth_page:function(e){return jQuery(this.panes.find("div[role='tabpanel']")[e])}}),Sao.View.Form.Page=Sao.class_(Sao.View.Form.StateWidget,{init:function(e,t){Sao.View.Form.Page._super.init.call(this,t),this.el=e},hide:function(){Sao.View.Form.Page._super.hide.call(this),this.el.hasClass("active")&&this.el.next(":visible").find("a").tab("show")}}),Sao.View.Form.Group=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-group_",init:function(e){Sao.View.Form.Group._super.init.call(this,e),this.el=jQuery("<fieldset/>",{class:this.class_}),e.string&&this.el.append(jQuery("<legend/>").text(e.string))},add:function(e){this.el.append(e.el)}}),Sao.View.Form.Expander=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-group-expandable",init:function(e){Sao.View.Form.Expander._super.init.call(this,e),this.el=jQuery("<div/>",{class:"panel panel-default "+this.class_});var t=jQuery("<div/>",{class:"panel-heading"}).appendTo(this.el);t.uniqueId(),this.collapsible=jQuery("<div/>",{class:"panel-collapse collapse","aria-labelledby":t.attr("id")}).appendTo(this.el),this.collapsible.uniqueId(),this.body=jQuery("<div/>",{class:"panel-body"}).appendTo(this.collapsible);t=jQuery("<label/>",{class:"panel-title"}).appendTo(t),t=jQuery("<a/>",{role:"button","data-toggle":"collapse",href:"#"+this.collapsible.attr("id"),"aria-controls":this.collapsible.attr("id"),"aria-expanded":"1"==e.expandable}).appendTo(t);e.string&&t.text(e.string),t.append(jQuery("<span/>",{class:"caret"}))},add:function(e){this.body.empty(),this.body.append(e.el)},set_expanded:function(e){e?this.collapsible.collapse("show"):this.collapsible.collapse("hide")}}),Sao.View.Form.Link=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-link",init:function(e){var t;Sao.View.Form.Link._super.init.call(this,e),this.el=jQuery("<button/>",{class:this.class_+" btn btn-link",name:e.name,type:"button"}),e.icon&&(t=jQuery("<img/>",{class:"icon"}).prependTo(this.el),Sao.common.ICONFACTORY.get_icon_url(e.icon).done(function(e){t.attr("src",e)})),this.label=jQuery("<div/>").appendTo(this.el),this._current=null},get action_id(){return parseInt(this.attributes.id,10)},set_state:function(e){var t,i,n,o,s,r,a,c,l;Sao.View.Form.Link._super.set_state.call(this,e),"none"!=this.el.css("display")&&(t={},i={},n={},e?(t={model:e.model.name,id:e.id,ids:[e.id]},i=e.get_context(),n={active_model:e.model.name,active_id:e.id,active_ids:[e.id]},this._current=e.id):this._current=null,n.context=i,this.el.off("click"),this.el.click([t,i],this.clicked.bind(this)),o=Sao.rpc({method:"model.ir.action.get_action_value",params:[this.action_id,i]},Sao.Session.current_session,!1),this.label.text(o.name),s=new Sao.PYSON.Decoder(n),r=s.decode(o.pyson_domain),o.pyson_search_value&&(r=[r,s.decode(o.pyson_search_value)]),a=o.domains.filter(function(e){return e[2]}).map(function(e){var t=e[0],e=e[1];return[t,s.decode(e)]}),e&&e.links_counts[this.action_id]?(c=e.links_counts[this.action_id],this.set_label(o.name,a,c)):(c=a.length?a.map(function(){return 0}):[0],e&&(e.links_counts[this.action_id]=c),l=this._current,a.length?a.map(function(e,t){e=e[1];Sao.rpc({method:"model."+o.res_model+".search_count",params:[["AND",r,e],i]},Sao.Session.current_session).then(function(e){this._set_count(e,t,l,c,o.name,a)}.bind(this))},this):Sao.rpc({method:"model."+o.res_model+".search_count",params:[r,i]},Sao.Session.current_session).then(function(e){this._set_count(e,0,l,c,o.name,a)}.bind(this))))},_set_count:function(e,t,i,n,o,s){i==this._current&&(n[t]=e,this.set_label(o,s,n))},set_label:function(e,t,i){this.label.text(e),t.length?t.map(function(e,t){e=e[0];this.label.text(e+" "),jQuery("<span/>",{class:"badge"}).text(i[t]).appendTo(this.label)},this):(this.label.append(" "),jQuery("<span/>",{class:"badge"}).text(i[0]).appendTo(this.label)),"hide"===this.attributes.empty&&(i.filter(function(e){return 0!=e}).length?this.el.show():this.el.hide())},clicked:function(e){Sao.Action.execute(this.action_id,e.data[0],e.data[1],!0)}}),Sao.View.Form.Image_=Sao.class_(Sao.View.Form.StateWidget,{class_:"form-image_",init:function(e){Sao.View.Form.Image_._super.init.call(this,e),this.el=jQuery("<div/>",{class_:this.class_}),this.img=jQuery("<img/>",{class:"center-block",width:(e.size||48)+"px",height:(e.size||48)+"px"}).appendTo(this.el)},set_state:function(e){var t;Sao.View.Form.Image_._super.set_state.call(this,e),e&&((t=this.attributes.name)in e.model.fields&&(t=e.model.fields[t].get(e)),"url"==this.attributes.type?t?(this.attributes.url_size&&((e=new URL(t,window.location)).searchParams.set(this.attributes.url_size,attributes.size||48),t=e.href),this.img.attr("src",t)):this.img.removeAttr("src"):Sao.common.ICONFACTORY.get_icon_url(t).done(function(e){e?this.img.attr("src",e):this.img.removeAttr("src")}.bind(this)))}}),Sao.View.Form.Widget=Sao.class_(Object,{expand:!1,init:function(e,t){this.view=e,this.attributes=t,this.el=null,this.position=0,this.visible=!0,this.labelled=null},display:function(){var e=this.field,t=this.record,i=this.attributes.readonly,n=this.attributes.invisible,o=this.attributes.required;if(!e)return void 0===n&&(n=!1),void 0===o&&(o=!1),this.set_readonly(i=void 0===i?!0:i),this.set_invisible(n),void this.set_required(o);var s=e.get_state_attrs(t);void 0===i&&void 0===(i=s.readonly)&&(i=!1),void 0===o&&void 0===(o=s.required)&&(o=!1),this.view.screen.attributes.readonly&&(i=!0),this.set_readonly(i),i?this.el.addClass("readonly"):this.el.removeClass("readonly");t=this._required_el();this.set_required(o),!i&&o?t.addClass("required"):t.removeClass("required");t=s.invalid,s=this._invalid_el();!i&&t?s.addClass("has-error"):s.removeClass("has-error"),void 0===n&&void 0===(n=e.get_state_attrs(this.record).invisible)&&(n=!1),this.set_invisible(n)},_required_el:function(){return this.el},_invalid_el:function(){return this.el},get field_name(){return this.attributes.name},get model_name(){return this.view.screen.model_name},get model(){return this.view.screen.model},get record(){return this.view.record},get field(){var e=this.record;if(e)return e.model.fields[this.field_name]},focus_out:function(){this.field&&this.visible&&this.set_value()},set_value:function(){},set_readonly:function(e){this._readonly=e},set_required:function(e){},get modified(){return!1},set_invisible:function(e){this.visible=!e,e?this.el.hide():this.el.show()},focus:function(){this.el.focus()}}),Sao.View.Form.TranslateDialog=Sao.class_(Object,{class_:"form",init:function(e,t){var i=new Sao.Dialog(Sao.i18n.gettext("Translate"),this.class_,"lg");this.languages=e,this.read(t,i),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.close(i)}.bind(this)).appendTo(i.footer),jQuery("<button/>",{class:"btn btn-primary",type:"button"}).text(Sao.i18n.gettext("OK")).click(this.write.bind(this,t,i)).appendTo(i.footer),i.content.submit(function(e){e.preventDefault(),i.footer.find("button.btn-primary").first().click()}),i.modal.modal("show"),i.modal.on("shown.bs.modal",function(){i.modal.find("input,select").filter(":visible").first().focus()}),i.modal.on("hide.bs.modal",function(){jQuery(this).remove()})},close:function(e){e.modal.modal("hide")},read:function(a,c){function l(e){return e[0][a.field_name]||""}this.languages.forEach(function(e){var t=jQuery("<div/>",{class:"row form-group"}),i=a.translate_widget();i.attr("data-lang-id",e.id);var n=jQuery("<input/>",{type:"checkbox",title:Sao.i18n.gettext("Edit")});a._readonly&&n.attr("disabled",!0);var o=jQuery("<input/>",{type:"checkbox",disabled:!0,title:Sao.i18n.gettext("Fuzzy")}),s=Sao.rpc({method:"model."+a.model.name+".read",params:[[a.record.id],[a.field_name],{language:e.code}]},a.model.session).then(l),r=Sao.rpc({method:"model."+a.model.name+".read",params:[[a.record.id],[a.field_name],{language:e.code,fuzzy_translation:!0}]},a.model.session).then(l);jQuery.when(s,r).done(function(e,t){a.translate_widget_set(i,t),a.translate_widget_set_readonly(i,!0),o.attr("checked",e!==t)}),n.click(function(){a.translate_widget_set_readonly(i,!jQuery(this).prop("checked"))}),c.body.append(t),t.append(jQuery("<div/>",{class:"col-sm-2"}).append(e.name)),t.append(jQuery("<div/>",{class:"col-sm-8"}).append(i)),t.append(jQuery("<div/>",{class:"col-sm-1"}).append(n)),t.append(jQuery("<div/>",{class:"col-sm-1"}).append(o))}.bind(this))},write:function(n,e){this.languages.forEach(function(e){var t,i=jQuery("[data-lang-id="+e.id+"]");i.attr("readonly")||(n.model.session.context.language,(t={}).language=e.code,t.fuzzy_translation=!1,(e={})[n.field_name]=n.translate_widget_get(i),t=[[n.record.id],e,t],t={method:"model."+n.model.name+".write",params:t},Sao.rpc(t,n.model.session,!1))}.bind(this)),n.record.cancel(),n.view.display(),this.close(e)}}),Sao.View.Form.TranslateMixin={},Sao.View.Form.TranslateMixin.init=function(){this.translate||(this.translate=Sao.View.Form.TranslateMixin.translate.bind(this)),this.translate_dialog||(this.translate_dialog=Sao.View.Form.TranslateMixin.translate_dialog.bind(this)),this.translate_widget_set_readonly||(this.translate_widget_set_readonly=Sao.View.Form.TranslateMixin.translate_widget_set_readonly.bind(this)),this.translate_widget_set||(this.translate_widget_set=Sao.View.Form.TranslateMixin.translate_widget_set.bind(this)),this.translate_widget_get||(this.translate_widget_get=Sao.View.Form.TranslateMixin.translate_widget_get.bind(this))},Sao.View.Form.TranslateMixin.translate=function(){var t,e;this.record.id<0||this.record.has_changed()?(e=Sao.i18n.gettext("You need to save the record before adding translations."),Sao.common.message.run(e)):(t=this.model.session,e={method:"model.ir.lang.search",params:[[["translatable","=",!0]]].concat({})},Sao.rpc(e,t).then(function(e){jQuery.isEmptyObject(e)?Sao.common.message.run(Sao.i18n.gettext("No other language available.")):(e={method:"model.ir.lang.read",params:[e,["code","name"]].concat({})},Sao.rpc(e,t).then(function(e){this.translate_dialog(e)}.bind(this)))}.bind(this)))},Sao.View.Form.TranslateMixin.translate_dialog=function(e){new Sao.View.Form.TranslateDialog(e,this)},Sao.View.Form.TranslateMixin.translate_widget_set_readonly=function(e,t){e.prop("readonly",t)},Sao.View.Form.TranslateMixin.translate_widget_set=function(e,t){e.val(t)},Sao.View.Form.TranslateMixin.translate_widget_get=function(e){return e.val()},Sao.View.Form.Char=Sao.class_(Sao.View.Form.Widget,{class_:"form-char",init:function(e,t){Sao.View.Form.Char._super.init.call(this,e,t),Sao.View.Form.TranslateMixin.init.call(this),this.el=jQuery("<div/>",{class:this.class_}),this.group=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",name:t.name}).appendTo(this.group),jQuery.isEmptyObject(t.autocomplete)||(this.datalist=jQuery("<datalist/>").appendTo(this.el),this.datalist.uniqueId(),this.input.attr("list",this.datalist.attr("id")),this.input.attr("autocomplete","off")),this.el.change(this.focus_out.bind(this)),t.size||this.group.css("width","100%"),this.attributes.translate&&Sao.common.ICONFACTORY.get_icon_img("tryton-translate").appendTo(jQuery("<div/>",{class:"icon-input icon-secondary","aria-label":Sao.i18n.gettext("Translate"),title:Sao.i18n.gettext("Translate")}).appendTo(this.group.addClass("input-icon input-icon-secondary"))).click(this.translate.bind(this))},get_client_value:function(){var e=this.field,t=this.record,i="";return i=e?e.get_client(t):i},display:function(){Sao.View.Form.Char._super.display.call(this);var e=this.record;this.datalist&&(this.datalist.empty(),(e?(this.field_name in e.autocompletion||e.do_autocomplete(this.field_name),e.autocompletion[this.field_name]||[]):[]).forEach(function(e){jQuery("<option/>",{value:e}).appendTo(this.datalist)}.bind(this)));var t="",i="100%";e&&0<(t=e.expr_eval(this.attributes.size))&&(i=null),this.input.val(this.get_client_value()),this.input.attr("maxlength",t),this.input.attr("size",t),this.group.css("width",i)},get modified(){return!(!this.record||!this.field)&&this.get_client_value()!=this.get_value()},set_value:function(){this.field.set_client(this.record,this.input.val())},get_value:function(){return this.input.val()},set_readonly:function(e){Sao.View.Form.Char._super.set_readonly.call(this,e),this.input.prop("readonly",e)},focus:function(){this.input.focus()},translate_widget:function(){return jQuery("<input/>",{class:"form-control",readonly:"readonly",name:this.attributes.name})}}),Sao.View.Form.Password=Sao.class_(Sao.View.Form.Char,{class_:"form-password",init:function(e,t){Sao.View.Form.Password._super.init.call(this,e,t),this.input.prop("type","password"),this.button=jQuery("<button/>",{class:"btn btn-default btn-sm form-control",type:"button"}).appendTo(jQuery("<span/>",{class:"input-group-btn"}).appendTo(this.group)),this._set_password_label(),this.button.click(this.toggle_visibility.bind(this))},toggle_visibility:function(){"password"==this.input.prop("type")?(this.input.prop("type","text"),this.input.attr("autocomplete","off")):(this.input.prop("type","password"),this.input.removeAttr("autocomplete")),this._set_password_label()},_set_password_label:function(){"password"==this.input.prop("type")?this.button.text(Sao.i18n.gettext("Show")):this.button.text(Sao.i18n.gettext("Hide"))}}),Sao.View.Form.Date=Sao.class_(Sao.View.Form.Widget,{class_:"form-date",_width:"10em",_input:"date",_input_format:"%Y-%m-%d",_format:Sao.common.format_date,_parse:Sao.common.parse_date,init:function(e,t){Sao.View.Form.Date._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_});e=this.labelled=jQuery("<div/>",{class:"input-group input-group-sm input-icon input-icon-secondary"}).appendTo(this.el);this.date=this.labelled=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap",name:t.name}).appendTo(e),this.date.uniqueId(),this.input=jQuery("<input/>",{type:this._input,role:"button",tabindex:-1}),this.input.click(function(){var e=this.get_value(),e=this._format(this._input_format,e);this.input.val(e)}.bind(this)),this.input.change(function(){var e=this.input.val();e&&(e=this._parse(this._input_format,e),e=this._format(this.get_format(),e),this.date.val(e).change(),this.date.focus())}.bind(this)),this.input[0].type==this._input&&(this.icon=jQuery("<div/>",{class:"icon-input icon-secondary","aria-label":Sao.i18n.gettext("Open the calendar"),title:Sao.i18n.gettext("Open the calendar")}).appendTo(e),this.input.appendTo(this.icon),Sao.common.ICONFACTORY.get_icon_img("tryton-date").appendTo(this.icon)),this.date.css("max-width",this._width),this.date.change(this.focus_out.bind(this));var n=new Mousetrap(this.date[0]);n.bind("enter",function(e,t){this.date.prop("readonly")||this.focus_out()}.bind(this)),n.bind("=",function(e,t){this.date.prop("readonly")||(e.preventDefault(),this.date.val(this._format(this.get_format(),moment())).change())}.bind(this)),Sao.common.DATE_OPERATORS.forEach(function(i){n.bind(i[0],function(e,t){this.date.prop("readonly")||(e.preventDefault(),(e=this.get_value()||Sao.DateTime()).add(i[1]),this.date.val(this._format(this.get_format(),e)).change())}.bind(this))}.bind(this))},get_format:function(){return this.field&&this.record?this.field.date_format(this.record):Sao.common.date_format(this.view.screen.context.date_format)},get_value:function(){return this._parse(this.get_format(),this.date.val())},display:function(){var e,t=this.record,i=this.field;Sao.View.Form.Date._super.display.call(this),t&&(e=i.get_client(t)),this.date.val(this._format(this.get_format(),e))},focus:function(){this.date.focus()},get modified(){if(this.record&&this.field){var e=this.cast(this.field.get_client(this.record));return JSON.stringify(e)!=JSON.stringify(this.get_value())}return!1},set_value:function(){this.field.set_client(this.record,this.get_value())},set_readonly:function(e){Sao.View.Form.Date._super.set_readonly.call(this,e),this.el.find("input").prop("readonly",e),this.icon&&(e?this.icon.hide():this.icon.show())},cast:function(e){return e=e&&e.isDateTime?e.todate():e}}),Sao.View.Form.DateTime=Sao.class_(Sao.View.Form.Date,{class_:"form-datetime",_width:"20em",_input:"datetime-local",_input_format:"%Y-%m-%dT%H:%M:%S",_format:Sao.common.format_datetime,_parse:Sao.common.parse_datetime,get_format:function(){return this.field&&this.record?this.field.date_format(this.record)+" "+this.field.time_format(this.record):Sao.common.date_format(this.view.screen.context.date_format)+" %X"},cast:function(e){return e}}),Sao.View.Form.Time=Sao.class_(Sao.View.Form.Date,{class_:"form-time",_width:"10em",_input:"time",_input_format:"%H:%M:%S",_format:Sao.common.format_time,_parse:Sao.common.parse_time,init:function(e,t){Sao.View.Form.Time._super.init.call(this,e,t),~navigator.userAgent.indexOf("Firefox")&&this.input.parent().hide()},get_format:function(){return this.field&&this.record?this.field.time_format(this.record):"%X"},cast:function(e){return e=e&&e.isDateTime?e.totime():e}}),Sao.View.Form.TimeDelta=Sao.class_(Sao.View.Form.Widget,{class_:"form-timedelta",init:function(e,t){Sao.View.Form.TimeDelta._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_}),this.input=this.labelled=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap",name:t.name}).appendTo(this.el),this.el.change(this.focus_out.bind(this))},display:function(){Sao.View.Form.TimeDelta._super.display.call(this);var e=this.record;e?(e=e.field_get_client(this.field_name),this.input.val(e||"")):this.input.val("")},focus:function(){this.input.focus()},get modified(){if(this.record&&this.field){var e=this.input.val();return this.field.get_client(this.record)!=e}return!1},set_value:function(){this.field.set_client(this.record,this.input.val())},set_readonly:function(e){Sao.View.Form.TimeDelta._super.set_readonly.call(this,e),this.input.prop("readonly",e)}});function i(e,t){var i=e.attr("id"),n=e.attr("aria-labelledby"),o=t.attr("id"),s=t.attr("aria-labelledby");e.attr("id",o),e.attr("aria-labelledby",s),t.attr("id",i),t.attr("aria-labelledby",n)}function n(e){var t=e.clone().prependTo(e.parent());return t.attr("type","text"),e.attr("type","number"),e.attr("step",1),e.attr("lang",Sao.i18n.getlang()),e.hide().on("focusout",function(){e[0].checkValidity()&&(i(e,t),e.hide(),t.show())}),t.on("focusin",function(){e.prop("readonly")||(i(e,t),t.hide(),e.show(),window.setTimeout(function(){e.focus()}))}),t}Sao.View.Form.Integer=Sao.class_(Sao.View.Form.Char,{class_:"form-integer",init:function(e,t){Sao.View.Form.Integer._super.init.call(this,e,t),this.input_text=this.labelled=n(this.input),this.attributes.symbol&&(this.symbol_start=jQuery("<span/>",{class:"input-group-addon symbol symbol-start"}).prependTo(this.group),this.symbol_end=jQuery("<span/>",{class:"input-group-addon symbol symbol-end"}).appendTo(this.group)),this.group.css("width",""),this.factor=Number(t.factor||1)},get modified(){if(this.record&&this.field){var e=this.get_client_value();return JSON.stringify(this.field.convert(e))!=JSON.stringify(this.field.convert(this.get_value()))}return!1},set_value:function(){this.field.set_client(this.record,this.get_value(),void 0,this.factor)},get_value:function(){return this.input.val()},get_client_value:function(){var e="",t=this.field;return t&&(null!==(e=t.get(this.record))?(e*=this.factor,(t=t.digits(this.record,this.factor))&&(e=e.toFixed(t[1]))):e=""),e},get width(){return 8},display:function(){function e(e,t){t?(e.text(t),e.show()):(e.text(""),e.hide())}Sao.View.Form.Integer._super.display.call(this);var t=this.field,i=this.record,n="";null!==this.width&&this.el.css("width",this.width+"ch"),t&&(n=t.get_client(i,this.factor)),t&&this.attributes.symbol&&(i=(t=t.get_symbol(i,this.attributes.symbol))[0],t[1]<.5?(e(this.symbol_start,i),e(this.symbol_end,"")):(e(this.symbol_start,""),e(this.symbol_end,i))),this.input_text.val(n),this.input_text.attr("maxlength",this.input.attr("maxlength")),this.input_text.attr("size",this.input.attr("size"))},set_readonly:function(e){Sao.View.Form.Integer._super.set_readonly.call(this,e),this.input_text.prop("readonly",e)},focus:function(){this.input.prop("readonly")?this.input_text.focus():(this.input_text.hide(),this.input.show().focus())}}),Sao.View.Form.Float=Sao.class_(Sao.View.Form.Integer,{class_:"form-float",get digits(){var e=this.record,t=this.field;if(e&&t)return t.digits(e,this.factor)},get width(){var e=this.digits;return e?e.reduce(function(e,t){return e+t}):18},display:function(){var e=this.record,t=(this.field,"any");!e||(e=this.digits)&&(t=Math.pow(10,-e[1]).toFixed(e[1])),this.input.attr("step",t),Sao.View.Form.Float._super.display.call(this)}}),Sao.View.Form.Selection=Sao.class_(Sao.View.Form.Widget,{class_:"form-selection",init:function(e,t){Sao.View.Form.Selection._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_}),this.select=this.labelled=jQuery("<select/>",{class:"form-control input-sm mousetrap",name:t.name}),this.el.append(this.select),this.select.change(this.focus_out.bind(this)),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(e){Sao.common.selection_mixin.init_selection.call(this,e,this.set_selection.bind(this))},update_selection:function(e,t,i){Sao.common.selection_mixin.update_selection.call(this,e,t,function(e,t){this.set_selection(e,t),i&&i(t)}.bind(this))},set_selection:function(e,t){var i=this.select;i.empty(),e.forEach(function(e){i.append(jQuery("<option/>",{value:JSON.stringify(e[0]),text:e[1],title:t[e[0]]}))})},display_update_selection:function(){var r=this.record,a=this.field;this.update_selection(r,a,function(t){if(a){for(var e,i=a.get(r),n=!1,o=0,s=this.selection.length;o<s;o++)if(this.selection[o][0]===i){n=!0;break}n?e=jQuery.when():(e=Sao.common.selection_mixin.get_inactive_selection.call(this,i)).done(function(e){this.select.append(jQuery("<option/>",{value:JSON.stringify(e[0]),text:e[1],disabled:!0}))}.bind(this)),e.done(function(){this.select.val(JSON.stringify(i));var e=t[i]||null;this.attributes.help&&e&&(e=this.attributes.help+"\n"+e),this.select.attr("title",e)}.bind(this))}else this.select.val("")}.bind(this))},display:function(){Sao.View.Form.Selection._super.display.call(this),this.display_update_selection()},focus:function(){this.select.focus()},get_value:function(){return JSON.parse(this.select.val())},get modified(){return!(!this.record||!this.field)&&this.field.get(this.record)!=this.get_value()},set_value:function(){var e=this.get_value();this.field.set_client(this.record,e)},set_readonly:function(e){Sao.View.Form.Selection._super.set_readonly.call(this,e),this.select.prop("disabled",e)}}),Sao.View.Form.Boolean=Sao.class_(Sao.View.Form.Widget,{class_:"form-boolean",init:function(e,t){Sao.View.Form.Boolean._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_}),this.input=this.labelled=jQuery("<input/>",{type:"checkbox",class:"form-control input-sm mousetrap",name:t.name}).appendTo(this.el),this.input.change(this.focus_out.bind(this)),this.input.click(function(){return!jQuery(this).prop("readonly")})},display:function(){Sao.View.Form.Boolean._super.display.call(this);var e=this.record;e?this.input.prop("checked",e.field_get(this.field_name)):this.input.prop("checked",!1)},focus:function(){this.input.focus()},set_value:function(){var e=this.input.prop("checked");this.field.set_client(this.record,e)},set_readonly:function(e){Sao.View.Form.Boolean._super.set_readonly.call(this,e),this.input.prop("readonly",e)}}),Sao.View.Form.Text=Sao.class_(Sao.View.Form.Widget,{class_:"form-text",expand:!0,init:function(e,t){Sao.View.Form.Text._super.init.call(this,e,t),Sao.View.Form.TranslateMixin.init.call(this),this.el=jQuery("<div/>",{class:this.class_}),this.input=this.labelled=jQuery("<textarea/>",{class:"form-control input-sm mousetrap",name:t.name}).appendTo(this.el),this.input.change(this.focus_out.bind(this)),this.attributes.translate&&((t=jQuery("<button/>",{class:"btn btn-default btn-sm form-control",type:"button","aria-label":Sao.i18n.gettext("Translate")}).appendTo(jQuery("<span/>",{class:"input-group-btn"}).appendTo(this.el))).append(Sao.common.ICONFACTORY.get_icon_img("tryton-translate")),t.click(this.translate.bind(this)))},display:function(){Sao.View.Form.Text._super.display.call(this);var e,t=this.record;t?(e=t.field_get_client(this.field_name),this.input.val(e),this.attributes.spell&&(this.input.attr("lang",Sao.i18n.BC47(t.expr_eval(this.attributes.spell))),this.input.attr("spellcheck","true"))):this.input.val("")},focus:function(){this.input.focus()},get modified(){return!(!this.record||!this.field)&&this.field.get_client(this.record)!=this.get_value()},get_value:function(){return this.input.val()||""},set_value:function(){this.field.set_client(this.record,this.get_value())},set_readonly:function(e){Sao.View.Form.Text._super.set_readonly.call(this,e),this.input.prop("readonly",e)},translate_widget:function(){return jQuery("<textarea/>",{class:"form-control",readonly:"readonly"})}}),Sao.View.Form.RichText=Sao.class_(Sao.View.Form.Widget,{class_:"form-richtext",expand:!0,init:function(e,t){Sao.View.Form.RichText._super.init.call(this,e,t),Sao.View.Form.TranslateMixin.init.call(this),this.el=jQuery("<div/>",{class:this.class_+" panel panel-default"}),parseInt(t.toolbar||"1",10)&&(this.toolbar=Sao.common.richtext_toolbar().appendTo(jQuery("<div/>",{class:"panel-heading"}).appendTo(this.el))),this.input=this.labelled=jQuery("<div/>",{class:"richtext mousetrap",contenteditable:!0}).appendTo(jQuery("<div/>",{class:"panel-body"}).appendTo(this.el)),this.el.focusout(this.focus_out.bind(this)),this.attributes.translate&&((t=jQuery("<button/>",{class:"btn btn-default btn-sm form-control",type:"button","aria-label":Sao.i18n.gettext("Translate")}).appendTo(jQuery("<span/>",{class:"input-group-btn"}).appendTo(this.el))).append(Sao.common.ICONFACTORY.get_icon_img("tryton-translate")),t.click(this.translate.bind(this)))},focus_out:function(){window.setTimeout(function(){0===this.el.find(":focus").length&&Sao.View.Form.RichText._super.focus_out.call(this)}.bind(this),0)},display:function(){Sao.View.Form.RichText._super.display.call(this);var e="",t=this.record;t&&(e=t.field_get_client(this.field_name),this.attributes.spell&&(this.input.attr("lang",Sao.i18n.BC47(t.expr_eval(this.attributes.spell))),this.input.attr("spellcheck","true"))),this.input.html(Sao.HtmlSanitizer.sanitize(e||""))},focus:function(){this.input.focus()},get_value:function(){return this._normalize_markup(this.input.html())},set_value:function(){var e=this.get_value(),t=this.field.get_client(this.record);e==this._normalize_markup(t)&&(e=t),this.field.set_client(this.record,e)},_normalize_markup:function(e){return Sao.common.richtext_normalize(Sao.HtmlSanitizer.sanitize(e||""))},get modified(){return!(!this.record||!this.field)&&this._normalize_markup(this.field.get_client(this.record))!=this.get_value()},set_readonly:function(e){Sao.View.Form.RichText._super.set_readonly.call(this,e),this.input.prop("contenteditable",!e),this.toolbar&&this.toolbar.find("button,input,select").prop("disabled",e)},translate_widget:function(){var e=jQuery("<div/>",{class:this.class_+" panel panel-default"});parseInt(this.attributes.toolbar||"1",10)&&Sao.common.richtext_toolbar().appendTo(jQuery("<div/>",{class:"panel-heading"}).appendTo(e));jQuery("<div/>",{class:"richtext mousetrap",contenteditable:!0}).appendTo(jQuery("<div/>",{class:"panel-body"}).appendTo(e));return e},translate_widget_set_readonly:function(e,t){Sao.View.Form.TranslateMixin.translate_widget_set_readonly.call(this,e,t),e.find("button,input,select").prop("disabled",t),e.find("div[contenteditable]").prop("contenteditable",!t)},translate_widget_set:function(e,t){e.find("div[contenteditable]").html(Sao.HtmlSanitizer.sanitize(t||""))},translate_widget_get:function(e){return this._normalize_markup(e.find("div[contenteditable]").html())}}),Sao.View.Form.Many2One=Sao.class_(Sao.View.Form.Widget,{class_:"form-many2one",init:function(e,t){Sao.View.Form.Many2One._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_});e=jQuery("<div/>",{class:"input-group input-group-sm input-icon"}).appendTo(this.el);this.entry=this.labelled=jQuery("<input/>",{type:"input",class:"form-control input-sm mousetrap",name:t.name}).appendTo(e),this.but_primary=jQuery("<img/>",{class:"icon"}).appendTo(jQuery("<div/>",{class:"icon-input icon-primary"}).appendTo(e)),this.but_secondary=jQuery("<img/>",{class:"icon"}).appendTo(jQuery("<div/>",{class:"icon-input icon-secondary"}).appendTo(e)),this.but_primary.click("primary",this.edit.bind(this)),this.but_secondary.click("secondary",this.edit.bind(this)),this.entry.on("keydown",this.key_press.bind(this)),t.completion&&"1"!=t.completion||(Sao.common.get_completion(e,this._update_completion.bind(this),this._completion_match_selected.bind(this),this._completion_action_activated.bind(this)),this.wid_completion=!0),this.el.change(this.focus_out.bind(this)),this._readonly=!1},get_screen:function(e){var t=this.field.get_domain(this.record),i=e?this.field.get_search_context(this.record):this.field.get_context(this.record),n=(this.attributes.view_ids||"").split(",");jQuery.isEmptyObject(n)||n.shift();var o=this.get_model(),e=jQuery.extend([],this.view.screen.breadcrumb);return e.push(this.attributes.string||Sao.common.MODELNAME.get(o)),new Sao.Screen(this.get_model(),{context:i,domain:t,mode:["form"],view_ids:n,views_preload:this.attributes.views,readonly:this._readonly,exclude_field:this.attributes.relation_field,breadcrumb:e})},set_text:function(e){jQuery.isEmptyObject(e)&&(e=""),this.entry.val(e)},get_text:function(){var e=this.record;return e?e.field_get_client(this.field_name):""},focus_out:function(){(this.attributes.completion&&"1"!=this.attributes.completion||!this.el.find(".dropdown").hasClass("open"))&&Sao.View.Form.Many2One._super.focus_out.call(this)},set_value:function(){var e=this.record,t=this.field;t.get_client(e)!=this.entry.val()&&(t.set_client(e,this.value_from_id(null,"")),this.entry.val(""))},display:function(){var e,t,i,n=this.record,o=this.field;Sao.View.Form.Many2One._super.display.call(this),this._set_button_sensitive(),this._set_completion(),n?(this.set_text(o.get_client(n)),n=o.get(n),n=this.has_target(n)?(e="tryton-open",t=Sao.i18n.gettext("Open the record"),i="tryton-clear",Sao.i18n.gettext("Clear the field")):(e=null,t="",i="tryton-search",Sao.i18n.gettext("Search a record")),this.entry.prop("readonly")&&(i=null),[[e,t,this.but_primary,"primary"],[i,n,this.but_secondary,"secondary"]].forEach(function(e){var t=e[0],i=e[1],n=e[2],o=n.parent(),e="input-icon-"+e[3];t?(o.show(),o.parent().addClass(e),Sao.common.ICONFACTORY.get_icon_url(t).then(function(e){n.attr("src",e)})):(o.hide(),o.parent().removeClass(e)),n.attr("aria-label",i),n.attr("title",i)})):this.entry.val("")},focus:function(){this.entry.focus()},set_readonly:function(e){Sao.View.Form.Many2One._super.set_readonly.call(this,e),this._readonly=e,this._set_button_sensitive()},_set_button_sensitive:function(){this.entry.prop("readonly",this._readonly),this.but_primary.prop("disabled",!this.read_access),this.but_secondary.prop("disabled",this._readonly)},get_access:function(e){var t=this.get_model();return!t||Sao.common.MODELACCESS.get(t)[e]},get read_access(){return this.get_access("read")},get create_access(){return this.attributes.create&&this.get_access("create")},get modified(){if(this.record&&this.field){var e=this.entry.val();return this.field.get_client(this.record)!=e}return!1},id_from_value:function(e){return e},value_from_id:function(e,t){return[e,t=void 0===t?"":t]},get_model:function(){return this.attributes.relation},has_target:function(e){return null!=e},edit:function(e){var t=this.get_model();if(t&&Sao.common.MODELACCESS.get(t).read){var i,n=this.record,o=n.field_get(this.field_name);if(e&&"secondary"==e.data&&!this._readonly&&this.has_target(o))return this.record.field_set_client(this.field_name,this.value_from_id(null,"")),void this.entry.val("");if(this.has_target(o)){var s=this.id_from_value(n.field_get(this.field_name));if(e&&(e.ctrlKey||e.metaKey)){var r={};return r.model=this.get_model(),r.res_id=s,r.mode=["form"],r.name=this.attributes.string,r.context=this.field.get_context(this.record),void Sao.Tab.create(r)}var a=this.get_screen(),c=function(e){e&&a.current_record.rec_name().done(function(e){e=this.value_from_id(a.current_record.id,e);this.record.field_set_client(this.field_name,e,!0)}.bind(this))};a.switch_view().done(function(){a.load([s]),new Sao.Window.Form(a,c.bind(this),{save_current:!0})}.bind(this))}else t&&(i=this.field.get_domain(n),o=this.field.get_search_context(n),e=this.field.get_search_order(n),r=this.entry.val(),c=function(e){jQuery.isEmptyObject(e)||(e=this.value_from_id(e[0][0],e[0][1]),this.record.field_set_client(this.field_name,e,!0))},n=new Sao.common.DomainParser,new Sao.Window.Search(t,c.bind(this),{sel_multi:!1,context:o,domain:i,order:e,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:this.create_access,search_filter:n.quote(r),title:this.attributes.string,exclude_field:this.attributes.relation_field}))}},new_:function(e){var t,i,n=this.get_model();n&&Sao.common.MODELACCESS.get(n).create&&(t=this.get_screen(!0),i=this.entry.val(),t.switch_view().done(function(){new Sao.Window.Form(t,function(e){e&&t.current_record.rec_name().done(function(e){e=this.value_from_id(t.current_record.id,e);this.record.field_set_client(this.field_name,e)}.bind(this))}.bind(this),{new_:!0,save_current:!0,rec_name:i})}.bind(this)))},key_press:function(e){var t=!this.entry.prop("readonly"),i=[Sao.common.TAB_KEYCODE],n=[Sao.common.BACKSPACE_KEYCODE,Sao.common.DELETE_KEYCODE];this.wid_completion||i.push(Sao.common.RETURN_KEYCODE),e.which==Sao.common.F3_KEYCODE&&t&&this.create_access?(this.new_(),e.preventDefault()):e.which==Sao.common.F2_KEYCODE&&this.read_access?(this.edit(),e.preventDefault()):~i.indexOf(e.which)&&t?(this.attributes.completion&&"1"!=this.attributes.completion||!this.el.find(".dropdown").hasClass("open"))&&this.activate():this.has_target(this.record.field_get(this.field_name))&&t&&(this.get_text()==this.entry.val()&&!~n.indexOf(e.which)||(this.entry.val(""),this.record.field_set_client(this.field_name,this.value_from_id(null,""))))},activate:function(){var e,t,i,n,o,s=this.get_model();s&&Sao.common.MODELACCESS.get(s).read&&(n=(o=this.record).field_get(this.field_name),new Sao.Model(s),s&&!this.has_target(n)&&(e=this.entry.val(),this._readonly||!e&&!this.field.get_state_attrs(this.record).required||(t=this.field.get_domain(o),i=this.field.get_search_context(o),n=this.field.get_search_order(o),o=new Sao.common.DomainParser,new Sao.Window.Search(s,function(e){jQuery.isEmptyObject(e)?this.entry.val(""):(e=this.value_from_id(e[0][0],e[0][1]),this.record.field_set_client(this.field_name,e,!0))}.bind(this),{sel_multi:!1,context:i,domain:t,order:n,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:this.create_access,search_filter:o.quote(e),title:this.attributes.string,exclude_field:this.attributes.relation_field}))))},_set_completion:function(){var e=this.el.find(".action-search");this.read_access?e.removeClass("disabled"):e.addClass("disabled");e=this.el.find(".action-create");this.create_access?e.removeClass("disabled"):e.addClass("disabled")},_update_completion:function(e){var t=this.record;if(t){var i=this.field,n=i.get(t);if(this.has_target(n)){var o=this.id_from_value(n);if(void 0!==o&&0<=o)return jQuery.when()}o=this.get_model();return Sao.common.update_completion(this.entry,t,i,o)}},_completion_match_selected:function(e){this.record.field_set_client(this.field_name,this.value_from_id(e.id,e.rec_name),!0)},_completion_action_activated:function(e){"search"==e?this.edit():"create"==e&&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(e,t){Sao.View.Form.Reference._super.init.call(this,e,t),this.el.addClass("form-inline"),this.select=jQuery("<select/>",{class:"form-control input-sm","aria-label":t.string,title:t.string}),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(e){Sao.common.selection_mixin.init_selection.call(this,e,this.set_selection.bind(this))},update_selection:function(e,t,i){Sao.common.selection_mixin.update_selection.call(this,e,t,function(e,t){this.set_selection(e,t),i&&i()}.bind(this))},set_selection:function(e,t){var i=this.select;i.empty(),e.forEach(function(e){i.append(jQuery("<option/>",{value:e[0],text:e[1],title:t[e[0]]}))})},get modified(){if(this.record&&this.field){var e=this.field.get_client(this.record),t="",i="";return e&&(t=e[0],i=e[1]),t!=this.get_model()||i!=this.entry.val()}return!1},id_from_value:function(e){return parseInt(e.split(",")[1],10)},value_from_id:function(e,t){return t=t||"",[this.get_model(),[e,t]]},get_text:function(){var e=this.record;return e?e.field_get_client(this.field_name)[1]:""},get_model:function(){return this.select.val()},has_target:function(e){if(null===e)return!1;var t=e.split(",")[0];return e=e.split(",")[1],jQuery.isEmptyObject(e)?e=null:(e=parseInt(e,10),isNaN(e)&&(e=null)),t==this.get_model()&&0<=e},_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 e=this.get_model(),e=e?[e,[-1,""]]:["",""];this.record.field_set_client(this.field_name,e)},set_value:function(){var e,t,i,n=this.record,o=this.field;this.get_model()?(i=(t=o.get_client(n,this.field_name))instanceof Array?(e=t[0],t[1]):e="",e==this.get_model()&&i==this.entry.val()||(o.set_client(n,null),this.entry.val(""))):(t=this.entry.val(),jQuery.isEmptyObject(t)?o.set_client(n,null):o.set_client(n,["",t]))},set_text:function(e){var t;e=e?(t=e[0],e[1]):t=null,Sao.View.Form.Reference._super.set_text.call(this,e),t?this.select.val(t):this.select.val("")},display:function(){this.update_selection(this.record,this.field,function(){Sao.View.Form.Reference._super.display.call(this)}.bind(this))},set_readonly:function(e){Sao.View.Form.Reference._super.set_readonly.call(this,e),this.select.prop("disabled",e)}}),Sao.View.Form.One2Many=Sao.class_(Sao.View.Form.Widget,{class_:"form-one2many",expand:!0,init:function(e,t){Sao.View.Form.One2Many._super.init.call(this,e,t),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:t.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 i=jQuery("<div/>",{class:this.class_+"-toolbar"});this.menu.append(i);var n=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(i),e=jQuery("<div/>",{class:"input-group-btn"}).appendTo(n),i=function(i){return function(e){var t=jQuery(e.target);t.prop("disabled",!0),(i(e)||jQuery.when()).always(function(){t.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(e),this.but_switch.click(i(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(e),this.but_previous.click(i(this.previous.bind(this))),this.label=jQuery("<span/>",{class:"badge"}).appendTo(jQuery("<span/>",{class:"btn hidden-xs"}).appendTo(e)),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(e),this.but_next.click(i(this.next.bind(this))),t.add_remove&&(this.wid_text=jQuery("<input/>",{type:"text",class:"form-control input-sm",name:t.name}).appendTo(n),t.completion&&"1"!=t.completion||(Sao.common.get_completion(this.wid_text,this._update_completion.bind(this),this._completion_match_selected.bind(this),this._completion_action_activated.bind(this)),this.wid_completion=!0),e=jQuery("<div/>",{class:"input-group-btn"}).appendTo(n),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(e),this.but_add.click(i(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(e),this.but_remove.click(i(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(e),this.but_new.click(i(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(e),this.but_open.click(i(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(e),this.but_del.click(i(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(e),this.but_undel.click(i(this.undelete.bind(this))),this.content=jQuery("<div/>",{class:this.class_+"-content panel-body"}),this.el.append(this.content);n=(t.mode||"tree,form").split(","),e=t.relation,i=jQuery.extend([],this.view.screen.breadcrumb);i.push(t.string||Sao.common.MODELNAME.get(e)),this.screen=new Sao.Screen(e,{mode:n,view_ids:(t.view_ids||"").split(","),views_preload:t.views||{},order:t.order,row_activate:this.activate.bind(this),exclude_field:t.relation_field||null,limit:null,pre_validate:t.pre_validate,breadcrumb:i}),this.screen.pre_validate=1==t.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)),t.add_remove&&this.wid_text.on("keydown",this.key_press.bind(this)),this.but_switch.prop("disabled",this.screen.number_of_views<=0)},get modified(){return this.screen.current_view.modified},set_readonly:function(e){Sao.View.Form.One2Many._super.set_readonly.call(this,e),this._set_button_sensitive(),this._set_label_state()},set_required:function(e){this._required=e,this._set_label_state()},_set_label_state:function(){Sao.common.apply_label_attributes(this.title,this._readonly,this._required)},_set_button_sensitive:function(){var e=Sao.common.MODELACCESS.get(this.screen.model_name),t=this.record,i=this.field;t=t&&i?(n=t.expr_eval(this.attributes.size),o=i.get_eval(t).length,null!=n&&n<=o&&0<=n):(o=null,!1);var n=this.screen.deletable,o=this.attributes.create;void 0===o&&(o=!0),this.but_new.prop("disabled",this._readonly||!o||t||!e.create);o=this.attributes.delete;void 0===o&&(o=!0),this.but_del.prop("disabled",this._readonly||!o||!e.delete||!this._position||!n),this.but_undel.prop("disabled",this._readonly||t||!this._position),this.but_open.prop("disabled",!e.read||!this._position),this.but_next.prop("disabled",0<this.position&&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||t||!e.write||!e.read),this.but_remove.prop("disabled",this._readonly||!this.position||!e.write||!e.read))},_sequence:function(){for(var e=0,t=this.screen.views.length;e<t;e++){var i=this.screen.views[e];if("tree"==i.view_type){i=i.attributes.sequence;if(i)return i}}},display:function(){Sao.View.Form.One2Many._super.display.call(this),this._set_button_sensitive(),this.prm.done(function(){var e=this.record,t=this.field;if(!t)return this.screen.new_group(),this.screen.current_record=null,this.screen.group.parent=null,void this.screen.display();var i=e.field_get_client(this.field_name);i!=this.screen.group&&(this.screen.set_group(i),"tree"==this.screen.current_view.view_type&&this.screen.current_view.editable&&(this.screen.current_record=null));var n=[],i=null;e&&(n=t.get_domain(e),i=e.expr_eval(this.attributes.size)),this._readonly&&(i=null===i?this.screen.group.length:Math.min(i,this.screen.group.length)),Sao.common.compare(this.screen.domain,n)||(this.screen.domain=n),this.screen.size_limit=i,this.screen.display(),void 0!==this.attributes.height&&this.screen.current_view.el.find(".treeview,.list-form").first().css("min-height",this.attributes.height+"px").css("max-height",this.attributes.height+"px")}.bind(this))},focus:function(){this.attributes.add_remove&&this.wid_text.focus()},activate:function(e){this.edit()},add:function(e){var t,i,n,s,o,r,a=Sao.common.MODELACCESS.get(this.screen.model_name);a.write&&a.read&&(this.view.set_value(),i=this.field.get_domain(this.record),t=this.field.get_search_context(this.record),i=["OR",i=[i,this.record.expr_eval(this.attributes.add_remove)],["id","in",this.field.get_removed_ids(this.record)]],n=this.wid_text.val(),s=this._sequence(),o=function(e){var t=jQuery.when();if(!jQuery.isEmptyObject(e)){for(var i=[],n=0,o=e.length;n<o;n++)i.push(e[n][0]);this.screen.group.load(i,!0),t=this.screen.display(),s&&this.screen.group.set_sequence(s,this.screen.new_position)}t.done(function(){this.screen.set_cursor()}.bind(this)),this.wid_text.val("")}.bind(this),r=new Sao.common.DomainParser,a=this.field.get_search_order(this.record),new Sao.Window.Search(this.attributes.relation,o,{sel_multi:!0,context:t,domain:i,order:a,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:!this.but_new.prop("disabled"),search_filter:r.quote(n),title:this.attributes.string,exclude_field:this.attributes.relation_field}))},remove:function(e){var t=Sao.common.MODELACCESS.get(this.screen.model_name),i=!this.screen.readonly;t.write&&t.read&&i&&this.screen.remove(!1,!0,!1)},new_:function(e){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 e,t,i=this._sequence(),n=function(){i&&this.screen.group.set_sequence(i,this.screen.new_position)}.bind(this);"form"==this.screen.current_view.type||this.screen.current_view.editable?(this.screen.new_().then(n),this.screen.current_view.el.prop("disabled",!1)):(t=(e=this.record).expr_eval(this.attributes.size)||-1,t-=this.field.get_eval(e),new Sao.Window.Form(this.screen,n,{new_:!0,many:t}))},new_product:function(){var c=this.attributes.product.split(","),l={},d=this.screen;d.new_(!1).then(function(a){a.default_get().then(function(o){a.set_default(o);var s=function(){if(jQuery.isEmptyObject(c))return r();var t=d.model.fields[c.pop()],e=t.description.relation;e||s();var i=t.get_domain(a),n=t.get_search_context(a),o=t.get_search_order(a);new Sao.Window.Search(e,function(e){jQuery.isEmptyObject(e)||(l[t.name]=e),s()},{sel_multi:!0,context:n,domain:i,order:o,search_filter:"",title:this.attributes.string})}.bind(this),r=function(){var t,e;d.group.remove(a,!0),jQuery.isEmptyObject(l)||(e=(t=Object.keys(l)).map(function(e){return l[e]}),Sao.common.product(e).forEach(function(n){d.new_(!1).then(function(e){var i=jQuery.extend({},o);t.forEach(function(e,t){i[e]=n[t][0],i[e+".rec_name"]=n[t][1]}),e.set_default(i)})}),(e=this._sequence())&&d.group.set_sequence(e,d.new_position))}.bind(this);s()}.bind(this))}.bind(this))},open:function(e){return this.edit()},delete_:function(e){Sao.common.MODELACCESS.get(this.screen.model_name).delete&&this.screen.deletable&&this.screen.remove(!1,!1,!1)},undelete:function(e){this.screen.unremove()},previous:function(e){return this.validate().then(function(){return this.screen.display_previous()}.bind(this))},next:function(e){return this.validate().then(function(){return this.screen.display_next()}.bind(this))},switch_:function(e){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(){})}.bind(this))},key_press:function(e){var t;e.which==Sao.common.F3_KEYCODE?(this.new_(e),e.preventDefault()):e.which==Sao.common.F2_KEYCODE&&(this.add(e),e.preventDefault()),this.attributes.add_remove&&(t=[Sao.common.TAB_KEYCODE],this.wid_completion||t.push(Sao.common.RETURN_KEYCODE),~t.indexOf(e.which)&&this.wid_text.val()&&this.add(e))},record_label:function(e){this._position=e[0],this._length=e[1];e=e[0]+" / "+e[1];this.label.text(e).attr("title",e),this._set_button_sensitive()},validate:function(){var t=jQuery.Deferred();this.view.set_value();var e,i=this.screen.current_record;return i?(e=this.screen.current_view.get_fields(),i.validate(e).then(function(e){return e?this.screen.pre_validate?i.pre_validate().then(function(e){e?t.resolve():t.reject()}):void t.resolve():(this.screen.display(!0),void t.reject())}.bind(this))):t.resolve(),t},set_value:function(){this.screen.save_tree_state()},_update_completion:function(e){if(this.record){var t=this.attributes.relation,i=[i=this.field.get_domain(this.record),this.record.expr_eval(this.attributes.add_remove)],n=this.field.get_removed_ids(this.record);return Sao.common.update_completion(this.wid_text,this.record,this.field,t,i=["OR",i,["id","in",n]])}},_completion_match_selected:function(e){this.screen.group.load([e.id],!0),this.wid_text.val("")},_completion_action_activated:function(e){"search"==e?this.add():"create"==e&&this.new_()}}),Sao.View.Form.Many2Many=Sao.class_(Sao.View.Form.Widget,{class_:"form-many2many",expand:!0,init:function(e,t){Sao.View.Form.Many2Many._super.init.call(this,e,t),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:t.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 i=jQuery("<div/>",{class:this.class_+"-toolbar"});this.menu.append(i);e=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(i);this.entry=jQuery("<input/>",{type:"text",class:"form-control input-sm mousetrap",name:t.name}).appendTo(e),this.entry.on("keydown",this.key_press.bind(this)),t.completion&&"1"!=t.completion||(Sao.common.get_completion(e,this._update_completion.bind(this),this._completion_match_selected.bind(this),this._completion_action_activated.bind(this)),this.wid_completion=!0);i=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(i),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(i),this.but_remove.click(this.remove.bind(this)),this.content=jQuery("<div/>",{class:this.class_+"-content panel-body"}),this.el.append(this.content);e=t.relation,i=jQuery.extend([],this.view.screen.breadcrumb);i.push(t.string||Sao.common.MODELNAME.get(e)),this.screen=new Sao.Screen(t.relation,{mode:["tree"],view_ids:(t.view_ids||"").split(","),views_preload:t.views||{},order:t.order,row_activate:this.activate.bind(this),readonly:!0,limit:null,breadcrumb:i}),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(e){Sao.View.Form.Many2Many._super.set_readonly.call(this,e),this._set_button_sensitive(),this._set_label_state()},set_required:function(e){this._required=e,this._set_label_state()},_set_label_state:function(){Sao.common.apply_label_attributes(this.title,this._readonly,this._required)},_set_button_sensitive:function(){var e,t=!1,i=this.record,n=this.field;i&&n&&(e=i.expr_eval(this.attributes.size),i=n.get_eval(i).length,t=null!=e&&e<=i&&0<=e),this.entry.prop("disabled",this._readonly),this.but_add.prop("disabled",this._readonly||t),this.but_remove.prop("disabled",this._readonly||0===this._position)},record_label:function(e){this._position=e[0],this._set_button_sensitive()},display:function(){Sao.View.Form.Many2Many._super.display.call(this),this.prm.done(function(){var e=this.record;if(!this.field)return this.screen.new_group(),this.screen.current_record=null,this.screen.group.parent=null,void this.screen.display();e=e.field_get_client(this.field_name);e!=this.screen.group&&this.screen.set_group(e),this.screen.display(),void 0!==this.attributes.height&&this.screen.current_view.el.find(".treeview,.list-form").first().css("min-height",this.attributes.height+"px").css("max-height",this.attributes.height+"px")}.bind(this))},focus:function(){this.entry.focus()},activate:function(){this.edit()},add:function(){var e=this.field.get_domain(this.record),t=this.record.expr_eval(this.attributes.add_remove);jQuery.isEmptyObject(t)||(e=[e,t]);var i=this.field.get_search_context(this.record),n=this.field.get_search_order(this.record),o=this.entry.val(),s=function(e){if(!jQuery.isEmptyObject(e)){for(var t=[],i=0,n=e.length;i<n;i++)t.push(e[i][0]);this.screen.group.load(t,!0),this.screen.display()}this.entry.val("")}.bind(this),t=new Sao.common.DomainParser;new Sao.Window.Search(this.attributes.relation,s,{sel_multi:!0,context:i,domain:e,order:n,view_ids:(this.attributes.view_ids||"").split(","),views_preload:this.attributes.views||{},new_:this.attributes.create,search_filter:t.quote(o),title:this.attributes.string})},remove:function(){this.screen.remove(!1,!0,!1)},key_press:function(e){var t=[Sao.common.TAB_KEYCODE];this.wid_completion||t.push(Sao.common.RETURN_KEYCODE),e.which==Sao.common.F3_KEYCODE?(this.new_(),e.preventDefault()):e.which==Sao.common.F2_KEYCODE?(this.add(),e.preventDefault()):~t.indexOf(e.which)&&this.entry.val()&&this.add()},_get_screen_form:function(){var e=this.field.get_domain(this.record),t=this.record.expr_eval(this.attributes.add_remove);jQuery.isEmptyObject(t)||(e=[e,t]);var i=this.field.get_context(this.record),t=(this.attributes.view_ids||"").split(",");return jQuery.isEmptyObject(t)||t.shift(),new Sao.Screen(this.attributes.relation,{domain:e,view_ids:t,mode:["form"],views_preload:this.attributes.views,context:i})},edit:function(){var t,e;jQuery.isEmptyObject(this.screen.current_record)||(t=this._get_screen_form(),e=function(e){e&&t.current_record.save().done(function(){this.screen.current_record.cancel()}.bind(this))}.bind(this),t.switch_view().done(function(){t.load([this.screen.current_record.id]),new Sao.Window.Form(t,e)}.bind(this)))},new_:function(){var t=this._get_screen_form(),e=function(e){e&&(e=t.current_record,this.screen.group.load([e.id],!0)),this.entry.val("")}.bind(this),i=this.entry.val();t.switch_view().done(function(){new Sao.Window.Form(t,e,{new_:!0,save_current:!0,rec_name:i})}.bind(this))},_update_completion:function(e){if(this.record){var t=this.attributes.relation,i=this.field.get_domain(this.record),n=this.record.expr_eval(this.attributes.add_remove);return jQuery.isEmptyObject(n)||(i=[i,n]),Sao.common.update_completion(this.entry,this.record,this.field,t,i)}},_completion_match_selected:function(e){this.screen.group.load([e.id],!0),this.entry.val("")},_completion_action_activated:function(e){"search"==e?this.add():"create"==e&&this.new_()}}),Sao.View.Form.BinaryMixin=Sao.class_(Sao.View.Form.Widget,{init:function(e,t){Sao.View.Form.BinaryMixin._super.init.call(this,e,t),this.filename=t.filename||null},toolbar:function(e){e=jQuery("<div/>",{class:e,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(e),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(e),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(e),this.but_clear.click(this.clear.bind(this)),e},get filename_field(){if(this.filename){var e=this.record;if(e)return e.model.fields[this.filename]}},update_buttons:function(e){e?(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 i=this.record,n=this.field,o=this.filename_field;Sao.common.get_input_data(this.input_select,function(e,t){n.set_client(i,e),o&&o.set_client(i,t)},!n.get_size)},open:function(){this.save_as()},save_as:function(){var e=this.field,t=this.record,t=e.get_data?e.get_data(t):jQuery.when(e.get(t));t.done(function(e){var t,i=this.filename_field;i&&(t=i.get(this.record)),Sao.common.download_file(e,t)}.bind(this))},clear:function(){this.input_select.val(null);var e=this.filename_field;e&&e.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(e,t){Sao.View.Form.Binary._super.init.call(this,e,t),this.el=jQuery("<div/>",{class:this.class_});e=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(this.el);this.size=jQuery("<input/>",{type:"input",class:"form-control input-sm",readonly:!0,name:t.name}).appendTo(e),this.filename&&t.filename_visible&&(this.text=jQuery("<input/>",{type:"input",class:"form-control input-sm"}).prependTo(e),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(e)),this.but_open.click(this.open.bind(this))),this.toolbar("input-group-btn").appendTo(e)},display:function(){Sao.View.Form.Binary._super.display.call(this);var e=this.record,t=this.field;if(!t)return this.text&&this.text.val(""),this.size.val(""),void this.but_save_as.hide();t=t.get_size?t.get_size(e):t.get(e).length,this.size.val(Sao.common.humanize(t)),this.text&&(this.text.val(this.filename_field.get(e)||""),t?this.but_open.parent().show():this.but_open.parent().hide()),this.update_buttons(Boolean(t))},key_press:function(e){var t=!this.text.prop("readonly");e.which==Sao.common.F3_KEYCODE&&t?(this.new_(),e.preventDefault()):e.which==Sao.common.F2_KEYCODE&&(this.open(),e.preventDefault())},set_value:function(){this.text&&this.filename_field.set_client(this.record,this.text.val()||"")},set_readonly:function(e){Sao.View.Form.Binary._super.set_readonly.call(this,e),this.but_select.prop("disabled",e),this.but_clear.prop("disabled",e),this.text&&this.text.prop("readonly",e)}}),Sao.View.Form.MultiSelection=Sao.class_(Sao.View.Form.Selection,{class_:"form-multiselection",expand:!0,init:function(e,t){this.nullable_widget=!1,Sao.View.Form.MultiSelection._super.init.call(this,e,t),this.select.prop("multiple",!0)},set_selection:function(e,t){Sao.View.Form.MultiSelection._super.set_selection.call(this,e,t);var i=this.attributes.help;i&&this.select.children().each(function(){var e=jQuery(this),t=e.attr("title");t&&e.attr("title",i+"\n"+t)})},get modified(){if(this.record&&this.field){var e=new Set(this.field.get_eval(this.record)),t=new Set(this.get_value());return!Sao.common.compare(t,e)}return!1},display_update_selection:function(){var t=this.record,i=this.field;this.update_selection(t,i,function(){var e=this.attributes.yexpand;(e=void 0===e?this.expand:e)||this.select.prop("size",this.select.children().length),i&&(e=(e=i.get_eval(t)).map(function(e){return JSON.stringify(e)}),this.select.val(e))}.bind(this))},get_value:function(){var e=this.select.val();return e?e.map(function(e){return JSON.parse(e)}):[]}}),Sao.View.Form.Image=Sao.class_(Sao.View.Form.BinaryMixin,{class_:"form-image",init:function(e,t){Sao.View.Form.Image._super.init.call(this,e,t),this.height=parseInt(t.height||100,10),this.width=parseInt(t.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");e=this.toolbar("btn-group");t.readonly||jQuery("<div/>",{class:"text-center"}).append(e).appendTo(this.el)},set_readonly:function(e){Sao.View.Form.Image._super.set_readonly.call(this,e),this.but_select.prop("disabled",e),this.but_clear.prop("disabled",e)},clear:function(){Sao.View.Form.Image._super.clear.call(this),this.update_img()},update_img:function(){var e,i=this.record;(e=!(e=i?i.field_get_client(this.field_name):e)||e>Sao.common.BIG_IMAGE_SIZE?jQuery.when(null):i.model.fields[this.field_name].get_data(i)).done(function(e){var t;i===this.record&&(t=e?(t=new Blob([e]),window.URL.createObjectURL(t)):null,this.image.attr("src",t),this.update_buttons(Boolean(e)))}.bind(this))},display:function(){Sao.View.Form.Image._super.display.call(this),this.update_img()}}),Sao.View.Form.Document=Sao.class_(Sao.View.Form.BinaryMixin,{class_:"form-document",expand:!0,init:function(e,t){Sao.View.Form.Document._super.init.call(this,e,t),this._blob_url=null,this.el=jQuery("<div/>",{class:this.class_}),this.object=jQuery("<object/>",{class:"center-block"}).appendTo(this.el),t.height&&this.object.css("height",parseInt(t.height,10)),t.width&&this.object.css("width",parseInt(t.width,10))},display:function(){var n;Sao.View.Form.Document._super.display.call(this);var o=this.record,e=o?o.model.fields[this.field_name].get_data(o):jQuery.when(null),t=this.filename_field;t&&(n=t.get_client(o)),e.done(function(e){var t,i;o===this.record&&(i=e?("application/octet-binary"==(t=Sao.common.guess_mimetype(n))&&(t=null),t=new Blob([e],{type:t}),window.URL.createObjectURL(t)):null,this.object.attr("data",i),this.object.get(0).onload=function(){window.URL.revokeObjectURL(i)})}.bind(this))}}),Sao.View.Form.URL=Sao.class_(Sao.View.Form.Char,{class_:"form-url",_type:"url",init:function(e,t){Sao.View.Form.URL._super.init.call(this,e,t),this.input.attr("type",this._type),this.button=this.labelled=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(){Sao.View.Form.URL._super.display.call(this);var e="",t=this.record;this.field;t&&(e=t.field_get_client(this.field_name)),this.set_url(e),t&this.attributes.icon&&(e=(e=this.attributes.icon)in t.model.fields?t.field_get_client(e):e,this.set_icon(e))},set_icon:function(e){Sao.common.ICONFACTORY.get_icon_url(e=e||"tryton-public").done(function(e){this.icon.attr("src",e)}.bind(this))},set_url:function(e){this.button.attr("href",e)},set_readonly:function(e){Sao.View.Form.URL._super.set_readonly.call(this,e),e?(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"))},set_invisible:function(e){Sao.View.Form.URL._super.set_invisible.call(this,e),e?this.input.attr("type",""):this.input.attr("type",this._type)}}),Sao.View.Form.Email=Sao.class_(Sao.View.Form.URL,{class_:"form-email",_type:"email",set_url:function(e){Sao.View.Form.Email._super.set_url.call(this,"mailto:"+e)}}),Sao.View.Form.CallTo=Sao.class_(Sao.View.Form.URL,{class_:"form-callto",set_url:function(e){Sao.View.Form.CallTo._super.set_url.call(this,"callto:"+e)}}),Sao.View.Form.SIP=Sao.class_(Sao.View.Form.URL,{class_:"form-sip",set_url:function(e){Sao.View.Form.SIP._super.set_url.call(this,"sip:"+e)}}),Sao.View.Form.HTML=Sao.class_(Sao.View.Form.Widget,{class_:"form-html",init:function(e,t){Sao.View.Form.HTML._super.init.call(this,e,t),Sao.View.Form.TranslateMixin.init.call(this),this.el=jQuery("<div/>",{class:this.class_}),this.button=jQuery("<a/>",{class:"btn btn-lnk",target:"_blank",rel:"noreferrer noopener"}).text(t.string).appendTo(this.el),t.translate&&((t=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button","aria-label":Sao.i18n.gettext("Translate")}).appendTo(this.el)).append(Sao.common.ICONFACTORY.get_icon_img("tryton-translate")),t.click(this.translate.bind(this)))},uri:function(e){var t,i=this.record;return!i||i.id<0?t="":(t="/"+i.model.session.database+"/ir/html/"+i.model.name+"/"+i.id+"/"+this.field_name,t+="?language="+encodeURIComponent(e||Sao.i18n.getlang()),t+="&title="+encodeURIComponent(Sao.config.title)),t},display:function(){Sao.View.Form.HTML._super.display.call(this),this.button.attr("href",this.uri())},set_readonly:function(e){Sao.View.Form.HTML._super.set_readonly.call(this,e),this.el.find("button").prop("disabled",e),e?this.el.find("a").hide():this.el.find("a").show()},translate_dialog:function(e){var t={};e.forEach(function(e){t[e.name]=e.code}),Sao.common.selection(Sao.i18n.gettext("Choose a language"),t).done(function(e){window.open(this.uri(e),"_blank","noreferrer,noopener")}.bind(this))}}),Sao.View.Form.ProgressBar=Sao.class_(Sao.View.Form.Widget,{class_:"form-char",init:function(e,t){Sao.View.Form.ProgressBar._super.init.call(this,e,t),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(){var e;Sao.View.Form.ProgressBar._super.display.call(this);var t=this.record,i=this.field,n=i?(e=i.get(t),(n=i.get_client(t,100))&&Sao.i18n.gettext("%1%",n)):(e=0,"");this.progressbar.attr("aria-valuenow",100*e),this.progressbar.css("width",100*e+"%"),this.progressbar.text(n)}}),Sao.View.Form.Dict=Sao.class_(Sao.View.Form.Widget,{class_:"form-dict",expand:!0,init:function(e,t){Sao.View.Form.Dict._super.init.call(this,e,t),this.schema_model=t.schema_model,this.fields={},this.rows={},this.el=jQuery("<div/>",{class:this.class_+" panel panel-default"});e=jQuery("<div/>",{class:this.class_+"-heading panel-heading"}).appendTo(this.el),e=jQuery("<label/>",{class:this.class_+"-string",text:t.string}).appendTo(e);e.uniqueId(),this.el.uniqueId(),this.el.attr("aria-labelledby",e.attr("id")),e.attr("for",this.el.attr("id"));e=jQuery("<div/>",{class:this.class_+"-body panel-body form-horizontal"}).appendTo(this.el);this.container=jQuery("<div/>",{class:this.class_+"-container"}).appendTo(e);e=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(jQuery("<div>",{class:"col-sm-10 col-sm-offset-2"}).appendTo(jQuery("<div/>",{class:"form-group"}).appendTo(e)));this.wid_text=jQuery("<input/>",{type:"text",class:"form-control input-sm",placeholder:Sao.i18n.gettext("Search"),name:t.name}).appendTo(e),t.completion&&"1"!=t.completion||(Sao.common.get_completion(e,this._update_completion.bind(this),this._completion_match_selected.bind(this)),this.wid_completion=!0),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(e)),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 e=this.field.get_context(this.record),t=this.wid_text.val(),i=this.field.get_domain(this.record),n=function(e){jQuery.isEmptyObject(e)||(e=e.map(function(e){return e[0]}),this.add_new_keys(e)),this.wid_text.val("")}.bind(this),o=new Sao.common.DomainParser;new Sao.Window.Search(this.schema_model,n,{sel_multi:!0,context:e,domain:i,new_:!1,search_filter:o.quote(t),title:this.attributes.string})},add_new_keys:function(e){this.field.add_new_keys(e,this.record).then(function(e){var t=!1;e.forEach(function(e){e in this.fields||(this.add_line(e),t||(this.fields[e].input.focus(),t=!0))}.bind(this))}.bind(this))},remove:function(e,t){void 0===t&&(t=!0),delete this.fields[e],this.rows[e].remove(),delete this.rows[e],t&&this.set_value(this.record,this.field)},set_value:function(){this.field.set_client(this.record,this.get_value())},get_value:function(){var e,t={};for(e in this.fields){var i=this.fields[e];t[e]=i.get_value()}return t},get modified(){if(this.record&&this.field){var e,t=this.field.get_client(this.record);for(e in this.fields)if(this.fields[e].modified(t))return!0}return!1},set_readonly:function(e){for(var t in Sao.View.Form.Dict._super.set_readonly.call(this,e),this._set_button_sensitive(),this.fields)this.fields[t].set_readonly(e);this.wid_text.prop("disabled",e)},_set_button_sensitive:function(){var e=this.attributes.create;void 0===e&&(e=!0);var t,i=this.attributes.delete;for(t in void 0===i&&(i=!0),this.but_add.prop("disabled",this._readonly||!e),this.fields)this.fields[t].button.prop("disabled",this._readonly||!i)},add_line:function(e){var t,i,n=this.field.keys[e];this.fields[e]=t=new(this.get_entries(n.type))(e,this),this.rows[e]=i=jQuery("<div/>",{class:"form-group"});n=n.string+Sao.i18n.gettext(":"),n=jQuery("<label/>",{text:n}).appendTo(jQuery("<div/>",{class:"dict-label col-sm-2 control-label"}).appendTo(i));t.el.addClass("col-sm-10").appendTo(i),n.uniqueId(),t.labelled.uniqueId(),t.labelled.attr("aria-labelledby",n.attr("id")),n.attr("for",t.labelled.attr("id")),t.button.click(function(){this.remove(e,!0)}.bind(this)),i.appendTo(this.container)},display:function(){Sao.View.Form.Dict._super.display.call(this);var e=this.record,l=this.field;if(l){var t,i=e?e.id:null;if(i!=this._record_id){for(t in this.fields)this.remove(t,!1);this._record_id=i}var d=l.get_client(e),i=Object.keys(d).filter(function(e){return!this.fields[e]}.bind(this)),e=jQuery.isEmptyObject(i)?jQuery.when():l.add_keys(i,e);e.then(function(){for(var e=Object.keys(d).filter(function(e){return l.keys[e]}).sort(function(e,t){e=l.keys[e].sequence,t=l.keys[t].sequence;return e<t?-1:t<e?1:0}),t=new Sao.PYSON.Decoder,i=new Sao.common.DomainInversion,n=0,o=e.length;n<o;n++){var s=e[n],r=d[s];this.fields[s]||this.add_line(s);var a=this.fields[s];a.set_value(r),a.set_readonly(this._readonly);r=t.decode(l.keys[s].domain||"null");null!==r&&(i.eval_domain(r,d)?a.el.removeClass("has-error"):a.el.addClass("has-error"))}var c=Object.keys(this.fields).filter(function(e){return!(e in d)});for(n=0,o=c.length;n<o;n++)s=c[n],this.remove(s,!1)}.bind(this)),this._set_button_sensitive()}},_update_completion:function(e){if(!this.wid_text.prop("disabled")&&this.record)return Sao.common.update_completion(this.wid_text,this.record,this.field,this.schema_model)},_completion_match_selected:function(e){this.add_new_keys([e.id]),this.wid_text.val("")},get_entries:function(e){switch(e){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"multiselection":return Sao.View.Form.Dict.MultiSelection;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}}}),Sao.View.Form.Dict.Entry=Sao.class_(Object,{class_:"dict-char",init:function(e,t){this.name=e,this.definition=t.field.keys[e],this.parent_widget=t,this.create_widget(),this.definition.help&&this.el.attr("title",this.definition.help)},create_widget:function(){this.el=jQuery("<div/>",{class:this.class_});var e=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",name:this.name}).appendTo(e),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(e)),this.el.change(this.parent_widget.focus_out.bind(this.parent_widget))},modified:function(e){return JSON.stringify(this.get_value())!=JSON.stringify(e[this.name])},get_value:function(){return this.input.val()},set_value:function(e){this.input.val(e||"")},set_readonly:function(e){this._readonly=e,this.input.prop("readonly",e)}}),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(e){this._readonly=e,this.input.prop("disabled",e)},set_value:function(e){this.input.prop("checked",e)}}),Sao.View.Form.Dict.SelectionEntry=Sao.class_(Sao.View.Form.Dict.Entry,{create_widget:function(){Sao.View.Form.Dict.SelectionEntry._super.create_widget.call(this);var t=jQuery("<select/>",{class:"form-control input-sm mousetrap",name:this.name});t.change(this.parent_widget.focus_out.bind(this.parent_widget)),this.input.replaceWith(t),this.input=this.labelled=t;var e=jQuery.extend([],this.definition.selection);void 0!==this.definition.sort&&!this.definition.sort||e.sort(function(e,t){return e[1].localeCompare(t[1])}),e.forEach(function(e){t.append(jQuery("<option/>",{value:JSON.stringify(e[0]),text:e[1],title:this.definition.help_selection[e[0]]}))}.bind(this))},set_readonly:function(e){this._readonly=e,this.input.prop("disabled",e)}}),Sao.View.Form.Dict.Selection=Sao.class_(Sao.View.Form.Dict.SelectionEntry,{class_:"dict-selection",create_widget:function(){Sao.View.Form.Dict.Selection._super.create_widget.call(this),this.input.prepend(jQuery("<option/>",{value:JSON.stringify(null),text:""}))},get_value:function(){return JSON.parse(this.input.val())},set_value:function(e){this.input.val(JSON.stringify(e));e=this.definition.help_selection[e]||null;this.definition.help&&e&&(e=this.definition.help+"\n"+e),this.input.attr("title",e)}}),Sao.View.Form.Dict.MultiSelection=Sao.class_(Sao.View.Form.Dict.SelectionEntry,{class_:"dict-multiselection",create_widget:function(){Sao.View.Form.Dict.MultiSelection._super.create_widget.call(this),this.input.prop("multiple",!0);var i=this.definition.help;i&&this.input.children().each(function(){var e=jQuery(this),t=e.attr("title");t&&e.attr("title",i+"\n"+t)})},get_value:function(){return this.input.val().map(function(e){return JSON.parse(e)})},set_value:function(e){e=e.map(function(e){return JSON.stringify(e)}),this.input.val(e)}}),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_text=this.labelled=n(this.input)},get_value:function(){var e=parseInt(this.input.val(),10);return isNaN(e)?null:e},set_value:function(e,t){null!==e?(this.input.val(e),this.input_text.val(e.toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),t))):(this.input.val(""),this.input_text.val(""))},set_readonly:function(e){Sao.View.Form.Dict.Integer._super.set_readonly.call(this,e),this.input_text.prop("readonly",e)}}),Sao.View.Form.Dict.Float=Sao.class_(Sao.View.Form.Dict.Integer,{class_:"dict-float",get digits(){var e=this.parent_widget.record;if(e){e=e.expr_eval(this.definition.digits);if(e&&e.every(function(e){return null!==e}))return e}},get_value:function(){var e=Number(this.input.val());return isNaN(e)?null:e},set_value:function(e){var t="any",i={},n=this.digits;n&&(t=Math.pow(10,-n[1]).toFixed(n[1]),i.minimumFractionDigits=n[1],i.maximumFractionDigits=n[1]),this.input.attr("step",t),Sao.View.Form.Dict.Float._super.set_value.call(this,e,i)}}),Sao.View.Form.Dict.Numeric=Sao.class_(Sao.View.Form.Dict.Float,{class_:"dict-numeric",get_value:function(){var e=new Sao.Decimal(this.input.val());return isNaN(e.valueOf())?null:e}}),Sao.View.Form.Dict.Date=Sao.class_(Sao.View.Form.Dict.Entry,{class_:"dict-date",format:"%x",_input:"date",_input_format:"%Y-%m-%d",_format:Sao.common.format_date,_parse:Sao.common.parse_date,create_widget:function(){Sao.View.Form.Dict.Date._super.create_widget.call(this);var e=this.input.parent().find(".input-group-btn");this.input_date=jQuery("<input/>",{type:this._input,role:"button",tabindex:-1}),this.input_date.click(function(){var e=this.get_value(),e=this._format(this._input_format,e);this.input_date.val(e)}.bind(this)),this.input_date.change(function(){var e=this.input_date.val();e&&(e=this._parse(this._input_format,e),e=this._format(this.format,e),this.input.val(e).change(),this.input.focus())}.bind(this)),this.input_date[0].type==this._input&&(e=jQuery("<div/>",{class:"btn btn-default","aria-label":Sao.i18n.gettext("Open the calendar"),title:Sao.i18n.gettext("Open the calendar")}).prependTo(e),this.input_date.appendTo(e),Sao.common.ICONFACTORY.get_icon_img("tryton-date").appendTo(e));var t=new Mousetrap(this.el[0]);t.bind("enter",function(e,t){var i=this._parse(this.format,this.input.val()),i=this._format(this.format,i);this.input.val(i).change()}.bind(this)),t.bind("=",function(e,t){e.preventDefault(),this.input.val(this._format(this.format,moment())).change()}.bind(this)),Sao.common.DATE_OPERATORS.forEach(function(i){t.bind(i[0],function(e,t){e.preventDefault();e=this.get_value()||Sao.DateTime();e.add(i[1]),this.input.val(this._format(this.format,e)).change()}.bind(this))}.bind(this))},get_value:function(){return this._parse(this.format,this.input.val())},set_value:function(e){this.input.val(this._format(this.format,e))}}),Sao.View.Form.Dict.DateTime=Sao.class_(Sao.View.Form.Dict.Date,{class_:"dict-datetime",format:"%x %X",_input:"datetime-local",_input_format:"%Y-%m-%dT%H:%M:%S",_format:Sao.common.format_datetime,_parse:Sao.common.parse_datetime}),Sao.View.Form.PYSON=Sao.class_(Sao.View.Form.Char,{class_:"form-pyson",init:function(e,t){Sao.View.Form.PYSON._super.init.call(this,e,t),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(){Sao.View.Form.PYSON._super.display.call(this),this.validate_pyson()},get_encoded_value:function(){var e=this.input.val();if(!e)return e;try{return this.encoder.encode(eval_pyson(e))}catch(e){return null}},set_value:function(){var e=this.get_encoded_value(),t=this.record,i=this.field,n=i.get_client(t);e&&n&&Sao.common.compare(e,this.encoder.encode(this.decoder.decode(n)))&&(e=n),i.set_client(t,e)},get_client_value:function(){var e=Sao.View.Form.PYSON._super.get_client_value.call(this);return e=e&&Sao.PYSON.toString(this.decoder.decode(e))},validate_pyson:function(){var e="ok";null===this.get_encoded_value()&&(e="error"),Sao.common.ICONFACTORY.get_icon_url("tryton-"+e).then(function(e){this.icon.attr("src",e)}.bind(this))},focus_out:function(){this.validate_pyson(),Sao.View.Form.PYSON._super.focus_out.call(this)}}),Sao.View.FormXMLViewParser.WIDGETS={biginteger:Sao.View.Form.Integer,binary:Sao.View.Form.Binary,boolean:Sao.View.Form.Boolean,callto:Sao.View.Form.CallTo,char:Sao.View.Form.Char,date:Sao.View.Form.Date,datetime:Sao.View.Form.DateTime,dict:Sao.View.Form.Dict,document:Sao.View.Form.Document,email:Sao.View.Form.Email,float:Sao.View.Form.Float,html:Sao.View.Form.HTML,image:Sao.View.Form.Image,integer:Sao.View.Form.Integer,many2many:Sao.View.Form.Many2Many,many2one:Sao.View.Form.Many2One,multiselection:Sao.View.Form.MultiSelection,numeric:Sao.View.Form.Float,one2many:Sao.View.Form.One2Many,one2one:Sao.View.Form.One2One,password:Sao.View.Form.Password,progressbar:Sao.View.Form.ProgressBar,pyson:Sao.View.Form.PYSON,reference:Sao.View.Form.Reference,richtext:Sao.View.Form.RichText,selection:Sao.View.Form.Selection,sip:Sao.View.Form.SIP,text:Sao.View.Form.Text,time:Sao.View.Form.Time,timedelta:Sao.View.Form.TimeDelta,timestamp:Sao.View.Form.DateTime,url:Sao.View.Form.URL}}(),function(){"use strict";var n;function u(e){var t,i,n,o="";e.parents(".form").length||e.parents("#menu").length||(t="100vh",e.parents(".modal-body").length&&(t=e.parents(".modal-body").css("max-height")),i=" ",e.parents(".panel-body").each(function(e,t){t=jQuery(t),i+="- "+t.css("padding-top"),i+=" - "+t.css("padding-bottom")}),n=" ",e.parents(".panel").each(function(e,t){t=(t=jQuery(t)).css("box-shadow").match(/\d+px/g);t&&t.length&&(t=t.map(function(e){return e.replace("px","")}),n+="- "+Math.max.apply(null,t)+"px")}),o="calc("+t+" - "+e[0].getBoundingClientRect().y+"px"+i+n+")"),e.css("height",o)}function i(n,o,s){var r=jQuery.Deferred(),a=0,c=function(){for(;a<n.length;a++){var e=n[a],t=e.record,i=e.tree.columns[0];if(!t.is_loaded(i.attributes.name))return void t.load(i.attributes.name).done(c);e.redraw(o,s)}r.resolve()};return c(),r.promise()}"IntersectionObserver"in window&&(n=new IntersectionObserver(function(e,t){e.forEach(function(e){e.isIntersecting&&jQuery(e.target).trigger("click")})},{rootMargin:"0px 0px 50px 0px"})),jQuery(window).resize(function(){jQuery(".treeview").each(function(e,t){u(jQuery(t))})}),Sao.View.TreeXMLViewParser=Sao.class_(Sao.View.XMLViewParser,{_parse_tree:function(e,t){[].forEach.call(e.childNodes,function(e){this.parse(e)}.bind(this))},_parse_field:function(e,t){var i=t.name,n=new Sao.View.TreeXMLViewParser.WIDGETS[t.widget](this.view.screen.model,t);this.view.widgets[i]||(this.view.widgets[i]=[]),n.tree=this.view,this.view.widgets[i].push(n);"symbol"in t&&n.suffixes.push(new Sao.View.Tree.Symbol(t,1)),~["url","email","callto","sip"].indexOf(t.widget)&&n.prefixes.push(new Sao.View.Tree.Affix(t,t.widget)),"icon"in t&&n.prefixes.push(new Sao.View.Tree.Affix(t));for(var o=e.childNodes,s=0;s<o.length;s++){for(var r,a={},c=0,l=(r=o[s]).attributes.length;c<l;c++){var d=r.attributes[c];a[d.name]=d.value}a.name||(a.name=i),("prefix"==r.tagName?n.prefixes:n.suffixes).push(new Sao.View.Tree.Affix(a))}"symbol"in t&&n.prefixes.push(new Sao.View.Tree.Symbol(t,0)),this.view.attributes.sequence||this.view.children_field||!1===this.field_attrs[i].sortable||(n.sortable=!0),this.view.columns.push(n),t.sum&&(e=t.sum+Sao.i18n.gettext(": "),t=jQuery("<label/>",{text:e}),e=jQuery("<span/>",{class:"value"}),this.view.sum_widgets.set(n,[t,e]))},_parse_button:function(e,t){t=new Sao.View.Tree.ButtonColumn(this.view,t);this.view.columns.push(t)}}),Sao.View.Tree=Sao.class_(Sao.View,{view_type:"tree",xml_parser:Sao.View.TreeXMLViewParser,draggable:!1,display_size:Sao.config.display_size,init:function(e,t,i,n){this.children_field=n,this.sum_widgets=new Map,this.columns=[],this.selection_mode=t.attributes.selection_mode||Sao.common.SELECTION_MULTIPLE,this.el=jQuery("<div/>"),this.scrollbar=jQuery("<div/>").appendTo(jQuery("<div/>",{class:"scrollbar responsive"}).appendTo(this.el)),this.treeview=jQuery("<div/>",{class:"treeview responsive"}).appendTo(this.el),this.treeview.scroll(function(){this.scrollbar.parent().scrollLeft(this.treeview.scrollLeft())}.bind(this)),this.scrollbar.parent().scroll(function(){this.treeview.scrollLeft(this.scrollbar.parent().scrollLeft())}.bind(this)),this.expanded=new Set,Sao.View.Tree._super.init.call(this,e,t,i),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.treeview.append(this.table),this.colgroup=jQuery("<colgroup/>").appendTo(this.table);var o=jQuery("<col/>",{class:"selection-state"}).appendTo(this.colgroup);this.selection_mode==Sao.common.SELECTION_NONE&&o.css("width",0),this.thead=jQuery("<thead/>").appendTo(this.table);var s,r=jQuery("<tr/>"),a=jQuery("<th/>",{class:"selection-state"});this.selection=jQuery("<input/>",{type:"checkbox"}),this.selection.change(this.selection_changed.bind(this)),a.append(this.selection),r.append(a),this.thead.append(r),this.tfoot=null,this.sum_widgets.size&&((s=jQuery("<tr/>")).append(jQuery("<th/>")),this.tfoot=jQuery("<tfoot/>"),this.tfoot.append(s),this.table.append(this.tfoot)),this.columns.forEach(function(e){o=jQuery("<col/>",{class:e.attributes.widget}).appendTo(this.colgroup),a=jQuery("<th/>",{class:e.attributes.widget});var t,i,n=jQuery("<label/>").text(e.attributes.string).attr("title",e.attributes.string);this.editable&&(e.attributes.required&&n.addClass("required"),e.attributes.readonly||n.addClass("editable")),e.attributes.help&&n.attr("title",e.attributes.help),e.sortable&&(i=jQuery("<img/>",{class:"icon"}),n.append(i),e.arrow=i,a.click(e,this.sort_model.bind(this)),n.addClass("sortable")),r.append(a.append(n)),e.header=a,e.col=o,e.footers=[],this.sum_widgets.size&&(e.attributes.name,t=jQuery("<th/>",{class:e.class_}),this.sum_widgets.has(e)&&(i=this.sum_widgets.get(e)[0],n=this.sum_widgets.get(e)[1],t.append(i),t.append(n)),s.append(t),e.footers.push(t))},this),this.tbody=jQuery("<tbody/>"),this.table.append(this.tbody),this.set_drag_and_drop()},reset:function(){this.display_size=Sao.config.display_size},get editable(){return parseInt(this.attributes.editable||0,10)&&!this.screen.attributes.readonly},sort_model:function(e){var t=e.data,i=t.arrow;this.columns.forEach(function(e){e.arrow&&e!=t&&e.arrow.attr("src")&&e.arrow.attr("src","")}),this.screen.order=this.screen.default_order,"ASC"==i.data("order")?(i.data("order","DESC"),Sao.common.ICONFACTORY.get_icon_url("tryton-arrow-up").then(function(e){i.attr("src",e)}),this.screen.order=[[t.attributes.name,"DESC"]]):"DESC"==i.data("order")?(i.data("order",""),i.attr("src","")):(i.data("order","ASC"),Sao.common.ICONFACTORY.get_icon_url("tryton-arrow-down").then(function(e){i.attr("src",e)}),this.screen.order=[[t.attributes.name,"ASC"]]);var n=[];this.group.forEach(function(e){e.id<0&&(n=e.group)});e=this.screen.screen_container.get_text();!jQuery.isEmptyObject(n)||this.screen.search_count==this.group.length||this.group.parent?this.screen.search_filter(e,!0).then(function(i){this.group.sort(function(e,t){return(e=(e=i.indexOf(e.id))<0?i.length:e)<(t=(t=i.indexOf(t.id))<0?i.length:t)?-1:t<e?1:0}),this.screen.display()}.bind(this)):this.screen.search_filter(e)},update_arrow:function(){var e=this.screen.order,i=null,n=null,o="";e&&1==e.length&&(i=e[0][0],(n=e[0][1])&&(n=n.trim().split(" ",1)[0],o={ASC:"tryton-arrow-down",DESC:"tryton-arrow-up"}[n])),this.columns.forEach(function(e){var t=e.arrow;t&&(e.attributes.name!=i?(t.data("order",""),t.attr("src","")):(t.data("order",n),Sao.common.ICONFACTORY.get_icon_url(o).then(function(e){t.attr("src",e)})))})},_add_drag_n_drop:function(){Sortable.create(this.tbody[0],{handle:".draggable-handle",ghostClass:"dragged-row"}),this.tbody.on("dragstart",this.drag_data_get.bind(this)),this.tbody.on("drop",this.drag_data_received.bind(this))},set_drag_and_drop:function(){var e,t=!1;this.children_field?(e=this.screen.model.fields[this.children_field])&&(e=e.description.relation_field,t=Boolean(this.widgets[e])):this.attributes.sequence&&(t=!0),this.screen.readonly&&(t=!1),(this.draggable=t)&&(this.colgroup.prepend(jQuery("<col/>",{class:"draggable-handle"})),this.thead.children().prepend(jQuery("<th/>",{class:"draggable-handle"})),this._add_drag_n_drop())},drag_data_get:function(t){var i=0,n=[],o=function(e){e.el[0]===t.target&&(t.originalEvent.dataTransfer.setData("path",e.path),t.originalEvent.dataTransfer.setData("position",i)),0===e.rows.length&&n.push(e),i+=1,e.rows.forEach(o.bind(this))};this.rows.forEach(o.bind(this))},drag_data_received:function(e){var t=e.originalEvent.dataTransfer,i=t.getData("path").split(".");if(0!==i.length){for(var s=this;0<i.length;)s=s.rows[i[0]],i=i.slice(1);var n,r,a=s.record,c=null;r=(e.ctrlKey||e.metaKey)&&this.children_field?((c=this._find_row(s.el.prev()))||this).rows.length:e.shiftKey?(n=this._find_row(s.el.prev()))?((c=n.parent_)||this).rows.indexOf(n)+1:(c=null,0):(n=this._find_row(s.el.next()))?((c=n.parent_)||this).rows.indexOf(n):(c=null,this.rows.length);for(var o,l,d,h,u=c;u&&u!=s;)u=u.parent_;u?(t=t.getData("position"),jQuery(this.tbody.children()[t]).before(s.el)):(l=function(e){o.el.after(e.el),(o=e).rows.forEach(l)},(o=s).rows.forEach(l),d=a.group,h=s.group_position,(c?c.record.children_group(this.children_field):jQuery.Deferred().resolve(this.group)).then(function(e){var t=(s.parent_||this).rows,i=(c||this).rows;d===e?(h<r&&--r,d.splice(h,1),d.splice(r,0,a),d.changed()):(d.remove(a,!0,!0,!0),d.record_removed.splice(d.record_removed.indexOf(a)),e.add(a,r),a.parent_name?a._changed[d.parent_name]=!0:(a._changed[d.parent_name]=!0,a._values[d.parent_name]=null)),i.splice(r,0,s),t.splice(h,1),s.parent_=c,s.record.group=e,i.slice(r).forEach(function(e){e.reset_path()}),t.slice(h).forEach(function(e){e.reset_path()});var n=this.get_selected_paths();s.redraw(n);var o=function(e){e.redraw(n),e.rows.forEach(o)};s.rows.forEach(o),this.attributes.sequence&&s.record.group.set_sequence(this.attributes.sequence,this.screen.new_position)}.bind(this)))}},get_fields:function(){return Object.keys(this.widgets)},get_buttons:function(){var t=[];return this.columns.forEach(function(e){e instanceof Sao.View.Tree.ButtonColumn&&t.push(e)}),t},display:function(t,r){u(this.treeview);this.tbody;var e,i=this.record;jQuery.isEmptyObject(t)&&(t=this.get_selected_paths(),this.selection.prop("checked")&&!this.selection.prop("indeterminate")?this.screen.group.slice(this.rows.length,this.display_size).forEach(function(e){t.push([e.id])}):i?(e=(e=i.get_path(this.group)).map(function(e){return e[1]}),Sao.common.contains(t,e)||(t=[e])):i||(t=[])),r=r||this.get_expanded_paths(),this.selection_mode==Sao.common.SELECTION_MULTIPLE?this.selection.show():this.selection.hide();var a=function(e,t){for(var i=[],n=0;n<e.length;n++){var o=e[n];i.push(o);var s=t.concat([o.id]);Sao.common.contains(r,s)&&(o=o.field_get_client(this.children_field),Array.prototype.push.apply(i,a(o,s)))}return i}.bind(this),o=function(e){for(var t=[],i=0;i<e.length;i++){var n=e[i];t.push(n.record),n.is_expanded()&&Array.prototype.push.apply(t,o(n.rows))}return t}.bind(this),i=Math.min(this.group.length,this.display_size);this.children_field?Sao.common.compare(a(this.group.slice(0,i),[]),o(this.rows))||this.construct():i>this.rows.length&&Sao.common.compare(this.group.slice(0,this.rows.length),o(this.rows))?this.construct(!0):i==this.rows.length&&Sao.common.compare(this.group.slice(0,this.rows.length),o(this.rows))||this.construct();var s=1,c=[];jQuery.isEmptyObject(this.screen.domain)||c.push(this.screen.domain);i=this.screen.screen_container.get_tab_domain();jQuery.isEmptyObject(i)||c.push(i);var l=new Sao.common.DomainInversion,c=l.simplify(c),d=new Sao.PYSON.Decoder(this.screen.context),h=[];return this.columns.forEach(function(e){s+=1;var t,i,n,o=e.attributes.name;o&&((n=e.footers.slice()).push(e.header),d.decode(e.attributes.tree_invisible||"0")||o===this.screen.exclude_field?(--s,n.forEach(function(e){e.hide(),e.addClass("invisible")})):("boolean"!=typeof(o=l.domain_inversion(c,o))&&(o=l.simplify(o)),l.unique_value(o)[0]&&jQuery.isEmptyObject(this.children_field)?(--s,n.forEach(function(e){e.hide(),e.addClass("invisible")})):n.forEach(function(e){e.show(),e.removeClass("invisible")})),e.header.hasClass("invisible")?(e.col.css("width",0),e.col.hide()):e.col.hasClass("draggable-handle")||e.col.hasClass("selection-state")||e.col.hasClass("favorite")||(e.attributes.width?(t=i=e.attributes.width,h.push(t+"px")):(t={integer:8,biginteger:8,selection:9,reference:20,one2many:5,many2many:5,boolean:3,binary:20}[e.attributes.widget]||10,e.attributes.symbol&&(t+=2),n=1,e.attributes.expand&&(n+=parseInt(e.attributes.expand,10)),i=100*t*n+"%",h.push(t+"em")),e.col.css("width",i),e.col.show()))}.bind(this)),this.table.css("min-width","calc("+h.join(" + ")+")"),this.scrollbar.css("min-width",this.table.css("min-width")),!this.table.hasClass("no-responsive")&1<this.columns.filter(function(e){return!e.header.hasClass("invisible")}).length?(this.table.addClass("responsive"),this.table.addClass("responsive-header")):(this.table.removeClass("responsive"),this.table.removeClass("responsive-header")),this.update_arrow(),this.redraw(t,r).then(function(){var e,t,i=this.table.children("tbody");i.length?i!==this.tbody&&i.replaceWith(this.tbody):this.table.append(this.tbody),this.tbody.append(this.rows.filter(function(e){return!e.el.parent().length}).map(function(e){return e.el})),this.display_size<this.group.length&&(e=jQuery("<tr/>",{class:"more-row"}),t=jQuery("<td/>",{colspan:s}),i=jQuery("<button/>",{class:"btn btn-default btn-block",type:"button"}).text(Sao.i18n.gettext("More")).click(function(){this.display_size+=Sao.config.display_size,this.display()}.bind(this)),t.append(i),e.append(t),this.tbody.append(e),n&&n.observe(i[0]))}.bind(this)).done(Sao.common.debounce(this.update_sum.bind(this),250))},construct:function(e){e?this.tbody.find("tr.more-row").remove():(this.rows=[],this.tbody=jQuery("<tbody/>"),this.draggable&&this._add_drag_n_drop(),this.edited_row=null);this.group.slice(this.rows.length,this.display_size).forEach(function(e,t,i){var n=this.editable?Sao.View.Tree.RowEditable:Sao.View.Tree.Row;this.rows.push(new n(this,e,this.rows.length))}.bind(this))},redraw:function(e,t){return i(this.rows,e,t)},switch_:function(e){this.screen.row_activate()},select_changed:function(e){this.edited_row&&(e=this.edited_row.record,this.edited_row.set_selection(!0)),this.record=e},update_sum:function(){this.sum_widgets.forEach(function(e,t){for(var i,n=t.attributes.name,o=this.selected_records,s="-",t=e[0],e=e[1],r=null,a=null,c=!0,l=0,d=this.screen.model.fields[n],h=o.map(function(e){return e.id}),u=0;u<this.group.length;u++){if(!(_=this.group[u]).get_loaded([n])&&0<=_.id){c=!1;break}var _,m=d.get(_);null!==(m=m&&m.isTimeDelta?m.asSeconds():m)&&(null===r?r=m:r+=m,!~h.indexOf(_.id)&&o||(null===a?a=m:a+=m),d.digits&&(l=(_=d.digits(_))&&null!==l?Math.max(_[1],l):null))}c&&("timedelta"==d.description.type?(i=d.converter(this.group),a=Sao.common.timedelta.format(Sao.TimeDelta(null,a),i),r=Sao.common.timedelta.format(Sao.TimeDelta(null,r),i)):null!==l&&((i={}).minimumFractionDigits=l,i.maximumFractionDigits=l,a=(a||0).toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),i),r=(r||0).toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),i)),s=a+" / "+r),e.text(s),e.parent().attr("title",t.text()+" "+e.text())}.bind(this))},get selected_records(){if(this.selection_mode==Sao.common.SELECTION_NONE)return[];var t=[],i=function(e){e.is_selected()&&t.push(e.record),e.rows.forEach(i)};return this.rows.forEach(i),this.selection.prop("checked")&&!this.selection.prop("indeterminate")&&this.group.slice(this.rows.length).forEach(function(e){t.push(e)}),t},get listed_records(){if(!this.children_field)return this.group.slice();var c=function(e){for(var t=[],i=((r=this.find_row(e))||this).rows,n=0,o=this.n_children(r);n<o;n++){var s,r,a=e.concat([n]);(r=i[n])&&(s=r.record,t.push(s),r.is_expanded()&&(t=t.concat(c(a))))}return t}.bind(this);return c([]).concat(this.group.slice(this.rows.length))},get_listed_paths:function(){if(!this.children_field)return this.group.map(function(e){return[e.id]});var l=function(e,t){for(var i=[],n=((a=this.find_row(e))||this).rows,o=0,s=this.n_children(a);o<s;o++){var r,a,c=e.concat([o]);(a=n[o])&&(r=a.record,r=t.concat([r.id]),i.push(r),a.is_expanded()&&(i=i.concat(l(c,r))))}return i}.bind(this);return l([],[]).concat(this.group.slice(this.rows.length).map(function(e){return[e.id]}))},select_records:function(i,n){if((i=!i&&n?this.rows[0].record:i)&&n){for(var e,t=i.get_index_path(this.screen.group),o=n.get_index_path(this.screen.group),s=Math.min(t.length,o.length),r=0;r<s;r++)if(t[r]>o[r]){e=i,i=n,n=e;break}!e&&t.length>o.length&&(e=i,i=n,n=e)}var a=this.rows[0].record===i,c=function(e){var t=e.record;t===i&&(a=!0),e.set_selection(a),t===n&&(a=!1),e.rows.forEach(c)};this.rows.forEach(c)},selection_changed:function(){var t=this.selection.prop("checked"),i=function(e){e.set_selection(t),e.rows.forEach(i)};this.rows.forEach(i),t&&this.rows[0]?this.select_changed(this.rows[0].record):this.select_changed(null),this.update_sum()},update_selection:function(){this.update_sum();var e=this.selected_records;this.selection.prop("indeterminate",!1),jQuery.isEmptyObject(e)?this.selection.prop("checked",!1):(e.length==this.tbody.children().length&&this.display_size>=this.group.length||this.selection.prop("indeterminate",!0),this.selection.prop("checked",!0))},get_selected_paths:function(){var a=[];return function e(t,i){for(var n,o,s=0,r=t.rows.length;s<r;s++)n=t.rows[s],o=i.concat([n.record.id]),n.is_selected()&&a.push(o),e(n,o)}(this,[]),a},get_expanded_paths:function(e,t){var i,n;void 0===t&&(t=[]);for(var o,s=[],r=((o=this.find_row(e=void 0===e?[]:e))||this).rows,a=0,c=this.n_children(o);a<c;a++)n=e.concat([a]),(o=r[a])&&o.is_expanded()&&(i=t.concat(o.record.id),s.push(i),s=s.concat(this.get_expanded_paths(n,i)));return s},find_row:function(e){for(var t,i=null,n=this.rows,o=0,s=e.length;o<s;o++){if(t=e[o],!n||t>=n.length)return null;if(n=(i=n[t]).rows,!this.children_field)break}return i},n_children:function(e){return(e&&this.children_field?e.record._values[this.children_field]:this.rows).length},set_cursor:function(e,t){var i,n,o,s,r;this.record&&(i=this.record.get_index_path(this.group),this.rows.length<=i[0]&&(this.display_size=this.group.length,this.display()),1<i.length&&(s=this.rows[i[0]].expand_to_path(i.slice(1),[this.record.get_path(this.group).map(function(e){return e[1]})])),r=function(){(o=this.find_row(i))&&null!==(n=o.next_column(null,e))&&(o=o._get_column_td(n),this.editable&&e&&o.trigger("click"),o.find(":input,[tabindex=0]").focus())}.bind(this),s?s.then(r):r())},save_row:function(){var e,t=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(e=this.group.parent?this.screen.attributes.pre_validate?this.record.pre_validate():jQuery.when():this.edited_row.record.save()).fail(function(){this.edited_row!=t&&(this.edit_row(null),t.set_selection(!0),t.selection_changed(),this.edit_row(t))}.bind(this)),e;for(var i=!1,n=this.edited_row.record.invalid_fields(),o=0;o<this.columns.length;o++){var s,r=this.columns[o];r.attributes.name in n&&(s=this.edited_row._get_column_td(o),(s=this.edited_row.get_editable_el(s).data("widget")).display(this.edited_row.record,r.field),i||(s.focus(),i=!0))}},edit_row:function(e){this.editable&&this.edited_row!=e&&(this.edited_row&&this.edited_row.unset_editable(),e&&e.set_editable(),this.edited_row=e)},_find_row:function(t){var i=null,n=function(e){e.el[0]!=t[0]?e.rows.forEach(n):i=e};return this.rows.forEach(n),i}}),Sao.View.Tree.Row=Sao.class_(Object,{init:function(e,t,i,n){this.tree=e,this.current_column=null,this.rows=[],this.record=t,this.parent_=n,this.children_field=e.children_field,this.expander=null,this._group_position=null,this._path=null,this._drawed_record=null,this.el=jQuery("<tr/>"),this.el.on("click",this.select_row.bind(this)),this._construct()},get group_position(){return null===this._group_position&&(this._group_position=this.record.group.indexOf(this.record)),this._group_position},get path(){var e;return this._path||((e=this.parent_?jQuery.extend([],this.parent_.path.split(".")):[]).push(this.group_position),this._path=e.join(".")),this._path},reset_path:function(){this._group_position=null,this._path=null;for(var e=0;e<this.rows.length;e++)this.rows[e].reset_path()},is_expanded:function(){return this.tree.expanded.has(this)},get_id_path:function(){return this.parent_?this.parent_.get_id_path().concat([this.record.id]):[this.record.id]},_construct:function(){this.tree.el.uniqueId(),this.tree.draggable&&((i=jQuery("<td/>",{class:"draggable-handle"})).append(Sao.common.ICONFACTORY.get_icon_img("tryton-drag")),this.el.append(i)),i=jQuery("<td/>",{class:"selection-state"}).click(function(e){e.stopPropagation(),this.selection.click()}.bind(this)),this.el.append(i),this.selection=jQuery("<input/>",{type:"checkbox",name:"tree-selection-"+this.tree.el.attr("id")}),this.selection.click(function(e){e.stopPropagation()}),this.selection.change(this.selection_changed.bind(this)),i.append(this.selection);var e=function(e){this.expander&&!this.is_expanded()&&this.tree.n_children(this)<=Sao.config.limit&&this.toggle_row(),this.select_column(e.data.index)}.bind(this);this.children_field&&(this.expander=jQuery("<span/>",{class:"expander"}).append("<img/>",{tabindex:0,class:"icon"}),this.expander.children().html(" "),this.expander.on("click keypress",Sao.common.click_press(this.toggle_row.bind(this))));for(var t=0;t<this.tree.columns.length;t++){var i,n=this.tree.columns[t];(i=n instanceof Sao.View.Tree.ButtonColumn?jQuery("<td>"):jQuery("<td/>",{"data-title":n.attributes.string+Sao.i18n.gettext(": ")}).append(jQuery("<span/>",{"aria-hidden":!0}))).on("click keypress",{index:t},e),this.tree.editable?(n.attributes.required&&i.addClass("required"),n.attributes.readonly||i.addClass("editable")):i.dblclick(this.switch_row.bind(this));var o,s=jQuery("<div>",{class:"cell"});if(i.append(s),n.prefixes)for(o=0;o<n.prefixes.length;o++){n.prefixes[o];s.append(jQuery("<span/>",{class:"prefix"}))}if(s.append(jQuery("<span/>",{class:"widget"})),n.suffixes)for(o=0;o<n.suffixes.length;o++){n.suffixes[o];s.append(jQuery("<span/>",{class:"suffix"}))}this.el.append(i)}},_get_column_td:function(e,t){t=t||this.el;var i=1;return this.tree.draggable&&(i+=1),jQuery(t.children()[e+i])},redraw:function(t,i){t=t||[],i=i||[];var e=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()}function n(i,n){["muted","success","warning","danger"].forEach(function(e){var t="muted"==e?"text-muted":e;e==n?i.addClass(t):i.removeClass(t)})}if(this._drawed_record!==this.record.identity)for(var o=0;o<this.tree.columns.length;o++){var s=this.tree.columns[o],r=this._get_column_td(o),a=r.find(".cell");if(s.prefixes)for(var c=0;c<s.prefixes.length;c++){var l,d=s.prefixes[c],h=jQuery(a.children(".prefix")[c]);(l=h.children()).length?d.render(this.record,l):h.empty().append(d.render(this.record))}var u=a.children(".widget");if((l=u.children()).length?s.render(this.record,l):u.empty().append(s.render(this.record)),s.suffixes)for(var _=0;_<s.suffixes.length;_++){var m=s.suffixes[_],p=jQuery(a.children(".suffix")[_]);(l=p.children()).length?m.render(this.record,l):p.empty().append(m.render(this.record))}n(r,this.record.expr_eval(s.attributes.visual)),s.header.is(":hidden")&&e||"none"==s.header.css("display")?(r.hide(),r.addClass("invisible")):(r.show(),r.removeClass("invisible"))}this.children_field&&this.tree.columns.every(function(e,t){if(e.col.hasClass("draggable-handle")||e.header.hasClass("invisible"))return!0;t=this._get_column_td(t).find(".cell");return this.expander.parent()[0]!==t[0]&&t.prepend(this.expander),!1}.bind(this)),this._drawed_record=this.record.identity;var f,g,v=this.get_id_path();this.set_selection(Sao.common.contains(t,v)),this.children_field&&(g=this.path.split(".").length,f="margin-left",Sao.i18n.rtl&&(f="margin-right"),this.expander.children().css(f,g-1+"em"),g=function(){var e=this.record.field_get_client(this.children_field).length;e&&(this.is_expanded()||Sao.common.contains(i,v))?(this.expander.css("visibility","visible"),this.tree.expanded.add(this),this.expand_children(t,i),this.update_expander(!0)):(this.expander.css("visibility",e?"visible":"hidden"),this.update_expander(!1))}.bind(this),this.record.is_loaded(this.children_field)?g():this.record.load(this.children_field).done(g)),n(this.el,this.record.expr_eval(this.tree.attributes.visual)),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),this.tree.expanded.delete(this),this.collapse_children()):this.tree.n_children(this)>Sao.config.limit?(this.tree.record=this.record,this.tree.screen.switch_view("form")):(this.update_expander(!0),this.tree.expanded.add(this),this.expand_children()),!1},update_expander:function(e){e=e?"tryton-arrow-down":"tryton-arrow-right";Sao.common.ICONFACTORY.get_icon_url(e).then(function(e){this.expander.children().attr("src",e)}.bind(this))},collapse_children:function(){this.rows.forEach(function(e,t,i){e.collapse_children();e=e.el[0];e.parentNode.removeChild(e)}),this.rows=[]},expand_children:function(e,t){return this.record.load(this.children_field).done(function(){0===this.rows.length&&this.record.field_get_client(this.children_field).forEach(function(e,t,i){this.rows.push(new this.Class(this.tree,e,t,this))}.bind(this)),i(this.rows,e,t).then(function(){this.el.after(this.rows.filter(function(e){return!e.el.parent().length}).map(function(e){return e.el}))}.bind(this))}.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(e){},select_row:function(e){var t;this.tree.selection_mode==Sao.common.SELECTION_NONE?(this.tree.select_changed(this.record),this.switch_row()):(e.shiftKey&&this.tree.selection_mode!=Sao.common.SELECTION_SINGLE?(t=this.tree.screen.current_record,this.tree.select_records(t,this.record)):((e.ctrlKey||e.metaKey)&&this.tree.selection_mode!=Sao.common.SELECTION_SINGLE||this.tree.select_records(null,null),this.set_selection(!this.is_selected())),this.selection_changed(),t&&(this.tree.screen.current_record=t))},is_selected:function(){return this.tree.selection_mode!=Sao.common.SELECTION_NONE&&this.selection.prop("checked")},set_selection:function(e){this.tree.selection_mode!=Sao.common.SELECTION_NONE&&(this.selection.prop("checked",e),e?this.el.addClass("selected"):this.el.removeClass("selected"),e||this.tree.selection.prop("checked",!1))},selection_changed:function(){var e=this.is_selected();this.set_selection(e),e?this.tree.select_changed(this.record):this.tree.select_changed(this.tree.selected_records[0]||null),this.tree.update_selection()},expand_to_path:function(e,t){if(e.length&&this.record.field_get_client(this.children_field).length)return this.expander.css("visibility","visible"),this.tree.expanded.add(this),this.update_expander(!0),this.expand_children(t).done(function(){return this.rows[e[0]].expand_to_path(e.slice(1),t)}.bind(this))},next_column:function(e,t,i){var n,o,s;for(i=i||1,null===e&&0<i?e=-1:null===e&&(e=0),n=s=0;n<this.tree.columns.length;n++)if((s=(e+i*(n+1))%this.tree.columns.length)<0&&(s+=this.tree.columns.length),(o=this.tree.columns[s]).field){var r,a,c=(a=o.field.get_state_attrs(this.record)).invisible;if(o.header.is(":hidden")&&(c=!0),r=!!t&&(r=Sao.View.EditableTree.WIDGETS[o.attributes.widget],o.attributes.readonly||a.readonly||!r),!c&&!r)return s}}}),Sao.View.Tree.RowEditable=Sao.class_(Sao.View.Tree.Row,{init:function(e,t,i,n){Sao.View.Tree.RowEditable._super.init.call(this,e,t,i,n),this.edited_column=null,this.el.on("keypress",function(e){e.which==Sao.common.RETURN_KEYCODE&&this.tree.edited_row!=this&&(this.tree.edit_row(this),e.preventDefault())}.bind(this))},redraw:function(e,t){Sao.View.Tree.RowEditable._super.redraw.call(this,e,t);for(var i=function(t){var i=this.record;return function(){var e=i.model.fields[t.field_name];e.set_state(i),t.display(i,e)}}.bind(this),n=0;n<this.tree.columns.length;n++){var o=this.tree.columns[n],s=this._get_column_td(n).children(".cell");(s=jQuery(s.children(".widget-editable")).data("widget"))&&(s=i(s),this.record.is_loaded(o.attributes.name)?s():this.record.load(o.attributes.name).done(s))}},select_column:function(e){this.edited_column=e},select_row:function(e){var t,i,n;e.stopPropagation(),this.tree.edited_row&&e.currentTarget==this.tree.edited_row.el[0]||(n=this.tree.screen.current_record,this.record!=n&&!n.validate(this.tree.get_fields(),!1,!1,!0)||((t=i=jQuery(document.body)).hasClass("modal-open")&&(i=this.tree.el.parents(".modal").last()),(n=function(e){if(e.currentTarget!=t[0]||!t.hasClass("modal-open"))return this.tree.save_row()?(t.off("click.sao.editabletree"),this.tree.edit_row(null),!0):(e.preventDefault(),void e.stopPropagation())}.bind(this))(e)&&(i.on("click.sao.editabletree",n),Sao.View.Tree.RowEditable._super.select_row.call(this,e),e.shiftKey||e.ctrlKey||e.metaKey||this.tree.edit_row(this))))},unset_editable:function(){this.tree.columns.forEach(function(e,t){t=this._get_column_td(t);this.get_static_el(t).empty().append(e.render(this.record)).show(),this.get_editable_el(t).empty().data("widget",null).hide().parents(".treeview td").addBack().removeClass("edited")}.bind(this))},set_editable:function(){for(var e=null,t=0,i=this.tree.columns.length;t<i;t++){var n,o,s=this._get_column_td(t),r=this.tree.columns[t];r.field&&(o=Sao.View.EditableTree.WIDGETS[r.attributes.widget],!r.attributes.readonly&&o&&((n=new o(this.tree,r.attributes)).el.on("keydown",this.key_press.bind(this)),(o=this.get_editable_el(s)).append(n.el),o.data("widget",n),n.display(this.record,r.field),this.get_static_el(s).hide(),o.show(),o.parents(".treeview td").addBack().addClass("edited"),this.edited_column==t&&(e=n)))}e&&e.focus()},get_static_el:function(e){return(e=e||this.get_active_td()).find(".widget")},get_editable_el:function(e){var t=(e=e||this.get_active_td()).find(".widget-editable");return t=!t.length?jQuery("<span/>",{class:"widget-editable"}).insertAfter(e.find(".widget")):t},get_active_td:function(){return this._get_column_td(this.edited_column)},key_press:function(s){var r,a,e,t,c,i,n;s.which!=Sao.common.TAB_KEYCODE&&s.which!=Sao.common.UP_KEYCODE&&s.which!=Sao.common.DOWN_KEYCODE&&s.which!=Sao.common.ESC_KEYCODE&&s.which!=Sao.common.RETURN_KEYCODE||jQuery(s.currentTarget).find(".dropdown-menu:visible").length||(e=this._get_column_td(this.edited_column),t=this.get_editable_el(e),(c=t.data("widget")).focus_out(),(i=this.tree.columns[this.edited_column]).field.validate(this.record)?s.which==Sao.common.TAB_KEYCODE?(n=1,s.shiftKey&&(n=-1),s.preventDefault(),null!==(n=this.next_column(this.edited_column,!0,n))&&(this.edited_column=n,e=this._get_column_td(n),t=this.get_editable_el(e),(c=t.data("widget")).focus())):s.which==Sao.common.UP_KEYCODE||s.which==Sao.common.DOWN_KEYCODE||s.which==Sao.common.RETURN_KEYCODE?(r=this.edited_column,this.record.validate(this.tree.get_fields()).then(function(e){if(e){var t,i,n=jQuery.when();this.tree.screen.group.parent?this.tree.screen.attributes.pre_validate&&(n=this.record.pre_validate()):n=this.record.save(),n.fail(function(){c.focus()}),!(t=s.which!=Sao.common.UP_KEYCODE&&(s.which==Sao.common.DOWN_KEYCODE||-1==this.tree.screen.new_position)?this.el.next("tr"):this.el.prev("tr")).length&&(s.which==Sao.common.RETURN_KEYCODE||s.which==Sao.common.UP_KEYCODE&&0==this.tree.screen.new_position||s.which==Sao.common.DOWN_KEYCODE&&-1==this.tree.screen.new_position)?(i=this.tree.screen.group,e=Sao.common.MODELACCESS.get(this.tree.screen.model_name),i=null!==this.tree.screen.size_limit&&i.length>=this.tree.screen.size_limit,e.create&&!i&&n.then(function(){return this.tree.screen.new_()}.bind(this)).then(function(e){var t=this.tree.attributes.sequence;t&&e.group.set_sequence(t,this.tree.screen.new_position)}.bind(this))):n.then(function(){this._get_column_td(r,t).trigger("click").find(":input,[tabindex=0]").focus()}.bind(this))}else{var o=this.record.invalid_fields();for(a=0;a<this.tree.columns.length;a++)if(this.tree.columns[a].attributes.name in o){r=a;break}this._get_column_td(r).find(":input,[tabindex=0]").focus()}}.bind(this))):s.which==Sao.common.ESC_KEYCODE&&(this.tree.edit_row(null),this.get_static_el().show().find("[tabindex=0]").focus()):c.display(this.record,i.field),s.preventDefault())}}),Sao.View.Tree.Affix=Sao.class_(Object,{init:function(e,t){this.attributes=e,this.protocol=t||null,this.icon=e.icon,this.protocol&&!this.icon&&(this.icon="tryton-public")},get_cell:function(){var e;return this.protocol?((e=jQuery("<a/>",{target:"_blank",rel:"noreferrer noopener"})).append(jQuery("<img/>")),e.click({cell:e},this.clicked.bind(this))):this.icon?e=jQuery("<img/>"):(e=jQuery("<span/>")).attr("tabindex",0),e.addClass("column-affix"),e},render:function(o,s){s=s||this.get_cell();var e=function(){var e,t,i,n=o.model.fields[this.attributes.name];if(n.set_state(o,["invisible"]),n.get_state_attrs(o).invisible?s.hide():s.show(),this.protocol){if(e=n.get(o),!jQuery.isEmptyObject(e))switch(this.protocol){case"email":e="mailto:"+e;break;case"callto":e="callto:"+e;break;case"sip":e="sip:"+e}s.attr("href",e)}this.icon?(e=this.icon in o.model.fields?o.model.fields[this.icon].get_client(o):this.icon,t=s.children("img").length?s.children("img"):s,"url"==this.attributes.icon_type?e?(this.attributes.url_size&&((i=new URL(e,window.location)).searchParams.set(this.attributes.url_size,20),e=i.href),t.attr("src",e)):t.removeAttr("src"):Sao.common.ICONFACTORY.get_icon_url(e).done(function(e){e?t.attr("src",e):t.removeAttr("src")}.bind(this))):(e=(e=this.attributes.string||"")||(n.get_client(o)||""),s.text(e))}.bind(this);return o.is_loaded(this.attributes.name)?e():o.load(this.attributes.name).done(e),s},clicked:function(e){e.stopPropagation()}}),Sao.View.Tree.Symbol=Sao.class_(Object,{class_:"column-symbol",init:function(e,t){this.attributes=e,this.position=t},get_cell:function(){return jQuery("<span/>",{class:this.class_,tabindex:0})},render:function(i,n){n=n||this.get_cell();var e=function(){var e=i.model.fields[this.attributes.name];if(e.set_state(i,["invisible"]),e.get_state_attrs(i).invisible)return n.text(""),void n.hide();var t=e.get_symbol(i,this.attributes.symbol),e=t[0],t=t[1];Math.round(t)===this.position?(n.text(e),n.show()):(n.text(""),n.hide())}.bind(this);return i.is_loaded(this.attributes.name)?e():i.load(this.attributes.name).done(e),n}}),Sao.View.Tree.CharColumn=Sao.class_(Object,{class_:"column-char",init:function(e,t){this.type="field",this.model=e,this.field=e.fields[t.name],this.tree=null,this.attributes=t,this.prefixes=[],this.suffixes=[],this.header=null,this.footers=[]},get field_name(){return this.attributes.name},get model_name(){return model.name},get_cell:function(){return jQuery("<div/>",{class:this.class_,tabindex:0})},update_text:function(e,t){t=this.field.get_client(t);e.text(t).attr("title",t)},render:function(e,t){t=t||this.get_cell();var i=function(){this.update_text(t,e),this.field.set_state(e),this.field.get_state_attrs(e).invisible?t.hide():t.show()}.bind(this);return e.is_loaded(this.attributes.name)?i():e.load(this.attributes.name).done(i),t}}),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(e,t){Sao.View.Tree.IntegerColumn._super.init.call(this,e,t),this.factor=Number(t.factor||1)},get_cell:function(){return Sao.View.Tree.IntegerColumn._super.get_cell.call(this)},update_text:function(e,t){t=this.field.get_client(t,this.factor);e.text(t).attr("title",t)}}),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",class:this.class_,tabindex:0})},update_text:function(e,t){e.prop("checked",this.field.get(t))},render:function(e,t){var i=!t;t=Sao.View.Tree.BooleanColumn._super.render.call(this,e,t);var n=!0;return this.tree.editable&&(i&&t.on("click",null,{record:e,cell:t},this.clicked.bind(this)),e=this.field.get_state_attrs(e),n=this.attributes.readonly||e.readonly),t.prop("disabled",n),t},clicked:function(e){var t=e.data.record,i=e.data.cell,n=this.tree.screen.current_record,o=this.tree.get_fields();!n||n.validate(o,!1,!1,!0)?(i=i.prop("checked"),this.field.set_client(t,i)):e.preventDefault()}}),Sao.View.Tree.Many2OneColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-many2one",get_cell:function(){var e=Sao.View.Tree.Many2OneColumn._super.get_cell.call(this);return e.append(jQuery("<a/>",{href:"#"})),e},update_text:function(e,t){(e=e.children("a")).unbind("click"),Sao.View.Tree.Many2OneColumn._super.update_text.call(this,e,t),e.click(function(e){e.stopPropagation();e={};e.model=this.attributes.relation,e.res_id=this.field.get(t),e.mode=["form"],e.name=this.attributes.string,e.context=this.field.get_context(t),Sao.Tab.create(e)}.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(e,t){Sao.View.Tree.SelectionColumn._super.init.call(this,e,t),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(e){Sao.common.selection_mixin.init_selection.call(this,e)},update_selection:function(e,t){Sao.common.selection_mixin.update_selection.call(this,e,this.field,t)},update_text:function(s,r){this.update_selection(r,function(){for(var e,t=this.field.get(r),i=!1,n=0,o=this.selection.length;n<o;n++)if(this.selection[n][0]===t){i=!0,e=this.selection[n][1];break}(i?jQuery.when(e):Sao.common.selection_mixin.get_inactive_selection.call(this,t).then(function(e){return e[1]})).done(function(e){s.text(e).attr("title",e)}.bind(this))}.bind(this))}}),Sao.View.Tree.MultiSelectionColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-multiselection",init:function(e,t){Sao.View.Tree.MultiSelectionColumn._super.init.call(this,e,t),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(e){Sao.common.selection_mixin.init_selection.call(this,e)},update_selection:function(e,t){Sao.common.selection_mixin.update_selection.call(this,e,this.field,t)},update_text:function(t,i){this.update_selection(i,function(){var e=this.field.get_eval(i).map(function(e){for(var t=0;t<this.selection.length;t++)if(this.selection[t][0]===e)return this.selection[t][1];return""}.bind(this)).join(";");t.text(e).attr("title",e)}.bind(this))}}),Sao.View.Tree.ReferenceColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-reference",init:function(e,t){Sao.View.Tree.ReferenceColumn._super.init.call(this,e,t),Sao.common.selection_mixin.init.call(this),this.init_selection()},init_selection:function(e){Sao.common.selection_mixin.init_selection.call(this,e)},update_selection:function(e,t){Sao.common.selection_mixin.update_selection.call(this,e,this.field,t)},update_text:function(s,r){this.update_selection(r,function(){var e,t,i=this.field.get_client(r),i=i?(e=i[0],i[1]):e="";if(e){for(var n=0,o=this.selection.length;n<o;n++)if(this.selection[n][0]===e){e=this.selection[n][1];break}t=e+","+i}else t=i;s.text(t).attr("title",t)}.bind(this))}}),Sao.View.Tree.DictColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-dict",update_text:function(e,t){t="("+Object.keys(this.field.get_client(t)).length+")";e.text(t).attr("title",t)}}),Sao.View.Tree.DateColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-date",update_text:function(e,t){var i=this.field.get_client(t),t=this.field.date_format(t),i=Sao.common.format_date(t,i);e.text(i).attr("title",i)}}),Sao.View.Tree.TimeColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-time",update_text:function(e,t){var i=this.field.get_client(t),i=Sao.common.format_time(this.field.time_format(t),i);e.text(i).attr("title",i)}}),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(e,t){t="( "+this.field.get_client(t).length+" )";e.text(t).attr("title",t)}}),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(e,t){Sao.View.Tree.BinaryColumn._super.init.call(this,e,t),this.filename=t.filename||null},get_cell:function(){var e=Sao.View.Tree.BinaryColumn._super.get_cell.call(this);return jQuery("<span/>").appendTo(e),e},update_text:function(e,t){var i=this.field.get_size?this.field.get_size(t):this.field.get(t).length,n=i?Sao.common.humanize(i):"";e.children("span").text(n).attr("title",n);n=e.children("button");n.length||(n=jQuery("<button/>",{class:"btn btn-default btn-sm",type:"button"}).append(Sao.common.ICONFACTORY.get_icon_img("tryton-save")).appendTo(e).click(t,function(e){e.stopPropagation(),this.save_as(e.data)}.bind(this))),i?n.show():n.hide()},save_as:function(e){var t,i=e.model.fields[this.filename];i&&(t=i.get_client(e),Sao.common.guess_mimetype(t)),(this.field.get_data?this.field.get_data(e):jQuery.when(this.field.get(e))).done(function(e){Sao.common.download_file(e,t)}.bind(this))}}),Sao.View.Tree.ImageColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-image",get_cell:function(){var e=jQuery("<img/>",{class:this.class_+" center-block",tabindex:0});return this.height=parseInt(this.attributes.height||100,10),this.width=parseInt(this.attributes.width||300,10),e.css("max-height",this.height),e.css("max-width",this.width),e.css("height","auto"),e.css("width","auto"),e},render:function(i,n){n=n||this.get_cell();var e=function(){var e=function(e){var t=e?(t=new Blob([e]),window.URL.createObjectURL(t)):null;n.attr("src",t)}.bind(this),t=this.field.get_client(i);!t||t>Sao.common.BIG_IMAGE_SIZE?e(null):this.field.get_data(i).done(e)}.bind(this);return i.is_loaded(this.attributes.name)?e():i.load(this.attributes.name).done(e),n}}),Sao.View.Tree.URLColumn=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-url",render:function(e,t){return t=Sao.View.Tree.URLColumn._super.render.call(this,e,t),this.field.set_state(e),this.field.get_state_attrs(e).readonly?t.hide():t.show(),t}}),Sao.View.Tree.ProgressBar=Sao.class_(Sao.View.Tree.CharColumn,{class_:"column-progressbar",get_cell:function(){var e=jQuery("<div/>",{class:this.class_+" progress",tabindex:0});return jQuery("<div/>",{class:"progress-bar",role:"progressbar","aria-valuemin":0,"aria-valuemax":100}).appendTo(e).css("min-width: 2em"),e},update_text:function(e,t){var i=(i=this.field.get_client(t,100))&&Sao.i18n.gettext("%1%",i),t=this.field.get(t)||0,e=e.find(".progress-bar");e.attr("aria-valuenow",100*t),e.css("width",100*t+"%"),e.text(i).attr("title",i)}}),Sao.View.Tree.ButtonColumn=Sao.class_(Object,{init:function(e,t){this.view=e,this.type="button",this.attributes=t},render:function(e,t){var i=new Sao.common.Button(this.attributes,t,"btn-sm");t||i.el.click([e,i],this.button_clicked.bind(this));jQuery.map(this.view.screen.model.fields,function(e,t){if("eager"==(e.description.loading||"eager"))return t});return i.set_state(e),i.el},button_clicked:function(e){var t=e.data[0],i=e.data[1];if(t!=this.view.screen.current_record)return!0;e=t.expr_eval(this.attributes.states||{});e.invisible||e.readonly||(i.el.prop("disabled",!0),(i=this.view.rows.find(function(e){return e.record==t}))&&(i._drawed_record=null),this.view.screen.button(this.attributes))}}),Sao.View.TreeXMLViewParser.WIDGETS={biginteger:Sao.View.Tree.IntegerColumn,binary:Sao.View.Tree.BinaryColumn,boolean:Sao.View.Tree.BooleanColumn,callto:Sao.View.Tree.URLColumn,char:Sao.View.Tree.CharColumn,date:Sao.View.Tree.DateColumn,dict:Sao.View.Tree.DictColumn,email:Sao.View.Tree.URLColumn,float:Sao.View.Tree.FloatColumn,image:Sao.View.Tree.ImageColumn,integer:Sao.View.Tree.IntegerColumn,many2many:Sao.View.Tree.Many2ManyColumn,many2one:Sao.View.Tree.Many2OneColumn,numeric:Sao.View.Tree.FloatColumn,one2many:Sao.View.Tree.One2ManyColumn,one2one:Sao.View.Tree.One2OneColumn,progressbar:Sao.View.Tree.ProgressBar,reference:Sao.View.Tree.ReferenceColumn,selection:Sao.View.Tree.SelectionColumn,multiselection:Sao.View.Tree.MultiSelectionColumn,sip:Sao.View.Tree.URLColumn,text:Sao.View.Tree.TextColum,time:Sao.View.Tree.TimeColumn,timedelta:Sao.View.Tree.TimeDeltaColumn,url:Sao.View.Tree.URLColumn},Sao.View.EditableTree={},Sao.View.EditableTree.editable_mixin=function(e){e.el.on("keydown",function(e){e.which!=Sao.common.TAB_KEYCODE&&e.which!=Sao.common.UP_KEYCODE&&e.which!=Sao.common.DOWN_KEYCODE&&e.which!=Sao.common.ESC_KEYCODE&&e.which!=Sao.common.RETURN_KEYCODE||this.focus_out()}.bind(e))},Sao.View.EditableTree.Char=Sao.class_(Sao.View.Form.Char,{class_:"editabletree-char",init:function(e,t){Sao.View.EditableTree.Char._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Date=Sao.class_(Sao.View.Form.Date,{class_:"editabletree-date",init:function(e,t){Sao.View.EditableTree.Date._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Time=Sao.class_(Sao.View.Form.Time,{class_:"editabletree-time",init:function(e,t){Sao.View.EditableTree.Time._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.TimeDelta=Sao.class_(Sao.View.Form.TimeDelta,{class_:"editabletree-timedelta",init:function(e,t){Sao.View.EditableTree.TimeDelta._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Integer=Sao.class_(Sao.View.Form.Integer,{class_:"editabletree-integer",init:function(e,t){delete(t=jQuery.extend({},t)).symbol,Sao.View.EditableTree.Integer._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)},get width(){}}),Sao.View.EditableTree.Float=Sao.class_(Sao.View.Form.Float,{class_:"editabletree-float",init:function(e,t){delete(t=jQuery.extend({},t)).symbol,Sao.View.EditableTree.Float._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)},get width(){}}),Sao.View.EditableTree.Selection=Sao.class_(Sao.View.Form.Selection,{class_:"editabletree-selection",init:function(e,t){Sao.View.EditableTree.Selection._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Boolean=Sao.class_(Sao.View.Form.Boolean,{class_:"editabletree-boolean",init:function(e,t){Sao.View.EditableTree.Boolean._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.Many2One=Sao.class_(Sao.View.Form.Many2One,{class_:"editabletree-many2one",init:function(e,t){Sao.View.EditableTree.Many2One._super.init.call(this,e,t)}}),Sao.View.EditableTree.Reference=Sao.class_(Sao.View.Form.Reference,{class_:"editabletree-reference",init:function(e,t){Sao.View.EditableTree.Reference._super.init.call(this,e,t)}}),Sao.View.EditableTree.One2One=Sao.class_(Sao.View.Form.One2One,{class_:"editabletree-one2one",init:function(e,t){Sao.View.EditableTree.One2One._super.init.call(this,e,t)}}),Sao.View.EditableTree.One2Many=Sao.class_(Sao.View.EditableTree.Char,{class_:"editabletree-one2many",init:function(e,t){Sao.View.EditableTree.One2Many._super.init.call(this,e,t)},display:function(e,t){e?this.el.val("("+t.get_client(e).length+")"):this.el.val("")},key_press:function(e){e.which==Sao.common.TAB_KEYCODE&&this.focus_out()},set_value:function(e,t){}}),Sao.View.EditableTree.Binary=Sao.class_(Sao.View.Form.Binary,{class_:"editabletree-binary",init:function(e,t){Sao.View.EditableTree.Binary._super.init.call(this,e,t),Sao.View.EditableTree.editable_mixin(this)}}),Sao.View.EditableTree.WIDGETS={biginteger:Sao.View.EditableTree.Integer,binary:Sao.View.EditableTree.Binary,boolean:Sao.View.EditableTree.Boolean,callto:Sao.View.EditableTree.Char,char:Sao.View.EditableTree.Char,date:Sao.View.EditableTree.Date,email:Sao.View.EditableTree.Char,float:Sao.View.EditableTree.Float,integer:Sao.View.EditableTree.Integer,many2many:Sao.View.EditableTree.Many2Many,many2one:Sao.View.EditableTree.Many2One,numeric:Sao.View.EditableTree.Float,one2many:Sao.View.EditableTree.One2Many,one2one:Sao.View.EditableTree.One2One,reference:Sao.View.EditableTree.Reference,selection:Sao.View.EditableTree.Selection,sip:Sao.View.EditableTree.Char,text:Sao.View.EditableTree.Char,time:Sao.View.EditableTree.Time,timedelta:Sao.View.EditableTree.TimeDelta,url:Sao.View.EditableTree.Char}}(),function(){"use strict";Sao.View.GraphXMLViewParser=Sao.class_(Sao.View.XMLViewParser,{init:function(e,t,i){Sao.View.GraphXMLViewParser._super.init.call(this,e,t,i),this._xfield=null,this._yfields=[]},_node_attributes:function(e){for(var t,i={},n=0,o=e.attributes.length;n<o;n++){var s=e.attributes[n];i[s.name]=s.value}return i.name&&(i.string||"#"==i.name||(t=this.field_attrs[i.name],i.string=t.string)),i},_parse_graph:function(e,t){[].forEach.call(e.childNodes,function(e){this.parse(e)}.bind(this));t=new Sao.View.GraphXMLViewParser.WIDGETS[t.type||"vbar"](this.view,this._xfield,this._yfields);this.view.el.append(t.el),this.view.widgets.root=t},_parse_x:function(e,t){for(var i=0;i<e.children.length;i++)this._xfield=this._node_attributes(e.children[i])},_parse_y:function(e,t){for(var i=0;i<e.children.length;i++)this._yfields.push(this._node_attributes(e.children[i]))}}),Sao.View.Graph=Sao.class_(Sao.View,{editable:!1,view_type:"graph",xml_parser:Sao.View.GraphXMLViewParser,init:function(e,t,i,n){this.el=jQuery("<div/>",{class:"graph"}),Sao.View.Graph._super.init.call(this,e,t,i)},display:function(){return this.widgets.root.display(this.group)}}),Sao.View.Graph.Chart=Sao.class_(Object,{_chart_type:void 0,init:function(e,t,i){this.view=e,this.xfield=t,this.yfields=i,this.el=jQuery("<div/>"),this.el.uniqueId()},update_data:function(a){var c,l,d,h,u,_={};this.ids={},_.columns=[["labels"]],_.names={};for(var m={},e=[this.xfield.name],t=0,i=this.yfields.length;t<i;t++)l=this.yfields[t],d=l.key||l.name,_.columns.push([d]),_.names[d]=l.string,m[d]=t+1,e.push(l.name);var n=[],o=function(r){return function(){var e=(c=a[r]).field_get_client(this.xfield.name);e&&(e.isDate||e.isDateTime)&&(e=e.toString());var t,i,n=_.columns[0].indexOf(e);for(n<0&&(n=_.columns[0].push(e)-1),this._add_id(e,c.id),h=0,u=this.yfields.length;h<u;h++){if(l=this.yfields[h],d=l.key||l.name,void 0===(t=_.columns[m[d]])[n]&&(t[n]=null),l.domain){var o,s=jQuery.extend({},Sao.Session.current_session.context);for(o in(s.context=s)._user=Sao.Session.current_session.user_id,a.model.fields)s[o]=c.field_get(o);if(!new Sao.PYSON.Decoder(s).decode(l.domain))continue}t[n]||(t[n]=0),"#"==l.name?t[n]+=1:((i=c.field_get(l.name))&&i.isTimeDelta&&(i=i.asSeconds()),t[n]+=i||0)}}.bind(this)}.bind(this),s=[];for(t=0,i=a.length;t<i;t++)c=a[t],e.forEach(function(t){return function(e){n.push(t.load(e))}}(a[t])),s.push(jQuery.when.apply(jQuery,n).then(o(t)));return jQuery.when.apply(jQuery,s).then(function(){return _})},_add_id:function(e,t){e in this.ids||(this.ids[e]=[]),this.ids[e].push(t)},display:function(e){e=this.update_data(e);return e.done(function(e){c3.generate(this._c3_config(e))}.bind(this)),e},_c3_config:function(e){var t={};t.bindto="#"+this.el.attr("id"),t.data=e,t.data.type=this._chart_type,t.data.x="labels",t.data.onclick=this.action.bind(this);var i,e=this.view.screen.model.fields[this.xfield.name].description.type;"date"==e||"datetime"==e?(i=Sao.common.date_format(this.view.screen.context.date_format),o="datetime"==e?(t.data.xFormat="%Y-%m-%d %H:%M:%S",function(e){return Sao.common.format_datetime(i+" %X",moment(e))}):(t.data.xFormat="%Y-%m-%d",function(e){return Sao.common.format_date(i,moment(e))}),t.axis={x:{type:"timeseries",tick:{format:o}}}):t.axis={x:{type:"category"}};for(var n,e=this.view.attributes.color||Sao.config.graph_color,o=Sao.common.hex2rgb(Sao.common.COLOR_SCHEMES[e]||e),o=Math.max.apply(null,o),s=[],r=0;r<this.yfields.length;r++)n=this.yfields[r],s.push(n.key||n.name);var a=Sao.common.generateColorscheme(e,s,o/(s.length||1));for(r=0;r<this.yfields.length;r++)(n=this.yfields[r]).color&&(a[n.key||n.name]=field.color);return t.data.color=function(e,t){t=t.id||t;return a[t]||e},t},action:function(e,t){var i=this.ids[this._action_key(e)],e=jQuery.extend({},this.view.screen.group._context);delete e.active_ids,delete e.active_id,Sao.Action.exec_keyword("graph_open",{model:this.view.screen.model_name,id:i[0],ids:i},e,!1)},_action_key:function(e){return e.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(e){e=Sao.View.Graph.HorizontalBar._super._c3_config.call(this,e);return e.axis.rotated=!0,e}}),Sao.View.Graph.Line=Sao.class_(Sao.View.Graph.Chart,{_chart_type:"line",_c3_config:function(e){e=Sao.View.Graph.Line._super._c3_config.call(this,e);return e.line={connectNull:!0},e}}),Sao.View.Graph.Pie=Sao.class_(Sao.View.Graph.Chart,{_chart_type:"pie",_c3_config:function(e){for(var t,i,n=Sao.View.Graph.Pie._super._c3_config.call(this,e),o=[],s={},r=0,a=e.columns.length;r<a;r++)"labels"==e.columns[r][0]?t=e.columns[r].slice(1):i=e.columns[r].slice(1);delete n.axis,delete n.data.x;var c,l,d,h,u=this.view.screen.model.fields[this.xfield.name].description.type;for("date"!=u&&"datetime"!=u||(c=Sao.common.date_format(this.view.screen.context.date_format),l=c+" %X",d="datetime"==u?function(e){return Sao.common.format_datetime(l,e)}:function(e){return Sao.common.format_date(c,e)}),r=0,a=t.length;r<a;r++)h=t[r],d&&(h=d(h)),o.push([r,i[r]]),s[r]=h;return n.data.columns=o,n.data.names=s,n},_add_id:function(e,t){var i,n=this.xfield.type;"date"!=n&&"datetime"!=n||(i=Sao.common.date_format(this.view.screen.context.date_format),e="datetime"==n?Sao.common.format_datetime(i+" %X",e):Sao.common.format_date(i,e)),Sao.View.Graph.Pie._super._add_id.call(this,e,t)},_action_key:function(e){return e.id}}),Sao.View.GraphXMLViewParser.WIDGETS={hbar:Sao.View.Graph.HorizontalBar,line:Sao.View.Graph.Line,pie:Sao.View.Graph.Pie,vbar:Sao.View.Graph.VerticalBar}}(),function(){"use strict";Sao.View.CalendarXMLViewParser=Sao.class_(Sao.View.XMLViewParser,{_parse_calendar:function(e,t){[].forEach.call(e.childNodes,function(e){this.parse(e)}.bind(this));var i="datetime"==this.view.screen.model.fields[t.dtstart].description.type?"agendaWeek":"basicWeek",n="datetime"==this.view.screen.model.fields[t.dtstart].description.type?"agendaDay":"basicDay",e="month";"week"==t.mode&&(e=i),"day"==t.mode&&(e=n);i={left:"today prev,next",center:"title",right:"month,"+i+","+n};Sao.i18n.rtl&&((n=jQuery.extend({},i)).left=i.right,n.right=i.left,i=n),this.view.el.fullCalendar({defaultView:e,header:i,timeFormat:"H:mm",events:this.view.get_events.bind(this.view),contentHeight:"auto",locale:Sao.i18n.getlang().slice(0,2),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"),day:Sao.i18n.gettext("Day")},eventRender:this.view.event_render.bind(this.view),eventResize:this.view.event_resize.bind(this.view),eventDrop:this.view.event_drop.bind(this.view),eventClick:this.view.event_click.bind(this.view),dayClick:this.view.day_click.bind(this.view)}),void 0!==t.height&&this.view.el.css("min-height",t.height+"px"),void 0!==t.width&&this.view.el.css("min-width",t.width+"px")},_parse_field:function(e,t){this.view.fields.push(t.name)}}),Sao.View.Calendar=Sao.class_(Sao.View,{editable:!1,view_type:"calendar",xml_parser:Sao.View.CalendarXMLViewParser,init:function(e,t,i){this.processing=!0,this.fields=[],this.el=jQuery("<div/>",{class:"calendar"}),Sao.View.Calendar._super.init.call(this,e,t,i)},get_colors:function(e){var t={};return t.text_color=Sao.config.calendar_colors[0],this.attributes.color&&(t.text_color=e.field_get(this.attributes.color)),t.background_color=Sao.config.calendar_colors[1],this.attributes.background_color&&(t.background_color=e.field_get(this.attributes.background_color)),t},display:function(){this.el.fullCalendar("render"),this.processing||this.el.fullCalendar("refetchEvents")},insert_event:function(e){var t=this.screen.model.fields[this.fields[0]].get_client(e),i=e.model.fields[this.attributes.dtstart],n=i.get_client(e);i.set_state(e);var o=null;this.attributes.dtend&&(o=(s=e.model.fields[this.attributes.dtend]).get_client(e),s.set_state(e));for(var s,r=Sao.common.MODELACCESS.get(this.screen.model_name),a=parseInt(this.attributes.editable||1,10)&&r.write,c=[],l=1;l<this.fields.length;l++)c.push(this.screen.model.fields[this.fields[l]].get_client(e));c=c.join("\n"),n&&((r=n.isDate&&(!o||o.isDate))&&o&&!o.isSame(n)&&"calendar"==this.screen.current_view.view_type&&o.add(1,"day"),o&&o<n||(s={title:t,start:n,end:o,allDay:r,editable:a&&!i.get_state_attrs(e).readonly&&(!o||!s.get_state_attrs(e).readonly),color:(s=this.get_colors(e)).background_color,textColor:s.text_color,record:e,description:c},this.events.push(s)))},get_events:function(e,t,i,n){this.processing=!0,this.start=Sao.DateTime(e.utc()),this.end=Sao.DateTime(t.utc());e=jQuery.when();this.screen.current_view&&"form"!=this.screen.current_view.view_type&&(t=this.screen.screen_container.get_text(),e=this.screen.search_filter(t)),this.events=[];var o=[];e.then(function(){return this.group.forEach(function(t){var i=[];this.fields.forEach(function(e){i.push(t.load(e))});var e=jQuery.when.apply(jQuery,i).then(function(){this.insert_event(t)}.bind(this));o.push(e)}.bind(this)),jQuery.when.apply(jQuery,o).then(function(){n(this.events)}.bind(this)).always(function(){this.processing=!1}.bind(this))}.bind(this))},event_click:function(e,t,i){this.clicked_event||(this.clicked_event=!0,this.screen.current_record=e.record,this.screen.switch_view().always(function(){this.clicked_event=!1}.bind(this)))},event_drop:function(e,t,i,n,o,s){var r=this.attributes.dtstart,a=this.attributes.dtend,c=e.record,l=(c.group,c.field_get(r)),d=l;a&&(d=c.field_get(a));var h=e.start,e=e.end;e!=l&&e||(e=h),l.isDateTime?(e=Sao.DateTime(e.format()).utc(),h=Sao.DateTime(h.format()).utc()):l.isSame(d)||(e.subtract(1,"day"),this.el.fullCalendar("refetchEvents")),l<=h?(a&&c.field_set_client(a,e),c.field_set_client(r,h)):(c.field_set_client(r,h),a&&c.field_set_client(a,e)),c.save()},event_resize:function(e,t,i,n,o,s){var r=this.attributes.dtend,a=e.record,c=(a.group,a.field_get(r)),e=e.end;!0===c.isDateTime?e=Sao.DateTime(e.format()).utc():(e.subtract(1,"day"),this.el.fullCalendar("refetchEvents")),a.field_set_client(r,e=e==c||!e?c:e),a.save()},event_render:function(e,t,i){this.screen.model.fields.date&&"calendar"==this.screen.view_name&&t.find(".fc-time").remove(),t.find(".fc-content").append(jQuery("<div/>",{class:"fc-description"}).text(e.description)),t.css("white-space","pre").css("overflow","hidden").css("text-overflow","ellipsis").attr("title",[e.title,e.description].filter(function(e){return e}).join("\n"))},day_click:function(e,t,i){var n=Sao.common.MODELACCESS.get(this.screen.model_name);parseInt(this.attributes.editable||1,10)&&n.create&&(this.el.fullCalendar("gotoDate",e),this.screen.current_record=null,this.screen.new_())},current_domain:function(){if(!this.start&&!this.end)return[["id","=",-1]];var e=Sao.DateTime(this.start),t=Sao.DateTime(this.end),i=this.attributes.dtstart,n=this.attributes.dtend||i;return["OR",["AND",[i,">=",e],[i,"<",t]],["AND",[n,">=",e],[n,"<",t]],["AND",[i,"<",e],[n,">",t]]]},get_displayed_period:function(){var e=[];return this.start&&this.end&&e.push(this.start,this.end),e},set_default_date:function(e,t){var i=this.attributes.dtstart,n=e.model.fields[i];n instanceof Sao.field.DateTime?t=Sao.DateTime(t):n instanceof Sao.field.Date&&(t=Sao.Date(t)),n.set(e,t),e.on_change([i]),e.on_change_with([i])},get_selected_date:function(){return this.el.fullCalendar("getDate")}})}(),function(){"use strict";Sao.View.ListGroupViewForm=Sao.class_(Sao.View.Form,{editable:!0,get record(){return this._record},set record(e){this._record=e}}),Sao.View.ListForm=Sao.class_(Sao.View,{view_type:"list-form",init:function(e,t,i){Sao.View.ListForm._super.init.call(this,e,t,i),this.editable=!0,this.form_xml=i,this.el=jQuery("<ul/>",{class:"list-group list-form"}),this._view_forms=[]},display:function(){for(var e,t,i,n,o=[],s=[],r=0;r<this.group.length;r++)e=this.group[r],(t=this._view_forms[r])?(i=t.el.parent(),t.record=e):(i=this._create_form(e),s.push(i),t=this._view_forms[this._view_forms.length-1]),~this.group.record_deleted.indexOf(e)||~this.group.record_removed.indexOf(e)?i.addClass("disabled"):i.removeClass("disabled"),this.record===e?i.addClass("list-group-item-selected"):i.removeClass("list-group-item-selected"),o.push(t.display());return 0<s.length&&this.el.append(s),n=this._view_forms.splice(this.group.length),jQuery(n.map(function(e){return e.el[0]})).parent().detach(),jQuery.when.apply(jQuery,o)},_create_form:function(e){var t=new Sao.View.ListGroupViewForm(this.view_id,this.screen,this.form_xml);t.record=e,this._view_forms.push(t);e=jQuery("<li/>",{class:"list-group-item list-form-item"});return e.append(t.el),e.click(this._view_forms.length-1,this._select_row.bind(this)),e},get selected_records(){for(var e,t=[],i=0;i<this._view_forms.length;i++)(e=this._view_forms[i]).el.parent().hasClass("list-group-item-selected")&&t.push(e.record);return t},set_cursor:function(e,t){e&&this.el.animate({scrollTop:this.el[0].scrollHeight})},select_records:function(e,t){var i;jQuery(this._view_forms.map(function(e){return e.el[0]})).parent().removeClass("list-group-item-selected"),null===e&&null===t||((t=t||0)<(e=e||0)&&(i=e,e=t,t=i),this._view_forms.slice(e,t+1).forEach(function(e){e.el.parent().addClass("list-group-item-selected")}))},_select_row:function(e){var t,i=e.data,n=this._view_forms[i];if(e.shiftKey){for(var o=0;o<this._view_forms.length;o++)if(this._view_forms[o].record===this.record){t=this._view_forms[o];break}this.select_records(o,i)}else e.ctrlKey||e.metaKey||this.select_records(null,null),this.record=n.record,n.el.parent().toggleClass("list-group-item-selected");t&&(this.record=t.record)}})}(),function(){"use strict";Sao.Action={report_blob_url:void 0},Sao.Action.exec_action=function(e,n,t){t=t?jQuery.extend({},t):{};var i=Sao.Session.current_session;function o(t,e){if(!n.model||!n.ids)return jQuery.when(t);var i=n.ids.filter(function(e){return 0<=e}).slice(0,5);return i.length?Sao.rpc({method:"model."+n.model+".read",params:[i,["rec_name"],e]},Sao.Session.current_session).then(function(e){e=e.map(function(e){return e.rec_name}).join(Sao.i18n.gettext(", "));return n.ids.length>i.length&&(e+=Sao.i18n.gettext(",...")),Sao.i18n.gettext("%1 (%2)",t,e)}):jQuery.when(t)}n=void 0===n?{}:jQuery.extend({},n),delete t.active_id,delete t.active_ids,delete t.active_model,n.action_id=e.id;var s={};switch(e.type){case"ir.action.act_window":s.view_ids=[],s.mode=null,jQuery.isEmptyObject(e.views)?jQuery.isEmptyObject(e.view_id)||(s.view_ids=[e.view_id[0]]):(s.view_ids=[],s.mode=[],e.views.forEach(function(e){s.view_ids.push(e[0]),s.mode.push(e[1])})),void 0===e.pyson_domain&&(e.pyson_domain="[]");var r={active_model:n.model||null,active_id:n.id||null,active_ids:n.ids||[]};(r=jQuery.extend(r,i.context))._user=i.user_id;var a=new Sao.PYSON.Decoder(r);return s.context=jQuery.extend({},t,a.decode(e.pyson_context||"{}")),(r=jQuery.extend(r,s.context)).context=r,a=new Sao.PYSON.Decoder(r),s.domain=a.decode(e.pyson_domain),s.order=a.decode(e.pyson_order),s.search_value=a.decode(e.pyson_search_value||"[]"),s.tab_domain=[],e.domains.forEach(function(e,t){s.tab_domain.push([e[0],a.decode(e[1]),e[2]])}),r=jQuery.when(e.name),s.model=e.res_model||n.res_model,s.res_id=e.res_id||n.res_id,s.context_model=e.context_model,s.context_domain=e.context_domain,null!==e.limit?s.limit=e.limit:s.limit=Sao.config.limit,s.icon=e["icon.rec_name"]||"",void(r=e.keyword?o(e.name,s.context):r).then(function(e){s.name=e,Sao.Tab.create(s)});case"ir.action.wizard":return s.action=e.wiz_name,s.data=n,s.context=t,s.window=e.window,r=jQuery.when(e.name),void(r="form_action"===(e.keyword||"form_action")?o(e.name,t):r).done(function(e){s.name=e,Sao.Wizard.create(s)});case"ir.action.report":return s.name=e.report_name,s.data=n,s.direct_print=e.direct_print,s.context=t,void Sao.Action.exec_report(s);case"ir.action.url":return void window.open(e.url,"_blank","noreferrer,noopener")}},Sao.Action.exec_keyword=function(e,o,s,r,a){void 0===r&&(r=!0),void 0===a&&(a=!1);var t=o.id,t={method:"model.ir.action.keyword.get_keyword",params:[e,[o.model,t],{}]};return Sao.rpc(t,Sao.Session.current_session).pipe(function(e){var t,i={};for(t in e){var n=e[t];i[n.name.split(" / ").pop()]=n}return Sao.common.selection(Sao.i18n.gettext("Select your action"),i,a).then(function(e){Sao.Action.exec_action(e,o,s)},function(){jQuery.isEmptyObject(i)&&r&&alert(Sao.i18n.gettext("No action defined."))})})},Sao.Action.exec_report=function(e){e.context||(e.context={});var t=jQuery.extend({},e.data),i=jQuery.extend({},Sao.Session.current_session.context);jQuery.extend(i,e.context),i.direct_print=e.direct_print,Sao.rpc({method:"report."+e.name+".execute",params:[t.ids||[],t,i]},Sao.Session.current_session).done(function(e){var t=e[0],i=e[1],e=(e[2],e[3]);Sao.common.download_file(i,e+"."+t)})},Sao.Action.execute=function(e,t,i,n){"number"==typeof e&&(e=Sao.rpc({method:"model.ir.action.get_action_value",params:[e,i]},Sao.Session.current_session,!1)),n&&(e.keyword||(e.keyword={"ir.action.report":"form_report","ir.action.wizard":"form_action","ir.action.act_window":"form_relate"}[e.type])),Sao.Action.exec_action(e,t,i)},Sao.Action.evaluate=function(e,t,i){var n={};return"pyson_email"in(e=jQuery.extend({},e))&&(n=i.expr_eval(e.pyson_email),jQuery.isEmptyObject(n)&&(n={})),"subject"in n||(n.subject=e.name.replace(/_/g,"")),e.email=n,e}}(),function(){"use strict";var n=["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"];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 stretched-link","aria-label":Sao.i18n.gettext("Close")}).append(jQuery("<span/>",{"aria-hidden":!0}).append("×")).click(function(){this.text.text(""),this.el.hide()}.bind(this))).append(this.text),this.el.hide()},message:function(e,t){e?(this.el.removeClass("alert-success alert-info alert-warning alert-danger"),this.el.addClass("alert-"+(t||"info")),this.text.text(e),this.el.show()):(this.text.text(""),this.el.hide())}}),Sao.Window.Form=Sao.class_(Object,{init:function(n,e,t){t=t||{},this.screen=n,this.callback=e,this.many=t.many||0,this.domain=t.domain||null,this.context=t.context||null,this.save_current=t.save_current;var i=jQuery.when(t.title||"").then(function(e){n.breadcrumb.length?(i=jQuery.extend([],n.breadcrumb),e&&i.push(e),this.title=i.slice(-3,-1).map(function(e){return Sao.common.ellipsize(e,30)}).concat(i.slice(-1)).join(" › "),3<i.length&&(this.title="... › "+this.title)):(e=e||Sao.common.MODELNAME.get(this.screen.model_name),this.title=e);var t,i=this.screen.context._datetime;return i&&Sao.common.MODELHISTORY.contains(this.screen.model_name)?(t=Sao.common.date_format(this.screen.context.date_format),i=" @ "+Sao.common.format_datetime(t+" %H:%M:%S.%f",i),t=Sao.common.ellipsize(this.title,80-i.length)+i,e=this.title+i):t=Sao.common.ellipsize(this.title,80),t}.bind(this));this.prev_view=n.current_view,this.screen.screen_container.alternate_view=!0,this.info_bar=new Sao.Window.InfoBar;var o=t.view_type||"form";this.switch_prm=this.screen.switch_view(o).done(function(){t.new_&&this.screen.current_view.view_type==o&&this.screen.new_(void 0,t.rec_name)}.bind(this));var s=new Sao.Dialog("","window-form","lg",!1);this.el=s.modal,this.el.on("keydown",function(e){e.which==Sao.common.ESC_KEYCODE&&(e.preventDefault(),this.response("RESPONSE_CANCEL"))}.bind(this));var r,a,c,e=this.screen.attributes.readonly||this.screen.group.readonly;this._initial_value=null,"form"==o&&(t.new_?r=Sao.i18n.gettext("Delete"):(r=Sao.i18n.gettext("Cancel"),c=this.screen.current_record,this._initial_value=c.get_on_change_value(),c.group.parent&&c.model.fields[c.group.parent_name]&&(a=c.model.fields[c.group.parent_name],this._initial_value[c.group.parent_name]=a.get_eval(c))),s.footer.append(jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(r).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)))),t.new_&&this.many&&s.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?s.footer.append(jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("Save"))):s.footer.append(jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK"))),s.content.submit(function(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this)),"tree"==o&&(a=jQuery("<div/>",{class:"window-form-toolbar"}).appendTo(s.body),c=jQuery("<div/>",{class:"input-group input-group-sm"}).appendTo(a),this.wid_text=jQuery("<input/>",{type:"input"}).appendTo(a),this.wid_text.hide(),r=jQuery("<div/>",{class:"input-group-btn"}).appendTo(c),a=Sao.common.MODELACCESS.get(this.screen.model_name),c=function(i){return function(e){var t=jQuery(e.target);t.prop("disabled",!0),(i(e)||jQuery.when()).always(function(){t.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(r),this.but_switch.click(c(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(r),this.but_previous.click(c(this.previous.bind(this))),this.label=jQuery("<span/>",{class:"badge"}).appendTo(jQuery("<span/>",{class:"btn hidden-xs"}).appendTo(r)),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(r),this.but_next.click(c(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(r),this.but_add.click(c(this.add.bind(this))),this.but_add.prop("disabled",!a.read||e),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(r),this.but_remove.click(c(this.remove.bind(this))),this.but_remove.prop("disabled",!a.read||e)),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(r),this.but_new.click(c(this.new_.bind(this))),this.but_new.prop("disabled",!a.create||e),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(r),this.but_del.click(c(this.delete_.bind(this))),this.but_del.prop("disabled",!a.delete||e),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(r),this.but_undel.click(c(this.undelete.bind(this))),this.but_undel.prop("disabled",!a.delete||e),this.screen.message_callback=this.record_label.bind(this));var l=jQuery("<div/>").appendTo(s.body);s.body.append(this.info_bar.el),this.switch_prm.done(function(){this.screen.current_view.view_type!=o?this.destroy():(i.done(s.add_title.bind(s)),l.append(this.screen.screen_container.alternate_viewport),this.el.modal("show"))}.bind(this)),this.el.on("shown.bs.modal",function(e){this.screen.display().done(function(){this.screen.set_cursor()}.bind(this))}.bind(this)),this.el.on("hidden.bs.modal",function(e){jQuery(this).remove()})},record_label:function(e){var t="_",i=Sao.common.MODELACCESS.get(this.screen.model_name),n=this.screen.deletable,o=this.screen.group.readonly||this.screen.readonly;1<=e[0]?(t=e[0],this.domain&&this.but_remove.prop("disabled",!1),this.but_next.prop("disabled",e[0]>=e[1]),this.but_previous.prop("disabled",e[0]<=1),i.delete&&!o&&n&&(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));e=t+"/"+e[1];this.label.text(e).attr("title",e)},add:function(){var e=jQuery.extend([],this.domain),t=this.screen.model_name,i=this.wid_text.val(),n=function(e){var t=jQuery.when();if(!jQuery.isEmptyObject(e)){for(var i=[],n=0,o=e.length;n<o;n++)i.push(e[n][0]);this.screen.group.load(i,!0),t=this.screen.display()}t.done(function(){this.screen.set_cursor()}.bind(this)),this.entry.val("")}.bind(this),o=new Sao.common.DomainParser;new Sao.Window.Search(t,n,{sel_multi:!0,context:this.context,domain:e,search_filter:o.quote(i)})},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(r){this.screen.current_view.set_value();var e,a,t,i=this.screen.group.readonly;~["RESPONSE_OK","RESPONSE_ACCEPT"].indexOf(r)&&!i&&this.screen.current_record?this.screen.current_record.validate().then(function(e){return e&&this.screen.attributes.pre_validate?this.screen.current_record.pre_validate():e}.bind(this)).then(function(e){var t=jQuery.Deferred();if(e&&this.save_current)this.screen.save_current().then(t.resolve,t.reject);else if(e&&"form"==this.screen.current_view.view_type){var i,n=this.screen.current_view,o=[];for(i in n.widgets){var s=n.widgets[i];s.screen&&s.screen.attributes.pre_validate&&((s=s.screen.current_record)&&o.push(s.pre_validate()))}jQuery.when.apply(jQuery,o).then(t.resolve,t.reject)}else e?(this.info_bar.message(),t.resolve()):(this.info_bar.message(this.screen.invalid_message(),"danger"),t.reject());t.fail(function(){this.screen.display().done(function(){this.screen.set_cursor()}.bind(this))}.bind(this)),t.done(function(){"RESPONSE_ACCEPT"==r?(this.screen.new_(),this.screen.current_view.display().done(function(){this.screen.set_cursor()}.bind(this)),--this.many,0===this.many&&this.but_new.prop("disabled",!0)):(a=!0,this.callback(a),this.destroy())}.bind(this))}.bind(this)):(e=null,"RESPONSE_CANCEL"==r&&!i&&this.screen.current_record?(a=!1,i=(t=this.screen.current_record)._changed.id,t.id<0||this.save_current?e=this.screen.cancel_current(this._initial_value):t.has_changed()&&(t.cancel(),e=t.reload().then(function(){this.screen.display()}.bind(this))),i&&(t._changed.id=i)):a="RESPONSE_CANCEL"!=r,(e||jQuery.when()).then(function(){this.callback(a),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(e,t){this.resource=e.model.name+","+e.id,this.attachment_callback=t;var t=jQuery.extend({},e.get_context()),i=new Sao.Screen("ir.attachment",{domain:[["resource","=",this.resource]],mode:["tree","form"],context:t}),e=e.rec_name().then(function(e){return Sao.i18n.gettext("Attachments (%1)",e)});Sao.Window.Attachment._super.init.call(this,i,this.callback,{view_type:"tree",title:e}),this.switch_prm=this.switch_prm.then(function(){return i.search_filter()})},callback:function(e){var t=jQuery.when();e&&(t=this.screen.save_current()),this.attachment_callback&&t.always(this.attachment_callback.bind(this))},add_data:function(i,n){var o=this.screen;this.switch_prm.then(function(){o.new_().then(function(e){var t=e.model.fields.data;e.field_set_client(t.description.filename,n),e.field_set_client("data",i),o.display()})})},add_uri:function(t){var i=this.screen;this.switch_prm.then(function(){i.current_record=null,i.switch_view("form").then(function(){i.new_().then(function(e){e.field_set_client("link",t),e.field_set_client("type","link"),i.display()})})})},add_text:function(t){var i=this.screen;this.switch_prm.then(function(){i.current_record=null,i.switch_view("form").then(function(){i.new_().then(function(e){e.field_set_client("description",t),i.display()})})})}}),Sao.Window.Attachment.get_attachments=function(a){var c,e;e=a&&0<=a.id?(c=a.get_context(),Sao.rpc({method:"model.ir.attachment.search_read",params:[[["resource","=",a.model.name+","+a.id]],0,20,null,["rec_name","name","type","link"],c]},a.model.session)):jQuery.when([]);return e.then(function(e){return e.map(function(e){var t=e.rec_name;if("link"==e.type)return[t,e.link];var i,n,o,s,r=Sao.Window.Attachment["open_"+e.type];return[t,(i=r,n=e,o=c,s=a.model.session,function(){return i(n,o,s)})]})})},Sao.Window.Attachment.open_data=function(t,e,i){Sao.rpc({method:"model.ir.attachment.read",params:[[t.id],["data"],e]},i).then(function(e){Sao.common.download_file(e[0].data,t.name)})},Sao.Window.Note=Sao.class_(Sao.Window.Form,{init:function(e,t){this.resource=e.model.name+","+e.id,this.note_callback=t;var t=jQuery.extend({},e.get_context()),i=new Sao.Screen("ir.note",{domain:[["resource","=",this.resource]],mode:["tree","form"],context:t}),e=e.rec_name().then(function(e){return Sao.i18n.gettext("Notes (%1)",e)});Sao.Window.Note._super.init.call(this,i,this.callback,{view_type:"tree",title:e}),this.switch_prm=this.switch_prm.then(function(){return i.search_filter()})},callback:function(e){var t,i=jQuery.when();e&&(t=this.screen.group.model.fields.unread,this.screen.group.forEach(function(e){(e.get_loaded()||e.id<0)&&(e._changed.unread||t.set_client(e,!1))}.bind(this)),i=this.screen.save_current()),this.note_callback&&i.always(this.note_callback.bind(this))}}),Sao.Window.Search=Sao.class_(Object,{init:function(e,t,i){var n=(i=i||{}).views_preload||{};this.model_name=e,this.domain=i.domain||[],this.context=i.context||{},this.order=i.order||null,this.view_ids=i.view_ids,this.views_preload=n,this.sel_multi=i.sel_multi,this.callback=t;t=(t=i.title)||Sao.common.MODELNAME.get(e);this.title=t,this.exclude_field=i.exclude_field||null;var o=new Sao.Dialog(Sao.i18n.gettext("Search %1",this.title),"","lg");this.el=o.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(o.footer),jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("Find")).click(function(){this.response("RESPONSE_APPLY")}.bind(this)).appendTo(o.footer),i.new_&&Sao.common.MODELACCESS.get(e).create&&jQuery("<button/>",{class:"btn btn-default",type:"button"}).text(Sao.i18n.gettext("New")).click(function(){this.response("RESPONSE_ACCEPT")}.bind(this)).appendTo(o.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(o.footer),o.content.submit(function(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this)),this.screen=new Sao.Screen(e,{mode:["tree"],context:this.context,domain:this.domain,order:this.order,view_ids:i.view_ids,views_preload:n,row_activate:this.activate.bind(this),readonly:!0,breadcrumb:[this.title]}),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,o.body.append(this.screen.screen_container.el),this.el.modal("show"),this.screen.display(),void 0!==i.search_filter&&this.screen.search_filter(i.search_filter)}.bind(this))}.bind(this)),this.el.on("hidden.bs.modal",function(e){jQuery(this).remove()})},activate:function(){this.response("RESPONSE_OK")},response:function(e){var t,i,n,o=[];if("RESPONSE_OK"==e)t=this.screen.current_view.selected_records;else{if("RESPONSE_APPLY"==e)return void this.screen.search_filter();if("RESPONSE_ACCEPT"==e){e=jQuery.extend([],this.view_ids);jQuery.isEmptyObject(e)||e.shift();var s=new Sao.Screen(this.model_name,{domain:this.domain,context:this.context,order:this.order,mode:["form"],view_ids:e,views_preload:this.views_preload,exclude_field:this.exclude_field});return this.el.modal("hide"),void new Sao.Window.Form(s,function(e){e?(e=s.current_record,this.callback([[e.id,e._values.rec_name||""]])):this.callback(null)}.bind(this),{new_:!0,save_current:!0})}}if(t)for(i in t)n=t[i],o.push([n.id,n._values.rec_name||""]);this.callback(o),this.el.modal("hide")}}),Sao.Window.Preferences=Sao.class_(Object,{init:function(e){this.callback=e;var t=new Sao.Dialog("Preferences","","lg");this.el=t.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(t.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(t.footer),t.content.submit(function(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this)),this.screen=new Sao.Screen("res.user",{mode:[]}),this.screen.attributes.readonly=!1,this.screen.group.readonly=!1,this.screen.group.skip_model_access=!0;var i=function(e){this.screen.current_record.cancel(),this.screen.current_record.set(e),this.screen.current_record.id=this.screen.model.session.user_id,this.screen.current_record.validate(null,!0).then(function(){this.screen.display(!0)}.bind(this)),t.body.append(this.screen.screen_container.el),this.el.modal("show")};this.el.on("hidden.bs.modal",function(e){jQuery(this).remove()}),this.screen.model.execute("get_preferences_fields_view",[],{}).then(function(e){this.screen.add_view(e),this.screen.switch_view().done(function(){this.screen.new_(!1),this.screen.model.execute("get_preferences",[!1],{}).then(i.bind(this),this.destroy)}.bind(this))}.bind(this),this.destroy)},response:function(e){var t=function(){this.destroy(),this.callback()}.bind(this),i=jQuery.when();(i="RESPONSE_OK"==e?this.screen.current_record.validate().then(function(e){if(e){e=jQuery.extend({},this.screen.get());return this.screen.model.execute("set_preferences",[e],{})}}.bind(this)):i).done(t)},destroy:function(){this.el.modal("hide")}}),Sao.Window.Revision=Sao.class_(Object,{init:function(e,t){this.callback=t;t=new Sao.Dialog(Sao.i18n.gettext("Revision"),"","lg");this.el=t.modal,jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(Sao.i18n.gettext("Cancel")).click(function(){this.response("RESPONSE_CANCEL")}.bind(this)).appendTo(t.footer),jQuery("<button/>",{class:"btn btn-primary",type:"submit"}).text(Sao.i18n.gettext("OK")).appendTo(t.footer),t.content.submit(function(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this));t=jQuery("<div/>",{class:"form-group"}).appendTo(t.body);jQuery("<label/>",{for:"revision",text:"Revision"}).appendTo(t),this.select=jQuery("<select/>",{class:"form-control",id:"revision",placeholder:Sao.i18n.gettext("Revision")}).appendTo(t);var i=Sao.common.date_format();this.select.append(jQuery("<option/>",{value:null,text:""})),e.forEach(function(e){var t=e[2];e=e[0],this.select.append(jQuery("<option/>",{value:e.valueOf(),text:Sao.common.format_datetime(i+" %H:%M:%S.%f",e)+" "+t}))}.bind(this)),this.el.modal("show"),this.el.on("hidden.bs.modal",function(e){jQuery(this).remove()})},response:function(e){var t=null;"RESPONSE_OK"==e&&(t=(t=this.select.val())&&Sao.DateTime(parseInt(t,10))),this.el.modal("hide"),this.callback(t)}}),Sao.Window.CSV=Sao.class_(Object,{init:function(e){this.dialog=new Sao.Dialog(e,"csv","lg"),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(e){this.response("RESPONSE_OK"),e.preventDefault()}.bind(this)).appendTo(this.dialog.footer);var t=jQuery("<div/>",{class:"row"}).appendTo(this.dialog.body),e=jQuery("<div/>",{class:"col-md-5"}).append(jQuery("<div/>",{class:"panel panel-default"}).append(jQuery("<div/>",{class:"panel-heading"}).append(jQuery("<h3/>",{class:"panel-title",text:Sao.i18n.gettext("All Fields")})))).appendTo(t);this.fields_all=jQuery("<ul/>",{class:"list-unstyled column-fields panel-body"}).css("cursor","pointer").appendTo(e.find(".panel")),this.model_populate(this._get_fields(this.screen.model_name)),this.view_populate(this.fields_model,this.fields_all),this.column_buttons=jQuery("<div/>",{class:"col-md-2"}).appendTo(t);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(e,t){this.sig_sel_add(t)}.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);e=jQuery("<div/>",{class:"col-md-5"}).append(jQuery("<div/>",{class:"panel panel-default"}).append(jQuery("<div/>",{class:"panel-heading"}).append(jQuery("<h3/>",{class:"panel-title",text:Sao.i18n.gettext("Fields Selected")})))).appendTo(t);this.fields_selected=jQuery("<ul/>",{class:"list-unstyled column-fields panel-body"}).css("cursor","pointer").appendTo(e.find(".panel")),this.chooser_form=jQuery("<div/>",{class:"form-inline"}).appendTo(this.dialog.body);t=jQuery("<div/>",{}).appendTo(this.dialog.body),jQuery("<label/>",{text:Sao.i18n.gettext("CSV Parameters")}).append(jQuery("<span/>",{class:"caret"}).html(" ")).css("cursor","pointer").on("click",function(){this.expander_csv.collapse("toggle")}.bind(this)).appendTo(t);this.expander_csv=jQuery("<div/>",{id:"expander_csv",class:"collapse form-inline"}).appendTo(t);e=jQuery("<label/>",{text:Sao.i18n.gettext("Delimiter:"),class:"control-label",for:"input-delimiter"}),t=",";navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(t=";"),this.el_csv_delimiter=jQuery("<input/>",{type:"text",class:"form-control",id:"input-delimiter",size:"1",maxlength:"1",value:t}),jQuery("<div/>",{class:"form-group"}).append(e).append(this.el_csv_delimiter).appendTo(this.expander_csv),this.expander_csv.append(" ");e=jQuery("<label/>",{text:Sao.i18n.gettext("Quote Char:"),class:"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(e).append(this.el_csv_quotechar).appendTo(this.expander_csv),this.expander_csv.append(" "),this.el.modal("show"),this.el.on("hidden.bs.modal",function(){jQuery(this).remove()})},_get_fields:function(e){return Sao.rpc({method:"model."+e+".fields_get"},this.session,!1)},on_row_expanded:function(e){var t=jQuery("<ul/>").css("list-style","none").insertAfter(e.view);this.children_expand(e),this.view_populate(e.children,t)},destroy:function(){this.el.modal("hide")}}),Sao.Window.Import=Sao.class_(Sao.Window.CSV,{init:function(e,t){this.name=e,this.screen=t,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",e)),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);t=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(t).append(jQuery("<div/>",{class:"col-sm-6"}).append(this.file_input)).appendTo(this.chooser_form);e=jQuery("<label/>",{text:Sao.i18n.gettext("Encoding:"),class:"control-label",for:"input-encoding"});this.el_csv_encoding=jQuery("<select/>",{class:"form-control",id:"input-encoding"});for(var i=0;i<n.length;i++)jQuery("<option/>",{val:n[i]}).append(n[i]).appendTo(this.el_csv_encoding);t="utf-8";navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(t="cp1252"),this.el_csv_encoding.children('option[value="'+t+'"]').attr("selected","selected"),jQuery("<div/>",{class:"form-group"}).append(e).append(this.el_csv_encoding).appendTo(this.expander_csv),this.expander_csv.append(" ");e=jQuery("<label/>",{text:Sao.i18n.gettext("Lines to Skip:"),class:"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(e).append(this.el_csv_skip).appendTo(this.expander_csv),this.expander_csv.append(" "),Sortable.create(this.fields_selected.get(0),{handle:".draggable-handle",ghostClass:"dragged-row"})},sig_sel_add:function(e){var t=(e=jQuery(e)).attr("field"),i=jQuery("<li/>",{field:t,class:"draggable-handle"}).text(e.attr("name")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-drag")).click(function(e){e.ctrlKey||e.metaKey?i.toggleClass("bg-primary"):jQuery(e.target).addClass("bg-primary").siblings().removeClass("bg-primary")}).appendTo(this.fields_selected)},view_populate:function(s,t){Object.keys(s).sort(function(e,t){return s[t].string<s[e].string?-1:1}).reverse().forEach(function(i){var e=s[i].string||i,n=jQuery("<li/>",{field:s[i].field,name:s[i].name}).text(e).click(function(e){e.ctrlKey||e.metaKey?n.toggleClass("bg-primary"):(this.fields_all.find("li").removeClass("bg-primary"),n.addClass("bg-primary"))}.bind(this)).appendTo(t);s[i].view=n;var o=Sao.common.ICONFACTORY.get_icon_img("tryton-arrow-right").data("expanded",!1).click(function(e){var t;e.stopPropagation();e=o.data("expanded");o.data("expanded",!e),e?(t="tryton-arrow-right",n.next("ul").remove()):(t="tryton-arrow-down",this.on_row_expanded(s[i])),Sao.common.ICONFACTORY.get_icon_url(t).then(function(e){o.attr("src",e)})}.bind(this)).prependTo(n);o.css("visibility",s[i].relation?"visible":"hidden")}.bind(this))},model_populate:function(o,s,r,a){s=s||this.fields_model,r=r||"",a=a||"",Object.keys(o).forEach(function(e){var t,i,n;o[e].readonly&&"id"!=e||(t=o[e].string||e,t=a+t,i="one2many"==o[e].type?o[e].relation:null,n={name:t,field:r+e,relation:i,string:o[e].string},s[e]=n,this.fields[r+e]=n,this.fields_invert[t]=r+e,i&&(n.children={}))}.bind(this))},children_expand:function(e){jQuery.isEmptyObject(e.children)&&e.relation&&this.model_populate(this._get_fields(e.relation),e.children,e.field+"/",e.name+"/")},autodetect:function(){this.file_input.val()?(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(e,t,i,n){Sao.common.warning(Sao.i18n.gettext("An error occured in loading the file."))},complete:function(e){e.data[0].forEach(function(e){var t,i;e in this.fields_invert||e in this.fields||(t=this.fields_model,i=e.split("/").slice(0,-1),this._traverse(t,"",i,0)),this._auto_select(e)}.bind(this))}.bind(this)})):Sao.common.message.run(Sao.i18n.gettext("You must select an import file first."))},_auto_select:function(e){var t,i;if(e in this.fields_invert)i=this.fields_invert[t=e];else{if(!(e in this.fields))return void Sao.common.warning.run(Sao.i18n.gettext("Error processing the file at field %1.",e),Sao.i18n.gettext("Error"));t=this.fields[e].name,i=[e]}var n=jQuery("<li/>",{field:i}).text(t).click(function(){n.addClass("bg-primary").siblings().removeClass("bg-primary")}).appendTo(this.fields_selected)},_traverse:function(e,t,i,n){for(var o,s=Object.keys(e),r=0;r<s.length;r++)if((o=e[s[r]]).name==t+i[n]||o.field==t+i[n]){this.children_expand(o),t+=i[n]+"/",o.children&&this._traverse(o.children,t,i,++n);break}},response:function(e){var i;"RESPONSE_OK"==e?(i=[],this.fields_selected.children("li").each(function(e,t){i.push(t.getAttribute("field"))}),(e=this.file_input.val())?this.import_csv(e,i).then(function(){this.destroy()}.bind(this)):this.destroy()):this.destroy()},import_csv:function(e,t){var i=this.el_csv_skip.val(),n=this.el_csv_encoding.val(),o=jQuery.Deferred();return Papa.parse(this.file_input[0].files[0],{delimiter:this.el_csv_delimiter.val(),quoteChar:this.el_csv_quotechar.val(),encoding:n,error:function(e,t,i,n){Sao.common.warning.run(Sao.i18n.gettext("Error occured in loading the file")).always(o.reject)},complete:function(e){e=e.data.slice(i,e.data.length-1);Sao.rpc({method:"model."+this.screen.model_name+".import_data",params:[t,e,{}]},this.session).then(function(e){return Sao.common.message.run(Sao.i18n.ngettext("%1 record imported","%1 records imported",e))}).then(o.resolve,o.reject)}.bind(this)}),o.promise()}}),Sao.Window.Export=Sao.class_(Sao.Window.CSV,{init:function(e,t,i){this.name=e,this.screen=t,this.session=Sao.Session.current_session,Sao.Window.Export._super.init.call(this,Sao.i18n.gettext("CSV Export: %1",e));var n=this.screen.model.fields;i.forEach(function(e){var t=n[e].description.type;"selection"==t?this.sel_field(e+".translated"):"reference"==t?(this.sel_field(e+".translated"),this.sel_field(e+"/rec_name")):this.sel_field(e)}.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),this.button_url=jQuery("<a/>",{class:"btn btn-default btn-block",target:"_blank",rel:"noreferrer noopener"}).text(" "+Sao.i18n.gettext("URL Export")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-public")).appendTo(this.column_buttons),this.dialog.body.on("change click",this.set_url.bind(this)),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);i=jQuery("<div/>",{class:"panel panel-default"}).append(jQuery("<div/>",{class:"panel-heading"}).append(jQuery("<h3/>",{class:"panel-title",text:Sao.i18n.gettext("Predefined Exports")}))).appendTo(this.column_buttons);this.predef_exports_list=jQuery("<ul/>",{class:"list-unstyled predef-exports panel-body"}).css("cursor","pointer").appendTo(i),this.selected_records=jQuery("<select/>",{class:"form-control",id:"input-records"}).append(jQuery("<option/>",{val:!0,selected:!this.screen_is_tree}).text(Sao.i18n.gettext("Selected Records"))).append(jQuery("<option/>",{val:!1,selected:!!this.screen_is_tree}).text(Sao.i18n.gettext("Listed Records"))),this.ignore_search_limit=jQuery("<input/>",{type:"checkbox"}),this.selected_records.change(function(){this.ignore_search_limit.parents(".form-group").first().toggle(!JSON.parse(this.selected_records.val())&&!this.screen_is_tree)}.bind(this)),jQuery("<div/>",{class:"form-group"}).appendTo(this.chooser_form).append(jQuery("<label/>",{text:Sao.i18n.gettext("Export:"),class:"control-label",for:"input-records"})).append(this.selected_records),jQuery("<div/>",{class:"form-group"}).appendTo(this.chooser_form).append(jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>",{text:" "+Sao.i18n.gettext("Ignore search limit")}).prepend(this.ignore_search_limit))).hide(),this.el_csv_locale=jQuery("<input/>",{type:"checkbox",checked:"checked"}),jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>",{text:" "+Sao.i18n.gettext("Use locale format")}).prepend(this.el_csv_locale)).appendTo(this.expander_csv),this.expander_csv.append(" "),this.el_add_field_names=jQuery("<input/>",{type:"checkbox",checked:"checked"}),jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>",{text:" "+Sao.i18n.gettext("Add Field Names")}).prepend(this.el_add_field_names)).appendTo(this.expander_csv),this.expander_csv.append(" "),this.set_url(),Sortable.create(this.fields_selected.get(0),{handle:".draggable-handle",ghostClass:"dragged-row"})},get context(){return this.screen.context},get screen_is_tree(){return Boolean(this.screen.current_view&&"tree"==this.screen.current_view.view_type&&this.screen.current_view.children_field)},view_populate:function(s,t){Object.keys(s).sort(function(e,t){return s[t].string<s[e].string?-1:1}).reverse().forEach(function(i){var e=s[i].path,n=jQuery("<li/>",{path:e}).text(s[i].string).click(function(e){e.ctrlKey||e.metaKey?n.toggleClass("bg-primary"):(this.fields_all.find("li").removeClass("bg-primary"),n.addClass("bg-primary"))}.bind(this)).appendTo(t);s[i].view=n;var o=Sao.common.ICONFACTORY.get_icon_img("tryton-arrow-right").data("expanded",!1).click(function(e){var t;e.stopPropagation();e=o.data("expanded");o.data("expanded",!e),e?(t="tryton-arrow-right",n.next("ul").remove()):(t="tryton-arrow-down",this.on_row_expanded(s[i])),Sao.common.ICONFACTORY.get_icon_url(t).then(function(e){o.attr("src",e)})}.bind(this)).prependTo(n);o.css("visibility",s[i].children?"visible":"hidden")}.bind(this))},model_populate:function(o,s,r,a){s=s||this.fields_model,r=r||"",a=a||"",Object.keys(o).forEach(function(e){var t=o[e],i=t.string||e,n=[{name:e,field:t,string:i}];"selection"==t.type?n.push({name:e+".translated",field:t,string:Sao.i18n.gettext("%1 (string)",i)}):"reference"==t.type&&(n.push({name:e+".translated",field:t,string:Sao.i18n.gettext("%1 (model name)",i)}),n.push({name:e+"/rec_name",field:t,string:Sao.i18n.gettext("%1 (record name)",i)})),n.forEach(function(e){var t=r+e.name,i=a+e.string,i={path:t,string:e.string,long_string:i,relation:e.field.relation};s[e.name]=i,this.fields[t]=i,-1==e.name.indexOf(".")&&e.field.relation&&(i.children={})}.bind(this))}.bind(this))},children_expand:function(e){jQuery.isEmptyObject(e.children)&&e.relation&&this.model_populate(this._get_fields(e.relation),e.children,e.path+"/",e.long_string+"/")},sig_sel_add:function(e){e=(e=jQuery(e)).attr("path");this.sel_field(e)},fill_predefwin:function(){Sao.rpc({method:"model.ir.export.search_read",params:[[["resource","=",this.screen.model_name]],0,null,null,["name","export_fields.name"],{}]},this.session).done(function(e){e.forEach(function(e){this.predef_exports[e.id]=e["export_fields."].map(function(e){return e.name}),this.add_to_predef(e.id,e.name),this.predef_exports_list.children("li").first().focus()}.bind(this))}.bind(this))},add_to_predef:function(e,t){var i=jQuery("<li/>",{text:t,export_id:e,tabindex:0}).on("keypress",function(e){e=e.keyCode||e.which;13!=e&&32!=e||i.click()}).click(function(e){i.toggleClass("bg-primary").siblings().removeClass("bg-primary"),i.hasClass("bg-primary")&&this.sel_predef(i.attr("export_id"))}.bind(this));this.predef_exports_list.append(i)},addreplace_predef:function(){for(var i,e,n,o=[],t=this.fields_selected.children("li"),s=0;s<t.length;s++)o.push(t[s].getAttribute("path"));0!==o.length&&(e=function(t){var e=i?Sao.rpc({method:"model.ir.export.update",params:[[i],o,this.context]},this.session).then(function(){return i}):Sao.rpc({method:"model.ir.export.create",params:[[{name:t,resource:this.screen.model_name,export_fields:[["create",o.map(function(e){return{name:e}})]]}],this.context]},this.session).then(function(e){return e[0]});return e.then(function(e){this.session.cache.clear("model."+this.screen.model_name+".view_toolbar_get"),this.predef_exports[e]=o,0===n.length?this.add_to_predef(e,t):n.attr("export_id",e)}.bind(this))}.bind(this),0===(n=this.predef_exports_list.children("li.bg-primary")).length?(i=null,Sao.common.ask.run(Sao.i18n.gettext("What is the name of this export?")).then(e)):(i=n.attr("export_id"),Sao.common.sur.run(Sao.i18n.gettext("Override %1 definition?",n.text())).then(e)))},remove_predef:function(){var e,t=this.predef_exports_list.children("li.bg-primary");0!==t.length&&(e=jQuery(t).attr("export_id"),Sao.rpc({method:"model.ir.export.delete",params:[[e],{}]},this.session).then(function(){this.session.cache.clear("model."+this.screen.model_name+".view_toolbar_get"),delete this.predef_exports[e],t.remove()}.bind(this)))},sel_predef:function(e){this.fields_selected.empty(),this.predef_exports[e].forEach(function(e){var t,i;e in this.fields||(t=this.fields_model,i=e.split("/").slice(0,-1),this._traverse(t,"",i,0)),e in this.fields&&this.sel_field(e)}.bind(this))},_traverse:function(e,t,i,n){for(var o,s=Object.keys(e),r=0;r<s.length;r++)if((o=e[s[r]]).path==t+i[n]){this.children_expand(o),t+=i[n]+"/",o.children&&this._traverse(o.children,t,i,++n);break}},sel_field:function(e){var t=this.fields[e].long_string;this.fields[e].relation&&(e+="/rec_name");var i=jQuery("<li/>",{path:e,class:"draggable-handle"}).text(t).click(function(e){e.ctrlKey||e.metaKey?i.toggleClass("bg-primary"):jQuery(e.target).addClass("bg-primary").siblings().removeClass("bg-primary")}).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-drag")).appendTo(this.fields_selected)},response:function(e){var i,n,t,o,s;"RESPONSE_OK"==e?(i=[],n=[],this.fields_selected.children("li").each(function(e,t){i.push(t.getAttribute("path")),n.push(t.innerText)}),(JSON.parse(this.selected_records.val())?(s=this.screen.selected_records.map(function(e){return e.id}),t=this.screen.selected_paths,Sao.rpc({method:"model."+this.screen.model_name+".export_data",params:[s,i,this.context]},this.session)):this.screen_is_tree?(s=this.screen.listed_records.map(function(e){return e.id}),t=this.screen.listed_paths,Sao.rpc({method:"model."+this.screen.model_name+".export_data",params:[s,i,this.context]},this.session)):(e=this.screen.search_domain(this.screen.screen_container.get_text()),s=this.ignore_search_limit.prop("checked")?(o=0,null):(o=this.screen.offset,this.screen.limit),Sao.rpc({method:"model."+this.screen.model_name+".export_data_domain",params:[e,i,o,s,this.screen.order,this.context]},this.session))).then(function(e){this.export_csv(n,e,t).then(function(){this.destroy()}.bind(this))}.bind(this))):this.destroy()},export_csv:function(e,t,i){var n=this.el_csv_locale.prop("checked"),o={};o.data=t.map(function(e,t){t=i&&i[t]?i[t].length-1:0;return Sao.Window.Export.format_row(e,t,n)}),this.el_add_field_names.is(":checked")&&(o.fields=e);o=Papa.unparse(o,{quoteChar:this.el_csv_quotechar.val(),delimiter:this.el_csv_delimiter.val()});return navigator.platform&&"Win"==navigator.platform.slice(0,3)&&(o=Sao.BOM_UTF8+o),Sao.common.download_file(o,this.name+".csv",{type:"text/csv;charset=utf-8"}),Sao.common.message.run(Sao.i18n.ngettext("%1 record saved","%1 records saved",t.length))},set_url:function(){var e,t=[this.session.database,"data",this.screen.model_name],i=[];JSON.parse(this.selected_records.val())?e=this.screen.current_view.selected_records.map(function(e){return e.id}):(e=this.screen.search_domain(this.screen.screen_container.get_text()),this.ignore_search_limit.prop("checked")||(i.push(["s",this.screen.limit.toString()]),i.push(["p",Math.floor(this.screen.offset/this.screen.limit).toString()])),this.screen.order&&this.screen.order.forEach(function(e){i.push(["o",e.map(function(e){return e}).join(",")])})),i.splice(0,0,["d",JSON.stringify(Sao.rpc.prepareObject(e))]),jQuery.isEmptyObject(this.screen.local_context)||i.push(["c",JSON.stringify(Sao.rpc.prepareObject(this.screen.local_context))]),this.fields_selected.children("li").each(function(e,t){i.push(["f",t.getAttribute("path")])}),i.push(["dl",this.el_csv_delimiter.val()]),i.push(["qc",this.el_csv_quotechar.val()]),this.el_add_field_names.is(":checked")||i.push(["h","0"]),this.el_csv_locale.prop("checked")&&i.push(["loc","1"]),i=i.map(function(e){return e.map(encodeURIComponent).join("=")}).join("&"),this.button_url.attr("href","/"+t.join("/")+"?"+i)}}),Sao.Window.Export.format_row=function(e,i,n){void 0===i&&(i=0),void 0===n&&(n=!0);var o=[];return e.forEach(function(e,t){n?e.isDateTime?e=e.format(Sao.common.date_format()+" "+Sao.common.moment_format("%X")):e.isDate?e=e.format(Sao.common.date_format()):e.isTimeDelta?e=Sao.common.timedelta.format(e,{s:1,m:60,h:3600}):isNaN(Number(e))||(e=e.toLocaleString(Sao.i18n.BC47(Sao.i18n.getlang()),{minimumFractionDigits:0,maximumFractionDigits:20})):e.isTimeDelta?e=e.asSeconds():"boolean"==typeof e&&(e+=0),0===t&&i&&"string"==typeof e&&(e=" ".repeat(i)+e),o.push(e)}),o},Sao.Window.EmailEntry=Sao.class_(Sao.common.InputCompletion,{init:function(e,t){this.session=t,Sao.Window.EmailEntry._super.init.call(this,e,this._email_source,this._email_match_selected,this._email_format)},_email_match_selected:function(e){this.input.val(e[2])},_email_source:function(e){return this.input[0].selectionStart<this.input.val().length?jQuery.when([]):Sao.rpc({method:"model.ir.email.complete",params:[e,Sao.config.limit,{}]},this.session)},_email_format:function(e){return e[1]}}),Sao.Window.Email=Sao.class_(Object,{init:function(e,t,i,n){this.record=t,this.dialog=new Sao.Dialog(Sao.i18n.gettext("E-mail %1",e),"email","lg"),this.el=this.dialog.modal,this.dialog.content.addClass("form-horizontal");var o=this.dialog.body;function s(e,t,i){var n=jQuery("<div/>",{class:"form-group"}).appendTo(o);jQuery("<label/>",{class:"control-label col-sm-1",text:t,for:"email-"+e}).appendTo(n);n=jQuery("<input/>",{type:"text",class:"form-control input-sm",id:"email-"+e}).appendTo(jQuery("<div/>",{class:"col-sm-11"}).appendTo(n));return i&&n.attr("required",!0),n}this.to=s("to",Sao.i18n.gettext("To:"),!0),this.cc=s("cc",Sao.i18n.gettext("Cc:")),this.bcc=s("bcc",Sao.i18n.gettext("Bcc:")),[this.to,this.cc,this.bcc].forEach(function(e){new Sao.Window.EmailEntry(e,this.record.model.session)}.bind(this)),this.subject=s("subject",Sao.i18n.gettext("Subject:"),!0);e=jQuery("<div/>",{class:"panel panel-default"}).appendTo(o).append(jQuery("<div/>",{class:"panel-heading"}).append(Sao.common.richtext_toolbar()));this.body=jQuery("<div>",{class:"email-richtext form-control input-sm mousetrap",contenteditable:!0,spellcheck:!0,id:"email-body"}).appendTo(jQuery("<div/>",{class:"panel-body"}).appendTo(e));var r=jQuery("<div/>",{class:"col-md-4"}).appendTo(o);jQuery("<label/>",{text:Sao.i18n.gettext("Reports")}).appendTo(r),this.print_actions={};for(var a=0;a<i.length;a++){var c=i[a],l=jQuery("<input/>",{type:"checkbox"});jQuery("<div/>",{class:"checkbox"}).append(jQuery("<label/>").text(Sao.i18n.gettext(c.name)).prepend(l)).appendTo(r),this.print_actions[c.id]=l}e=jQuery("<div/>",{class:"col-md-4"}).appendTo(o);jQuery("<label/>",{text:Sao.i18n.gettext("Attachments")}).appendTo(e),this.attachments=jQuery("<select/>",{class:"form-control input-sm",name:"attachments",multiple:!0}).appendTo(e),Sao.rpc({method:"model.ir.attachment.search_read",params:[[["resource","=",t.model.name+","+t.id],["OR",["data","!=",null],["file_id","!=",null]]],0,null,null,["rec_name"],t.get_context()]},t.model.session).then(function(e){e.forEach(function(e){this.attachments.append(jQuery("<option/>",{value:JSON.stringify(e.id),text:e.rec_name}))}.bind(this))}.bind(this)),this.files=jQuery("<div/>",{class:"col-md-4"}).appendTo(o),jQuery("<label/>",{text:Sao.i18n.gettext("Files")}).appendTo(this.files),this._add_file_button(),jQuery("<button/>",{class:"btn btn-link",type:"button"}).text(" "+Sao.i18n.gettext("Cancel")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-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("Send")).prepend(Sao.common.ICONFACTORY.get_icon_img("tryton-send")).appendTo(this.dialog.footer),this.dialog.content.submit(function(e){e.preventDefault(),this.response("RESPONSE_OK")}.bind(this)),this._fill_with(n),this.el.modal("show"),this.el.on("hidden.bs.modal",function(){jQuery(this).remove()})},_add_file_button:function(){var e=jQuery("<div/>").appendTo(this.files),t=jQuery("<input/>",{type:"file"}).appendTo(e),i=jQuery("<a/>",{class:"close",title:Sao.i18n.gettext("Remove File")}).append(jQuery("<span/>",{"aria-hidden":!0,text:"x"})).append(jQuery("<span/>",{class:"sr-only"}).text(Sao.i18n.gettext("Remove")));i.hide(),i.appendTo(e),t.on("change",function(){i.show(),this._add_file_button()}.bind(this)),i.click(function(){e.remove()})},get_files:function(){var n=[],o=[];return this.files.find("input[type=file]").each(function(e,t){var i;t.files.length&&(i=jQuery.Deferred(),n.push(i),Sao.common.get_file_data(t.files[0],function(e,t){o.push([t,e]),i.resolve()}))}),jQuery.when.apply(jQuery,n).then(function(){return o})},get_attachments:function(){var e=this.attachments.val();return e?e.map(function(e){return JSON.parse(e)}):[]},_fill_with:function(e){e=e?Sao.rpc({method:"model.ir.email.template.get",params:[e,this.record.id,{}]},this.record.model.session):Sao.rpc({method:"model.ir.email.template.get_default",params:[this.record.model.name,this.record.id,{}]},this.record.model.session);e.then(function(e){this.to.val((e.to||[]).join(", ")),this.cc.val((e.cc||[]).join(", ")),this.bcc.val((e.bcc||[]).join(", ")),this.subject.val(e.subject||""),this.body.html(Sao.HtmlSanitizer.sanitize(e.body||""));var t,i=e.reports||[];for(t in this.print_actions)this.print_actions[t].prop("checked",~i.indexOf(parseInt(t,10)))}.bind(this))},response:function(e){if("RESPONSE_OK"==e){var t,i=this.to.val(),n=this.cc.val(),o=this.bcc.val(),s=this.subject.val(),r=Sao.common.richtext_normalize(this.body.html()),a=[];for(t in this.print_actions)this.print_actions[t].prop("checked")&&a.push(t);var c=this.get_attachments(),l=this.record;this.get_files().then(function(e){return Sao.rpc({method:"model.ir.email.send",params:[i,n,o,s,r,e,[l.model.name,l.id],a,c,{}]},l.model.session)}).then(function(){this.destroy()}.bind(this))}else this.destroy()},destroy:function(){this.el.modal("hide")}})}(),function(){"use strict";Sao.Wizard=Sao.class_(Object,{init:function(e){this.widget=jQuery("<div/>",{class:"wizard"}),this.name=e||Sao.i18n.gettext("Wizard"),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(e){this.action=e.action,this.action_id=e.data.action_id,this.id=e.data.id,this.ids=e.data.ids,this.model=e.data.model,this.context=jQuery.extend({},e.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(e){this.session_id=e[0],this.start_state=this.state=e[1],this.end_state=e[2],this.process()}.bind(this),function(){this.destroy()}.bind(this))},process:function(){this.__processing||this.__waiting_response||function(){var e,t;this.state!=this.end_state?(e=jQuery.extend({},this.context),t={},this.screen&&(t[this.screen_state]=this.screen.get_on_change_value()),Sao.rpc({method:"wizard."+this.action+".execute",params:[this.session_id,t,this.state,e]},this.session).then(function(e){var t;e.view?(this.clean(),t=e.view,this.update(t.fields_view,t.buttons),this.screen.new_(!1).then(function(){this.screen.current_record.set_default(t.defaults),this.update_buttons(),this.screen.set_cursor()}.bind(this)),this.screen_state=t.state,this.__waiting_response=!0):this.state=this.end_state;var i=function(){e.actions&&e.actions.forEach(function(e){var t=jQuery.extend({},this.context);delete t.active_id,delete t.active_ids,delete t.active_model,delete t.action_id,Sao.Action.execute(e[0],e[1],t)}.bind(this))}.bind(this);this.state==this.end_state?this.end().then(i):i(),this.__processing=!1}.bind(this),function(e){this.__processing=!1}.bind(this))):this.end()}.call(this)},destroy:function(e){},end:function(){return Sao.rpc({method:"wizard."+this.action+".delete",params:[this.session_id,this.session.context]},this.session).then(function(e){this.destroy(e)}.bind(this))},clean:function(){this.widget.empty(),this.states={}},response:function(e){if(this.__waiting_response=!1,this.screen.current_view.set_value(),e.validate&&!this.screen.current_record.validate(null,null,null,!0))return this.screen.display(!0),void this.info_bar.message(this.screen.invalid_message(),"danger");this.info_bar.message(),this.state=e.state,this.process()},_get_button:function(e){var t="btn-default";e.default?t="btn-primary":e.state==this.end_state&&(t="btn-link");t=new Sao.common.Button(e,void 0,void 0,t);return this.states[e.state]=t},update_buttons:function(){var e,t=this.screen.current_record;for(e in this.states)this.states[e].set_state(t)},update:function(e,t){t.forEach(function(e){this._get_button(e)}.bind(this)),this.screen=new Sao.Screen(e.model,{mode:[],context:this.context}),this.screen.add_view(e),this.screen.switch_view(),this.screen.group_changed_callback=this.update_buttons.bind(this),this.header.append(jQuery("<h4/>",{class:"model-title",title:this.name}).text(Sao.common.ellipsize(this.name,80))),this.widget.append(this.screen.screen_container.el)}}),Sao.Wizard.create=function(e){var t,i;e.window?(t=new Sao.Wizard.Form(e.name),i=new Sao.Tab.Wizard(t),Sao.Tab.add(i)):t=new Sao.Wizard.Dialog(e.name),t.run(e)},Sao.Wizard.Form=Sao.class_(Sao.Wizard,{init:function(e){Sao.Wizard.Form._super.init.call(this,e),this.tab=null,this.header=jQuery("<div/>",{class:"modal-header"}),this.form=jQuery("<div/>",{class:"wizard-form"}).append(this.header).append(this.widget),this.footer=jQuery("<div/>",{class:"modal-footer"}).appendTo(this.form)},clean:function(){Sao.Wizard.Form._super.clean.call(this),this.header.empty(),this.footer.empty()},_get_button:function(e){var t=Sao.Wizard.Form._super._get_button.call(this,e);return this.footer.append(t.el),t.el.click(function(){this.response(e)}.bind(this)),t},destroy:function(e){switch(Sao.Wizard.Form._super.destroy.call(this,e),e){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(e){Sao.Wizard.Dialog._super.init.call(this,e);e=new Sao.Dialog(e,"wizard-dialog","md",!1);this.dialog=e.modal,this.header=e.header,this.content=e.content,this.footer=e.footer,this.dialog.on("keydown",function(e){e.which==Sao.common.ESC_KEYCODE&&(e.preventDefault(),this.end_state in this.states&&this.response(this.states[this.end_state].attributes))}.bind(this)),e.body.append(this.widget).append(this.info_bar.el)},clean:function(){Sao.Wizard.Dialog._super.clean.call(this),this.header.empty(),this.footer.empty()},_get_button:function(t){var e=Sao.Wizard.Dialog._super._get_button.call(this,t);return this.footer.append(e.el),t.default?(this.content.unbind("submit"),this.content.submit(function(e){this.response(t),e.preventDefault()}.bind(this)),e.el.attr("type","submit")):e.el.click(function(){this.response(t)}.bind(this)),e},update:function(e,t){this.content.unbind("submit"),Sao.Wizard.Dialog._super.update.call(this,e,t),this.show()},destroy:function(n){Sao.Wizard.Dialog._super.destroy.call(this,n);var e=function(){this.dialog.remove();var e=jQuery(".wizard-dialog").filter(":visible")[0],t=!1,i=(e=e||Sao.Tab.tabs.get_current())&&this.model&&Sao.main_menu_screen.model_name!=this.model?e.screen:(t=!0,Sao.main_menu_screen);i&&(e=jQuery.when(),i.current_record&&!t&&(t=i.model_name==this.model?this.ids:[i.current_record.id],e=i.reload(t,!0)),n&&e.then(function(){i.client_action(n)}))}.bind(this);(this.dialog.data("bs.modal")||{}).isShown?(this.dialog.on("hidden.bs.modal",e),this.dialog.modal("hide")):e()},show:function(){var e=this.screen.current_view;if("form"==e.view_type)for(var t=!1,i=e.get_fields(),n=0;n<i.length;n++){for(var o=i[n],s=e.widgets[o],r=0;r<s.length;r++)if(s[r].expand){t=!0;break}if(t)break}else t=!0;t?this.dialog.find(".modal-dialog").removeClass("modal-md modal-sm").addClass("modal-lg"):this.dialog.find(".modal-dialog").removeClass("modal-lg modal-sm").addClass("modal-md"),this.dialog.modal("show")},hide:function(){this.dialog.modal("hide")},state_changed:function(){this.process()}})}(),function(){"use strict";Sao.View.BoardXMLViewParser=Sao.class_(Sao.View.FormXMLViewParser,{_parse_board:function(e,t){var i=new Sao.View.Form.Container(Number(e.getAttribute("col")||4));if(this.view.el.append(i.el),this.parse_child(e,i),0<this._containers.length)throw"AssertionError"},_parse_action:function(e,t){var i;void 0===t.yexpand&&(t.yexpand=!0),void 0===t.yfill&&(t.yfill=!0),i=new Sao.View.Board.Action(t,this.view.context),this.view.actions.push(i),this.container.add(i,t)}}),Sao.View.Board=Sao.class_(Object,{xml_parser:Sao.View.BoardXMLViewParser,init:function(e,t){this.context=t,this.actions=[],this.containers=[],this.state_widgets=[],this.el=jQuery("<div/>",{class:"board"}),new this.xml_parser(this,null,{}).parse(e.children()[0]);for(var i=[],n=0,o=this.actions.length;n<o;n++)i.push(this.actions[n].action_prm);this.actions_prms=jQuery.when.apply(jQuery,i)},reload:function(){for(var e=0;e<this.actions.length;e++)this.actions[e].display();for(e=0;e<this.state_widgets.length;e++)this.state_widgets[e].set_state(null)}}),Sao.View.Board.Action=Sao.class_(Object,{init:function(o,s){void 0===s&&(s={});var r=Sao.Session.current_session;this.name=o.name,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);var e=new Sao.Model("ir.action.act_window");this.action_prm=e.execute("get",[this.name],{}),this.action_prm.done(function(e){var i={};this.action=e,i.view_ids=[],i.mode=null,jQuery.isEmptyObject(e.views)?jQuery.isEmptyObject(e.view_id)||(i.view_ids=[e.view_id[0]]):(i.view_ids=[],i.mode=[],e.views.forEach(function(e){i.view_ids.push(e[0]),i.mode.push(e[1])})),"pyson_domain"in this.action||(this.action.pyson_domain="[]");var t={};(t=jQuery.extend(t,r.context))._user=r.user_id;var n=new Sao.PYSON.Decoder(t);i.context=jQuery.extend({},s,n.decode(e.pyson_context||"{}")),(t=jQuery.extend(t,i.context)).context=t,n=new Sao.PYSON.Decoder(t),i.domain=n.decode(e.pyson_domain),i.order=n.decode(e.pyson_order),i.search_value=n.decode(e.pyson_search_value||"[]"),i.tab_domain=[],e.domains.forEach(function(e,t){i.tab_domain.push([e[0],n.decode(e[1]),e[2]])}),i.context_model=e.context_model,i.context_domain=e.context_domain,null!==e.limit?i.limit=e.limit:i.limit=Sao.config.limit,this.context=t,this.domain=[],this.update_domain([]),i.row_activate=this.row_activate.bind(this),this.screen=new Sao.Screen(this.action.res_model,i),o.string?this.title.text(o.string):this.title.text(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))},row_activate:function(){var e;this.screen.current_record&&("tree"==this.screen.current_view.view_type&&1==this.screen.current_view.attributes.keyword_open?(e=this.screen.current_view.selected_records.map(function(e){return e.id}),Sao.Action.exec_keyword("tree_open",{model:this.screen.model_name,id:this.screen.current_record.id,ids:e},jQuery.extend({},this.screen.group._context),!1)):new Sao.Window.Form(this.screen,function(e){e?this.screen.current_record.save():this.screen.current_record.cancel()}.bind(this),{title:this.title.text()}))},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(e){var t,i,n,o,s=jQuery.extend({},this.context);for((s.context=s)._user=Sao.Session.current_session.user_id,t=0,i=e.length;t<i;t++)(n=e[t].get_active())&&(s[e[t].name]=n);o=new Sao.PYSON.Decoder(s).decode(this.action.pyson_domain),Sao.common.compare(this.domain,o)||(this.domain.splice(0,this.domain.length),jQuery.extend(this.domain,o),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(n,o){o=o||1;var e,s=Sao.Session.current_session;s&&((e=jQuery.ajax({headers:{Authorization:"Session "+s.get_auth()},contentType:"application/json",data:JSON.stringify({last_message:n,channels:Sao.Bus.channels}),dataType:"json",url:"/"+s.database+"/bus",type:"POST",timeout:Sao.config.bus_timeout})).done(function(e){Sao.Session.current_session==s&&(e.message&&(n=e.message.message_id,Sao.Bus.handle(e.message)),Sao.Bus.listen(n,1))}),e.fail(function(e,t,i){Sao.Session.current_session==s&&("timeout"===i?Sao.Bus.listen(n,1):501==e.status?console.log("Bus not supported"):window.setTimeout(Sao.Bus.listen,Math.min(1e3*o,Sao.config.bus_timeout),n,2*o))}))},Sao.Bus.handle=function(e){"notification"===e.type&&function(e){try{if("granted"!=Notification.permission)return}catch(e){return(console.error||console.log).call(console,e,e.stack)}new Notification(e.title,{body:e.body||""})}(e)}}(),function(){"use strict";var i={translate_view:function(e){e=e.model;Sao.Tab.create({model:"ir.translation",domain:[["model","=",e]],mode:["tree","form"],name:Sao.i18n.gettext("Translate view")})},get_plugins:function(e){var t=Sao.common.MODELACCESS.get("ir.translation");return t.read&&t.write?[[Sao.i18n.gettext("Translate view"),i.translate_view]]:[]}};Sao.Plugins.push(i)}(),function(){"use strict";var a={B:!0,BODY:!0,BR:!0,DIV:!0,FONT:!0,I:!0,U:!0},c={align:!0,color:!0,face:!0,size:!0};Sao.HtmlSanitizer={},Sao.HtmlSanitizer.sanitize=function(e){if(""==(e=e.trim()))return"";if("<br>"==e)return"";var t=document.createElement("iframe");if(void 0===t.sandbox)return console.warn("Your browser do not support sandboxed iframes, unable to sanitize HTML."),e;t.sandbox="allow-same-origin",t.style.display="none",document.body.appendChild(t);var r=t.contentDocument||t.contentWindow.document;null==r.body&&r.write("<body></body>"),r.body.innerHTML=e;e=function e(t){if(t.nodeType==Node.TEXT_NODE)i=t.cloneNode(!0);else if(t.nodeType==Node.ELEMENT_NODE&&a[t.tagName]){if("BR"!=t.tagName&&""==t.innerHTML.trim())return document.createDocumentFragment();for(var i=r.createElement(t.tagName),n=0;n<t.attributes.length;n++){var o=t.attributes[n];c[o.name]&&i.setAttribute(o.name,o.value)}for(n=0;n<t.childNodes.length;n++){var s=e(t.childNodes[n]);i.appendChild(s,!1)}}else i=document.createDocumentFragment(),"SCRIPT"!=t.tagName&&(i.textContent=t.textContent);return i}(r.body);return document.body.removeChild(t),e.innerHTML.replace(/<br[^>]*>(\S)/g,"<br>\n$1").replace(/div><div/g,"div>\n<div")}}();
|