From 11c76cb3cc4d21652f95965975130f6f2bfff0c2 Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 22 Jan 2020 22:25:33 -0500 Subject: [PATCH] Administracion concluida --- package-lock.json | 10 + package.json | 2 + .../administracion/administracion.module.ts | 14 +- .../administracion/administracion.routes.ts | 4 +- .../agencia-formulario.component.html | 2 +- .../avanzado-formulario.component.html | 81 +++++++- .../avanzado/avanzado-formulario.component.ts | 66 ++++++- .../avanzado/avanzado.component.html | 18 +- .../avanzado/avanzado.component.ts | 4 + .../estilo-celda-agrid.component.html | 1 + .../estilo-celda-agrid.component.ts | 25 +++ .../galeria/galeria-formulario.component.html | 2 +- .../internacional-formulario.component.html | 84 +++++++- .../internacional-formulario.component.ts | 66 ++++++- .../internacional.component.html | 18 +- .../internacional/internacional.component.ts | 8 +- ...ortafolio-cursos-formulario.component.html | 41 +++- .../portafolio-cursos-formulario.component.ts | 65 ++++++- .../portafolio-cursos.component.html | 28 +-- .../portafolio-cursos.component.ts | 6 +- .../portafolio-formulario.component.html | 15 +- .../portafolio/portafolio.component.html | 2 - .../programacion/programacion.component.html | 81 ++++++++ .../programacion/programacion.component.ts | 179 ++++++++++++++++++ src/app/config/opcionesGrid.ts | 11 ++ src/app/models/cursoAvanzado.model.ts | 22 +-- src/app/models/cursoInternacional.model.ts | 22 +-- src/app/models/portafolio.model.ts | 2 + src/app/models/portafolioCurso.model.ts | 10 +- src/app/services/agencia/agencia.service.ts | 13 +- .../avanzado/curso-avanzado.service.ts | 94 +++++++-- .../certificados/certificados.service.ts | 11 +- src/app/services/galeria/galeria.service.ts | 11 +- .../curso-internacional.service.ts | 94 +++++++-- .../portafolio-cursos.service.ts | 68 +++++-- .../services/portafolio/portafolio.service.ts | 13 +- src/app/services/shared/sidebar.service.ts | 1 + src/app/services/usuario/usuario.service.ts | 7 +- .../nopagefound/nopagefound.component.html | 12 +- .../nopagefound/nopagefound.component.ts | 21 +- src/styles.css | 7 +- 41 files changed, 1106 insertions(+), 135 deletions(-) create mode 100644 src/app/administracion/estilo-celda-agrid/estilo-celda-agrid.component.html create mode 100644 src/app/administracion/estilo-celda-agrid/estilo-celda-agrid.component.ts create mode 100644 src/app/administracion/programacion/programacion.component.html create mode 100644 src/app/administracion/programacion/programacion.component.ts create mode 100644 src/app/config/opcionesGrid.ts diff --git a/package-lock.json b/package-lock.json index 58bbcef..0f04688 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3409,6 +3409,16 @@ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", "dev": true }, + "ag-grid-angular": { + "version": "22.1.1", + "resolved": "https://registry.npmjs.org/ag-grid-angular/-/ag-grid-angular-22.1.1.tgz", + "integrity": "sha512-I1ynYxc+Chb8ecbYkM/+GM+mXCr/rnL+lHTXejBQvDFd61W1nTP2b8BiHwkxaJBDPcFrTyS5P2xqLXLkEzfm6g==" + }, + "ag-grid-community": { + "version": "22.1.1", + "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-22.1.1.tgz", + "integrity": "sha512-FNyv9e9JIuuR8NNi/r3NjIjUVy2/K5GgPjwQ63g9/Z4U8EudQZLINGMVKI6OwtZfWyyNSd0hQDCNsdvx0OR1WQ==" + }, "agent-base": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", diff --git a/package.json b/package.json index f3bc513..d0149af 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "@angular/platform-browser": "~8.2.14", "@angular/platform-browser-dynamic": "~8.2.14", "@angular/router": "~8.2.14", + "ag-grid-angular": "^22.1.1", + "ag-grid-community": "^22.1.1", "ng2-pdf-viewer": "^6.0.2", "ngx-bootstrap": "^5.3.2", "ngx-editor": "^4.1.0", diff --git a/src/app/administracion/administracion.module.ts b/src/app/administracion/administracion.module.ts index f3e0e38..61d1fd5 100644 --- a/src/app/administracion/administracion.module.ts +++ b/src/app/administracion/administracion.module.ts @@ -27,6 +27,9 @@ import { PortafolioFormularioComponent } from './portafolio/portafolio-formulari import { PortafolioCursosFormularioComponent } from './portafolio-cursos/portafolio-cursos-formulario.component'; import { NgxEditorModule } from 'ngx-editor'; import { PdfViewerModule } from 'ng2-pdf-viewer'; +import { AgGridModule } from 'ag-grid-angular'; +import { ProgramacionComponent } from './programacion/programacion.component'; +import { EstiloCeldaAgridComponent } from './estilo-celda-agrid/estilo-celda-agrid.component'; @NgModule({ declarations: [ @@ -46,7 +49,9 @@ import { PdfViewerModule } from 'ng2-pdf-viewer'; GaleriaFormularioComponent, InternacionalFormularioComponent, PortafolioFormularioComponent, - PortafolioCursosFormularioComponent + PortafolioCursosFormularioComponent, + ProgramacionComponent, + EstiloCeldaAgridComponent ], imports: [ SharedModule, @@ -56,7 +61,8 @@ import { PdfViewerModule } from 'ng2-pdf-viewer'; CommonModule, ReactiveFormsModule, NgxEditorModule, - PdfViewerModule + PdfViewerModule, + AgGridModule.withComponents([EstiloCeldaAgridComponent]) ], exports: [ PortafolioComponent, @@ -66,7 +72,9 @@ import { PdfViewerModule } from 'ng2-pdf-viewer'; InternacionalComponent, CertificadosComponent, AccountSettingsComponent, - PortafolioCursosComponent + PortafolioCursosComponent, + ProgramacionComponent, + EstiloCeldaAgridComponent ] }) diff --git a/src/app/administracion/administracion.routes.ts b/src/app/administracion/administracion.routes.ts index 4d1bcdd..dd4baf3 100644 --- a/src/app/administracion/administracion.routes.ts +++ b/src/app/administracion/administracion.routes.ts @@ -17,6 +17,7 @@ import { InternacionalFormularioComponent } from './internacional/internacional- import { PortafolioFormularioComponent } from './portafolio/portafolio-formulario.component'; import { CertificadoFormularioComponent } from './certificados/certificado-formulario.component'; import { PortafolioCursosFormularioComponent } from './portafolio-cursos/portafolio-cursos-formulario.component'; +import { ProgramacionComponent } from './programacion/programacion.component'; const routes: Routes = [{ @@ -39,7 +40,8 @@ const routes: Routes = [{ { path: 'account-settings', component: AccountSettingsComponent, data: { titulo: 'Ajustes del Tema' }}, { path: 'perfil', component: ProfileComponent, data: { titulo: 'Perfil de usuario' } }, { path: 'portafolio-cursos', component: PortafolioCursosComponent, data: { titulo: 'Cursos del Portafolio' } }, - { path: 'portafolio-cursos/:id', component: PortafolioCursosFormularioComponent, data: { titulo: 'Cursos del Portafolio' } } + { path: 'portafolio-cursos/:id', component: PortafolioCursosFormularioComponent, data: { titulo: 'Cursos del Portafolio' } }, + { path: 'programacion', component: ProgramacionComponent, data: { titulo: 'Programacion de cursos' } } ] }]; diff --git a/src/app/administracion/agencias/agencia-formulario.component.html b/src/app/administracion/agencias/agencia-formulario.component.html index 30331f8..9093e2b 100644 --- a/src/app/administracion/agencias/agencia-formulario.component.html +++ b/src/app/administracion/agencias/agencia-formulario.component.html @@ -21,7 +21,7 @@

