Skip to content

Commit

Permalink
Fin sección 17
Browse files Browse the repository at this point in the history
  • Loading branch information
alesyt0h committed Aug 27, 2021
1 parent 61e7255 commit ed59f1a
Show file tree
Hide file tree
Showing 21 changed files with 816 additions and 25 deletions.
2 changes: 1 addition & 1 deletion src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { PagesModule } from './pages/pages.module';
@NgModule({
declarations: [
AppComponent,
NopagefoundComponent,
NopagefoundComponent
],
imports: [
BrowserModule,
Expand Down
14 changes: 14 additions & 0 deletions src/app/models/hospital.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
interface _hospitalCreator {
_id: string;
nombre: string;
img: string;
}

export class Hospital {
constructor(
public nombre: string,
public _id?: string,
public img?: string,
public usuario?: _hospitalCreator,
){}
}
17 changes: 17 additions & 0 deletions src/app/models/medico.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Hospital } from "./hospital.model";

interface _medicoCreator {
_id: string;
nombre: string;
img: string;
}

export class Medico {
constructor(
public nombre: string,
public _id?: string,
public img?: string,
public usuario?: _medicoCreator,
public hospital?: Hospital
){}
}
2 changes: 1 addition & 1 deletion src/app/pages/mantenimientos/cascaron.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<td>Lunar probe project</td>
<td>Lunar probe project</td>
<td>Lunar probe project</td>
<td class="text-nowrap">
<td class="text-nowrap text-center">
<a href="#" data-toggle="tooltip" data-original-title="Editar"> <i class="fa fa-pencil text-inverse m-r-10"></i> </a>
<a href="#" data-toggle="tooltip" data-original-title="Borrar"> <i class="fa fa-close text-danger"></i> </a>
</td>
Expand Down
101 changes: 101 additions & 0 deletions src/app/pages/mantenimientos/hospitales/hospitales.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<div class="row animated fadeIn fast">
<div class="col-12">
<div class="card">
<div class="card-body">

<input type="text"
class="form-control"
placeholder="Buscar hospital..."
#termino
(keyup)="searchQuery(termino.value)"
/>

</div>
</div>
</div>
</div>

<div class="row animated fadeIn fast"
*ngIf="cargando">
<div class="col-12">
<div class="alert alert-success text-center">
<h4 class="alert-heading">Cargando</h4>
<i class="fa fa-spin fa-refresh fa-2x fa-"></i>
<p class="mb-0">Por favor espere</p>
</div>
</div>
</div>

<div class="row animated fadeIn fast" *ngIf="!cargando">
<div class="col-12">
<div class="card">
<div class="card-body">
<!-- <div class="text-right btn-crear">
<button class="btn btn-primary">
<i class="fa far fa-hospital"></i>
Crear hospital
</button>
</div>
<h4 class="card-title">Hospitales ({{hospitales.length}})</h4>
<h6 class="card-subtitle">Hospitales registrados en la aplicación</h6> -->

<div class="row">
<div class="col-8">
<h4 class="card-title">Hospitales ({{hospitales.length}})</h4>
<h6 class="card-subtitle">Hospitales registrados en la aplicación</h6>
</div>
<div class="col">
<div class="text-right">
<button class="btn btn-primary" (click)="abrirSweetAlert()">
<i class="fa fa-hospital-o mr-1"></i>
Crear hospital
</button>
</div>
</div>
</div>

<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th class="w100">Foto</th>
<th>Nombre</th>
<th class="text-nowrap w100">Acciones</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let hospital of hospitales">
<!-- <td>{{hospital.img | imagen:'hospitales'}}</td> -->
<td class="text-center">
<img (click)="abrirModal(hospital)"[src]="hospital.img | imagen:'hospitales'" [alt]="hospital.nombre" class="w100 cursor">
</td>
<td>
<input type="text" class="form-control" placeholder="Nombre del hospital" [(ngModel)]="hospital.nombre"/>
</td>
<td class="text-nowrap text-center">
<a (click)="guardarCambios(hospital)"
data-toggle="tooltip"
class="cursor"
data-original-title="Guardar">
<i class="fa fa-save text-inverse m-r-10"></i>
</a>
<a (click)="eliminarHospital(hospital)"
data-toggle="tooltip"
class="cursor"
data-original-title="Borrar">
<i class="fa fa-close text-danger"></i>
</a>
</td>
</tr>
</tbody>
</table>
</div>

<!-- <button class="btn btn-secondary">Anterior</button>
&nbsp;
<button class="btn btn-secondary">Siguiente</button> -->

</div>
</div>
</div>
</div>
114 changes: 114 additions & 0 deletions src/app/pages/mantenimientos/hospitales/hospitales.component.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import { Component, Input, OnInit, OnDestroy } from '@angular/core';

import { Subscription } from 'rxjs';
import { delay } from 'rxjs/operators';
import Swal from 'sweetalert2';

import { Hospital } from '../../../models/hospital.model';
import { HospitalService } from '../../../services/hospital.service';
import { ModalImagenService } from '../../../services/modal-imagen.service';
import { BusquedasService } from '../../../services/busquedas.service';

@Component({
selector: 'app-hospitales',
templateUrl: './hospitales.component.html',
styles: [
]
})
export class HospitalesComponent implements OnInit, OnDestroy {

public hospitales: Hospital[] = [];
public hospitalesTemp: Hospital[] = [];
public cargando: boolean = true;

private imgSubs!: Subscription;


constructor(private _hospitalService: HospitalService,
private _modalImagenService: ModalImagenService,
private _busquedasService: BusquedasService) { }

ngOnDestroy(): void {
this.imgSubs.unsubscribe();
}

ngOnInit(): void {
this.cargarHospitales();

this.imgSubs = this._modalImagenService.nuevaImagen
.pipe(delay(200))
.subscribe(img => this.cargarHospitales());
}

cargarHospitales(){
// Creo que seria mejor actualizar el hospital en el array para evitar demasiadas peticiones http
this.cargando = true;

this._hospitalService.cargarHospitales()
.subscribe( hospitales => {
this.cargando = false;
this.hospitales = hospitales;
this.hospitalesTemp = this.hospitales
});
}

guardarCambios(hospital: Hospital){
this._hospitalService.actualizarHospital(hospital._id!,hospital.nombre)
.subscribe( resp => {
this.cargarHospitales(); // Creo que seria mejor actualizar el hospital en el array para evitar demasiadas peticiones http
Swal.fire('Actualizado', hospital.nombre, 'success')
})
}

eliminarHospital(hospital: Hospital){
this._hospitalService.borrarHospital(hospital._id!)
.subscribe( resp => {
this.cargarHospitales(); // Creo que seria mejor actualizar el hospital en el array para evitar demasiadas peticiones http
Swal.fire('Borrado', hospital.nombre, 'success')
})
}

async abrirSweetAlert(){
const {value = '', ...valor} = await Swal.fire<string>({
title: 'Crear hospital',
text: 'Ingrese el nombre del nuevo hospital',
input: 'text',
inputPlaceholder: 'Nombre del hospital',
showCancelButton: true
})

// if (valor.isDismissed) return; // SImplemente se arregla asignandole un string vacio a value en la desestructuración

if (value!.trim().length > 0) {
this._hospitalService.crearHospital(value!)
.subscribe((resp: any) => {
this.hospitales.push(resp.hospital)
})
}

// if (url) {
// Swal.fire(`Entered URL: ${url}`)
// }
}

abrirModal(hospital: Hospital) {
// if (this._usuarioService.usuario.role === 'ADMIN_ROLE'){
this._modalImagenService.abrirModal('hospitales',hospital._id!,hospital.img);
// }
}

searchQuery(termino: string){

if (termino.length === 0) {
this.hospitales = this.hospitalesTemp
return;
// return this.cargarHospitales(); // Para no complicarse mucho, pero seria mejor guardar los hospitales para tener la referencia local y así evitar hacer una petición extra
}

this._busquedasService.buscar('hospitales',termino)
.subscribe((resp: Hospital[]) => {
this.hospitales = resp
})
}

}
65 changes: 65 additions & 0 deletions src/app/pages/mantenimientos/medicos/medico.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<h4 class="card-title">Médico</h4>
<h6 class="card-subtitle">Actualizar información</h6>
<form class="form-horizontal p-t-20" [formGroup]="medicoForm" (ngSubmit)="guardarMedico()">

<div class="form-group row" *ngIf="medicoSeleccionado">
<label for="exampleInputuname3" class="col-sm-3 control-label">Foto</label>
<div class="col-sm-9">
<div class="input-group">
<img class="w200" [src]="medicoSeleccionado.img | imagen:'medicos'"/>
</div>
</div>
</div>

<div class="form-group row">
<label for="exampleInputuname3" class="col-sm-3 control-label">Nombre</label>
<div class="col-sm-9">
<div class="input-group">
<div class="input-group-addon"><i class="ti-user"></i></div>
<input type="text" class="form-control" id="exampleInputuname3" placeholder="Nombre del médico" formControlName="nombre">
</div>
</div>
</div>
<div class="form-group row">
<label for="exampleInputEmail3" class="col-sm-3 control-label">Hospital</label>
<div class="col-sm-9">
<div class="input-group">
<select class="form-control" formControlName="hospital">
<option value="">Seleccione Hospital</option>
<option [value]="hospital._id"
*ngFor="let hospital of hospitales">{{hospital.nombre}}</option>
</select>
</div>
</div>
</div>

<div class="form-group row m-b-0">
<div class="offset-sm-3 col-sm-9">
<button type="submit" class="btn btn-success waves-effect waves-light" [disabled]="medicoForm.invalid">
<i class="fa fas fa-save mr-1"></i>
{{(medicoSeleccionado ? 'Actualizar' : 'Crear')}}
</button>
</div>
</div>
</form>
</div>
</div>
</div>

<div class="col-md-6 animated fadeIn fast" *ngIf="hospitalSeleccionado">
<div class="card">
<div class="card-body">
<h4 class="card-title">Hospital</h4>
<h6 class="card-subtitle">{{hospitalSeleccionado.nombre}}</h6>

<img class="img-thumbnail" [src]="hospitalSeleccionado.img | imagen:'hospitales'"/>

</div>
</div>
</div>

</div>
Loading

0 comments on commit ed59f1a

Please sign in to comment.