{"version":3,"sources":["Scripts/KEA.BW.Waermeplanung.Web/Utils/StringUtils.ts","Scripts/KEA.BW.Waermeplanung.Web/Start.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/BICO2/BICO2.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Dashboard/Dashboard.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/DeteilansichtMeldungen/DeteilansichtMeldungen.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/TimeSeriesBase/TimeSeriesBase.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Evaluations/Evaluations.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/ImportZeitreihen/ImportZeitreihen.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/KommunenSteckbrief/KommunenSteckbrief.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Main/KEABaseApp.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Main/BICO2MainApp.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Main/EnergiedatenMainApp.ts","Scripts/KEA.BW.Waermeplanung.Web/Services/RoutingService.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/Nutzungsdaten/NutzungsdatenRoutingService.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Main/Technologiedaten.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Main/WaermeplanungMainApp.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Meldeliste/Meldeliste.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/Nutzungsdaten/Nutzungsdaten.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/StatistischeGrunddaten/StatistischeGrunddaten.ts","Scripts/KEA.BW.Waermeplanung.Web/Apps/UploadWaermeplaene/UploadWaermeplaene.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/BICO2/BICO2.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/BICO2/BICO2RoutingService.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/DeteilansichtMeldungen/DeteilansichtMeldungen.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/DeteilansichtMeldungen/DeteilansichtMeldungenRoutingService.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/TimeSeriesBase/TimeSeriesBase.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/Evaluations/Evaluations.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/ImportZeitreihen/ImportZeitreihen.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/KommunenSteckbrief/KommunenSteckbrief.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/KommunenSteckbrief/KommunenSteckbriefRoutingService.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/Meldeliste/Meldeliste.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/Meldeliste/MeldelisteRoutingService.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/Nutzungsdaten/Nutzungsdaten.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/StatistischeGrunddaten/StatistischeGrunddaten.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/StatistischeGrunddaten/StatistischeGrunddatenRoutingService.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/TimeSeriesBase/TimeSeriesBaseRoutingService.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/UploadWaermeplaene/UploadWaermeplaene.ts","Scripts/KEA.BW.Waermeplanung.Web/Controls/UploadWaermeplan/UploadWaermeplan.ts","Scripts/KEA.BW.Waermeplanung.Web/Data/Data.ts","Scripts/KEA.BW.Waermeplanung.Web/Services/ApplicationInfoService.ts","Scripts/KEA.BW.Waermeplanung.Web/Services/UserInfoService.ts","Scripts/KEA.BW.Waermeplanung.Web/Utils/File.ts","Scripts/KEA.BW.Waermeplanung.Web/Utils/Grid.ts","Scripts/KEA.BW.Waermeplanung.Web/Utils/Guid.ts","Scripts/KEA.BW.Waermeplanung.Web/Utils/Localization.ts","Scripts/KEA.BW.Waermeplanung.Web/Utils/Logout.ts","Scripts/KEA.BW.Waermeplanung.Web/Utils/Number.ts","Scripts/KEA.BW.Waermeplanung.Web/Utils/Option.ts","Scripts/KEA.BW.Waermeplanung.Web/Utils/Result.ts"],"names":["KEA","Web","Waermeplanung","BW","startWaermeplanung","appContainer","Apps","WaermeplanungMainApp","requiresLogin","startEnergiedaten","EnergiedatenMainApp","startBICO2","BICO2MainApp","startTechnologiedaten","TechnologiedatenMainApp","_super","BICO2App","AppKitchen","AppBase","__extends","prototype","start","document","title","this","options","Strings","BICO2_PageTitle","model","Controls","BICO2Model","BICO2View","el","dispose","DashboardApp","BrowserHelper","setUrl","defaultApp","DeteilansichtMeldungenApp","DeteilansichtMeldungen_PageTitle","DeteilansichtMeldungenModel","DeteilansichtMeldungenView","uploadWaermeplaeneApp","TimeSeriesBaseApp","TimeSeriesBase_PageTitle","TimeSeriesBaseModel","TimeSeriesBaseView","headerTitle","importViewApp","dataRequestEndpoint","filterRequestEndpoint","excelFileName","treeViewTreeId","EvaluationsApp","Evaluations_PageTitle","EvaluationsModel","EvaluationsView","templateFolder","dropdownLabel","dropDownLabel","downloadButtonLabel","ImportZeitreihenApp","ImportZeitreihenWaermeplanung_PageTitle","applicationInfo","Services","ApplicationInfoService","instance","getApplicationInfo","IsKommune","ImportZeitreihenModel","userId","UserId","communeId","Commune","Id","dataLoaderDocumentName","dataLoaderDocumentType","inventoryId","ImportZeitreihenView","dataLoader","abortRequests","KommunenSteckbriefApp","KommunenSteckbrief_PageTitle","KommunenSteckbriefModel","KommunenSteckbriefView","KEABaseApp","Utils","Localization","TranslateSpreadsheetToGerman","startUserInfoService","_this","init","UserInfoService","app","startApp","ApplyApplicationInfo","appsMenu","getRoutedAppsAndMenu","userMenu","userMenuStyle","FrameManager","UserMenuStyle","Extended","extendedUserInfo","Hidden","MainApp","apps","mainMenu","template","getTemplate","helpMenu","customItems","$el","find","href","GlobalSettings","customConfig","KeaBwHomeURL","regionContainer","regionLabelElement","text","Name","kendoTooltip","content","StringUtils","format","MenuTitle_Region_Tooltip","position","remove","click","e","Logout","logout","$","each","i","data","UserName","BICO2Routes","bico2","kommunenSteckbrief","nutzungsDaten","statistischeGrunddaten","RoutedApp","NutzungsdatenApp","StatistischeGrunddatenApp","MenuItem","Menu_PageTitle","Templates","EnergiedatenRoutes","Dashboard","ZeitreihenEnergiedaten","ImportZeitreihenEnergiedaten","Auswertung","importZeitreihenEnergiedaten","ImportZeitreihenEnergiedaten_PageTitle","zeitreihenEnergiedaten","ZeitreihenEnergiedaten_Title","CommuneTreeEnergiedaten","evaluations","Routes","Evaluations_Title","TemplateEnergiedatenAuswertungen","Evaluations_DropdownLabel","CommuneTree","route","Menu_ZeitreihenEnergiedaten","highlightOnNavigate","ParametersBase","getParameterSet","buildRoute","basePath","parameterSet","parameter","Object","keys","filter","v","map","k","join","RoutingService","readParameters","UrlQuery","getParameters","writeParameters","parameters","forEach","setParameter","getRoute","path","navigate","getRouter","routeTo","RoutingParameters","commune","returnUrl","downloadPath","usageType","NutzungsdatenRoutingParameters","param","encodeURI","call","NutzungsdatenRoutingService","urlQuery","setParameters","p","console","log","TechnologiedatenRoutes","Technologiedaten","NutzungsDaten","Nutzungsdaten_Typ_Technologiedaten","Technologiedaten_PageTitle","TemplateTechnologieDaten","Technologiedaten_DropdownLabel","Technologiedaten_Template_Download","Menu_Technologiedaten","ZeitreihenWaermeplanung","ImportZeitreihenWaermeplanung","Meldeliste","DeteilansichtMeldungen","SetMeldedaten","UploadWaermeplaene","importZeitreihenWaermeplanung","zeitreihenWaermeplanung","ZeitreihenWaermeplanung_Title","CommuneTreeWaermeplanung","meldeliste","MeldelisteApp","uploadWaermeplaene","UploadWaermeplaeneApp","deteilansichtMeldungen","dashboard","TemplateWaermeplanungsAuswertungen","Menu_ZeitreihenWaermeplanung","Menu_Meldelisten","Meldeliste_PageTitle","MeldelisteModel","MeldelisteView","Nutzungsdaten_PageTitle","NutzungsdatenModel","NutzungsdatenView","StatistischeGrunddaten_PageTitle","StatistischeGrunddatenModel","StatistischeGrunddatenView","UploadWaermeplaene_PageTitle","UploadWaermeplaeneModel","UploadWaermeplaeneView","close","ModelBase","ViewBase","render","renderTemplate","setContainers","setButtons","setEvents","loadCommunes","checkDownload","File","BICO2RoutingService","BICO2RoutingParameters","container","configuration","bico2_container","bico2_bilanzierungstool_container","buttons","uploadGrunddaten","generateSteckbrief","downloadExcel","downloadPDF","Nutzungsdaten_Typ_Statistische_Grunddaten","Nutzungsdaten_Typ_Kommunensteckbrief","BICO2BWToolPath","Nutzungsdaten_Typ_BICO2BW_Tool","BICO2BWToolAnleitungPath","Nutzungsdaten_Typ_BICO2BW_Tool_Anleitung","set","loading","requestCall","abort","Data","getData","response","communeNames","Array","_i","response_1","length","entry","push","createConfigurationForm","convertAll","treeViewSubData","idPrefix","AsLinq","Select","convert","ToArray","treeViewData","id","descriptorId","descriptorName","imageUrl","dimensionIconData","expanded","items","values","pool","restrict","search","fieldModel","Forms","FieldModel","FieldType","Text","mandatory","kendoOptions","placeholder","BICO2_Kommune_Placeholder","minLength","enforceMinLength","TextFieldView","editable","formModel","FormModel","HorizontalTabularFormView","onAnyValueChange","value","localStorage","setItem","storedCommune","getItem","setFieldsData","targetContainer","OptionsHelper","merge","setTemplate","BICO2","PruefstatusDialog","createForm","UIHelper","renderTemplateTo","info","containers","form","cancel","submit","getValue","PruefstatusDialog_Pruefstatus_Label","Prüfstatus","Freigegeben","label","MaengelFestgestellt","PruefungOffen","valueField","textField","PruefstatusDialog_Anmerkung_Label","multiline","TabularFormView","showButtons","Pruefstatus","pruefstatus","Anmerkung","anmerkung","MeldedatenFestlegenDialog","formView","validateFields","DateTime","Meldedatum","meldeDatum","Melder","melder","createBilanzdatenGrid","createWaermeplaeneGrid","bilanzdaten","waermeplaene","goBack","setMeldedaten","IsWaermeplaner","openSetMeldedatenDialog","openUploadWaermeplaeneDialog","window","blianzDataLoader","loadData","success","Date","getUserInfo","Email","appOptions","saveRequest","getSaveRequestData","Api","updateEventData","result","Notifications","notify","SetMeldedaten_Set_Notification","SetMeldedaten_Notification_Title","closeAfter","requestData","xhr","statusText","errorText","SetMeldedaten_Set_Error_Notification","SetMeldedaten_Fail_Notification_Title","startInWindow","modal","easyClose","width","height","error","name","action","closed","closeApp","berichtsjahrField","Year","Field_Berichtsjahr","communeField","Field_Commune","DeteilansichtMeldungenRoutingService","meldelisteId","config","JSON","parse","getDocumentSync","EventItemRestrictions","Value","eventDataProvider","Provider","EventDataProvider","load","then","berichtsjahr","attr","MeldelisteRoutingService","MeldelisteRoutingParameters","Berichtsjahr","ItemId","InventoryId","Operation","EventDataLoader","bilanzGridModel","DetailansichtMeldungBilanzdatenGridModel","DeteilansichtMeldungBilanzdatenGridView","fillHeight","initialSort","field","dir","templates","translateStatus","updateFullHeightGrids","gridModel","DetailansichtMeldungGridModel","DeteilansichtMeldungGridView","translateAnmerkung","refreshData","addTooltip","show","hideTooltips","sender","Grids","EventGridModel","getColumnHeader","itemId","eventItem","addVirtualColumns","columns","get","c","actionField","DeteilansichtMeldungen_GridColumn_Actions_Label","m","templateActions","filterable","groupable","sortable","IsRP_Pruefer","DeteilansichtMeldungen_SetInspectionState_Button","GridView","dataBound","rows","tbody","children","j","row","dataItem","addClass","openSetPruefstatusDialog","PruefstatusDialog_Info_SetMeldedaten","setPruefstatus","translateUserColumn","columnId","userInfo","warn","Zurueckgezogen","DeteilansichtMeldungen_Download_Button","DeteilansichtMeldungen_Cancel_Button","downloadFile","openCancelFileDialog","fileName","DialogBoxes","confirm","cancelFile","strings","ok","Cancel","getDataApi","PruefstatusDialog_Info_UploadWaermeplaene","ClearAnmerkung","request","XMLHttpRequest","responseType","open","apiUrl","escape","onload","onLoaded","send","downloadUrl","filename","status","URL","createObjectURL","getFileNameFromRequest","createLinkAndClickIt","DeteilansichtMeldungen_Download_Success_Notification_Content","DeteilansichtMeldungen_Download_Success_Notification_Title","DeteilansichtMeldungen_Download_Fail_Notification_Content","DeteilansichtMeldungen_Download_Fail_Notification_Title","a","createElement","body","appendChild","download","now","disposition","getResponseHeader","indexOf","matches","exec","replace","decodeURI","MeldelisteId","DeteilansichtMeldungenRoutingParameters","postRender","setHeaderTitle","isCommune","isPublicLogin","showTreeView","treeViewContainer","selectedCommuneId","_a","loadTimeseriesViewList","loadTreeView","spreadsheet","actionContainer","treeView","import","openImportModal","innerHTML","undockWindow","openInWindow","endpoint","onTimeseriesViewListLoaded","timeseriesViewReferences","FilterDropdown_Description","TimeSeriesBaseRoutingService","TimeSeriesBaseRoutingParameters","loadSpreadsheet","timeseriesViewId","renderLoader","TimeseriesViewId","IsCommune","CommuneId","removeLoader","createSpreadsheet","TimeSeriesBase_Get_Error","TimeSeriesBase_Get_Error_Title","gridData","empty","kendoSpreadsheet","excel","proxyURL","pdf","toolbar","sheetsbar","sheets","Grid","transformSheet","searchBoxModel","SearchBoxModel","query","hasSearch","SearchBoxView","SearchBox_Search","treeModel","TreeView","TreeViewModel","treeControl","routingParameter","kendoTreeControl","bind","onTreeSelected","TreeViewProvider","dimension","treeId","sortData","setTreeViewDomainData","domainData","collapse","firstNode","getFirstNode","item","findByText","select","focus","onChange","filteredItems","element","toLowerCase","includes","node","hasChildren","communeDescriptorId","treeViewData_1","sort","b","localeCompare","treeViewData_2","TimeSeriesBase_Title","TimeSeriesBase","setActionButtons","actionButtons","export","Evaluations","setTemplateDownloadEvent","removeAttribute","dblclick","preventDefault","that","newLink","downloading","setTimeout","selectedTemplate","target","unsetTemplateDownloadEvent","prop","off","setAttribute","getFiles","DirectoryPath","directoryFileInfo","setSuitableFile","selectedFilter","found","filterPrefix","split","FileNames","Evaluations_FileNotFound","filterFieldModel","autoWidth","labelFieldModel","Evaluations_Template_Label","default","readOnly","attributes","key","displayValue","hasData","filterValue","labelValue","timeseriesViewReferences_1","timeseriesViewReference","spreadSheet","saveAsExcel","updateFile","file","fileNameWithoutExtension","getFileNameWithoutExtension","fileExtension","getFileExtension","generated","getGeneratedFileNamePart","fileNameOriginal","getFileName","fileNameGenerated","reset","reload","uploadFile","sendFile","finished","ajax","dataType","url","type","myXhr","ajaxSettings","upload","addEventListener","uploadProgressHandling","isAlreadyUploaded","successUploadCallback","failUploadCallback","cache","contentType","processData","lengthComputable","s","loaded","total","uploadProgress","ImportZeitreihenDataLoader","parseDataInternal","dict","d","setData","accept","acceptedFileTypes","setInputs","dataFilePickerContent","DataFileItemEmpty","enableUploadFileButton","importList","refreshOverview","inputs","dataFile","change","onTradesFileChanged","onModelChanged","uploadButtonEnabled","on","onDragEnter","onDragOver","onDragLeave","onDrop","successUpload","uploadFailed","setProgress","onChangeReady","subscribe","createImportList","event","css","originalEvent","dataTransfer","files","selectFile","newInput","clone","val","replaceWith","acceptFile","notifyWrongFileFormat","DataFileItem","removeFile","removeClass","isEnable","uploadFileTooltip","destroy","ImportZeitreihenWaermeplanung_Upload_Button_Tooltip_NoFile","ImportZeitreihenWaermeplanung_Upload_Button_Tooltip_NoCummne","currentlyUploading","notifyProceedUpload","notifyFailUpload","percent","notifySucceedUpload","infoNotification","ImportZeitreihenWaermeplanung_Notification_Progress_Content","ImportZeitreihenWaermeplanung_Notification_Progress_Title","hideProcessNotification","ImportZeitreihenWaermeplanung_Notification_Success_Content","ImportZeitreihenWaermeplanung_Notification_Success_Title","ImportZeitreihenWaermeplanung_Notification_Fail_Content","ImportZeitreihenWaermeplanung_Notification_Fail_Title","notifyNoCommuneSet","ImportZeitreihenWaermeplanung_Notification_NoCommune_Content","ImportZeitreihenWaermeplanung_Notification_NoCommune_Title","ImportZeitreihenWaermeplanung_Notification_WrongFile_Content","ImportZeitreihenWaermeplanung_Notification_WrongFile_Title","gridView","isError","isSuccess","inProgress","ImportZeitreihenWaermeplanung_Status_none","StatusCell","ImportZeitreihen","KommunenSteckbriefRoutingService","setTitle","grid","exportGrid","downloadTemplate","TemplateKommunensteckbriefPath","Nutzungsdaten_Typ_Template_Kommunensteckbrief","KommunenSteckbrief_Title","KommunenSteckbrief","KommunenSteckbriefRoutingParameters","createMeldelisteGrid","onValueChange","onBerichtsjahrChanged","getBerichtsjahr","Hint","Meldeliste_Hint","getDefaultYear","moment","startOf","toDate","updateRoute","updateEventRestrictionsAndReloadData","getConfig","setConfig","CommuneList","MeldelisteDataLoader","MeldelisteGridModel","templateCommune","rowData","medelisteId","newEntry","Meldeliste_Id","compareStatus","Wärmepläne_Pruefstatus","__assign","Wärmepläne_Prüfstatus","clazz","splice","schema","validation","required","getFullYear","checkLocalStorage","bico2UsageRaw","bico2Usage","mail","organization","message","nutzungsdatenContainer","nutzungsdatenForm","isValid","checkBoxView","getFieldView","checkBoxValid","showMessage","Form_ErrorMessage_Required","Mail","UsageType","Organization","stringify","Nutzungsdaten_Name_Label","Nutzungsdaten_Organisation_Label","Nutzungsdaten_Mail_Label","Checkbox","Nutzungsdaten_Checkbox_Label","hideCheckboxLabel","clearMessage","html","errorClass","Nutzungsdaten","StatistischeGrunddatenRoutingService","TemplateStatistischeGrunddatenPath","Nutzungsdaten_Typ_Template_Statistische_Grunddaten","StatistischeGrunddaten_Title","StatistischeGrunddaten","StatistischeGrunddatenRoutingParameters","Wärmeplan","documentTyp","documentName","documentSize","initDataLoader","initUploadWaermeplanControls","uploadWaermeplan1","uploadWaermeplan2","uploadWaermeplan3","uploadWaermeplan4","uploadAll","uploadWaermeplanModel1","UploadWaermeplanModel","documentId","UploadWaermeplanView","uploadWaermeplanModel2","uploadWaermeplanModel3","uploadWaermeplanModel4","onChangeData","textPool","getEventFieldInfo","TextPool","currentDocument","SortNr","dokumententyp","getDocumentNameFromName","fileSize","getDocumentSizeFromName","prüfstatus","pos","lastIndexOf","substr","trim","parseInt","inputId","filePickerContent","FileItem","fileIcon","getFileTypeIcon","getFileExtensionFromName","fileSizeToString","size","fileExtenstion","some","Guid","newGuid","UploadWaermeplan","documentType","async","responseJSON","handleError","onReady","userInfoDictionary","u","undefined","acceptedExtensions","toLocaleLowerCase","extension","bytes","si","dp","thresh","Math","abs","units","r","pow","round","toFixed","removeSpreadsheetActionBar","actionBar","parentNode","removeChild","resize","getLetterFromIndex","columnsCount","rowsCount","getColumns","ref","frozenColumns","frozenColumnsCount","frozenRows","frozenRowsCount","transformRows","n","String","fromCharCode","tempWidth","transformRow","cells","transformColumn","cell","countDecimals","rowCell","background","color","enable","cellType","bold","textAlign","Number","random","toString","kendo","messages","filterMenu","extend","sortAscending","KendoSpreadsheet_filterMenu_sortAscending","sortDescending","KendoSpreadsheet_filterMenu_sortDescending","filterByValue","KendoSpreadsheet_filterMenu_filterByValue","filterByCondition","KendoSpreadsheet_filterMenu_filterByCondition","apply","KendoSpreadsheet_filterMenu_apply","KendoSpreadsheet_filterMenu_search","clear","KendoSpreadsheet_filterMenu_clear","blanks","KendoSpreadsheet_filterMenu_blanks","operatorNone","KendoSpreadsheet_filterMenu_operatorNone","and","KendoSpreadsheet_filterMenu_and","or","KendoSpreadsheet_filterMenu_or","operators","string","contains","KendoSpreadsheet_filterMenu_operators_string_contains","doesnotcontain","KendoSpreadsheet_filterMenu_operators_string_doesnotcontain","startswith","KendoSpreadsheet_filterMenu_operators_string_startswith","endswith","KendoSpreadsheet_filterMenu_operators_string_endswith","KendoSpreadsheet_filterMenu_operators_string_matches","doesnotmatch","KendoSpreadsheet_filterMenu_operators_string_doesnotmatch","date","eq","KendoSpreadsheet_filterMenu_operators_date_eq","neq","KendoSpreadsheet_filterMenu_operators_date_neq","lt","KendoSpreadsheet_filterMenu_operators_date_lt","gt","KendoSpreadsheet_filterMenu_operators_date_gt","number","KendoSpreadsheet_filterMenu_operators_number_eq","KendoSpreadsheet_filterMenu_operators_number_neq","gte","KendoSpreadsheet_filterMenu_operators_number_gte","KendoSpreadsheet_filterMenu_operators_number_gt","lte","KendoSpreadsheet_filterMenu_operators_number_lte","KendoSpreadsheet_filterMenu_operators_number_lt","fadeOut","LogoutProvider","logoutResult","successfullyLoggedOut","ApplicationBaseURL","errorMessage","floor","valueOf","str","FunicularSwitch","Option","Some","none","None","isSome","_tag","Tag","isNone","match","Result","Ok","Error","isOk","camelCaseToLowerSnakeCase","letter","slice","camelCaseToUpperSnakeCase","toUpperCase","args","arguments","index"],"mappings":"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","file":"KEA.BW.Waermeplanung.Web.min.js","sourcesContent":["module KEA.BW.Waermeplanung.Web.Utils.StringUtils {\r\n export const camelCaseToLowerSnakeCase = (str: string) => str.replace(/[A-Z]/g, (letter: string) => `_${letter.toLowerCase()}`).slice(1);\r\n export const camelCaseToUpperSnakeCase = (str: string) => str.replace(/[A-Z]/g, (letter: string) => `_${letter.toUpperCase()}`).slice(1);\r\n\r\n export const format = (str: string, ...args: string[]) => str.replace(/{(\\d+)}/g, (match, index) => args[index] || '');\r\n}","namespace KEA.BW.Waermeplanung.Web {\r\n\r\n export function startWaermeplanung(appContainer: HTMLElement) {\r\n // ReSharper disable once WrongExpressionStatement\r\n new Apps.WaermeplanungMainApp(appContainer, { requiresLogin: true });\r\n }\r\n\r\n export function startEnergiedaten(appContainer: HTMLElement) {\r\n // ReSharper disable once WrongExpressionStatement\r\n new Apps.EnergiedatenMainApp(appContainer, { requiresLogin: true });\r\n }\r\n\r\n export function startBICO2(appContainer: HTMLElement) {\r\n // ReSharper disable once WrongExpressionStatement \r\n new Apps.BICO2MainApp(appContainer, { requiresLogin: false });\r\n }\r\n\r\n export function startTechnologiedaten(appContainer: HTMLElement) {\r\n // ReSharper disable once WrongExpressionStatement \r\n new Apps.TechnologiedatenMainApp(appContainer, { requiresLogin: false });\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface BICO2AppOptions extends AppKitchen.AppBaseOptions {\r\n importViewApp: AppKitchen.FrameManager.RoutedApp;\r\n }\r\n\r\n export class BICO2App extends AppKitchen.AppBase {\r\n\r\n start() {\r\n document.title = this.options.title = Strings.BICO2_PageTitle;\r\n const model = new Controls.BICO2Model();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.BICO2View(model, this.el,\r\n {\r\n });\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface DashboardAppOptions extends AppKitchen.AppBaseOptions {\r\n defaultApp?: string;\r\n }\r\n\r\n export class DashboardApp extends AppKitchen.AppBase {\r\n\r\n start() {\r\n //document.title = this.options.title = \"Dashboard\";\r\n //AppKitchen.UIHelper.renderTemplateTo(this.$el[0], Templates.Dashboard, { title: \"Dashboard Title\" });\r\n\r\n // no dashboard, just forward to the default app\r\n AppKitchen.BrowserHelper.setUrl(`#/${this.options.defaultApp}/`);\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface DeteilansichtMeldungenAppOptions extends AppKitchen.AppBaseOptions {\r\n uploadWaermeplaeneApp: AppKitchen.FrameManager.RoutedApp;\r\n }\r\n\r\n export class DeteilansichtMeldungenApp extends AppKitchen.AppBase {\r\n\r\n private model: Controls.DeteilansichtMeldungenModel;\r\n\r\n start() {\r\n document.title = this.options.title = Strings.DeteilansichtMeldungen_PageTitle;\r\n this.model = new Controls.DeteilansichtMeldungenModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.DeteilansichtMeldungenView(this.model, this.el,\r\n {\r\n uploadWaermeplaeneApp: this.options.uploadWaermeplaeneApp\r\n });\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface TimeSeriesBaseAppOptions extends AppKitchen.AppBaseOptions {\r\n headerTitle: string;\r\n importViewApp: AppKitchen.FrameManager.RoutedApp;\r\n dataRequestEndpoint: string;\r\n filterRequestEndpoint: string;\r\n treeViewTreeId: string;\r\n }\r\n\r\n export class TimeSeriesBaseApp extends AppKitchen.AppBase {\r\n\r\n start() {\r\n document.title = this.options.title = Strings.TimeSeriesBase_PageTitle;\r\n const model = new Controls.TimeSeriesBaseModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.TimeSeriesBaseView(model, this.el,\r\n {\r\n headerTitle: this.options.headerTitle,\r\n importViewApp: this.options.importViewApp,\r\n dataRequestEndpoint: this.options.dataRequestEndpoint,\r\n filterRequestEndpoint: this.options.filterRequestEndpoint,\r\n excelFileName: \"\",\r\n treeViewTreeId: this.options.treeViewTreeId\r\n });\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","/// \r\nmodule KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface EvaluationsAppOptions extends TimeSeriesBaseAppOptions {\r\n templateFolder: string;\r\n dropDownLabel: string;\r\n downloadButtonLabel?: string;\r\n }\r\n\r\n export class EvaluationsApp extends TimeSeriesBaseApp {\r\n start() {\r\n document.title = this.options.title = Strings.Evaluations_PageTitle;\r\n const model = new Controls.EvaluationsModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.EvaluationsView(model, this.el,\r\n {\r\n headerTitle: this.options.headerTitle,\r\n importViewApp: this.options.importViewApp,\r\n dataRequestEndpoint: this.options.dataRequestEndpoint,\r\n filterRequestEndpoint: this.options.filterRequestEndpoint,\r\n excelFileName: \"\",\r\n templateFolder: this.options.templateFolder,\r\n dropdownLabel: this.options.dropDownLabel,\r\n downloadButtonLabel: this.options.downloadButtonLabel,\r\n treeViewTreeId: this.options.treeViewTreeId\r\n });\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface ImportZeitreihenAppOptions extends AppKitchen.AppBaseOptions {\r\n dataLoaderDocumentName: string;\r\n dataLoaderDocumentType: string;\r\n inventoryId: string;\r\n }\r\n\r\n export class ImportZeitreihenApp extends AppKitchen.AppBase {\r\n\r\n private model: Controls.ImportZeitreihenModel;\r\n\r\n start() {\r\n if (this.options.title) {\r\n document.title = this.options.title;\r\n } else {\r\n document.title = this.options.title = Strings.ImportZeitreihenWaermeplanung_PageTitle;\r\n }\r\n\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n\r\n if (!applicationInfo.IsKommune) {\r\n return;\r\n }\r\n\r\n this.model = new Controls.ImportZeitreihenModel(\r\n {\r\n userId: applicationInfo.UserId,\r\n communeId: applicationInfo.Commune.Id,\r\n dataLoaderDocumentName: this.options.dataLoaderDocumentName,\r\n dataLoaderDocumentType: this.options.dataLoaderDocumentType,\r\n inventoryId: this.options.inventoryId\r\n });\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.ImportZeitreihenView(this.model, this.el, {});\r\n }\r\n\r\n dispose() {\r\n if (this.model && this.model.dataLoader) {\r\n this.model.dataLoader.abortRequests();\r\n this.model.dataLoader.dispose();\r\n }\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface KommunenSteckbriefAppOptions extends AppKitchen.AppBaseOptions {\r\n uploadWaermeplaeneApp: AppKitchen.FrameManager.RoutedApp;\r\n }\r\n\r\n export class KommunenSteckbriefApp extends AppKitchen.AppBase {\r\n\r\n private model: Controls.KommunenSteckbriefModel;\r\n\r\n start() {\r\n document.title = this.options.title = Strings.KommunenSteckbrief_PageTitle;\r\n this.model = new Controls.KommunenSteckbriefModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.KommunenSteckbriefView(this.model, this.el,\r\n {\r\n });\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","namespace KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export abstract class KEABaseApp extends AppKitchen.AppBase {\r\n\r\n start() {\r\n Utils.Localization.TranslateSpreadsheetToGerman();\r\n this.startUserInfoService();\r\n }\r\n\r\n protected startUserInfoService() {\r\n Services.ApplicationInfoService.instance.init((applicationInfo) => {\r\n Services.UserInfoService.instance.init(() => {\r\n const app = this.startApp()\r\n this.ApplyApplicationInfo(applicationInfo, app);\r\n });\r\n });\r\n }\r\n\r\n abstract getRoutedAppsAndMenu(): [apps: AppKitchen.FrameManager.RoutedApp[],\r\n menu: AppKitchen.FrameManager.MenuItem];\r\n\r\n abstract getTemplate(): string;\r\n\r\n protected startApp(): AppKitchen.FrameManager.MainApp {\r\n\r\n const appsMenu = this.getRoutedAppsAndMenu();\r\n\r\n const userMenu = this.options.requiresLogin ? {\r\n userMenuStyle: AppKitchen.FrameManager.UserMenuStyle.Extended,\r\n extendedUserInfo: false\r\n } : {\r\n userMenuStyle: AppKitchen.FrameManager.UserMenuStyle.Hidden\r\n };\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n const app = new AppKitchen.FrameManager.MainApp(this.el,\r\n {\r\n apps: appsMenu[0],\r\n mainMenu: appsMenu[1],\r\n template: this.getTemplate(),\r\n userMenu: userMenu,\r\n helpMenu: {\r\n customItems: [\r\n ]\r\n }\r\n });\r\n\r\n // set base link of the logo\r\n (this.$el.find(\".a-header-title\")[0] as HTMLLinkElement).href =\r\n AppKitchen.GlobalSettings.customConfig.KeaBwHomeURL;\r\n\r\n return app;\r\n }\r\n\r\n protected ApplyApplicationInfo(applicationInfo: KEA.BW.Waermeplanung.Domain.ApplicationInfo,\r\n app: AppKitchen.FrameManager.MainApp) {\r\n\r\n let targetContainer = app.$el.find(\".a-header-menu\")[0];\r\n const regionContainer = app.$el.find(\".a-header-region\");\r\n const regionLabelElement = app.$el.find(\".region-label\");\r\n if (applicationInfo.IsKommune) {\r\n regionLabelElement.text(applicationInfo.Commune.Name);\r\n\r\n regionLabelElement.kendoTooltip({\r\n content: () => Utils.StringUtils.format(Strings.MenuTitle_Region_Tooltip, applicationInfo.Commune.Name),\r\n position: \"bottom\",\r\n });\r\n\r\n } else {\r\n regionContainer.remove();\r\n }\r\n\r\n if (this.options.requiresLogin) {\r\n // change the logout behavior of the extended user menu to not redirect back to the oauth\r\n this.$el.find(\".a-user-btn-logout\").click((e) => Utils.Logout.logout(e, this.$el));\r\n }\r\n\r\n // fix the username, default AppKitchen sometimes replaces Umlauts\r\n $(\"[data-role=tooltip]\").each((i, el) => {\r\n var tooltip = $(el).data(\"kendoTooltip\");\r\n tooltip.options.content = applicationInfo.UserName;\r\n });\r\n }\r\n }\r\n}","/// \r\n\r\nnamespace KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export class BICO2Routes {\r\n public static readonly bico2: string = \"\";\r\n public static readonly kommunenSteckbrief: string = \"kommunen-steckbrief\";\r\n public static readonly nutzungsDaten: string = \"nutzer-infos\";\r\n public static readonly statistischeGrunddaten: string = \"statistische-grunddaten\";\r\n\r\n }\r\n\r\n export class BICO2MainApp extends KEABaseApp {\r\n\r\n // this is a public site, there is no application info\r\n start() {\r\n Utils.Localization.TranslateSpreadsheetToGerman();\r\n this.startApp();\r\n }\r\n\r\n getRoutedAppsAndMenu(): [apps: AppKitchen.FrameManager.RoutedApp[],\r\n menu: AppKitchen.FrameManager.MenuItem] {\r\n\r\n const bico2 = new AppKitchen.FrameManager.RoutedApp(Apps.BICO2App, BICO2Routes.bico2);\r\n const kommunenSteckbrief = new AppKitchen.FrameManager.RoutedApp(Apps.KommunenSteckbriefApp, BICO2Routes.kommunenSteckbrief);\r\n const nutzungsDaten = new AppKitchen.FrameManager.RoutedApp(Apps.NutzungsdatenApp, BICO2Routes.nutzungsDaten);\r\n const statistischeGrunddaten = new AppKitchen.FrameManager.RoutedApp(Apps.StatistischeGrunddatenApp, BICO2Routes.statistischeGrunddaten);\r\n\r\n const routedApps = [\r\n bico2,\r\n kommunenSteckbrief,\r\n nutzungsDaten,\r\n statistischeGrunddaten\r\n ];\r\n\r\n const menu = new AppKitchen.FrameManager.MenuItem(Strings.Menu_PageTitle, null,\r\n []);\r\n\r\n return [routedApps, menu];\r\n }\r\n\r\n getTemplate(): string {\r\n return Templates.BICO2MainApp;\r\n }\r\n }\r\n}","/// \r\n\r\nnamespace KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export class EnergiedatenRoutes {\r\n public static readonly Dashboard: string = \"\";\r\n public static readonly ZeitreihenEnergiedaten: string = \"zeitreihen-energiedaten\";\r\n public static readonly ImportZeitreihenEnergiedaten: string = \"import-zeitreihen-energiedaten\";\r\n public static readonly Auswertung: string = \"auswertung\";\r\n }\r\n\r\n export class EnergiedatenMainApp extends KEABaseApp {\r\n\r\n getRoutedAppsAndMenu(): [apps: AppKitchen.FrameManager.RoutedApp[],\r\n menu: AppKitchen.FrameManager.MenuItem] {\r\n\r\n const importZeitreihenEnergiedaten = new AppKitchen.FrameManager.RoutedApp(Apps.ImportZeitreihenApp, EnergiedatenRoutes.ImportZeitreihenEnergiedaten,\r\n {\r\n dataLoaderDocumentName: \"Energiedaten\",\r\n dataLoaderDocumentType: \"Import\",\r\n inventoryId: \"Importvorgaenge_Energiedaten\",\r\n title: Strings.ImportZeitreihenEnergiedaten_PageTitle\r\n });\r\n\r\n const zeitreihenEnergiedaten = new AppKitchen.FrameManager.RoutedApp(Apps.TimeSeriesBaseApp, EnergiedatenRoutes.ZeitreihenEnergiedaten,\r\n {\r\n headerTitle: Strings.ZeitreihenEnergiedaten_Title,\r\n importViewApp: importZeitreihenEnergiedaten,\r\n dataRequestEndpoint: \"ZeitreihenEnergiedaten\",\r\n filterRequestEndpoint: \"ZeitreihenEnergiedatenTimeseriesFilter\",\r\n treeViewTreeId: AppKitchen.GlobalSettings.customConfig.CommuneTreeEnergiedaten\r\n });\r\n\r\n const evaluations = new AppKitchen.FrameManager.RoutedApp(\r\n Apps.EvaluationsApp, Routes.Auswertung,\r\n {\r\n headerTitle: Strings.Evaluations_Title,\r\n importViewApp: null,\r\n dataRequestEndpoint: \"ZeitreihenBerichteEnergiedaten\",\r\n filterRequestEndpoint: \"ZeitreihenBerichteEnergiedatenTimeseriesFilter\",\r\n templateFolder: AppKitchen.GlobalSettings.customConfig.TemplateEnergiedatenAuswertungen,\r\n dropDownLabel: Strings.Evaluations_DropdownLabel,\r\n treeViewTreeId: AppKitchen.GlobalSettings.customConfig.CommuneTree\r\n });\r\n\r\n const dashboard = new AppKitchen.FrameManager.RoutedApp(Apps.DashboardApp, Routes.Dashboard,\r\n {\r\n defaultApp: zeitreihenEnergiedaten.route\r\n });\r\n\r\n const routedApps = [\r\n dashboard,\r\n zeitreihenEnergiedaten,\r\n importZeitreihenEnergiedaten,\r\n evaluations\r\n ];\r\n\r\n const menu = new AppKitchen.FrameManager.MenuItem(Strings.Menu_PageTitle, null,\r\n [\r\n new AppKitchen.FrameManager.MenuItem(Strings.Menu_ZeitreihenEnergiedaten, { route: zeitreihenEnergiedaten.route, highlightOnNavigate: true }),\r\n new AppKitchen.FrameManager.MenuItem(Strings.Evaluations_PageTitle, { route: evaluations.route, highlightOnNavigate: true }),\r\n ]);\r\n\r\n return [routedApps, menu];\r\n }\r\n\r\n getTemplate(): string {\r\n return Templates.EnergiedatenMainApp;\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Services{\r\n export type SerializedParameterSet = { [key: string]: string };\r\n\r\n export class ParametersBase {\r\n\r\n public getParameterSet(): SerializedParameterSet {\r\n const param: SerializedParameterSet = {};\r\n return param;\r\n }\r\n\r\n public buildRoute(basePath: string): string {\r\n const parameterSet = this.getParameterSet();\r\n const parameter = Object.keys(parameterSet)\r\n .filter(v => parameterSet[v] !== null && parameterSet[v] !== \"\" && parameterSet[v] !== \"undefined\") // only use parameters which are not empty\r\n .map(k => `${k}=${parameterSet[k]}`)\r\n .join('&');\r\n\r\n if (basePath) {\r\n if (parameter) {\r\n return `#/${basePath}/?${parameter}`;\r\n } else {\r\n return `#/${basePath}`;\r\n }\r\n } else {\r\n // base path is undefined, just route back to main\r\n if (parameter) {\r\n return `?${parameter}`;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n export class RoutingService {\r\n protected static readParameters(): { [key: string]: string } {\r\n return AppKitchen.BrowserHelper.UrlQuery.getParameters();\r\n }\r\n\r\n protected static writeParameters(parameters: { [key: string]: string }): void {\r\n Object.keys(parameters).forEach(k => {\r\n // only set url parameter if its not empty\r\n if (parameters[k])\r\n {\r\n AppKitchen.BrowserHelper.UrlQuery.setParameter(k, parameters[k]);\r\n }\r\n });\r\n }\r\n\r\n public static getRoute(parameters: ParametersBase, path: string): string {\r\n return parameters.buildRoute(path);\r\n }\r\n\r\n public static navigate(route: string): void {\r\n AppKitchen.getRouter().navigate(route, true);\r\n }\r\n\r\n public static routeTo(parameters: ParametersBase, path: string): void {\r\n this.navigate(this.getRoute(parameters, path));\r\n }\r\n }\r\n \r\n}","/// \r\n\r\nmodule KEA.BW.Waermeplanung.Web.Controls {\r\n import ParametersBase = BW.Waermeplanung.Web.Services.ParametersBase;\r\n import SerializedParameterSet = BW.Waermeplanung.Web.Services.SerializedParameterSet;\r\n import RoutingService = BW.Waermeplanung.Web.Services.RoutingService;\r\n\r\n class RoutingParameters {\r\n public static readonly commune: string = \"kommune\";\r\n public static readonly returnUrl: string = \"return-url\";\r\n public static readonly downloadPath: string = \"download\";\r\n public static readonly usageType: string = \"usage-type\";\r\n }\r\n\r\n export class NutzungsdatenRoutingParameters extends ParametersBase {\r\n constructor(\r\n public readonly commune: string = \"\",\r\n public readonly returnUrl: string,\r\n public readonly downloadPath: string = \"\",\r\n public readonly usageType: string = \"\",\r\n ) { super() }\r\n\r\n public getParameterSet(): SerializedParameterSet {\r\n const param: SerializedParameterSet = {};\r\n param[RoutingParameters.commune] = encodeURI(this.commune);\r\n param[RoutingParameters.returnUrl] = encodeURI(this.returnUrl);\r\n param[RoutingParameters.downloadPath] = encodeURI(this.downloadPath);\r\n param[RoutingParameters.usageType] = encodeURI(this.usageType);\r\n return param;\r\n }\r\n }\r\n\r\n export class NutzungsdatenRoutingService extends RoutingService{\r\n\r\n public static getParameters(): NutzungsdatenRoutingParameters {\r\n const urlQuery = this.readParameters();\r\n return new NutzungsdatenRoutingParameters(\r\n urlQuery[RoutingParameters.commune],\r\n urlQuery[RoutingParameters.returnUrl],\r\n urlQuery[RoutingParameters.downloadPath],\r\n urlQuery[RoutingParameters.usageType]\r\n );\r\n }\r\n\r\n public static setParameters(parameters: NutzungsdatenRoutingParameters) : void {\r\n const p = {};\r\n console.log(parameters.returnUrl);\r\n p[RoutingParameters.commune] = parameters.commune;\r\n p[RoutingParameters.returnUrl] = parameters.returnUrl;\r\n p[RoutingParameters.downloadPath] = parameters.downloadPath;\r\n p[RoutingParameters.usageType] = parameters.usageType;\r\n this.writeParameters(p);\r\n }\r\n\r\n public static routeTo(parameters: NutzungsdatenRoutingParameters): void {\r\n this.navigate(this.getRoute(parameters, Apps.BICO2Routes.nutzungsDaten));\r\n }\r\n }\r\n}","/// \r\n/// \r\n\r\nnamespace KEA.BW.Waermeplanung.Web.Apps {\r\n import NutzungsdatenRoutingService = BW.Waermeplanung.Web.Controls.NutzungsdatenRoutingService;\r\n import NutzungsdatenRoutingParameters = BW.Waermeplanung.Web.Controls.NutzungsdatenRoutingParameters;\r\n\r\n export class TechnologiedatenRoutes {\r\n public static readonly Technologiedaten: string = \"\";\r\n public static readonly NutzungsDaten: string = \"nutzer-infos\";\r\n }\r\n\r\n export class TechnologiedatenMainApp extends KEABaseApp {\r\n\r\n // this is a public site, there is no application info\r\n start() {\r\n Utils.Localization.TranslateSpreadsheetToGerman();\r\n this.startApp();\r\n\r\n // always route to nutzungsdaten before showing anything\r\n NutzungsdatenRoutingService.routeTo(new NutzungsdatenRoutingParameters(\"\",\r\n \"\",\r\n \"\",\r\n Strings.Nutzungsdaten_Typ_Technologiedaten));\r\n }\r\n\r\n\r\n getRoutedAppsAndMenu(): [apps: AppKitchen.FrameManager.RoutedApp[],\r\n menu: AppKitchen.FrameManager.MenuItem] {\r\n\r\n const nutzungsDaten = new AppKitchen.FrameManager.RoutedApp(Apps.NutzungsdatenApp, TechnologiedatenRoutes.NutzungsDaten);\r\n const technologiedaten = new AppKitchen.FrameManager.RoutedApp(\r\n Apps.EvaluationsApp, TechnologiedatenRoutes.Technologiedaten,\r\n {\r\n headerTitle: Strings.Technologiedaten_PageTitle,\r\n importViewApp: null,\r\n dataRequestEndpoint: \"ZeitreihenTechnologiedaten\",\r\n filterRequestEndpoint: \"ZeitreihenTechnologiedatenTimeseriesFilter\",\r\n templateFolder: AppKitchen.GlobalSettings.customConfig.TemplateTechnologieDaten,\r\n dropDownLabel: Strings.Technologiedaten_DropdownLabel,\r\n downloadButtonLabel: Strings.Technologiedaten_Template_Download,\r\n treeViewTreeId: AppKitchen.GlobalSettings.customConfig.CommuneTree\r\n });\r\n\r\n const routedApps = [\r\n technologiedaten,\r\n nutzungsDaten\r\n ];\r\n\r\n const menu = new AppKitchen.FrameManager.MenuItem(Strings.Menu_PageTitle, null,\r\n [\r\n new AppKitchen.FrameManager.MenuItem(Strings.Menu_Technologiedaten, { route: TechnologiedatenRoutes.Technologiedaten, highlightOnNavigate: true }),\r\n ]);\r\n\r\n return [routedApps, menu];\r\n }\r\n\r\n getTemplate(): string {\r\n return Templates.TechnologiedatenMainApp;\r\n } \r\n }\r\n}","/// \r\n\r\nnamespace KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export class Routes {\r\n public static readonly Dashboard: string = \"\";\r\n public static readonly ZeitreihenWaermeplanung: string = \"zeitreihen-waermeplanung\";\r\n public static readonly ImportZeitreihenWaermeplanung: string = \"import-zeitreihen-waermeplanung\";\r\n public static readonly Meldeliste: string = \"meldeliste\";\r\n public static readonly DeteilansichtMeldungen: string = \"detailansicht-meldungen\";\r\n public static readonly SetMeldedaten: string = \"set-meldedaten\";\r\n public static readonly UploadWaermeplaene: string = \"upload-waermeplaene\";\r\n public static readonly Auswertung: string = \"auswertung\";\r\n }\r\n\r\n export class WaermeplanungMainApp extends KEABaseApp {\r\n\r\n getRoutedAppsAndMenu(): [apps: AppKitchen.FrameManager.RoutedApp[],\r\n menu: AppKitchen.FrameManager.MenuItem] {\r\n\r\n const importZeitreihenWaermeplanung = new AppKitchen.FrameManager.RoutedApp(Apps.ImportZeitreihenApp, Routes.ImportZeitreihenWaermeplanung,\r\n {\r\n dataLoaderDocumentName: \"Waermeplanung\",\r\n dataLoaderDocumentType: \"Import\",\r\n inventoryId: \"Importvorgaenge_Waermeplanung\"\r\n });\r\n const zeitreihenWaermeplanung = new AppKitchen.FrameManager.RoutedApp(Apps.TimeSeriesBaseApp, Routes.ZeitreihenWaermeplanung,\r\n {\r\n headerTitle: Strings.ZeitreihenWaermeplanung_Title,\r\n importViewApp: importZeitreihenWaermeplanung,\r\n dataRequestEndpoint: \"ZeitreihenWaermeplanung\",\r\n filterRequestEndpoint: \"ZeitreihenWaermeplanungTimeseriesFilter\",\r\n treeViewTreeId: AppKitchen.GlobalSettings.customConfig.CommuneTreeWaermeplanung\r\n });\r\n const meldeliste = new AppKitchen.FrameManager.RoutedApp(Apps.MeldelisteApp, Routes.Meldeliste);\r\n const uploadWaermeplaene = new AppKitchen.FrameManager.RoutedApp(Apps.UploadWaermeplaeneApp, Routes.UploadWaermeplaene);\r\n const deteilansichtMeldungen = new AppKitchen.FrameManager.RoutedApp(Apps.DeteilansichtMeldungenApp, Routes.DeteilansichtMeldungen,\r\n {\r\n uploadWaermeplaeneApp: uploadWaermeplaene\r\n });\r\n\r\n const dashboard = new AppKitchen.FrameManager.RoutedApp(Apps.DashboardApp, Routes.Dashboard,\r\n {\r\n defaultApp: zeitreihenWaermeplanung.route\r\n });\r\n\r\n const evaluations = new AppKitchen.FrameManager.RoutedApp(\r\n Apps.EvaluationsApp, Routes.Auswertung,\r\n {\r\n headerTitle: Strings.Evaluations_Title,\r\n importViewApp: null,\r\n dataRequestEndpoint: \"ZeitreihenBerichteWaermeplanung\",\r\n filterRequestEndpoint: \"ZeitreihenBerichteWaermeplanungTimeseriesFilter\",\r\n templateFolder: AppKitchen.GlobalSettings.customConfig.TemplateWaermeplanungsAuswertungen,\r\n dropDownLabel: Strings.Evaluations_DropdownLabel,\r\n treeViewTreeId: AppKitchen.GlobalSettings.customConfig.CommuneTree\r\n });\r\n\r\n const routedApps = [\r\n dashboard,\r\n zeitreihenWaermeplanung,\r\n importZeitreihenWaermeplanung,\r\n meldeliste,\r\n deteilansichtMeldungen,\r\n uploadWaermeplaene,\r\n evaluations\r\n ];\r\n\r\n const menu = new AppKitchen.FrameManager.MenuItem(Strings.Menu_PageTitle, null,\r\n [\r\n //new AppKitchen.FrameManager.MenuItem(\"Dashboard\", { route: dashboard.route, highlightOnNavigate: true }),\r\n new AppKitchen.FrameManager.MenuItem(Strings.Menu_ZeitreihenWaermeplanung, { route: zeitreihenWaermeplanung.route, highlightOnNavigate: true }),\r\n //new AppKitchen.FrameManager.MenuItem(Strings.Menu_Import, { route: importZeitreihenWaermeplanung.route, highlightOnNavigate: true }),\r\n new AppKitchen.FrameManager.MenuItem(Strings.Menu_Meldelisten, { route: meldeliste.route, highlightOnNavigate: true }),\r\n new AppKitchen.FrameManager.MenuItem(Strings.Evaluations_PageTitle, { route: evaluations.route, highlightOnNavigate: true }),\r\n //new AppKitchen.FrameManager.MenuItem(Strings.Menu_DeteilansichtMeldungen, { route: deteilansichtMeldungen.route, highlightOnNavigate: true })\r\n ]);\r\n\r\n return [routedApps, menu];\r\n }\r\n\r\n getTemplate(): string {\r\n return Templates.WaermeplanungMainApp;\r\n }\r\n\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface MeldelisteAppOptions extends AppKitchen.AppBaseOptions {\r\n }\r\n\r\n export class MeldelisteApp extends AppKitchen.AppBase {\r\n\r\n start() {\r\n document.title = this.options.title = Strings.Meldeliste_PageTitle;\r\n const model = new Controls.MeldelisteModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.MeldelisteView(model, this.el, {});\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface NutzungsdatenAppOptions extends AppKitchen.AppBaseOptions {\r\n importViewApp: AppKitchen.FrameManager.RoutedApp;\r\n }\r\n\r\n export class NutzungsdatenApp extends AppKitchen.AppBase {\r\n\r\n start() {\r\n document.title = this.options.title = Strings.Nutzungsdaten_PageTitle;\r\n const model = new Controls.NutzungsdatenModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.NutzungsdatenView(model, this.el,\r\n {\r\n });\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface StatistischeGrunddatenAppOptions extends AppKitchen.AppBaseOptions {\r\n uploadWaermeplaeneApp: AppKitchen.FrameManager.RoutedApp;\r\n }\r\n\r\n export class StatistischeGrunddatenApp extends AppKitchen.AppBase {\r\n\r\n private model: Controls.StatistischeGrunddatenModel;\r\n\r\n start() {\r\n document.title = this.options.title = Strings.StatistischeGrunddaten_PageTitle;\r\n this.model = new Controls.StatistischeGrunddatenModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.StatistischeGrunddatenView(this.model, this.el,\r\n {\r\n });\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Apps {\r\n\r\n export interface UploadWaermeplaeneAppOptions extends AppKitchen.AppBaseOptions {\r\n close: () => void;\r\n }\r\n\r\n export class UploadWaermeplaeneApp extends AppKitchen.AppBase {\r\n\r\n start() {\r\n document.title = this.options.title = Strings.UploadWaermeplaene_PageTitle;\r\n const model = new Controls.UploadWaermeplaeneModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new Controls.UploadWaermeplaeneView(model, this.el, {close: this.options.close});\r\n }\r\n\r\n dispose() {\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n import Apps = KEA.BW.Waermeplanung.Web.Apps;\r\n import Api = AppKitchen.Api;\r\n\r\n export interface BICO2ModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class BICO2Model extends AppKitchen.ModelBase {\r\n }\r\n\r\n export interface BICO2ViewOptions extends AppKitchen.ViewBaseOptions {\r\n }\r\n\r\n export class BICO2View extends AppKitchen.ViewBase {\r\n public options: BICO2ViewOptions;\r\n public requestCall: JQueryXHR;\r\n\r\n private container: {\r\n configuration: HTMLElement,\r\n bico2_container: HTMLElement,\r\n bico2_bilanzierungstool_container: HTMLElement\r\n }\r\n\r\n private buttons: {\r\n uploadGrunddaten: JQuery,\r\n generateSteckbrief: JQuery,\r\n downloadExcel: JQuery,\r\n downloadPDF: JQuery\r\n };\r\n\r\n private commune: string = \"\";\r\n\r\n constructor(model: BICO2Model, targetContainer: HTMLElement, options?: BICO2ViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, {}));\r\n\r\n this.setTemplate(Web.Templates.BICO2);\r\n this.render();\r\n this.checkDownload();\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({});\r\n this.setContainers();\r\n this.setButtons();\r\n this.setEvents();\r\n this.loadCommunes();\r\n\r\n return this;\r\n }\r\n\r\n private checkDownload(): void {\r\n const parameters = NutzungsdatenRoutingService.getParameters();\r\n if (KEA.BW.Waermeplanung.Web.Utils.File.checkDownload(parameters)) {\r\n BICO2RoutingService.routeTo(new BICO2RoutingParameters());\r\n }\r\n } \r\n\r\n private setContainers(): void {\r\n this.container = {\r\n configuration: this.$el.find(\".configuration\")[0],\r\n bico2_container: this.$el.find(\".bico2-container\")[0],\r\n bico2_bilanzierungstool_container: this.$el.find(\".bico2-bilanzierungstool-container\")[0],\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n uploadGrunddaten: this.$el.find(\".download-grunddaten-button\"),\r\n generateSteckbrief: this.$el.find(\".generate-steckbrief-button\"),\r\n downloadExcel: this.$el.find(\".download-excel-button\"),\r\n downloadPDF: this.$el.find(\".download-pdf-button\"),\r\n }\r\n }\r\n\r\n private setEvents(): void {\r\n this.buttons.uploadGrunddaten.click(() => {\r\n NutzungsdatenRoutingService.routeTo(\r\n new NutzungsdatenRoutingParameters(\r\n this.commune,\r\n Apps.BICO2Routes.statistischeGrunddaten,\r\n \"\",\r\n Strings.Nutzungsdaten_Typ_Statistische_Grunddaten)\r\n );\r\n });\r\n\r\n this.buttons.generateSteckbrief.click(() => {\r\n NutzungsdatenRoutingService.routeTo(\r\n new NutzungsdatenRoutingParameters(\r\n this.commune,\r\n Apps.BICO2Routes.kommunenSteckbrief,\r\n \"\",\r\n Strings.Nutzungsdaten_Typ_Kommunensteckbrief)\r\n );\r\n });\r\n\r\n this.buttons.downloadExcel.click(() => {\r\n NutzungsdatenRoutingService.routeTo(\r\n new NutzungsdatenRoutingParameters(\r\n \"\",\r\n Apps.BICO2Routes.bico2,\r\n AppKitchen.GlobalSettings.customConfig.BICO2BWToolPath,\r\n Strings.Nutzungsdaten_Typ_BICO2BW_Tool)\r\n );\r\n });\r\n\r\n this.buttons.downloadPDF.click(() => {\r\n NutzungsdatenRoutingService.routeTo(\r\n new NutzungsdatenRoutingParameters(\r\n \"\",\r\n Apps.BICO2Routes.bico2,\r\n AppKitchen.GlobalSettings.customConfig.BICO2BWToolAnleitungPath,\r\n Strings.Nutzungsdaten_Typ_BICO2BW_Tool_Anleitung)\r\n );\r\n });\r\n\r\n }\r\n\r\n private loadCommunes(): void {\r\n\r\n this.model.set({ loading: true });\r\n\r\n if (this.requestCall) {\r\n this.requestCall.abort();\r\n }\r\n\r\n this.requestCall = AppKitchen.Data.getData(\"Bico2CommuneList\", \"\",\r\n (response: Array ) => {\r\n //AppKitchen.UIHelper.removeLoader(this.container.grid[0]);\r\n //this.createSpreadsheet(response);\r\n this.model.set({ loading: false });\r\n\r\n const communeNames = new Array();\r\n for (let entry of response) {\r\n communeNames.push(entry.Name);\r\n }\r\n\r\n this.createConfigurationForm(communeNames);\r\n },\r\n () => {\r\n this.model.set({ loading: false });\r\n console.log(\"Failed to load: 'CommuneList'\");\r\n //AppKitchen.UIHelper.removeLoader(this.container.grid[0]);\r\n });\r\n }\r\n\r\n private convertAll(treeViewSubData: Api.Models.TreeViewData[], idPrefix: string = null): AppKitchen.Controls.TreeView.TreeViewItem[] {\r\n return treeViewSubData.AsLinq().Select((i) => this.convert(i, idPrefix)).ToArray();\r\n }\r\n\r\n\r\n private convert(treeViewData: Api.Models.TreeViewData, idPrefix: string = null): AppKitchen.Controls.TreeView.TreeViewItem {\r\n const id = idPrefix ? `${idPrefix}_${treeViewData.descriptorId}` : treeViewData.descriptorId;\r\n return {\r\n data: treeViewData,\r\n text: treeViewData.descriptorName,\r\n imageUrl: treeViewData.dimensionIconData,\r\n expanded: true,\r\n items: this.convertAll(treeViewData.items, id),\r\n id: id\r\n }\r\n }\r\n\r\n private createConfigurationForm(values: Array): void {\r\n const pool: AppKitchen.Controls.Forms.TextPool =\r\n {\r\n values: values,\r\n restrict: true,\r\n search: true\r\n }\r\n\r\n const fieldModel = new AppKitchen.Controls.Forms.FieldModel(\"commune\", AppKitchen.Controls.Forms.FieldType.Text, null, {\r\n pool: pool,\r\n mandatory: false,\r\n kendoOptions: {\r\n placeholder: Strings.BICO2_Kommune_Placeholder,\r\n filter: \"contains\",\r\n minLength: 1,\r\n enforceMinLength: false,\r\n },\r\n });\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new AppKitchen.Controls.Forms.TextFieldView(fieldModel, { editable: true });\r\n\r\n const formModel = new AppKitchen.Controls.Forms.FormModel([fieldModel], {});\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new AppKitchen.Controls.Forms.HorizontalTabularFormView(formModel, this.container.configuration, { editable: true });\r\n \r\n formModel.onAnyValueChange((fieldModel, value) => {\r\n this.commune = value;\r\n localStorage.setItem(\"bico2-commune\", value);\r\n });\r\n\r\n const storedCommune = localStorage.getItem(\"bico2-commune\");\r\n if (storedCommune !== null) {\r\n formModel.setFieldsData({ commune: storedCommune });\r\n this.commune = storedCommune;\r\n } else {\r\n formModel.setFieldsData({ commune: pool.values[0] });\r\n this.commune = pool.values[0];\r\n }\r\n\r\n \r\n\r\n }\r\n\r\n\r\n }\r\n}","/// \r\n\r\nmodule KEA.BW.Waermeplanung.Web.Controls {\r\n import ParametersBase = BW.Waermeplanung.Web.Services.ParametersBase;\r\n import SerializedParameterSet = BW.Waermeplanung.Web.Services.SerializedParameterSet;\r\n import RoutingService = BW.Waermeplanung.Web.Services.RoutingService;\r\n\r\n export class BICO2RoutingParameters extends ParametersBase {\r\n\r\n constructor(\r\n ) { super() }\r\n }\r\n\r\n export class BICO2RoutingService extends RoutingService {\r\n\r\n public static routeTo(parameters: BICO2RoutingParameters): void {\r\n this.navigate(this.getRoute(parameters, Apps.BICO2Routes.bico2));\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n import Apps = KEA.BW.Waermeplanung.Web.Apps;\r\n\r\n export interface DeteilansichtMeldungenModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class DeteilansichtMeldungenModel extends AppKitchen.ModelBase {\r\n }\r\n\r\n export interface DeteilansichtMeldungenViewOptions extends AppKitchen.ViewBaseOptions {\r\n uploadWaermeplaeneApp: AppKitchen.FrameManager.RoutedApp;\r\n }\r\n\r\n interface PruefstatusDialog extends AppKitchen.AppBaseOptions {\r\n info: string;\r\n fileName: string;\r\n pruefstatus: string;\r\n anmerkung: string;\r\n submit: (pruefstatus: string, anmerkung: string) => void;\r\n cancel: () => void;\r\n }\r\n\r\n class PruefstatusDialog extends AppKitchen.AppBase {\r\n\r\n private containers: {\r\n form: HTMLElement;\r\n }\r\n\r\n private buttons: {\r\n cancel: JQuery,\r\n submit: JQuery,\r\n }\r\n\r\n private formModel: AppKitchen.Controls.Forms.FormModel;\r\n\r\n start(): void {\r\n this.renderTemplate();\r\n this.setContainers();\r\n this.setButtons();\r\n this.setEvents();\r\n\r\n this.createForm();\r\n }\r\n\r\n private renderTemplate(): void {\r\n AppKitchen.UIHelper.renderTemplateTo(this.el, Templates.PruefstatusDialog, { info: this.options.info });\r\n }\r\n\r\n private setContainers(): void {\r\n this.containers = {\r\n form: this.$el.find(\".form-container\")[0],\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n cancel: this.$el.find(\".cancel-btn\"),\r\n submit: this.$el.find(\".submit-btn\"),\r\n }\r\n }\r\n\r\n private setEvents(): void {\r\n this.buttons.cancel.click(() => this.options.cancel());\r\n this.buttons.submit.click(() => this.options.submit(this.formModel.getValue('Pruefstatus'), this.formModel.getValue('Anmerkung')));\r\n }\r\n\r\n private createForm(): void {\r\n const fieldModel: AppKitchen.Controls.Forms.FieldModel[] = [\r\n new AppKitchen.Controls.Forms.FieldModel('Pruefstatus',\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n Strings.PruefstatusDialog_Pruefstatus_Label,\r\n {\r\n pool: {\r\n values: [\r\n { id: Prüfstatus.Freigegeben, label: Prüfstatus.Freigegeben },\r\n { id: Prüfstatus.MaengelFestgestellt, label: Prüfstatus.MaengelFestgestellt },\r\n { id: Prüfstatus.PruefungOffen, label: Prüfstatus.PruefungOffen }\r\n ],\r\n valueField: 'id',\r\n textField: 'label',\r\n restrict: true\r\n },\r\n mandatory: true,\r\n }),\r\n new AppKitchen.Controls.Forms.FieldModel('Anmerkung',\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n Strings.PruefstatusDialog_Anmerkung_Label,\r\n {\r\n multiline: 8\r\n })\r\n ];\r\n this.formModel = new AppKitchen.Controls.Forms.FormModel(fieldModel, {});\r\n\r\n new AppKitchen.Controls.Forms.TabularFormView(this.formModel, this.containers.form, { editable: true, showButtons: false });\r\n\r\n this.formModel.setFieldsData(\r\n {\r\n 'Pruefstatus': this.options.pruefstatus || Prüfstatus.Freigegeben,\r\n 'Anmerkung': this.options.anmerkung\r\n }\r\n );\r\n }\r\n }\r\n\r\n interface MeldedatenFestlegenDialog extends AppKitchen.AppBaseOptions {\r\n meldeDatum: string;\r\n melder: string;\r\n submit: (meldeDatum: string, melder: string) => void;\r\n cancel: () => void;\r\n }\r\n\r\n class MeldedatenFestlegenDialog extends AppKitchen.AppBase {\r\n\r\n private containers: {\r\n form: HTMLElement;\r\n }\r\n\r\n private buttons: {\r\n cancel: JQuery,\r\n submit: JQuery,\r\n }\r\n\r\n private formModel: AppKitchen.Controls.Forms.FormModel;\r\n private formView: AppKitchen.Controls.Forms.FormViewBase;\r\n\r\n start(): void {\r\n this.renderTemplate();\r\n this.setContainers();\r\n this.setButtons();\r\n this.setEvents();\r\n\r\n this.createForm();\r\n }\r\n\r\n private renderTemplate(): void {\r\n AppKitchen.UIHelper.renderTemplateTo(this.el, Templates.SetMeldedaten);\r\n }\r\n\r\n private setContainers(): void {\r\n this.containers = {\r\n form: this.$el.find(\".form-container\")[0],\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n cancel: this.$el.find(\".cancel-btn\"),\r\n submit: this.$el.find(\".submit-btn\"),\r\n }\r\n }\r\n\r\n private setEvents(): void {\r\n this.buttons.cancel.click(() => this.options.cancel());\r\n this.buttons.submit.click(() => {\r\n const isValid = this.formView.validateFields();\r\n if (!isValid) {\r\n return;\r\n }\r\n \r\n this.options.submit(this.formModel.getValue('Meldedatum'), this.formModel.getValue('Melder')) \r\n });\r\n \r\n }\r\n\r\n private createForm(): void {\r\n const fieldModel: AppKitchen.Controls.Forms.FieldModel[] = [\r\n new AppKitchen.Controls.Forms.FieldModel('Meldedatum',\r\n AppKitchen.Controls.Forms.FieldType.DateTime,\r\n 'Meldedatum',\r\n {\r\n mandatory: true,\r\n }),\r\n new AppKitchen.Controls.Forms.FieldModel('Melder',\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n 'Melder',\r\n {\r\n mandatory: true,\r\n })\r\n ];\r\n this.formModel = new AppKitchen.Controls.Forms.FormModel(fieldModel, {});\r\n this.formView = new AppKitchen.Controls.Forms.TabularFormView(this.formModel, this.containers.form, { editable: true, showButtons: false });\r\n\r\n this.formModel.setFieldsData(\r\n {\r\n 'Meldedatum': this.options.meldeDatum,\r\n 'Melder': this.options.melder\r\n }\r\n );\r\n }\r\n }\r\n\r\n export class DeteilansichtMeldungenView extends AppKitchen.ViewBase {\r\n public options: DeteilansichtMeldungenViewOptions;\r\n\r\n private bilanzGridModel: AppKitchen.Controls.Grids.EventGridModel;\r\n private gridModel: AppKitchen.Controls.Grids.EventGridModel;\r\n public blianzDataLoader: AppKitchen.Data.EventDataLoader;\r\n public dataLoader: AppKitchen.Data.EventDataLoader;\r\n public eventDataProvider: AppKitchen.Data.Provider.EventDataProvider;\r\n\r\n private container: {\r\n configuration: HTMLElement,\r\n bilanzdaten: HTMLElement,\r\n waermeplaene: HTMLElement,\r\n }\r\n\r\n private buttons: {\r\n goBack: JQuery,\r\n setMeldedaten: JQuery,\r\n uploadWaermeplaene: JQuery,\r\n }\r\n\r\n constructor(model: DeteilansichtMeldungenModel, targetContainer: HTMLElement, options?: DeteilansichtMeldungenViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, { uploadWaermeplaeneApp: null }));\r\n\r\n this.setTemplate(Web.Templates.DeteilansichtMeldungen);\r\n\r\n this.render();\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({});\r\n this.setContainers();\r\n this.setButtons();\r\n this.setEvents();\r\n\r\n //this.model.set({ loading: true });\r\n this.createBilanzdatenGrid();\r\n this.createWaermeplaeneGrid();\r\n this.createConfigurationForm();\r\n\r\n return this;\r\n }\r\n\r\n private setContainers(): void {\r\n this.container = {\r\n configuration: this.$el.find(\".configuration\")[0],\r\n bilanzdaten: this.$el.find(\".bilanzdaten-grid-container\")[0],\r\n waermeplaene: this.$el.find(\".waermeplaene-grid-container\")[0],\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n goBack: this.$el.find(\".go-back-button\"),\r\n setMeldedaten: this.$el.find(\".set-meldedaten-button\"),\r\n uploadWaermeplaene: this.$el.find(\".upload-waermeplaene-button\"),\r\n }\r\n }\r\n\r\n private setEvents(): void {\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n if (applicationInfo.IsWaermeplaner) {\r\n this.buttons.setMeldedaten.click(() => this.openSetMeldedatenDialog());\r\n this.buttons.uploadWaermeplaene.click(() => this.openUploadWaermeplaeneDialog());\r\n } else {\r\n this.buttons.setMeldedaten.remove();\r\n this.buttons.uploadWaermeplaene.remove();\r\n }\r\n }\r\n\r\n private openSetMeldedatenDialog(): void {\r\n let window: kendo.ui.Window;\r\n this.blianzDataLoader.loadData({\r\n success: () => {\r\n let meldeDatum = null;\r\n let melder = null;\r\n const data = this.blianzDataLoader.getData();\r\n if (data.length === 1) {\r\n meldeDatum = data[0]['Meldeliste_Meldedatum'];\r\n melder = data[0]['Meldeliste_Melder'];\r\n\r\n if (!meldeDatum) {\r\n meldeDatum = new Date();\r\n } \r\n\r\n if (!melder) {\r\n // no E-Mail adress is saved, use the current user one\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n const user = Services.UserInfoService.instance.getUserInfo(applicationInfo.UserId);\r\n // TODO: check if User and Email are valid\r\n melder = user.Email;\r\n }\r\n\r\n const appOptions: MeldedatenFestlegenDialog = {\r\n meldeDatum: meldeDatum,\r\n melder: melder,\r\n submit: (meldeDatum, melder) => { \r\n data[0]['Meldeliste_Meldedatum'] = meldeDatum;\r\n data[0]['Meldeliste_Melder'] = melder;\r\n\r\n // make sure the pruefstatus field is set\r\n if (!data[0]['Meldeliste_Pruefstatus']) {\r\n data[0]['Meldeliste_Pruefstatus'] = \"Prüfung offen\";\r\n }\r\n\r\n const saveRequest = this.blianzDataLoader.getSaveRequestData(data[0]);\r\n AppKitchen.Data.Api.updateEventData(saveRequest,\r\n (result) => {\r\n console.log(result);\r\n this.blianzDataLoader.loadData();\r\n window.close();\r\n AppKitchen.UIHelper.Notifications.notify(Strings.SetMeldedaten_Set_Notification, \"success\",\r\n { title: Strings.SetMeldedaten_Notification_Title, closeAfter: 5000 });\r\n },\r\n (requestData, xhr, statusText, errorText) => {\r\n AppKitchen.UIHelper.Notifications.notify(Strings.SetMeldedaten_Set_Error_Notification + ` '${errorText}'`,\r\n \"warning\", \r\n { title: Strings.SetMeldedaten_Fail_Notification_Title, closeAfter: 5000 });\r\n }\r\n );\r\n },\r\n cancel: () => {\r\n window.close();\r\n }\r\n } as any;\r\n const windowOptions: AppKitchen.UIHelper.Windows.WindowOptions = {\r\n buttons: [],\r\n modal: true,\r\n easyClose: false,\r\n width: \"40rem\",\r\n height: \"22rem\",\r\n };\r\n\r\n window = new AppKitchen.FrameManager.RoutedApp(MeldedatenFestlegenDialog, \"\").startInWindow(\r\n windowOptions,\r\n appOptions);\r\n\r\n } else {\r\n console.error(`Found more or less then one entry!`);\r\n }\r\n }\r\n }); \r\n }\r\n\r\n private window: kendo.ui.Window;\r\n \r\n private openUploadWaermeplaeneDialog(): void {\r\n const appOptions: Apps.UploadWaermeplaeneAppOptions = { close: () => this.closeApp() };\r\n const windowOptions: AppKitchen.UIHelper.Windows.WindowOptions = {\r\n buttons: [\r\n //{ name: \"undock\", action: (window) => this.undockWindow(window) },\r\n { name: \"close\", action: (window) => window.close() }\r\n ],\r\n //title: Strings.UploadWaermeplaene_Title,\r\n modal: true,\r\n easyClose: false,\r\n width: \"900px\",\r\n closed: () => {\r\n this.dataLoader.loadData();\r\n // refocus grid on close (if browser window still focused)\r\n //if (document.hasFocus()) this.focusGrid();\r\n }\r\n };\r\n\r\n // open window\r\n this.window = this.options.uploadWaermeplaeneApp.startInWindow(windowOptions, appOptions);\r\n }\r\n\r\n private closeApp(): void {\r\n if (this.window) {\r\n this.window.close();\r\n }\r\n }\r\n\r\n //private undockWindow(window: kendo.ui.Window) {\r\n // AppKitchen.BrowserHelper.openInWindow(\"#/\" + this.options.uploadWaermeplaeneApp.route + \"/\", true);\r\n // window.close();\r\n //}\r\n\r\n private createConfigurationForm(): void {\r\n const berichtsjahrField = new AppKitchen.Controls.Forms.FieldModel('Berichtsjahr',\r\n AppKitchen.Controls.Forms.FieldType.Year,\r\n Strings.Field_Berichtsjahr,\r\n {});\r\n const communeField = new AppKitchen.Controls.Forms.FieldModel('Commune',\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n Strings.Field_Commune,\r\n {});\r\n const formModel = new AppKitchen.Controls.Forms.FormModel([berichtsjahrField, communeField], {});\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new AppKitchen.Controls.Forms.HorizontalTabularFormView(formModel, this.container.configuration,\r\n {\r\n editable: false,\r\n showButtons: false,\r\n });\r\n\r\n const parameters = DeteilansichtMeldungenRoutingService.getParameters();\r\n\r\n if (parameters === null || parameters.meldelisteId === null) {\r\n return;\r\n }\r\n\r\n const config: AppKitchen.Data.GridConfig = JSON.parse(Data.getDocumentSync(\"Meldeliste\", \"DeteilansichtMeldungen\"));\r\n\r\n config.EventItemRestrictions[0].Value = parameters.meldelisteId;\r\n\r\n this.eventDataProvider = new AppKitchen.Data.Provider.EventDataProvider();\r\n this.eventDataProvider\r\n .load(config, \"EventData\")\r\n .then(data => {\r\n if (data.length === 1) {\r\n const berichtsjahr: Date = data[0]['Meldeliste_Berichtsjahr'];\r\n const commune: Date = data[0]['Meldeliste_NavObject_Reg_Name'];\r\n\r\n this.buttons.goBack.attr(\"href\", MeldelisteRoutingService.getRoute(new MeldelisteRoutingParameters(berichtsjahr)));\r\n formModel.setFieldsData({\r\n Berichtsjahr: berichtsjahr,\r\n Commune: commune\r\n });\r\n } else {\r\n console.error(`Found more or less then one entry!`);\r\n }\r\n });\r\n }\r\n\r\n private createBilanzdatenGrid(): void {\r\n const parameters = DeteilansichtMeldungenRoutingService.getParameters();\r\n\r\n if (parameters === null || parameters.meldelisteId === null) {\r\n return;\r\n }\r\n\r\n const config: AppKitchen.Data.GridConfig = JSON.parse(Data.getDocumentSync(\"Bilanzdaten\", \"DeteilansichtMeldungen\"));\r\n\r\n config.EventItemRestrictions = [{\r\n ItemId: \"Id\",\r\n InventoryId: \"Meldeliste\",\r\n Operation: \"AND\",\r\n Value: parameters.meldelisteId\r\n }];\r\n\r\n this.blianzDataLoader = new AppKitchen.Data.EventDataLoader(config, () => {\r\n this.bilanzGridModel = new DetailansichtMeldungBilanzdatenGridModel(this.blianzDataLoader, {});\r\n new DeteilansichtMeldungBilanzdatenGridView(this.bilanzGridModel, this.container.bilanzdaten,\r\n {\r\n fillHeight: false,\r\n initialSort: [\r\n { field: 'Meldeliste_Meldedatum', dir: 'asc' },\r\n { field: 'Meldeliste_Pruefstatus', dir: 'desc' }\r\n ],\r\n templates: [\r\n { field: 'Meldeliste_Pruefstatus', template: (model) => Prüfstatus.translateStatus(model, 'Meldeliste_Pruefstatus') },\r\n ]\r\n });\r\n\r\n this.blianzDataLoader.loadData();\r\n\r\n AppKitchen.UIHelper.updateFullHeightGrids(this.container.bilanzdaten); \r\n });\r\n }\r\n\r\n private createWaermeplaeneGrid(): void {\r\n const parameters = DeteilansichtMeldungenRoutingService.getParameters();\r\n\r\n if (parameters === null || parameters.meldelisteId === null) {\r\n return;\r\n }\r\n\r\n const config: AppKitchen.Data.GridConfig = JSON.parse(Data.getDocumentSync(\"Waermeplaene\", \"DeteilansichtMeldungen\"));\r\n\r\n config.EventItemRestrictions = [{\r\n ItemId: \"Id\",\r\n InventoryId: \"Meldeliste\",\r\n Operation: \"AND\",\r\n Value: parameters.meldelisteId\r\n }];\r\n\r\n this.dataLoader = new AppKitchen.Data.EventDataLoader(config, () => {\r\n this.gridModel = new DetailansichtMeldungGridModel(this.dataLoader, {});\r\n new DeteilansichtMeldungGridView(this.gridModel, this.container.waermeplaene,\r\n {\r\n fillHeight: true,\r\n initialSort: [\r\n { field: 'Wärmepläne_Dokumententyp', dir: 'asc' },\r\n { field: 'Wärmepläne_Meldedatum', dir: 'desc' }\r\n ],\r\n templates: [\r\n { field: 'Wärmepläne_Pruefstatus', template: (model) => Prüfstatus.translateStatus(model, 'Wärmepläne_Pruefstatus') },\r\n { field: 'Wärmepläne_Anmerkung', template: (model) => DeteilansichtMeldungenView.translateAnmerkung(model) },\r\n ]\r\n });\r\n\r\n this.refreshData();\r\n\r\n AppKitchen.UIHelper.updateFullHeightGrids(this.el);\r\n });\r\n }\r\n\r\n private addTooltip(el: JQuery) {\r\n el.kendoTooltip({\r\n position: \"top\",\r\n show: e => AppKitchen.UIHelper.hideTooltips(e.sender)\r\n });\r\n }\r\n\r\n private refreshData(): void {\r\n this.dataLoader.loadData({\r\n success: () => {\r\n this.$el.find('.anmerkung').each((i, e) => this.addTooltip($(e)));\r\n }\r\n });\r\n }\r\n\r\n private static translateAnmerkung(model: any): string {\r\n const anmerkung = model['Wärmepläne_Anmerkung'];\r\n return `${anmerkung}`;\r\n }\r\n\r\n }\r\n\r\n export class DetailansichtMeldungBilanzdatenGridModel extends AppKitchen.Controls.Grids.EventGridModel {\r\n\r\n private applicationInfo: Domain.ApplicationInfo;\r\n public dataLoader: AppKitchen.Data.EventDataLoader;\r\n\r\n constructor(dataLoader: AppKitchen.Data.EventDataLoader, options?: AppKitchen.Controls.Grids.EventGridOptions) {\r\n super(dataLoader, AppKitchen.OptionsHelper.merge(options, {\r\n getColumnHeader: DetailansichtMeldungBilanzdatenGridModel.getColumnHeader\r\n }));\r\n\r\n this.applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n\r\n var columns = this.addVirtualColumns();\r\n this.set({ columns: columns });\r\n this.dataLoader = dataLoader;\r\n }\r\n\r\n private static getColumnHeader(inventoryId: string, itemId: string, eventItem: AppKitchen.Api.Models.EventItemInfo): string {\r\n return Strings[\"Field_\" + eventItem.Name] || eventItem.Name;\r\n }\r\n\r\n private addVirtualColumns(): kendo.ui.GridColumn[] {\r\n const columns: kendo.ui.GridColumn[] = [];\r\n this.get().columns\r\n .forEach(c => columns.push(c));\r\n\r\n const actionField = {\r\n field: \"Actions\",\r\n title: Strings.DeteilansichtMeldungen_GridColumn_Actions_Label,\r\n width: \"260px\",\r\n template: (m) => this.templateActions(m),\r\n filterable: false,\r\n groupable: false,\r\n sortable: false\r\n }\r\n\r\n //columns.splice(2, 0, waermeplaeneAnazhl);\r\n columns.push(actionField);\r\n\r\n return columns;\r\n }\r\n\r\n private templateActions(model: any): string {\r\n let template = '';\r\n\r\n if (this.applicationInfo.IsRP_Pruefer) {\r\n template += ``;\r\n }\r\n \r\n return template;\r\n }\r\n }\r\n\r\n export class DeteilansichtMeldungBilanzdatenGridView extends AppKitchen.Controls.Grids.GridView {\r\n public model: AppKitchen.Controls.Grids.EventGridModel;\r\n\r\n constructor(model: AppKitchen.Controls.Grids.EventGridModel, targetContainer: HTMLElement, options: AppKitchen.Controls.Grids.GridOptions) {\r\n super(model, targetContainer, options);\r\n }\r\n\r\n protected dataBound(e) {\r\n super.dataBound(e);\r\n\r\n const rows = e.sender.tbody.children();\r\n for (let j = 0; j < rows.length; j++) {\r\n const row = $(rows[j]);\r\n const dataItem = e.sender.dataItem(row);\r\n\r\n if (dataItem['Meldedaten_Pruefstatus'] === Prüfstatus.Freigegeben) {\r\n row.addClass(\"k-irrelevant\");\r\n }\r\n\r\n //const berichtsjahr: Date = dataItem['Meldeliste_Berichtsjahr'];\r\n\r\n row.find(\".set-inspection-status-btn\").click(() => this.openSetPruefstatusDialog(dataItem['Meldeliste_Id'], dataItem['Meldeliste_Pruefstatus'], dataItem['Meldeliste_Anmerkung']));\r\n }\r\n }\r\n \r\n private openSetPruefstatusDialog(id: string, pruefstatus: string, anmerkung: string): void {\r\n let window: kendo.ui.Window;\r\n const appOptions: PruefstatusDialog = {\r\n info: Strings.PruefstatusDialog_Info_SetMeldedaten,\r\n pruefstatus: pruefstatus,\r\n anmerkung: anmerkung,\r\n submit: (pruefstatus, anmerkung) => {\r\n window.close();\r\n this.setPruefstatus(id, pruefstatus, anmerkung);\r\n },\r\n cancel: () => {\r\n window.close();\r\n }\r\n } as any;\r\n const windowOptions: AppKitchen.UIHelper.Windows.WindowOptions = {\r\n buttons: [],\r\n modal: true,\r\n easyClose: false,\r\n width: \"40rem\",\r\n height: \"30rem\",\r\n closed: () => { }\r\n };\r\n\r\n window = new AppKitchen.FrameManager.RoutedApp(PruefstatusDialog, \"\").startInWindow(\r\n windowOptions,\r\n appOptions);\r\n }\r\n\r\n private setPruefstatus(id: string, pruefstatus: string, anmerkung: string): void {\r\n\r\n const data = this.model.dataLoader.getData();\r\n if (data.length === 1) {\r\n data[0]['Meldeliste_Pruefstatus'] = pruefstatus;\r\n data[0]['Meldeliste_Anmerkung'] = anmerkung;\r\n const saveRequest = this.model.dataLoader.getSaveRequestData(data[0]);\r\n AppKitchen.Data.Api.updateEventData(saveRequest,\r\n (result) => {\r\n console.log(result);\r\n this.model.dataLoader.loadData();\r\n window.close();\r\n AppKitchen.UIHelper.Notifications.notify(Strings.SetMeldedaten_Set_Notification, \"success\",\r\n { title: Strings.SetMeldedaten_Notification_Title, closeAfter: 5000 });\r\n },\r\n (requestData, xhr, statusText, errorText) => {\r\n AppKitchen.UIHelper.Notifications.notify(Strings.SetMeldedaten_Set_Error_Notification + ` '${errorText}'`,\r\n \"warning\",\r\n { title: Strings.SetMeldedaten_Fail_Notification_Title, closeAfter: 5000 });\r\n }\r\n );\r\n }\r\n \r\n \r\n //AppKitchen.Data.getDataApi('WaermeplanSetPruefstatus',\r\n // { Id: id, Pruefstatus: pruefstatus, Anmerkung: anmerkung, ClearAnmerkung: anmerkung === '' } as Domain.WaermeplanSetPruefstatusRequest,\r\n // success => {\r\n // if (success) {\r\n // this.model.dataLoader.loadData();\r\n // AppKitchen.UIHelper.Notifications.notify(`Der Prüfstatus des Wärmeplan '${fileName}' wurde erfolgreich gesetzt.`, \"success\", { title: 'Prüfstatus', closeAfter: 5000 });\r\n // }\r\n // this.model.set({ loading: false });\r\n // }, error => this.model.set({ loading: false }));\r\n }\r\n\r\n }\r\n\r\n export class DetailansichtMeldungGridModel extends AppKitchen.Controls.Grids.EventGridModel {\r\n\r\n private applicationInfo: Domain.ApplicationInfo;\r\n\r\n constructor(dataLoader: AppKitchen.Data.EventDataLoader, options?: AppKitchen.Controls.Grids.EventGridOptions) {\r\n super(dataLoader, AppKitchen.OptionsHelper.merge(options, {\r\n getColumnHeader: DetailansichtMeldungGridModel.getColumnHeader\r\n }));\r\n\r\n this.applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n\r\n var columns = this.addVirtualColumns();\r\n this.set({ columns: columns });\r\n }\r\n\r\n private static getColumnHeader(inventoryId: string, itemId: string, eventItem: AppKitchen.Api.Models.EventItemInfo): string {\r\n return Strings[\"Field_\" + eventItem.Name] || eventItem.Name;\r\n }\r\n\r\n private addVirtualColumns(): kendo.ui.GridColumn[] {\r\n const columns: kendo.ui.GridColumn[] = [];\r\n this.get().columns\r\n .forEach(c => columns.push(c));\r\n\r\n this.translateUserColumn(columns, 'Wärmepläne_Melder');\r\n this.translateUserColumn(columns, 'Wärmepläne_Pruefstatus_ChangeId');\r\n\r\n const actionField = {\r\n field: \"Actions\",\r\n title: Strings.DeteilansichtMeldungen_GridColumn_Actions_Label,\r\n width: \"260px\",\r\n template: (m) => this.templateActions(m),\r\n filterable: false,\r\n groupable: false,\r\n sortable: false\r\n }\r\n\r\n //columns.splice(2, 0, waermeplaeneAnazhl);\r\n columns.push(actionField);\r\n\r\n return columns;\r\n }\r\n\r\n private translateUserColumn(columns: kendo.ui.GridColumn[], columnId: string): void {\r\n columns.filter(c => c.field === columnId).forEach(c => c.template = (model) => {\r\n const value = model[columnId];\r\n const userInfo = Services.UserInfoService.instance.getUserInfo(value);\r\n if (!userInfo) {\r\n console.warn(`Can not read user info for user: '${value}'.`);\r\n return value;\r\n }\r\n if (!userInfo.Email) {\r\n console.warn(`No email was configured for user: '${value}'.`);\r\n return userInfo.Name;\r\n }\r\n return `${userInfo.Name}`;\r\n });\r\n }\r\n\r\n private templateActions(model: any): string {\r\n let template = '';\r\n if (model['Wärmepläne_Pruefstatus'] !== Prüfstatus.Zurueckgezogen) {\r\n if (model['Wärmepläne_Dokument']) {\r\n template += ``;\r\n\r\n if (this.applicationInfo.IsRP_Pruefer) {\r\n template += ``;\r\n }\r\n if (this.applicationInfo.IsWaermeplaner) {\r\n template += ``;\r\n }\r\n }\r\n }\r\n return template;\r\n }\r\n\r\n }\r\n\r\n export class DeteilansichtMeldungGridView extends AppKitchen.Controls.Grids.GridView {\r\n public model: AppKitchen.Controls.Grids.EventGridModel;\r\n\r\n constructor(model: AppKitchen.Controls.Grids.EventGridModel, targetContainer: HTMLElement, options: AppKitchen.Controls.Grids.GridOptions) {\r\n super(model, targetContainer, options);\r\n }\r\n\r\n protected dataBound(e) {\r\n super.dataBound(e);\r\n\r\n const rows = e.sender.tbody.children();\r\n for (let j = 0; j < rows.length; j++) {\r\n const row = $(rows[j]);\r\n const dataItem = e.sender.dataItem(row);\r\n\r\n if (dataItem['Wärmepläne_Pruefstatus'] === Prüfstatus.Zurueckgezogen) {\r\n row.addClass(\"k-irrelevant\");\r\n }\r\n\r\n row.find(\".download-btn\").click(() => this.downloadFile(dataItem['Wärmepläne_Id']));\r\n row.find(\".cancel-btn\").click(() => this.openCancelFileDialog(dataItem['Wärmepläne_Id'], dataItem['Wärmepläne_Dokument']));\r\n row.find(\".set-inspection-status-btn\").click(() => this.openSetPruefstatusDialog(dataItem['Wärmepläne_Id'], dataItem['Wärmepläne_Dokument'], dataItem['Wärmepläne_Pruefstatus'], dataItem['Wärmepläne_Anmerkung']));\r\n\r\n row.find(\".cancel-btn\").kendoTooltip(\r\n {\r\n content: () => \"Wählen Sie Zurückziehen um einen bereits eingereichten
Wärmeplan als gelöscht zu kennzeichnen. Anschließend können Sie erneut
einen Wärmeplan für das zurückgezogene Dokument einreichen\",\r\n position: \"bottom\"\r\n }).data(\"kendoTooltip\");\r\n }\r\n }\r\n\r\n private openCancelFileDialog(id: string, fileName: string): void {\r\n AppKitchen.UIHelper.DialogBoxes.confirm(`Möchten Sie den Wärmeplan '${fileName}' zurückziehen?`, () => this.cancelFile(id, fileName),\r\n { strings: { ok: \"Zurückziehen\", cancel: AppKitchen.Strings.Cancel },title: 'Datei zurückziehen' });\r\n }\r\n\r\n private cancelFile(id: string, fileName: string): void {\r\n this.model.set({ loading: true });\r\n AppKitchen.Data.getDataApi('WaermeplanSetPruefstatus',\r\n { Id: id, Pruefstatus: Prüfstatus.Zurueckgezogen } as Domain.WaermeplanSetPruefstatusRequest,\r\n success => {\r\n if (success) {\r\n this.model.set({ loading: false });\r\n this.model.dataLoader.loadData();\r\n AppKitchen.UIHelper.Notifications.notify(`Der Wärmeplan '${fileName}' wurde erfolgreich zurückgezogen.`, \"success\", {title: 'Zurückgezogen', closeAfter: 5000});\r\n }\r\n }, error => this.model.set({ loading: false }));\r\n }\r\n\r\n private openSetPruefstatusDialog(id: string, fileName: string, pruefstatus: string, anmerkung: string): void {\r\n let window: kendo.ui.Window;\r\n const appOptions: PruefstatusDialog = {\r\n info: Utils.StringUtils.format(Strings.PruefstatusDialog_Info_UploadWaermeplaene, fileName),\r\n fileName: fileName,\r\n pruefstatus: pruefstatus,\r\n anmerkung: anmerkung,\r\n submit: (pruefstatus, anmerkung) => {\r\n window.close();\r\n this.setPruefstatus(id, pruefstatus, anmerkung, fileName);\r\n },\r\n cancel: () => {\r\n window.close();\r\n }\r\n } as any;\r\n const windowOptions: AppKitchen.UIHelper.Windows.WindowOptions = {\r\n buttons: [],\r\n modal: true,\r\n easyClose: false,\r\n width: \"40rem\",\r\n height: \"30rem\",\r\n closed: () => {}\r\n };\r\n\r\n window = new AppKitchen.FrameManager.RoutedApp(PruefstatusDialog, \"\").startInWindow(\r\n windowOptions,\r\n appOptions);\r\n }\r\n\r\n private setPruefstatus(id: string, pruefstatus: string, anmerkung: string, fileName: string): void {\r\n this.model.set({ loading: true });\r\n AppKitchen.Data.getDataApi('WaermeplanSetPruefstatus',\r\n { Id: id, Pruefstatus: pruefstatus, Anmerkung: anmerkung, ClearAnmerkung: anmerkung === '' } as Domain.WaermeplanSetPruefstatusRequest,\r\n success => {\r\n if (success) {\r\n this.model.dataLoader.loadData();\r\n AppKitchen.UIHelper.Notifications.notify(`Der Prüfstatus des Wärmeplan '${fileName}' wurde erfolgreich gesetzt.`, \"success\", {title: 'Prüfstatus', closeAfter: 5000});\r\n }\r\n this.model.set({ loading: false });\r\n }, error => this.model.set({ loading: false }));\r\n }\r\n\r\n private downloadFile(id: string): void {\r\n const apiUrl = \"./api\";\r\n\r\n const request = new XMLHttpRequest();\r\n request.responseType = \"blob\";\r\n request.open(\"GET\", `${apiUrl}/MeldungenFileReader?id=${escape(id)}`);\r\n request.onload = function () { DeteilansichtMeldungGridView.onLoaded(this); }\r\n request.send();\r\n }\r\n\r\n private static onLoaded(xhr: XMLHttpRequest): void {\r\n if (xhr.status !== 200) {\r\n AppKitchen.UIHelper.Notifications.notify(Strings.DeteilansichtMeldungen_Download_Fail_Notification_Content,\r\n \"warning\",\r\n { title: Strings.DeteilansichtMeldungen_Download_Fail_Notification_Title + ` - Status: ${xhr.status}`, closeAfter: 3000 });\r\n return;\r\n }\r\n\r\n const downloadUrl = window.URL.createObjectURL(xhr.response);\r\n const filename = this.getFileNameFromRequest(xhr);\r\n\r\n if (!downloadUrl || !filename) {\r\n AppKitchen.UIHelper.Notifications.notify(Strings.DeteilansichtMeldungen_Download_Fail_Notification_Content,\r\n \"warning\",\r\n { title: Strings.DeteilansichtMeldungen_Download_Fail_Notification_Title, closeAfter: 3000 });\r\n\r\n return;\r\n }\r\n\r\n this.createLinkAndClickIt(downloadUrl, filename);\r\n\r\n AppKitchen.UIHelper.Notifications.notify(Utils.StringUtils.format(Strings.DeteilansichtMeldungen_Download_Success_Notification_Content, filename),\r\n \"success\",\r\n { title: Strings.DeteilansichtMeldungen_Download_Success_Notification_Title, closeAfter: 3000 });\r\n }\r\n\r\n private static createLinkAndClickIt(downloadUrl: string, filename: string): void {\r\n const a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.href = downloadUrl;\r\n a.download = filename;\r\n a.click();\r\n }\r\n\r\n private static getFileNameFromRequest(xhr: XMLHttpRequest): string {\r\n let filename = \"download-\" + $.now();\r\n const disposition = xhr.getResponseHeader('Content-Disposition');\r\n if (disposition && disposition.indexOf('attachment') !== -1) {\r\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n const matches = filenameRegex.exec(disposition);\r\n if (matches != null && matches[1]) {\r\n filename = matches[1].replace(/['\"]/g, '');\r\n }\r\n }\r\n return decodeURI(filename);\r\n }\r\n }\r\n}","/// \r\n\r\nmodule KEA.BW.Waermeplanung.Web.Controls {\r\n\r\n import ParametersBase = BW.Waermeplanung.Web.Services.ParametersBase;\r\n import SerializedParameterSet = BW.Waermeplanung.Web.Services.SerializedParameterSet;\r\n import RoutingService = BW.Waermeplanung.Web.Services.RoutingService;\r\n\r\n class RoutingParameters {\r\n public static readonly MeldelisteId: string = \"meldeliste\";\r\n }\r\n\r\n export class DeteilansichtMeldungenRoutingParameters extends ParametersBase {\r\n constructor(\r\n public readonly meldelisteId: string,\r\n ) { super() }\r\n\r\n public getParameterSet(): SerializedParameterSet {\r\n const param: SerializedParameterSet = {};\r\n param[RoutingParameters.MeldelisteId] = escape(this.meldelisteId);\r\n return param;\r\n }\r\n }\r\n\r\n export class DeteilansichtMeldungenRoutingService extends RoutingService {\r\n \r\n public static getParameters(): DeteilansichtMeldungenRoutingParameters {\r\n const urlQuery = this.readParameters();\r\n return new DeteilansichtMeldungenRoutingParameters(\r\n urlQuery[RoutingParameters.MeldelisteId],\r\n );\r\n }\r\n\r\n public static setParameters(parameters: DeteilansichtMeldungenRoutingParameters) : void {\r\n const p = {};\r\n p[RoutingParameters.MeldelisteId] = parameters.meldelisteId;\r\n this.writeParameters(p);\r\n }\r\n\r\n public static getRoute(parameters: DeteilansichtMeldungenRoutingParameters): string {\r\n return parameters.buildRoute(Apps.Routes.DeteilansichtMeldungen);\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n import Apps = KEA.BW.Waermeplanung.Web.Apps;\r\n import TreeViewData = AppKitchen.Api.Models.TreeViewData;\r\n import Api = AppKitchen.Api;\r\n\r\n export interface TimeSeriesBaseModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class TimeSeriesBaseModel extends AppKitchen.ModelBase {\r\n }\r\n\r\n export interface TimeSeriesBaseViewOptions extends AppKitchen.ViewBaseOptions {\r\n importViewApp: AppKitchen.FrameManager.RoutedApp;\r\n headerTitle: string;\r\n dataRequestEndpoint: string;\r\n filterRequestEndpoint: string;\r\n excelFileName: string;\r\n treeViewTreeId: string;\r\n }\r\n\r\n export class TimeSeriesBaseView extends AppKitchen.ViewBase {\r\n public options: TimeSeriesBaseViewOptions;\r\n public requestCall: JQueryXHR;\r\n\r\n protected hasSearch: boolean = false;\r\n protected isCommune: boolean = true;\r\n protected selectedCommuneId: string;\r\n protected treeViewData: TreeViewData[];\r\n protected showTreeView: boolean = true;\r\n protected isPublicLogin: boolean = false;\r\n\r\n protected container: {\r\n title: HTMLElement,\r\n spreadsheet: JQuery,\r\n form: HTMLElement,\r\n actionContainer: HTMLElement,\r\n search: HTMLElement,\r\n treeView: HTMLElement,\r\n treeViewContainer: HTMLElement,\r\n }\r\n\r\n protected buttons: {\r\n import: JQuery,\r\n }\r\n \r\n constructor(model: TimeSeriesBaseModel, targetContainer: HTMLElement, options?: TimeSeriesBaseViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options,\r\n {\r\n headerTitle: Strings.TimeSeriesBase_Title,\r\n importViewApp: null,\r\n dataRequestEndpoint: \"ZeitreihenWaermeplanung\",\r\n filterRequestEndpoint: \"ZeitreihenWaermeplanungTimeseriesFilter\",\r\n excelFileName: \"\",\r\n treeViewTreeId: AppKitchen.GlobalSettings.customConfig.CommuneTree\r\n }));\r\n\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n if (applicationInfo) {\r\n this.isPublicLogin = true;\r\n }\r\n\r\n this.setTemplate(Web.Templates.TimeSeriesBase);\r\n this.postRender();\r\n this.render();\r\n }\r\n\r\n protected postRender() {}\r\n\r\n public render() {\r\n this.renderTemplate({});\r\n this.setContainers();\r\n this.setButtons();\r\n this.setEvents();\r\n this.setHeaderTitle();\r\n\r\n this.model.set({ loading: true });\r\n\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n this.isCommune = this.isPublicLogin && applicationInfo.IsKommune;\r\n if (!this.showTreeView || this.isCommune) {\r\n this.container.treeViewContainer.remove();\r\n this.selectedCommuneId = applicationInfo?.Commune?.Id;\r\n this.loadTimeseriesViewList();\r\n } else {\r\n // only show the tree view if its not a commune worker\r\n this.loadTreeView();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected setContainers(): void {\r\n this.container = {\r\n title: this.$el.find(\".title\")[0],\r\n spreadsheet: this.$el.find(\".spreadsheet-container\"),\r\n form: this.$el.find(\".form-container\")[0],\r\n actionContainer: this.$el.find(\".action-container\")[0],\r\n search: this.$el.find(\".search-field\")[0],\r\n treeView: this.$el.find(\".tree-view\")[0],\r\n treeViewContainer: this.$el.find(\".tree-view-container\")[0],\r\n }\r\n }\r\n\r\n protected setButtons(): void {\r\n this.buttons = {\r\n import: this.$el.find(\".import-button\"),\r\n }\r\n }\r\n\r\n protected setEvents(): void {\r\n if (this.isPublicLogin && Services.ApplicationInfoService.instance.getApplicationInfo().IsKommune && this.options.importViewApp) {\r\n this.buttons.import.click(() => this.openImportModal());\r\n } else {\r\n this.buttons.import.remove();\r\n }\r\n }\r\n\r\n protected setHeaderTitle(): void {\r\n this.container.title.innerHTML = this.options.headerTitle;\r\n }\r\n\r\n protected openImportModal(): void {\r\n const appOptions: Apps.ImportZeitreihenAppOptions = {\r\n dataLoaderDocumentName: \"\",\r\n dataLoaderDocumentType: \"\",\r\n inventoryId: \"\"\r\n };\r\n const windowOptions: AppKitchen.UIHelper.Windows.WindowOptions = {\r\n buttons: [\r\n { name: \"undock\", action: (window) => this.undockWindow(window) },\r\n { name: \"close\", action: (window) => window.close() }\r\n ],\r\n modal: true,\r\n easyClose: true,\r\n width: \"80%\",\r\n closed: () => {\r\n // refocus grid on close (if browser window still focused)\r\n //if (document.hasFocus()) this.focusGrid();\r\n }\r\n };\r\n\r\n // open window\r\n this.options.importViewApp.startInWindow(windowOptions);\r\n }\r\n\r\n protected undockWindow(window: kendo.ui.Window) {\r\n AppKitchen.BrowserHelper.openInWindow(\"#/\" + this.options.importViewApp.route + \"/\", true);\r\n window.close();\r\n }\r\n\r\n protected loadTimeseriesViewList(): void {\r\n const endpoint = this.options.filterRequestEndpoint;\r\n AppKitchen.Data.getData(endpoint, null,\r\n (response: KEA.BW.Waermeplanung.Domain.TimeseriesViewReference[]) => {\r\n this.onTimeseriesViewListLoaded(response);\r\n },\r\n (error) => {\r\n console.error(\"Failed to load: \" + endpoint);\r\n console.error(error);\r\n this.model.set({ loading: false });\r\n });\r\n }\r\n\r\n protected onTimeseriesViewListLoaded(response: KEA.BW.Waermeplanung.Domain.TimeseriesViewReference[]): void {\r\n this.model.set({ loading: false });\r\n this.createForm(response);\r\n }\r\n\r\n protected createForm(timeseriesViewReferences: KEA.BW.Waermeplanung.Domain.TimeseriesViewReference[]): void {\r\n const pool: AppKitchen.Controls.Forms.TextPool = {\r\n values: timeseriesViewReferences,\r\n textField: \"Name\",\r\n valueField: \"Id\",\r\n restrict: true,\r\n search: true\r\n }\r\n\r\n const fieldModel = new AppKitchen.Controls.Forms.FieldModel(\r\n \"filter\",\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n Strings.FilterDropdown_Description,\r\n {\r\n pool: pool,\r\n mandatory: true,\r\n kendoOptions: {\r\n filter: \"contains\"\r\n }\r\n }\r\n );\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new AppKitchen.Controls.Forms.TextFieldView(fieldModel, {editable: true});\r\n\r\n const formModel = new AppKitchen.Controls.Forms.FormModel([fieldModel], {});\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new AppKitchen.Controls.Forms.HorizontalTabularFormView(formModel, this.container.form, { editable: true });\r\n\r\n formModel.onAnyValueChange((fieldModel, value) => {\r\n TimeSeriesBaseRoutingService.setParameters(new TimeSeriesBaseRoutingParameters(value, this.selectedCommuneId)); \r\n this.loadSpreadsheet(value);\r\n });\r\n\r\n const parameters = TimeSeriesBaseRoutingService.getParameters();\r\n formModel.setFieldsData({ filter: parameters != null && parameters.timeseriesViewId ? parameters.timeseriesViewId : timeseriesViewReferences[0].Id });\r\n }\r\n\r\n protected loadSpreadsheet(timeseriesViewId: string): void {\r\n AppKitchen.UIHelper.renderLoader(this.container.spreadsheet[0]);\r\n\r\n if (this.requestCall) {\r\n this.requestCall.abort();\r\n }\r\n \r\n const isCommune = this.isPublicLogin && Services.ApplicationInfoService.instance.getApplicationInfo().IsKommune;\r\n const request: KEA.BW.Waermeplanung.Domain.TimeseriesRequest = {\r\n TimeseriesViewId: timeseriesViewId,\r\n IsCommune: isCommune,\r\n CommuneId: this.selectedCommuneId\r\n };\r\n\r\n this.requestCall = this.requestData(request);\r\n }\r\n\r\n protected requestData(request: KEA.BW.Waermeplanung.Domain.TimeseriesRequest): JQueryXHR {\r\n const endpoint = this.options.dataRequestEndpoint;\r\n return AppKitchen.Data.getData(endpoint, request,\r\n (response: KEA.BW.Waermeplanung.Domain.GridData) => {\r\n AppKitchen.UIHelper.removeLoader(this.container.spreadsheet[0]);\r\n this.createSpreadsheet(response);\r\n },\r\n (requestData, xhr: JQueryXHR, statusText, errorText) => {\r\n console.error(\"Failed to load: \" + endpoint);\r\n AppKitchen.UIHelper.Notifications.notify(Strings.TimeSeriesBase_Get_Error,\r\n \"warning\",\r\n { title: Strings.TimeSeriesBase_Get_Error_Title, closeAfter: 5000 });\r\n AppKitchen.UIHelper.removeLoader(this.container.spreadsheet[0]);\r\n });\r\n }\r\n\r\n protected createSpreadsheet(gridData: KEA.BW.Waermeplanung.Domain.GridData): kendo.ui.Spreadsheet {\r\n this.container.spreadsheet.empty();\r\n\r\n const spreadsheet = this.container.spreadsheet.kendoSpreadsheet({\r\n excel: {\r\n // Required to enable saving files in older browsers\r\n proxyURL: \"https://demos.telerik.com/kendo-ui/service/export\"\r\n },\r\n pdf: {\r\n proxyURL: \"https://demos.telerik.com/kendo-ui/service/export\"\r\n },\r\n toolbar: false,\r\n sheetsbar: false,\r\n sheets: [\r\n Utils.Grid.transformSheet(gridData)\r\n ]\r\n }).data(\"kendoSpreadsheet\");\r\n\r\n spreadsheet.options.excel.fileName = `${this.options.excelFileName}.xlsx`;\r\n return spreadsheet;\r\n //this.removeSpreadsheetActionBar(spreadsheet);\r\n }\r\n\r\n private loadTreeView(): void {\r\n\r\n const searchBoxModel = new AppKitchen.Controls.SearchBoxModel({ query: \"\" });\r\n if (this.hasSearch)\r\n {\r\n // ReSharper disable once WrongExpressionStatement\r\n new AppKitchen.Controls.SearchBoxView(searchBoxModel, this.container.search, {\r\n placeholder: AppKitchen.Strings.SearchBox_Search\r\n });\r\n }\r\n\r\n let treeModel = new AppKitchen.Controls.TreeView.TreeViewModel();\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n const treeView = new AppKitchen.Controls.TreeView.TreeView(treeModel, this.container.treeView,\r\n {\r\n //hasCheckboxes: true,\r\n //checkParents: true,\r\n routingParameter: \"items\",\r\n });\r\n\r\n // access the kendo tree control variable to hook up the select function\r\n const treeControl: kendo.ui.TreeView = (treeView).kendoTreeControl;\r\n treeControl.bind(\"change\", (e) => this.onTreeSelected(treeControl, e));\r\n treeControl.bind(\"select\", (e) => this.onTreeSelected(treeControl, e));\r\n\r\n // load the tree data from mesap\r\n new AppKitchen.Data.Provider.TreeViewProvider().load({ dimension: \"Reg\", treeId: this.options.treeViewTreeId })\r\n .then(treeViewData => {\r\n this.sortData(treeViewData);\r\n treeModel.setTreeViewDomainData(treeViewData, (domainData) => this.convertAll(domainData));\r\n // collapse all items\r\n treeControl.collapse(\".k-item\");\r\n\r\n const parameters = TimeSeriesBaseRoutingService.getParameters();\r\n if (!parameters.commune) {\r\n const firstNode = this.getFirstNode(treeViewData);\r\n this.selectedCommuneId = firstNode.descriptorId;\r\n\r\n } else {\r\n this.selectedCommuneId = parameters.commune;\r\n }\r\n\r\n const item = treeControl.findByText(this.selectedCommuneId);\r\n if (item.length > 0) {\r\n treeControl.select(item);\r\n treeControl.focus();\r\n }\r\n \r\n // load the time series after we got all the communes to filter it (prevents to big data)\r\n this.loadTimeseriesViewList();\r\n\r\n if (this.hasSearch) {\r\n searchBoxModel.onChange((query) => {\r\n if (treeViewData) {\r\n if (query) {\r\n console.log(treeViewData);\r\n const filteredItems = treeViewData.filter((element) => {\r\n // TODO: this filters only the parent nodes, not the child ones\r\n // see: https://docs.telerik.com/kendo-ui/knowledge-base/filter-out-search-results\r\n return element.descriptorName.toLowerCase().includes(query.toLowerCase());\r\n });\r\n treeModel.setTreeViewDomainData(filteredItems,\r\n (domainData) => this.convertAll(domainData));\r\n } else {\r\n treeModel.setTreeViewDomainData(treeViewData,\r\n (domainData) => this.convertAll(domainData));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n private onTreeSelected(treeView: kendo.ui.TreeView, e: any): void {\r\n if (e.node) {\r\n const dataItem = treeView.dataItem(e.node);\r\n if (!(dataItem as any).hasChildren) {\r\n \r\n treeView.select(e.node);\r\n treeView.focus();\r\n\r\n const communeDescriptorId = (dataItem).data.descriptorId;\r\n const parameters = TimeSeriesBaseRoutingService.getParameters();\r\n TimeSeriesBaseRoutingService.setParameters(new TimeSeriesBaseRoutingParameters(\r\n parameters.timeseriesViewId,\r\n communeDescriptorId)\r\n );\r\n this.selectedCommuneId = communeDescriptorId;\r\n //this.model.set({ loading: true });\r\n this.loadSpreadsheet(parameters.timeseriesViewId);\r\n }\r\n }\r\n }\r\n\r\n private sortData(treeViewData: TreeViewData[]) {\r\n // sort \r\n treeViewData = treeViewData.sort((a, b) => a.descriptorName.localeCompare(b.descriptorName));\r\n // sort children\r\n for (let entry of treeViewData) {\r\n if (entry.items.length) {\r\n this.sortData(entry.items);\r\n }\r\n }\r\n }\r\n\r\n private getFirstNode(treeViewData: TreeViewData[]) {\r\n for (let entry of treeViewData) {\r\n if (entry.items.length) {\r\n if (entry.items[0].items.length) {\r\n return this.getFirstNode(entry.items);\r\n } else {\r\n return entry.items[0];\r\n }\r\n }\r\n }\r\n }\r\n \r\n\r\n private convertAll(treeViewSubData: Api.Models.TreeViewData[], idPrefix: string = null): AppKitchen.Controls.TreeView.TreeViewItem[] {\r\n return treeViewSubData.AsLinq().Select((i) => this.convert(i, idPrefix)).ToArray();\r\n }\r\n\r\n private convert(treeViewData: Api.Models.TreeViewData, idPrefix: string = null): AppKitchen.Controls.TreeView.TreeViewItem {\r\n const id = idPrefix ? `${idPrefix}_${treeViewData.descriptorId}` : treeViewData.descriptorId;\r\n return {\r\n data: treeViewData,\r\n text: treeViewData.descriptorName,\r\n imageUrl: treeViewData.dimensionIconData,\r\n expanded: true,\r\n items: this.convertAll(treeViewData.items, id),\r\n id: id,\r\n }\r\n }\r\n \r\n }\r\n}","/// \r\nmodule KEA.BW.Waermeplanung.Web.Controls {\r\n import Apps = KEA.BW.Waermeplanung.Web.Apps;\r\n\r\n export interface EvaluationsModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class EvaluationsModel extends AppKitchen.ModelBase {\r\n }\r\n\r\n export interface EvaluationsViewOptions extends TimeSeriesBaseViewOptions {\r\n templateFolder: string;\r\n dropdownLabel: string;\r\n downloadButtonLabel?: string;\r\n }\r\n\r\n export class EvaluationsView extends TimeSeriesBaseView {\r\n\r\n protected actionButtons: {\r\n download: JQuery,\r\n export: JQuery\r\n }\r\n \r\n private directoryFileInfo: Waermeplanung.Domain.DirectoryFileInfo;\r\n private selectedTemplate: string;\r\n private downloadButtonLabel: string;\r\n private downloading: boolean = false;\r\n\r\n constructor(model: TimeSeriesBaseModel, targetContainer: HTMLElement, options?: EvaluationsViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, {\r\n headerTitle: Strings.TimeSeriesBase_Title,\r\n importViewApp: null,\r\n dataRequestEndpoint: \"\",\r\n filterRequestEndpoint: \"\",\r\n excelFileName: \"\",\r\n templateFolder: \"\",\r\n dropdownLabel: Strings.Evaluations_DropdownLabel,\r\n treeViewTreeId: options.treeViewTreeId\r\n }));\r\n\r\n this.downloadButtonLabel = options.downloadButtonLabel;\r\n\r\n this.setActionButtons();\r\n }\r\n\r\n protected postRender() {\r\n this.showTreeView = false;\r\n }\r\n\r\n private setActionButtons(): void {\r\n this.actionButtons = {\r\n download: this.$el.find(\".a-button-download\"),\r\n export: this.$el.find(\".a-button-export\")\r\n }\r\n\r\n if (this.downloadButtonLabel) {\r\n this.actionButtons.download[0].innerHTML = this.downloadButtonLabel;\r\n }\r\n }\r\n \r\n protected setHeaderTitle(): void {\r\n super.setHeaderTitle();\r\n AppKitchen.UIHelper.renderTemplateTo(this.container.actionContainer, Templates.Evaluations);\r\n }\r\n \r\n protected setTemplateDownloadEvent(): void {\r\n this.actionButtons.download[0].removeAttribute(\"disabled\");\r\n\r\n this.actionButtons.download.dblclick((e) => {\r\n e.preventDefault();\r\n });\r\n\r\n let that = this;\r\n this.actionButtons.download.click((e) => {\r\n\r\n if (that.downloading) {\r\n return;\r\n }\r\n\r\n that.downloading = true;\r\n setTimeout(() => {\r\n that.downloading = false;\r\n }, 1000);\r\n\r\n const newLink = document.createElement('a') as unknown as HTMLLinkElement;\r\n newLink.href = `api/${(this.options as EvaluationsViewOptions).templateFolder}/${this.selectedTemplate}`;\r\n newLink.target = \"_blank\";\r\n newLink.click();\r\n });\r\n }\r\n\r\n protected unsetTemplateDownloadEvent(): void {\r\n this.actionButtons.download.prop(\"onclick\", null).off(\"click\");\r\n this.actionButtons.download[0].setAttribute(\"disabled\", \"disabled\");\r\n }\r\n\r\n protected onTimeseriesViewListLoaded(response: KEA.BW.Waermeplanung.Domain.TimeseriesViewReference[]): void {\r\n this.model.set({ loading: false });\r\n this.getFiles(response);\r\n }\r\n\r\n private getFiles(timeseriesViewReferences: KEA.BW.Waermeplanung.Domain.TimeseriesViewReference[]): void {\r\n const requestData: Waermeplanung.Domain.DirectoryFileInfoRequest = {\r\n DirectoryPath: (this.options as EvaluationsViewOptions).templateFolder\r\n };\r\n AppKitchen.Data.getDataApi(\"DirectoryFileList\", requestData,\r\n (result: Waermeplanung.Domain.DirectoryFileInfo) => {\r\n this.directoryFileInfo = result;\r\n this.model.set({ loading: false });\r\n this.createForm(timeseriesViewReferences);\r\n });\r\n }\r\n\r\n // TODO: selected filter is the value, excel files are named after the key (longname) -> fix this somehow\r\n private setSuitableFile(selectedFilter: string) {\r\n let found = false;\r\n const filterPrefix = selectedFilter.split(\":\")[0];\r\n for (const fileName of this.directoryFileInfo.FileNames) {\r\n if (fileName.includes(filterPrefix)) {\r\n found = true;\r\n this.setTemplateDownloadEvent();\r\n this.selectedTemplate = fileName;\r\n break;\r\n }\r\n }\r\n\r\n if (!found) {\r\n this.unsetTemplateDownloadEvent();\r\n this.selectedTemplate = Strings.Evaluations_FileNotFound;\r\n }\r\n }\r\n\r\n protected createForm(timeseriesViewReferences: KEA.BW.Waermeplanung.Domain.TimeseriesViewReference[]): void {\r\n const pool: AppKitchen.Controls.Forms.TextPool = {\r\n values: timeseriesViewReferences,\r\n textField: \"Name\",\r\n valueField: \"Id\",\r\n restrict: true,\r\n search: true\r\n }\r\n const filterFieldModel = new AppKitchen.Controls.Forms.FieldModel(\r\n \"filter\",\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n (this.options as EvaluationsViewOptions).dropdownLabel,\r\n {\r\n pool: pool,\r\n mandatory: true,\r\n kendoOptions: {\r\n autoWidth: true,\r\n filter: \"contains\"\r\n }\r\n }\r\n );\r\n\r\n const labelFieldModel = new AppKitchen.Controls.Forms.FieldModel(\"label\",\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n Strings.Evaluations_Template_Label,\r\n {\r\n //disabled: true,\r\n default: Strings.Evaluations_Template_Label,\r\n readOnly: true\r\n }\r\n\r\n );\r\n\r\n // ReSharper disable twice WrongExpressionStatement\r\n new AppKitchen.Controls.Forms.TextFieldView(filterFieldModel, { editable: true });\r\n new AppKitchen.Controls.Forms.TextFieldView(labelFieldModel, { editable: false });\r\n\r\n const formModel = new AppKitchen.Controls.Forms.FormModel([filterFieldModel, labelFieldModel], {});\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new AppKitchen.Controls.Forms.HorizontalTabularFormView(formModel, this.container.form, { editable: true });\r\n\r\n formModel.onAnyValueChange((fieldModel, value) => {\r\n if (fieldModel.attributes.key === \"filter\") {\r\n const displayValue = fieldModel.get().displayValue;\r\n this.setSuitableFile(displayValue);\r\n labelFieldModel.set({ value: this.selectedTemplate, hasData: true });\r\n TimeSeriesBaseRoutingService.setParameters(new TimeSeriesBaseRoutingParameters(value));\r\n this.options.excelFileName = displayValue;\r\n this.loadSpreadsheet(value);\r\n }\r\n });\r\n\r\n const parameters = TimeSeriesBaseRoutingService.getParameters();\r\n\r\n const filterValue = parameters != null && parameters.timeseriesViewId\r\n ? parameters.timeseriesViewId\r\n : timeseriesViewReferences[0].Id\r\n ;\r\n\r\n let labelValue = Strings.Evaluations_Template_Label;\r\n\r\n // finde the name for the id, the dropdown and url paramter is based on the id, but the template needs the long name\r\n for (const timeseriesViewReference of timeseriesViewReferences) {\r\n if (timeseriesViewReference.Id === filterValue) {\r\n labelValue = timeseriesViewReference.Name;\r\n break;\r\n }\r\n }\r\n\r\n this.setSuitableFile(labelValue);\r\n formModel.setFieldsData({\r\n filter: filterValue,\r\n label: this.selectedTemplate\r\n });\r\n }\r\n\r\n protected createSpreadsheet(gridData: KEA.BW.Waermeplanung.Domain.GridData): kendo.ui.Spreadsheet {\r\n const spreadSheet = super.createSpreadsheet(gridData);\r\n // remove onclick first or the button can cause multiple downloads of different views at the same time\r\n this.actionButtons.export.prop(\"onclick\", null).off(\"click\");\r\n this.actionButtons.export.click(() => spreadSheet.saveAsExcel());\r\n return spreadSheet;\r\n }\r\n\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n\r\n export interface ImportZeitreihenModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n file?: File;\r\n fileNameOriginal?: string;\r\n fileNameGenerated?: string;\r\n fileNameWithoutExtension?: string;\r\n fileExtension?: string;\r\n generated?: string;\r\n uploadProgress?: number;\r\n userId: string;\r\n communeId: string;\r\n dataLoaderDocumentName: string;\r\n dataLoaderDocumentType: string;\r\n inventoryId: string;\r\n }\r\n\r\n export class ImportZeitreihenModel extends AppKitchen.ModelBase {\r\n\r\n public dataLoader: ImportZeitreihenDataLoader;\r\n\r\n public successUploadCallback: () => void;\r\n public failUploadCallback: () => void;\r\n\r\n public readonly userId: string;\r\n public readonly communeId: string;\r\n\r\n constructor(attributes: ImportZeitreihenModelAttributes) {\r\n super(attributes);\r\n\r\n const config: AppKitchen.Data.GridConfig = JSON.parse(Data.getDocumentSync(attributes.dataLoaderDocumentName, attributes.dataLoaderDocumentType));\r\n\r\n config.EventItemRestrictions = [{\r\n ItemId: \"NavObject_Reg\",\r\n InventoryId: attributes.inventoryId,\r\n Operation: \"AND\",\r\n Value: attributes.communeId\r\n }];\r\n\r\n this.dataLoader = new ImportZeitreihenDataLoader(config, () => {\r\n this.dataLoader.inventoryId = attributes.inventoryId;\r\n this.dataLoader.loadData();\r\n });\r\n\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n\r\n this.userId = applicationInfo.UserId;\r\n if (applicationInfo.IsKommune) {\r\n this.communeId = applicationInfo.Commune.Id;\r\n }\r\n }\r\n\r\n public updateFile(file: File): void {\r\n const fileNameWithoutExtension = Utils.File.getFileNameWithoutExtension(file);\r\n const fileExtension = Utils.File.getFileExtension(file);\r\n const generated = Utils.File.getGeneratedFileNamePart();\r\n\r\n this.set(AppKitchen.OptionsHelper.merge({\r\n file: file,\r\n fileNameOriginal: Utils.File.getFileName(file),\r\n fileNameGenerated: `${generated}_${this.communeId}$${fileNameWithoutExtension}.${fileExtension}`,\r\n fileNameWithoutExtension: fileNameWithoutExtension,\r\n fileExtension: fileExtension,\r\n generated: generated,\r\n }, this.attributes));\r\n }\r\n\r\n public reset(): void {\r\n this.set(AppKitchen.OptionsHelper.merge({\r\n file: null,\r\n fileNameOriginal: null,\r\n fileNameGenerated: null,\r\n fileNameWithoutExtension: null,\r\n fileExtension: null,\r\n generated: null,\r\n }, this.attributes));\r\n }\r\n\r\n public reload(): void {\r\n this.dataLoader.loadData();\r\n }\r\n\r\n public uploadFile(): void {\r\n this.sendFile();\r\n }\r\n\r\n public sendFile(finished?: () => void): void {\r\n if (!this.get().fileNameGenerated || !this.get().fileNameOriginal || !this.communeId) {\r\n if (finished) finished();\r\n return;\r\n }\r\n\r\n const apiUrl = \"./api\";\r\n $.ajax({\r\n dataType: \"json\",\r\n url: `${apiUrl}/ZeitreihenFileUpload` +\r\n `?fileName=${encodeURI(this.get().fileNameGenerated)}` +\r\n `&originalFileName=${encodeURI(this.get().fileNameOriginal)}` +\r\n `&commune=${encodeURI(this.communeId)}` +\r\n `&eventInventory=${encodeURI(this.attributes.inventoryId)}`,\r\n type: 'POST',\r\n xhr: () => {\r\n const myXhr = $.ajaxSettings.xhr();\r\n if (myXhr.upload) {\r\n myXhr.upload.addEventListener('progress', e => this.uploadProgressHandling(e), false);\r\n }\r\n return myXhr;\r\n },\r\n success: (result) => {\r\n if (result) {\r\n this.dataLoader.loadData();\r\n this.reset();\r\n this.set({ isAlreadyUploaded: true });\r\n if (this.successUploadCallback) {\r\n this.successUploadCallback();\r\n }\r\n } else {\r\n if (this.failUploadCallback) {\r\n this.failUploadCallback();\r\n }\r\n }\r\n if (finished) finished();\r\n },\r\n error: () => {\r\n if (this.failUploadCallback) {\r\n this.failUploadCallback();\r\n }\r\n if (finished) finished();\r\n },\r\n data: this.get().file,\r\n cache: false,\r\n contentType: false,\r\n processData: false\r\n });\r\n }\r\n\r\n private uploadProgressHandling(e: ProgressEvent): void {\r\n if (e.lengthComputable) {\r\n const s = e.loaded / e.total * 100;\r\n this.set({\r\n uploadProgress: s\r\n });\r\n }\r\n }\r\n }\r\n\r\n class ImportZeitreihenDataLoader extends AppKitchen.Data.EventDataLoader {\r\n\r\n public inventoryId: string;\r\n\r\n parseDataInternal(data: AppKitchen.Data.DataEntries[]): AppKitchen.Data.DataEntries[] {\r\n const dict: { [id: string]: any } = {}\r\n data.forEach((d: any) => { \r\n const id = d[`${this.inventoryId}_Id`];\r\n if (!dict[id]) {\r\n dict[id] = d;\r\n } else {\r\n if (dict[id]['Konverter_Dateilog_Verarbeitungszeitpunkt'] < d['Konverter_Dateilog_Verarbeitungszeitpunkt']) {\r\n dict[id] = d;\r\n }\r\n }\r\n });\r\n\r\n return Object.keys(dict).map(key => dict[key]);\r\n }\r\n\r\n setData(data: AppKitchen.Data.DataEntries[], sender: object): void {\r\n super.setData(this.parseDataInternal(data), sender);\r\n }\r\n }\r\n\r\n export interface ImportZeitreihenViewOptions extends AppKitchen.ViewBaseOptions {\r\n }\r\n\r\n export class ImportZeitreihenView extends AppKitchen.ViewBase {\r\n public options: ImportZeitreihenViewOptions;\r\n\r\n private acceptedFileTypes: string[] = [\"xlsx\", \"xlsm\", \"xls\"];\r\n\r\n private gridModel: AppKitchen.Controls.Grids.GridModel;\r\n private gridView: AppKitchen.Controls.Grids.GridView;\r\n\r\n private infoNotification: AppKitchen.Controls.Popups.Notification;\r\n private uploadFileTooltip: kendo.ui.Tooltip;\r\n private uploadButtonEnabled: boolean;\r\n private currentlyUploading: boolean;\r\n\r\n private container: {\r\n dataFilePickerContent: HTMLElement,\r\n importList: HTMLElement,\r\n }\r\n\r\n private buttons: {\r\n uploadFile: JQuery,\r\n refreshOverview: JQuery,\r\n };\r\n\r\n private inputs: {\r\n dataFile: JQuery,\r\n };\r\n\r\n constructor(model: ImportZeitreihenModel, targetContainer: HTMLElement, options?: ImportZeitreihenViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, {}));\r\n\r\n this.setTemplate(Web.Templates.ImportZeitreihen);\r\n\r\n this.render();\r\n this.currentlyUploading = false;\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({\r\n accept: this.acceptedFileTypes.map(s => `.${s}`).join(',')\r\n });\r\n this.setContainers();\r\n this.setInputs();\r\n this.setButtons();\r\n this.setEvents();\r\n this.init();\r\n return this;\r\n }\r\n\r\n private init(): void {\r\n AppKitchen.UIHelper.renderTemplateTo(this.container.dataFilePickerContent,\r\n Templates.DataFileItemEmpty);\r\n\r\n this.enableUploadFileButton(false);\r\n }\r\n\r\n private setContainers(): void {\r\n this.container = {\r\n dataFilePickerContent: this.$el.find(\".data-file-picker-content\")[0],\r\n importList: this.$el.find(\".import-list-container\")[0]\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n uploadFile: this.$el.find(\".upload-file-button\"),\r\n refreshOverview: this.$el.find(\".refresh-overview-button\"),\r\n }\r\n }\r\n\r\n private setInputs(): void {\r\n this.inputs = {\r\n dataFile: this.$el.find(\".data-file-picker\"),\r\n };\r\n }\r\n\r\n private setEvents(): void {\r\n this.inputs.dataFile.change(e => this.onTradesFileChanged(e));\r\n\r\n this.model.bind('change', () => this.onModelChanged());\r\n\r\n this.buttons.uploadFile.click(() => {\r\n if (this.uploadButtonEnabled) {\r\n this.uploadFile();\r\n }\r\n });\r\n\r\n this.buttons.refreshOverview.click(() => this.model.reload());\r\n\r\n this.$el.find(\".data-file-picker-label\")\r\n .on(\"dragenter\", (e) => this.onDragEnter(e))\r\n .on(\"dragover\", (e) => this.onDragOver(e))\r\n .on(\"dragleave\", (e) => this.onDragLeave(e))\r\n .on(\"drop\", (e) => this.onDrop(e));\r\n\r\n this.model.successUploadCallback = this.successUpload.bind(this);\r\n this.model.failUploadCallback = this.uploadFailed.bind(this);\r\n\r\n this.model.bind('change', () => this.setProgress(this.model.get().uploadProgress));\r\n\r\n this.model.dataLoader.onChangeReady().subscribe(() => {\r\n this.createImportList();\r\n });\r\n }\r\n\r\n private onDragEnter(event): void {\r\n event.preventDefault();\r\n\r\n this.$el.find(\".data-file-picker-container\").css('background-color', '#deebff');\r\n }\r\n\r\n private onDragOver(event): void {\r\n event.preventDefault();\r\n }\r\n\r\n private onDragLeave(event): void {\r\n event.preventDefault();\r\n\r\n this.$el.find(\".data-file-picker-container\").css('background-color', '');\r\n }\r\n\r\n private onDrop(event): void {\r\n event.preventDefault();\r\n\r\n this.$el.find(\".data-file-picker-container\").css('background-color', '');\r\n\r\n const file = event.originalEvent.dataTransfer.files[0];\r\n this.selectFile(file);\r\n }\r\n\r\n private onTradesFileChanged(e: JQuery.ChangeEvent): void {\r\n if (e.target.files.length === 0) {\r\n this.model.reset();\r\n return;\r\n }\r\n\r\n const file = e.target.files[0];\r\n this.selectFile(file);\r\n\r\n const newInput = $(e.target).clone(true);\r\n newInput.val(\"\");\r\n $(e.target).replaceWith(newInput);\r\n }\r\n\r\n private selectFile(file: File): void {\r\n if (file && Utils.File.acceptFile(file, this.acceptedFileTypes)) {\r\n this.model.updateFile(file);\r\n } else {\r\n this.notifyWrongFileFormat(file.name);\r\n this.model.reset();\r\n }\r\n }\r\n\r\n private onModelChanged(): void {\r\n if (this.model.get().fileNameOriginal) {\r\n AppKitchen.UIHelper.renderTemplateTo(this.container.dataFilePickerContent,\r\n Templates.DataFileItem,\r\n {\r\n fileNameOriginal: this.model.get().fileNameOriginal,\r\n fileNameWithoutExtension: this.model.get().fileNameWithoutExtension,\r\n fileExtension: this.model.get().fileExtension,\r\n generated: this.model.get().generated,\r\n commune: this.model.communeId\r\n });\r\n\r\n this.$el.find(\".remove-button\").addClass('active');\r\n this.$el.find(\".remove-button\").click((e) => this.removeFile(e));\r\n\r\n this.enableUploadFileButton(true);\r\n } else {\r\n AppKitchen.UIHelper.renderTemplateTo(this.container.dataFilePickerContent,\r\n Templates.DataFileItemEmpty);\r\n\r\n this.$el.find(\".remove-button\").removeClass('active');\r\n this.enableUploadFileButton(false);\r\n }\r\n }\r\n\r\n private enableUploadFileButton(isEnable: boolean): void {\r\n if (this.uploadFileTooltip) {\r\n this.uploadFileTooltip.destroy();\r\n this.uploadFileTooltip = null;\r\n }\r\n\r\n if (this.model.communeId) {\r\n this.uploadButtonEnabled = isEnable;\r\n if (isEnable) {\r\n this.buttons.uploadFile.removeClass('disabled');\r\n } else {\r\n this.buttons.uploadFile.addClass('disabled');\r\n\r\n this.uploadFileTooltip = this.buttons.uploadFile.kendoTooltip(\r\n {\r\n content: () => Strings.ImportZeitreihenWaermeplanung_Upload_Button_Tooltip_NoFile,\r\n position: \"bottom\"\r\n }).data(\"kendoTooltip\");\r\n }\r\n } else {\r\n this.uploadButtonEnabled = false;\r\n this.buttons.uploadFile.addClass('disabled');\r\n\r\n this.uploadFileTooltip = this.buttons.uploadFile.kendoTooltip(\r\n {\r\n content: () => Strings.ImportZeitreihenWaermeplanung_Upload_Button_Tooltip_NoCummne,\r\n position: \"bottom\"\r\n }).data(\"kendoTooltip\");\r\n }\r\n }\r\n\r\n private removeFile(event): void {\r\n event.preventDefault();\r\n this.model.reset();\r\n }\r\n\r\n private uploadFile(): void { \r\n if (!this.model.get().file) {\r\n return;\r\n }\r\n\r\n if (this.currentlyUploading) {\r\n console.log(\"Already uploading a file, preventing duplicate upload\");\r\n return;\r\n }\r\n\r\n // disable upload button until upload is complete\r\n this.enableUploadFileButton(false);\r\n this.currentlyUploading = true;\r\n\r\n this.notifyProceedUpload();\r\n this.model.uploadFile();\r\n }\r\n\r\n private uploadFailed(): void {\r\n console.log(\"Could not upload file.\");\r\n this.setProgress(0);\r\n this.notifyFailUpload();\r\n this.enableUploadFileButton(true);\r\n this.currentlyUploading = false;\r\n }\r\n\r\n private setProgress(percent: number): void {\r\n $(\".progressbar-progress\").width(percent + \"%\");\r\n }\r\n\r\n private successUpload(): void {\r\n this.notifySucceedUpload();\r\n this.enableUploadFileButton(true);\r\n this.currentlyUploading = false;\r\n }\r\n\r\n private notifyProceedUpload(): void {\r\n this.infoNotification = AppKitchen.UIHelper.Notifications.notify(\r\n Utils.StringUtils.format(Strings.ImportZeitreihenWaermeplanung_Notification_Progress_Content, this.model.get().fileNameGenerated),\r\n 'info',\r\n {\r\n closeAfter: 30000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_Progress_Title\r\n });\r\n }\r\n\r\n private hideProcessNotification(): void {\r\n if (this.infoNotification) {\r\n this.infoNotification.close();\r\n }\r\n }\r\n\r\n private notifySucceedUpload(): void {\r\n this.hideProcessNotification();\r\n AppKitchen.UIHelper.Notifications.notify(\r\n Strings.ImportZeitreihenWaermeplanung_Notification_Success_Content,\r\n 'success',\r\n {\r\n closeAfter: 10000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_Success_Title\r\n });\r\n }\r\n\r\n private notifyFailUpload(): void {\r\n this.hideProcessNotification();\r\n AppKitchen.UIHelper.Notifications.notify(\r\n Utils.StringUtils.format(Strings.ImportZeitreihenWaermeplanung_Notification_Fail_Content, this.model.get().fileNameGenerated),\r\n 'warning',\r\n {\r\n closeAfter: 10000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_Fail_Title\r\n });\r\n }\r\n\r\n private notifyNoCommuneSet(): void {\r\n AppKitchen.UIHelper.Notifications.notify(\r\n Strings.ImportZeitreihenWaermeplanung_Notification_NoCommune_Content,\r\n 'info',\r\n {\r\n closeAfter: 10000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_NoCommune_Title\r\n });\r\n }\r\n\r\n private notifyWrongFileFormat(fileName: string): void {\r\n AppKitchen.UIHelper.Notifications.notify(\r\n Utils.StringUtils.format(Strings.ImportZeitreihenWaermeplanung_Notification_WrongFile_Content, fileName, this.acceptedFileTypes.map(s => `.${s}`).join(', ')),\r\n \"warning\",\r\n {\r\n closeAfter: 30000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_WrongFile_Title,\r\n });\r\n }\r\n\r\n private createImportList(): void {\r\n this.gridModel = new AppKitchen.Controls.Grids.EventGridModel(this.model.dataLoader, {});\r\n this.gridView = new AppKitchen.Controls.Grids.GridView(this.gridModel, this.container.importList,\r\n {\r\n fillHeight: true,\r\n initialSort: { field: `${this.model.attributes.inventoryId}_ZeitpunktBereitstellung`, dir: 'desc' },\r\n templates: [{ field: 'Konverter_Dateilog_Status', template: (model) => this.translateStatus(model) }]\r\n });\r\n\r\n this.gridModel.set({ loading: true });\r\n }\r\n\r\n private translateStatus(model: any): string {\r\n const status = model['Konverter_Dateilog_Status'];\r\n let statusText;\r\n let isError = false;\r\n let isSuccess = false;\r\n let inProgress = false;\r\n\r\n if (status == null) {\r\n statusText = Strings.ImportZeitreihenWaermeplanung_Status_none;\r\n inProgress = true;\r\n } else {\r\n statusText = Strings[`ImportZeitreihenWaermeplanung_Status_${status}`];\r\n\r\n switch (status) {\r\n case 0:\r\n isError = true;\r\n break;\r\n case 1:\r\n isSuccess = true;\r\n break;\r\n case 2:\r\n isError = true;\r\n break;\r\n case 3:\r\n isError = true;\r\n break;\r\n case 4:\r\n isError = true;\r\n break;\r\n case 5:\r\n isSuccess = true;\r\n break;\r\n case 6:\r\n isError = true;\r\n break;\r\n case 7:\r\n isError = true;\r\n break;\r\n case 8:\r\n isError = true;\r\n break;\r\n case 9:\r\n isError = true;\r\n break;\r\n case 10:\r\n isSuccess = true;\r\n break;\r\n case 11:\r\n isError = true;\r\n break;\r\n case 12:\r\n isSuccess = true;\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n return AppKitchen.UIHelper.renderTemplate(Templates.StatusCell,\r\n {\r\n statusText: statusText,\r\n isError: isError,\r\n isSuccess: isSuccess,\r\n inProgress: inProgress\r\n });\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n import Apps = KEA.BW.Waermeplanung.Web.Apps;\r\n\r\n export interface KommunenSteckbriefModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class KommunenSteckbriefModel extends AppKitchen.ModelBase {\r\n }\r\n\r\n export interface KommunenSteckbriefViewOptions extends AppKitchen.ViewBaseOptions {\r\n }\r\n\r\n export class KommunenSteckbriefView extends AppKitchen.ViewBase {\r\n public options: KommunenSteckbriefViewOptions;\r\n public requestCall: JQueryXHR;\r\n private commune: string = \"\";\r\n\r\n private container: {\r\n grid: JQuery,\r\n title: JQuery\r\n }\r\n\r\n private buttons: {\r\n exportGrid: JQuery;\r\n downloadTemplate: JQuery;\r\n }\r\n \r\n constructor(model: KommunenSteckbriefModel, targetContainer: HTMLElement, options?: KommunenSteckbriefViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, {}));\r\n\r\n this.setTemplate(Web.Templates.KommunenSteckbrief);\r\n\r\n this.render();\r\n this.checkDownload();\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({});\r\n this.setContainers();\r\n\r\n const parameters = KommunenSteckbriefRoutingService.getParameters();\r\n this.setTitle(parameters.commune);\r\n this.loadSpreadsheet(parameters.commune);\r\n this.commune = parameters.commune;\r\n return this;\r\n }\r\n\r\n private checkDownload(): void {\r\n const parameters = NutzungsdatenRoutingService.getParameters();\r\n KEA.BW.Waermeplanung.Web.Utils.File.checkDownload(parameters); \r\n }\r\n\r\n private setContainers(): void {\r\n this.container = {\r\n grid: this.$el.find(\".grid-container\"),\r\n title: this.$el.find(\".title\"),\r\n }\r\n this.buttons = {\r\n exportGrid: this.$el.find(\".a-button-export\"),\r\n downloadTemplate: this.$el.find(\".a-button-template\")\r\n }\r\n\r\n this.buttons.downloadTemplate.click(() => {\r\n NutzungsdatenRoutingService.routeTo(\r\n new NutzungsdatenRoutingParameters(\r\n this.commune,\r\n Apps.BICO2Routes.kommunenSteckbrief,\r\n AppKitchen.GlobalSettings.customConfig.TemplateKommunensteckbriefPath,\r\n Strings.Nutzungsdaten_Typ_Template_Kommunensteckbrief)\r\n );\r\n });\r\n }\r\n\r\n private setTitle(title: string): void {\r\n this.container.title[0].innerHTML = Utils.StringUtils.format(Strings.KommunenSteckbrief_Title, title);\r\n }\r\n\r\n private loadSpreadsheet(commune: string): void {\r\n // ReSharper disable once WrongExpressionStatement\r\n AppKitchen.UIHelper.renderLoader(this.container.grid[0]);\r\n\r\n if (this.requestCall) {\r\n this.requestCall.abort();\r\n }\r\n\r\n const request: KEA.BW.Waermeplanung.Domain.SampleRequest = { Id: commune};\r\n this.requestCall = AppKitchen.Data.getData(\"ZeitreihenKommunenSteckbrief\",\r\n request,\r\n (response: KEA.BW.Waermeplanung.Domain.GridData) => {\r\n AppKitchen.UIHelper.removeLoader(this.container.grid[0]);\r\n this.createSpreadsheet(response);\r\n },\r\n () => {\r\n console.log(\"Failed to load: 'ZeitreihenKommunenSteckbrief'\");\r\n AppKitchen.UIHelper.removeLoader(this.container.grid[0]);\r\n });\r\n }\r\n\r\n private createSpreadsheet(gridData: KEA.BW.Waermeplanung.Domain.GridData): void {\r\n this.container.grid.empty();\r\n\r\n const spreadsheet = this.container.grid.kendoSpreadsheet({\r\n excel: {\r\n // Required to enable saving files in older browsers\r\n proxyURL: \"https://demos.telerik.com/kendo-ui/service/export\"\r\n },\r\n pdf: {\r\n proxyURL: \"https://demos.telerik.com/kendo-ui/service/export\"\r\n },\r\n toolbar: false,\r\n sheetsbar: false,\r\n sheets: [\r\n Utils.Grid.transformSheet(gridData)\r\n ],\r\n }).data(\"kendoSpreadsheet\");\r\n\r\n // desired format: TTMMJJJJhhmmss\r\n spreadsheet.options.excel.fileName = \"Daten-Kommunensteckbrief_\" + this.commune + \".xlsx\";\r\n this.buttons.exportGrid.click(() => spreadsheet.saveAsExcel());\r\n\r\n //this.removeSpreadsheetActionBar(spreadsheet);\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule KEA.BW.Waermeplanung.Web.Controls {\r\n\r\n import ParametersBase = BW.Waermeplanung.Web.Services.ParametersBase;\r\n import SerializedParameterSet = BW.Waermeplanung.Web.Services.SerializedParameterSet;\r\n import RoutingService = BW.Waermeplanung.Web.Services.RoutingService;\r\n\r\n class RoutingParameters {\r\n public static readonly commune: string = \"kommune\";\r\n }\r\n\r\n export class KommunenSteckbriefRoutingParameters extends ParametersBase {\r\n constructor(\r\n public readonly commune: string,\r\n ) { super() }\r\n\r\n public getParameterSet(): SerializedParameterSet {\r\n const param: SerializedParameterSet = {};\r\n param[RoutingParameters.commune] = encodeURI(this.commune);\r\n return param;\r\n }\r\n }\r\n\r\n export class KommunenSteckbriefRoutingService extends RoutingService{\r\n\r\n public static getParameters(): KommunenSteckbriefRoutingParameters {\r\n const urlQuery = this.readParameters();\r\n return new KommunenSteckbriefRoutingParameters(\r\n urlQuery[RoutingParameters.commune],\r\n );\r\n }\r\n\r\n public static setParameters(parameters: KommunenSteckbriefRoutingParameters) : void {\r\n const p = {};\r\n p[RoutingParameters.commune] = parameters.commune;\r\n this.writeParameters(p);\r\n }\r\n\r\n public static getRoute(parameters: KommunenSteckbriefRoutingParameters): string {\r\n return parameters.buildRoute(Apps.BICO2Routes.kommunenSteckbrief);\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n import Apps = KEA.BW.Waermeplanung.Web.Apps;\r\n\r\n export interface MeldelisteModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class MeldelisteModel extends AppKitchen.ModelBase {\r\n }\r\n\r\n export interface MeldelisteViewOptions extends AppKitchen.ViewBaseOptions {\r\n }\r\n\r\n export class MeldelisteView extends AppKitchen.ViewBase {\r\n public options: MeldelisteViewOptions;\r\n\r\n private gridModel: AppKitchen.Controls.Grids.GridModel;\r\n private gridView: AppKitchen.Controls.Grids.GridView;\r\n private dataLoader: AppKitchen.Data.EventDataLoader;\r\n\r\n private container: {\r\n configuration: HTMLElement,\r\n meldeliste: HTMLElement,\r\n }\r\n\r\n private buttons: {\r\n }\r\n\r\n constructor(model: MeldelisteModel, targetContainer: HTMLElement, options?: MeldelisteViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, {}));\r\n\r\n this.setTemplate(Web.Templates.Meldeliste);\r\n\r\n this.render();\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({});\r\n this.setContainers();\r\n this.setButtons();\r\n this.setEvents();\r\n\r\n this.createMeldelisteGrid();\r\n\r\n return this;\r\n }\r\n\r\n private setContainers(): void {\r\n this.container = {\r\n configuration: this.$el.find(\".configuration\")[0],\r\n meldeliste: this.$el.find(\".meldeliste-grid-container\")[0],\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n }\r\n }\r\n\r\n private setEvents(): void {\r\n }\r\n\r\n private createConfigurationForm(): void {\r\n const berichtsjahrField = new AppKitchen.Controls.Forms.FieldModel('Berichtsjahr',\r\n AppKitchen.Controls.Forms.FieldType.Year,\r\n Strings.Field_Berichtsjahr,\r\n {});\r\n\r\n const labelFieldModel = new AppKitchen.Controls.Forms.FieldModel(\"Hint\",\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n \"\",\r\n {\r\n //disabled: true,\r\n default: Strings.Evaluations_Template_Label,\r\n readOnly: true,\r\n }\r\n\r\n );\r\n\r\n const formModel = new AppKitchen.Controls.Forms.FormModel([berichtsjahrField, labelFieldModel], {});\r\n\r\n // ReSharper disable once WrongExpressionStatement\r\n new AppKitchen.Controls.Forms.HorizontalTabularFormView(formModel, this.container.configuration,\r\n {\r\n editable: true,\r\n showButtons: false,\r\n });\r\n\r\n formModel.onValueChange('Berichtsjahr', (berichtsjahr) => this.onBerichtsjahrChanged(berichtsjahr));\r\n formModel.setFieldsData({ Berichtsjahr: this.getBerichtsjahr(), Hint: Strings.Meldeliste_Hint });\r\n }\r\n\r\n private getBerichtsjahr(): Date {\r\n const parameters = MeldelisteRoutingService.getParameters();\r\n\r\n if (parameters === null || parameters.berichtsjahr === null) {\r\n return this.getDefaultYear();\r\n } else {\r\n return parameters.berichtsjahr;\r\n }\r\n }\r\n\r\n private getDefaultYear(): Date {\r\n return moment().startOf('year').toDate();\r\n }\r\n\r\n private onBerichtsjahrChanged(berichtsjahr: Date): void {\r\n if (!berichtsjahr) {\r\n return;\r\n }\r\n this.updateRoute(berichtsjahr);\r\n this.updateEventRestrictionsAndReloadData(berichtsjahr);\r\n }\r\n\r\n private updateRoute(berichtsjahr: Date): void {\r\n MeldelisteRoutingService.setParameters(new MeldelisteRoutingParameters(berichtsjahr));\r\n }\r\n\r\n private updateEventRestrictionsAndReloadData(berichtsjahr: Date): void {\r\n const config = this.dataLoader.getConfig();\r\n\r\n config.EventItemRestrictions[0].Value = berichtsjahr;\r\n\r\n this.dataLoader.setConfig(config, this);\r\n\r\n this.dataLoader.loadData();\r\n }\r\n\r\n private createMeldelisteGrid(): void {\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n const config: AppKitchen.Data.GridConfig = JSON.parse(Data.getDocumentSync(\"Meldeliste\", \"Meldeliste\"));\r\n if (applicationInfo.IsKommune) {\r\n config.EventItemRestrictions.push(\r\n {\r\n InventoryId: \"Meldeliste\",\r\n ItemId: \"NavObject_Reg\",\r\n Operation: \"AND\",\r\n Value: applicationInfo.Commune.Id\r\n }\r\n );\r\n } else if (applicationInfo.CommuneList.length < 50) {\r\n applicationInfo.CommuneList.forEach(c => {\r\n config.EventItemRestrictions.push({\r\n InventoryId: \"Meldeliste\",\r\n ItemId: \"NavObject_Reg\",\r\n Operation: \"OR\",\r\n Value: c.Id\r\n });\r\n });\r\n }\r\n this.dataLoader = new MeldelisteDataLoader(config, () => {\r\n this.gridModel = new MeldelisteGridModel(this.dataLoader, {});\r\n this.gridView = new AppKitchen.Controls.Grids.GridView(this.gridModel, this.container.meldeliste,\r\n {\r\n fillHeight: true,\r\n initialSort: { field: 'Meldeliste_NavObject_Reg', dir: 'asc' },\r\n templates: [\r\n { field: 'Meldeliste_NavObject_Reg', template: (model) => this.templateCommune(model) },\r\n { field: 'Wärmepläne_Pruefstatus', template: (model) => Prüfstatus.translateStatus(model, 'Wärmepläne_Pruefstatus') },\r\n { field: 'Meldeliste_Pruefstatus', template: (model) => Prüfstatus.translateStatus(model, 'Meldeliste_Pruefstatus') }\r\n ],\r\n dblclick: (rowData) => {\r\n const medelisteId = rowData['Meldeliste_Id'];\r\n DeteilansichtMeldungenRoutingService.navigate(DeteilansichtMeldungenRoutingService.getRoute(\r\n new DeteilansichtMeldungenRoutingParameters(medelisteId))\r\n );\r\n },\r\n filterable: true\r\n });\r\n\r\n this.createConfigurationForm();\r\n\r\n AppKitchen.UIHelper.updateFullHeightGrids(this.el);\r\n });\r\n }\r\n\r\n private templateCommune(model): string {\r\n const medelisteId = model['Meldeliste_Id'];\r\n const commune = model['Meldeliste_NavObject_Reg_Name'];\r\n const route = DeteilansichtMeldungenRoutingService.getRoute(new DeteilansichtMeldungenRoutingParameters(medelisteId));\r\n\r\n return `${commune}`;\r\n }\r\n }\r\n\r\n export class MeldelisteDataLoader extends AppKitchen.Data.EventDataLoader {\r\n\r\n parseDataInternal(data: AppKitchen.Data.DataEntries[]): AppKitchen.Data.DataEntries[] {\r\n const dict: { [id: string]: any } = {}\r\n data.forEach((d: any ) => {\r\n if (!dict[d.Meldeliste_Id]) {\r\n const newEntry = { ...d };\r\n newEntry['Anzahl_Wärmepläne'] = d.Wärmepläne_Prüfstatus !== \"\" ? 1 : 0;\r\n dict[d.Meldeliste_Id] = newEntry;\r\n } else {\r\n const entry = dict[d.Meldeliste_Id];\r\n entry['Wärmepläne_Pruefstatus'] = Prüfstatus.compareStatus(entry.Wärmepläne_Pruefstatus, d.Wärmepläne_Pruefstatus) === -1 ? entry.Wärmepläne_Pruefstatus : d.Wärmepläne_Pruefstatus\r\n entry['Anzahl_Wärmepläne']++; \r\n }\r\n });\r\n\r\n return Object.keys(dict).map(key => dict[key]);\r\n }\r\n\r\n setData(data: AppKitchen.Data.DataEntries[], sender: object): void {\r\n super.setData(this.parseDataInternal(data), sender);\r\n }\r\n }\r\n\r\n export class Prüfstatus {\r\n public static readonly PruefungOffen: string = \"Prüfung offen\";\r\n public static readonly Freigegeben: string = \"freigegeben\";\r\n public static readonly MaengelFestgestellt: string = \"Mängel festgestellt\";\r\n public static readonly Zurueckgezogen: string = \"zurückgezogen\";\r\n\r\n public static compareStatus(a: string, b: string): number {\r\n if (a === b) {\r\n return 0;\r\n }\r\n if (a === Prüfstatus.MaengelFestgestellt) {\r\n return -1;\r\n }\r\n if (b === Prüfstatus.MaengelFestgestellt) {\r\n return 1;\r\n }\r\n if (a === Prüfstatus.PruefungOffen) {\r\n return -1;\r\n }\r\n if (b === Prüfstatus.PruefungOffen) {\r\n return 1;\r\n }\r\n if (a === Prüfstatus.Freigegeben) {\r\n return -1;\r\n }\r\n if (b === Prüfstatus.Freigegeben) {\r\n return 1;\r\n }\r\n if (a === Prüfstatus.Zurueckgezogen) {\r\n return -1;\r\n }\r\n if (b === Prüfstatus.Zurueckgezogen) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n public static translateStatus(model, key: string): string {\r\n const status = model[key];\r\n let clazz = \"\";\r\n if (status === Prüfstatus.PruefungOffen) {\r\n clazz = 'offen';\r\n } else if (status === Prüfstatus.Freigegeben) {\r\n clazz = 'freigegben';\r\n } else if (status === Prüfstatus.MaengelFestgestellt) {\r\n clazz = 'maengel';\r\n } else if (status === Prüfstatus.Zurueckgezogen) {\r\n clazz = 'zurueckgezogen';\r\n }\r\n return `${status}`;;\r\n }\r\n }\r\n\r\n export class MeldelisteGridModel extends AppKitchen.Controls.Grids.EventGridModel {\r\n\r\n constructor(dataLoader: AppKitchen.Data.EventDataLoader, options?: AppKitchen.Controls.Grids.EventGridOptions) {\r\n super(dataLoader, AppKitchen.OptionsHelper.merge(options, {\r\n getColumnHeader: MeldelisteGridModel.getColumnHeader\r\n }));\r\n\r\n var schema = this.get().schema;\r\n var columns = this.addVirtualColumns();\r\n\r\n schema.push({\r\n field: \"Anzahl_Wärmepläne\",\r\n type: \"number\",\r\n validation: {\r\n \"required\": false\r\n },\r\n editable: true\r\n });\r\n\r\n this.set({\r\n columns: columns,\r\n schema: schema\r\n });\r\n }\r\n\r\n private static getColumnHeader(inventoryId: string, itemId: string, eventItem: AppKitchen.Api.Models.EventItemInfo): string {\r\n // special case for pruefstatus because the field exists twice (one in meldeliste, one in waermeplaene)\r\n return Strings[\"Field_\" + inventoryId + \"_\" + itemId] ||Strings[\"Field_Meldeliste_\" + eventItem.Name] || eventItem.Name;\r\n }\r\n\r\n private addVirtualColumns(): kendo.ui.GridColumn[] {\r\n const columns: kendo.ui.GridColumn[] = [];\r\n this.get().columns\r\n .forEach(c => columns.push(c));\r\n\r\n const waermeplaeneAnazhl = {\r\n field: \"Anzahl_Wärmepläne\",\r\n title: \"Anzahl Wärmepläne\",\r\n width: \"150px\"\r\n }\r\n\r\n columns.splice(2, 0, waermeplaeneAnazhl);\r\n //columns.push(waermeplaeneAnazhl);\r\n\r\n return columns;\r\n }\r\n\r\n }\r\n}","/// \r\n\r\nmodule KEA.BW.Waermeplanung.Web.Controls {\r\n\r\n import ParametersBase = BW.Waermeplanung.Web.Services.ParametersBase;\r\n import SerializedParameterSet = BW.Waermeplanung.Web.Services.SerializedParameterSet;\r\n import RoutingService = BW.Waermeplanung.Web.Services.RoutingService;\r\n\r\n class RoutingParameters {\r\n public static readonly Berichtsjahr: string = \"berichtsjahr\";\r\n }\r\n\r\n export class MeldelisteRoutingParameters extends ParametersBase {\r\n constructor(\r\n public readonly berichtsjahr?: Date,\r\n ) { super() }\r\n\r\n public getParameterSet(): SerializedParameterSet {\r\n const param: SerializedParameterSet = {};\r\n param[RoutingParameters.Berichtsjahr] = moment(this.berichtsjahr).format('yyyy');\r\n return param;\r\n }\r\n }\r\n\r\n export class MeldelisteRoutingService extends RoutingService{\r\n\r\n public static getParameters(): MeldelisteRoutingParameters {\r\n const urlQuery = this.readParameters();\r\n return new MeldelisteRoutingParameters(\r\n urlQuery[RoutingParameters.Berichtsjahr] ? moment([urlQuery[RoutingParameters.Berichtsjahr]]).toDate() : null,\r\n );\r\n }\r\n\r\n public static setParameters(parameters: MeldelisteRoutingParameters) : void {\r\n const p = {};\r\n if (parameters.berichtsjahr) {\r\n p[RoutingParameters.Berichtsjahr] = parameters.berichtsjahr.getFullYear();\r\n }\r\n this.writeParameters(p);\r\n }\r\n\r\n public static getRoute(parameters: MeldelisteRoutingParameters): string {\r\n return parameters.buildRoute(Apps.Routes.Meldeliste);\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n import Apps = KEA.BW.Waermeplanung.Web.Apps;\r\n import Api = AppKitchen.Api;\r\n import FormSubmitOptions = AppKitchen.Controls.Forms.FormSubmitOptions;\r\n import UiHelper = AppKitchen.UIHelper;\r\n\r\n import RoutingService = BW.Waermeplanung.Web.Services.RoutingService;\r\n import ParametersBase = BW.Waermeplanung.Web.Services.ParametersBase;\r\n\r\n export interface NutzungsdatenModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class NutzungsdatenModel extends AppKitchen.ModelBase {\r\n }\r\n\r\n export interface NutzungsdatenViewOptions extends AppKitchen.ViewBaseOptions {\r\n }\r\n\r\n export class NutzungsdatenView extends AppKitchen.ViewBase {\r\n public options: NutzungsdatenViewOptions;\r\n public requestCall: JQueryXHR;\r\n\r\n private container: {\r\n nutzungsdatenContainer: HTMLElement,\r\n nutzungsdatenForm: JQuery\r\n }\r\n\r\n private buttons: {\r\n submit: JQuery\r\n };\r\n\r\n private formModel: AppKitchen.Controls.Forms.FormModel;\r\n private formView: AppKitchen.Controls.Forms.FormViewBase;\r\n public dataLoader: AppKitchen.Data.EventDataLoader;\r\n\r\n constructor(model: NutzungsdatenModel, targetContainer: HTMLElement, options?: NutzungsdatenViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, {}));\r\n\r\n if (!this.checkLocalStorage()) {\r\n this.setTemplate(Web.Templates.Nutzungsdaten);\r\n this.render();\r\n }\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({});\r\n this.setContainers();\r\n this.setButtons();\r\n this.setEvents();\r\n this.createConfigurationForm();\r\n this.model.set({ loading: false });\r\n return this;\r\n }\r\n\r\n private checkLocalStorage(): boolean {\r\n //const bico2Usage = { \"name\": name, \"organization\": organization, \"mail\": mail };\r\n const bico2UsageRaw = localStorage.getItem(\"bico2-usage\");\r\n if (bico2UsageRaw !== null) {\r\n try {\r\n const bico2Usage = JSON.parse(bico2UsageRaw);\r\n\r\n // if this is false, someone actively modified the local storage so the user need to add the data again\r\n if (bico2Usage.name && bico2Usage.mail)\r\n {\r\n console.log(\"Found stored user data, skipping input mask\");\r\n this.submit(bico2Usage.name, bico2Usage.organization, bico2Usage.mail);\r\n return true;\r\n }\r\n } catch (e) {\r\n console.error((e as Error).message);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private setContainers(): void {\r\n this.container = {\r\n nutzungsdatenContainer: this.$el.find(\".nutzungsdaten-container\")[0],\r\n nutzungsdatenForm: this.$el.find(\".nutzungsdaten-fields\"),\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n submit: this.$el.find(\".submit-btn\"),\r\n }\r\n }\r\n\r\n private setEvents(): void {\r\n this.buttons.submit.click(() => {\r\n \r\n let isValid = this.formView.validateFields(); \r\n const checkBoxView = this.formView.getFieldView(\"Check\")\r\n const checkBoxValid = this.formModel.getValue(\"Check\");\r\n isValid = isValid && checkBoxValid;\r\n if (!checkBoxValid) {\r\n this.showMessage(checkBoxView.$el, AppKitchen.Strings.Form_ErrorMessage_Required, \"warning\");\r\n }\r\n\r\n if (!isValid) {\r\n return;\r\n }\r\n\r\n this.submit(this.formModel.getValue('Name'),\r\n this.formModel.getValue('Organization'),\r\n this.formModel.getValue('Mail'));\r\n });\r\n }\r\n\r\n private submit(name, organization, mail): void {\r\n //this.dataLoader.getSaveRequestData();\r\n \r\n if (this.requestCall) {\r\n this.requestCall.abort();\r\n }\r\n const parameters = NutzungsdatenRoutingService.getParameters();\r\n\r\n // TODO: add commune and usage type\r\n const request: KEA.BW.Waermeplanung.Domain.NutzungsprotokollRequest = {\r\n Commune: parameters.commune,\r\n Mail: mail,\r\n // TODO: calculate this based on the return url\r\n UsageType: parameters.usageType,\r\n // organization is optional\r\n Organization: organization ? organization : \"\",\r\n Name: name\r\n };\r\n\r\n this.requestCall = AppKitchen.Data.getData(\"Nutzungsprotokoll\",\r\n request,\r\n (response: boolean) => {\r\n console.log(\"Upload usage protocol: \" + response);\r\n const bico2Usage = { \"name\": name, \"organization\": organization, \"mail\": mail };\r\n localStorage.setItem('bico2-usage', JSON.stringify(bico2Usage));\r\n console.log(\"Returning to Url: \" + NutzungsdatenRoutingService.getParameters().returnUrl);\r\n\r\n // route to the desired return url with only the needed parameters\r\n const parameters = NutzungsdatenRoutingService.getParameters();\r\n RoutingService.routeTo(new NutzungsdatenRoutingParameters(\r\n parameters.commune, \"\", parameters.downloadPath, \"\"), parameters.returnUrl);\r\n },\r\n () => {\r\n console.log(\"Failed to upload usage protocol\");\r\n });\r\n }\r\n\r\n private createConfigurationForm(): void {\r\n\r\n const fieldModel: AppKitchen.Controls.Forms.FieldModel[] = [\r\n new AppKitchen.Controls.Forms.FieldModel('Name',\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n Strings.Nutzungsdaten_Name_Label,\r\n {\r\n mandatory: true,\r\n }),\r\n new AppKitchen.Controls.Forms.FieldModel('Organization',\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n Strings.Nutzungsdaten_Organisation_Label,\r\n {\r\n mandatory: false,\r\n }),\r\n new AppKitchen.Controls.Forms.FieldModel('Mail',\r\n AppKitchen.Controls.Forms.FieldType.Text,\r\n Strings.Nutzungsdaten_Mail_Label,\r\n {\r\n mandatory: true,\r\n }),\r\n new AppKitchen.Controls.Forms.FieldModel('Check',\r\n AppKitchen.Controls.Forms.FieldType.Checkbox,\r\n Strings.Nutzungsdaten_Checkbox_Label,\r\n {\r\n default: null,\r\n mandatory: true,\r\n hideCheckboxLabel: true\r\n }),\r\n ];\r\n\r\n this.formModel = new AppKitchen.Controls.Forms.FormModel(fieldModel, {});\r\n\r\n this.formView = new AppKitchen.Controls.Forms.TabularFormView(this.formModel, this.container.nutzungsdatenForm[0],\r\n {\r\n editable: true,\r\n showButtons: false,\r\n });\r\n\r\n this.formModel.onValueChange(\"Check\", (value) => {\r\n if (value) {\r\n const checkBoxView = this.formView.getFieldView(\"Check\")\r\n this.clearMessage(checkBoxView.$el);\r\n }\r\n })\r\n }\r\n\r\n clearMessage(element: JQuery) {\r\n element.removeClass(\"mandatory\");\r\n element.removeClass(\"warning\");\r\n element.removeClass(\"invalid\");\r\n element.find(\".a-input-error-message .a-message\").html(\"\");\r\n }\r\n\r\n showMessage(element: JQuery, message: string, errorClass: \"mandatory\" | \"warning\" | \"invalid\") {\r\n this.clearMessage(element);\r\n element.addClass(errorClass);\r\n element.find(\".a-input-error-message .a-message\").html(message);\r\n }\r\n } \r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n import Apps = KEA.BW.Waermeplanung.Web.Apps;\r\n\r\n export interface StatistischeGrunddatenModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class StatistischeGrunddatenModel extends AppKitchen.ModelBase {\r\n }\r\n\r\n export interface StatistischeGrunddatenViewOptions extends AppKitchen.ViewBaseOptions {\r\n }\r\n\r\n export class StatistischeGrunddatenView extends AppKitchen.ViewBase {\r\n public options: StatistischeGrunddatenViewOptions;\r\n public requestCall: JQueryXHR;\r\n private commune: string = \"\";\r\n\r\n private container: {\r\n grid: JQuery,\r\n title: JQuery\r\n }\r\n\r\n private buttons: {\r\n exportGrid: JQuery;\r\n downloadTemplate: JQuery;\r\n }\r\n \r\n constructor(model: StatistischeGrunddatenModel, targetContainer: HTMLElement, options?: StatistischeGrunddatenViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, {}));\r\n\r\n this.setTemplate(Web.Templates.StatistischeGrunddaten);\r\n\r\n this.render();\r\n this.checkDownload();\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({});\r\n this.setContainers();\r\n\r\n const parameters = StatistischeGrunddatenRoutingService.getParameters();\r\n this.setTitle(parameters.commune);\r\n this.loadSpreadsheet(parameters.commune);\r\n this.commune = parameters.commune;\r\n return this;\r\n }\r\n\r\n private checkDownload(): void {\r\n const parameters = NutzungsdatenRoutingService.getParameters();\r\n KEA.BW.Waermeplanung.Web.Utils.File.checkDownload(parameters);\r\n }\r\n\r\n private setContainers(): void {\r\n this.container = {\r\n grid: this.$el.find(\".grid-container\"),\r\n title: this.$el.find(\".title\"),\r\n }\r\n this.buttons = {\r\n exportGrid: this.$el.find(\".a-button-export\"),\r\n downloadTemplate: this.$el.find(\".a-button-template\")\r\n }\r\n\r\n this.buttons.downloadTemplate.click(() => {\r\n NutzungsdatenRoutingService.routeTo(\r\n new NutzungsdatenRoutingParameters(\r\n this.commune,\r\n Apps.BICO2Routes.statistischeGrunddaten,\r\n AppKitchen.GlobalSettings.customConfig.TemplateStatistischeGrunddatenPath,\r\n Strings.Nutzungsdaten_Typ_Template_Statistische_Grunddaten)\r\n );\r\n });\r\n }\r\n\r\n private setTitle(title: string): void {\r\n this.container.title[0].innerHTML = Utils.StringUtils.format(Strings.StatistischeGrunddaten_Title, title);\r\n }\r\n\r\n private loadSpreadsheet(commune: string): void {\r\n // ReSharper disable once WrongExpressionStatement\r\n AppKitchen.UIHelper.renderLoader(this.container.grid[0]);\r\n\r\n if (this.requestCall) {\r\n this.requestCall.abort();\r\n }\r\n\r\n const request: KEA.BW.Waermeplanung.Domain.SampleRequest = { Id: commune};\r\n this.requestCall = AppKitchen.Data.getData(\"ZeitreihenStatistischeGrunddaten\",\r\n request,\r\n (response: KEA.BW.Waermeplanung.Domain.GridData) => {\r\n AppKitchen.UIHelper.removeLoader(this.container.grid[0]);\r\n this.createSpreadsheet(response);\r\n },\r\n () => {\r\n console.log(\"Failed to load: 'ZeitreihenStatistischeGrunddaten'\");\r\n AppKitchen.UIHelper.removeLoader(this.container.grid[0]);\r\n });\r\n }\r\n\r\n private createSpreadsheet(gridData: KEA.BW.Waermeplanung.Domain.GridData): void {\r\n this.container.grid.empty();\r\n\r\n const spreadsheet = this.container.grid.kendoSpreadsheet({\r\n excel: {\r\n // Required to enable saving files in older browsers\r\n proxyURL: \"https://demos.telerik.com/kendo-ui/service/export\"\r\n },\r\n pdf: {\r\n proxyURL: \"https://demos.telerik.com/kendo-ui/service/export\"\r\n },\r\n toolbar: false,\r\n sheetsbar: false,\r\n sheets: [\r\n Utils.Grid.transformSheet(gridData)\r\n ],\r\n }).data(\"kendoSpreadsheet\");\r\n\r\n // desired format: TTMMJJJJhhmmss\r\n spreadsheet.options.excel.fileName = \"BICO2-Daten_\" + this.commune + \".xlsx\";\r\n this.buttons.exportGrid.click(() => spreadsheet.saveAsExcel());\r\n\r\n //this.removeSpreadsheetActionBar(spreadsheet);\r\n }\r\n }\r\n\r\n}","/// \r\n\r\nmodule KEA.BW.Waermeplanung.Web.Controls {\r\n\r\n import ParametersBase = BW.Waermeplanung.Web.Services.ParametersBase;\r\n import SerializedParameterSet = BW.Waermeplanung.Web.Services.SerializedParameterSet;\r\n\r\n class RoutingParameters {\r\n public static readonly commune: string = \"kommune\";\r\n }\r\n\r\n export class StatistischeGrunddatenRoutingParameters extends ParametersBase {\r\n constructor(\r\n public readonly commune: string,\r\n ) { super() }\r\n\r\n public getParameterSet(): SerializedParameterSet {\r\n const param: SerializedParameterSet = {};\r\n param[RoutingParameters.commune] = encodeURI(this.commune);\r\n return param;\r\n }\r\n }\r\n\r\n export class StatistischeGrunddatenRoutingService {\r\n\r\n private static readParameters(): { [key: string]: string } {\r\n return AppKitchen.BrowserHelper.UrlQuery.getParameters();\r\n }\r\n\r\n private static writeParameters(parameters: { [key: string]: string }): void {\r\n Object.keys(parameters).forEach(k => AppKitchen.BrowserHelper.UrlQuery.setParameter(k, parameters[k]));\r\n }\r\n\r\n public static getParameters(): StatistischeGrunddatenRoutingParameters {\r\n const urlQuery = this.readParameters();\r\n return new StatistischeGrunddatenRoutingParameters(\r\n urlQuery[RoutingParameters.commune],\r\n );\r\n }\r\n\r\n public static setParameters(parameters: StatistischeGrunddatenRoutingParameters) : void {\r\n const p = {};\r\n p[RoutingParameters.commune] = parameters.commune;\r\n this.writeParameters(p);\r\n }\r\n\r\n public static getRoute(parameters: StatistischeGrunddatenRoutingParameters): string {\r\n return parameters.buildRoute(Apps.BICO2Routes.statistischeGrunddaten);\r\n }\r\n\r\n public static navigate(route: string): void {\r\n AppKitchen.getRouter().navigate(route, true);\r\n }\r\n\r\n public static routeTo(parameters: StatistischeGrunddatenRoutingParameters): void {\r\n this.navigate(this.getRoute(parameters));\r\n }\r\n }\r\n}","/// \r\n\r\nmodule KEA.BW.Waermeplanung.Web.Controls {\r\n import RoutingService = BW.Waermeplanung.Web.Services.RoutingService;\r\n\r\n class RoutingParameters {\r\n public static readonly TimeseriesViewId: string = \"timeseriesViewId\";\r\n public static readonly Commune: string = \"commune\";\r\n }\r\n\r\n export class TimeSeriesBaseRoutingParameters extends RoutingParameters {\r\n\r\n constructor(\r\n public readonly timeseriesViewId: string,\r\n public readonly commune: string = \"\"\r\n ) { super() }\r\n }\r\n\r\n export class TimeSeriesBaseRoutingService extends RoutingService{\r\n\r\n public static getParameters(): TimeSeriesBaseRoutingParameters {\r\n const urlQuery = this.readParameters();\r\n return new TimeSeriesBaseRoutingParameters(\r\n urlQuery[RoutingParameters.TimeseriesViewId],\r\n urlQuery[RoutingParameters.Commune]\r\n );\r\n }\r\n\r\n public static setParameters(parameters: TimeSeriesBaseRoutingParameters) : void {\r\n const p = {};\r\n p[RoutingParameters.TimeseriesViewId] = parameters.timeseriesViewId;\r\n p[RoutingParameters.Commune] = parameters.commune;\r\n this.writeParameters(p);\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n\r\n export interface UploadWaermeplaeneModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n }\r\n\r\n export class UploadWaermeplaeneModel extends AppKitchen.ModelBase {\r\n\r\n }\r\n\r\n export interface UploadWaermeplaeneViewOptions extends AppKitchen.ViewBaseOptions {\r\n close: () => void;\r\n }\r\n\r\n export class Wärmeplan {\r\n constructor(\r\n public readonly id: string,\r\n public readonly meldelisteId: string,\r\n public readonly documentTyp: string,\r\n public readonly documentName: string,\r\n public readonly documentSize: number,\r\n public readonly status: string,\r\n ) { }\r\n }\r\n\r\n export class UploadWaermeplaeneView extends AppKitchen.ViewBase {\r\n public options: UploadWaermeplaeneViewOptions;\r\n private parameters: DeteilansichtMeldungenRoutingParameters;\r\n private userId: string;\r\n\r\n private dataLoader: AppKitchen.Data.EventDataLoader;\r\n\r\n private uploadWaermeplanModel1: UploadWaermeplanModel;\r\n private uploadWaermeplanModel2: UploadWaermeplanModel;\r\n private uploadWaermeplanModel3: UploadWaermeplanModel;\r\n private uploadWaermeplanModel4: UploadWaermeplanModel;\r\n\r\n private container: {\r\n uploadWaermeplan1: HTMLElement,\r\n uploadWaermeplan2: HTMLElement,\r\n uploadWaermeplan3: HTMLElement,\r\n uploadWaermeplan4: HTMLElement,\r\n }\r\n\r\n private buttons: {\r\n uploadAll: JQuery,\r\n close: JQuery,\r\n };\r\n\r\n private inputs: {\r\n };\r\n\r\n constructor(model: UploadWaermeplaeneModel, targetContainer: HTMLElement, options?: UploadWaermeplaeneViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, { close: null}));\r\n\r\n this.setTemplate(Web.Templates.UploadWaermeplaene);\r\n\r\n this.render();\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({});\r\n this.setContainers();\r\n this.setInputs();\r\n this.setButtons();\r\n this.setEvents();\r\n this.getParameters();\r\n this.initDataLoader();\r\n this.initUploadWaermeplanControls();\r\n return this;\r\n }\r\n\r\n private setContainers(): void {\r\n this.container = {\r\n uploadWaermeplan1: this.$el.find(\".content-1\")[0],\r\n uploadWaermeplan2: this.$el.find(\".content-2\")[0],\r\n uploadWaermeplan3: this.$el.find(\".content-3\")[0],\r\n uploadWaermeplan4: this.$el.find(\".content-4\")[0],\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n uploadAll: this.$el.find('.upload-all-button'),\r\n close: this.$el.find('.close-button'),\r\n }\r\n }\r\n\r\n private setInputs(): void {\r\n }\r\n\r\n private setEvents(): void {\r\n //this.buttons.uploadAll.click(() => this.uploadAll());\r\n this.buttons.uploadAll.remove();\r\n this.buttons.close.click(() => this.options.close());\r\n }\r\n\r\n private getParameters(): void {\r\n this.parameters = DeteilansichtMeldungenRoutingService.getParameters();\r\n if (this.parameters === null || this.parameters.meldelisteId === null) {\r\n console.error(`No parameters where set!`);\r\n }\r\n\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n this.userId = applicationInfo.UserId;\r\n }\r\n\r\n private initDataLoader(): void {\r\n if (this.parameters === null || this.parameters.meldelisteId === null) {\r\n return;\r\n }\r\n this.model.set({ loading: true });\r\n\r\n const config: AppKitchen.Data.GridConfig = JSON.parse(Data.getDocumentSync(\"Waermeplaene\", \"DeteilansichtMeldungen\"));\r\n\r\n config.EventItemRestrictions = [{\r\n ItemId: \"Id\",\r\n InventoryId: \"Meldeliste\",\r\n Operation: \"AND\",\r\n Value: this.parameters.meldelisteId\r\n }];\r\n\r\n this.dataLoader = new AppKitchen.Data.EventDataLoader(config, () => {\r\n\r\n this.dataLoader.loadData({\r\n success: () => {\r\n this.model.set({ loading: false });\r\n }\r\n });\r\n });\r\n }\r\n\r\n private initUploadWaermeplanControls(): void {\r\n\r\n this.uploadWaermeplanModel1 = new UploadWaermeplanModel(this.dataLoader,\r\n {\r\n documentId: 1\r\n });\r\n // ReSharper disable once WrongExpressionStatement\r\n new UploadWaermeplanView(this.uploadWaermeplanModel1, this.container.uploadWaermeplan1);\r\n\r\n this.uploadWaermeplanModel2 = new UploadWaermeplanModel(this.dataLoader,\r\n {\r\n documentId: 2\r\n });\r\n // ReSharper disable once WrongExpressionStatement\r\n new UploadWaermeplanView(this.uploadWaermeplanModel2, this.container.uploadWaermeplan2);\r\n\r\n this.uploadWaermeplanModel3 = new UploadWaermeplanModel(this.dataLoader,\r\n {\r\n documentId: 3\r\n });\r\n // ReSharper disable once WrongExpressionStatement\r\n new UploadWaermeplanView(this.uploadWaermeplanModel3, this.container.uploadWaermeplan3);\r\n\r\n this.uploadWaermeplanModel4 = new UploadWaermeplanModel(this.dataLoader,\r\n {\r\n documentId: 4\r\n });\r\n // ReSharper disable once WrongExpressionStatement\r\n new UploadWaermeplanView(this.uploadWaermeplanModel4, this.container.uploadWaermeplan4);\r\n\r\n }\r\n\r\n private uploadAll(): void {\r\n this.uploadWaermeplanModel1.sendFile(() => {\r\n this.uploadWaermeplanModel2.sendFile(() => {\r\n this.uploadWaermeplanModel3.sendFile(() => {\r\n this.uploadWaermeplanModel4.sendFile();\r\n });\r\n });\r\n });\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Controls {\r\n\r\n export interface UploadWaermeplanModelAttributes extends AppKitchen.ModelBaseAttributes {\r\n file?: File;\r\n fileName?: string;\r\n fileSize?: string;\r\n dokumententyp?: string;\r\n documentId: number;\r\n label?: string;\r\n meldelisteId?: string;\r\n prüfstatus?: string;\r\n uploadProgress?: number;\r\n isAlreadyUploaded?: boolean;\r\n }\r\n\r\n export class UploadWaermeplanModel extends AppKitchen.ModelBase {\r\n\r\n public dataLoader: AppKitchen.Data.EventDataLoader;\r\n private parameters: DeteilansichtMeldungenRoutingParameters;\r\n private userId: string;\r\n\r\n public successUploadCallback: () => void;\r\n public failUploadCallback: () => void;\r\n\r\n constructor(dataLoader: AppKitchen.Data.EventDataLoader, attributes: UploadWaermeplanModelAttributes) {\r\n super(attributes);\r\n\r\n this.dataLoader = dataLoader;\r\n\r\n this.setParameters();\r\n this.setEvents();\r\n }\r\n\r\n private setParameters(): void {\r\n this.parameters = DeteilansichtMeldungenRoutingService.getParameters();\r\n if (this.parameters === null || this.parameters.meldelisteId === null) {\r\n console.error(`No parameters where set!`);\r\n }\r\n\r\n const applicationInfo = Services.ApplicationInfoService.instance.getApplicationInfo();\r\n this.userId = applicationInfo.UserId;\r\n }\r\n\r\n public updateFile(file: File): void {\r\n this.set(AppKitchen.OptionsHelper.merge({\r\n file: file,\r\n fileName: Utils.File.getFileName(file),\r\n }, this.attributes));\r\n }\r\n\r\n public reset(): void {\r\n this.set(AppKitchen.OptionsHelper.merge({\r\n file: null,\r\n fileName: null\r\n }, this.attributes));\r\n }\r\n\r\n private setEvents(): void {\r\n this.dataLoader.onChangeData().subscribe(() => {\r\n const data = this.dataLoader.getData();\r\n const textPool = this.dataLoader.getEventFieldInfo('Wärmepläne_Dokumententyp').TextPool;\r\n // the returned array isn't sorted like in mesap so we can't just access the array index\r\n\r\n const currentDocument = textPool.find(element => element.SortNr === this.get().documentId);\r\n if (currentDocument) {\r\n this.set({\r\n dokumententyp: currentDocument.Id,\r\n label: currentDocument.Text\r\n });\r\n } else {\r\n console.error(\"Error: Mesap entry not found for SortNr: \" + this.get().documentId);\r\n }\r\n\r\n data.forEach(d => {\r\n if (d['Wärmepläne_Pruefstatus'] !== 'zurückgezogen' &&\r\n d['Wärmepläne_Dokumententyp'] === this.get().dokumententyp) {\r\n\r\n const label = textPool.find(element => element.Id === d['Wärmepläne_Dokumententyp']);\r\n this.set({\r\n fileName: this.getDocumentNameFromName(d['Wärmepläne_Dokument']),\r\n fileSize: this.getDocumentSizeFromName(d['Wärmepläne_Dokument']),\r\n dokumententyp: d['Wärmepläne_Dokumententyp'],\r\n label: label.Text,\r\n meldelisteId: d['Meldeliste_Id'],\r\n prüfstatus: d['Wärmepläne_Pruefstatus'],\r\n isAlreadyUploaded: true\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n private getDocumentNameFromName(documentName: string): string {\r\n if (!documentName) {\r\n return '';\r\n }\r\n const pos = documentName.lastIndexOf('(');\r\n return documentName.substr(0, pos).trim();\r\n }\r\n\r\n private getDocumentSizeFromName(documentName: string): number {\r\n if (!documentName) {\r\n return 0;\r\n }\r\n const pos = documentName.lastIndexOf('(');\r\n return parseInt(documentName.substr(pos + 1, documentName.length - pos - 4).replace('.', '').trim());\r\n }\r\n\r\n public uploadFile(): void {\r\n this.sendFile();\r\n }\r\n\r\n public sendFile(finished?: () => void): void {\r\n if (!this.get().fileName || !this.get().dokumententyp || this.get().isAlreadyUploaded) {\r\n if(finished) finished();\r\n return;\r\n }\r\n\r\n const apiUrl = \"./api\";\r\n $.ajax({\r\n dataType: \"json\",\r\n url: `${apiUrl}/WaermeplanFileUpload` +\r\n `?fileName=${encodeURI(this.get().fileName)}` +\r\n `&dokumententyp=${encodeURI(this.get().dokumententyp)}` +\r\n `&meldelistenId=${escape(this.parameters.meldelisteId)}`,\r\n type: 'POST',\r\n xhr: () => {\r\n const myXhr = $.ajaxSettings.xhr();\r\n if (myXhr.upload) {\r\n myXhr.upload.addEventListener('progress', e => this.uploadProgressHandling(e), false);\r\n }\r\n return myXhr;\r\n },\r\n success: (result) => {\r\n if (result) {\r\n this.dataLoader.loadData();\r\n this.set({ isAlreadyUploaded: true});\r\n if (this.successUploadCallback) {\r\n this.successUploadCallback();\r\n }\r\n } else {\r\n if (this.failUploadCallback) {\r\n this.failUploadCallback();\r\n }\r\n }\r\n if (finished) finished();\r\n },\r\n error: (error) => {\r\n console.error(error);\r\n if (this.failUploadCallback) {\r\n this.failUploadCallback();\r\n }\r\n if (finished) finished();\r\n },\r\n data: this.get().file,\r\n cache: false,\r\n contentType: false,\r\n processData: false\r\n });\r\n }\r\n\r\n private uploadProgressHandling(e: ProgressEvent): void {\r\n if (e.lengthComputable) {\r\n const s = e.loaded / e.total * 100;\r\n this.set({\r\n uploadProgress: s\r\n });\r\n }\r\n }\r\n }\r\n\r\n export interface UploadWaermeplanViewOptions extends AppKitchen.ViewBaseOptions {\r\n }\r\n\r\n export class UploadWaermeplanView extends AppKitchen.ViewBase {\r\n public options: UploadWaermeplanViewOptions;\r\n private inputId: string;\r\n\r\n private acceptedFileTypes: string[] = [\"pdf\"];\r\n\r\n private infoNotification: AppKitchen.Controls.Popups.Notification;\r\n //private uploadFileTooltip: kendo.ui.Tooltip;\r\n private uploadButtonEnabled: boolean;\r\n\r\n private container: {\r\n filePickerContent: HTMLElement,\r\n }\r\n\r\n private buttons: {\r\n uploadFile: JQuery,\r\n };\r\n\r\n private inputs: {\r\n file: JQuery,\r\n };\r\n\r\n constructor(model: UploadWaermeplanModel, targetContainer: HTMLElement, options?: UploadWaermeplanViewOptions) {\r\n super(model, targetContainer, AppKitchen.OptionsHelper.merge(options, {}));\r\n\r\n this.inputId = Utils.Guid.newGuid();\r\n this.setTemplate(Web.Templates.UploadWaermeplan);\r\n\r\n this.render();\r\n\r\n this.model.bind('change', () => this.render());\r\n }\r\n\r\n public render() {\r\n this.renderTemplate({\r\n title: this.model.get().label,\r\n accept: this.acceptedFileTypes.map(s => `.${s}`).join(','),\r\n inputId: this.inputId\r\n });\r\n this.setContainers();\r\n this.setInputs();\r\n this.setButtons();\r\n this.setEvents();\r\n this.init();\r\n //this.createImportList();\r\n return this;\r\n }\r\n\r\n private init(): void {\r\n this.onModelChanged();\r\n }\r\n\r\n private setContainers(): void {\r\n this.container = {\r\n filePickerContent: this.$el.find(\".upload-file-picker-content\")[0]\r\n }\r\n }\r\n\r\n private setButtons(): void {\r\n this.buttons = {\r\n uploadFile: this.$el.find(\".upload-file-button\")\r\n }\r\n }\r\n\r\n private setInputs(): void {\r\n this.inputs = {\r\n file: this.$el.find(\".upload-file-picker\"),\r\n };\r\n }\r\n\r\n private setEvents(): void {\r\n this.inputs.file.change(e => this.onTradesFileChanged(e));\r\n\r\n this.model.bind('change', () => this.onModelChanged());\r\n\r\n this.buttons.uploadFile.click(() => {\r\n if (this.uploadButtonEnabled) {\r\n this.uploadFile();\r\n }\r\n });\r\n\r\n this.$el.find(\".upload-file-picker-label\")\r\n .on(\"dragenter\", (e) => this.onDragEnter(e))\r\n .on(\"dragover\", (e) => this.onDragOver(e))\r\n .on(\"dragleave\", (e) => this.onDragLeave(e))\r\n .on(\"drop\", (e) => this.onDrop(e));\r\n\r\n this.model.successUploadCallback = this.successUpload.bind(this);\r\n this.model.failUploadCallback = this.uploadFailed.bind(this);\r\n\r\n this.model.bind('change', () => this.setProgress(this.model.get().uploadProgress));\r\n }\r\n\r\n private onDragEnter(event): void {\r\n event.preventDefault();\r\n\r\n this.$el.find(\".upload-file-picker-container\").css('background-color', '#deebff');\r\n }\r\n\r\n private onDragOver(event): void {\r\n event.preventDefault();\r\n }\r\n\r\n private onDragLeave(event): void {\r\n event.preventDefault();\r\n\r\n this.$el.find(\".upload-file-picker-container\").css('background-color', '');\r\n }\r\n\r\n private onDrop(event): void {\r\n event.preventDefault();\r\n\r\n this.$el.find(\".upload-file-picker-container\").css('background-color', '');\r\n\r\n const file = event.originalEvent.dataTransfer.files[0];\r\n this.selectFile(file);\r\n }\r\n\r\n private onTradesFileChanged(e: JQuery.ChangeEvent): void {\r\n if (e.target.files.length === 0) {\r\n this.model.reset();\r\n return;\r\n }\r\n\r\n const file = e.target.files[0];\r\n this.selectFile(file);\r\n\r\n const newInput = this.$el.find(e.target).clone(true);\r\n newInput.val(\"\");\r\n this.$el.find(e.target).replaceWith(newInput);\r\n }\r\n\r\n private selectFile(file: File): void {\r\n if (file && Utils.File.acceptFile(file, this.acceptedFileTypes)) {\r\n this.model.updateFile(file);\r\n } else {\r\n this.notifyWrongFileFormat(file.name);\r\n this.model.reset();\r\n }\r\n }\r\n\r\n private onModelChanged(): void {\r\n if (this.model.get().isAlreadyUploaded) {\r\n AppKitchen.UIHelper.renderTemplateTo(this.container.filePickerContent,\r\n Templates.FileItem,\r\n {\r\n fileName: this.model.get().fileName,\r\n fileIcon: this.getFileTypeIcon(Utils.File.getFileExtensionFromName(this.model.get().fileName)),\r\n fileSize: Utils.File.fileSizeToString(this.model.get().fileSize, true)\r\n });\r\n\r\n this.$el.find(\".upload-file-picker-container\").css('pointer-events', 'none');\r\n\r\n this.enableUploadFileButton(false);\r\n } else if (this.model.get().fileName) {\r\n AppKitchen.UIHelper.renderTemplateTo(this.container.filePickerContent,\r\n Templates.FileItem,\r\n {\r\n fileName: this.model.get().fileName,\r\n fileIcon: this.getFileTypeIcon(Utils.File.getFileExtension(this.model.get().file)),\r\n fileSize: Utils.File.fileSizeToString(this.model.get().file.size, true)\r\n });\r\n\r\n this.$el.find(\".remove-button\").addClass('active');\r\n this.$el.find(\".remove-button\").click((e) => this.removeFile(e));\r\n\r\n this.enableUploadFileButton(true);\r\n } else {\r\n AppKitchen.UIHelper.renderTemplateTo(this.container.filePickerContent,\r\n Templates.DataFileItemEmpty);\r\n\r\n this.$el.find(\".remove-button\").removeClass('active');\r\n this.enableUploadFileButton(false);\r\n }\r\n }\r\n\r\n private getFileTypeIcon(fileExtenstion: string): string {\r\n if (['xlsx', 'xlsm', 'xls', 'csv'].some(s => s === fileExtenstion)) {\r\n return 'icon-file-excel-v1-32px';\r\n }\r\n if (['pdf'].some(s => s === fileExtenstion)) {\r\n return 'icon-file-pdf-v1-32px';\r\n }\r\n if (['xml'].some(s => s === fileExtenstion)) {\r\n return 'icon-file-xml-v1-32px';\r\n }\r\n if (['zip'].some(s => s === fileExtenstion)) {\r\n return 'icon-file-zip-32px';\r\n }\r\n if (['doc', 'docx'].some(s => s === fileExtenstion)) {\r\n return 'icon-file-word-v1-32px';\r\n }\r\n if (['ppt', 'pptx'].some(s => s === fileExtenstion)) {\r\n return 'icon-file-powerpoint-v1-32px-2';\r\n }\r\n return 'icon-file-xml-v1-32px';\r\n }\r\n\r\n private enableUploadFileButton(isEnable: boolean): void {\r\n //if (this.uploadFileTooltip) {\r\n // this.uploadFileTooltip.destroy();\r\n // this.uploadFileTooltip = null;\r\n //}\r\n\r\n this.uploadButtonEnabled = isEnable;\r\n if (isEnable) {\r\n this.buttons.uploadFile.removeClass('disabled');\r\n } else {\r\n this.buttons.uploadFile.addClass('disabled');\r\n\r\n //this.uploadFileTooltip = this.buttons.uploadFile.kendoTooltip(\r\n // {\r\n // content: () => Strings.ImportZeitreihenWaermeplanung_Upload_Button_Tooltip_NoFile,\r\n // position: \"bottom\"\r\n // }).data(\"kendoTooltip\");\r\n }\r\n }\r\n\r\n private removeFile(event): void {\r\n event.preventDefault();\r\n this.model.reset();\r\n }\r\n\r\n private uploadFile(): void {\r\n if (!this.model.get().file) {\r\n return;\r\n }\r\n\r\n this.notifyProceedUpload();\r\n\r\n this.model.uploadFile();\r\n }\r\n\r\n private uploadFailed(): void {\r\n console.log(\"Uploaded failed.\");\r\n this.setProgress(0);\r\n this.notifyFailUpload();\r\n }\r\n\r\n private setProgress(percent: number): void {\r\n this.$el.find(\".progressbar-progress\").width(percent + \"%\");\r\n }\r\n\r\n private successUpload(): void {\r\n this.notifySucceedUpload();\r\n\r\n this.$el.find(\".upload-file-picker-container\").css('pointer-events', 'none');\r\n\r\n this.enableUploadFileButton(false);\r\n }\r\n\r\n private notifyProceedUpload(): void {\r\n this.infoNotification = AppKitchen.UIHelper.Notifications.notify(\r\n Utils.StringUtils.format(Strings.ImportZeitreihenWaermeplanung_Notification_Progress_Content, this.model.get().fileName),\r\n 'info',\r\n {\r\n closeAfter: 30000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_Progress_Title\r\n });\r\n }\r\n\r\n private hideProcessNotification(): void {\r\n if (this.infoNotification) {\r\n this.infoNotification.close();\r\n }\r\n }\r\n\r\n private notifySucceedUpload(): void {\r\n this.hideProcessNotification();\r\n AppKitchen.UIHelper.Notifications.notify(\r\n Utils.StringUtils.format(Strings.ImportZeitreihenWaermeplanung_Notification_Success_Content, this.model.get().fileName),\r\n 'success',\r\n {\r\n closeAfter: 10000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_Success_Title\r\n });\r\n }\r\n\r\n private notifyFailUpload(): void {\r\n this.hideProcessNotification();\r\n AppKitchen.UIHelper.Notifications.notify(\r\n Utils.StringUtils.format(Strings.ImportZeitreihenWaermeplanung_Notification_Fail_Content, this.model.get().fileName),\r\n 'warning',\r\n {\r\n closeAfter: 10000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_Fail_Title\r\n });\r\n }\r\n\r\n private notifyNoCommuneSet(): void {\r\n AppKitchen.UIHelper.Notifications.notify(\r\n Strings.ImportZeitreihenWaermeplanung_Notification_NoCommune_Content,\r\n 'info',\r\n {\r\n closeAfter: 10000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_NoCommune_Title\r\n });\r\n }\r\n\r\n private notifyWrongFileFormat(fileName: string): void {\r\n AppKitchen.UIHelper.Notifications.notify(\r\n Utils.StringUtils.format(Strings.ImportZeitreihenWaermeplanung_Notification_WrongFile_Content, fileName, this.acceptedFileTypes.map(s => `.${s}`).join(', ')),\r\n \"warning\",\r\n {\r\n closeAfter: 30000,\r\n title: Strings.ImportZeitreihenWaermeplanung_Notification_WrongFile_Title,\r\n });\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web {\r\n\r\n export module Data {\r\n export function getDocumentSync(documentName: string, documentType: string) {\r\n var result = $.ajax({\r\n dataType: \"json\",\r\n type: \"GET\",\r\n url: \"./api/Document\",\r\n data: { filename: documentName, type: documentType },\r\n cache: false,\r\n async: false\r\n });\r\n\r\n if (result.status === 200) {\r\n return result.responseJSON;\r\n }\r\n\r\n AppKitchen.handleError(result, result.statusText, \"\");\r\n\r\n return undefined;\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Services {\r\n\r\n export class ApplicationInfoService {\r\n\r\n public static instance: ApplicationInfoService = new ApplicationInfoService();\r\n\r\n private applicationInfo: Domain.ApplicationInfo;\r\n\r\n public init(onReady: (applicationInfo: Domain.ApplicationInfo) => void ): void {\r\n AppKitchen.Data.getDataApi(\"ApplicationInfo\", null, applicationInfo => {\r\n this.applicationInfo = applicationInfo;\r\n onReady(this.applicationInfo);\r\n });\r\n }\r\n\r\n public getApplicationInfo(): Domain.ApplicationInfo {\r\n return this.applicationInfo;\r\n }\r\n\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Services {\r\n\r\n export class UserInfoService {\r\n\r\n public static instance: UserInfoService = new UserInfoService();\r\n\r\n private userInfoDictionary: {[id: string]: Domain.UserInfo};\r\n\r\n public init(onReady: () => void ): void {\r\n AppKitchen.Data.getDataApi(\"UserInfoList\", null, (userInfo: Domain.UserInfo[]) => {\r\n this.userInfoDictionary = {};\r\n userInfo.forEach(u => this.userInfoDictionary[u.Id] = u);\r\n onReady();\r\n });\r\n }\r\n\r\n public getUserInfo(id: string): Domain.UserInfo {\r\n return this.userInfoDictionary[id];\r\n }\r\n\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Utils.File {\r\n\r\n export const getFileName = (file: File): string => {\r\n return file ? file.name : undefined;\r\n }\r\n\r\n export const getGeneratedFileNamePart = (): string => {\r\n return moment().format('YYYYMMDDHHmmss');\r\n }\r\n\r\n export const getFileNameWithoutExtension = (file: File): string => {\r\n return getFileName(file).replace(/\\.[^/.]+$/, \"\");\r\n }\r\n\r\n export const getFileExtension = (file: File): string => {\r\n return getFileExtensionFromName(file.name);\r\n }\r\n\r\n export const getFileExtensionFromName = (fileName: string): string => {\r\n const re = /(?:\\.([^.]+))?$/;\r\n\r\n return fileName ? re.exec(fileName)[1] : undefined;\r\n }\r\n\r\n export const acceptFile = (file: File, acceptedExtensions: string[]): boolean => {\r\n acceptedExtensions = acceptedExtensions.map(e => e.toLocaleLowerCase());\r\n const extension = getFileExtension(file).toLocaleLowerCase();\r\n\r\n return acceptedExtensions.some(e => e === extension);\r\n }\r\n\r\n /**\r\n * Format bytes as human-readable text.\r\n *\r\n * @param bytes Number of bytes.\r\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\r\n * binary (IEC), aka powers of 1024.\r\n * @param dp Number of decimal places to display.\r\n *\r\n * @return Formatted string.\r\n */\r\n export const fileSizeToString = (bytes, si = false, dp = 1) => {\r\n const thresh = si ? 1000 : 1024;\r\n\r\n if (Math.abs(bytes) < thresh) {\r\n return bytes + ' B';\r\n }\r\n\r\n const units = si\r\n ? ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\r\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\r\n let u = -1;\r\n const r = 10 ** dp;\r\n\r\n do {\r\n bytes /= thresh;\r\n ++u;\r\n } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);\r\n\r\n\r\n return bytes.toFixed(dp) + ' ' + units[u];\r\n }\r\n\r\n // add a hidden button for downloading, prevents new tab warning\r\n export const download = (filename, text): void => {\r\n const newLink = document.createElement('a') as unknown as HTMLLinkElement;\r\n newLink.href = filename;\r\n newLink.target = \"_blank\";\r\n newLink.click();\r\n }\r\n\r\n export const checkDownload = (parameters): boolean => {\r\n // check if we need to downlod a file\r\n if (parameters.downloadPath) {\r\n download(parameters.downloadPath, \"\");\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n}","module KEA.BW.Waermeplanung.Web.Utils.Grid {\r\n\r\n\r\n export const removeSpreadsheetActionBar = (spreadsheet: kendo.ui.Spreadsheet): void => {\r\n const actionBar = spreadsheet.element.children()[0];\r\n actionBar.parentNode.removeChild(actionBar);\r\n\r\n spreadsheet.resize();\r\n }\r\n\r\n\r\n export const transformSheet = (gridData: KEA.BW.Waermeplanung.Domain.GridData): kendo.ui.SpreadsheetSheet => {\r\n const filter = `A1:${getLetterFromIndex(gridData.columnsCount - 1)}${gridData.rowsCount}`;\r\n return {\r\n columns: getColumns(gridData),\r\n filter: {\r\n ref: filter\r\n },\r\n frozenColumns: gridData.frozenColumnsCount,\r\n frozenRows: gridData.frozenRowsCount,\r\n rows: transformRows(gridData.rows), \r\n };\r\n }\r\n\r\n\r\n export const getLetterFromIndex = (n: number): string => {\r\n return String.fromCharCode(97 + n);\r\n }\r\n\r\n\r\n export const getColumns = (gridData: KEA.BW.Waermeplanung.Domain.GridData): kendo.ui.SpreadsheetSheetColumn[] => {\r\n const columns: kendo.ui.SpreadsheetSheetColumn[] = [];\r\n\r\n\r\n for (let i = 0; i < gridData.frozenColumnsCount; i++) {\r\n const tempWidth = i < (gridData.frozenColumnsCount - 1) ? 200 : 70;\r\n columns.push({\r\n width: tempWidth\r\n \r\n });\r\n }\r\n \r\n return columns;\r\n }\r\n\r\n\r\n export const transformRows = (rows: KEA.BW.Waermeplanung.Domain.GridCell[][]): kendo.ui.SpreadsheetSheetRow[] => {\r\n return rows.map(d => transformRow(d));\r\n }\r\n\r\n\r\n export const transformRow = (row: KEA.BW.Waermeplanung.Domain.GridCell[]): kendo.ui.SpreadsheetSheetRow => {\r\n return {\r\n cells: row.map(d => transformColumn(d))\r\n }\r\n }\r\n\r\n export const transformColumn = (cell: KEA.BW.Waermeplanung.Domain.GridCell): kendo.ui.SpreadsheetSheetRowCell => {\r\n let rowCell: kendo.ui.SpreadsheetSheetRowCell = {\r\n value: cell.value,\r\n background: \"#ffffff\",\r\n color: \"#000000\",\r\n enable: false\r\n };\r\n if (cell.cellType === KEA.BW.Waermeplanung.Domain.GridCellType.Header) {\r\n rowCell.background = \"#dddad6\";\r\n rowCell.bold = true;\r\n rowCell.textAlign = \"left\";\r\n } else if (cell.cellType === KEA.BW.Waermeplanung.Domain.GridCellType.Attribute) {\r\n rowCell.background = \"#eeedeb\";\r\n } else if (cell.cellType === KEA.BW.Waermeplanung.Domain.GridCellType.Number) {\r\n const countDecimals = Web.Utils.Number.countDecimals(cell.value);\r\n if (countDecimals > 0) {\r\n rowCell.format = \"#,#.#############\";\r\n } else {\r\n rowCell.format = \"#,#\";\r\n }\r\n } else if (cell.cellType === KEA.BW.Waermeplanung.Domain.GridCellType.SzenarioIst) {\r\n rowCell.background = \"#eeedeb\";\r\n } else if (cell.cellType === KEA.BW.Waermeplanung.Domain.GridCellType.SzenarioKlima) {\r\n rowCell.background = \"#e2efda\";\r\n } else if (cell.cellType === KEA.BW.Waermeplanung.Domain.GridCellType.SzenarioKlimaPlus) {\r\n rowCell.background = \"#c6e0b4\";\r\n } else if (cell.cellType === KEA.BW.Waermeplanung.Domain.GridCellType.SzenarioRef) {\r\n rowCell.background = \"#66ccff\";\r\n }\r\n return rowCell;\r\n }\r\n\r\n}","module KEA.BW.Waermeplanung.Web.Utils.Guid {\r\n export const newGuid = () => 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n var r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}","namespace KEA.BW.Waermeplanung.Web.Utils.Localization {\r\n\r\n // fix kendo translation, theres no de-DE translation file for the spreadsheet component\r\n // so we have to create our own one\r\n // see: https://docs.telerik.com/kendo-ui/globalization/localization#creating-new-localization-files\r\n // https://docs.telerik.com/kendo-ui/controls/data-management/spreadsheet/globalization/localization\r\n\r\n export const TranslateSpreadsheetToGerman = (): void => {\r\n\r\n (kendo.spreadsheet).messages.filterMenu =\r\n $.extend(true, (kendo.spreadsheet).messages.filterMenu, { \r\n \"sortAscending\": Strings.KendoSpreadsheet_filterMenu_sortAscending,\r\n \"sortDescending\": Strings.KendoSpreadsheet_filterMenu_sortDescending,\r\n \"filterByValue\": Strings.KendoSpreadsheet_filterMenu_filterByValue,\r\n \"filterByCondition\": Strings.KendoSpreadsheet_filterMenu_filterByCondition,\r\n \"apply\": Strings.KendoSpreadsheet_filterMenu_apply,\r\n \"search\": Strings.KendoSpreadsheet_filterMenu_search,\r\n \"clear\": Strings.KendoSpreadsheet_filterMenu_clear,\r\n \"blanks\": Strings.KendoSpreadsheet_filterMenu_blanks,\r\n \"operatorNone\": Strings.KendoSpreadsheet_filterMenu_operatorNone,\r\n \"and\": Strings.KendoSpreadsheet_filterMenu_and,\r\n \"or\": Strings.KendoSpreadsheet_filterMenu_or,\r\n \"operators\": {\r\n \"string\": {\r\n \"contains\": Strings.KendoSpreadsheet_filterMenu_operators_string_contains,\r\n \"doesnotcontain\": Strings.KendoSpreadsheet_filterMenu_operators_string_doesnotcontain,\r\n \"startswith\": Strings.KendoSpreadsheet_filterMenu_operators_string_startswith,\r\n \"endswith\": Strings.KendoSpreadsheet_filterMenu_operators_string_endswith,\r\n \"matches\": Strings.KendoSpreadsheet_filterMenu_operators_string_matches,\r\n \"doesnotmatch\": Strings.KendoSpreadsheet_filterMenu_operators_string_doesnotmatch,\r\n },\r\n \"date\": {\r\n \"eq\": Strings.KendoSpreadsheet_filterMenu_operators_date_eq,\r\n \"neq\": Strings.KendoSpreadsheet_filterMenu_operators_date_neq,\r\n \"lt\": Strings.KendoSpreadsheet_filterMenu_operators_date_lt,\r\n \"gt\": Strings.KendoSpreadsheet_filterMenu_operators_date_gt,\r\n },\r\n \"number\": {\r\n \"eq\": Strings.KendoSpreadsheet_filterMenu_operators_number_eq,\r\n \"neq\": Strings.KendoSpreadsheet_filterMenu_operators_number_neq,\r\n \"gte\": Strings.KendoSpreadsheet_filterMenu_operators_number_gte,\r\n \"gt\": Strings.KendoSpreadsheet_filterMenu_operators_number_gt,\r\n \"lte\": Strings.KendoSpreadsheet_filterMenu_operators_number_lte,\r\n \"lt\": Strings.KendoSpreadsheet_filterMenu_operators_number_lt,\r\n }\r\n }\r\n });\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Utils.Logout {\r\n import LoginManager = AppKitchen.LoginManager;\r\n\r\n export const logout = (e: any, $el: JQuery): void => {\r\n e.preventDefault();\r\n $el.fadeOut(400, () => {\r\n setTimeout(() => {\r\n AppKitchen.Data.Provider.LogoutProvider.logout().then(logoutResult => {\r\n if (logoutResult && logoutResult.successfullyLoggedOut) {\r\n // go back to the start page instead of oauth\r\n\r\n AppKitchen.BrowserHelper.setUrl(AppKitchen.GlobalSettings.customConfig.ApplicationBaseURL);\r\n } else {\r\n AppKitchen.UIHelper.Notifications.notify(`Can't logout. Error message: '${logoutResult.errorMessage}'`, \"warning\");\r\n }\r\n });\r\n }, 10);\r\n });\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.Utils.Number {\r\n export const countDecimals = (value: number): number => {\r\n\r\n if (!value) return 0;\r\n if (Math.floor(value.valueOf()) === value.valueOf()) return 0;\r\n\r\n const str = value.toString();\r\n if (str.indexOf(\".\") !== -1 && str.indexOf(\"-\") !== -1) {\r\n return str.split(\"-\")[1].length || 0;\r\n } else if (str.indexOf(\".\") !== -1) {\r\n return str.split(\".\")[1].length || 0;\r\n }\r\n return str.split(\"-\")[1].length || 0;\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.FunicularSwitch {\r\n\r\n export abstract class Option {\r\n\r\n public static some(value: T1): Option {\r\n return new Some(value);\r\n }\r\n\r\n public static none(): Option {\r\n return new None();\r\n }\r\n\r\n private readonly _tag;\r\n\r\n constructor(_tag) {\r\n this._tag = _tag;\r\n }\r\n\r\n public isSome(): boolean {\r\n return this._tag === Some.Tag;\r\n }\r\n\r\n public isNone(): boolean {\r\n return this._tag === None.Tag;\r\n }\r\n\r\n public map(some: (value: T) => T1, none: () => T1): T1 {\r\n return this.isSome() ? some((this).value) : none();\r\n }\r\n\r\n public match(some: (value: T) => void, none: () => void): void {\r\n this.isSome() ? some((this).value) : none();\r\n }\r\n }\r\n\r\n class Some extends Option {\r\n public static Tag = 'Some';\r\n public readonly value: T;\r\n\r\n constructor(value: T) {\r\n super(Some.Tag);\r\n this.value = value;\r\n }\r\n }\r\n\r\n class None extends Option {\r\n public static Tag = 'None';\r\n\r\n constructor() {\r\n super(None.Tag);\r\n }\r\n }\r\n}","module KEA.BW.Waermeplanung.Web.FunicularSwitch {\r\n\r\n export abstract class Result {\r\n\r\n public static ok(value: T1): Result {\r\n return new Ok(value);\r\n }\r\n\r\n public static error(error: string): Result {\r\n return new Error(error);\r\n }\r\n\r\n private readonly _tag;\r\n\r\n constructor(_tag) {\r\n this._tag = _tag;\r\n }\r\n\r\n public isOk(): boolean {\r\n return this._tag === Ok.Tag;\r\n }\r\n\r\n public isError(): boolean {\r\n return this._tag === Error.Tag;\r\n }\r\n\r\n public map(ok: (value: T) => T1, error: () => T1): T1 {\r\n return this.isOk() ? ok((this).value) : error();\r\n }\r\n\r\n public match(ok: (value: T) => void, error: (error: string) => void): void {\r\n this.isOk() ? ok((this).value) : error((this).error);\r\n }\r\n }\r\n\r\n class Ok extends Result {\r\n public static Tag = 'Ok';\r\n public readonly value: T;\r\n\r\n constructor(value: T) {\r\n super(Ok.Tag);\r\n this.value = value;\r\n }\r\n }\r\n\r\n class Error extends Result {\r\n public static Tag = 'Error';\r\n public readonly error: string;\r\n\r\n constructor(error: string) {\r\n super(Error.Tag);\r\n this.error = error;\r\n }\r\n }\r\n}"]}