9 Commits

27 changed files with 333 additions and 363 deletions

33
package-lock.json generated
View File

@@ -358,31 +358,6 @@
} }
} }
}, },
"@angular/animations": {
"version": "11.2.1",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-11.2.1.tgz",
"integrity": "sha512-U2gtMaiVfTNMn0FPpSDTgOgtYc45QUnQcc2Po40rCmgH7BGyJAOgmaXY9uv319Jjl+vNrX+bbXaZix73Zpjfyg==",
"requires": {
"tslib": "^2.0.0"
}
},
"@angular/cdk": {
"version": "11.2.1",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-11.2.1.tgz",
"integrity": "sha512-d+ERvvWqGykBm5ooWG8TmMjL6q6aOpUd13ha1sx960EfKJqNyideYUfPMp6xprTyxmUIUZ/G9AQ/pxnzrLGnsA==",
"requires": {
"parse5": "^5.0.0",
"tslib": "^2.0.0"
},
"dependencies": {
"parse5": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
"integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
"optional": true
}
}
},
"@angular/cli": { "@angular/cli": {
"version": "10.0.8", "version": "10.0.8",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.0.8.tgz", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.0.8.tgz",
@@ -857,14 +832,6 @@
"integrity": "sha512-QQLYUjD0T6u2hLNYXUEUbupAGsz5egmhCAckaQojvXCe3SLL/hQsrK4odrNuspy7TvMB0H5ZNEHGlF6m/WLZ3g==", "integrity": "sha512-QQLYUjD0T6u2hLNYXUEUbupAGsz5egmhCAckaQojvXCe3SLL/hQsrK4odrNuspy7TvMB0H5ZNEHGlF6m/WLZ3g==",
"dev": true "dev": true
}, },
"@angular/material": {
"version": "11.2.1",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-11.2.1.tgz",
"integrity": "sha512-unHC8W+GcZSNRNSZ4l3ABdbezf6PIUtShx5MMG6HXgieqlkEgkU0W0BAeGvO/61vl6yEebizMYD/+5yqM9lUlw==",
"requires": {
"tslib": "^2.0.0"
}
},
"@angular/platform-browser": { "@angular/platform-browser": {
"version": "10.0.14", "version": "10.0.14",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.14.tgz", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.14.tgz",

View File

@@ -13,12 +13,9 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "^11.2.1",
"@angular/cdk": "^11.2.1",
"@angular/common": "~10.0.0", "@angular/common": "~10.0.0",
"@angular/core": "~10.0.0", "@angular/core": "~10.0.0",
"@angular/forms": "~10.0.0", "@angular/forms": "~10.0.0",
"@angular/material": "^11.2.1",
"@angular/platform-browser": "~10.0.0", "@angular/platform-browser": "~10.0.0",
"@angular/platform-browser-dynamic": "~10.0.0", "@angular/platform-browser-dynamic": "~10.0.0",
"@angular/router": "~10.0.0", "@angular/router": "~10.0.0",
@@ -78,4 +75,4 @@
"android" "android"
] ]
} }
} }

View File

@@ -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{
}
}

View File

@@ -23,7 +23,7 @@ const routes: Routes = [
}, },
{ {
path:'', path:'',
redirectTo: 'tabs', redirectTo: 'login',
pathMatch: 'full' pathMatch: 'full'
}, },

View File

