1(self.webpackChunkapp=self.webpackChunkapp||[]).push([[1597],{81597:(u,m,t)=>{"use strict";t.r(m),t.d(m,{JahreseinteilungPageModule:()=>v});var s=t(31635),l=t(17705),d=t(60177),L=t(89417),D=t(35933),y=t(43559),a=t(10467);var E=t(71667),F=t.n(E),w=t(97586),k=t(39440),f=t(21192);class C{}var h,P=t(25220),B=t(7141),I=t(28874),J=t(94228),M=t(82014),S=t(86225),R=t(72515),O=t(34535),V=t(45918);let g=((h=class{get isSmallScreen(){return f.Z.isSmallScreen}constructor(n,i,e,o,r,c,N,U,Y,G){this.hubFactory=n,this.helper=i,this.languageService=e,this.timeService=o,this.loadingService=r,this.menuCtrl=c,this.alertService=N,this.modalService=U,this.documentViewer=Y,this.cdRef=G,this.Jahreseinteilung=[],this.isEmpty=!0,this.dateArray=Array.from({length:31},(K,H)=>H+1),this.isLoading=!1,this.isLoadingReport=!1}ngOnInit(){}ionViewWillEnter(){this.resetFilter(),this.loadData(new Date(this.VonDDL),new Date(this.BisDDL))}loadData(n,i){var e=this;return(0,a.A)(function*(){if(!e.isLoading)try{var o;e.isLoading=!0,yield e.loadingService.showLoader(),e.Jahreseinteilung=[],e.isEmpty=!0,e.cdRef.detectChanges(),e.Jahreseinteilung=yield(yield e.hubFactory.diensteinteilungService()).getJahresEinteilung(n,i),Object.values(e.Jahreseinteilung).forEach(r=>{var c;(null==r||null===(c=r.Einteilungen)||void 0===c?void 0:c.length)>0&&(e.isEmpty=!1)}),e.isEmpty&&0!=(null===(o=e.Jahreseinteilung)||void 0===o?void 0:o.length)&&e.alertService.createInfoAlertHTML(void 0,e.languageService.translate("msgFilterKeineDaten")),e.closeFilter()}catch(r){S.K.Fehler("\u{1f680} ~ JahreseinteilungPage ~ getData ~ err:",r)}finally{yield e.loadingService.dismiss(),e.isLoading=!1,e.cdRef.detectChanges()}})()}openDetail(n){var i=this;return(0,a.A)(function*(){let e=yield i.modalService.openEinteilungDetail(n,"Jahreseinteilung");null==e||e.present()})()}isOffline(){return f.Z.isAppModeOffline()}toggleFilter(){var n=this;return(0,a.A)(function*(){var i;yield null===(i=n.content)||void 0===i?void 0:i.scrollToTop(200),yield n.menuCtrl.enable(!0,"EinteilungFilter"),yield n.menuCtrl.toggle("EinteilungFilter")})()}closeFilter(){this.menuCtrl.close("EinteilungFilter")}resetFilter(){let n=new Date;this.VonDDL=this.timeService.toLocaleISOString(new Date(n.getFullYear(),0,1).toString()),this.BisDDL=this.timeService.toLocaleISOString(new Date(n.getFullYear(),11,31).toString())}ladeJahresEinteilung(){var n=this;return(0,a.A)(function*(){n.closeFilter(),yield n.loadData(new Date(n.VonDDL),new Date(n.BisDDL))})()}showJahreseinteilungPDF(){return f.Z.BackendVersion.isNewerOrEqual("2.1.0")}exportPDF(){var n=this;return(0,a.A)(function*(){if(!n.isLoadingReport){n.isLoadingReport=!0;try{let i=new C;i.Von=new Date(n.VonDDL),i.Bis=new Date(n.BisDDL),k.V.bindHubEvent("getJahreseinteilung",function(){var e=(0,a.A)(function*(o){let r=yield n.helper.formatURL(o);n.documentViewer.openFile(r)});return function(o){return e.apply(this,arguments)}}(),!1),yield(yield n.hubFactory.reportingService()).GetJahreseinteilung(i)}catch(i){S.K.Fehler("\u{1f680} ~ JahreseinteilungPage ~ exportPDF ~ err:",i)}finally{n.isLoadingReport=!1}}})()}onDateChanged(n,i){n?this.VonDDL=i:this.BisDDL=i;let e=new Date(this.VonDDL),o=new Date(this.BisDDL);n&&e>o?this.BisDDL=this.VonDDL:!n&&o<e&&(this.VonDDL=this.BisDDL)}tageseinteilungen(n,i){return null==n?void 0:n.filter(e=>w(null==e?void 0:e.Datum).format("D")==i.toString())}checkIsDayToday(n){let i=new Date;return!!this.timeService.isBetween(new Date(this.VonDDL),new Date(this.BisDDL),i)&&i.getDate()==n}checkIsToday(n,i){if(n=this.timeService.removeTime(n),i){let e=this.timeService.addDays(n,i-1);return this.timeService.isToday(e)}return this.timeService.isCurrentMonth(n)}}).ctorParameters=()=>[{type:B.d},{type:I.N},{type:J.g},{type:O.v},{type:M.U},{type:D._t},{type:P.u},{type:R.B},{type:V.r},{type:l.gRc}],h.propDecorators={content:[{type:l.Uct,args:["content"]}],tableScroll:[{type:l.Uct,args:["tableScroll"]}]},h);g=(0,s.Cg)([(0,l.uAl)({selector:"app-jahreseinteilung",template:'\x3c!-- TODO: Refactor and reduce duplicated code. --\x3e\r\n<ion-header>\r\n <isg-header [Title]="\'lblJahreseinteilung\' | translate"\r\n [Filter-Enable]="this.isSmallScreen" (Filter-Event)="toggleFilter()">\r\n </isg-header>\r\n</ion-header>\r\n\r\n\x3c!-- Mobile Filter --\x3e\r\n<ion-menu *ngIf="this.isSmallScreen" menuId="EinteilungFilter" side="end" contentId="isgHeaderContent" [swipeGesture]="false">\r\n <ion-header>\r\n <ion-toolbar>\r\n <ion-title>{{\'lblSuchparameter\' | translate}}</ion-title>\r\n <ion-buttons slot="end">\r\n <ion-button (click)="closeFilter()">\r\n <ion-icon slot="icon-only" name="close"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n </ion-header>
1\r\n\r\n <ion-content id="FilterContent" class="h-100">\r\n <ion-list>\r\n <ion-item lines="full">\r\n <isg-datetime class="w-100" Presentation="month-year" [LastDayOfMonth]="false" [Value]="this.VonDDL" [TextDisabled]="true"\r\n (changeEvent)="this.onDateChanged(true, $event)" label="{{\'lblVon\' | translate}}" labelPlacement="stacked"></isg-datetime>\r\n </ion-item>\r\n <ion-item lines="full">\r\n <isg-datetime class="w-100" Presentation="month-year" [LastDayOfMonth]="true" [Value]="this.BisDDL" [TextDisabled]="true"\r\n (changeEvent)="this.onDateChanged(false, $event)" label="{{\'lblBis\' | translate}}" labelPlacement="stacked"></isg-datetime>\r\n </ion-item>\r\n\r\n <ion-item *ngIf="!this.isOffline() && showJahreseinteilungPDF()" lines="none">\r\n <ion-button class="infoSoftButton buttonItem" (click)="exportPDF()" expand="block">\r\n <ion-label slot="start">{{\'lblJahreseinteilung\' | translate}}</ion-label>\r\n <ion-icon name="document-attach" slot="end"></ion-icon>\r\n <ion-spinner *ngIf="this.isLoadingReport" name="dots"></ion-spinner>\r\n </ion-button>\r\n </ion-item>\r\n </ion-list>\r\n </ion-content>\r\n\r\n <ion-footer class="ion-no-border ion-no-padding">\r\n <ion-grid fixed>\r\n <ion-row>\r\n <ion-col size="6">\r\n <ion-button expand="block" class="infoSoftButton" (click)="resetFilter()">\r\n <ion-icon slot="icon-only" name="refresh"></ion-icon>\r\n </ion-button>\r\n </ion-col>\r\n\r\n <ion-col size="6">\r\n <ion-button expand="block" class="infoSoftButton" (click)="ladeJahresEinteilung()">\r\n <ion-icon slot="icon-only" name="search"></ion-icon>\r\n </ion-button>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-footer>\r\n</ion-menu>\r\n\r\n<ion-content #content id="JahreseinteilungContent" class="h-100" scrollX="false" scrollY="false">\r\n \x3c!-- Desktop Filter --\x3e\r\n <ion-grid *ngIf="!this.isSmallScreen">\r\n <ion-row class="ion-align-items-center">\r\n <ion-col>\r\n <ion-item lines="none">\r\n <isg-datetime Presentation="month-year" [LastDayOfMonth]="false" [Value]="this.VonDDL" (changeEvent)="this.onDateChanged(true, $event)"\r\n label="{{\'lblVon\' | translate}}" labelPlacement="stacked"></isg-datetime>\r\n </ion-item>\r\n </ion-col>\r\n <ion-col>\r\n <ion-item lines="none">\r\n <isg-datetime Presentation="month-year" [LastDayOfMonth]="true" [Value]="this.BisDDL" (changeEvent)="this.onDateChanged(false, $event)"\r\n label="{{\'lblBis\' | translate}}" labelPlacement="stacked"></isg-datetime>\r\n </ion-item>\r\n </ion-col>\r\n\r\n <ion-col>\r\n <ion-row>\r\n <ion-col size="6">\r\n <ion-button expand="block" class="infoSoftButton" (click)="resetFilter()">\r\n <ion-icon slot="icon-only" name="refresh"></ion-icon>\r\n </ion-button>\r\n </ion-col>\r\n <ion-col size="6">\r\n <ion-button expand="block" class="infoSoftButton" (click)="ladeJahresEinteilung()">\r\n <ion-icon slot="icon-only" name="search"></ion-icon>\r\n </ion-button>\r\n </ion-col>\r\n </ion-row>\r\n </ion-col>\r\n\r\n <ion-col>\r\n <ion-item *ngIf="!this.isOffline()" lines="none">\r\n <ion-button expand="block" class="infoSoftButton buttonItem jahreseinteilungButton" (click)="exportPDF()">\r\n <ion-label slot="start">{{\'lblJahreseinteilung\' | translate}}</ion-label>\r\n <ion-icon name="document-attach" slot="end"></ion-icon>\r\n <ion-spinner *ngIf="this.isLoadingReport" name="dots"></ion-spinner>\r\n </ion-button>\r\n </ion-item>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n\r\n \x3c!-- Content --\x3e\r\n <div *ngIf="this.isLoading">\r\n <div *ngFor="let item of this.helper.placeholderArray(5)">\r\n <app-skeleton-text-item></app-skeleton-text-item>\r\n </div>\r\n </div>\r\n\r\n <ion-item *ngIf="!this.isLoading && this.isEmpty">\r\n <ion-label class="font-bold ion-padding-vertical ion-text-center">\r\n {{\'lblKeineDatenVerfuegbar\' | translate}}\r\n </ion-label>\r\n </ion-item>\r\n\r\n <ion-grid *ngIf="!this.isLoading && !this.isEmpty && this.Jahreseinteilung?.length > 0" class="h-100 ion-no-padding">\r\n <ion-row class="h-100">\r\n <ion-col size="12" class="h-100">\r\n <div id="table-scroll" #tableScroll class="table-scroll h-100">\r\n <table id="main-table" class="main-table">\r\n <thead>\r\n <tr>\r\n <th #firstCol id="firstCol" class="ion-text-start" style="z-index: 20;"></th>\r\n <th *ngFor="let column of dateArray; let i = index" class="p-4"\r\n [ngClass]="{\'currentDayBackgroun
1d\': this.checkIsDayToday(column)}">{{column}}.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor="let monat of this.Jahreseinteilung; let i = index">\r\n <tr *ngIf="monat.Einteilungen.length > 0">\r\n <th class="ion-text-start monthName p-4" [ngClass]="{\'currentDayBackground\': this.checkIsToday(monat.Monat)}">\r\n <ion-label>{{this.timeService.format(monat.Monat, "MMMM yyyy")}}</ion-label>\r\n </th>\r\n <td class="p-4" [ngClass]="{\'currentDayBackground\': this.checkIsToday(monat.Monat, day)}" *ngFor="let day of dateArray">\r\n <ng-container *ngFor="let et of tageseinteilungen(monat.Einteilungen, day)" >\r\n <ion-label button fill="clear" class="Einteilung ion-text-center no-text-select p-4" (click)="openDetail(et.ID)"\r\n [ngStyle]="{\'color\': et.Vordergrund, \'background\':et.Hintergrund}">\r\n {{et.Name}}\r\n </ion-label>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n</ion-content>\r\n',styles:[F()]})],g);const A=[{path:"",component:g}];let b=class{};b=(0,s.Cg)([(0,l.UQu)({imports:[y.iI.forChild(A)],exports:[y.iI]})],b);var T=t(1775),z=t(73955),j=t(7485);let v=class{};v=(0,s.Cg)([(0,l.UQu)({imports:[d.MD,L.YN,D.bv,b,T.G,z.h,j.MY],declarations:[g]})],v)},71667:(u,m,t)=>{var s=t(8564),d=t(98557)(s);d.push([u.id,".buttonItem {\n width: 100%;\n height: 100%;\n max-height: 36px;\n max-lines: 280px;\n font-size: medium;\n}\n\n.main-table {\n border-collapse: collapse;\n}\n\n@media (min-width: 992px) {\n .table-scroll {\n height: calc(100% - 56px) !important;\n }\n}\n.table-scroll {\n position: sticky;\n width: 100%;\n z-index: 1;\n margin: auto;\n overflow: auto;\n}\n\n.table-scroll table {\n width: 100%;\n min-width: 1280px;\n margin: auto;\n border-collapse: separate;\n border-spacing: 0;\n}\n\n.table-scroll th,\n.table-scroll td {\n background-color: var(--dispo-row-color);\n vertical-align: middle;\n border: 1px solid var(--dispo-border-color);\n border-left-width: 0;\n border-top-width: 0;\n}\n\n.table-scroll thead {\n position: sticky;\n top: 0;\n z-index: 5;\n}\n\n.table-scroll tr th {\n position: sticky;\n top: 0;\n z-index: 5;\n}\n\n.table-scroll thead th {\n height: 2em;\n border-bottom-width: 0;\n}\n\n/* safari and ios need the tfoot itself to be position:sticky also */\n.table-scroll tfoot,\n.table-scroll tfoot th,\n.table-scroll tfoot td {\n position: sticky;\n bottom: 0;\n background-color: var(--dispo-row-color);\n color: #fff;\n z-index: 4;\n}\n\nthead th,\ntbody td {\n width: 48px;\n}\n\nth:first-child {\n position: sticky;\n left: 0;\n z-index: 10;\n font-weight: 500;\n background-color: var(--dispo-header-color);\n}\n\nthead th:first-child,\ntfoot th:first-child {\n z-index: 5;\n}\n\nthead tr th:not(.currentDayBackground) {\n background-color: var(--dispo-header-color);\n font-weight: 500;\n}\n\n#main-table thead tr td {\n background-color: var(--dispo-row-color);\n}\n\n#main-table thead tr {\n z-index: 5;\n font-size: smaller;\n}\n\n#main-table tbody td {\n font-size: smaller;\n}\n\n#main-table tbody tr {\n position: sticky;\n background-color: var(--dispo-row-color);\n}\n\ndiv > table > thead > tr > .currentDayBackground {\n font-weight: bold;\n background-color: deepskyblue;\n}\n\ndiv > table > tbody > tr > .currentDayBackground {\n background-color: deepskyblue !important;\n}\n\n.Einteilung {\n border-style: solid;\n border-width: thin;\n min-height: 2em;\n min-width: 4em;\n cursor: pointer;\n}\n\ntd > .Einteilung {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\ntd > .Einteilung:not(:last-child) {\n margin-bottom: 5px;\n}\n\n.monthName {\n min-width: 6em;\n}\n\n.jahreseinteilungButton {\n max-width: 250px;\n position: absolute;\n right: 0;\n}",""]),u.exports=d.toString()}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.