示例#1
0
        public string ChangeEstadoPauta(int pautaId, string est, string motivo)
        {
            var pauta = PdmContext.Pautas.Single(e => e.Id == pautaId);

            try
            {
                var estado = (EstadoPauta)Enum.Parse(typeof(EstadoPauta), est);

                pauta.Estado     = estado;
                pauta.UpdateDate = DateTime.Now;
                pauta.UpdatedBy  = UsuarioLogged;

                if (pauta.Campania.Pautas.All(e => e.Estado == estado))
                {
                    pauta.Campania.UpdateDate = DateTime.Now;
                    pauta.Campania.UpdatedBy  = UsuarioLogged;
                    pauta.Campania.Estado     = estado == EstadoPauta.Aprobada ? EstadoCampania.Aprobada : EstadoCampania.Rechazada;
                }

                SyncEstadoPautas(new List <Pauta> {
                    pauta
                }, (estado == EstadoPauta.Aprobada ? 1 : 0), motivo);
                PdmContext.SaveChanges();
                LogChangeEstadoPautaInfo(pauta, est, motivo);
            }
            catch (Exception ex)
            {
                LogChangeEstadoPautaError(pauta, est, motivo, ex);
                throw;
            }

            return(pauta.Campania.Estado.ToString());
        }
        private void InitTarifario(Tarifario entity, double?importe = null, string oi = null)
        {
            var tarifas = FCMediosClient.Get <IList <TarifaFcMedios> >(GetTarifasAction)
                          .Where(e => e.cod_vehiculo == entity.Vehiculo.Codigo).ToList();

            var actualMedios    = PdmContext.Medios.ToList();
            var actualPlazas    = PdmContext.Plazas.ToList();
            var actualVehiculos = PdmContext.Vehiculos.ToList();

            #region Tarifas

            var toAdd = new List <Entities.Tarifa>();

            tarifas.ForEach(t =>
            {
                var medio    = actualMedios.Single(e => e.Codigo == t.cod_medio);
                var plaza    = actualPlazas.Single(e => e.Codigo == t.cod_plaza);
                var vehiculo = actualVehiculos.Single(e => e.Codigo == t.cod_vehiculo);

                toAdd.Add(new Entities.Tarifa
                {
                    CodigoPrograma = t.cod_programa,
                    Descripcion    = t.espacio,
                    HoraDesde      = t.hora_inicio,
                    HoraHasta      = t.hora_fin,
                    Importe        = importe ?? t.bruto,
                    OrdenDeCompra  = oi,
                    ImporteOld     = t.bruto,
                    Lunes          = t.Lunes,
                    Martes         = t.Martes,
                    Miercoles      = t.Miercoles,
                    Jueves         = t.Jueves,
                    Viernes        = t.Viernes,
                    Sabado         = t.Sabado,
                    Domingo        = t.Domingo,
                    Medio          = medio,
                    Plaza          = plaza,
                    Tarifario      = entity,
                    Vehiculo       = vehiculo,
                    CreateDate     = DateTime.Now,
                    CreatedBy      = App.ImportUser,
                    Enabled        = true,
                    Estado         = t.bruto > 0 ? EstadoTarifa.PendienteAprobacion : EstadoTarifa.SinTarifaAsociada
                });
            });

            entity.Estado = toAdd.All(tt => tt.Estado == EstadoTarifa.PendienteAprobacion)
                 ? EstadoTarifario.PendienteAprobacion
                 : EstadoTarifario.Editable;

            PdmContext.Configuration.AutoDetectChangesEnabled = false;
            toAdd.ForEach(e => PdmContext.Tarifas.Add(e));

            PdmContext.SaveChanges();
            PdmContext.Configuration.AutoDetectChangesEnabled = true;
            PdmContext = new PDMContext();

            #endregion
        }
        public override Dtos.Tarifario Update(Dtos.Tarifario dto)
        {
            Validate(dto);
            var entity = ToEntity(dto);

            PdmContext.SaveChanges();
            SaveFile(entity.Id);
            return(Mapper.Map <Entities.Tarifario, Dtos.Tarifario>(entity));
        }
        public void Aprobar(int tarifarioId)
        {
            var entity = default(Entities.Tarifario);

            try
            {
                entity = PdmContext.Tarifarios.Single(c => c.Id == tarifarioId);

                entity.Estado     = EstadoTarifario.Aprobado;
                entity.UpdatedBy  = UsuarioLogged;
                entity.UpdateDate = DateTime.Now;

                entity.Tarifas.ForEach(t =>
                {
                    t.Estado     = EstadoTarifa.Aprobada;
                    t.UpdatedBy  = UsuarioLogged;
                    t.UpdateDate = DateTime.Now;
                });

                var tarifasFcMedios = entity.Tarifas
                                      .Select(t => new TarifaFcMediosUpdate
                {
                    cod_programa = t.CodigoPrograma,
                    bruto        = t.Importe,
                    descuento_1  = 0,
                    descuento_2  = 0,
                    descuento_3  = 0,
                    descuento_4  = 0,
                    descuento_5  = 0,
                    fecha_tarifa = entity.FechaDesde.ToString("yyyy-MM-dd 00:00:00"),
                }).ToList();

                new TarifasAdmin().SyncTarifas(tarifasFcMedios);

                PdmContext.SaveChanges();
                LogAprobarInfo(entity);
            }
            catch (Exception ex)
            {
                LogAprobarError(entity, ex);
                throw;
            }
        }
        public override void Delete(int id)
        {
            var entity = default(Entities.Tarifario);

            try
            {
                entity = PdmContext.Tarifarios.Single(c => c.Id == id);

                entity.Estado     = EstadoTarifario.Eliminado;
                entity.UpdatedBy  = UsuarioLogged;
                entity.UpdateDate = DateTime.Now;
                PdmContext.SaveChanges();

                LogDeleteInfo(entity);
            }
            catch (Exception ex)
            {
                LogDeleteError(entity, ex);
                throw;
            }
        }
        public override Dtos.Tarifario Create(Dtos.Tarifario dto)
        {
            Validate(dto);

            var entity = ToEntity(dto);

            PdmContext.Tarifarios.Add(entity);
            PdmContext.SaveChanges();

            try
            {
                InitTarifario(entity, dto.Importe, dto.OrdenDeCompra);
                SaveFile(entity.Id);
            }
            catch (Exception ex)
            {
                PdmContext.Tarifarios.Remove(entity);
                PdmContext.SaveChanges();
                LogCreateError(dto, ex);
                throw;
            }

            var lastTarifario = PdmContext.Tarifarios.Where(e => e.Estado != EstadoTarifario.Eliminado &&
                                                            e.Vehiculo.Id == dto.Vehiculo.Id && e.Id != entity.Id)
                                .OrderByDescending(e => e.Id)
                                .FirstOrDefault();

            if (lastTarifario != null)
            {
                lastTarifario.Estado     = EstadoTarifario.Cerrado;
                lastTarifario.UpdateDate = DateTime.Now;
                lastTarifario.UpdatedBy  = UsuarioLogged;
            }

            PdmContext.SaveChanges();
            dto = Mapper.Map <Tarifario, Dtos.Tarifario>(entity);
            LogCreateInfo(dto);

            return(dto);
        }
