Instalar posgresql
EJEMPLO :
Usuario revisor fiscar puede conectarse desde esta o desta esta otra maquina y siempr3e
se va conectar con la contraseña encryptada md5
reiniciar servicios ruedita services.msc → reinicar servicio para que tome los cambios.
TRIGGERS
-- CREACION DE LA FUNCION
CREATE OR REPLACE FUNCTION valida_productos()
RETURNS TRIGGER AS
$BODY$
BEGIN
IF NEW.nombre IS NULL OR Length(NEW.nombre)=0 THEN
RAISE EXCEPTION 'El nombre debe contener alguna informacion';
END IF;
IF NEW.cantidad < 0 THEN
RAISE EXCEPTION 'La cantidad no puede ser negativa';
END IF;
IF NEW.precio < 0 THEN
RAISE EXCEPTION 'El precio no puede ser negativo';
END IF;
NEW.ultima_modificacion = now();
NEW.ultimo_usuario_bd = user;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
-- 3. CREAR EL TRIGGER
CREATE TRIGGER auditoria_productos
AFTER INSERT OR UPDATE OR DELETE
ON productos
FOR EACH ROW EXECUTE PROCEDURE auditoria_productos();
-- 4.1 INSERTAR
INSERT INTO PRODUCTOS (nombre, cantidad, precio)
VALUES ('melon',5,1990);
-- 4.2 BORRAR
DELETE FROM productos WHERE nombre = 'papa';
-- 4.3 ACTUALIZAR
UPDATE productos SET cantidad = 18 WHERE nombre = 'carne';
ELSE
INSERT INTO productos(nombre,cantidad,precio)
VALUES(NEW.nombre,NEW.cantidad,NEW.precio);
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
1)Superusuario
2) Crear usuario
CREATE USER escueladigital PASSWORD 'escueladigital';
3)Crear tablespace
CREATE TABLESPACE ts_escuela LOCATION 'C:\escueladigital';
4)Crear base de datos
CREATE DATABASE escueladigital OWNER = escueladigital TABLESPACE =
ts_escuela;
);
• unique nombre “unico nombre”
• cantidad positiva
• precio positivo
** CREACION DE LA TABLA DE COMPRAS
CREATE TABLE compras(
id_compra smallserial,
fecha date DEFAULT now() NOT NULL,
id_tercero smallint NOT NULL,
id_producto smallint NOT NULL,
cantidad smallint NOT NULL,
valor smallint NOT NULL,
id_usuario smallint NOT NULL,
CONSTRAINT pk_compras PRIMARY KEY(id_compra),
CONSTRAINT fk_compras_terceros FOREIGN KEY (id_tercero)
REFERENCES productos (id_producto) ON UPDATE RESTRICT ON
DELETE RESTRICT,
CONSTRAINT ck_compras_cantidad CHECK (cantidad > 0),
CONSTRAINT ck_compras_valor CHECK (valor > 0),
CONSTRAINT fk_compras_usuarios FOREIGN KEY (id_usuario)
REFERENCES usuarios (id_usuario) ON UPDATE RESTRICT ON
DELETE RESTRICT
);
** CREACION DE LA TABLA DE VENTAS
CREATE TABLE ventas(
id_venta smallserial,
fecha date DEFAULT now() NOT NULL,
id_tercero smallint NOT NULL,
id_producto smallint NOT NULL,
cantidad smallint NOT NULL,
valor smallint NOT NULL,
id_usuario smallint NOT NULL,
CONSTRAINT pk_ventas PRIMARY KEY(id_venta),
CONSTRAINT fk_ventas_terceros FOREIGN KEY (id_tercero)
REFERENCES terceros (id_tercero) ON UPDATE RESTRICT ON
DELETE RESTRICT,
CONSTRAINT fk_ventas_productos FOREIGN KEY (id_producto)
REFERENCES usuarios (id_usuario) ON UPDATE RESTRICT ON
DELETE RESTRICT,
CONSTRAINT ck_ventas_cantidad CHECK (cantidad > 0),
CONSTRAINT ck_ventas_valor CHECK (valor > 0),
CONSTRAINT fk_ventas_usuario FOREIGN KEY (id_usuario)
REFRENCES usuarios (id_usuario) ON UPDATE RESTRICT ON
DELETE RESTRICT
);
-- PERFILES
INSERT INTO perfiles (perfil)
VALUES ('ADMINISTRADOR'), ('CAJERO);
-- consultar perfiles
select * from perfiles;
-- USUARIOS
INSERT INTO usuarios (usuario, nombre, clave, id_perfil)
VALUES ('alozada', 'ALEXYS LOZADA', md5('Clave123+'), 1),
('vendedor', 'PEDRO PEREZ', md5('Clave123+'), 2);
-- consulta usuarios
select * from usuarios
-- TERCEROS
INSERT INTO terceros(identificacion, nombre, direccion, telefono)
VALUES ('123456789', 'PROVETODO LTDA', 'CRA 1 # 2 - 3', '2114477 EXT 123'),
('987654321', 'COMPRATODO S.A.S.', 'AV BUSQUELA CRA ENCUENTRELA',
'4857965'),
('741852963','CLIENTE FRECUENTE', 'EL VECINO', '5478414');
-- PRODUCTOS
INSERT INTO productos (nombre, cantidad, precio, id_usuario)
VALUES ('NEVERA', 5, 12000, 1),
('LAVADORA',1,8900, 2),
('SECADORA', 3, 7400, 1),
('CALENTADOR'), 1, 3200, 2);
-- FUNCION DE CONSULTA DE TERCEROS
CREATE OR REPLACE FUNCTION consulta_terceros()
RETURNS SETOF terceros AS
$BODY$
BEGIN
RETURN QUERY SELECT id_tercero, nombre FROM TERCEROS ORDER BY
nombre;
END;
$BODY$
LANGUAGE plpgsql;
ALTER FUNCTION consulta_terceros() OWNER TO escueladigital;
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
** Revisar quienes estuvieron conectados y cual fue la ultima sentencia sql que hicieron
SELECT * FROM pg_stat_activity
** FUNCION DE COMPRAR
CREATE OR REPLACE FUNCTION comprar(
_proveedor smallint,
_producto smallint,
_cantidad smallint,
_valor smallint,
_usuario smallint
) RETURNS smallint AS
$BODY$
DECLARE
_idfactura smallint;
BEGIN
-- SE INSERTA EL REGISTRO DE COMPRAS
INSERT INTO compras (id_tercero, id_producto, cantidad, valor, id_usuario)
VALUES (_proveedor, _producto, _cantidad, _valor , _usuario)
RETURNING id_compra INTO _idfactura;
IF FOUND THEN
-- SE ACTUALIZA EL STOCK DEL PRODUCTO
UPDATE productos
SET cantidad = cantidad + _cantidad,
precio = _valor,
id_usuario = _usuario
WHERE id_producto = _producto;
ELSE
RAISE EXCEPTION 'No fue posible insertar el registro de compras';
END IF;
RETURN _idfactura;
END;
$BODY$
LANGUAGE plpgsql;
** FUNCION TRIGGER PARA AUDITORIA DE VENTAS
** CONSULTA VENTAS
package com.escueladigital.dao;
import com.escueladigital.excepciones.ExcepcionGeneral;
import com.escueladigital.modelos.Compra;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.List;
Pagina Index:
//captura mensaje de error de éxito o error en caso de éxito o fracaso y lo tengo listo para
mostrarlo mas abajo
if (request.getAttribute("mensaje__error") != null) {
mensaje__error = (String) request.getAttribute("mensaje__error");
}
if (request.getAttribute("mensaje__exito") != null) {
mensaje__exito = (String) request.getAttribute("mensaje__exito");
}
//html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-
scale=1.0, minimun-scale=1.0"/>
<link rel="stylesheet" href="css/estilos.css"/>
<link href="https://file.myfontastic.com/gVhWFfTbY55yVaY7oxJaF3/icons.css"
rel="stylesheet"/>
<title>Compras</title>
</head>
<body class="compras">
<div class="main-container">
<aside class="main-aside"><a href="/"><img src="img/logo.png"
class="logo"/></a>
out.print(usuario.nombre);
}
%>
</div>
<h1>Compras</h1>
<form action="Comprar" method="post">
<div class="form-item ed-container">
<div class="ed-item base-30">
<label for="proveedor">Proveedor</label>
</div>
<div class="ed-item base-70">
<select name="proveedor" id="proveedor">//combo de proveedores
<%
for (Tercero tercero : terceros) {//lleno el combo de terceros
out.println("<option value=\"" + tercero.id_tercero + "\">" +
tercero.nombre + "</option>");
}
%>
</select>
</div>
</div>
<div class="form-item ed-container">
<div class="ed-item base-30">
<label for="producto">Producto</label>
</div>
<div class="ed-item base-70">
<select name="producto" id="producto">// combo de seleccion
<%
for (Producto producto : productos) {//poblar el combo con
productos
out.println("<option value=\"" + producto.id_producto + "\">"
+ producto.nombre + "</option>");
}
%>
</select>
</div>
</div>
<div class="form-item ed-container">
<div class="ed-item base-30">
<label for="cantidad">Cantidad</label> //se registra la cantidad que se
digita
</div>
<div class="ed-item base-70">
<input type="number" id="cantidad" name="cantidad"/>
</div>
</div>
<div class="form-item ed-container">
<div class="ed-item base-30">
<label for="valor">Valor</label> luego el valor que tambien se digita
</div>
<div class="ed-item base-70">
<input type="number" id="valor" name="valor"/>
</div>
</div>
<div class="ed-container">
<div class="ed-item">
<input type="submit" value="comprar"/> // boton de comprar
</div>
</div>
<div class="ed-container">
<div clas="ed-item">
<%
if (mensaje__error != null) { //si hay unerro me lo va a mostrar en un
cuadro
out.println("<div
class=\"mensaje__error\">"+mensaje__error+"</div>");
}
if (mensaje__exito != null) { // si todo esta bien nos muestra un
mensaje de exito
out.println("<div
class=\"mensaje__exito\">"+mensaje__exito+"</div>");
}
%>
</div>
</div>
</form>
</main>
</div>
<script src="js/efectos.js"></script>
</body>
</html>
Front de compras:
<%@page import="com.escueladigital.modelos.Compra"%>
<%@page import="com.escueladigital.dao.CompraDAO"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.escueladigital.modelos.Usuario"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
Usuario usuario = null;// persona tiene q estar logueada si no lo envia al index
if (session.getAttribute("usuario") != null) {
usuario = (Usuario) session.getAttribute("usuario");
} else {
response.sendRedirect("index.jsp");
}
short sumaCantidad = 0;
int sumaTotal = 0;
short limite = 5;
short pagina = 1;
if (request.getParameter("limite") != null) {//si la persona ya a enviado un valor de
limite
limite = Short.parseShort((String) request.getParameter("limite"));//entonces el
limite es el valor q ha enviado en el formulario
}
if (request.getParameter("pagina") != null) {// si la persona envio un valor de pagina
ese es el valor del formulario
pagina = Short.parseShort((String) request.getParameter("pagina"));//capturamos el
elemento del formulario siempre como de tipo string, lo pasamos a short y lo guardamo
en pagina
}
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-
scale=1.0, minimun-scale=1.0"/>
<link rel="stylesheet" href="css/estilos.css"/>
<link href="https://file.myfontastic.com/gVhWFfTbY55yVaY7oxJaF3/icons.css"
rel="stylesheet"/>
<title>Lista de compras</title>
</head>
<body class="Listado de compras">
<div class="main-container">
<aside class="main-aside"><a href="/"><img src="img/logo.png"
class="logo"/></a>
// menu para navegar -->
<ul class="menu ed-menu">
<li class="menu__item"><a href="compras.jsp" class="menu__link icon-
compras">Compras</a></li>
<li class="menu__item"><a href="ventas.jsp" class="menu__link icon-
ventas">Ventas</a></li>
<li class="menu__item"><a href="lista-compras.jsp" class="menu__link icon-
lista-compras">Lista de compras</a></li>
<li class="menu__item"><a href="lista-ventas.jsp" class="menu__link icon-lista-
ventas">Lista de ventas</a></li>
<li class="menu__item"><a href="lista-productos.jsp" class="menu__link icon-
lista-productos">Lista de productos</a></li>
</ul>
</aside>
<main class="main-content">
<h1> Listado de compras</h1>
<table class="listado"> // tabla para listar la informacion
<thead>
<tr>
<th>ID</th>
<th>Fecha</th>
<th>Proveedor</th>
<th>Producto</th>
<th>Cantidad</th>
<th>Valor</th>
</tr>
</thead>
<tbody>
<%
for (Compra compra : compras) {
out.println("<tr>");//fila
out.println("<td>");//campo
out.println(compra.id_compra);
out.println("</td>");
out.println("<td>");
out.println(compra.getFecha());
out.println("</td>");
out.println("<td>");
out.println(compra.cliente);
out.println("</td>");
out.println("<td>");
out.println(compra.producto);
out.println("</td>");
out.println("<td>");
out.println(compra.cantidad);
out.println("</td>");
out.println("<td>");
out.println(compra.valor);
out.println("</td>");
out.println("</tr>");
sumaCantidad += compra.cantidad;
sumaTotal += compra.valor;
}
%>
</tbody>
<tfoot>//pie de pagina de la tabla
<tr>
<td colspan="4" class="suma-label">Total</td>
<td class="suma"><%=sumaCantidad%></td>//suma cantidad
<td class="suma"><%=sumaTotal%></td> //sumatotal
</tr>
</tfoot>
</table>
<form action="lista-compras.jsp" method="post"> //formularuio que nos permite
paginar
<div class="ed-container">
<div class="ed-item web-20">
<label for="registros">Registros:</label>
</div>
<div class="ed-item web-20">
<select id="registros" name="limite">
<option value="1">1</option>// escoje el limite
<option value="3">3</option>
<option value="5">5</option>
<option value="10">10</option>
</select>
</div>
<div class="ed-item web-20">
<label for="pagina">Página:</label>
</div>
<div class="ed-item web-20">
<input type="number" id="pagina" name="pagina" min="1" value="1"/>
</div>
<div class="ed-item web-15">
<input type="submit" value="Listar"/>
</div>
</div>
</form>
</main>
</div>
</body>
</html>