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