iptdevs-design-system
Version:
Library common elements into IPT Plattform.
119 lines • 17.5 kB
JavaScript
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