UNPKG

bitcitawebfront-library

Version:

Angular CLI project used by other Angular projects in the bitcita web project.<br />

239 lines 17.3 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@angular/core"); var moment = require("moment-mini-ts"); var core_2 = require("@ngx-translate/core"); var campanya_service_1 = require("../../common/service/campanya.service"); var cita_service_1 = require("../../common/service/cita.service"); var calendario_1 = require("../../common/data/calendario"); var seccion_texto_1 = require("../../common/data/seccion-texto"); var reservar_cita_paso_1 = require("./reservar-cita-paso"); var message_service_1 = require("../../shared/service/message.service"); var idioma_1 = require("../../shared/data/idioma"); var error_1 = require("../../shared/data/error"); var SeleccionarCitaComponent = /** @class */ (function (_super) { __extends(SeleccionarCitaComponent, _super); function SeleccionarCitaComponent(campanyaService, citaService, translate, message) { var _this = _super.call(this, "SeleccionarCitaComponent") || this; _this.campanyaService = campanyaService; _this.citaService = citaService; _this.translate = translate; _this.message = message; _this.displayResumenCitaConfirmarForm = false; return _this; } /// Comportamiento general del paso (sobrescribe lo definido en ReservaCitaPaso) /// SeleccionarCitaComponent.prototype.loadDatosInicio = function () { this.listCalendario = [calendario_1.Calendario.newObject(), calendario_1.Calendario.newObject(), calendario_1.Calendario.newObject()]; this.localeCalendario = calendario_1.Calendario.locale(idioma_1.Idioma.get()); }; SeleccionarCitaComponent.prototype.refreshDatosVisible = function () { this.loadPrimerDiaHora(); }; SeleccionarCitaComponent.prototype.validarPaso = function () { var _this = this; if (this.peticion.dia && this.peticion.hora) { return true; } else { this.translate.get("error.diaHora").subscribe(function (result) { var err = new error_1.Error(null, idioma_1.Idioma.esCatalanSeleccionado() ? result : null, idioma_1.Idioma.esEspanyolSeleccionado() ? result : null, null, true); _this.message.sendError(err); }); } }; SeleccionarCitaComponent.prototype.goToPasoSiguiente = function () { this.displayResumenCitaConfirmarForm = true; }; SeleccionarCitaComponent.prototype.saveResumenCitaConfirmarForm = function () { this.displayResumenCitaConfirmarForm = false; this.pasoSiguiente.emit(); }; SeleccionarCitaComponent.prototype.closeResumenCitaConfirmarForm = function () { this.displayResumenCitaConfirmarForm = false; }; /// Comportamiento propio de este paso /// /** Carga el primer día y hora con una cita disponible. Si no hay ningún resultado, muestra un error. */ SeleccionarCitaComponent.prototype.loadPrimerDiaHora = function () { var _this = this; if (this.peticion.referencia && this.peticion.servicioId) { this.campanyaService .findPrimerDiaHoraDisponible(this.peticion.referencia, this.peticion.servicioId, this.peticion.entidadId, this.peticion.sitioId, this.peticion.recursoId) .subscribe(function (result) { if (result) { _this.primerDiaHora = result; _this.peticion.dia = _this.primerDiaHora.dia; _this.peticion.hora = _this.primerDiaHora.hora; _this.listDia = null; _this.listHora = null; _this.errorCita = null; } else { _this.translate.get("error.noHayCitasDisponibles").subscribe(function (result) { return (_this.errorCita = result); }); } }); } }; /** Carga la lista de días disponibles y selecciona el primero. */ SeleccionarCitaComponent.prototype.loadDiasDisponibles = function () { var _this = this; this.campanyaService .findDiasDisponibles(this.peticion.referencia, this.peticion.servicioId, this.peticion.entidadId, this.peticion.sitioId) .subscribe(function (result) { var _a; _this.listDia = result; // Generamos las listas de días para los (hasta) tres calendarios var m = moment().startOf("month"); for (var i = 0; i < 3; i++) { var cal = _this.listCalendario[i]; cal.mes = m.month(); cal.defaultDate = new Date(m.year(), m.month(), m.date()); cal.selectedDate = null; _a = _this.calculateDiasSiNoDisponibles(_this.listDia, m.month()), cal.listDiaSi = _a[0], cal.listDiaNo = _a[1]; m.add(1, "months"); } // Seleccionamos el primer día y cargamos sus horas disponibles if (_this.listDia.length > 0) { var primerDia = _this.listDia[0].dia; var pm = moment(primerDia, "DD/MM/YYYY"); for (var _i = 0, _b = _this.listCalendario; _i < _b.length; _i++) { var cal = _b[_i]; if (cal.mes === pm.month()) { cal.selectedDate = new Date(pm.year(), pm.month(), pm.date()); _this.selectDia(cal.selectedDate); } } } }); }; /** Selección de día por parte del usuario. */ SeleccionarCitaComponent.prototype.selectDia = function (dia) { var m = moment(dia); this.peticion.dia = m.format("DD/MM/YYYY"); for (var _i = 0, _a = this.listCalendario; _i < _a.length; _i++) { var cal = _a[_i]; // deseleccionamos los otros calendarios if (cal.mes !== m.month()) { cal.selectedDate = null; } } this.loadHorasDisponibles(); }; /** Carga la lista de horas disponibles y selecciona la primera. */ SeleccionarCitaComponent.prototype.loadHorasDisponibles = function () { var _this = this; this.campanyaService .findHorasDisponibles(this.peticion.dia, this.peticion.referencia, this.peticion.servicioId, this.peticion.entidadId, this.peticion.sitioId, this.peticion.recursoId) .subscribe(function (result) { _this.listHora = result; if (_this.listHora && _this.listHora.length > 0) { _this.peticion.hora = _this.listHora[0].hora; } }); }; /** Selección de hora por parte del usuario. */ SeleccionarCitaComponent.prototype.selectHora = function (hora) { this.peticion.hora = hora; }; /// Funciones especiales /// /** Calcula las clases CSS que debe tener un calendario. */ SeleccionarCitaComponent.prototype.calendarioClass = function () { var base = "col-sm-4 text-center margin-top-bottom-5"; var margen = " col-sm-offset-1"; // Si hay tres calendarios visibles, dejamos la base igual; en caso contrario, añadimos un offset (margen) lateral var tresVisibles = this.listCalendario[0].listDiaSi.length > 0 && this.listCalendario[1].listDiaSi.length > 0 && this.listCalendario[2].listDiaSi.length > 0; if (tresVisibles) { return base; } else { return base + margen; } }; /** * Genera una lista de días disponibles y otra lista de días no disponibles, ambas para un mes concreto. * La lista de origen puede tener agendas disponibles en uno o más meses. **/ SeleccionarCitaComponent.prototype.calculateDiasSiNoDisponibles = function (listOrigen, month) { // Si no hay días, devolvemos listas vacías if (!listOrigen || listOrigen.length === 0) { return [[], []]; } // Si hay días, procesamos la lista var listDiaSi = []; // Cogemos los días habilitados del mes indicado for (var _i = 0, listOrigen_1 = listOrigen; _i < listOrigen_1.length; _i++) { var aho = listOrigen_1[_i]; var m = moment(aho.dia, "DD/MM/YYYY"); if (m.month() == month) { listDiaSi.push(moment(aho.dia, "DD/MM/YYYY")); } } // Desde el día 1 del mes, creamos las fechas que están en los huecos entre los días habilitados var listDiaNo = []; var dia = moment().date(1).month(month).startOf("month"); //.set({"hour": 0, "minute": 0, "second": 0, "millisecond": 0}); for (var i = 0; i < listDiaSi.length; i++) { while (dia.isBefore(listDiaSi[i])) { listDiaNo.push(dia.clone()); dia.add(1, "d"); } dia.add(1, "d"); } // Desde el último día habilitado, rellenamos hasta el final de mes var ultimoDia = moment().date(1).month(month).endOf("month").set({ hour: 0, minute: 0, second: 0, millisecond: 0 }); while (dia.isSameOrBefore(ultimoDia)) { listDiaNo.push(dia.clone()); dia.add(1, "d"); } // Transformamos la lista final a un array de Date, como lo requiere el calendario var listDestino = []; for (var _a = 0, listDiaNo_1 = listDiaNo; _a < listDiaNo_1.length; _a++) { var m = listDiaNo_1[_a]; listDestino.push(new Date(m.year(), m.month(), m.date())); } return [listDiaSi, listDestino]; }; Object.defineProperty(SeleccionarCitaComponent.prototype, "textoCitaSeleccion", { get: function () { return this.campanyaService.getTexto(seccion_texto_1.SeccionTexto.CITA_SELECCION); }, enumerable: true, configurable: true }); SeleccionarCitaComponent = __decorate([ core_1.Component({ selector: "bci-seleccionar-cita", template: "\n <div class=\"paso\" [style.display]=\"visible?'block':'none'\">\n\n <resumen-cita-confirmar-form *ngIf=\"displayResumenCitaConfirmarForm\" [display]=\"displayResumenCitaConfirmarForm\"\n [resumen]=\"resumen\" [peticion]=\"peticion\"\n (onSave)=\"saveResumenCitaConfirmarForm($event)\"(onClose)=\"closeResumenCitaConfirmarForm()\">\n </resumen-cita-confirmar-form>\n\n <ng-container *ngIf=\"textoCitaSeleccion\">\n <div class=\"contenedor-texto-dinamico ql-editor\">\n <div class=\"row\">\n <div [innerHTML]=\"textoCitaSeleccion | sanitizeInnerHtml\" class=\"col-sm-12\"></div>\n </div>\n </div>\n </ng-container>\n\n <h4><span class=\"fa fa-calendar-check-o\"></span>&nbsp;&nbsp;<span translate=\"titulo.seleccionarCita\">Selecció de cita disponible</span></h4>\n <div class=\"row\" id=\"divPrimerDiaHora\" [style.display]=\"!this.listDia?'block':'none'\">\n <div *ngIf=\"primerDiaHora\">\n <div class=\"col-xs-6 col-sm-3 text-right negrita\" translate=\"info.hayCitaDisponible\">Hi ha una cita disponible:</div>\n <div class=\"col-xs-6 col-sm-9\">{{primerDiaHora.diaTexto | capitalize}} <b translate=\"info.aLas\">a les</b> {{primerDiaHora.hora}}</div>\n </div>\n <div *ngIf=\"errorCita\" [innerHTML]=\"errorCita | sanitizeInnerHtml\" class=\"col-sm-12 contenedor-texto-dinamico\"></div>\n </div>\n <div *ngIf=\"!errorCita && resumen?.servicio?.seleccionCita\">\n <div class=\"row margin-top-30\" id=\"divSeleccionarOtraFecha\" [style.display]=\"!this.listDia?'block':'none'\">\n <div class=\"col-sm-12 text-center\">\n <button class=\"btn btn-default\" (click)=\"loadDiasDisponibles();\" translate=\"btn.seleccionarOtraFecha\">Selecciona altra data</button>\n </div>\n </div>\n <div id=\"divOtraFecha\" [style.display]=\"this.listDia?'block':'none'\">\n <div class=\"row\">\n <div class=\"col-sm-12 negrita margin-bottom-10\" translate=\"seleccionar.fecha\">Seleccioni una data</div>\n </div>\n <div *ngIf=\"listCalendario\" class=\"row\">\n <ng-template ngFor let-cal [ngForOf]=\"listCalendario\">\n <div *ngIf=\"cal.hayDiasDisponibles()\" [ngClass]=\"calendarioClass()\">\n <p-calendar [defaultDate]=\"cal.defaultDate\" [(ngModel)]=\"cal.selectedDate\" (onSelect)=\"selectDia(cal.selectedDate);\"\n [disabledDates]=\"cal.listDiaNo\" [inline]=\"true\" [locale]=\"localeCalendario\" [showOtherMonths]=\"false\"></p-calendar>\n </div>\n </ng-template>\n </div>\n <div class=\"row margin-top-20\">\n <div class=\"col-sm-12 negrita\" translate=\"seleccionar.hora\">Seleccioni una hora</div>\n </div>\n <div class=\"row\">\n <div class=\"col-xs-offset-1 col-sm-10 col-md-9\">\n <ul class=\"lista-horas-disponibles\">\n <li *ngFor=\"let agendaHora of listHora\" [ngClass]=\"(agendaHora.hora===peticion.hora)?'hora-seleccionada':'hora-disponible'\"\n (click)=\"selectHora(agendaHora.hora)\">{{agendaHora.hora}}</li>\n </ul>\n </div>\n </div>\n <div class=\"row margin-top-30\" id=\"btnPrimeraFecha\">\n <div class=\"col-sm-12 text-center\">\n <button class=\"btn btn-default\" (click)=\"loadPrimerDiaHora();\" translate=\"btn.verPrimeraCitaDisponible\">Veu primera cita disponible</button>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!errorCita\">\n <div *ngIf=\"esCatalanSeleccionado; else esEspanyolSeleccionado\">\n <div class=\"alert alert-warning margin-top-20\">\n <p>La seva cita encara no està reservada. Si desitja acceptar-la, pitgi damunt <b>Confirma</b>.</p>\n </div>\n </div>\n <ng-template #esEspanyolSeleccionado>\n <div class=\"alert alert-warning margin-top-20\">\n <p>Su cita aún no está reservada. Si desea aceptar esta cita, pulse en <b>Confirmar</b>.</p>\n </div>\n </ng-template>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <div class=\"btn-navegar\">\n <button class=\"btn btn-success pull-left\" (click)=\"goToPasoAnterior ();\"><span class=\"fa fa-chevron-left\"></span>&nbsp;&nbsp;<span translate=\"btn.atras\">Enrere</span></button>\n <button *ngIf=\"!errorCita\" class=\"btn btn-primary pull-right\" (click)=\"goToPasoSiguiente();\"><span translate=\"btn.confirmar\">Confirma</span>&nbsp;&nbsp;<span class=\"fa fa-chevron-right\"></span></button>\n </div>\n </div>\n </div>\n </div>\n " }), __metadata("design:paramtypes", [campanya_service_1.CampanyaService, cita_service_1.CitaService, core_2.TranslateService, message_service_1.MessageService]) ], SeleccionarCitaComponent); return SeleccionarCitaComponent; }(reservar_cita_paso_1.ReservarCitaPaso)); exports.SeleccionarCitaComponent = SeleccionarCitaComponent; //# sourceMappingURL=3-seleccionar-cita.component.js.map