Para mantener un control de stock separado para cada precio de un producto, necesitas
ajustar la lógica y las tablas correspondientes en tu base de datos. A continuación, te
explico la lógica de stock, producto, caja y devoluciones, y cómo se deben ajustar las
tablas para soportar el control de múltiples precios y stocks.
Lógica y Ajustes:
1. Producto y Precio:
o Cada producto puede tener múltiples precios. Cada precio estará
asociado a una entrada en la tabla PRECIO_PRODUCTO, que también
incluirá un control de stock específico para ese precio.
o La tabla PRECIO_PRODUCTO contendrá las relaciones entre los productos
y sus diferentes precios, además de la cantidad de stock disponible para
cada combinación de producto-precio.
2. Stock:
o El stock no se controlará directamente en la tabla PRODUCTO, sino en la
tabla PRECIO_PRODUCTO. Esto permite que cada variación de precio tenga
su propio stock.
o Cada vez que se realice una venta, se deberá decrementar el stock en la
tabla PRECIO_PRODUCTO correspondiente al precio con el cual se realizó
la venta.
3. Caja:
o La tabla CAJA llevará un registro de las transacciones, abriendo y
cerrando la caja diariamente. Esto incluirá las ventas realizadas y las
devoluciones de dinero.
o El saldo de la caja se ajustará con cada transacción, aumentando con las
ventas y disminuyendo con las devoluciones.
4. Devoluciones:
o Las devoluciones pueden ser de productos, dinero o ambos. En caso de
devolución de productos, el stock en la tabla PRECIO_PRODUCTO se
incrementará para la entrada correspondiente.
o Si se devuelve dinero, la tabla CAJA se actualizará para reflejar el monto
devuelto.
-- 1. Crear la tabla ROL
CREATE TABLE ROL (
IdRol int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Nombre varchar (50) not null,
Descripcion varchar(100) NULL,
FechaRegistro datetime NULL DEFAULT (getdate())
);
GO
-- 2. Crear la tabla PERMISO y relacionarla con ROL
CREATE TABLE PERMISO (
IdPermiso int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdRol int NULL FOREIGN KEY REFERENCES ROL(IdRol),
NombreMenu varchar(100) NULL,
FechaRegistro datetime NULL DEFAULT (getdate())
);
GO
-- 3. Crear la tabla CATEGORIA
CREATE TABLE CATEGORIA (
IdCategoria int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Nombre varchar (50), not null
Descripcion varchar(100) NULL,
FechaRegistro datetime NULL DEFAULT (getdate())
);
GO
-- 4. Crear la tabla CLIENTE
CREATE TABLE CLIENTE (
IdCliente int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Documento varchar(50) NULL,
NombreCompleto varchar(50) NULL,
Correo varchar(50) NULL,
Telefono varchar(50) NULL,
Estado bit NULL,
FechaRegistro datetime NULL DEFAULT (getdate())
);
GO
-- 5. Crear la tabla USUARIO y relacionarla con ROL
CREATE TABLE EMPLEADO(
IdEmpleado int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Documento varchar(50) NULL,
NombreCompleto varchar(50) NULL,
Correo varchar(50) NULL,
Usuario varchar (50) not null,
Clave varchar(50) NOT NULL,
IdRol int NULL FOREIGN KEY REFERENCES ROL(IdRol),
Estado bit NULL,
FechaRegistro datetime NULL DEFAULT (getdate())
);
GO
-- 6. Crear la tabla PRODUCTO y relacionarla con CATEGORIA
CREATE TABLE PRODUCTO (
IdProducto int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Codigo varchar(50) NULL,
NombreProducto varchar(50) NULL,
Descripcion varchar(50) NULL,
ITBIS int NULL,
IdCategoria int NULL FOREIGN KEY REFERENCES CATEGORIA(IdCategoria),
Estado bit NULL,
FechaRegistro datetime NULL DEFAULT (getdate())
);
GO
-- 7. Crear la tabla PRECIO_PRODUCTO y relacionarla con PRODUCTO
CREATE TABLE PRECIO_PRODUCTO (
IdPrecioProducto int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdProducto int NOT NULL FOREIGN KEY REFERENCES PRODUCTO(IdProducto),
PrecioVenta decimal(10, 2) NOT NULL,
Stock int NOT NULL DEFAULT (0),
FechaRegistro datetime NULL DEFAULT (getdate())
);
GO
-- 8. Crear la tabla NEGOCIO
CREATE TABLE NEGOCIO (
IdNegocio int NOT NULL PRIMARY KEY,
NombreNegocio varchar(60) NULL,
RNC varchar(60) NULL,
Direccion varchar(60) NULL,
Logo varbinary(max) NULL
);
GO
-- 9. Crear la tabla VENTA y relacionarla con USUARIO
CREATE TABLE VENTA (
IdVenta int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdUsuario int NULL FOREIGN KEY REFERENCES USUARIO(IdUsuario),
TipoDocumento varchar(50) NULL,
NumeroDocumento varchar(50) NULL,
DocumentoCliente varchar(50) NULL,
NombreCliente varchar(100) NULL,
MontoPago decimal(10, 2) NULL,
MontoCambio decimal(10, 2) NULL,
MontoTotal decimal(10, 2) NULL,
FechaRegistro datetime NULL DEFAULT (getdate()),
ITBIS int NULL,
Estado varchar(50) NULL
);
GO
-- 10. Crear la tabla DETALLE_VENTA y relacionarla con VENTA y PRECIO_PRODUCTO
CREATE TABLE DETALLE_VENTA (
IdDetalleventa int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdVenta int NULL FOREIGN KEY REFERENCES VENTA(IdVenta),
IdPrecioProducto int NULL FOREIGN KEY REFERENCES
PRECIO_PRODUCTO(IdPrecioProducto),
Cantidad int NULL,
SubTotal decimal(10, 2) NULL,
FechaRegistro datetime NULL DEFAULT (getdate())
);
GO
-- 11. Crear la tabla DEVOLUCION y relacionarla con DETALLE_VENTA
CREATE TABLE DEVOLUCION (
IdDevolucion int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdDetalleVenta int NULL FOREIGN KEY REFERENCES DETALLE_VENTA(IdDetalleventa),
TipoDevolucion varchar(20) NULL, -- Puede ser 'Producto', 'Dinero' o 'Ambos'
FechaDevolucion datetime NULL DEFAULT (getdate()),
MontoDevuelto decimal(10, 2) NULL
);
GO
-- 12. Crear la tabla CAJA y relacionarla con USUARIO
CREATE TABLE CAJA (
IdCaja int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdUsuario int NULL FOREIGN KEY REFERENCES USUARIO(IdUsuario),
SaldoInicial decimal(10, 2) NULL,
SaldoFinal decimal(10, 2) NULL,
FechaApertura datetime NULL DEFAULT (getdate()),
FechaCierre datetime NULL
);
GO
-- 13. Crear la tabla FACTURA y relacionarla con VENTA
CREATE TABLE FACTURA (
IdFactura int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdVenta int NULL FOREIGN KEY REFERENCES VENTA(IdVenta),
NumeroFactura varchar(50) NULL,
FechaFactura datetime NULL DEFAULT (getdate())
);
GO
-- 14. Crear la tabla DETALLE_FACTURA y relacionarla con FACTURA y PRECIO_PRODUCTO
CREATE TABLE DETALLE_FACTURA (
IdDetalleFactura int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdFactura int NULL FOREIGN KEY REFERENCES FACTURA(IdFactura),
IdPrecioProducto int NULL FOREIGN KEY REFERENCES
PRECIO_PRODUCTO(IdPrecioProducto),
Cantidad int NULL,
PrecioUnitario decimal(10, 2) NULL,
SubTotal decimal(10, 2) NULL
);
GO
-- Crear la tabla REPORTE
CREATE TABLE REPORTE (
IdReporte int IDENTITY(1,1) NOT NULL PRIMARY KEY,
IdUsuario int NULL FOREIGN KEY REFERENCES USUARIO(IdUsuario),
TipoReporte varchar(50) NULL, -- Puede ser 'Ventas', 'Devoluciones', 'Inventario', etc.
FechaInicio datetime NULL,
FechaFin datetime NULL,
Descripcion varchar(255) NULL, -- Breve descripción del contenido del reporte
FechaGeneracion datetime NULL DEFAULT (getdate())
);
GO