示例#7
0
        public void ChangeEstadoCampania(Dtos.Campania campaniaDto, string est, string motivo)
        {
            var campania = default(Entities.Campania);

            try
            {
                campania = PdmContext.Campanias.Single(e => e.Id == campaniaDto.Id);
                var estado = (EstadoCampania)Enum.Parse(typeof(EstadoCampania), est);

                campania.Centro            = campaniaDto.Centro;
                campania.Almacen           = campaniaDto.Almacen;
                campania.Orden             = campaniaDto.Orden;
                campania.CentroDestino     = campaniaDto.CentroDestino;
                campania.AlmacenDestino    = campaniaDto.AlmacenDestino;
                campania.IdSapDistribucion = campaniaDto.IdSapDistribucion;

                campania.UpdateDate = DateTime.Now;
                campania.UpdatedBy  = UsuarioLogged;
                campania.Estado     = estado;

                campania.Pautas.ForEach(p =>
                {
                    p.UpdateDate = DateTime.Now;
                    p.UpdatedBy  = UsuarioLogged;
                    p.Estado     = estado == EstadoCampania.Aprobada ? EstadoPauta.Aprobada : EstadoPauta.Rechazada;
                });

                SyncEstadoPautas(campania.Pautas, (estado == EstadoCampania.Aprobada ? 1 : 0), motivo);
                PdmContext.SaveChanges();

                LogChangeEstadoCampaniaInfo(campania, est, motivo);
            }
            catch (Exception ex)
            {
                LogChangeEstadoCampaniaError(campania, est, motivo, ex);
                throw;
            }
        }
示例#8
0
        public override Dtos.Tarifa Update(Dtos.Tarifa dto)
        {
            var entity = ToEntity(dto);

            try
            {
                if (entity.Tarifario.Estado == EstadoTarifario.Editable &&
                    entity.Tarifario.Tarifas.All(t => t.Estado == EstadoTarifa.PendienteAprobacion))
                {
                    entity.Tarifario.Estado = EstadoTarifario.PendienteAprobacion;
                }

                PdmContext.SaveChanges();
                LogUpdateInfo(dto);
            }
            catch (Exception ex)
            {
                LogUpdateError(dto, ex);
                throw;
            }

            return(Mapper.Map <Entities.Tarifa, Dtos.Tarifa>(entity));
        }
