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