예제 #1
0
 public int Actualizar(DetallesFormulasModel Parametro)
 {
     try
     {
         return(cdDetallesFormula.Actualizar(Parametro));
     }
     catch (Exception er)
     {
         throw new Exception(er.Message);
     }
 }
예제 #2
0
        public void ActualizarP()
        {
            try
            {
                //Thread.Sleep(2000);

                using (TransactionScope scope = new TransactionScope())
                {
                    #region
                    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"]);
                                cdDetFormula.Actualizar(new DetallesFormulasModel
                                {
                                    IdDetalle          = Convert.ToInt32(item[0]),
                                    IdFormula          = Convert.ToInt32(item[1]),
                                    IdInsumo           = Parametro.IdInsumo,
                                    CantidadInsumo     = Convert.ToInt32(item["CantidadInsumo"]),
                                    UnidadMedidaInsumo = item["UnidadMedidaInsumo"].ToString(),
                                    CostoInsumo        = ((Convert.ToDecimal(Parametro.PrecioUnitario) * PrecioDolar) * (Convert.ToDecimal(item["CantidadInsumo"]) *
                                                                                                                         FactorMedida(item["UnidadMedida"].ToString(), item["UnidadMedidaInsumo"].ToString()))),
                                    IdUsuario = Parametro.IdUsuario
                                });

                                DataTable tblFormula = cdFormulas.ConsultaGridIndividual(IdFormula);

                                FormulasModel formula = new FormulasModel
                                {
                                    Cantidad      = Convert.ToDouble(tblFormula.Rows[0]["Cantidad"]),
                                    Capacidad     = tblFormula.Rows[0]["Capacidad"].ToString(),
                                    IdFamilia     = Convert.ToInt32(tblFormula.Rows[0]["IdFamilia"]),
                                    NombreFormula = tblFormula.Rows[0]["NombreFormula"].ToString(),
                                    UnidadMedida  = tblFormula.Rows[0]["UnidadMedida"].ToString(),
                                    CostoTotal    = Convert.ToDecimal(tblFormula.Rows[0]["CostoTotal"]),
                                    IdFormula     = Convert.ToInt32(tblFormula.Rows[0]["IdFormula"]),
                                };

                                //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 = formula.UnidadMedida.ToString().Equals("K") ?
                                                             (Convert.ToDecimal(formula.CostoTotal) / (formula.Capacidad.ToString().ToUpper().StartsWith("K") ? ConversorUnidades.Kilos_Miligramos(Convert.ToDecimal(formula.Cantidad)) :
                                                                                                       formula.Capacidad.ToString().ToUpper().StartsWith("G") ? ConversorUnidades.Gramos_Miligramos(Convert.ToDecimal(formula.Cantidad)) :
                                                                                                       Convert.ToDecimal(formula.Cantidad))) :
                                                             (Convert.ToDecimal(formula.CostoTotal) / (formula.Capacidad.ToString().ToUpper().StartsWith("L") ? ConversorUnidades.Litros_Mililitros(Convert.ToDecimal(formula.Cantidad)) :
                                                                                                       Convert.ToDecimal(formula.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          = formula.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);
                                }

                                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(formula.Cantidad)) :
                                                                           itemInsumo["UnidadMedida"].ToString().ToUpper().StartsWith("K") ? ConversorUnidades.Kilos_Miligramos(Convert.ToDecimal(formula.Cantidad)) :
                                                                           itemInsumo["UnidadMedida"].ToString().ToUpper().StartsWith("G") ? ConversorUnidades.Gramos_Miligramos(Convert.ToDecimal(formula.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 => cdDetProducto.Actualizar(x));
                                }
                            }
                        }
                    }
                    #endregion
                    scope.Complete();
                }
                Msj             = "";
                EstadoOperacion = true;
            }
            catch (Exception er)
            {
                Msj             = (er.Message);
                EstadoOperacion = false;
                //return false;
            }
        }