示例#1
0
        public async Task Execute(Guid declaracionID)
        {
            var declaracion = await _declaracionReadOnlyRepository.Get(declaracionID, true);

            var gestiones = await _gestionReadOnlyRepository.GetAll();

            var gestionVigente = gestiones.Where(c => c.Vigente).FirstOrDefault();

            declaracion.CambiarEstado(EstadoDeclaracion.Anulada);
            await _declaracionWriteOnlyRepository.UpdateEstado(declaracionID, EstadoDeclaracion.Anulada);

            var declaracionAnterior = declaracion.DeclaracionAnterior != null ?
                                      declaracion.DeclaracionAnterior :
                                      Declaracion.Load(Guid.NewGuid(), declaracion.FuncionarioID, Gestion.For(gestionVigente.Anio, gestionVigente.FechaInicio, gestionVigente.FechaFinal, gestionVigente.Vigente),
                                                       DateTime.Now, EstadoDeclaracion.Pendiente,
                                                       new DepositoCollection(), new DeudaBancariaCollection(), new InmuebleCollection(), new OtroIngresoCollection(),
                                                       new ValorNegociableCollection(), new VehiculoCollection(), null);
            var declaracionNueva = Declaracion.Load(Guid.NewGuid(), declaracionAnterior.FuncionarioID, Gestion.For(gestionVigente.Anio, gestionVigente.FechaInicio, gestionVigente.FechaFinal, gestionVigente.Vigente),
                                                    DateTime.Now, EstadoDeclaracion.Pendiente, declaracionAnterior.Depositos, declaracionAnterior.DeudasBancarias, declaracionAnterior.Inmuebles,
                                                    declaracionAnterior.OtrosIngresos, declaracionAnterior.ValoresNegociables, declaracionAnterior.Vehiculos, declaracionAnterior);

            await _declaracionWriteOnlyRepository.Add(declaracionNueva);

            foreach (var item in declaracionAnterior.Depositos.GetItems())
            {
                await _depositoWriteOnlyRepository.Add(new Domain.Depositos.DepositoMayor10K(declaracionNueva.ID, item.InstitucionFinanciera, item.TipoDeCuenta, item.Saldo));
            }
            foreach (var item in declaracionAnterior.Inmuebles.GetItems())
            {
                await _inmuebleWriteOnlyRepository.Add(new Domain.Inmuebles.Inmueble(declaracionNueva.ID, item.Direccion, item.TipoDeInmueble, item.PorcentajeParticipacion,
                                                                                     item.ValorComercial, item.SaldoHipoteca, item.Banco));
            }
            foreach (var item in declaracionAnterior.Vehiculos.GetItems())
            {
                await _vehiculoWriteOnlyRepository.Add(new Domain.Vehiculos.Vehiculo(declaracionNueva.ID, item.Marca, item.TipoVehiculo, item.Anio, item.ValorAproximado, item.SaldoDeudor, item.Banco));
            }
            foreach (var item in declaracionAnterior.OtrosIngresos.GetItems())
            {
                await _otroIngresoWriteOnlyRepository.Add(new Domain.OtrosIngresos.OtroIngreso(declaracionNueva.ID, item.Concepto, item.IngresoMensual));
            }
            foreach (var item in declaracionAnterior.ValoresNegociables.GetItems())
            {
                await _valorNegociableWriteOnlyRepository.Add(new Domain.ValoresNegociables.ValorNegociableMayor10K(declaracionNueva.ID, item.Descripcion, item.TipoValor, item.ValorAproximado));
            }
            foreach (var item in declaracionAnterior.DeudasBancarias.GetItems())
            {
                await _deudaBancariaWriteOnlyRepository.Add(new Domain.DeudasBancarias.DeudaBancariaMayor10K(declaracionNueva.ID, item.InstitucionFinanciera, item.Monto, item.Tipo));
            }
        }
示例#2
0
        public async Task <bool> Execute(string webServerURL, string fromAddress)
        {
            var queueItems = await _getNotificationQUserCase.ExecuteList(QueueStatus.Queued);

            var result = false;

            foreach (var item in queueItems)
            {
                try
                {
                    var userProfile = await _funcionarioUsuarioReadOnlyRepository.Get(item.UserName);

                    if (userProfile == null)
                    {
                        throw new ApplicationException($"El usuario {item.UserName} no tiene un Funcionario asociado");
                    }
                    var cabeceraNotificacion = new CabeceraEmailOutput(fromAddress, userProfile.Email, String.Empty, "SRDP - Se ha creado un nuevo formulario de Declaración Patrimonial para su usuario", DateTime.Now);
                    var gestionVigente       = await _getGestionesUserCase.GestionVigente();

                    var declaracion = new Declaracion(item.FuncionarioID,
                                                      new Gestion(gestionVigente.Anio, gestionVigente.FechaInicio, gestionVigente.FechaFinal, gestionVigente.Vigente), DateTime.Now, EstadoDeclaracion.Nueva);
                    await _declaracionWriteOnlyRepository.Add(declaracion);

                    string mensaje      = CreateMensajeBody(webServerURL, declaracion);
                    var    notificacion = new Notificacion(item.FuncionarioID, TipoNotificacion.Email, cabeceraNotificacion.JsonSerialize(), mensaje, false, false);

                    await _sendNotificacionUserCase.Execute(new NotificacionOutput(notificacion.ID, notificacion.FuncionarioID, notificacion.TipoNotificacion.ToString(),
                                                                                   notificacion.Cabecera, notificacion.Mensaje, notificacion.Procesado, notificacion.Leido, notificacion.FechaCreacion, notificacion.FechaModificacion));

                    var notificacionProcesada = await _updateNotificationQUserCase.Execute(new NotificacionQueueItem(item.FuncionarioID, item.UserName, ActionType.Alta, QueueStatus.Processed));

                    var queueItem = NotificacionQueueItem.Load(item.ID, item.FuncionarioID, item.UserName, ActionType.Alta, QueueStatus.Processed, item.CreateDate, DateTime.Now, String.Empty);
                    await _updateNotificationQUserCase.Execute(queueItem);

                    result = result && true;
                }
                catch (Exception ex)
                {
                    var queueItem = NotificacionQueueItem.Load(item.ID, item.FuncionarioID, item.UserName, ActionType.Alta, QueueStatus.Error, item.CreateDate, DateTime.Now, ex.Message);
                    await _updateNotificationQUserCase.Execute(queueItem);

                    throw;
                }
            }
            return(result);
        }