public HttpResponseMessage Post(CargaMasivaCreateDto model) { try { var rpta = _dPresupuesto.saveFile(model); return(Request.CreateResponse(HttpStatusCode.OK, rpta)); } catch { var message = "error al guardar carga de presupuestos, verifique los datos e intente nuevamente"; return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, message)); } }
//guardar carga masiva public string saveFile(CargaMasivaCreateDto model) { var rpta = ""; try { using (var ctx = new PresupuestoContext()) { using (DbContextTransaction transaction = ctx.Database.BeginTransaction()) { try { foreach (var d in model.detalle) { var detalle = new SPDetallePresupuesto { Id = model.Id, presupuestoId = model.presupuestoId, referencia = d.referencia, cantidad = d.cantidad, total_referencia = d.total_referencia, fincaId = d.fincaId, subloteId = d.subloteId, unidad_by_p_cs = d.unidad_by_p_cs, costo_by_p_cs = d.costo_by_p_cs }; ctx.Configuration.AutoDetectChangesEnabled = false; ctx.SPDetallePresupuesto.Add(detalle); ctx.SaveChanges(); var detalleId = detalle.Id; if (model.codigoTipo == "P_MO") { //obtener dimensiones por actividad SPDimension _dimension = new SPDimension(); var dimensiones = _dimension.GetDimensionesbyActividad(detalle.referencia); if (dimensiones.Count > 0) { //eliminamos los existentes para sustituirlos var costosdim = ctx.SPCostoByDimension.Where(x => x.detalle_presupuesdoId == detalleId).ToList(); ctx.SPCostoByDimension.RemoveRange(costosdim); ctx.SaveChanges(); foreach (var ca in dimensiones) { var costo_actividad = new SPCostoByDimension { dimensionId = ca.dimensionId, detalle_presupuesdoId = detalleId, costo = Convert.ToDouble(detalle.total_referencia) * (ca.factor / 100) }; //costo_actividad.costo = Math.Round(Convert.ToDecimal(costo_actividad.costo), 2); ctx.Configuration.AutoDetectChangesEnabled = false; ctx.SPCostoByDimension.Add(costo_actividad); ctx.SaveChanges(); } } } } transaction.Commit(); rpta = "Carga de datos realizada correctamente"; } catch (Exception e) { transaction.Rollback(); throw e; } } } } catch (Exception e) { throw e; } return(rpta); }