@@ -11,17 +11,12 @@ import { AppComponent } from './app.component';
import { PerfilDiscotecaPage } from './perfil-discoteca/perfil-discoteca.page'; import { PerfilDiscotecaPage } from './perfil-discoteca/perfil-discoteca.page';
import { PromptEventoPage} from './prompt-evento/prompt-evento.page' import { PromptEventoPage} from './prompt-evento/prompt-evento.page'
import { GaleriamodalPageModule } from './galeriamodal/galeriamodal.module'; import { GaleriamodalPageModule } from './galeriamodal/galeriamodal.module';
import { MatMenuModule } from '@angular/material/menu';
import { MatCardModule } from '@angular/material/card';
import { LoginPage } from './login/login.page'; import { LoginPage } from './login/login.page';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatIconModule } from '@angular/material/icon';
@NgModule({ @NgModule({
declarations: [AppComponent, PerfilDiscotecaPage, PromptEventoPage, LoginPage], declarations: [AppComponent, PerfilDiscotecaPage, PromptEventoPage, LoginPage],
entryComponents: [], entryComponents: [],
imports: [BrowserModule, HttpClientModule, IonicModule.forRoot(), AppRoutingModule, ReactiveFormsModule, GaleriamodalPageModule, MatMenuModule, BrowserAnimationsModule, MatIconModule, MatCardModule], imports: [BrowserModule, HttpClientModule, IonicModule.forRoot(), AppRoutingModule, ReactiveFormsModule, GaleriamodalPageModule],
providers: [ providers: [
StatusBar, StatusBar,
SplashScreen, SplashScreen,

View File

@@ -10,6 +10,13 @@ export class Discoteca {
private eventos: Evento[]; private eventos: Evento[];
private descripcion: string; private descripcion: string;
setId(id: number): void{
this.id = id;
}
getId(): number{
return this.id;
}
setNombre(nombre: string): void{ setNombre(nombre: string): void{
this.nombre = nombre; this.nombre = nombre;

View File

@@ -1,7 +0,0 @@
import { Evento } from './evento';
describe('Evento', () => {
it('should create an instance', () => {
expect(new Evento()).toBeTruthy();
});
});

View File

@@ -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;
}
}

View File

@@ -0,0 +1,6 @@
export interface DiscotecaI {
discotecaID: number,
nombre: string,
telefono: number,
localizacion: string
}

View File

@@ -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,
}

View File

@@ -0,0 +1,4 @@
export interface UserLogin {
loginUser: string;
loginPassword: string;
}

View File

@@ -0,0 +1,6 @@
export interface User {
id: number;
discotecaID: number;
userType: number;
username: string;
}

View File

@@ -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{
}
}

View File

@@ -5,7 +5,14 @@
</ion-header> </ion-header>
<ion-content> <ion-content>
<span>Usuario: </span><input type="text" id="username">
<span>Contraseña: </span><input type="text" id="password">
<ion-button (click)="login()"> <ion-button (click)="login()">
Login Login
</ion-button> </ion-button>
<div>
<div *ngIf="user">
{{user.username}}
</div>
</div>
</ion-content> </ion-content>

View File

@@ -0,0 +1,3 @@
input{
color: black;
}

View File

@@ -1,5 +1,7 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { LoginService } from '../services/login.service';
import { User } from '../interfaces/user';
@Component({ @Component({
selector: 'app-login', selector: 'app-login',
@@ -8,13 +10,23 @@ import { Router } from '@angular/router';
}) })
export class LoginPage implements OnInit { export class LoginPage implements OnInit {
constructor(private router: Router) { } username: string;
password: string;
user: User;
constructor(private router: Router, private loginService: LoginService) { }
ngOnInit() { ngOnInit() {
this.user = this.loginService.user;
} }
login(){ login() {
this.router.navigate(['/tabs']);
this.username = (<HTMLInputElement>document.getElementById("username")).value;
this.password = (<HTMLInputElement>document.getElementById("password")).value;
this.loginService.validateUser(this.username, this.password)
} }
} }

View File

@@ -8,55 +8,41 @@
<ion-content [fullscreen]="true"> <ion-content [fullscreen]="true">
<div class='main'>
<div class='fotoPerfil'>
<ion-grid> <ion-grid>
<ion-row> <ion-row>
<div class='fotoPerfil'> <ion-col>
<ion-img class="fotoPerfil" width="100%" height="100%" [src]='fotoSrc' alt='barraquinha'></ion-img> <ion-img class="fotoPerfil" width="100%" height="100%" [src]='fotoSrc' alt='barraquinha'></ion-img>
<div class="textoPie">{{nombre}}</div> <div class="textoPie">{{nombre}}</div>
</div>
</ion-row>
<ion-row> <div class="addFoto">
<div class="menuBotones"> <ion-button [disabled]='editDisabled'>
<ion-icon name="image" slot="icon-only"></ion-icon>
<input type="file" (change)="loadImageFromDevice($event);cargarImagen()" id="file-input-perfil" accept="image/png, image/jpeg">
</ion-button>
</div>
<button mat-icon-button [matMenuTriggerFor]="menu"> <div>
<ion-icon name="settings" class="settingsIcon"></ion-icon> <ion-button (click)="enableEdit()" label="editar" [disabled]='editEnabled'>
</button> <ion-icon name="create"></ion-icon>
</ion-button>
<mat-menu #menu="matMenu" xPositon="after" yPosition="above"> <div id="botonesHidden1" class="botonesHidden">
<button mat-menu-item> <ion-button (click)="saveEdit()" label="guardar" [disabled]='editDisabled'>
<ion-icon name="image" slot="icon-only"></ion-icon> <ion-icon name="save"></ion-icon>
<input type="file" (change)="loadImageFromDevice($event);cargarImagen()" id="file-input-perfil" accept="image/png, image/jpeg"> </ion-button>
</button> <ion-button (click)="cancelEdit()" [disabled]='editDisabled'>
<button mat-menu-item (click)="enableEdit()" label="editar" [disabled]='editEnabled'>
<ion-icon name="create"></ion-icon>
</button>
<button mat-menu-item (click)="addEvento()">
<ion-icon name="add-circle-outline">
</ion-icon>
Añadir evento
</button>
</mat-menu>
</div>
</ion-row>
<ion-row>
<div id="botonesHidden1" class="botonesHidden">
<button (click)="saveEdit()" label="guardar" [disabled]='editDisabled' id="saveButton">
<ion-icon name="save"></ion-icon>
</button>
<button (click)="cancelEdit()" [disabled]='editDisabled' id="cancelButton">
Cancelar Cancelar
</button> </ion-button></div>
</div> </div>
</ion-row>
</ion-col>
</ion-row>
<ion-row> <ion-row>
<ion-col> <ion-col>
<div id="cajaDatos" class='datosDisplay'> <div id="cajaDatos" class='datosDisplay'>
@@ -66,24 +52,10 @@
<div [contentEditable]='editEnabled'>{{localizacion}}</div> <div [contentEditable]='editEnabled'>{{localizacion}}</div>
</div> </div>
</ion-col> </ion-col>
<ion-col>
<div>
<mat-card>
<mat-card-header>
Descripción
</mat-card-header>
<mat-card-content>
{{descripcion}}
</mat-card-content>
</mat-card>
</div>
</ion-col>
</ion-row>
<ion-row> <ion-col>
<div class="galeria"> <div class="galeria">
Galería de Fotos Galería de Fotos
<input type="file" (change)="loadImageFromDevice($event)" id="file-input-galeria" accept="image/png, image/jpeg"> <input type="file" (change)="loadImageFromDevice($event)" id="file-input-galeria" accept="image/png, image/jpeg">
<ion-slides (ionDrag)="onSlideChanged()" [options]="sliderOpts"> <ion-slides (ionDrag)="onSlideChanged()" [options]="sliderOpts">
<ion-slide *ngFor="let foto of galeriaFotos"> <ion-slide *ngFor="let foto of galeriaFotos">
@@ -97,10 +69,19 @@
</ion-slide> </ion-slide>
</ion-slides> </ion-slides>
</div> </div>
</ion-col>
</ion-row> </ion-row>
<ion-row>
<ion-button (click)="addEvento()">
<ion-icon name="add-circle-outline">
</ion-icon>
Añadir evento
</ion-button>
</ion-row>
<ion-row> <ion-row>
<ion-col size="12">
<div *ngIf="eventos.length>0" class="eventos"> <div *ngIf="eventos.length>0" class="eventos">
<ion-list> <ion-list>
<ion-item *ngFor="let evento of eventos" button (click)="mostrarEvento(evento)"> <ion-item *ngFor="let evento of eventos" button (click)="mostrarEvento(evento)">
@@ -120,13 +101,14 @@
</ion-item> </ion-item>
</ion-list> </ion-list>
</div> </div>
</ion-col>
</ion-row>
<ion-row>
</ion-row> </ion-row>
</ion-grid> </ion-grid>
</div> </div>
</ion-content> </ion-content>

View File

@@ -6,20 +6,16 @@
} }
*{ *{
padding: 10px; padding: 5px;
display: block; display: block;
margin: auto;
} }
.main{
max-width: 800px;
max-height: auto;
margin: auto;
text-align: justify;
}
.fotoPerfil{ .fotoPerfil{
text-align: end; text-align: end;
max-width: 800px;
max-height: auto;
margin: auto;
} }
.textoPie{ .textoPie{
@@ -39,8 +35,6 @@
float: left; float: left;
position: relative; position: relative;
margin: auto; margin: auto;
text-align: right;
padding-right: 50px;
} }
@@ -49,14 +43,15 @@
} }
.galeria{ .galeria{
text-align: center;
padding: 30px; display: block;
max-width: 300px;
max-height: auto;
margin: auto; margin: auto;
} }
.botonesHidden{ .botonesHidden{
display: none; display: none;
padding: none;
} }
.botonesVisible{ .botonesVisible{
@@ -64,21 +59,14 @@
} }
.eventos{ .eventos{
text-align: justify; display:block;
}
.evento{
max-width:fit-content;
} }
.evento:hover{ .evento:hover{
background-color: rgb(97, 97, 97); background-color: rgb(97, 97, 97);
} }
.eventoHeader{ .eventoHeader{
font-weight: bold; font-weight: bold;
float: left;
} }
.eventoDesc{ .eventoDesc{
@@ -88,26 +76,3 @@
ion-slides { ion-slides {
height: 200px; height: 200px;
} }
mat-card-header{
text-align: right;
font-weight: bold;
}
button{
background-color: transparent;
}
.settingsIcon{
font-size: large;
background-color: white;
}
.menuBotones{
position: relative;
float: left;
bottom: 60px;
left: 20px;
}

View File

@@ -3,7 +3,7 @@ import { Tab1Service } from '../tab1/tab1.service';
import { IonSlides, ModalController} from '@ionic/angular'; import { IonSlides, ModalController} from '@ionic/angular';
import { AlertController } from '@ionic/angular'; import { AlertController } from '@ionic/angular';
import { ViewChild } from '@angular/core'; import { ViewChild } from '@angular/core';
import { Evento } from '../evento'; import { Eventoi } from '../interfaces/eventoi';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { THIS_EXPR } from '@angular/compiler/src/output/output_ast'; import { THIS_EXPR } from '@angular/compiler/src/output/output_ast';
import { GaleriamodalPage } from '../galeriamodal/galeriamodal.page'; import { GaleriamodalPage } from '../galeriamodal/galeriamodal.page';
@@ -28,11 +28,12 @@ export class PerfilDiscotecaPage implements OnInit {
editEnabled: string; editEnabled: string;
galeriaFotos: string[]; galeriaFotos: string[];
currentIndex: number; currentIndex: number;
eventos: Evento[]; eventos: Eventoi[];
alertCtrl: AlertController; alertCtrl: AlertController;
sliderOpts = { sliderOpts = {
slidesPerView: 1.5, slidesPerView: 1.5,
centeredSlides: true, centeredSlides: true,
spaceBetween: 20,
}; };
constructor(private tab1Service: Tab1Service, private router: Router, private modalController: ModalController) { constructor(private tab1Service: Tab1Service, private router: Router, private modalController: ModalController) {
@@ -48,7 +49,6 @@ export class PerfilDiscotecaPage implements OnInit {
this.getTelefono(); this.getTelefono();
this.getLocalizacion(); this.getLocalizacion();
this.getEventos(); this.getEventos();
this.getDescripcion();
this.editDisabled="true"; this.editDisabled="true";
this.editEnabled="false"; this.editEnabled="false";
this.fotoSrc = '../assets/img/barraca.jpg'; this.fotoSrc = '../assets/img/barraca.jpg';
@@ -70,14 +70,15 @@ export class PerfilDiscotecaPage implements OnInit {
this.localizacion = this.tab1Service.getLocalizacion(); this.localizacion = this.tab1Service.getLocalizacion();
} }
getEventos(): void{
this.eventos = this.tab1Service.getEventos();
}
getDescripcion(): void{ getDescripcion(): void{
this.descripcion = this.tab1Service.getDescripcion(); this.descripcion = this.tab1Service.getDescripcion();
} }
getEventos(): void{
this.eventos = this.tab1Service.eventos;
}
cargarImagen(){ cargarImagen(){
this.fotoSrc = this.someURL; this.fotoSrc = this.someURL;
} }
@@ -122,14 +123,10 @@ export class PerfilDiscotecaPage implements OnInit {
let cajaDatos = document.getElementById("cajaDatos"); let cajaDatos = document.getElementById("cajaDatos");
cajaDatos.style.background="white"; cajaDatos.style.background="white";
cajaDatos.style.color="black"; cajaDatos.style.color="black";
cajaDatos.contentEditable = "true";
let botones = document.getElementById("botonesHidden1"); let botones = document.getElementById("botonesHidden1");
botones.style.display = "block"; botones.style.display = "block";
let saveButton = document.getElementById("saveButton") as HTMLButtonElement; botones = document.getElementById("botonesHidden2");
saveButton.disabled=false; botones.style.display = "block";
let cancelButton = document.getElementById("cancelButton") as HTMLButtonElement;
cancelButton.disabled=false;
@@ -141,7 +138,6 @@ export class PerfilDiscotecaPage implements OnInit {
let cajaDatos = document.getElementById("cajaDatos"); let cajaDatos = document.getElementById("cajaDatos");
cajaDatos.style.background="inherit"; cajaDatos.style.background="inherit";
cajaDatos.style.color="inherit"; cajaDatos.style.color="inherit";
cajaDatos.contentEditable="false";
let botones = document.getElementById("botonesHidden1"); let botones = document.getElementById("botonesHidden1");
botones.style.display = "none"; botones.style.display = "none";
botones = document.getElementById("botonesHidden2"); botones = document.getElementById("botonesHidden2");
@@ -179,12 +175,12 @@ export class PerfilDiscotecaPage implements OnInit {
this.router.navigate(['/tabs/tab1/prompt-evento']); this.router.navigate(['/tabs/tab1/prompt-evento']);
} }
mostrarEvento(evento: Evento){ mostrarEvento(evento: Eventoi){
this.tab1Service.eventoIndex = this.eventos.indexOf(evento); this.tab1Service.eventoIndex = this.eventos.indexOf(evento);
this.router.navigate(['/tabs/tab1/view-evento']); this.router.navigate(['/tabs/tab1/view-evento']);
} }
editarEvento(evento: Evento){ editarEvento(evento: Eventoi){
this.tab1Service.eventoIndex = this.eventos.indexOf(evento); this.tab1Service.eventoIndex = this.eventos.indexOf(evento);
this.tab1Service.editarEvento = true; this.tab1Service.editarEvento = true;
this.router.navigate(['/tabs/tab1/prompt-evento']); this.router.navigate(['/tabs/tab1/prompt-evento']);

View File

@@ -13,7 +13,7 @@
<input type="text" id="nombre" formControlName = "nombre"> <input type="text" id="nombre" formControlName = "nombre">
</label> </label>
<span <span
*ngIf="nombre?.errors?.required && (nombre.touched||submitted)"> *ngIf="nombre.errors.required && (nombre.touched||submitted)">
Tu evento necesita un nombre Tu evento necesita un nombre
</span> </span>
</ion-item> </ion-item>
@@ -21,14 +21,25 @@
<ion-item> <ion-item>
<label> <label>
Fecha: 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> </label>
<span <span
*ngIf="fecha?.errors?.required && submitted"> *ngIf="fecha.errors.required && submitted">
Tu evento necesita una fecha Tu evento necesita una fecha
</span> </span>
</ion-item> </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> <ion-item>
<label> <label>
@@ -36,7 +47,7 @@
<input type="number" formControlName = "precio1"><label>, </label><input type="number" formControlName = "precio2"> <input type="number" formControlName = "precio1"><label>, </label><input type="number" formControlName = "precio2">
</label> </label>
<span <span
*ngIf="precio1?.errors?.required && (precio1.touched||submitted)"> *ngIf="precio1.errors.required && (precio1.touched||submitted)">
Tu evento necesita un precio (puede ser 0) Tu evento necesita un precio (puede ser 0)
</span> </span>
</ion-item> </ion-item>
@@ -47,7 +58,7 @@
<textarea formControlName = "descripcion" rows="10"></textarea> <textarea formControlName = "descripcion" rows="10"></textarea>
</label> </label>
<span <span
*ngIf="descripcion?.errors?.required && (descripcion.touched||submitted)"> *ngIf="descripcion.errors.required && (descripcion.touched||submitted)">
¡Dale una descripción a tu evento! ¡Dale una descripción a tu evento!
</span> </span>
</ion-item> </ion-item>

View File

@@ -1,8 +1,10 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms'; import { FormControl, FormGroup, Validators } from '@angular/forms';
import { Tab1Service } from '../tab1/tab1.service'; import { Tab1Service } from '../tab1/tab1.service';
import { Evento } from '../evento';
import { Router } from '@angular/router'; 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({ @Component({
selector: 'app-prompt-evento', selector: 'app-prompt-evento',
@@ -10,18 +12,17 @@ import { Router } from '@angular/router';
styleUrls: ['./prompt-evento.page.scss'], styleUrls: ['./prompt-evento.page.scss'],
}) })
export class PromptEventoPage implements OnInit{ export class PromptEventoPage implements OnInit{
submitted = false; submitted = false;
editarEvento = false;
eventoForm = new FormGroup({ eventoForm = new FormGroup({
nombre: new FormControl('', Validators.required), nombre: new FormControl(null, Validators.required),
fecha: new FormControl('', Validators.required), fecha: new FormControl(null, Validators.required),
precio1: new FormControl('', Validators.required), hora: new FormControl(null, Validators.required),
precio2: new FormControl('', Validators.required), precio1: new FormControl(null, Validators.required),
descripcion: new FormControl('', 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) { constructor(private tab1Service: Tab1Service, private router: Router) {
@@ -35,30 +36,50 @@ export class PromptEventoPage implements OnInit{
onSubmit(){ onSubmit(){
this.submitted = true; this.submitted = true;
if (this.eventoForm.valid){ 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.asignarEvento(evento);
this.router.navigate(['/tabs']);
} }
} }
asignarEvento(evento: Evento){ asignarEvento(evento: Eventoi){
evento.setNombre(this.eventoForm.get('nombre').value); evento.nombre = this.eventoForm.get('nombre').value;
evento.setDesc(this.eventoForm.get('descripcion').value); evento.descripcion = this.eventoForm.get('descripcion').value;
evento.setFecha(this.eventoForm.get('fecha').value); var fecha = this.eventoForm.get('fecha').value;
evento.setPrecio1(this.eventoForm.get('precio1').value); fecha = fecha.split("T")[0];
evento.setPrecio2(this.eventoForm.get('precio2').value); 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.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){ if (!this.tab1Service.eventos){
this.tab1Service.initEventos();} this.tab1Service.initEventos();}
if(!this.tab1Service.eventoForms){ if(!this.tab1Service.eventoForms){
this.tab1Service.initEventoForms();} this.tab1Service.initEventoForms();}
if(this.tab1Service.editarEvento==true){ if(this.tab1Service.editarEvento==true){
this.tab1Service.eventos[this.tab1Service.eventoIndex] = evento; this.tab1Service.updateEvento(evento);
this.tab1Service.eventoForms[this.tab1Service.eventoIndex] = this.eventoForm; //this.tab1Service.eventos[this.tab1Service.eventoIndex] = evento;
//this.tab1Service.eventoForms[this.tab1Service.eventoIndex] = this.eventoForm;
} }
else{ else{
this.tab1Service.eventos.push(evento); this.tab1Service.postEvento(evento);
this.tab1Service.eventoForms.push(this.eventoForm);} //this.tab1Service.eventos.push(evento);
//this.tab1Service.eventoForms.push(this.eventoForm);
}
} }
@@ -85,6 +106,6 @@ export class PromptEventoPage implements OnInit{
get descripcion(){ get descripcion(){
return this.eventoForm.get('descripcion'); return this.eventoForm.get('descripcion');
} }
} }

View File

@@ -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});
}
}

View File

@@ -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);
})
}
}

View File

@@ -2,9 +2,13 @@ import { Injectable, OnInit } from '@angular/core';
import { stringify } from 'querystring'; import { stringify } from 'querystring';
import { Tab1Page } from './tab1.page' import { Tab1Page } from './tab1.page'
import { Discoteca } from '../discoteca' import { Discoteca } from '../discoteca'
import { Evento } from '../evento'; import { Observable, of } from 'rxjs';
import { FormControl, FormGroup } from '@angular/forms'; import { FormControl, FormGroup } from '@angular/forms';
import { NumericValueAccessor } from '@ionic/angular'; 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({ @Injectable({
@@ -13,56 +17,61 @@ import { NumericValueAccessor } from '@ionic/angular';
export class Tab1Service implements OnInit{ export class Tab1Service implements OnInit{
discoteca: Discoteca; discoteca: Discoteca;
discotecaI: DiscotecaI;
galeria: string[]; galeria: string[];
eventos: Evento[]; eventos: Eventoi[];
eventoForms: FormGroup[]; eventoForms: FormGroup[];
eventoIndex: number; eventoIndex: number;
editarEvento: boolean; editarEvento: boolean;
constructor() { constructor(private apiService: ApiService, private router: Router) {
} }
ngOnInit(){ ngOnInit(){
this.initValues();
} }
initValues(): void{ initValues(): void{
this.discoteca = new Discoteca(); this.discoteca = new Discoteca();
this.discoteca.setNombre('Barraca'); this.discoteca.setId(this.discotecaI.discotecaID);
this.discoteca.setTelefono(666666666); this.discoteca.setNombre(this.discotecaI.nombre);
this.discoteca.setLocalizacion('Calle del Barquillo'); this.discoteca.setTelefono(this.discotecaI.telefono);
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.discoteca.setLocalizacion(this.discotecaI.localizacion);
this.galeria = [];
this.initEventos(); this.initEventos();
this.galeria = [];
this.editarEvento = false; this.editarEvento = false;
} }
getNombre(): string{ getNombre(): string{
this.initValues();
return this.discoteca.getNombre(); return this.discoteca.getNombre();
} }
getTelefono(): number{ getTelefono(): number{
this.initValues();
return this.discoteca.getTelefono(); return this.discoteca.getTelefono();
} }
getLocalizacion(): string{ getLocalizacion(): string{
this.initValues();
return this.discoteca.getLocalizacion(); return this.discoteca.getLocalizacion();
} }
getEventos(): Eventoi[]{
return this.eventos;
}
getDescripcion(): string{ getDescripcion(): string{
return this.discoteca.getDescripcion(); return this.discoteca.getDescripcion();
} }
getEventos(): Evento[]{
return this.eventos;
}
initEventos(): void{ initEventos(): void{
this.eventos = []; this.eventos = [];
this.apiService.getEventos(this.discoteca.getId())
.subscribe(eventos => {
this.eventos = eventos;
this.router.navigate(['/tabs/tab1/perfil-discoteca']);
})
} }
initEventoForms(): void{ initEventoForms(): void{
@@ -73,4 +82,27 @@ export class Tab1Service implements OnInit{
return this.eventos[eventoIndex]; 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){
}
} }

View File

@@ -1,6 +0,0 @@
export interface User {
userId: number;
userType: number;
loginUser: string;
loginPassword: string;
}