Crear Agencia

-

Fotografía del usuario

+

Imagen de la agencia

diff --git a/src/app/administracion/avanzado/avanzado-formulario.component.html b/src/app/administracion/avanzado/avanzado-formulario.component.html index 76a94a4..6c07a58 100644 --- a/src/app/administracion/avanzado/avanzado-formulario.component.html +++ b/src/app/administracion/avanzado/avanzado-formulario.component.html @@ -1 +1,80 @@ -

avanzado-formulario works!

+
+
+
+
+

Crear Agencia

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Cancelar +
+
+
+
+
+
+
+

Imagen del curso avanzado

+ + + +
+
+
+
diff --git a/src/app/administracion/avanzado/avanzado-formulario.component.ts b/src/app/administracion/avanzado/avanzado-formulario.component.ts index 8bffe37..332db61 100644 --- a/src/app/administracion/avanzado/avanzado-formulario.component.ts +++ b/src/app/administracion/avanzado/avanzado-formulario.component.ts @@ -1,4 +1,10 @@ import { Component, OnInit } from '@angular/core'; +import { CursoAvanzado } from '../../models/cursoAvanzado.model'; +import { CursoAvanzadoService } from '../../services/service.index'; +import Swal from 'sweetalert2'; +import { NgForm } from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; +import { configuracion } from '../../config/editor'; @Component({ selector: 'app-avanzado-formulario', @@ -6,10 +12,68 @@ import { Component, OnInit } from '@angular/core'; styles: [] }) export class AvanzadoFormularioComponent implements OnInit { + avanzado: CursoAvanzado = new CursoAvanzado(); + imagenSubir: File; + imagenTemporal: string | ArrayBuffer; + configuraciones = configuracion; + id: string; - constructor() { } + constructor( + public avanzadoService: CursoAvanzadoService, + public router: Router, + public activatedRoute: ActivatedRoute + ) { + activatedRoute.params.subscribe(params => { + this.id = params.id; + if (this.id !== 'nuevo') { + this.buscarInformacion(this.id); + } + }); + } ngOnInit() { } + seleccionarImagen(archivo: File) { + if (!archivo) { + this.imagenSubir = null; + return; + } + if (archivo.type.indexOf('image') < 0) { + Swal.fire('Solo imagenes', 'El archivo seleccionado no es una imagen', 'error'); + this.imagenSubir = null; + return; + } + this.imagenSubir = archivo; + const reader = new FileReader(); + const urlImagenTemp = reader.readAsDataURL(archivo); + reader.onloadend = () => this.imagenTemporal = reader.result; + } + + crearCursoAvanzado(formulario: NgForm) { + if (formulario.invalid) { + return; + } + const programacion = this.avanzado.programacion; + this.avanzado = formulario.value; + this.avanzado._id = this.id; + this.avanzado.programacion = programacion; + const formData = new FormData(); + if (this.imagenSubir) { + formData.append('imagen', this.imagenSubir, this.imagenSubir.name); + } + this.avanzadoService.crearCursosAvanzados(formData, this.avanzado) + .subscribe(() => { + this.router.navigate(['/avanzado']); + } + ); + } + + buscarInformacion(id) { + this.avanzadoService.buscarCursoAvanzadoId(id) + .subscribe((avanzado) => { + this.avanzado = avanzado; + }); + } + } diff --git a/src/app/administracion/avanzado/avanzado.component.html b/src/app/administracion/avanzado/avanzado.component.html index 71c2bef..541d441 100644 --- a/src/app/administracion/avanzado/avanzado.component.html +++ b/src/app/administracion/avanzado/avanzado.component.html @@ -22,7 +22,7 @@
-
@@ -42,15 +42,21 @@