示例#9
0
        public void SetValues(FilterTarifas filter, double?importe = null, int?oc = null, bool takeOld = false)
        {
            var tarifas         = GetQuery(filter).OfType <Tarifa>().ToList();
            var tarifario       = PdmContext.Tarifarios.Single(e => e.Id == filter.TarifarioId);
            var tarifasFcMedios = new List <TarifaFcMediosUpdate>();

            tarifas.ForEach(t =>
            {
                if (importe.HasValue)
                {
                    t.Importe = importe.Value;
                }

                if (oc.HasValue)
                {
                    t.OrdenDeCompra = oc.Value.ToString();
                }

                if (takeOld)
                {
                    t.Importe = t.ImporteOld;
                }

                t.Estado     = t.Importe > 0 ? EstadoTarifa.PendienteAprobacion : EstadoTarifa.SinTarifaAsociada;
                t.UpdateDate = DateTime.Now;
                t.UpdatedBy  = UsuarioLogged;

                if (t.Importe > 0)
                {
                    tarifasFcMedios.Add(new TarifaFcMediosUpdate
                    {
                        cod_programa = t.CodigoPrograma,
                        bruto        = t.Importe,
                        descuento_1  = 0,
                        descuento_2  = 0,
                        descuento_3  = 0,
                        descuento_4  = 0,
                        descuento_5  = 0,
                        fecha_tarifa = tarifario.FechaDesde.ToString("yyyy-MM-dd 00:00:00"),
                    });
                }
            });

            #region Sync

            if (takeOld)
            {
                SyncTarifas(tarifasFcMedios);
            }

            #endregion

            EFBatchOperation.For(PdmContext, PdmContext.Tarifas).UpdateAll(tarifas, x => x.ColumnsToUpdate(t => t.Importe, t => t.OrdenDeCompra, t => t.UpdateDate, t => t.UpdatedBy, t => t.Estado));

            if (!takeOld)
            {
                tarifario.Estado = tarifario.Tarifas.All(tt => tt.Estado == EstadoTarifa.PendienteAprobacion)
                    ? EstadoTarifario.PendienteAprobacion
                    : EstadoTarifario.Editable;
            }

            PdmContext.SaveChanges();
        }
        public void ConfirmarAprobacion(IList <ConfirmaionSap> confirmaciones)
        {
            var aprobacionesSapId = confirmaciones.Select(e => e.IdOrigen).ToList();
            var aprobaciones      = PdmContext.AprobacionesSap.Where(e => aprobacionesSapId.Contains(e.Id)).ToList();
            var aprobacionesId    = aprobaciones.Select(e => e.Id).ToList();
            var diff = aprobacionesSapId.Except(aprobacionesId).ToList();

            #region Validation

            if (confirmaciones.Any(e => e.IdOrigen == 0))
            {
                throw new Exception(string.Format("El campo idOrigen es obligatorio "));
            }

            if (confirmaciones.Any(e => string.IsNullOrEmpty(e.Resultado)))
            {
                throw new Exception(string.Format("El campo resultado es obligatorio "));
            }

            if (confirmaciones.Any(e => !e.Metodo.HasValue))
            {
                throw new Exception(string.Format("El campo metodo es obligatorio "));
            }

            if (diff.Any())
            {
                throw new Exception(string.Format("Los siguientes idOrigen no exiten en el sistema: {0}", string.Join(", ", diff)));
            }

            if (confirmaciones.Any(e => !string.Equals(e.Resultado, "Confirmada") && !string.Equals(e.Resultado, "Error")))
            {
                throw new Exception(string.Format("Revise el valor ingresado en el campo resultado. Los valores posibles son: Confirmada y Error"));
            }

            if (confirmaciones.Any(e => e.Metodo != MetodoSap.Certificacion && e.Metodo != MetodoSap.Consumo && e.Metodo != MetodoSap.Provision))
            {
                throw new Exception(string.Format("Revise el valor ingresado en el campo metodo. Los valores posibles son: Certificacion, Consumo y Provision"));
            }

            #endregion

            confirmaciones.ForEach(confirmacion =>
            {
                var aprobacion        = aprobaciones.Single(e => e.Id == confirmacion.IdOrigen);
                aprobacion.MensajeSap = confirmacion.Mensaneje;

                switch (confirmacion.Metodo.Value)
                {
                case MetodoSap.Certificacion:
                    aprobacion.IdReferenciaCertificacion      = confirmacion.IdSap;
                    aprobacion.FechaConfirmacionCertificacion = DateTime.Now;
                    aprobacion.EstadoCertificacion            = string.Equals(confirmacion.Resultado, "Confirmada") ? EstadoAprobacionSap.Confirmada : EstadoAprobacionSap.Error;
                    break;

                case MetodoSap.Consumo:
                    aprobacion.IdReferenciaConsumo      = confirmacion.IdSap;
                    aprobacion.FechaConfirmacionConsumo = DateTime.Now;
                    aprobacion.EstadoConsumo            = string.Equals(confirmacion.Resultado, "Confirmada") ? EstadoAprobacionSap.Confirmada : EstadoAprobacionSap.Error;
                    break;

                case MetodoSap.Provision:
                    aprobacion.IdReferenciaProvision      = confirmacion.IdSap;
                    aprobacion.FechaConfirmacionProvision = DateTime.Now;
                    aprobacion.EstadoProvision            = string.Equals(confirmacion.Resultado, "Confirmada") ? EstadoAprobacionSap.Confirmada : EstadoAprobacionSap.Error;
                    break;
                }
            });

            PdmContext.SaveChanges();
        }
