bitcitawebfront-library
Version:
Angular CLI project used by other Angular projects in the bitcita web project.<br />
239 lines • 17.3 kB
JavaScript
"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> <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> <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> <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