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
        }
Пример #2
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 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();
        }
Пример #4
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();
        }