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