FrontEndDev #4
|
@ -1,33 +0,0 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Observable, throwError } from 'rxjs';
|
||||
import { catchError, retry } from 'rxjs/operators';
|
||||
import { User } from './user';
|
||||
import { Discoteca } from './discoteca';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class ApiService {
|
||||
|
||||
constructor(private http: HttpClient) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
validateUser(loginUser: string, loginPassword: string): boolean{
|
||||
return (loginUser=='');
|
||||
}
|
||||
|
||||
getUser (loginUser: string): void{
|
||||
|
||||
}
|
||||
|
||||
postNewUser(user: User): void{
|
||||
|
||||
}
|
||||
|
||||
postNewDiscoteca(discoteca: Discoteca): void{
|
||||
|
||||
}
|
||||
}
|
|
@ -23,7 +23,7 @@ const routes: Routes = [
|
|||
},
|
||||
{
|
||||
path:'',
|
||||
redirectTo: 'tabs',
|
||||
redirectTo: 'login',
|
||||
pathMatch: 'full'
|
||||
},
|
||||
|
||||
|
|
|
@ -10,6 +10,13 @@ export class Discoteca {
|
|||
private eventos: Evento[];
|
||||
private descripcion: string;
|
||||
|
||||
setId(id: number): void{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
getId(): number{
|
||||
return this.id;
|
||||
}
|
||||
|
||||
setNombre(nombre: string): void{
|
||||
this.nombre = nombre;
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
import { Evento } from './evento';
|
||||
|
||||
describe('Evento', () => {
|
||||
it('should create an instance', () => {
|
||||
expect(new Evento()).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,75 +0,0 @@
|
|||
export class Evento {
|
||||
private id: number;
|
||||
nombre: string;
|
||||
localizacion: string;
|
||||
fecha: Date;
|
||||
dia: string;
|
||||
hora: string;
|
||||
descripcion: string;
|
||||
precio1: number;
|
||||
precio2: number;
|
||||
|
||||
setNombre(nombre: string): void{
|
||||
this.nombre = nombre;
|
||||
}
|
||||
|
||||
getNombre(): string{
|
||||
return this.nombre;
|
||||
}
|
||||
|
||||
setLocalizacion(localizacion: string): void{
|
||||
this.localizacion = localizacion;
|
||||
}
|
||||
|
||||
getLocalizacion(): string{
|
||||
return this.localizacion
|
||||
}
|
||||
|
||||
setFecha(fecha: Date): void{
|
||||
this.fecha = fecha;
|
||||
}
|
||||
|
||||
getFecha(): Date{
|
||||
return this.fecha;
|
||||
}
|
||||
|
||||
setDesc(desc: string): void{
|
||||
this.descripcion = desc;
|
||||
}
|
||||
|
||||
getDesc(): string{
|
||||
return this.descripcion;
|
||||
}
|
||||
|
||||
setDia(fecha: Date): void{
|
||||
this.dia = fecha.getDate()+"/"+fecha.getMonth();
|
||||
}
|
||||
|
||||
getDia(): string{
|
||||
return this.dia;
|
||||
}
|
||||
|
||||
setHora(fecha: Date): void{
|
||||
this.hora = fecha.getHours()+":"+fecha.getMinutes();
|
||||
}
|
||||
|
||||
getHora(): string{
|
||||
return this.hora;
|
||||
}
|
||||
|
||||
setPrecio1(precio: number): void{
|
||||
this.precio1 = precio;
|
||||
}
|
||||
|
||||
getPrecio1(): number{
|
||||
return this.precio1;
|
||||
}
|
||||
|
||||
setPrecio2(precio: number): void{
|
||||
this.precio2 = precio;
|
||||
}
|
||||
|
||||
getPrecio2(): number{
|
||||
return this.precio2;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
export interface DiscotecaI {
|
||||
discotecaID: number,
|
||||
nombre: string,
|
||||
telefono: number,
|
||||
localizacion: string
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
import { Time } from "@angular/common";
|
||||
|
||||
export interface Eventoi {
|
||||
id: number,
|
||||
discotecaID: number,
|
||||
nombre: string,
|
||||
localizacion: string,
|
||||
fecha: Date,
|
||||
hora: Time,
|
||||
descripcion: string,
|
||||
precio1: number,
|
||||
precio2: number,
|
||||
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
export interface UserLogin {
|
||||
loginUser: string;
|
||||
loginPassword: string;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
export interface User {
|
||||
id: number;
|
||||
discotecaID: number;
|
||||
userType: number;
|
||||
username: string;
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { ApiService } from './api.service';
|
||||
import { User } from './user';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class LoginService {
|
||||
|
||||
private userId: number;
|
||||
private sessionType: number;
|
||||
private loginUser: string;
|
||||
private loginPassword: string;
|
||||
|
||||
constructor(private apiService: ApiService) {
|
||||
|
||||
}
|
||||
|
||||
validateUser(loginUser: string, loginPassword: string): boolean{
|
||||
return (loginUser=='');
|
||||
}
|
||||
|
||||
getUser (loginUser: string): void{
|
||||
|
||||
}
|
||||
|
||||
postNewUser(user: User): void{
|
||||
|
||||
}
|
||||
}
|
|
@ -5,7 +5,14 @@
|
|||
</ion-header>
|
||||
|
||||
<ion-content>
|
||||
<span>Usuario: </span><input type="text" id="username">
|
||||
<span>Contraseña: </span><input type="text" id="password">
|
||||
<ion-button (click)="login()">
|
||||
Login
|
||||
</ion-button>
|
||||
<div>
|
||||
<div *ngIf="user">
|
||||
{{user.username}}
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
input{
|
||||
color: black;
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { LoginService } from '../services/login.service';
|
||||
import { User } from '../interfaces/user';
|
||||
|
||||
@Component({
|
||||
selector: 'app-login',
|
||||
|
@ -8,13 +10,23 @@ import { Router } from '@angular/router';
|
|||
})
|
||||
export class LoginPage implements OnInit {
|
||||
|
||||
constructor(private router: Router) { }
|
||||
username: string;
|
||||
password: string;
|
||||
user: User;
|
||||
|
||||
constructor(private router: Router, private loginService: LoginService) { }
|
||||
|
||||
ngOnInit() {
|
||||
this.user = this.loginService.user;
|
||||
}
|
||||
|
||||
login(){
|
||||
this.router.navigate(['/tabs']);
|
||||
login() {
|
||||
|
||||
this.username = (<HTMLInputElement>document.getElementById("username")).value;
|
||||
this.password = (<HTMLInputElement>document.getElementById("password")).value;
|
||||
this.loginService.validateUser(this.username, this.password)
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { Tab1Service } from '../tab1/tab1.service';
|
|||
import { IonSlides, ModalController} from '@ionic/angular';
|
||||
import { AlertController } from '@ionic/angular';
|
||||
import { ViewChild } from '@angular/core';
|
||||
import { Evento } from '../evento';
|
||||
import { Eventoi } from '../interfaces/eventoi';
|
||||
import { Router } from '@angular/router';
|
||||
import { THIS_EXPR } from '@angular/compiler/src/output/output_ast';
|
||||
import { GaleriamodalPage } from '../galeriamodal/galeriamodal.page';
|
||||
|
@ -28,7 +28,7 @@ export class PerfilDiscotecaPage implements OnInit {
|
|||
editEnabled: string;
|
||||
galeriaFotos: string[];
|
||||
currentIndex: number;
|
||||
eventos: Evento[];
|
||||
eventos: Eventoi[];
|
||||
alertCtrl: AlertController;
|
||||
sliderOpts = {
|
||||
slidesPerView: 1.5,
|
||||
|
@ -70,8 +70,13 @@ export class PerfilDiscotecaPage implements OnInit {
|
|||
this.localizacion = this.tab1Service.getLocalizacion();
|
||||
}
|
||||
|
||||
|
||||
getDescripcion(): void{
|
||||
this.descripcion = this.tab1Service.getDescripcion();
|
||||
}
|
||||
|
||||
getEventos(): void{
|
||||
this.eventos = this.tab1Service.getEventos();
|
||||
this.eventos = this.tab1Service.eventos;
|
||||
}
|
||||
|
||||
getDescripcion(): void{
|
||||
|
@ -179,12 +184,12 @@ export class PerfilDiscotecaPage implements OnInit {
|
|||
this.router.navigate(['/tabs/tab1/prompt-evento']);
|
||||
}
|
||||
|
||||
mostrarEvento(evento: Evento){
|
||||
mostrarEvento(evento: Eventoi){
|
||||
this.tab1Service.eventoIndex = this.eventos.indexOf(evento);
|
||||
this.router.navigate(['/tabs/tab1/view-evento']);
|
||||
}
|
||||
|
||||
editarEvento(evento: Evento){
|
||||
editarEvento(evento: Eventoi){
|
||||
this.tab1Service.eventoIndex = this.eventos.indexOf(evento);
|
||||
this.tab1Service.editarEvento = true;
|
||||
this.router.navigate(['/tabs/tab1/prompt-evento']);
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<ion-item>
|
||||
<label>
|
||||
Fecha:
|
||||
<ion-datetime displayFormat="DD/MM, HH:mm"placeholder="Elegir Fecha" formControlName="fecha"></ion-datetime>
|
||||
<ion-datetime displayFormat="YYYY/DD/MM"placeholder="Elegir Fecha" formControlName="fecha"></ion-datetime>
|
||||
</label>
|
||||
<span
|
||||
*ngIf="fecha?.errors?.required && submitted">
|
||||
|
@ -29,6 +29,17 @@
|
|||
</span>
|
||||
</ion-item>
|
||||
|
||||
<ion-item>
|
||||
<label>
|
||||
Hora
|
||||
<ion-datetime displayFormat="HH:MM"placeholder="Elegir Hora" formControlName="hora"></ion-datetime>
|
||||
</label>
|
||||
<span
|
||||
*ngIf="hora.errors.required && submitted">
|
||||
Tu evento necesita una hora
|
||||
</span>
|
||||
</ion-item>
|
||||
|
||||
|
||||
<ion-item>
|
||||
<label>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
||||
import { Tab1Service } from '../tab1/tab1.service';
|
||||
import { Evento } from '../evento';
|
||||
import { Router } from '@angular/router';
|
||||
import { Eventoi } from '../interfaces/eventoi';
|
||||
import { DatePipe } from '@angular/common'
|
||||
import { ViewEventoPageRoutingModule } from '../view-evento/view-evento-routing.module';
|
||||
|
||||
@Component({
|
||||
selector: 'app-prompt-evento',
|
||||
|
@ -10,18 +12,18 @@ import { Router } from '@angular/router';
|
|||
styleUrls: ['./prompt-evento.page.scss'],
|
||||
})
|
||||
export class PromptEventoPage implements OnInit{
|
||||
|
||||
submitted = false;
|
||||
editarEvento = false;
|
||||
eventoForm = new FormGroup({
|
||||
nombre: new FormControl('', Validators.required),
|
||||
fecha: new FormControl('', Validators.required),
|
||||
precio1: new FormControl('', Validators.required),
|
||||
precio2: new FormControl('', Validators.required),
|
||||
descripcion: new FormControl('', Validators.required),
|
||||
nombre: new FormControl(null, Validators.required),
|
||||
fecha: new FormControl(null, Validators.required),
|
||||
hora: new FormControl(null, Validators.required),
|
||||
precio1: new FormControl(null, Validators.required),
|
||||
precio2: new FormControl(null, Validators.required),
|
||||
descripcion: new FormControl(null, Validators.required),
|
||||
});
|
||||
|
||||
eventos: Evento[];
|
||||
eventos: Eventoi[];
|
||||
|
||||
constructor(private tab1Service: Tab1Service, private router: Router) {
|
||||
|
||||
|
@ -35,30 +37,50 @@ export class PromptEventoPage implements OnInit{
|
|||
onSubmit(){
|
||||
this.submitted = true;
|
||||
if (this.eventoForm.valid){
|
||||
let evento = new Evento();
|
||||
let evento: Eventoi = {
|
||||
id: null,
|
||||
discotecaID: this.tab1Service.discotecaI.discotecaID,
|
||||
nombre: '',
|
||||
localizacion: this.tab1Service.discotecaI.localizacion,
|
||||
fecha: null,
|
||||
hora: null,
|
||||
descripcion: '',
|
||||
precio1: null,
|
||||
precio2: null
|
||||
|
||||
|
||||
};
|
||||
this.asignarEvento(evento);
|
||||
this.router.navigate(['/tabs']);
|
||||
|
||||
}
|
||||
}
|
||||
asignarEvento(evento: Evento){
|
||||
evento.setNombre(this.eventoForm.get('nombre').value);
|
||||
evento.setDesc(this.eventoForm.get('descripcion').value);
|
||||
evento.setFecha(this.eventoForm.get('fecha').value);
|
||||
evento.setPrecio1(this.eventoForm.get('precio1').value);
|
||||
evento.setPrecio2(this.eventoForm.get('precio2').value);
|
||||
asignarEvento(evento: Eventoi){
|
||||
evento.nombre = this.eventoForm.get('nombre').value;
|
||||
evento.descripcion = this.eventoForm.get('descripcion').value;
|
||||
var fecha = this.eventoForm.get('fecha').value;
|
||||
fecha = fecha.split("T")[0];
|
||||
evento.fecha = fecha;
|
||||
let hora = this.eventoForm.get('hora').value;
|
||||
hora = hora.split("T")[1];
|
||||
hora = hora.split(":")[0]+(":")+hora.split(":")[1];
|
||||
evento.hora = hora;
|
||||
evento.precio1 = this.eventoForm.get('precio1').value;
|
||||
evento.precio2 = this.eventoForm.get('precio2').value;
|
||||
//evento.setDia(evento.getFecha()); el datetime de Ion devuelve un String, no se puede
|
||||
//evento.setHora(evento.getFecha()); transformar en dia y hora
|
||||
if (!this.tab1Service.eventos){
|
||||
this.tab1Service.initEventos();}
|
||||
if(!this.tab1Service.eventoForms){
|
||||
this.tab1Service.initEventoForms();}
|
||||
if(this.tab1Service.editarEvento==true){
|
||||
this.tab1Service.eventos[this.tab1Service.eventoIndex] = evento;
|
||||
this.tab1Service.eventoForms[this.tab1Service.eventoIndex] = this.eventoForm;
|
||||
this.tab1Service.updateEvento(evento);
|
||||
//this.tab1Service.eventos[this.tab1Service.eventoIndex] = evento;
|
||||
//this.tab1Service.eventoForms[this.tab1Service.eventoIndex] = this.eventoForm;
|
||||
}
|
||||
else{
|
||||
this.tab1Service.eventos.push(evento);
|
||||
this.tab1Service.eventoForms.push(this.eventoForm);}
|
||||
this.tab1Service.postEvento(evento);
|
||||
//this.tab1Service.eventos.push(evento);
|
||||
//this.tab1Service.eventoForms.push(this.eventoForm);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Observable, throwError, BehaviorSubject } from 'rxjs';
|
||||
import { catchError, retry, map, tap } from 'rxjs/operators';
|
||||
import { User } from '../interfaces/user';
|
||||
import { Discoteca } from '../discoteca';
|
||||
import { UserLogin } from '../interfaces/user-login';
|
||||
import { DiscotecaI } from '../interfaces/discoteca-i';
|
||||
import { Eventoi } from '../interfaces/eventoi';
|
||||
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class ApiService {
|
||||
|
||||
baseUrl = "http://localhost:3307/api/consultas";
|
||||
|
||||
constructor(private http: HttpClient) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
validateUser(user: UserLogin): Observable<User>{
|
||||
|
||||
return this.http.post<User>(this.baseUrl+"/users", user)
|
||||
|
||||
}
|
||||
|
||||
getUserDiscoteca(discotecaId: number): Observable<DiscotecaI>{
|
||||
|
||||
return this.http.post<DiscotecaI>(this.baseUrl+"/discoteca", { "id": discotecaId});
|
||||
|
||||
}
|
||||
|
||||
postEvento(eventoInterface: Eventoi): Observable<Eventoi>{
|
||||
|
||||
return this.http.post<Eventoi>(this.baseUrl+"/evento", eventoInterface);
|
||||
|
||||
}
|
||||
|
||||
getEventos(discotecaID: number): Observable<Eventoi[]>{
|
||||
return this.http.post<Eventoi[]>(this.baseUrl+"/eventosDiscoteca", {"id": discotecaID});
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { VirtualTimeScheduler } from 'rxjs';
|
||||
import { ApiService } from './api.service';
|
||||
import { Tab1Service } from '../tab1/tab1.service';
|
||||
import { User } from '../interfaces/user';
|
||||
import { UserLogin } from '../interfaces/user-login';
|
||||
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class LoginService {
|
||||
|
||||
user: User;
|
||||
|
||||
constructor(private apiService: ApiService, private router: Router, private tab1service: Tab1Service) {
|
||||
this.user = {
|
||||
id: 0,
|
||||
discotecaID: 0,
|
||||
userType: 0,
|
||||
username: '',
|
||||
};
|
||||
}
|
||||
|
||||
validateUser(login: string, password: string): void{
|
||||
|
||||
let userlogin: UserLogin = {
|
||||
loginUser: login,
|
||||
loginPassword: password,
|
||||
}
|
||||
|
||||
this.apiService.validateUser(userlogin)
|
||||
.subscribe(user => {
|
||||
this.user = user[0];
|
||||
console.log(this.user);
|
||||
console.log(this.user.discotecaID);
|
||||
this.tab1service.getDiscoteca(this.user.discotecaID);
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -2,9 +2,13 @@ import { Injectable, OnInit } from '@angular/core';
|
|||
import { stringify } from 'querystring';
|
||||
import { Tab1Page } from './tab1.page'
|
||||
import { Discoteca } from '../discoteca'
|
||||
import { Evento } from '../evento';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { FormControl, FormGroup } from '@angular/forms';
|
||||
import { NumericValueAccessor } from '@ionic/angular';
|
||||
import { DiscotecaI } from '../interfaces/discoteca-i';
|
||||
import { ApiService } from '../services/api.service';
|
||||
import { Router } from '@angular/router';
|
||||
import { Eventoi } from '../interfaces/eventoi';
|
||||
|
||||
|
||||
@Injectable({
|
||||
|
@ -13,56 +17,61 @@ import { NumericValueAccessor } from '@ionic/angular';
|
|||
export class Tab1Service implements OnInit{
|
||||
|
||||
discoteca: Discoteca;
|
||||
discotecaI: DiscotecaI;
|
||||
galeria: string[];
|
||||
eventos: Evento[];
|
||||
eventos: Eventoi[];
|
||||
eventoForms: FormGroup[];
|
||||
eventoIndex: number;
|
||||
editarEvento: boolean;
|
||||
|
||||
constructor() {
|
||||
constructor(private apiService: ApiService, private router: Router) {
|
||||
|
||||
}
|
||||
|
||||
ngOnInit(){
|
||||
this.initValues();
|
||||
|
||||
}
|
||||
|
||||
initValues(): void{
|
||||
this.discoteca = new Discoteca();
|
||||
this.discoteca.setNombre('Barraca');
|
||||
this.discoteca.setTelefono(666666666);
|
||||
this.discoteca.setLocalizacion('Calle del Barquillo');
|
||||
this.discoteca.setDescripcion('Barraca es una discoteca inaugurada en 1965 que tuvo su gran auge en los años 80, cuando se consolidó como la discoteca de mayor importancia de la movida valenciana, durante la conocida Ruta Destroy.');
|
||||
this.galeria = [];
|
||||
this.discoteca.setId(this.discotecaI.discotecaID);
|
||||
this.discoteca.setNombre(this.discotecaI.nombre);
|
||||
this.discoteca.setTelefono(this.discotecaI.telefono);
|
||||
this.discoteca.setLocalizacion(this.discotecaI.localizacion);
|
||||
this.initEventos();
|
||||
this.galeria = [];
|
||||
this.editarEvento = false;
|
||||
}
|
||||
|
||||
getNombre(): string{
|
||||
this.initValues();
|
||||
return this.discoteca.getNombre();
|
||||
}
|
||||
|
||||
getTelefono(): number{
|
||||
this.initValues();
|
||||
return this.discoteca.getTelefono();
|
||||
}
|
||||
|
||||
getLocalizacion(): string{
|
||||
this.initValues();
|
||||
return this.discoteca.getLocalizacion();
|
||||
}
|
||||
|
||||
getEventos(): Eventoi[]{
|
||||
return this.eventos;
|
||||
}
|
||||
|
||||
getDescripcion(): string{
|
||||
return this.discoteca.getDescripcion();
|
||||
}
|
||||
|
||||
getEventos(): Evento[]{
|
||||
return this.eventos;
|
||||
}
|
||||
|
||||
initEventos(): void{
|
||||
this.eventos = [];
|
||||
this.apiService.getEventos(this.discoteca.getId())
|
||||
.subscribe(eventos => {
|
||||
this.eventos = eventos;
|
||||
this.router.navigate(['/tabs/tab1/perfil-discoteca']);
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
initEventoForms(): void{
|
||||
|
@ -73,4 +82,27 @@ export class Tab1Service implements OnInit{
|
|||
return this.eventos[eventoIndex];
|
||||
}
|
||||
|
||||
getDiscoteca(discotecaId: number){
|
||||
if (discotecaId != 0){
|
||||
this.apiService.getUserDiscoteca(discotecaId)
|
||||
.subscribe(discoteca => {
|
||||
this.discotecaI = discoteca[0];
|
||||
console.log(this.discotecaI);
|
||||
this.initValues();
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
postEvento(evento: Eventoi){
|
||||
this.apiService.postEvento(evento)
|
||||
.subscribe(evento => {
|
||||
this.initEventos();
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
updateEvento(evento: Eventoi){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
export interface User {
|
||||
userId: number;
|
||||
userType: number;
|
||||
loginUser: string;
|
||||
loginPassword: string;
|
||||
}
|
Loading…
Reference in New Issue