示例#11
0
        public void SyncCertificaciones()
        {
            LogSyncCertificacionesInit();

            try
            {
                var pautas = PdmContext.Pautas.Where(e => e.Estado == EstadoPauta.Aprobada).Select(e => new { nro_pauta_aprobada = e.Codigo }).ToList();

                var certificaciones  = FCMediosClient.Post <IList <CertificacionFcMedios> >(GetCertificaciones, pautas).ToList();
                var campaniasCodigos = certificaciones.Select(e => e.cod_campania).Distinct().ToList();
                var campanias        = PdmContext.Campanias.Where(e => campaniasCodigos.Contains(e.Codigo)).ToList();

                LogSyncCertificacionesDetail(certificaciones);

                certificaciones.ForEach(c =>
                {
                    var campania = campanias.SingleOrDefault(e => c.cod_campania == e.Codigo);

                    var certificacion = PdmContext.Certificaciones.FirstOrDefault(e =>
                                                                                  string.Equals(e.PautaCodigo, c.nro_pauta_aprobada) &&
                                                                                  string.Equals(e.PautaEjecutadaCodigo, c.nro_pauta_ejecutada) &&
                                                                                  e.Campania.Codigo == c.cod_campania &&
                                                                                  e.CodigoPrograma == c.cod_programa);

                    if (certificacion != null && certificacion.Estado == EstadoCertificacion.Aceptada)
                    {
                        return;
                    }

                    if (certificacion == null)
                    {
                        certificacion = new Entities.Certificacion
                        {
                            Campania             = campania,
                            CodigoAviso          = c.cod_aviso,
                            CodigoPrograma       = c.cod_programa,
                            CostoUnitario        = c.costo_unitario,
                            CreateDate           = DateTime.Now,
                            CreatedBy            = App.ImportUser,
                            Descuento1           = c.descuento_1,
                            Descuento2           = c.descuento_2,
                            Descuento3           = c.descuento_3,
                            Descuento4           = c.descuento_4,
                            Descuento5           = c.descuento_5,
                            DuracionTema         = c.duracion_tema,
                            Enabled              = true,
                            Espacio              = c.espacio,
                            FechaAviso           = c.fecha_aviso,
                            PautaCodigo          = c.nro_pauta_aprobada,
                            PautaEjecutadaCodigo = c.nro_pauta_ejecutada,
                            ProveedorCodigo      = c.cod_proveedor,
                            ProveedorNombre      = c.des_proveedor,
                            Tema     = c.des_tema,
                            Producto = c.des_producto
                        };
                    }

                    var estado    = EstadoCertificacion.Aceptada;
                    var pautaItem = PdmContext.PautasItem.FirstOrDefault(i =>
                                                                         i.CodigoPrograma == c.cod_programa &&
                                                                         i.Pauta.Codigo == c.nro_pauta_aprobada &&
                                                                         i.Pauta.Campania.Id == campania.Id);

                    if (campania == null)
                    {
                        estado = EstadoCertificacion.CampaniaNoRegistrada;
                    }
                    else if (campania.Estado == EstadoCampania.Cerrada)
                    {
                        estado = EstadoCertificacion.CampaniaCerrada;
                    }
                    else if (pautaItem == null)
                    {
                        estado = EstadoCertificacion.ProgramaNoPautado;
                    }
                    else if (campania.Estado != EstadoCampania.Cerrada && campania.Estado != EstadoCampania.Aprobada)
                    {
                        estado = EstadoCertificacion.CampaniaNoAprobada;
                    }

                    certificacion.Estado = estado;

                    if (certificacion.Id == 0)
                    {
                        PdmContext.Certificaciones.Add(certificacion);
                    }

                    if (pautaItem == null)
                    {
                        return;
                    }

                    var codProgramas = pautaItem.Pauta.Items.Select(e => e.CodigoPrograma).ToList();

                    if (codProgramas.All(cp => PdmContext.Certificaciones.Any(e => e.CodigoPrograma == cp && e.Estado == EstadoCertificacion.Aceptada)))
                    {
                        pautaItem.Pauta.Estado      = EstadoPauta.Cerrada;
                        pautaItem.Pauta.FechaCierre = DateTime.Now;
                    }

                    if (pautaItem.Pauta.Campania.Pautas.All(e => e.Estado == EstadoPauta.Cerrada))
                    {
                        pautaItem.Pauta.Campania.Estado      = EstadoCampania.Cerrada;
                        pautaItem.Pauta.Campania.FechaCierre = DateTime.Now;
                    }
                });

                //PdmContext.Configuration.AutoDetectChangesEnabled = false;
                PdmContext.SaveChanges();
                //PdmContext.Configuration.AutoDetectChangesEnabled = true;
                //PdmContext = new PDMContext();
            }
            catch (Exception ex)
            {
                LogSyncCertificacionesError(ex);
                LogSyncCertificacionesEnd();
                throw;
            }

            LogSyncCertificacionesEnd();
        }
