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 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(); }
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(); }