UNPKG

iptdevs-design-system

Version:

Library common elements into IPT Plattform.

119 lines 17.5 kB
import { Injectable } from '@angular/core'; import Swal from 'sweetalert2'; import * as i0 from "@angular/core"; export class CalculateQuotesService { constructor() { this.specialCourseTypes = [3, 4, 5, 6, 7, 8, 15, 21, 24, 25, 26, 30, 33]; //tecnicas this.monthsDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; } calculateQuotes(params) { let dataFinancing = []; let index = 1; // Indicador de cant. de cuotas let dateJs = new Date(params.date); let isEndMonth = false; const isSpecialCourseType = this.specialCourseTypes.includes(Number(params.courseType)); if (!isSpecialCourseType) { // Non-special case: add one day and check for Sunday dateJs.setMilliseconds(dateJs.getMilliseconds() + (1000 * 3600 * 24)); isEndMonth = this.monthsDays[dateJs.getMonth()] === dateJs.getDate(); if (dateJs.getDay() === 0) { Swal.fire({ title: 'Fecha inválida', text: 'Debe seleccionar un día de la semana diferente al domingo', icon: 'error' }); return []; } } // Enrollment let enrollment = [ index, Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0 }).format(Math.round(parseFloat(params.totalPrice.toString()))), this.getStringDate(dateJs) ]; // First quota let firstQuotaDate = isSpecialCourseType ? new Date(params.date) : dateJs; if (isSpecialCourseType) { firstQuotaDate.setMonth(firstQuotaDate.getMonth() + 1); // Adjust if day exceeds max days in month const maxDays = this.monthsDays[firstQuotaDate.getMonth()]; if (firstQuotaDate.getDate() > maxDays) { firstQuotaDate.setDate(maxDays); } } let quota = [ index, Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0 }).format(Math.round(parseFloat(params.quotaValues.toString()))), this.getStringDate(firstQuotaDate) ]; dataFinancing.push(enrollment); dataFinancing.push(quota); while (index < params.quotaTimes) { index = index + 1; let newJsDate; if (isSpecialCourseType) { // Special case: add (index) months from params.date newJsDate = new Date(params.date); newJsDate.setMonth(newJsDate.getMonth() + index); // Adjust if day exceeds max days in month const maxDays = this.monthsDays[newJsDate.getMonth()]; if (newJsDate.getDate() > maxDays) { newJsDate.setDate(maxDays); } } else { // Non-special case: use existing logic const nextDates = this.setPlusOneMonth(dateJs, isEndMonth); newJsDate = nextDates[nextDates.length - 1]; dateJs = nextDates[0]; } let row = [ index, Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0 }).format(Math.round(parseFloat(params.quotaValues.toString()))), this.getStringDate(newJsDate) ]; dataFinancing.push(row); } return dataFinancing; } setPlusOneMonth(originDate, isEndMonth) { let response = []; let oneDayMilis = 1000 * 3600 * 24; let day = isEndMonth ? this.monthsDays[(originDate.getMonth() + 1) % 12] : originDate.getDate(); let plusMonthDate = new Date(originDate.getFullYear(), originDate.getMonth() + 1, day); response.push(new Date(originDate.getFullYear(), originDate.getMonth() + 1, day)); while (plusMonthDate.getDay() === 0) { plusMonthDate.setMilliseconds(plusMonthDate.getMilliseconds() - oneDayMilis); } response.push(plusMonthDate); return response; } getStringDate(originDate) { let month = originDate.getMonth() + 1; let stringMonth = month < 10 ? '0' + month : month.toString(); let day = originDate.getDate(); let stringDay = day < 10 ? '0' + day : day.toString(); return originDate.getFullYear() + '-' + stringMonth + '-' + stringDay; } } CalculateQuotesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CalculateQuotesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); CalculateQuotesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CalculateQuotesService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CalculateQuotesService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLXF1b3Rlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC9sb2dpYy9jYWxjdWxhdGUtcXVvdGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7O0FBYy9CLE1BQU0sT0FBTyxzQkFBc0I7SUFJakM7UUFIQSx1QkFBa0IsR0FBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUEsVUFBVTtRQUN4RixlQUFVLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXhELENBQUM7SUFFakIsZUFBZSxDQUFDLE1BQTZCO1FBQzNDLElBQUksYUFBYSxHQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7UUFDOUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXhGLElBQUks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MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuZXhwb3J0IGludGVyZmFjZSBDYWxjdWxhdGVRdW90ZXNQYXJhbXMge1xuICBkYXRlOiBEYXRlO1xuICBxdW90YVZhbHVlczogbnVtYmVyO1xuICBxdW90YVRpbWVzOiBhbnk7XG4gIHRvdGFsUHJpY2U6IGFueTtcbiAgY291cnNlVHlwZTogbnVtYmVyO1xuICBlbmdsaXNoTGV2ZWw6IG51bWJlcjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FsY3VsYXRlUXVvdGVzU2VydmljZSB7XG4gIHNwZWNpYWxDb3Vyc2VUeXBlczogbnVtYmVyW10gPSBbMywgNCwgNSwgNiwgNywgOCwgMTUsIDIxLCAyNCwgMjUsIDI2LCAzMCwgMzNdOy8vdGVjbmljYXNcbiAgbW9udGhzRGF5czogbnVtYmVyW10gPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBjYWxjdWxhdGVRdW90ZXMocGFyYW1zOiBDYWxjdWxhdGVRdW90ZXNQYXJhbXMpOiBhbnlbXSB7XG4gICAgbGV0IGRhdGFGaW5hbmNpbmc6IGFueVtdID0gW107XG4gICAgbGV0IGluZGV4ID0gMTsgLy8gSW5kaWNhZG9yIGRlIGNhbnQuIGRlIGN1b3Rhc1xuICAgIGxldCBkYXRlSnMgPSBuZXcgRGF0ZShwYXJhbXMuZGF0ZSk7XG4gICAgbGV0IGlzRW5kTW9udGggPSBmYWxzZTtcbiAgICBjb25zdCBpc1NwZWNpYWxDb3Vyc2VUeXBlID0gdGhpcy5zcGVjaWFsQ291cnNlVHlwZXMuaW5jbHVkZXMoTnVtYmVyKHBhcmFtcy5jb3Vyc2VUeXBlKSk7XG5cbiAgICBpZiAoIWlzU3BlY2lhbENvdXJzZVR5cGUpIHtcbiAgICAgIC8vIE5vbi1zcGVjaWFsIGNhc2U6IGFkZCBvbmUgZGF5IGFuZCBjaGVjayBmb3IgU3VuZGF5XG4gICAgICBkYXRlSnMuc2V0TWlsbGlzZWNvbmRzKGRhdGVKcy5nZXRNaWxsaXNlY29uZHMoKSArICgxMDAwICogMzYwMCAqIDI0KSk7XG4gICAgICBpc0VuZE1vbnRoID0gdGhpcy5tb250aHNEYXlzW2RhdGVKcy5nZXRNb250aCgpXSA9PT0gZGF0ZUpzLmdldERhdGUoKTtcblxuICAgICAgaWYgKGRhdGVKcy5nZXREYXkoKSA9PT0gMCkge1xuICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgIHRpdGxlOiAnRmVjaGEgaW52w6FsaWRhJyxcbiAgICAgICAgICB0ZXh0OiAnRGViZSBzZWxlY2Npb25hciB1biBkw61hIGRlIGxhIHNlbWFuYSBkaWZlcmVudGUgYWwgZG9taW5nbycsXG4gICAgICAgICAgaWNvbjogJ2Vycm9yJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVucm9sbG1lbnRcbiAgICBsZXQgZW5yb2xsbWVudDogYW55W10gPSBbXG4gICAgICBpbmRleCxcbiAgICAgIEludGwuTnVtYmVyRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwXG4gICAgICB9KS5mb3JtYXQoTWF0aC5yb3VuZChwYXJzZUZsb2F0KHBhcmFtcy50b3RhbFByaWNlLnRvU3RyaW5nKCkpKSksXG4gICAgICB0aGlzLmdldFN0cmluZ0RhdGUoZGF0ZUpzKVxuICAgIF07XG5cbiAgICAvLyBGaXJzdCBxdW90YVxuICAgIGxldCBmaXJzdFF1b3RhRGF0ZSA9IGlzU3BlY2lhbENvdXJzZVR5cGUgPyBuZXcgRGF0ZShwYXJhbXMuZGF0ZSkgOiBkYXRlSnM7XG4gICAgaWYgKGlzU3BlY2lhbENvdXJzZVR5cGUpIHtcbiAgICAgIGZpcnN0UXVvdGFEYXRlLnNldE1vbnRoKGZpcnN0UXVvdGFEYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgIC8vIEFkanVzdCBpZiBkYXkgZXhjZWVkcyBtYXggZGF5cyBpbiBtb250aFxuICAgICAgY29uc3QgbWF4RGF5cyA9IHRoaXMubW9udGhzRGF5c1tmaXJzdFF1b3RhRGF0ZS5nZXRNb250aCgpXTtcbiAgICAgIGlmIChmaXJzdFF1b3RhRGF0ZS5nZXREYXRlKCkgPiBtYXhEYXlzKSB7XG4gICAgICAgIGZpcnN0UXVvdGFEYXRlLnNldERhdGUobWF4RGF5cyk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBxdW90YTogYW55W10gPSBbXG4gICAgICBpbmRleCxcbiAgICAgIEludGwuTnVtYmVyRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwXG4gICAgICB9KS5mb3JtYXQoTWF0aC5yb3VuZChwYXJzZUZsb2F0KHBhcmFtcy5xdW90YVZhbHVlcy50b1N0cmluZygpKSkpLFxuICAgICAgdGhpcy5nZXRTdHJpbmdEYXRlKGZpcnN0UXVvdGFEYXRlKVxuICAgIF07XG5cbiAgICBkYXRhRmluYW5jaW5nLnB1c2goZW5yb2xsbWVudCk7XG4gICAgZGF0YUZpbmFuY2luZy5wdXNoKHF1b3RhKTtcblxuICAgIHdoaWxlIChpbmRleCA8IHBhcmFtcy5xdW90YVRpbWVzKSB7XG4gICAgICBpbmRleCA9IGluZGV4ICsgMTtcbiAgICAgIGxldCBuZXdKc0RhdGU6IERhdGU7XG4gICAgICBpZiAoaXNTcGVjaWFsQ291cnNlVHlwZSkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IGFkZCAoaW5kZXgpIG1vbnRocyBmcm9tIHBhcmFtcy5kYXRlXG4gICAgICAgIG5ld0pzRGF0ZSA9IG5ldyBEYXRlKHBhcmFtcy5kYXRlKTtcbiAgICAgICAgbmV3SnNEYXRlLnNldE1vbnRoKG5ld0pzRGF0ZS5nZXRNb250aCgpICsgaW5kZXgpO1xuICAgICAgICAvLyBBZGp1c3QgaWYgZGF5IGV4Y2VlZHMgbWF4IGRheXMgaW4gbW9udGhcbiAgICAgICAgY29uc3QgbWF4RGF5cyA9IHRoaXMubW9udGhzRGF5c1tuZXdKc0RhdGUuZ2V0TW9udGgoKV07XG4gICAgICAgIGlmIChuZXdKc0RhdGUuZ2V0RGF0ZSgpID4gbWF4RGF5cykge1xuICAgICAgICAgIG5ld0pzRGF0ZS5zZXREYXRlKG1heERheXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb24tc3BlY2lhbCBjYXNlOiB1c2UgZXhpc3RpbmcgbG9naWNcbiAgICAgICAgY29uc3QgbmV4dERhdGVzID0gdGhpcy5zZXRQbHVzT25lTW9udGgoZGF0ZUpzLCBpc0VuZE1vbnRoKTtcbiAgICAgICAgbmV3SnNEYXRlID0gbmV4dERhdGVzW25leHREYXRlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgZGF0ZUpzID0gbmV4dERhdGVzWzBdO1xuICAgICAgfVxuXG4gICAgICBsZXQgcm93OiBhbnlbXSA9IFtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIEludGwuTnVtYmVyRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICBjdXJyZW5jeTogJ1VTRCcsXG4gICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwXG4gICAgICAgIH0pLmZvcm1hdChNYXRoLnJvdW5kKHBhcnNlRmxvYXQocGFyYW1zLnF1b3RhVmFsdWVzLnRvU3RyaW5nKCkpKSksXG4gICAgICAgIHRoaXMuZ2V0U3RyaW5nRGF0ZShuZXdKc0RhdGUpXG4gICAgICBdO1xuICAgICAgZGF0YUZpbmFuY2luZy5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFGaW5hbmNpbmc7XG4gIH1cblxuICBzZXRQbHVzT25lTW9udGgob3JpZ2luRGF0ZTogRGF0ZSwgaXNFbmRNb250aDogYm9vbGVhbik6IERhdGVbXSB7XG4gICAgbGV0IHJlc3BvbnNlOiBEYXRlW10gPSBbXTtcbiAgICBsZXQgb25lRGF5TWlsaXMgPSAxMDAwICogMzYwMCAqIDI0O1xuICAgIGxldCBkYXkgPSBpc0VuZE1vbnRoID8gdGhpcy5tb250aHNEYXlzWyhvcmlnaW5EYXRlLmdldE1vbnRoKCkgKyAxKSAlIDEyXSA6IG9yaWdpbkRhdGUuZ2V0RGF0ZSgpO1xuICAgIGxldCBwbHVzTW9udGhEYXRlOiBEYXRlID0gbmV3IERhdGUob3JpZ2luRGF0ZS5nZXRGdWxsWWVhcigpLCBvcmlnaW5EYXRlLmdldE1vbnRoKCkgKyAxLCBkYXkpO1xuXG4gICAgcmVzcG9uc2UucHVzaChuZXcgRGF0ZShvcmlnaW5EYXRlLmdldEZ1bGxZZWFyKCksIG9yaWdpbkRhdGUuZ2V0TW9udGgoKSArIDEsIGRheSkpO1xuXG4gICAgd2hpbGUgKHBsdXNNb250aERhdGUuZ2V0RGF5KCkgPT09IDApIHtcbiAgICAgIHBsdXNNb250aERhdGUuc2V0TWlsbGlzZWNvbmRzKHBsdXNNb250aERhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBvbmVEYXlNaWxpcyk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2UucHVzaChwbHVzTW9udGhEYXRlKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBnZXRTdHJpbmdEYXRlKG9yaWdpbkRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGxldCBtb250aCA9IG9yaWdpbkRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgbGV0IHN0cmluZ01vbnRoID0gbW9udGggPCAxMCA/ICcwJyArIG1vbnRoIDogbW9udGgudG9TdHJpbmcoKTtcbiAgICBsZXQgZGF5ID0gb3JpZ2luRGF0ZS5nZXREYXRlKCk7XG4gICAgbGV0IHN0cmluZ0RheSA9IGRheSA8IDEwID8gJzAnICsgZGF5IDogZGF5LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIG9yaWdpbkRhdGUuZ2V0RnVsbFllYXIoKSArICctJyArIHN0cmluZ01vbnRoICsgJy0nICsgc3RyaW5nRGF5O1xuICB9XG59Il19