示例#12
0
 public GsmRepository(PdmContext ctx, ILogger <GsmRepository> logger)
 {
     _ctx    = ctx;
     _logger = logger;
 }
示例#13
0
 public AdminRepository(PdmContext ctx, ILogger <AdminRepository> logger)
 {
     _ctx    = ctx;
     _logger = logger;
 }
示例#14
0
        public void SyncTablasBasicas(IList <PautaFcMedios> pautas)
        {
            #region Base

            var actualMedios    = PdmContext.Medios.ToList();
            var actualPlazas    = PdmContext.Plazas.ToList();
            var actualVehiculos = PdmContext.Vehiculos.ToList();

            var serviceMedios    = pautas.Select(e => new { Codigo = e.cod_medio, Descripcion = e.des_medio }).Distinct().ToList();
            var servicePlazas    = pautas.Select(e => new { Codigo = e.cod_plaza, Descripcion = e.des_plaza }).Distinct().ToList();
            var serviceVehiculos = pautas.Select(e => new { Codigo = e.cod_vehiculo, Descripcion = e.des_vehiculo }).Distinct().ToList();

            #region Medios

            serviceMedios.ForEach(t =>
            {
                var medio = actualMedios.FirstOrDefault(e => e.Codigo == t.Codigo);

                if (medio == null)
                {
                    medio = new Entities.Medio
                    {
                        Codigo      = t.Codigo,
                        Descripcion = t.Descripcion,
                        Nombre      = t.Descripcion,
                        CreateDate  = DateTime.Now,
                        CreatedBy   = App.ImportUser,
                        Enabled     = true
                    };

                    PdmContext.Medios.Add(medio);
                }
                else
                {
                    medio.Descripcion = t.Descripcion;
                    medio.UpdateDate  = DateTime.Now;
                    medio.UpdatedBy   = App.ImportUser;
                }
            });

            #endregion

            #region Plazas

            servicePlazas.ForEach(t =>
            {
                var plaza = actualPlazas.FirstOrDefault(e => e.Codigo == t.Codigo);

                if (plaza == null)
                {
                    plaza = new Entities.Plaza
                    {
                        Codigo      = t.Codigo,
                        Descripcion = t.Descripcion,
                        CreateDate  = DateTime.Now,
                        CreatedBy   = App.ImportUser,
                        Enabled     = true
                    };

                    PdmContext.Plazas.Add(plaza);
                }
                else
                {
                    plaza.Descripcion = t.Descripcion;
                    plaza.UpdateDate  = DateTime.Now;
                    plaza.UpdatedBy   = App.ImportUser;
                }
            });

            #endregion

            #region Vehiculos

            serviceVehiculos.ForEach(t =>
            {
                var vehiculo = actualVehiculos.FirstOrDefault(e => e.Codigo == t.Codigo);

                if (vehiculo == null)
                {
                    vehiculo = new Entities.Vehiculo
                    {
                        Codigo      = t.Codigo,
                        Descripcion = t.Descripcion,
                        CreateDate  = DateTime.Now,
                        CreatedBy   = App.ImportUser,
                        Enabled     = true,
                        Nombre      = t.Descripcion
                    };

                    PdmContext.Vehiculos.Add(vehiculo);
                }
                else
                {
                    vehiculo.Nombre      = t.Descripcion;
                    vehiculo.Descripcion = t.Descripcion;
                    vehiculo.UpdateDate  = DateTime.Now;
                    vehiculo.UpdatedBy   = App.ImportUser;
                }
            });

            #endregion

            #endregion

            PdmContext.Configuration.AutoDetectChangesEnabled = false;
            PdmContext.SaveChanges();
            PdmContext.Configuration.AutoDetectChangesEnabled = true;
            PdmContext = new PDMContext();
        }
        public void SyncTablasBasicas()
        {
            var serviceSync = PdmContext.ServiceSyncs.FirstOrDefault();

            if (serviceSync != null && !serviceSync.MustSync)
            {
                return;
            }

            if (serviceSync == null)
            {
                serviceSync = new ServiceSync
                {
                    CreateDate = DateTime.Now,
                    Enabled    = true,
                    CreatedBy  = UsuarioLogged
                };

                PdmContext.ServiceSyncs.Add(serviceSync);
            }

            serviceSync.LastBaseTablesSync = DateTime.Now;

            var tarifas = FCMediosClient.Get <IList <TarifaFcMedios> >(GetTarifasAction);

            #region Base

            var actualMedios    = PdmContext.Medios.ToList();
            var actualPlazas    = PdmContext.Plazas.ToList();
            var actualVehiculos = PdmContext.Vehiculos.ToList();

            var serviceMedios    = tarifas.Select(e => new { Codigo = e.cod_medio, Descripcion = e.des_medio }).Distinct().ToList();
            var servicePlazas    = tarifas.Select(e => new { Codigo = e.cod_plaza, Descripcion = e.des_plaza }).Distinct().ToList();
            var serviceVehiculos = tarifas.Select(e => new { Codigo = e.cod_vehiculo, Descripcion = e.des_vehiculo }).Distinct().ToList();

            #region Medios

            serviceMedios.ForEach(t =>
            {
                var medio = actualMedios.FirstOrDefault(e => e.Codigo == t.Codigo);

                if (medio == null)
                {
                    medio = new Entities.Medio
                    {
                        Codigo      = t.Codigo,
                        Descripcion = t.Descripcion,
                        Nombre      = t.Descripcion,
                        CreateDate  = DateTime.Now,
                        CreatedBy   = App.ImportUser,
                        Enabled     = true
                    };

                    PdmContext.Medios.Add(medio);
                }
                else
                {
                    medio.Descripcion = t.Descripcion;
                    medio.UpdateDate  = DateTime.Now;
                    medio.UpdatedBy   = App.ImportUser;
                }
            });

            #endregion

            #region Plazas

            servicePlazas.ForEach(t =>
            {
                var plaza = actualPlazas.FirstOrDefault(e => e.Codigo == t.Codigo);

                if (plaza == null)
                {
                    plaza = new Entities.Plaza
                    {
                        Codigo      = t.Codigo,
                        Descripcion = t.Descripcion,
                        CreateDate  = DateTime.Now,
                        CreatedBy   = App.ImportUser,
                        Enabled     = true
                    };

                    PdmContext.Plazas.Add(plaza);
                }
                else
                {
                    plaza.Descripcion = t.Descripcion;
                    plaza.UpdateDate  = DateTime.Now;
                    plaza.UpdatedBy   = App.ImportUser;
                }
            });

            #endregion

            #region Vehiculos

            serviceVehiculos.ForEach(t =>
            {
                var vehiculo = actualVehiculos.FirstOrDefault(e => e.Codigo == t.Codigo);

                if (vehiculo == null)
                {
                    vehiculo = new Entities.Vehiculo
                    {
                        Codigo      = t.Codigo,
                        Descripcion = t.Descripcion,
                        CreateDate  = DateTime.Now,
                        CreatedBy   = App.ImportUser,
                        Enabled     = true,
                        Nombre      = t.Descripcion
                    };

                    PdmContext.Vehiculos.Add(vehiculo);
                }
                else
                {
                    vehiculo.Nombre      = t.Descripcion;
                    vehiculo.Descripcion = t.Descripcion;
                    vehiculo.UpdateDate  = DateTime.Now;
                    vehiculo.UpdatedBy   = App.ImportUser;
                }
            });

            #endregion

            #endregion

            PdmContext.Configuration.AutoDetectChangesEnabled = false;
            PdmContext.SaveChanges();
            PdmContext.Configuration.AutoDetectChangesEnabled = true;
            PdmContext = new PDMContext();
        }
