Exemple #1
0
        //api guardar actividad
        public HttpResponseMessage Post(CreateDetalleManoObraDto model)
        {
            try
            {
                var rpta = _manoObra.Save(model);

                return(Request.CreateResponse(HttpStatusCode.OK, rpta));
            }
            catch
            {
                var message = "error al guardar";
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, message));
            }
        }
        //guardar o actualizar lotes
        public string Save(CreateDetalleManoObraDto model)
        {
            var rpta = "";

            try
            {
                using (var ctx = new PresupuestoContext())
                {
                    using (DbContextTransaction transaction = ctx.Database.BeginTransaction())
                    {
                        try
                        {
                            if (model.referencia == null)
                            {
                                model.referencia = model.referencia_producto;
                            }

                            var d_manoObra = new SPDetallePresupuesto
                            {
                                Id               = model.Id,
                                presupuestoId    = model.presupuestoId,
                                fincaId          = model.fincaId,
                                subloteId        = model.loteId,
                                referencia       = model.referencia,
                                total_referencia = model.total_referencia,
                                cantidad         = model.cantidad,
                                unidad_by_p_cs   = model.unidad_by_p_cs,
                                costo_by_p_cs    = model.costo_by_p_cs,
                                estado           = "I"
                            };

                            if (d_manoObra.Id > 0)
                            {
                                ctx.Entry(d_manoObra).State = EntityState.Modified;
                            }
                            else
                            {
                                ctx.Entry(d_manoObra).State = EntityState.Added;
                            }
                            ctx.SaveChanges();

                            ctx.Database.ExecuteSqlCommand("UPDATE SPDetallePresupuesto SET estado = 'I' WHERE presupuestoId IN (@p0) and fincaId IN (@p1)", d_manoObra.presupuestoId, d_manoObra.fincaId);

                            var detalleId = d_manoObra.Id;

                            //obtener dimensiones por actividad
                            SPDimension _dimension  = new SPDimension();
                            var         dimensiones = _dimension.GetDimensionesbyActividad(d_manoObra.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(d_manoObra.total_referencia) * (ca.factor / 100)
                                    };

                                    //costo_actividad.costo = Math.Round(Convert.ToDecimal(costo_actividad.costo), 2);

                                    ctx.SPCostoByDimension.Add(costo_actividad);
                                    ctx.SaveChanges();
                                }
                            }

                            transaction.Commit();
                            rpta = "accion se agrego presupuesto correctamente";
                        }
                        catch (Exception e)
                        {
                            transaction.Rollback();
                            throw e;
                        }
                    }
                }
            }
            catch
            {
            }
            return(rpta);
        }