public static void renovarMateriasPrimas(DataTable MateriaPrima, DataTable MateriaPrimaXIntermedio, DataTable ProductosIntermedio, double cantidad, int idProducto, SqlConnection con, SqlTransaction trans, List <Producto> productosConPocaMP)
        {
            for (int k = 0; k < MateriaPrima.Rows.Count; k++)
            {
                MateriaPrima.Rows[k]["cantidad"] = double.Parse(MateriaPrima.Rows[k]["cantidad"].ToString()) * cantidad;
            }
            for (int f = 0; f < ProductosIntermedio.Rows.Count; f++)//RECORREMOS LA TABLA DE PRODUCTOS INTERMEDIOS
            {
                if (ProductosIntermedio.Rows.Count != 0)
                {
                    double cantidadIntermedios = cantidad * double.Parse(ProductosIntermedio.Rows[f]["cantidad"].ToString());

                    MateriaPrimaXIntermedio = ProductoDAO.GetMateriaPrima(int.Parse(ProductosIntermedio.Rows[f]["idProductohijo"].ToString()), trans, con);//CARGAMOS EN LA TABLA LOS DATOS DE LAS MATERIAS PRIMAS DE LOS PRODUCTOS INTERMEDIOS
                    for (int j = 0; j < MateriaPrimaXIntermedio.Rows.Count; j++)
                    {
                        MateriaPrimaXIntermedio.Rows[j]["cantidad"] = double.Parse(MateriaPrimaXIntermedio.Rows[j]["cantidad"].ToString()) * cantidadIntermedios;
                    }
                }
            }
            MateriaPrima.Merge(MateriaPrimaXIntermedio, true);// YA TENEMOS DENTRO DE  LA TABLA MATERIA PRIMA TODOS LOS PRODUCTOS INSUMOS O MP QUE SE NECESITAN PARA UN PRODUCTO DEL PEDIDO QUE NO ESTE RESERVADO
            for (int k = 0; k < MateriaPrima.Rows.Count; k++)
            {
                int    idProdMP   = 0;
                double cantidadMP = 0;
                idProdMP   = int.Parse(MateriaPrima.Rows[k]["idProductohijo"].ToString());
                cantidadMP = double.Parse(MateriaPrima.Rows[k]["cantidad"].ToString());
                ProductoDAO.actualizarStockMateriasPrimas(idProdMP, cantidadMP * -1, con, trans);
            }
        }
        public static void UpdateCantidadIngresadaReal(DetalleOrdenCompra det, int idOrden, SqlConnection con, SqlTransaction tran)
        {
            Acceso ac = new Acceso();

            string     sql = ("UPDATE [Luiggi].[dbo].[DetalleOrdenCompra] SET [cantidadRealIngresada] = @cantidadRealIngresada, [subtotal] = @cantidadRealIngresada * @precio   WHERE idProducto = @idProducto and idOrdenCompra = @idOrdenCompra");
            SqlCommand cmd = new SqlCommand(sql, con, tran);

            cmd.Parameters.AddWithValue("@idProducto", det.producto.idProducto);
            cmd.Parameters.AddWithValue("@cantidadRealIngresada", det.cantidadRealIngresada);
            cmd.Parameters.AddWithValue("@idOrdenCompra", idOrden);
            cmd.Parameters.AddWithValue("@precio", det.precio);

            try
            {
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();

                ProductoDAO.UpdateStockActualYDisponibleInsumosYMPIngresadas(det, con, tran);
            }
            catch (ArgumentException ex)
            {
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
            }
        }
        public static int InsertFacturaDirecta(Factura fac)
        {
            Acceso         ac   = new Acceso();
            SqlTransaction tran = null;

            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("sp_Insertar_factura", conexion);

            cmd.Parameters.AddWithValue("@fecha", fac.fechaCreacion);
            cmd.Parameters.AddWithValue("@idEstado", fac.estado.idEstado);
            cmd.Parameters.AddWithValue("@idCliente", fac.cliente.idPersona);
            //cmd.Parameters.AddWithValue("@idPedido", fac.pedido.idPedido);
            cmd.Parameters.AddWithValue("@importe", fac.importeTotal);
            //cmd.Parameters.AddWithValue("@fechaPago", fac.fechaPago );
            cmd.Parameters.AddWithValue("@tipoFactura", fac.tipoFactura);
            //cmd.Parameters.AddWithValue("@numeroFactura", fac.numeroFactura);
            cmd.Parameters.AddWithValue("@totalIVA", fac.totalIVA);
            //cmd.Parameters.AddWithValue("@montoSinImpuesto", fac.montoSinImpuesto);
            try
            {
                conexion.Open();
                tran            = conexion.BeginTransaction();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = tran;
                cmd.ExecuteNonQuery();

                SqlCommand cmdIdentity = new SqlCommand("select @@Identity", conexion, tran);
                fac.idFactura = Convert.ToInt32((cmdIdentity.ExecuteScalar()));

                foreach (DetalleFactura detfac in fac.detalleFactura)
                {
                    //detPed.pedido.idPedido = ped.idPedido;
                    DetalleFacturaDAO.InsertDetalleFacturaDirecta(detfac, conexion, tran, fac.idFactura);
                    ProductoDAO.UpdateStockActualYDisponible(detfac, conexion, tran);
                }
                tran.Commit();
                return(fac.idFactura);
            }
            catch (ArgumentException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }
        }
