diff --git a/modules/rup/internacion/resumen/internacion-resumen.routes.ts b/modules/rup/internacion/resumen/internacion-resumen.routes.ts index c87cf86b99..ad3405d810 100644 --- a/modules/rup/internacion/resumen/internacion-resumen.routes.ts +++ b/modules/rup/internacion/resumen/internacion-resumen.routes.ts @@ -1,6 +1,8 @@ import { MongoQuery, ResourceBase } from '@andes/core'; import { Auth } from '../../../../auth/auth.class'; import { IInternacionResumen, IInternacionResumenDoc, InternacionResumen } from './internacion-resumen.schema'; +import * as mongoose from 'mongoose'; +import moment = require('moment'); class InternacionResumenController extends ResourceBase { Model = InternacionResumen; @@ -50,6 +52,117 @@ class InternacionResumenController extends ResourceBase export const InternacionResumenCtr = new InternacionResumenController({}); export const InternacionResumenRouter = InternacionResumenCtr.makeRoutes(); +InternacionResumenRouter.get('/listado-internacion', Auth.authenticate(), async (req, res, next) => { + let pipeline = []; + const match = {}; + if (req.query.ingreso) { + const [ingresoDesde, ingresoHasta] = req.query.ingreso.split('|'); + match['fechaIngreso'] = { + $gte: moment(ingresoDesde).startOf('day').toDate(), + $lte: moment(ingresoHasta).endOf('day').toDate() + }; + } + if (req.query.egreso) { + const [egresoDesde, egresoHasta] = req.query.ingreso.split('|'); + match['fechaEgreso'] = { + $gte: moment(egresoDesde).startOf('day').toDate(), + $lte: moment(egresoHasta).endOf('day').toDate() + }; + } + + match['organizacion.id'] = mongoose.Types.ObjectId(req.query.idOrganizacion); + pipeline = [ + { + $match: match + }, + { + $lookup: { + from: 'internacionCamaEstados', + localField: '_id', + foreignField: 'estados.idInternacion', + as: 'estadosCama' + } + }, + { + $lookup: { + from: 'internacionSalaComunMovimientos', + localField: '_id', + foreignField: 'idInternacion', + as: 'estadosSala' + } + }, + { + $addFields: { + estadosSala: { + $cond: { + if: { $gt: [{ $size: '$estadosSala' }, 0] }, + then: { $arrayElemAt: ['$estadosSala', -1] }, + else: '$$REMOVE' + } + } + } + }, + { + $unwind: { + path: '$estadosCama', + preserveNullAndEmptyArrays: true + } + }, + { + $addFields: { + estadosCama: { $arrayElemAt: ['$estadosCama.estados', -1] } + } + }, + { + $addFields: { + estadosCama: { + $cond: { + if: { $eq: ['$estadosCama', null] }, + then: '$$REMOVE', + else: '$estadosCama' + } + } + } + }, + { + $match: { + $or: [ + { 'estadosCama.extras.ingreso': true }, + { 'estadosCama.extras.egreso': true }, + { 'estadosSala.extras.ingreso': true }, + { 'estadosSala.extras.egreso': true } + ] + } + }, + { + $lookup: { + from: 'prestaciones', + localField: 'idPrestacion', + foreignField: '_id', + as: 'idPrestacion' + } + }, + { + $unwind: { + path: '$idPrestacion', + preserveNullAndEmptyArrays: true + } + }, + { + $addFields: { + idPrestacion: { + $mergeObjects: [ + '$idPrestacion', + { id: '$idPrestacion._id' } + ] + } + } + } + ]; + const listado = await InternacionResumen.aggregate(pipeline); + return res.json(listado); +}); + function deepSearch(registros: any[]) { for (let i = 0; i < registros.length; i++) {