Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        private async Task <List <ValidaRequisicion> > ValidarRequisicionAsync(RequisicionPlazaViewModel requisicion)
        {
            var urlApi = this.configuracionGlobal.Configuration <string>("AutorizacionAPI");

            var response = await HttpRequestFactory.PutAsync($"{urlApi}/api/Autorizacion", requisicion)
                           .ConfigureAwait(false);

            var strResult = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            var validaciones = JsonConvert.DeserializeObject <List <ValidaRequisicion> >(strResult);

            return(validaciones);
        }
Exemplo n.º 3
0
        public async Task <List <ValidacionesRequisicionViewModel> > SolicitarAutorizacionAsync(
            int idRequisicion,
            string userName,
            string motivoIngreso)
        {
            var validaciones = await this.GetMatrizAprobacionAsync(userName, idRequisicion, motivoIngreso)
                               .ConfigureAwait(false);

            var requisicionToValidate = new RequisicionPlazaViewModel
            {
                UserRequisicion = userName,
                Validaciones    = this.mapper?.Map <List <ValidacionRequisicionPlaza> >(validaciones),
                ToValidate      = null
            };

            var matrizAprobacion = await this.ValidarRequisicionAsync(requisicionToValidate).ConfigureAwait(false);

            var result = await this.AlmacenarCambiosAsync(idRequisicion, userName, matrizAprobacion)
                         .ConfigureAwait(false);

            var toValidate = result.FirstOrDefault(v => v.StateValidation == EEstadoValidacion.Actual);

            if (toValidate != null)
            {
                await this.NotificarAsync(idRequisicion, null, toValidate, ETipoEvento.SolicitarAutorizacion)
                .ConfigureAwait(false);
            }
            else
            {
                var aceptadas = result.All(v => v.StateValidation == EEstadoValidacion.Aprobada);
                toValidate = result.OrderByDescending(v => v.Date).FirstOrDefault();

                if (aceptadas)
                {
                    await this.NotificarAsync(idRequisicion, null, toValidate, ETipoEvento.NotificarAceptacion)
                    .ConfigureAwait(false);
                }
            }

            return(result.OrderBy(x => x.NivelValidacion).ToList());
        }