示例#16
0
        public void SyncCampanias()
        {
            LogSyncCampaniasInit();

            try
            {
                var pautas = FCMediosClient.Get <IList <PautaFcMedios> >(GetPautas).ToList(); //GetPautasMock();
                SyncTablasBasicas(pautas);

                var actualMedios    = PdmContext.Medios.ToList();
                var actualPlazas    = PdmContext.Plazas.ToList();
                var actualVehiculos = PdmContext.Vehiculos.ToList();

                var campanias = pautas.Select(e => new { e.cod_campania, e.des_campania }).Distinct().ToList();

                LogSyncCampaniasDetail(pautas);

                campanias.ForEach(c =>
                {
                    #region Campanias

                    var campania = PdmContext.Campanias.FirstOrDefault(cc => cc.Codigo == c.cod_campania);
                    var pautasWs = pautas.Where(e => string.Equals(e.cod_campania, c.cod_campania)).Select(e => e.nro_pauta).Distinct().ToList();

                    if (campania == null)
                    {
                        campania = new Entities.Campania
                        {
                            CreateDate = DateTime.Now,
                            CreatedBy  = App.ImportUser,
                            Enabled    = true,
                            Estado     = EstadoCampania.Pendiente,
                            Nombre     = c.des_campania,
                            Codigo     = c.cod_campania,
                            Pautas     = new List <Entities.Pauta>()
                        };

                        PdmContext.Campanias.Add(campania);
                    }
                    else if (campania.Estado == EstadoCampania.Cerrada)
                    {
                        SyncEstadoPautas(pautasWs.Select(p => new Entities.Pauta {
                            Codigo = p
                        }).ToList(), 0, Resource.RechazoCampaniaCerrada);
                        LogSyncCampaniasRechazoCampaniaCerrada(campania, pautasWs);
                        return;
                    }

                    #endregion

                    #region Pautas

                    pautasWs.ForEach(pcodigo =>
                    {
                        var pauta = campania.Pautas.SingleOrDefault(ee => string.Equals(ee.Codigo, pcodigo));

                        if (pauta == null)
                        {
                            pauta = new Entities.Pauta
                            {
                                CreateDate = DateTime.Now,
                                CreatedBy  = App.ImportUser,
                                Enabled    = true,
                                Estado     = EstadoPauta.Pendiente,
                                Campania   = campania,
                                Codigo     = pcodigo,
                                Items      = new List <Entities.PautaItem>()
                            };

                            campania.Pautas.Add(pauta);
                        }

                        var items = pautas.Where(e => string.Equals(e.nro_pauta, pcodigo)).ToList();

                        items.ForEach(itemWs =>
                        {
                            var item = pauta.Items.FirstOrDefault(e => string.Equals(e.CodigoPrograma, itemWs.cod_programa));

                            if (item == null)
                            {
                                item = new Entities.PautaItem
                                {
                                    CreateDate     = DateTime.Now,
                                    CreatedBy      = App.ImportUser,
                                    Enabled        = true,
                                    Pauta          = pauta,
                                    CodigoAviso    = itemWs.cod_aviso,
                                    CodigoPrograma = itemWs.cod_programa
                                };

                                pauta.Items.Add(item);
                            }

                            item.Tarifa = PdmContext.Tarifas.FirstOrDefault(e =>
                                                                            e.CodigoPrograma == itemWs.cod_programa &&
                                                                            e.Tarifario.Estado == EstadoTarifario.Aprobado);

                            item.DiferenciaEnMontoTarifas = item.Tarifa != null && item.Tarifa.Importe != itemWs.costo_unitario;
                            item.CostoUnitario            = itemWs.costo_unitario;
                            item.Descuento1 = itemWs.descuento_1;
                            item.Descuento2 = itemWs.descuento_2;
                            item.Descuento3 = itemWs.descuento_3;
                            item.Descuento4 = itemWs.descuento_4;
                            item.Descuento5 = itemWs.descuento_5;

                            item.Rtg1 = itemWs.rtg_1;
                            item.Rtg2 = itemWs.rtg_2;
                            item.Rtg3 = itemWs.rtg_3;
                            item.Cpr1 = itemWs.cpr_1;
                            item.Cpr2 = itemWs.cpr_2;
                            item.Cpr3 = itemWs.cpr_3;

                            item.Tema            = itemWs.des_tema;
                            item.Proveedor       = itemWs.des_proveedor;
                            item.ProveedorCodigo = itemWs.cod_proveedor;
                            item.DuracionTema    = itemWs.duracion_tema;
                            item.Producto        = itemWs.des_producto;
                            item.Espacio         = itemWs.espacio;
                            item.FechaAviso      = itemWs.fecha_aviso;
                        });

                        pauta.Estado = pauta.Items.Any(e => e.Tarifa == null)
                            ? EstadoPauta.ProgramasNoTarifados : pauta.Items.Any(e => e.DiferenciaEnMontoTarifas)
                            ? EstadoPauta.DiferenciaEnMontoTarifas : pauta.Estado;
                    });

                    #endregion

                    #region Inconsistencias

                    campania.Estado = campania.Pautas.Any(e =>
                                                          e.Estado == EstadoPauta.ProgramasNoTarifados ||
                                                          e.Estado == EstadoPauta.DiferenciaEnMontoTarifas)
                            ? EstadoCampania.InconsistenciasEnPautas : campania.Estado;

                    if (campania.Estado == EstadoCampania.InconsistenciasEnPautas)
                    {
                        campania.Pautas.ForEach(p =>
                        {
                            var sinTarifa      = p.Items.Where(i => i.Tarifa == null).Select(i => i.CodigoPrograma).ToList();
                            var diferenteMonto = p.Items.Where(i => i.DiferenciaEnMontoTarifas).Select(i => i.CodigoPrograma).ToList();

                            if (!sinTarifa.Any() && !diferenteMonto.Any())
                            {
                                return;
                            }

                            var motivo = sinTarifa.Any()
                                ? string.Format(Resource.ProgramasNoTarifados, string.Join(",", sinTarifa))
                                : string.Format(Resource.DiferenciaEnMontoTarifas, string.Join(",", diferenteMonto));

                            LogSyncCampaniasRechazoInconsistencias(p, motivo);
                            //   SyncEstadoPautas(new List<Pauta> {p}, 0, motivo);

                            sinTarifa.ForEach(st =>
                            {
                                var tfc       = pautas.First(t => t.cod_programa == st && string.Equals(t.nro_pauta, p.Codigo));
                                var medio     = actualMedios.Single(e => e.Codigo == tfc.cod_medio);
                                var plaza     = actualPlazas.Single(e => e.Codigo == tfc.cod_plaza);
                                var vehiculo  = actualVehiculos.Single(e => e.Codigo == tfc.cod_vehiculo);
                                var tarifario = PdmContext.Tarifarios.SingleOrDefault(tarif =>
                                                                                      tarif.Estado == EstadoTarifario.Aprobado &&
                                                                                      tarif.Vehiculo.Codigo == vehiculo.Codigo);

                                if (tarifario == null)
                                {
                                    return;
                                }

                                var tarifa = new Entities.Tarifa
                                {
                                    CodigoPrograma = tfc.cod_programa,
                                    CreateDate     = DateTime.Now,
                                    CreatedBy      = App.ImportUser,
                                    Descripcion    = tfc.espacio,
                                    Enabled        = true,
                                    HoraDesde      = tfc.hora_inicio,
                                    HoraHasta      = tfc.hora_fin,
                                    Importe        = tfc.costo_unitario,
                                    Plaza          = plaza,
                                    Tarifario      = tarifario,
                                    Vehiculo       = vehiculo,
                                    Medio          = medio,
                                    Nueva          = true
                                };

                                tarifario.Tarifas.Add(tarifa);
                            });
                        });
                    }

                    #endregion
                });

                PdmContext.SaveChanges();
            }
            catch (Exception ex)
            {
                LogSyncCampaniasError(ex);
                LogSyncCampaniasEnd();
                throw;
            }

            LogSyncCampaniasEnd();
        }
        public override AprobacionSap Create(AprobacionSap dto)
        {
            try
            {
                LogSyncAprobacionesInit();

                var entities = PdmContext.Certificaciones.Where(e => e.Estado == EstadoCertificacion.Aceptada)
                               .GroupBy(e => new { e.ProveedorNombre, e.ProveedorCodigo, e.Campania })
                               .ToList()
                               .Select(e => new Entities.AprobacionSap
                {
                    Campania            = e.Key.Campania,
                    ProveedorCodigo     = e.Key.ProveedorCodigo,
                    ProveedorNombre     = e.Key.ProveedorNombre,
                    EstadoCertificacion = EstadoAprobacionSap.Ingresada,
                    EstadoConsumo       = EstadoAprobacionSap.Ingresada,
                    EstadoProvision     = EstadoAprobacionSap.Ingresada,
                    MontoTotal          = e.Sum(c => c.DuracionTema * c.CostoUnitario * 60),
                    CreateDate          = DateTime.Now,
                    CreatedBy           = UsuarioLogged
                }).ToList();


                #region Create

                entities.ForEach(e =>
                {
                    PdmContext.AprobacionesSap.Add(e);
                });

                PdmContext.SaveChanges();

                LogSyncAprobacionesDetail(entities);

                entities.ForEach(aprobacion =>
                {
                    var certificaciones = PdmContext.Certificaciones.Where(c =>
                                                                           c.Estado == EstadoCertificacion.Aceptada &&
                                                                           c.Campania.Id == aprobacion.Campania.Id &&
                                                                           c.ProveedorCodigo == aprobacion.ProveedorCodigo).ToList();


                    certificaciones.ForEach(e =>
                    {
                        e.Estado        = EstadoCertificacion.Aprobada;
                        e.AprobacionSap = aprobacion;
                        e.UpdateDate    = DateTime.Now;
                        e.UpdatedBy     = UsuarioLogged;
                    });

                    EFBatchOperation.For(PdmContext, PdmContext.Certificaciones).UpdateAll(certificaciones, x => x.ColumnsToUpdate(
                                                                                               t => t.AprobacionSap,
                                                                                               t => t.UpdateDate,
                                                                                               t => t.UpdatedBy,
                                                                                               t => t.Estado));

                    PdmContext.SaveChanges();
                });


                #endregion

                #region Send SAP

                _sapAdmin.CreateConsumo(entities);

                entities.ForEach(e =>
                {
                    e.EstadoConsumo = EstadoAprobacionSap.Enviada;
                });

                PdmContext.SaveChanges();


                _sapAdmin.CreateProvision(entities);

                entities.ForEach(e =>
                {
                    e.EstadoProvision = EstadoAprobacionSap.Enviada;
                });

                PdmContext.SaveChanges();


                _sapAdmin.CreateCertificacion(entities);

                entities.ForEach(e =>
                {
                    e.EstadoCertificacion = EstadoAprobacionSap.Enviada;
                });

                PdmContext.SaveChanges();


                #endregion

                LogSyncAprobacionesEnd();
            }
            catch (Exception e)
            {
                LogSyncAProbacionesError(e);
                throw;
            }

            return(null);
        }