public int Guardar(int IdUser, FormulasModel Objeto, DataTable DetallesFormula) { int res; try { using (TransactionScope scope = new TransactionScope()) { res = cdFormulas.Guardar(Objeto); if (res < 1) { throw new Exception("Error al guardar datos generales de la fórmula."); } foreach (DataRow item in DetallesFormula.Rows) { cdDetFormula.Guardar(new DetallesFormulasModel { IdDetalle = Convert.ToInt32(item["IdDetalle"]), IdFormula = res, IdInsumo = Convert.ToInt32(item["IdInsumo"]), CantidadInsumo = Convert.ToDecimal(item["Cantidad"].ToString().Split(' ')[0]), UnidadMedidaInsumo = item["Cantidad"].ToString().Split(' ')[1], CostoInsumo = Convert.ToDecimal(item["Precio"]), IdUsuario = IdUser }); } if (Objeto.IdFormula > 0) { foreach (DataRow Producto in cdProductos.ConsultaGridPorFormula(Objeto.IdFormula).Rows) { decimal CostoMinimoFormula = Objeto.UnidadMedida.ToString().Equals("K") ? (Convert.ToDecimal(Objeto.CostoTotal) / (Objeto.Capacidad.ToString().ToUpper().StartsWith("K") ? ConversorUnidades.Kilos_Miligramos(Convert.ToDecimal(Objeto.Cantidad)) : Objeto.Capacidad.ToString().ToUpper().StartsWith("G") ? ConversorUnidades.Gramos_Miligramos(Convert.ToDecimal(Objeto.Cantidad)) : Convert.ToDecimal(Objeto.Cantidad))) : (Convert.ToDecimal(Objeto.CostoTotal) / (Objeto.Capacidad.ToString().ToUpper().StartsWith("L") ? ConversorUnidades.Litros_Mililitros(Convert.ToDecimal(Objeto.Cantidad)) : Convert.ToDecimal(Objeto.Cantidad))); decimal CostoGranel = CostoMinimoFormula * (Producto["UnidadMedida"].ToString().ToUpper().StartsWith("L") ? ConversorUnidades.Litros_Mililitros(Convert.ToDecimal(Producto["Cantidad"])) : Producto["UnidadMedida"].ToString().ToUpper().StartsWith("K") ? ConversorUnidades.Kilos_Miligramos(Convert.ToDecimal(Producto["Cantidad"])) : Producto["UnidadMedida"].ToString().ToUpper().StartsWith("G") ? ConversorUnidades.Gramos_Miligramos(Convert.ToDecimal(Producto["Cantidad"])) : Convert.ToDecimal(Producto["Cantidad"])); List <DetallesProductosModel> detalles = new List <DetallesProductosModel>(); foreach (DataRow detProducto in cdDetProducto.ConsultaGridPorProducto(Convert.ToInt32(Producto["IdProducto"])).Rows) { detalles.Add(new DetallesProductosModel { CostoInsumo = Convert.ToDecimal(detProducto["Precio"]), IdInsumo = Convert.ToInt32(detProducto["IdInsumo"]) }); } ProductosModel newProducto = new ProductosModel { IdFormula = res, NombreProducto = Producto["NombreProducto"].ToString(), Cantidad = Convert.ToDecimal(Producto["Cantidad"]), UnidadMedida = Producto["UnidadMedida"].ToString(), CostoUnitario = CostoGranel, CostoTotalProducto = detalles.Sum(x => x.CostoInsumo) + CostoGranel, Activo = true }; newProducto.IdProducto = cdProductos.Guardar(newProducto); detalles.ForEach(x => x.IdProducto = newProducto.IdProducto); detalles.ForEach(x => cdDetProducto.Guardar(x)); } cdProductos.BorrarPorFormula(Objeto.IdFormula); if (cdFormulas.Borrar(Objeto.IdFormula) < 1) { throw new Exception("No se han podido dar de baja " + Objeto.NombreFormula + ".\n Todos los cambios serán deshechos." + "Contacte al administrador del sistema."); } } if (Objeto.IdFamilia == 1) {//Es Insumo DataTable Insumo = cdInsumos.ConsultaGridPorNombre(Objeto.NombreFormula); if (Insumo.Rows.Count == 0) { cdInsumos.Guardar(new InsumosModel { IdFamilia = 1, IdMoneda = 1, IdProveedor = 1, NombreInsumo = Objeto.NombreFormula, NombreInterno = Objeto.NombreFormula, UnidadMedida = Objeto.UnidadMedida.Equals("L") ? Objeto.UnidadMedida : "KG", PrecioUnitario = CostoFormulaPorUnidad(Convert.ToDouble(Objeto.CostoTotal), Objeto.Cantidad, Objeto.Capacidad), TotalCompraMX = 1000 }); } else { cnInsumos.Actualizar(IdUser, new InsumosModel { IdInsumo = Convert.ToInt32(Insumo.Rows[0]["IdInsumo"]), IdFamilia = 1, IdMoneda = 1, IdProveedor = 1, NombreInsumo = Objeto.NombreFormula, NombreInterno = Objeto.NombreFormula, UnidadMedida = Objeto.UnidadMedida.Equals("L") ? Objeto.UnidadMedida : "KG", PrecioUnitario = CostoFormulaPorUnidad(Convert.ToDouble(Objeto.CostoTotal), Objeto.Cantidad, Objeto.Capacidad), TotalCompraMX = 1000 }, true, out string Msj); } } scope.Complete(); } } catch (Exception) { res = 0; } return(res); }
public bool Actualizar(int IdUsuario, InsumosModel Parametro, bool ActualizarPrecios, out string Msj, decimal PrecioDolar = 1) { try { using (TransactionScope scope = new TransactionScope()) { if (cdInsumos.Actualizar(Parametro) < 1) { throw new Exception("No se han podido actualizar los datos del insumo."); } if (ActualizarPrecios) { int IdFormula = 0; foreach (DataRow item in cdDetFormula.ConsultaGridPorInsumo(Parametro.IdInsumo).Rows) { if (Convert.ToInt32(item["IdFormula"]) != IdFormula) { IdFormula = Convert.ToInt32(item["IdFormula"]); DataTable Formula = cdFormulas.ConsultaGridIndividual(IdFormula); DataTable DetallesFormula = cdDetFormula.ConsultaGridPorFormula(IdFormula); decimal CostoTotal = 0; FormulasModel NewFormula = new FormulasModel { Cantidad = Convert.ToDouble(Formula.Rows[0]["Cantidad"]), Capacidad = Formula.Rows[0]["Capacidad"].ToString(), IdFamilia = Convert.ToInt32(Formula.Rows[0]["IdFamilia"]), NombreFormula = Formula.Rows[0]["NombreFormula"].ToString(), UnidadMedida = Formula.Rows[0]["UnidadMedida"].ToString() }; NewFormula.IdFormula = cdFormulas.Guardar(NewFormula); if (NewFormula.IdFormula < 1) { throw new Exception("No se han podido actualizar el costo de " + item["NombreFormula"].ToString() + ".\n Todos los cambios serán deshechos." + "Contacte al administrador del sistema."); } foreach (DataRow detalle in DetallesFormula.Rows) { decimal CostoInsumo = Convert.ToInt32(detalle["IdInsumo"]) != Parametro.IdInsumo ? Convert.ToDecimal(detalle["CostoInsumo"]) : ((Convert.ToDecimal(Parametro.PrecioUnitario) * PrecioDolar) * (Convert.ToDecimal(detalle["CantidadInsumo"]) * FactorMedida(detalle["UnidadMedida"].ToString(), detalle["UnidadMedidaInsumo"].ToString()))); CostoTotal += CostoInsumo; if (cdDetFormula.Guardar(new DetallesFormulasModel { IdFormula = NewFormula.IdFormula, IdInsumo = Convert.ToInt32(detalle["IdInsumo"]), CantidadInsumo = Convert.ToDecimal(detalle["CantidadInsumo"]), UnidadMedidaInsumo = detalle["UnidadMedidaInsumo"].ToString(), CostoInsumo = CostoInsumo, IdUsuario = IdUsuario }) < 1) { throw new Exception("No se han podido actualizar el costo en los detalles de " + item["NombreFormula"].ToString() + ".\n Todos los cambios serán deshechos." + "Contacte al administrador del sistema."); } } //calculo el costo de generar la unidad mas pequeña de la formula //por ejemplo, si son kg, cuanto cuesta crear un mg? // si son Litros, cuanto cuesta crear un ml? decimal CostoMinimoFormula = NewFormula.UnidadMedida.ToString().Equals("K") ? (Convert.ToDecimal(CostoTotal) / (NewFormula.Capacidad.ToString().ToUpper().StartsWith("K") ? ConversorUnidades.Kilos_Miligramos(Convert.ToDecimal(NewFormula.Cantidad)) : NewFormula.Capacidad.ToString().ToUpper().StartsWith("G") ? ConversorUnidades.Gramos_Miligramos(Convert.ToDecimal(NewFormula.Cantidad)) : Convert.ToDecimal(NewFormula.Cantidad))) : (Convert.ToDecimal(CostoTotal) / (NewFormula.Capacidad.ToString().ToUpper().StartsWith("L") ? ConversorUnidades.Litros_Mililitros(Convert.ToDecimal(NewFormula.Cantidad)) : Convert.ToDecimal(NewFormula.Cantidad))); foreach (DataRow Producto in cdProductos.ConsultaGridPorFormula(IdFormula).Rows) { decimal CostoGranel = CostoMinimoFormula * (Producto["UnidadMedida"].ToString().ToUpper().StartsWith("L") ? ConversorUnidades.Litros_Mililitros(Convert.ToDecimal(Producto["Cantidad"])) : Producto["UnidadMedida"].ToString().ToUpper().StartsWith("K") ? ConversorUnidades.Kilos_Miligramos(Convert.ToDecimal(Producto["Cantidad"])) : Producto["UnidadMedida"].ToString().ToUpper().StartsWith("G") ? ConversorUnidades.Gramos_Miligramos(Convert.ToDecimal(Producto["Cantidad"])) : Convert.ToDecimal(Producto["Cantidad"])); List <DetallesProductosModel> detalles = new List <DetallesProductosModel>(); foreach (DataRow detProducto in cdDetProducto.ConsultaGridPorProducto(Convert.ToInt32(Producto["IdProducto"])).Rows) { detalles.Add(new DetallesProductosModel { CostoInsumo = Convert.ToDecimal(detProducto["Precio"]), IdInsumo = Convert.ToInt32(detProducto["IdInsumo"]) }); } ProductosModel newProducto = new ProductosModel { IdProducto = Convert.ToInt32(Producto["IdProducto"]), IdFormula = NewFormula.IdFormula, NombreProducto = Producto["NombreProducto"].ToString(), Cantidad = Convert.ToDecimal(Producto["Cantidad"]), UnidadMedida = Producto["UnidadMedida"].ToString(), CostoUnitario = CostoGranel, CostoTotalProducto = detalles.Sum(x => x.CostoInsumo) + CostoGranel, Activo = true, IdUsuario = IdUsuario }; newProducto.IdProducto = cdProductos.Actualizar(newProducto); //detalles.ForEach(x => x.IdProducto = newProducto.IdProducto); detalles.ForEach(x => cdDetProducto.Actualizar(x)); } //cdProductos.BorrarPorFormula(IdFormula); if (cdFormulas.Borrar(IdFormula) < 1) { throw new Exception("No se han podido dar de baja " + item["NombreFormula"].ToString() + ".\n Todos los cambios serán deshechos." + "Contacte al administrador del sistema."); } foreach (DataRow itemInsumo in cdInsumos.ConsultaGridPorNombre(item["NombreFormula"].ToString()).Rows) { Actualizar(IdUsuario, new InsumosModel { IdInsumo = Convert.ToInt32(itemInsumo["IdInsumo"]), IdProveedor = Convert.ToInt32(itemInsumo["IdProveedor"]), NombreInsumo = itemInsumo["NombreInsumo"].ToString(), NombreInterno = itemInsumo["NombreInterno"].ToString(), UnidadMedida = itemInsumo["UnidadMedida"].ToString(), PrecioUnitario = Convert.ToDouble(CostoMinimoFormula * (itemInsumo["UnidadMedida"].ToString().ToUpper().StartsWith("L") ? ConversorUnidades.Litros_Mililitros(Convert.ToDecimal(NewFormula.Cantidad)) : itemInsumo["UnidadMedida"].ToString().ToUpper().StartsWith("K") ? ConversorUnidades.Kilos_Miligramos(Convert.ToDecimal(NewFormula.Cantidad)) : itemInsumo["UnidadMedida"].ToString().ToUpper().StartsWith("G") ? ConversorUnidades.Gramos_Miligramos(Convert.ToDecimal(NewFormula.Cantidad)) : Convert.ToDecimal(1))), TotalCompraMX = 10000, IdFamilia = Convert.ToInt32(itemInsumo["IdFamilia"]), IdMoneda = Convert.ToInt32(itemInsumo["IdMoneda"]), }, true, out string MsjI, PrecioDolar); } } } int IdProducto = 0; foreach (DataRow itemDetalle in cdDetProducto.ConsultaGridPorInsumo(Parametro.IdInsumo).Rows) { if (Convert.ToInt32(itemDetalle["IdProducto"]) != IdProducto) { IdProducto = Convert.ToInt32(itemDetalle["IdProducto"]); DataTable Producto = cdProductos.ConsultaGridPorId(IdProducto); if ((bool)(Producto.Rows[0]["Activo"])) { List <DetallesProductosModel> detalles = new List <DetallesProductosModel>(); foreach (DataRow detProducto in cdDetProducto.ConsultaGridPorProducto(IdProducto).Rows) { decimal CostoInsumo = Convert.ToInt32(detProducto["IdInsumo"]) != Parametro.IdInsumo ? Convert.ToDecimal(detProducto["Precio"]) : (Convert.ToDecimal(Parametro.PrecioUnitario) * PrecioDolar); detalles.Add(new DetallesProductosModel { CostoInsumo = CostoInsumo, IdDetalle = Convert.ToInt32(detProducto["IdDetalle"]), IdInsumo = Convert.ToInt32(detProducto["IdInsumo"]) }); } ProductosModel newProducto = new ProductosModel { IdProducto = Convert.ToInt32(Producto.Rows[0]["IdProducto"]), IdFormula = Convert.ToInt32(Producto.Rows[0]["IdFormula"]), NombreProducto = Producto.Rows[0]["NombreProducto"].ToString(), Cantidad = Convert.ToDecimal(Producto.Rows[0]["Cantidad"]), UnidadMedida = Producto.Rows[0]["UnidadMedida"].ToString(), CostoUnitario = Convert.ToDecimal(Producto.Rows[0]["CostoUnitario"]), CostoTotalProducto = detalles.Sum(x => x.CostoInsumo) + Convert.ToDecimal(Producto.Rows[0]["CostoUnitario"]), Activo = true, IdUsuario = IdUsuario }; newProducto.IdProducto = cdProductos.Actualizar(newProducto); //detalles.ForEach(x => x.IdProducto = newProducto.IdProducto); detalles.ForEach(x => cdDetProducto.Actualizar(x)); //if (cdProductos.BorrarPorId(IdProducto) < 1) // throw new Exception("No se ha podido dar de baja " + newProducto.NombreProducto + ".\n Todos los cambios serán deshechos." + // "Contacte al administrador del sistema."); } } } } scope.Complete(); } Msj = ""; return(true); } catch (Exception er) { Msj = (er.Message); return(false); } }