UNPKG

ngx-gem-spaas

Version:

This library contains services, components, images and styles to provide a unified look and way-of-working throughout GEM SPaaS.

86 lines 13.3 kB
import { DateTime } from 'luxon'; import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; export class ContractLabelService { static fromH01toH24(ts) { return (DateTime.fromISO(ts).hour + 1).toFixed(0).padStart(3, 'H0'); } static fromS01toS48(ts) { const dt = DateTime.fromISO(ts); return ((dt.hour * 2 + 1) + (dt.minute / 30)).toFixed(0).padStart(3, 'S0'); } static from00H1to23H2(ts) { const dt = DateTime.fromISO(ts); return dt.toFormat('HH\'H\'') + (dt.minute / 30 + 1); } static from00Q1to23Q4(ts) { const dt = DateTime.fromISO(ts); return dt.toFormat(`HH'Q'`) + (dt.minute / 15 + 1); } static dstSuffixOct(ts) { const dt = DateTime.fromISO(ts); const hoursInDay = dt.plus({ days: 1 }).startOf('day').diff(dt.startOf('day'), 'hours').toObject().hours; if (hoursInDay === 25 && dt.hour === 2) { return dt.toUTC().hour === 0 ? 'A' : 'B'; } return ''; } static epexHourInc(ts) { const dt = DateTime.fromISO(ts); const hoursInDay = dt.plus({ days: 1 }).startOf('day').diff(dt.startOf('day'), 'hours').toObject().hours; if (hoursInDay === 23 && dt.toUTC().hour === 0) { return 2; } return 1; } static getContractLabel(ts, type) { switch (type) { // EPEX case 'epexH': // 00-01 - 23-00 (DST: 01-03, 02-03A, 02-03B) const h = DateTime.fromISO(ts).hour; const inc = this.epexHourInc(ts); return h.toString().padStart(2, '0') + '-' + (h + inc).toString().replace('24', '0').padStart(2, '0') + this.dstSuffixOct(ts); case 'epexS': // 00H1 - 23H2 (DST: 02H1A - 02H2B) return this.from00H1to23H2(ts) + this.dstSuffixOct(ts); case 'epexQ': // 00Q1 - 23Q4 (DST: 02Q1A - 02Q4B) return this.from00Q1to23Q4(ts) + this.dstSuffixOct(ts); // VNET case 'vnetH': // H01 - H24 (DST: H03A, H03B) return this.fromH01toH24(ts) + this.dstSuffixOct(ts); case 'vnetS': // S01 - S48 (DST: S06A - S06B) return this.fromS01toS48(ts) + this.dstSuffixOct(ts); case 'vnetQ': // SAME AS EPEX: 00Q1 - 23Q4 (DST: 02Q1A - 02Q4B) return this.from00Q1to23Q4(ts) + this.dstSuffixOct(ts); // BOOKING case 'bookH': // SAMES AS VNET: H01 - H24 (DST: H03A, H03B) return this.fromH01toH24(ts) + this.dstSuffixOct(ts); case 'bookS': // SAME AS VNET: S01 - S48 (DST: S05A - S06B) return this.fromS01toS48(ts) + this.dstSuffixOct(ts); case 'bookQ': // Q01 - Q96 const dt = DateTime.fromISO(ts); return (dt.hour * 4) + (dt.minute / 15 + 1).toFixed(0).padStart(2, 'Q0') + this.dstSuffixOct(ts); default: return ''; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContractLabelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContractLabelService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ContractLabelService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3QtbGFiZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1nZW0tc3BhYXMvZGF0ZS9zcmMvX3NlcnZpY2VzL2NvbnRyYWN0LWxhYmVsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUt6QyxNQUFNLE9BQU8sb0JBQW9CO0lBRXZCLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBVTtRQUNwQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBVTtRQUNwQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQVU7UUFDdEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FB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QzsrR0F4RlUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250cmFjdExhYmVsU2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGZyb21IMDF0b0gyNCh0czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAoRGF0ZVRpbWUuZnJvbUlTTyh0cykuaG91ciArIDEpLnRvRml4ZWQoMCkucGFkU3RhcnQoMywgJ0gwJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBmcm9tUzAxdG9TNDgodHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLmZyb21JU08odHMpO1xyXG4gICAgcmV0dXJuICgoZHQuaG91ciAqIDIgKyAxKSArIChkdC5taW51dGUgLyAzMCkpLnRvRml4ZWQoMCkucGFkU3RhcnQoMywgJ1MwJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBmcm9tMDBIMXRvMjNIMih0czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUuZnJvbUlTTyh0cyk7XHJcbiAgICByZXR1cm4gZHQudG9Gb3JtYXQoJ0hIXFwnSFxcJycpICsgKGR0Lm1pbnV0ZSAvIDMwICsgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBmcm9tMDBRMXRvMjNRNCh0czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUuZnJvbUlTTyh0cyk7XHJcbiAgICByZXR1cm4gZHQudG9Gb3JtYXQoYEhIJ1EnYCkgKyAoZHQubWludXRlIC8gMTUgKyAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkc3RTdWZmaXhPY3QodHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLmZyb21JU08odHMpO1xyXG4gICAgY29uc3QgaG91cnNJbkRheSA9IGR0LnBsdXMoe2RheXM6IDF9KS5zdGFydE9mKCdkYXknKS5kaWZmKGR0LnN0YXJ0T2YoJ2RheScpLCAnaG91cnMnKS50b09iamVjdCgpLmhvdXJzO1xyXG4gICAgaWYgKGhvdXJzSW5EYXkgPT09IDI1ICYmIGR0LmhvdXIgPT09IDIpIHtcclxuICAgICAgcmV0dXJuIGR0LnRvVVRDKCkuaG91ciA9PT0gMCA/ICdBJyA6ICdCJztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGVwZXhIb3VySW5jKHRzOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZHQgPSBEYXRlVGltZS5mcm9tSVNPKHRzKTtcclxuICAgIGNvbnN0IGhvdXJzSW5EYXkgPSBkdC5wbHVzKHtkYXlzOiAxfSkuc3RhcnRPZignZGF5JykuZGlmZihkdC5zdGFydE9mKCdkYXknKSwgJ2hvdXJzJykudG9PYmplY3QoKS5ob3VycztcclxuICAgIGlmIChob3Vyc0luRGF5ID09PSAyMyAmJiBkdC50b1VUQygpLmhvdXIgPT09IDApIHtcclxuICAgICAgcmV0dXJuIDI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRDb250cmFjdExhYmVsKFxyXG4gICAgdHM6IHN0cmluZyxcclxuICAgIHR5cGU6ICdlcGV4SCcgfCAnZXBleFMnIHwgJ2VwZXhRJyB8ICdib29rSCcgfCAnYm9va1MnIHwgJ2Jvb2tRJyB8ICd2bmV0SCcgfCAndm5ldFMnIHwgJ3ZuZXRRJ1xyXG4gICk6IHN0cmluZyB7XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcblxyXG4gICAgICAvLyBFUEVYXHJcbiAgICAgIGNhc2UgJ2VwZXhIJzpcclxuICAgICAgICAvLyAwMC0wMSAtIDIzLTAwIChEU1Q6IDAxLTAzLCAwMi0wM0EsIDAyLTAzQilcclxuICAgICAgICBjb25zdCBoID0gRGF0ZVRpbWUuZnJvbUlTTyh0cykuaG91cjtcclxuICAgICAgICBjb25zdCBpbmMgPSB0aGlzLmVwZXhIb3VySW5jKHRzKTtcclxuICAgICAgICByZXR1cm4gaC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgKyAnLScgK1xyXG4gICAgICAgICAgKGggKyBpbmMpLnRvU3RyaW5nKCkucmVwbGFjZSgnMjQnLCAnMCcpLnBhZFN0YXJ0KDIsICcwJykgK1xyXG4gICAgICAgICAgdGhpcy5kc3RTdWZmaXhPY3QodHMpO1xyXG4gICAgICBjYXNlICdlcGV4Uyc6XHJcbiAgICAgICAgLy8gMDBIMSAtIDIzSDIgKERTVDogMDJIMUEgLSAwMkgyQilcclxuICAgICAgICByZXR1cm4gdGhpcy5mcm9tMDBIMXRvMjNIMih0cykgKyB0aGlzLmRzdFN1ZmZpeE9jdCh0cyk7XHJcbiAgICAgIGNhc2UgJ2VwZXhRJzpcclxuICAgICAgICAvLyAwMFExIC0gMjNRNCAoRFNUOiAwMlExQSAtIDAyUTRCKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmZyb20wMFExdG8yM1E0KHRzKSArIHRoaXMuZHN0U3VmZml4T2N0KHRzKTtcclxuXHJcbiAgICAgIC8vIFZORVRcclxuICAgICAgY2FzZSAndm5ldEgnOlxyXG4gICAgICAgIC8vIEgwMSAtIEgyNCAoRFNUOiBIMDNBLCBIMDNCKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmZyb21IMDF0b0gyNCh0cykgKyB0aGlzLmRzdFN1ZmZpeE9jdCh0cyk7XHJcbiAgICAgIGNhc2UgJ3ZuZXRTJzpcclxuICAgICAgICAvLyBTMDEgLSBTNDggKERTVDogUzA2QSAtIFMwNkIpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVMwMXRvUzQ4KHRzKSArIHRoaXMuZHN0U3VmZml4T2N0KHRzKTtcclxuICAgICAgY2FzZSAndm5ldFEnOlxyXG4gICAgICAgIC8vIFNBTUUgQVMgRVBFWDogMDBRMSAtIDIzUTQgKERTVDogMDJRMUEgLSAwMlE0QilcclxuICAgICAgICByZXR1cm4gdGhpcy5mcm9tMDBRMXRvMjNRNCh0cykgKyB0aGlzLmRzdFN1ZmZpeE9jdCh0cyk7XHJcblxyXG4gICAgICAvLyBCT09LSU5HXHJcbiAgICAgIGNhc2UgJ2Jvb2tIJzpcclxuICAgICAgICAvLyBTQU1FUyBBUyBWTkVUOiBIMDEgLSBIMjQgKERTVDogSDAzQSwgSDAzQilcclxuICAgICAgICByZXR1cm4gdGhpcy5mcm9tSDAxdG9IMjQodHMpICsgdGhpcy5kc3RTdWZmaXhPY3QodHMpO1xyXG4gICAgICBjYXNlICdib29rUyc6XHJcbiAgICAgICAgLy8gU0FNRSBBUyBWTkVUOiBTMDEgLSBTNDggKERTVDogUzA1QSAtIFMwNkIpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVMwMXRvUzQ4KHRzKSArIHRoaXMuZHN0U3VmZml4T2N0KHRzKTtcclxuICAgICAgY2FzZSAnYm9va1EnOlxyXG4gICAgICAgIC8vIFEwMSAtIFE5NlxyXG4gICAgICAgIGNvbnN0IGR0ID0gRGF0ZVRpbWUuZnJvbUlTTyh0cyk7XHJcbiAgICAgICAgcmV0dXJuIChkdC5ob3VyICogNCkgKyAoZHQubWludXRlIC8gMTUgKyAxKS50b0ZpeGVkKDApLnBhZFN0YXJ0KDIsICdRMCcpICsgdGhpcy5kc3RTdWZmaXhPY3QodHMpO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19