private void SetPermisos( ValidacionesRequisicionViewModel validacionActual, string currentUserName, bool isAdmin = false, bool isCanceled = false) { if (validacionActual == null) { return; } if (isCanceled) { return; } if (!isAdmin) { if (currentUserName != string.Empty) { if (validacionActual.UserName?.ToUpper() != currentUserName?.ToUpper()) { validacionActual.CanApprove = false; validacionActual.CanDeny = false; validacionActual.CanCancel = false; return; } } } switch (validacionActual.NivelValidacion) { case ENivelValidacion.Requeridor: validacionActual.CanApprove = false; validacionActual.CanCancel = false; validacionActual.CanDeny = false; break; case ENivelValidacion.Presupuesto: case ENivelValidacion.DireccionGeneral: validacionActual.CanApprove = true; validacionActual.CanDeny = true; validacionActual.CanCancel = true; break; default: validacionActual.CanApprove = true; validacionActual.CanDeny = true; validacionActual.CanCancel = false; break; } validacionActual.StateValidation = EEstadoValidacion.Actual; }
public async Task <List <ValidacionesRequisicionViewModel> > AprobacionAsync( int idRequisicion, string userNameRequeridor, string motivoIngresoDescripcion, ValidacionesRequisicionViewModel validacion) { var validaciones = await this.GetMatrizAprobacionAsync( userNameRequeridor, idRequisicion, motivoIngresoDescripcion).ConfigureAwait(false); var requisicionToValidate = new RequisicionPlazaViewModel { UserRequisicion = userNameRequeridor, Validaciones = this.mapper.Map <List <ValidacionRequisicionPlaza> >(validaciones), ToValidate = validacion }; var matrizAprobacion = await this.ValidarRequisicionAsync(requisicionToValidate).ConfigureAwait(false); var result = await this.AlmacenarCambiosAsync(idRequisicion, userNameRequeridor, matrizAprobacion) .ConfigureAwait(false); var toValidate = result.FirstOrDefault(v => v.StateValidation == EEstadoValidacion.Actual); var validated = validacion; switch (validacion.StateValidation) { case EEstadoValidacion.Cancelado: await this.NotificarAsync(idRequisicion, validated, toValidate, ETipoEvento.NotificarCancelacion) .ConfigureAwait(false); break; case EEstadoValidacion.Rechazada: await this.NotificarAsync(idRequisicion, validated, toValidate, ETipoEvento.NotificarRechazo) .ConfigureAwait(false); break; case EEstadoValidacion.Aprobada: var tipoEvento = validaciones.Any(v => v.EstadoValidacion == EEstadoValidacion.Rechazada) ? ETipoEvento.SolicitarAutorizacion : ETipoEvento.SolicitarAutorizacion; await this.NotificarAsync(idRequisicion, validated, toValidate, tipoEvento).ConfigureAwait(false); break; } return(result); }
private async Task <bool> NotificarAsync( int idRequisicion, ValidacionesRequisicionViewModel validated, ValidacionesRequisicionViewModel toValidate, ETipoEvento tipoNotificacion) { User user = null; string toEmail = null; if (toValidate != null) { user = await this.userService.GetUserByUserNameAsync(toValidate.UserName).ConfigureAwait(false); } else { var coordinadorRS = this.configuracionGlobal.Configuration <string>("UserCoordinadorRS"); user = await this.userService.GetUserByUserNameAsync(coordinadorRS).ConfigureAwait(false); if (tipoNotificacion == ETipoEvento.SolicitarAutorizacion) { return(true); } } toEmail = user.Mail; var notificacion = new NotificacionViewModel { ToMail = new List <string> { toEmail }, TipoEvento = tipoNotificacion, Item = new { user, idRequisicion, tipoNotificacion, fecha = DateTime.Now, comentario = validated?.Description } }; return(await this.notificarService.NotificarAsync(notificacion).ConfigureAwait(false)); }
public async Task <ActionResult> Put( int idRequisicion, [FromBody] ValidacionesRequisicionViewModel validacion = null) { try { var requisicion = this.requisicionService.Single(new RequisicionSpecification(idRequisicion)); if (validacion == null) { if (requisicion.ValidaRequisiciones.Any()) { var toValidate = requisicion.ValidaRequisiciones.FirstOrDefault( v => v.NivelValidacion == ENivelValidacion.Requeridor); validacion = new ValidacionesRequisicionViewModel { Active = toValidate.Active, Date = DateTime.Now, Description = toValidate.Comentario, Id = toValidate.Id, Info = toValidate.UserValidador?.ToString(), Name = toValidate.NivelValidacion.GetDescription(), NivelValidacion = toValidate.NivelValidacion, StateValidation = EEstadoValidacion.Aprobada, UserName = toValidate.AprobadorUserName }; await this.autorizacionService.AprobacionAsync( idRequisicion, requisicion.UserRequeridor, requisicion.MotivoIngreso.Descripcion, validacion) .ConfigureAwait(true); } else { await this.autorizacionService.SolicitarAutorizacionAsync( idRequisicion, requisicion.UserRequeridor, requisicion.MotivoIngreso.Descripcion) .ConfigureAwait(true); } } else { await this.autorizacionService.AprobacionAsync( idRequisicion, requisicion.UserRequeridor, requisicion.MotivoIngreso.Descripcion, validacion) .ConfigureAwait(true); } await this.requisicionService.SetAsignacionAsync(requisicion, null, false) .ConfigureAwait(false); return(this.Ok()); } catch (Exception e) { return(this.BadRequest(e.Message)); } }