Example #4
0
        public static void Insert(DetalleFactura det, SqlConnection cn, SqlTransaction tran, int idFac)
        {
            Acceso ac = new Acceso();


            //SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("sp_Insertar_detalle_factura", cn);

            cmd.Parameters.AddWithValue("@idFactura", idFac);
            if (det.producto != null)
            {
                cmd.Parameters.AddWithValue("@idProducto", det.producto.idProducto);
            }
            if (det.detPedido != null)
            {
                cmd.Parameters.AddWithValue("@idPedido", det.detPedido.pedido.idPedido);
            }
            cmd.Parameters.AddWithValue("@subtotal", det.subTotal);  // es el precio
            cmd.Parameters.AddWithValue("@cantidad", det.cantidad);
            if (det.detPedido != null)
            {
                cmd.Parameters.AddWithValue("@idProductoPedido", det.detPedido.producto.idProducto);
            }
            cmd.Parameters.AddWithValue("@iva", det.iva);
            try
            {
                cmd.Connection  = cn;
                cmd.Transaction = tran;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.ExecuteNonQuery();

                //if (det.producto != null)
                //{
                //    ProductoDAO.UpdateStockActualYDisponible(det, cn, tran);
                //}

                if (det.detPedido != null)
                {
                    ProductoDAO.UpdateStockReservadoYActualdePedidoEntregado(det.detPedido, det.detPedido.pedido.idPedido, 7);
                }
            }
            catch (ArgumentException ex)
            {
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
        }
        public static void finalizarOTPadre(OrdenDeTrabajo ot, double canPed, double canPlan, List <DetalleProducto> tabla)
        {
            Acceso ac = new Acceso();

            SqlConnection  cn   = new SqlConnection(ac.getCadenaConexion());
            SqlTransaction tran = null;

            string sql = "UPDATE [Luiggi].[dbo].[OrdenTrabajo] SET [idEstado] = 20, [cantidadProducidaReal]= @cantreal, [observaciones] = @observaciones WHERE idOrdenTrabajo =  @idOrdenTrabajo ";

            SqlCommand cmd = new SqlCommand();

            cmd.Parameters.AddWithValue("@idOrdenTrabajo", ot.idOrdenTrabajo);
            cmd.Parameters.AddWithValue("@cantreal", ot.cantidadReal);
            cmd.Parameters.AddWithValue("@observaciones", ot.observaciones);

            try
            {
                cn.Open();
                tran            = cn.BeginTransaction();
                cmd.Connection  = cn;
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();

                ProductoDAO.UpdateStockReservadoYDisponibleOTFinalizada(ot.producto.idProducto, canPlan, canPed, cn, tran);

                foreach (DetalleProducto det in tabla)
                {
                    ProductoDAO.UpdateStockReservadoYDisponibleMatiaPrimaOTfinalizada(det.idProducto, det.cantidad, det.cantidadProductos, cn, tran);
                }

                DetallePedidoDAO.finalizarDetalleDePedido(ot.fechaCreacion, ot.producto.idProducto, tran, cn);

                tran.Commit();
            }
            catch (ArgumentException ex)
            {
                tran.Rollback();
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            catch (SqlException ex)
            {
                tran.Rollback();
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                cn.Close();
            }
        }
        public static void renovarStock(DetallePedido detPedido, SqlConnection con, SqlTransaction trans, Pedido pedido, List <Producto> productosConPocaMP)
        {
            DataTable ProductosIntermedio;
            DataTable MateriaPrima;
            DataTable DetallePlan;
            int       idProductoFinal      = 0;
            int       idProductoIntermedio = 0;
            double    cantidad             = 0;

            idProductoFinal = detPedido.producto.idProducto;                                                                             //OBTENEMOS EL ID DEL PRODUCTO FINAL
            cantidad        = detPedido.cantidad;                                                                                        //OBTENEMOS LA CANTIDAD DE PRODUCTOS
            if (ProductoDAO.verificarProductoPlanificado(pedido.fechaNecesidad.Date, idProductoFinal, con, trans) == true)               //PREGUNTAMOS SI PARA ESE PRODUCTO YA HAY UN DETALLE DEL PLAN PARA ESA FECHA Y ES TRUE
            {
                DetallePlan = DetallePlanProduccionDAO.GetDetallePlanXProducto(idProductoFinal, pedido.fechaNecesidad.Date, con, trans); //OBTENEMOS LOS DATOS DEL DETALLE DEL PLAN

                renovarDetallePlanYPedidoXPlan(DetallePlan, pedido.idPedido, con, trans, cantidad);

                MateriaPrima = ProductoDAO.GetMateriaPrima(idProductoFinal, trans, con);              //CARGAMOS EN LA TABLA LOS DATOS DE LAS MATERIAS PRIMAS
                DataTable MateriaPrimaXIntermedio = new DataTable();
                ProductosIntermedio = ProductoDAO.GetProductoIntermedio(idProductoFinal, con, trans); //CARGAMOS EN LA TABLA LOS DATOS DE LOS PRODUCTOS INTERMEDIO

                renovarMateriasPrimas(MateriaPrima, MateriaPrimaXIntermedio, ProductosIntermedio, cantidad, idProductoFinal, con, trans, productosConPocaMP);
            }
            //else
            //{
            //    if (ProductoDAO.verificarPlanSinProducto(pedido.fechaNecesidad.Date, idProductoFinal, con, trans) == true)//PREGUNTAMOS SI PARA ESE PRODUCTO YA HAY UN DETALLE DEL PLAN PARA ESA FECHA Y ES TRUE
            //    {
            //        Producto prodNuevo = new Producto();
            //        prodNuevo.idProducto = idProductoFinal;
            //        DetallePlanProduccion detallePlanProduccion = new DetallePlanProduccion()
            //        {
            //            fechaProduccion = pedido.fechaNecesidad,
            //            idPlan = PlanMaestroProduccionDAO.obtenerIdPlan(pedido.fechaNecesidad.Date),
            //            cantidadPLan = 0,
            //            producto = prodNuevo,
            //            cantidadPedido = double.Parse(cantidad.ToString())
            //        };

            //        cargarNuevoDetallePlanYPedidoXPlan(detallePlanProduccion, con, trans, pedido);

            //        MateriaPrima = ProductoDAO.GetMateriaPrima(idProductoFinal, trans, con);//CARGAMOS EN LA TABLA LOS DATOS DE LAS MATERIAS PRIMAS
            //        DataTable MateriaPrimaXIntermedio = new DataTable();
            //        ProductosIntermedio = ProductoDAO.GetProductoIntermedio(idProductoFinal, con, trans);//CARGAMOS EN LA TABLA LOS DATOS DE LOS PRODUCTOS INTERMEDIO

            //        obtenerMateriasPrimas(MateriaPrima, MateriaPrimaXIntermedio, ProductosIntermedio, cantidad, idProductoFinal, con, trans);
            //    }
            //}
        }
        public static void actualizarStock(DetallePlanProduccion detPlan, SqlConnection con, SqlTransaction trans, PlanMaestroProduccion plan, List <Producto> ProductosConPocaMP)
        {
            DataTable ProductosIntermedio;
            DataTable MateriaPrima;

            int idProductoFinal = 0;

            double cantidad = 0;

            idProductoFinal = detPlan.producto.idProducto;                   //OBTENEMOS EL ID DEL PRODUCTO FINAL
            cantidad        = detPlan.cantidadPedido + detPlan.cantidadPLan; //OBTENEMOS LA CANTIDAD DE PRODUCTOS


            MateriaPrima = ProductoDAO.GetMateriaPrima(idProductoFinal, trans, con);//CARGAMOS EN LA TABLA LOS DATOS DE LAS MATERIAS PRIMAS
            DataTable MateriaPrimaXIntermedio = new DataTable();

            ProductosIntermedio = ProductoDAO.GetProductoIntermedio(idProductoFinal, con, trans);//CARGAMOS EN LA TABLA LOS DATOS DE LOS PRODUCTOS INTERMEDIO

            obtenerMateriasPrimas(MateriaPrima, MateriaPrimaXIntermedio, ProductosIntermedio, cantidad, idProductoFinal, con, trans, ProductosConPocaMP);
        }
Example #8
0
        public void insertarDetalle(Detalles_FacturaTO detalleTO)
        {
            try
            {
                ProductoDAO productoDAO = new ProductoDAO();
                using (context = new EmpresaEntities())
                {
                    Detalle_Factura detalleDAO = new Detalle_Factura
                    {
                        Factura  = detalleTO.Consecutivo_Factura,
                        Producto = detalleTO.Codigo_Producto,
                        Cantidad = detalleTO.Cantidad
                    };

                    ProductoTO productoTO = new ProductoTO();
                    productoTO.Codigo = detalleTO.Codigo_Producto;

                    productoDAO.extraerProducto(productoTO);

                    if (detalleTO.Cantidad == 0)
                    {
                        throw new Exception("La cantidad de un producto no puede ser 0");
                    }
                    if (productoTO.CantidadInventario < detalleTO.Cantidad)
                    {
                        throw new Exception("Error, no hay suficientes productos para satisfcaer la demanda");
                    }
                    context.Detalle_Factura.Add(detalleDAO);
                    context.SaveChanges();
                    productoDAO.extraerProductoCantidad(detalleTO.Codigo_Producto, detalleTO.Cantidad);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        public static int Insert(Pedido ped, List <Producto> productosConPocaMP)
        {
            Acceso         ac   = new Acceso();
            SqlTransaction tran = null;

            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("sp_Pedido_insert", conexion);

            cmd.Parameters.AddWithValue("@idCliente", ped.cliente.idPersona);
            cmd.Parameters.AddWithValue("@idEstado", ped.estado.idEstado);
            cmd.Parameters.AddWithValue("@fechaPedido", ped.fechaPedido);
            cmd.Parameters.AddWithValue("@fechaNecesidad", ped.fechaNecesidad);
            cmd.Parameters.AddWithValue("@nroPedido", ped.nroPedido);
            cmd.Parameters.AddWithValue("@direccion", ped.dirEntraga);


            try
            {
                conexion.Open();
                tran            = conexion.BeginTransaction();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = tran;
                cmd.ExecuteNonQuery();

                SqlCommand cmdIdentity = new SqlCommand("select @@Identity", conexion, tran);
                ped.idPedido = Convert.ToInt32((cmdIdentity.ExecuteScalar()));

                foreach (DetallePedido detPed in ped.detallePedido)
                {
                    //detPed.pedido.idPedido = ped.idPedido;
                    DetallePedidoDAO.Insert(detPed, conexion, tran, ped.idPedido);
                    if (detPed.reservado == true)
                    {
                        ProductoDAO.UpdateStockReservadoYDisponible(detPed, conexion, tran);
                    }
                    if (detPed.reservado == false)
                    {
                        actualizarStock(detPed, conexion, tran, ped, productosConPocaMP);
                    }
                }
                tran.Commit();
                return(ped.idPedido);
            }
            catch (ArgumentException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }
        }
        public static void Update(Pedido ped, List <DetallePedido> tablaAModificar, List <Producto> productosConPocaMP)
        {
            Acceso         ac   = new Acceso();
            SqlTransaction tran = null;

            SqlConnection conexion = new SqlConnection(ac.getCadenaConexion());

            SqlCommand cmd = new SqlCommand("UPDATE [Luiggi].[dbo].[Pedido] SET [fechaNecesidad] = @fechaNecesidad, [direccion] = @direccion, [idEstado] = @idEstado  WHERE idPedido = @idPedido", conexion);

            cmd.Parameters.AddWithValue("@idPedido", ped.idPedido);
            cmd.Parameters.AddWithValue("@fechaNecesidad", ped.fechaNecesidad);
            cmd.Parameters.AddWithValue("@direccion", ped.dirEntraga);
            cmd.Parameters.AddWithValue("@idEstado", ped.estado.idEstado);



            try
            {
                conexion.Open();
                tran            = conexion.BeginTransaction();
                cmd.CommandType = CommandType.Text;
                cmd.Transaction = tran;
                cmd.ExecuteNonQuery();
                //SqlCommand cmdIdentity = new SqlCommand("select @@Identity", conexion, tran);
                //ped.idPedido = Convert.ToInt32((cmdIdentity.ExecuteScalar()));
                foreach (DetallePedido detP in tablaAModificar)
                {
                    if (detP.reservado == true)
                    {
                        ProductoDAO.UpdateStockReservadoYDisponibleEliminado(detP.producto.idProducto, detP.cantidad, conexion, tran);
                    }
                    else
                    {
                        renovarStock(detP, conexion, tran, ped, productosConPocaMP);
                    }
                }
                DetallePedidoDAO.Delete(ped.idPedido, conexion, tran);

                foreach (DetallePedido detPed in ped.detallePedido)
                {
                    //detPed.pedido.idPedido = ped.idPedido;
                    DetallePedidoDAO.Insert(detPed, conexion, tran, ped.idPedido);
                    if (detPed.reservado == true)
                    {
                        ProductoDAO.UpdateStockReservadoYDisponible(detPed, conexion, tran);
                    }
                    if (detPed.reservado == false)
                    {
                        actualizarStock(detPed, conexion, tran, ped, productosConPocaMP);
                    }
                }
                tran.Commit();
            }
            catch (ArgumentException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException(ex.Message);
            }
            catch (SqlException ex)
            {
                if (conexion.State == ConnectionState.Open)
                {
                    tran.Rollback();
                }
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                conexion.Close();
            }
        }
        public static void finalizarOTHija(OrdenDeTrabajo ot, List <DetalleProducto> tabla)
        {
            Acceso ac = new Acceso();

            SqlConnection  cn   = new SqlConnection(ac.getCadenaConexion());
            SqlTransaction tran = null;

            string sql = "UPDATE [Luiggi].[dbo].[OrdenTrabajo] SET [idEstado] = 20, [cantidadProducidaReal]= @cantreal, [observaciones] = @observaciones WHERE idOrdenTrabajo =  @idOrdenTrabajo ";

            SqlCommand cmd = new SqlCommand();

            cmd.Parameters.AddWithValue("@idOrdenTrabajo", ot.idOrdenTrabajo);
            cmd.Parameters.AddWithValue("@cantreal", ot.cantidadReal);
            cmd.Parameters.AddWithValue("@observaciones", ot.observaciones);

            try
            {
                cn.Open();
                tran            = cn.BeginTransaction();
                cmd.Connection  = cn;
                cmd.Transaction = tran;
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();

                //ACTUALIZAR EL STOCK DE PROD INTERMEDIOS
                if (ot.cantidad >= ot.cantidadReal)
                {
                    sql             = "Update Producto set stockActual = stockActual + @cantreal, stockReservado = stockReservado + @cantreal where idProducto = @idProducto";
                    cmd.CommandText = sql;
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@idProducto", ot.producto.idProducto);
                    cmd.Parameters.AddWithValue("@cantreal", ot.cantidadReal);
                    cmd.ExecuteNonQuery();
                }
                if (ot.cantidad < ot.cantidadReal)
                {
                    sql             = "Update Producto set stockActual = stockActual + @cantreal, stockReservado = stockReservado + @cant, stockDisponible = stockDisponible + @cantreal - @cant where idProducto = @idProducto";
                    cmd.CommandText = sql;
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@idProducto", ot.producto.idProducto);
                    cmd.Parameters.AddWithValue("@cantreal", ot.cantidadReal);
                    cmd.Parameters.AddWithValue("@cant", ot.cantidad);
                    cmd.ExecuteNonQuery();
                }
                ////////////////////////////////////////////
                //ACTUALIZAR EL STOCK DE INSUMOS
                foreach (DetalleProducto det in tabla)
                {
                    ProductoDAO.UpdateStockReservadoYDisponibleMatiaPrimaOTfinalizada(det.idProducto, det.cantidad, det.cantidadProductos, cn, tran);
                }
                //////////////////////////////////////


                tran.Commit();
            }
            catch (ArgumentException ex)
            {
                tran.Rollback();
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            catch (SqlException ex)
            {
                tran.Rollback();
                throw new ApplicationException("Error en BD: " + ex.Message);
            }
            finally
            {
                cn.Close();
            }
        }