Cursos avanzados registrados ({{totalRegistros}}< - {{avanzado.titulo}} - {{avanzado.direccion}} - {{avanzado.fecha}} + +
+ + +
+ + +
+
- -
diff --git a/src/app/administracion/avanzado/avanzado.component.ts b/src/app/administracion/avanzado/avanzado.component.ts index f6b5e24..e5985ad 100644 --- a/src/app/administracion/avanzado/avanzado.component.ts +++ b/src/app/administracion/avanzado/avanzado.component.ts @@ -71,6 +71,10 @@ export class AvanzadoComponent implements OnInit { this.avanzadoService.eliminarCursoAvanzado(avanzado._id) .subscribe((resp: any) => { Swal.fire('Curso eliminado', 'El curso avanzado a sido eliminado correctamente', 'success'); + this.totalRegistros--; + if (this.desde === this.totalRegistros) { + this.desde -= 5; + } this.cargarCursos(); }); } diff --git a/src/app/administracion/estilo-celda-agrid/estilo-celda-agrid.component.html b/src/app/administracion/estilo-celda-agrid/estilo-celda-agrid.component.html new file mode 100644 index 0000000..cedd573 --- /dev/null +++ b/src/app/administracion/estilo-celda-agrid/estilo-celda-agrid.component.html @@ -0,0 +1 @@ +
diff --git a/src/app/administracion/estilo-celda-agrid/estilo-celda-agrid.component.ts b/src/app/administracion/estilo-celda-agrid/estilo-celda-agrid.component.ts new file mode 100644 index 0000000..9741bb3 --- /dev/null +++ b/src/app/administracion/estilo-celda-agrid/estilo-celda-agrid.component.ts @@ -0,0 +1,25 @@ +import { Component, OnInit } from '@angular/core'; +import { ICellRendererAngularComp } from 'ag-grid-angular'; + +@Component({ + selector: 'app-estilo-celda-agrid', + templateUrl: './estilo-celda-agrid.component.html', + styles: [] +}) +export class EstiloCeldaAgridComponent implements OnInit, ICellRendererAngularComp { +public cellValue: any; + constructor() { } + + ngOnInit() { + } + + agInit(params: any) { + this.cellValue = params.value; + } + + refresh(params: any): boolean { + this.cellValue = params.value; + return true; + } + +} diff --git a/src/app/administracion/galeria/galeria-formulario.component.html b/src/app/administracion/galeria/galeria-formulario.component.html index d71dfa2..bf19f96 100644 --- a/src/app/administracion/galeria/galeria-formulario.component.html +++ b/src/app/administracion/galeria/galeria-formulario.component.html @@ -23,7 +23,7 @@

Crear Agencia

-

Fotografía del usuario

+

Imagen de la galeria

diff --git a/src/app/administracion/internacional/internacional-formulario.component.html b/src/app/administracion/internacional/internacional-formulario.component.html index 8b09b94..ee89798 100644 --- a/src/app/administracion/internacional/internacional-formulario.component.html +++ b/src/app/administracion/internacional/internacional-formulario.component.html @@ -1 +1,83 @@ -

internacional-formulario works!

+
+
+
+
+

Crear Agencia

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + Cancelar +
+
+
+
+
+
+
+

Imagen del curso internacional

+ + + +
+
+
+
\ No newline at end of file diff --git a/src/app/administracion/internacional/internacional-formulario.component.ts b/src/app/administracion/internacional/internacional-formulario.component.ts index 7d123cc..7b7fe11 100644 --- a/src/app/administracion/internacional/internacional-formulario.component.ts +++ b/src/app/administracion/internacional/internacional-formulario.component.ts @@ -1,4 +1,10 @@ import { Component, OnInit } from '@angular/core'; +import { CursoInternacional } from '../../models/cursoInternacional.model'; +import { CursoInternacionalService } from '../../services/service.index'; +import Swal from 'sweetalert2'; +import { NgForm } from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; +import { configuracion } from '../../config/editor'; @Component({ selector: 'app-internacional-formulario', @@ -6,10 +12,68 @@ import { Component, OnInit } from '@angular/core'; styles: [] }) export class InternacionalFormularioComponent implements OnInit { + internacional: CursoInternacional = new CursoInternacional(); + imagenSubir: File; + imagenTemporal: string | ArrayBuffer; + configuraciones = configuracion; + id: string; - constructor() { } + constructor( + public internacionalService: CursoInternacionalService, + public router: Router, + public activatedRoute: ActivatedRoute + ) { + activatedRoute.params.subscribe(params => { + this.id = params.id; + if (this.id !== 'nuevo') { + this.buscarInformacion(this.id); + } + }); + } ngOnInit() { } + seleccionarImagen(archivo: File) { + if (!archivo) { + this.imagenSubir = null; + return; + } + if (archivo.type.indexOf('image') < 0) { + Swal.fire('Solo imagenes', 'El archivo seleccionado no es una imagen', 'error'); + this.imagenSubir = null; + return; + } + this.imagenSubir = archivo; + const reader = new FileReader(); + const urlImagenTemp = reader.readAsDataURL(archivo); + reader.onloadend = () => this.imagenTemporal = reader.result; + } + + crearCursoInternacional(formulario: NgForm) { + if (formulario.invalid) { + return; + } + const programacion = this.internacional.programacion; + this.internacional = formulario.value; + this.internacional._id = this.id; + this.internacional.programacion = programacion; + const formData = new FormData(); + if (this.imagenSubir) { + formData.append('imagen', this.imagenSubir, this.imagenSubir.name); + } + this.internacionalService.crearCursosInternacionales(formData, this.internacional) + .subscribe(() => { + this.router.navigate(['/internacional']); + } + ); + } + + buscarInformacion(id) { + this.internacionalService.buscarCursoInternacionalId(id) + .subscribe((internacional) => { + this.internacional = internacional; + }); + } + } diff --git a/src/app/administracion/internacional/internacional.component.html b/src/app/administracion/internacional/internacional.component.html index 22bf20d..18a6162 100644 --- a/src/app/administracion/internacional/internacional.component.html +++ b/src/app/administracion/internacional/internacional.component.html @@ -22,7 +22,7 @@
-
@@ -42,15 +42,21 @@

Cursos internacionales registrados ({{totalRegist - {{internacional.titulo}} - {{internacional.direccion}} - {{internacional.fecha}} + +
+ + +
+ + +
+
- -
diff --git a/src/app/administracion/internacional/internacional.component.ts b/src/app/administracion/internacional/internacional.component.ts index c01cd90..d286bf8 100644 --- a/src/app/administracion/internacional/internacional.component.ts +++ b/src/app/administracion/internacional/internacional.component.ts @@ -55,7 +55,7 @@ export class InternacionalComponent implements OnInit { }); } - eliminarCurso(avanzado) { + eliminarCurso(internacional) { Swal.fire({ title: '¿Está seguro?', text: 'Usted va a eliminar el curso internacional', @@ -67,9 +67,13 @@ export class InternacionalComponent implements OnInit { confirmButtonText: '¡Sí, eliminar!' }).then((result) => { if (result.value) { - this.internacionalService.eliminarCursoInternacional(avanzado._id) + this.internacionalService.eliminarCursoInternacional(internacional._id) .subscribe((resp: any) => { Swal.fire('Curso eliminado', 'El curso internacional a sido eliminado correctamente', 'success'); + this.totalRegistros--; + if (this.desde === this.totalRegistros) { + this.desde -= 5; + } this.cargarCursos(); }); } diff --git a/src/app/administracion/portafolio-cursos/portafolio-cursos-formulario.component.html b/src/app/administracion/portafolio-cursos/portafolio-cursos-formulario.component.html index 6df1366..5d4e528 100644 --- a/src/app/administracion/portafolio-cursos/portafolio-cursos-formulario.component.html +++ b/src/app/administracion/portafolio-cursos/portafolio-cursos-formulario.component.html @@ -1 +1,40 @@ -

portafolio-cursos-formulario works!

+
+
+
+
+

Crear cursos en el portafolio

+
+
+ + +
+
+ + +
+ + + + Cancelar +
+
+
+
+
+
+
+

Imagen del curso

+ + + +
+
+
+
\ No newline at end of file diff --git a/src/app/administracion/portafolio-cursos/portafolio-cursos-formulario.component.ts b/src/app/administracion/portafolio-cursos/portafolio-cursos-formulario.component.ts index 235c783..bab8486 100644 --- a/src/app/administracion/portafolio-cursos/portafolio-cursos-formulario.component.ts +++ b/src/app/administracion/portafolio-cursos/portafolio-cursos-formulario.component.ts @@ -1,4 +1,10 @@ import { Component, OnInit } from '@angular/core'; +import { configuracion } from '../../config/editor'; +import { PortafolioCurso } from '../../models/portafolioCurso.model'; +import { PortafolioCursosService } from '../../services/service.index'; +import { Router, ActivatedRoute } from '@angular/router'; +import Swal from 'sweetalert2'; +import { NgForm } from '@angular/forms'; @Component({ selector: 'app-portafolio-cursos-formulario', @@ -6,10 +12,65 @@ import { Component, OnInit } from '@angular/core'; styles: [] }) export class PortafolioCursosFormularioComponent implements OnInit { + portafolioCurso: PortafolioCurso = new PortafolioCurso(); + imagenSubir: File; + imagenTemporal: string | ArrayBuffer; + configuraciones = configuracion; + id: string; - constructor() { } +constructor( + public portafolioCursoService: PortafolioCursosService, + public router: Router, + public activatedRoute: ActivatedRoute + ) { + activatedRoute.params.subscribe(params => { + this.id = params.id; + if (this.id !== 'nuevo') { + this.buscarInformacion(this.id); + } + }); + } - ngOnInit() { +ngOnInit() { + } + +seleccionarImagen(archivo: File) { + if (!archivo) { + this.imagenSubir = null; + return; + } + if (archivo.type.indexOf('image') < 0) { + Swal.fire('Solo imagenes', 'El archivo seleccionado no es una imagen', 'error'); + this.imagenSubir = null; + return; + } + this.imagenSubir = archivo; + const reader = new FileReader(); + const urlImagenTemp = reader.readAsDataURL(archivo); + reader.onloadend = () => this.imagenTemporal = reader.result; + } + +crearPortafolioCurso(formulario: NgForm) { + if (formulario.invalid) { + return; + } + this.portafolioCurso = formulario.value; + this.portafolioCurso._id = this.id; + const formData = new FormData(); + if (this.imagenSubir) { + formData.append('imagen', this.imagenSubir, this.imagenSubir.name); + } + this.portafolioCursoService.crearPortafoliosCursos(formData, this.portafolioCurso) + .subscribe(() => { + this.router.navigate(['/portafolio-cursos']); + } + ); + } +buscarInformacion(id) { + this.portafolioCursoService.buscarPortafolioId(id) + .subscribe((portafolio) => { + this.portafolioCurso = portafolio; + }); } } diff --git a/src/app/administracion/portafolio-cursos/portafolio-cursos.component.html b/src/app/administracion/portafolio-cursos/portafolio-cursos.component.html index c143ba5..5ed114b 100644 --- a/src/app/administracion/portafolio-cursos/portafolio-cursos.component.html +++ b/src/app/administracion/portafolio-cursos/portafolio-cursos.component.html @@ -22,7 +22,8 @@
-
@@ -30,10 +31,10 @@

Cursos del portafolio registrado ({{totalRegistro - - - - + + + + @@ -41,14 +42,19 @@

Cursos del portafolio registrado ({{totalRegistro

- - + + - @@ -45,7 +44,6 @@

Portafolio registrado ({{totalRegistros}}

-
ImagenRequisitosIncluyeOpcionesImagenCursoInformaciónOpciones
{{portafolio.requisitos}}{{portafolio.incluye}} -
-
+
+
+
+ -
@@ -63,4 +69,4 @@

Cursos del portafolio registrado ({{totalRegistro - + \ No newline at end of file diff --git a/src/app/administracion/portafolio-cursos/portafolio-cursos.component.ts b/src/app/administracion/portafolio-cursos/portafolio-cursos.component.ts index 4d263b7..14b4224 100644 --- a/src/app/administracion/portafolio-cursos/portafolio-cursos.component.ts +++ b/src/app/administracion/portafolio-cursos/portafolio-cursos.component.ts @@ -25,7 +25,7 @@ export class PortafolioCursosComponent implements OnInit { this.portafolioCursoService.cargarPortafoliosCursos(this.desde) .subscribe((resp: any) => { this.totalRegistros = resp.total; - this.portafoliosCursos = resp.portafolio; + this.portafoliosCursos = resp.portafolioCursoDB; this.cargando = false; }); @@ -70,6 +70,10 @@ export class PortafolioCursosComponent implements OnInit { this.portafolioCursoService.eliminarPortafoliosCursos(portafolio._id) .subscribe((resp: any) => { Swal.fire('Curso eliminado', 'El curso del portafolio a sido eliminado correctamente', 'success'); + this.totalRegistros--; + if (this.desde === this.totalRegistros) { + this.desde -= 5; + } this.cargarPortafoliosCursos(); }); } diff --git a/src/app/administracion/portafolio/portafolio-formulario.component.html b/src/app/administracion/portafolio/portafolio-formulario.component.html index 61d1917..9a07f6e 100644 --- a/src/app/administracion/portafolio/portafolio-formulario.component.html +++ b/src/app/administracion/portafolio/portafolio-formulario.component.html @@ -25,6 +25,17 @@

Crear Agencia

+
+ + +
+
+ + +
+ @@ -38,10 +49,10 @@

Crear Agencia

-

Fotografía del usuario

+

Imagen del portafolio

- +
diff --git a/src/app/administracion/portafolio/portafolio.component.html b/src/app/administracion/portafolio/portafolio.component.html index 159e883..011002b 100644 --- a/src/app/administracion/portafolio/portafolio.component.html +++ b/src/app/administracion/portafolio/portafolio.component.html @@ -33,7 +33,6 @@

Portafolio registrado ({{totalRegistros}}

Titulo Mision VisionCentro Opciones
+
+ + + + +
+ + +
+
+ +
+
+ +
+
+ + + + Cancelar +
+ + + + + \ No newline at end of file diff --git a/src/app/administracion/programacion/programacion.component.ts b/src/app/administracion/programacion/programacion.component.ts new file mode 100644 index 0000000..5280915 --- /dev/null +++ b/src/app/administracion/programacion/programacion.component.ts @@ -0,0 +1,179 @@ +import { Component, OnInit } from '@angular/core'; +import { configuracion } from '../../config/editor'; +import { CursoInternacional } from '../../models/cursoInternacional.model'; +import { CursoAvanzado } from '../../models/cursoAvanzado.model'; +import { CursoInternacionalService, CursoAvanzadoService } from '../../services/service.index'; +import { Router } from '@angular/router'; +import Swal from 'sweetalert2'; +import { NgForm } from '@angular/forms'; +import { EstiloCeldaAgridComponent } from '../estilo-celda-agrid/estilo-celda-agrid.component'; +import { gridOptions } from '../../config/opcionesGrid'; + +@Component({ + selector: 'app-programacion', + templateUrl: './programacion.component.html', + styles: [] +}) +export class ProgramacionComponent implements OnInit { + private gridApi; + private gridColumnApi; + public columnDefs; + public frameworkComponents; + gridOpciones = gridOptions; + configuraciones = configuracion; + avanzado: CursoAvanzado = new CursoAvanzado(); + internacional: CursoInternacional = new CursoInternacional(); + listaAvanzado: CursoAvanzado[] = []; + listaInternacional: CursoInternacional[] = []; + programacion: [{}] = [{}]; + cursoAvanzado = ''; + cursoInternacional = ''; + dia: string; + informacion: string; + cursoElegido: string; + + constructor( + public internacionalService: CursoInternacionalService, + public avanzadoService: CursoAvanzadoService, + public router: Router + ) { + this.columnDefs = [ + { headerName: 'Día', field: 'dia', rowDrag: true, cellRenderer: 'configuracionEstilo' }, + { headerName: 'Información', field: 'informacion', cellRenderer: 'configuracionEstilo' } + ]; + this.frameworkComponents = { + configuracionEstilo: EstiloCeldaAgridComponent + }; + } + + ngOnInit() { + this.cursoAvanzadoListado(); + } + + onGridReady(params) { + this.gridApi = params.api; + this.gridColumnApi = params.columnApi; + } + + limpiarDatos() { + this.dia = ''; + this.informacion = ''; + } + + enviarModeloInternacional(idCurso: any) { + if (idCurso === '') { + return; + } + this.internacionalService.buscarCursoInternacionalId(idCurso) + .subscribe((internacional) => { + this.internacional = internacional; + this.cursoElegido = 'Internacional'; + this.llenarTabla(this.internacional); + }); + } + + enviarModeloAvanzado(idCurso: any) { + if (idCurso === '') { + return; + } + this.avanzadoService.buscarCursoAvanzadoId(idCurso) + .subscribe((avanzado) => { + this.avanzado = avanzado; + this.cursoElegido = 'Avanzado'; + this.llenarTabla(this.avanzado); + }); + } + + crearProgramacion() { + if (this.gridApi.getDisplayedRowCount() < 1) { + Swal.fire('Programación vacia', 'Se debe agregar la programación para guardar', 'error'); + return; + } + if (this.cursoElegido === 'Avanzado'){ + this.obtenerTabla(this.cursoElegido); + const formData = new FormData(); + this.avanzadoService.crearCursosAvanzados(formData, this.avanzado) + .subscribe(() => { + this.router.navigate(['/programacion']); + }); + } + if (this.cursoElegido === 'Internacional') { + this.obtenerTabla(this.cursoElegido); + const formData = new FormData(); + this.internacionalService.crearCursosInternacionales(formData, this.internacional) + .subscribe(() => { + this.router.navigate(['/programacion']); + }); + } + this.limpiarDatos(); + this.gridApi.setRowData(); + } + + obtenerTabla(tipo: string) { + if (this.gridApi.getDisplayedRowCount() < 1) { + Swal.fire('Programación vacia', 'Se debe agregar la programación para guardar', 'error'); + return; + } + this.gridApi.forEachNode((node, index) => { + let dato = 1; + dato++; + if (tipo === 'Internacional') { + this.internacional.programacion.splice(index, dato - 1, node.data); + } else if (tipo === 'Avanzado') { + this.avanzado.programacion.splice(index, dato - 1, node.data); + } + }); + } + + + cursoAvanzadoListado() { + this.listaInternacional = null; + this.avanzadoService.cargarCursoAvanzado(0, 50) + .subscribe((resp: any) => { + this.listaAvanzado = resp.avanzado; + }); + } + + cursoInternacionalListado() { + this.listaAvanzado = null; + this.internacionalService.cargarCursoInternacional(0, 50) + .subscribe((resp: any) => { + this.listaInternacional = resp.internacional; + }); + } + + nuevaFila(f: NgForm) { + const nuevoValor = [{ + dia: f.value.dia, + informacion: f.value.informacion + }]; + this.gridApi.updateRowData({ add: nuevoValor }); + this.limpiarDatos(); + } + + onRemoveSelected(tipo: string) { + const filaSeleccionada = this.gridApi.getSelectedRows(); + const dato = this.gridApi.updateRowData({ remove: filaSeleccionada }); + if (tipo === 'Avanzado') { + this.avanzadoService.eliminarProgramacionAvanzada(this.avanzado._id, filaSeleccionada[0]._id) + .subscribe(() => { + console.log('eliminado'); + this.enviarModeloAvanzado(this.avanzado._id); + }); + } else if (tipo === 'Internacional') { + this.internacionalService.eliminarProgramacionInternacional(this.internacional._id, filaSeleccionada[0]._id) + .subscribe(() => { + console.log('eliminado'); + this.enviarModeloInternacional(this.internacional._id); + }); + } + } + + llenarTabla(modelo: any) { + if (!modelo.programacion) { + this.gridApi.setRowData(); + return; + } + this.gridApi.setRowData(modelo.programacion); + } +} diff --git a/src/app/config/opcionesGrid.ts b/src/app/config/opcionesGrid.ts new file mode 100644 index 0000000..79557c9 --- /dev/null +++ b/src/app/config/opcionesGrid.ts @@ -0,0 +1,11 @@ +export const gridOptions = { + defaultColDef: { + width: 600, + sortable: true, + filter: true + }, + rowDragManaged: true, + animateRows: true, + domLayout: 'autoHeight', + rowSelection: 'single' + }; diff --git a/src/app/models/cursoAvanzado.model.ts b/src/app/models/cursoAvanzado.model.ts index 7d8a6bd..d875314 100644 --- a/src/app/models/cursoAvanzado.model.ts +++ b/src/app/models/cursoAvanzado.model.ts @@ -1,16 +1,16 @@ export class CursoAvanzado { constructor( - public titulo: string, - public imagen: string, - public direccion: string, - public fecha: string, - public descripcion: string, - public requisitos: string, - public proposito: string, - public metodologia: string, - public valor: string, - public incluye: string, - public programacion: [{ + public titulo?: string, + public imagen?: string, + public direccion?: string, + public fecha?: string, + public descripcion?: string, + public requisitos?: string, + public proposito?: string, + public metodologia?: string, + public valor?: string, + public incluye?: string, + public programacion?: [{ dia: string, informacion: string }], diff --git a/src/app/models/cursoInternacional.model.ts b/src/app/models/cursoInternacional.model.ts index 8fc6de1..f4febf5 100644 --- a/src/app/models/cursoInternacional.model.ts +++ b/src/app/models/cursoInternacional.model.ts @@ -1,16 +1,16 @@ export class CursoInternacional { constructor( - public titulo: string, - public imagen: string, - public direccion: string, - public fecha: string, - public descripcion: string, - public requisitos: string, - public proposito: string, - public metodologia: string, - public valor: string, - public incluye: string, - public programacion: [{ + public titulo?: string, + public imagen?: string, + public direccion?: string, + public fecha?: string, + public descripcion?: string, + public requisitos?: string, + public proposito?: string, + public metodologia?: string, + public valor?: string, + public incluye?: string, + public programacion?: [{ dia: string, informacion: string }], diff --git a/src/app/models/portafolio.model.ts b/src/app/models/portafolio.model.ts index f4e2a0f..245c02d 100644 --- a/src/app/models/portafolio.model.ts +++ b/src/app/models/portafolio.model.ts @@ -5,6 +5,8 @@ export class Portafolio { public mision?: string, public vision?: string, public centro?: string, + public requisitos?: string, + public incluye?: string, public _id?: string ) { } } diff --git a/src/app/models/portafolioCurso.model.ts b/src/app/models/portafolioCurso.model.ts index 0e32c8e..3941c0e 100644 --- a/src/app/models/portafolioCurso.model.ts +++ b/src/app/models/portafolioCurso.model.ts @@ -1,12 +1,8 @@ export class PortafolioCurso { constructor( - public imagen: string, - public requisitos: string, - public incluye: string, - public ciclos: [{ - curso: string, - informacion: string - }], + public imagen?: string, + public curso?: string, + public informacion?: string, public _id?: string ) { } } diff --git a/src/app/services/agencia/agencia.service.ts b/src/app/services/agencia/agencia.service.ts index aa842d0..4164056 100644 --- a/src/app/services/agencia/agencia.service.ts +++ b/src/app/services/agencia/agencia.service.ts @@ -1,10 +1,11 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { URL_SERVICIOS } from '../../config/config'; -import { map } from 'rxjs/operators'; -import { Agencia } from 'src/app/models/agencia.model'; +import { map, catchError } from 'rxjs/operators'; +import { Agencia } from '../../models/agencia.model'; import { UsuarioService } from '../usuario/usuario.service'; import Swal from 'sweetalert2'; +import { throwError } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -47,6 +48,10 @@ export class AgenciaService { return this.http.put(url, archivo).pipe( map((resp: any) => { Swal.fire('Agencia actualizada', ' ', 'success'); + }), + catchError(err => { + Swal.fire('Error al actualizar', err.error.mensaje, 'error'); + return throwError(err); }) ); } else { @@ -55,6 +60,10 @@ export class AgenciaService { map((resp: any) => { Swal.fire('Agencia creada', ' ', 'success'); return resp.agenciaDB; + }), + catchError(err => { + Swal.fire('Error guardar', err.error.mensaje, 'error'); + return throwError(err); }) ); } diff --git a/src/app/services/avanzado/curso-avanzado.service.ts b/src/app/services/avanzado/curso-avanzado.service.ts index e6de63e..57a380d 100644 --- a/src/app/services/avanzado/curso-avanzado.service.ts +++ b/src/app/services/avanzado/curso-avanzado.service.ts @@ -1,43 +1,99 @@ import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpParams } from '@angular/common/http'; import { URL_SERVICIOS } from '../../config/config'; -import { map } from 'rxjs/operators'; +import { map, catchError } from 'rxjs/operators'; +import { CursoAvanzado } from '../../models/cursoAvanzado.model'; +import { UsuarioService } from '../usuario/usuario.service'; +import Swal from 'sweetalert2'; +import { throwError } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class CursoAvanzadoService { - token: string; - constructor(public http: HttpClient) { - this.cargarStorage(); + constructor(public http: HttpClient, public usuarioService: UsuarioService) { + this.usuarioService.cargarStorage(); } - cargarCursoAvanzado(desde: number = 0) { - let url = URL_SERVICIOS + '/avanzado?desde=' + desde; - return this.http.get(url); - } - - cargarStorage() { - if (localStorage.getItem('token')) { - this.token = localStorage.getItem('token'); - } else { - this.token = ''; - } + cargarCursoAvanzado(desde: number = 0, limite: number = 5) { + let url = URL_SERVICIOS + '/avanzado/'; + let params = new HttpParams(); + params = params.append('desde', desde.toString()); + params = params.append('limite', limite.toString()); + return this.http.get(url, {params}); } buscarCursoAvanzado(termino: string) { let url = URL_SERVICIOS + '/busqueda/coleccion/avanzados/' + termino; - url += '?token=' + this.token; + url += '?token=' + this.usuarioService.token; return this.http.get(url).pipe( map((resp: any) => resp.avanzados)); - } eliminarCursoAvanzado(id: string) { let url = URL_SERVICIOS + '/avanzado/' + id; - url += '?token=' + this.token; + url += '?token=' + this.usuarioService.token; return this.http.delete(url); + } + + eliminarProgramacionAvanzada(id: string , idProgramacion: string) { + let url = URL_SERVICIOS + '/avanzado/eliminar/programacion'; + let params = new HttpParams(); + params = params.append('id', id.toString()); + params = params.append('idProgramacion', idProgramacion.toString()); + return this.http.delete(url, { params }); + } + + crearCursosAvanzados(archivo: FormData, avanzado: CursoAvanzado) { + let url = URL_SERVICIOS + '/avanzado'; + const data = { + titulo: avanzado.titulo, + imagen: avanzado.imagen, + direccion: avanzado.direccion, + fecha: avanzado.fecha, + descripcion: avanzado.descripcion, + requisitos: avanzado.requisitos, + proposito: avanzado.proposito, + metodologia: avanzado.metodologia, + valor: avanzado.valor, + incluye: avanzado.incluye, + programacion: avanzado.programacion + }; + archivo.append('data', JSON.stringify(data)); + if (avanzado._id !== 'nuevo') { + url += '/' + avanzado._id + '?token=' + this.usuarioService.token; + return this.http.put(url, archivo).pipe( + map((resp: any) => { + Swal.fire('Curso avanzado actualizado', ' ', 'success'); + }), + catchError(err => { + Swal.fire('Error al actualizar', err.error.mensaje, 'error'); + return throwError(err); + }) + ); + } else { + url += '?token=' + this.usuarioService.token; + return this.http.post(url, archivo).pipe( + map((resp: any) => { + Swal.fire('Curso avanzado creado', ' ', 'success'); + return resp.avanzadoDB; + }), + catchError(err => { + Swal.fire('Error guardar', err.error.mensaje, 'error'); + return throwError(err); + }) + ); + } + } + + buscarCursoAvanzadoId(id: string) { + let url = URL_SERVICIOS + '/avanzado/' + id + '?token=' + this.usuarioService.token; + return this.http.get(url).pipe( + map((resp: any) => { + return resp.avanzado; + }) + ); } } diff --git a/src/app/services/certificados/certificados.service.ts b/src/app/services/certificados/certificados.service.ts index c755ca6..fc17ae3 100644 --- a/src/app/services/certificados/certificados.service.ts +++ b/src/app/services/certificados/certificados.service.ts @@ -1,10 +1,11 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { URL_SERVICIOS } from '../../config/config'; -import { map } from 'rxjs/operators'; +import { map, catchError } from 'rxjs/operators'; import { UsuarioService } from '../usuario/usuario.service'; import { Certificado } from '../../models/certificado.model'; import Swal from 'sweetalert2'; +import { throwError } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -49,6 +50,10 @@ export class CertificadosService { return this.http.put(url, archivo).pipe( map((resp: any) => { Swal.fire('Certificado actualizado', ' ', 'success'); + }), + catchError(err => { + Swal.fire('Error al actualizar', err.error.mensaje, 'error'); + return throwError(err); }) ); } else { @@ -57,6 +62,10 @@ export class CertificadosService { map((resp: any) => { Swal.fire('Certificado creado', ' ', 'success'); return resp.certificadoDB; + }), + catchError(err => { + Swal.fire('Error guardar', err.error.mensaje, 'error'); + return throwError(err); }) ); } diff --git a/src/app/services/galeria/galeria.service.ts b/src/app/services/galeria/galeria.service.ts index ade9238..988690e 100644 --- a/src/app/services/galeria/galeria.service.ts +++ b/src/app/services/galeria/galeria.service.ts @@ -1,10 +1,11 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { URL_SERVICIOS } from '../../config/config'; -import { map } from 'rxjs/operators'; +import { map, catchError } from 'rxjs/operators'; import { UsuarioService } from '../usuario/usuario.service'; import { Galeria } from '../../models/galeria.model'; import Swal from 'sweetalert2'; +import { throwError } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -46,6 +47,10 @@ export class GaleriaService { return this.http.put(url, archivo).pipe( map((resp: any) => { Swal.fire('Galeria actualizada', ' ', 'success'); + }), + catchError(err => { + Swal.fire('Error al actualizar', err.error.mensaje, 'error'); + return throwError(err); }) ); } else { @@ -54,6 +59,10 @@ export class GaleriaService { map((resp: any) => { Swal.fire('Galeria creada', ' ', 'success'); return resp.galeriaDB; + }), + catchError(err => { + Swal.fire('Error guardar', err.error.mensaje, 'error'); + return throwError(err); }) ); } diff --git a/src/app/services/internacional/curso-internacional.service.ts b/src/app/services/internacional/curso-internacional.service.ts index 1cb4988..5f1d309 100644 --- a/src/app/services/internacional/curso-internacional.service.ts +++ b/src/app/services/internacional/curso-internacional.service.ts @@ -1,34 +1,32 @@ import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpParams } from '@angular/common/http'; import { URL_SERVICIOS } from '../../config/config'; -import { map } from 'rxjs/operators'; +import { map, catchError } from 'rxjs/operators'; +import { CursoInternacional } from '../../models/cursoInternacional.model'; +import { UsuarioService } from '../usuario/usuario.service'; +import Swal from 'sweetalert2'; +import { throwError } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class CursoInternacionalService { - token: string; - constructor( public http: HttpClient) { - this.cargarStorage(); + constructor(public http: HttpClient, public usuarioService: UsuarioService) { + this.usuarioService.cargarStorage(); } - cargarCursoInternacional(desde: number = 0) { - let url = URL_SERVICIOS + '/internacional?desde=' + desde; - return this.http.get(url); - } - - cargarStorage() { - if (localStorage.getItem('token')) { - this.token = localStorage.getItem('token'); - } else { - this.token = ''; - } + cargarCursoInternacional(desde: number = 0, limite: number = 5) { + let url = URL_SERVICIOS + '/internacional/'; + let params = new HttpParams(); + params = params.append('desde', desde.toString()); + params = params.append('limite', limite.toString()); + return this.http.get(url, { params }); } buscarCursoInternacional(termino: string) { let url = URL_SERVICIOS + '/busqueda/coleccion/internacionales/' + termino; - url += '?token=' + this.token; + url += '?token=' + this.usuarioService.token; return this.http.get(url).pipe( map((resp: any) => resp.internacionales)); @@ -36,8 +34,68 @@ export class CursoInternacionalService { eliminarCursoInternacional(id: string) { let url = URL_SERVICIOS + '/internacional/' + id; - url += '?token=' + this.token; + url += '?token=' + this.usuarioService.token; return this.http.delete(url); } + + eliminarProgramacionInternacional(id: string, idProgramacion: string) { + let url = URL_SERVICIOS + '/internacional/eliminar/programacion'; + let params = new HttpParams(); + params = params.append('id', id.toString()); + params = params.append('idProgramacion', idProgramacion.toString()); + return this.http.delete(url, { params }); + } + + crearCursosInternacionales(archivo: FormData, internacional: CursoInternacional) { + let url = URL_SERVICIOS + '/internacional'; + const data = { + titulo: internacional.titulo, + imagen: internacional.imagen, + direccion: internacional.direccion, + fecha: internacional.fecha, + descripcion: internacional.descripcion, + requisitos: internacional.requisitos, + proposito: internacional.proposito, + metodologia: internacional.metodologia, + valor: internacional.valor, + incluye: internacional.incluye, + programacion: internacional.programacion + }; + archivo.append('data', JSON.stringify(data)); + + if (internacional._id !== 'nuevo') { + url += '/' + internacional._id + '?token=' + this.usuarioService.token; + return this.http.put(url, archivo).pipe( + map((resp: any) => { + Swal.fire('Curso internacional actualizado', ' ', 'success'); + }), + catchError(err => { + Swal.fire('Error al actualizar', err.error.mensaje, 'error'); + return throwError(err); + }) + ); + } else { + url += '?token=' + this.usuarioService.token; + return this.http.post(url, archivo).pipe( + map((resp: any) => { + Swal.fire('Curso internacional creado', ' ', 'success'); + return resp.internacionalDB; + }), + catchError(err => { + Swal.fire('Error guardar', err.error.mensaje, 'error'); + return throwError(err); + }) + ); + } + } + + buscarCursoInternacionalId(id: string) { + let url = URL_SERVICIOS + '/internacional/' + id + '?token=' + this.usuarioService.token; + return this.http.get(url).pipe( + map((resp: any) => { + return resp.internacional; + }) + ); + } } diff --git a/src/app/services/portafolio-cursos/portafolio-cursos.service.ts b/src/app/services/portafolio-cursos/portafolio-cursos.service.ts index a3bfd25..ba89207 100644 --- a/src/app/services/portafolio-cursos/portafolio-cursos.service.ts +++ b/src/app/services/portafolio-cursos/portafolio-cursos.service.ts @@ -1,17 +1,20 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { URL_SERVICIOS } from '../../config/config'; -import { map } from 'rxjs/operators'; +import { PortafolioCurso } from '../../models/portafolioCurso.model'; +import { UsuarioService } from '../usuario/usuario.service'; +import { map, catchError } from 'rxjs/operators'; +import Swal from 'sweetalert2'; +import { throwError } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class PortafolioCursosService { - token: string; - constructor(public http: HttpClient) { - this.cargarStorage(); + constructor(public http: HttpClient, public usuarioService: UsuarioService) { + this.usuarioService.cargarStorage(); } cargarPortafoliosCursos(desde: number = 0) { @@ -19,26 +22,59 @@ export class PortafolioCursosService { return this.http.get(url); } - cargarStorage() { - if (localStorage.getItem('token')) { - this.token = localStorage.getItem('token'); - } else { - this.token = ''; - } - } - buscarPortafoliosCursos(termino: string) { let url = URL_SERVICIOS + '/busqueda/coleccion/portafolioCursos/' + termino; - url += '?token=' + this.token; + url += '?token=' + this.usuarioService.token; return this.http.get(url).pipe( - map((resp: any) => resp.portafolio)); - + map((resp: any) => resp.portafolioCursos)); } eliminarPortafoliosCursos(id: string) { let url = URL_SERVICIOS + '/portafolio-curso/' + id; - url += '?token=' + this.token; + url += '?token=' + this.usuarioService.token; return this.http.delete(url); + } + crearPortafoliosCursos(archivo: FormData, portafolioCurso: PortafolioCurso) { + let url = URL_SERVICIOS + '/portafolio-curso'; + const data = { + curso: portafolioCurso.curso, + informacion: portafolioCurso.informacion, + }; + archivo.append('data', JSON.stringify(data)); + + if (portafolioCurso._id !== 'nuevo') { + url += '/' + portafolioCurso._id + '?token=' + this.usuarioService.token; + return this.http.put(url, archivo).pipe( + map((resp: any) => { + Swal.fire('Curso del portafolio actualizado', ' ', 'success'); + }), + catchError(err => { + Swal.fire('Error al actualizar', err.error.mensaje, 'error'); + return throwError(err); + }) + ); + } else { + url += '?token=' + this.usuarioService.token; + return this.http.post(url, archivo).pipe( + map((resp: any) => { + Swal.fire('Curso del portafolio creado', ' ', 'success'); + return resp.portafolioDB; + }), + catchError(err => { + Swal.fire('Error guardar', err.error.mensaje, 'error'); + return throwError(err); + }) + ); + } + } + + buscarPortafolioId(id: string) { + let url = URL_SERVICIOS + '/portafolio-curso/' + id + '?token=' + this.usuarioService.token; + return this.http.get(url).pipe( + map((resp: any) => { + return resp.portafolioCursoDB; + }) + ); } } diff --git a/src/app/services/portafolio/portafolio.service.ts b/src/app/services/portafolio/portafolio.service.ts index 6bb0442..e21b126 100644 --- a/src/app/services/portafolio/portafolio.service.ts +++ b/src/app/services/portafolio/portafolio.service.ts @@ -2,9 +2,10 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { URL_SERVICIOS } from '../../config/config'; import { Portafolio } from 'src/app/models/portafolio.model'; -import { map } from 'rxjs/operators'; +import { map, catchError } from 'rxjs/operators'; import { UsuarioService } from '../usuario/usuario.service'; import Swal from 'sweetalert2'; +import { throwError } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -42,6 +43,8 @@ export class PortafolioService { mision: portafolio.mision, vision: portafolio.vision, centro: portafolio.centro, + requisitos: portafolio.requisitos, + incluye: portafolio.incluye, }; archivo.append('data', JSON.stringify(data)); @@ -50,6 +53,10 @@ export class PortafolioService { return this.http.put(url, archivo).pipe( map((resp: any) => { Swal.fire('Portafolio actualizado', ' ', 'success'); + }), + catchError(err => { + Swal.fire('Error al actualizar', err.error.mensaje, 'error'); + return throwError(err); }) ); } else { @@ -58,6 +65,10 @@ export class PortafolioService { map((resp: any) => { Swal.fire('Portafolio creado', ' ', 'success'); return resp.portafolioDB; + }), + catchError(err => { + Swal.fire('Error guardar', err.error.mensaje, 'error'); + return throwError(err); }) ); } diff --git a/src/app/services/shared/sidebar.service.ts b/src/app/services/shared/sidebar.service.ts index 08a6966..f0217a1 100644 --- a/src/app/services/shared/sidebar.service.ts +++ b/src/app/services/shared/sidebar.service.ts @@ -13,6 +13,7 @@ export class SidebarService { { titulo: 'Cursos del Portafolio', url: '/portafolio-cursos' }, { titulo: 'Cursos Avanzados', url: '/avanzado' }, { titulo: 'Cursos Internacionales', url: '/internacional' }, + { titulo: 'Programación', url: '/programacion' }, { titulo: 'Agencias', url: '/agencias' }, { titulo: 'Galeria', url: '/galeria' }, { titulo: 'Certificados', url: '/certificados' } diff --git a/src/app/services/usuario/usuario.service.ts b/src/app/services/usuario/usuario.service.ts index 17db56e..4372e67 100644 --- a/src/app/services/usuario/usuario.service.ts +++ b/src/app/services/usuario/usuario.service.ts @@ -2,9 +2,10 @@ import { Injectable, EventEmitter } from '@angular/core'; import { Usuario } from 'src/app/models/usuario.model'; import { HttpClient } from '@angular/common/http'; import { URL_SERVICIOS } from '../../config/config'; -import { map } from 'rxjs/operators'; +import { map, catchError } from 'rxjs/operators'; import { Router } from '@angular/router'; import Swal from 'sweetalert2'; +import { throwError } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -59,6 +60,10 @@ export class UsuarioService { map((resp: any) => { this.guardarStorage(resp.id, resp.token, resp.usuarioDB); return true; + }), + catchError(err => { + Swal.fire('Error en el login', err.error.mensaje, 'error'); + return throwError(err); }) ); } diff --git a/src/app/shared/nopagefound/nopagefound.component.html b/src/app/shared/nopagefound/nopagefound.component.html index 5d4474c..9cab622 100644 --- a/src/app/shared/nopagefound/nopagefound.component.html +++ b/src/app/shared/nopagefound/nopagefound.component.html @@ -1 +1,11 @@ -

nopagefound works!

+
+
+
+

404

+

Page Not Found !

+

Parece que encontraste un ratón

+ Regresar al login +
+ +
+
diff --git a/src/app/shared/nopagefound/nopagefound.component.ts b/src/app/shared/nopagefound/nopagefound.component.ts index 17456ed..5fb6647 100644 --- a/src/app/shared/nopagefound/nopagefound.component.ts +++ b/src/app/shared/nopagefound/nopagefound.component.ts @@ -3,10 +3,27 @@ declare function init_plugins(); @Component({ selector: 'app-nopagefound', templateUrl: './nopagefound.component.html', - styles: [] + styles: [`.error-box { + height: 100%; + position: fixed; + background: url(../../../assets/images/background/error-bg.jpg) no-repeat center center #fff; + width: 100%; } + .error-box .footer { + width: 100%; + left: 0px; + right: 0px; } + +.error-body { + padding-top: 5%; } + .error-body h1 { + font-size: 210px; + font-weight: 900; + text-shadow: 4px 4px 0 #ffffff, 6px 6px 0 #263238; + line-height: 210px; } +`] }) export class NopagefoundComponent implements OnInit { - + anio: number = new Date().getFullYear(); constructor() { } ngOnInit() { diff --git a/src/styles.css b/src/styles.css index 41bd11e..2b74fd9 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1,3 +1,6 @@ +@import "~ag-grid-community/dist/styles/ag-grid.css"; +@import "~ag-grid-community/dist/styles/ag-theme-balham.css"; + #themecolors a { cursor: pointer; } @@ -16,4 +19,6 @@ .w70 { width: 70px; -} \ No newline at end of file +} + +