GUIKAR741
3/27/2019 - 9:35 AM

Banco Restaurante

Banco Restaurante

CREATE DATABASE restaurante_backup;

USE restaurante_backup;

CREATE TABLE BKP_ADM (
	id_adm_bkp INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_adm INT(11) NOT NULL ,
	nome VARCHAR(40) NOT NULL ,
	login VARCHAR(45) NOT NULL ,
	senha VARCHAR(20) NOT NULL ,
	data_bkp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	tipo_bkp CHAR(1) NOT NULL ,
	quando_bkp CHAR(1) NOT NULL
);

CREATE TABLE BKP_STATUS (
	id_status_bkp INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_status INT(11) NOT NULL ,
	tipo_status VARCHAR(45) NOT NULL ,
	data_bkp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	tipo_bkp CHAR(1) NOT NULL ,
	quando_bkp CHAR(1) NOT NULL
);

CREATE TABLE BKP_CATEGORIA (
	id_categoria_bkp INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_categoria INT(11) NOT NULL ,
	nome VARCHAR(30) NOT NULL ,
	data_bkp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	tipo_bkp CHAR(1) NOT NULL ,
	quando_bkp CHAR(1) NOT NULL
);

CREATE TABLE BKP_PRODUTO (
	id_produto_bkp INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_produto INT(11) NOT NULL ,
	id_categoria INT(11),
	nome VARCHAR(45) NOT NULL ,
	preco FLOAT NOT NULL ,
	descricao VARCHAR(60) NOT NULL ,
	data_bkp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	tipo_bkp CHAR(1) NOT NULL ,
	quando_bkp CHAR(1) NOT NULL
);

CREATE TABLE BKP_MESA (
	id_mesa_bkp INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_mesa INT(11) NOT NULL ,
	id_status INT NOT NULL ,
	data_bkp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	tipo_bkp CHAR(1) NOT NULL ,
	quando_bkp CHAR(1) NOT NULL
);

CREATE TABLE BKP_COMANDA (
	id_comanda_bkp INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_comanda INT(11) NOT NULL ,
	id_mesa INT(11),
	data DATE NOT NULL ,
	data_bkp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	tipo_bkp CHAR(1) NOT NULL ,
	quando_bkp CHAR(1) NOT NULL
);

CREATE TABLE BKP_PEDIDO (
	id_pedido_bkp INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_pedido INT(11) NOT NULL ,
	id_produto INT(11),
	id_comanda INT(11),
	id_status INT,
	data_bkp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	tipo_bkp CHAR(1) NOT NULL ,
	quando_bkp CHAR(1) NOT NULL
);

CREATE TABLE BKP_CAIXA (
	id_caixa_bkp INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_caixa INT(11) NOT NULL ,
	id_comanda INT(11),
	dinheiro_inicial FLOAT NOT NULL ,
	dinheiro_final FLOAT NOT NULL ,
	data DATE NOT NULL ,
	obs VARCHAR(60) NULL DEFAULT NULL,
	data_bkp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	tipo_bkp CHAR(1) NOT NULL ,
	quando_bkp CHAR(1) NOT NULL
);
INSERT INTO ADM (nome, login, senha) VALUES ('denise', 'denise', 'denise123'),
                                            ('henrique', 'henrique', 'henrique123'), 
                                            ('daniel', 'daniel', 'daniel123');
INSERT INTO STATUS (tipo_status) VALUES ('Ocupado'),
                                        ('Livre'),
                                        ('Pronto'), 
                                        ('Fazendo'), 
                                        ('Em Espera'), 
                                        ('Cancelado');
INSERT INTO CATEGORIA (nome) VALUES ('Bebidas'), 
                                    ('Entrada'), 
                                    ('Sobremesa'), 
                                    ('Prato Principal'), 
                                    ('Petiscos');
INSERT INTO PRODUTO (id_categoria, nome, preco, descricao) VALUES (1, 'Coca Cola', 7.5, 'Bebida gelada 2 litros'),
                                                                  (2, 'Salada de bacalhau', 15.5, 'Salada de bacalhau com legumes'), 
                                                                  (3, 'Pudim de Café', 6, 'Sobremesa de café'), 
                                                                  (4, 'Peixe Grelhado', 45.9, 'Peixe Branco Grelhado ao Molho Cítrico'),
                                                                  (5, 'Batata Frita', 8, 'Acompanha molho');
INSERT INTO MESA (id_status) VALUES (1),
                                    (2),
                                    (1),
                                    (1),
                                    (2);
INSERT INTO COMANDA (id_mesa, data) VALUES (1, '2019-03-28'), 
                                           (3, '2019-03-28'), 
                                           (4, '2019-03-28');
INSERT INTO PEDIDO (id_produto, id_comanda, id_status) VALUES (1, 1, 3),
                                                              (3, 2, 4),
                                                              (5, 3, 5);
INSERT INTO CAIXA (id_comanda, dinheiro_inicial, dinheiro_final, data, obs) VALUES (1, 8.0, 0.5, '2019-03-28', 'Dinheiro'),
                                                                                   (3, 10.0, 6.0, '2019-03-28', 'Cartão');
CREATE PROCEDURE inserir_adm(nome varchar(40), login varchar(45), senha varchar(20))
BEGIN
    INSERT INTO ADM
    VALUES
        (NULL,
         nome,
         login,
         senha);
END;

CREATE PROCEDURE deletar_adm(id int)
BEGIN
    DELETE
    FROM ADM
    WHERE id_adm=id;
END;

CREATE PROCEDURE inserir_mesa(id_status int(11))
BEGIN
    INSERT INTO MESA
    VALUES
        (NULL,
         id_status);
END;

CREATE PROCEDURE deletar_mesa(id int)
BEGIN
    DELETE
    FROM MESA
    WHERE id_mesa=id;
END;

CREATE PROCEDURE inserir_status(tipo_status varchar(45))
BEGIN
    INSERT INTO STATUS
    VALUES
        (NULL,
         tipo_status);
END;

CREATE PROCEDURE deletar_status(id int)
BEGIN
    DELETE
    FROM STATUS
    WHERE id_status=id;
END;

CREATE PROCEDURE inserir_produto(id_categoria int, nome varchar(45), preco float, descricao varchar(60))
BEGIN
    INSERT INTO PRODUTO
    VALUES
        (NULL,
         id_categoria,
         nome,
         preco,
         descricao);
END;

CREATE PROCEDURE deletar_produto(id int)
BEGIN
    DELETE
    FROM PRODUTO
    WHERE id_produto=id;
END;

CREATE PROCEDURE inserir_categoria(nome varchar(30))
BEGIN
    INSERT INTO CATEGORIA
    VALUES
        (NULL,
         nome);
END;

CREATE PROCEDURE deletar_categoria(id int)
BEGIN
    DELETE
    FROM CATEGORIA
    WHERE id_categoria=id;
END;

CREATE PROCEDURE inserir_comanda(id_mesa int, data date)
BEGIN
    INSERT INTO COMANDA
    VALUES
        (NULL,
         id_mesa,
         data);
END;

CREATE PROCEDURE deletar_comanda(id int)
BEGIN
    DELETE
    FROM COMANDA
    WHERE id_comanda=id;
END;

CREATE PROCEDURE inserir_pedido(id_produto int, id_comanda int, id_status int)
BEGIN
    INSERT INTO PEDIDO
    VALUES
        (NULL,
         id_produto,
         id_comanda,
         id_status);
END;

CREATE PROCEDURE deletar_pedido(id int)
BEGIN
    DELETE
    FROM PEDIDO
    WHERE id_pedido=id;
END;

CREATE PROCEDURE inserir_caixa(id_comanda int, dinheiro_inicial float, dinheiro_final float, data date, obs varchar(60))
BEGIN
    INSERT INTO CAIXA
    VALUES
        (NULL,
         id_comanda,
         dinheiro_inicial,
         dinheiro_final,
         data,
         obs);
END;

CREATE PROCEDURE deletar_caixa(id int)
BEGIN
    DELETE
    FROM CAIXA
    WHERE id_caixa=id;
END;

create procedure fatprocedural(IN fat bigint)
begin
    DECLARE result BIGINT DEFAULT fat;
    WHILE fat>=0 DO
        if fat >= 2 then
            SET result = result * (fat-1);
        end if;
        SET fat = fat - 1;
    END WHILE ;
    select result;
end;

create procedure fatrecursive(IN fat bigint, OUT fatout bigint)
begin
    set max_sp_recursion_depth = 100;
    if fat>=2 then
        call fatrecursive(fat-1, fatout);
        select fat * fatout into fatout;
    else
        select fat into fatout;
    end if;
end;

/* Banco do Restaurante Trabalho */
drop DATABASE restaurante;
CREATE DATABASE restaurante;

USE restaurante;

CREATE TABLE ADM (
	id_adm INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	nome VARCHAR(40) NOT NULL,
	login VARCHAR(45) NOT NULL,
	senha VARCHAR(20) NOT NULL
);

CREATE TABLE STATUS (
	id_status INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	tipo_status VARCHAR(45) NOT NULL
);

CREATE TABLE CATEGORIA (
	id_categoria INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	nome VARCHAR(30) NOT NULL
);

CREATE TABLE PRODUTO (
	id_produto INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_categoria INT(11),
	nome VARCHAR(45) NOT NULL,
	preco FLOAT NOT NULL,
	descricao VARCHAR(60) NOT NULL,
	CONSTRAINT PRODUTO_CATEGORIA_FK
		FOREIGN KEY (id_categoria)
		REFERENCES CATEGORIA (id_categoria)
		ON DELETE SET NULL
		ON UPDATE CASCADE
);

CREATE TABLE MESA (
	id_mesa INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_status INT,
	CONSTRAINT MESA_STATUS_FK
		FOREIGN KEY (id_status)
		REFERENCES STATUS (id_status)
		ON DELETE SET NULL
		ON UPDATE CASCADE
);

CREATE TABLE COMANDA (
	id_comanda INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_mesa INT(11),
	data DATE NOT NULL,
	CONSTRAINT MESA_ID_FK
		FOREIGN KEY (id_mesa)
		REFERENCES MESA (id_mesa)
		ON DELETE SET NULL
		ON UPDATE CASCADE
);

CREATE TABLE PEDIDO (
	id_pedido INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_produto INT(11),
	id_comanda INT(11),
	id_status INT,
	CONSTRAINT PEDIDO_COMANDA_FK
		FOREIGN KEY (id_comanda)
		REFERENCES COMANDA (id_comanda)
		ON DELETE SET NULL
		ON UPDATE CASCADE,
	CONSTRAINT PEDIDO_PRODUTO_FK
		FOREIGN KEY (id_produto)
		REFERENCES PRODUTO (id_produto)
		ON DELETE SET NULL
		ON UPDATE CASCADE,
	CONSTRAINT PEDIDO_STATUS_FK
		FOREIGN KEY (id_status)
		REFERENCES STATUS (id_status)
		ON DELETE SET NULL
		ON UPDATE CASCADE
);

CREATE TABLE CAIXA (
	id_caixa INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
	id_comanda INT(11),
	dinheiro_inicial FLOAT NOT NULL,
	dinheiro_final FLOAT NOT NULL,
	data DATE NOT NULL,
	obs VARCHAR(60) NULL DEFAULT NULL,
	CONSTRAINT COMANDA_ID_FK
		FOREIGN KEY (id_comanda)
		REFERENCES COMANDA (id_comanda)
		ON DELETE SET NULL
		ON UPDATE CASCADE
);
CREATE TRIGGER adm_in AFTER
INSERT ON ADM
FOR EACH ROW 
BEGIN
	INSERT INTO restaurante_backup.BKP_ADM
	VALUES (NULL,
			new.id_adm,
			new.nome,
			new.login,
			new.senha,
			CURRENT_TIMESTAMP,
			'I',
			'A'); 
END;

CREATE TRIGGER adm_up AFTER
UPDATE ON ADM
FOR EACH ROW 
BEGIN
	INSERT INTO restaurante_backup.BKP_ADM
	VALUES (NULL,
			new.id_adm,
			new.nome,
			new.login,
			new.senha,
			CURRENT_TIMESTAMP,
			'U',
			'A'); 
END;

CREATE TRIGGER adm_del
BEFORE
DELETE ON ADM
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_ADM
	VALUES (NULL,
			old.id_adm,
			old.nome,
			old.login,
			old.senha,
			CURRENT_TIMESTAMP,
			'D',
			'B');
END;

CREATE TRIGGER caixa_in AFTER
INSERT ON CAIXA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_CAIXA
	VALUES (NULL,
			new.id_caixa,
			new.id_comanda,
			new.dinheiro_inicial,
			new.dinheiro_final,
			new.data,
			new.obs,
			CURRENT_TIMESTAMP,
			'I',
			'A');
END;

CREATE TRIGGER caixa_up AFTER
UPDATE ON CAIXA
FOR EACH ROW 
BEGIN
	INSERT INTO restaurante_backup.BKP_CAIXA
	VALUES (NULL,
			new.id_caixa,
			new.id_comanda,
			new.dinheiro_inicial,
			new.dinheiro_final,
			new.data,
			new.obs,
			CURRENT_TIMESTAMP,
			'U',
			'A'); 
END;

CREATE TRIGGER caixa_del
BEFORE
DELETE ON CAIXA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_CAIXA
	VALUES (NULL,
			old.id_caixa,
			old.id_comanda,
			old.dinheiro_inicial,
			old.dinheiro_final,
			old.data,
			old.obs,
			CURRENT_TIMESTAMP,
			'D',
			'B');
END;

CREATE TRIGGER categoria_in AFTER
INSERT ON CATEGORIA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_CATEGORIA
	VALUES (NULL,
			new.id_categoria,
			new.nome,
			CURRENT_TIMESTAMP,
			'I',
			'A');
END;

CREATE TRIGGER categoria_up AFTER
UPDATE ON CATEGORIA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_CATEGORIA
	VALUES (NULL,
			new.id_categoria,
			new.nome,
			CURRENT_TIMESTAMP,
			'U',
			'A');
END;

CREATE TRIGGER categoria_del
BEFORE
DELETE ON CATEGORIA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_CATEGORIA
	VALUES (NULL,
			old.id_categoria,
			old.nome,
			CURRENT_TIMESTAMP,
			'D',
			'B');
END;

CREATE TRIGGER comanda_in AFTER
INSERT ON COMANDA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_COMANDA
	VALUES (NULL,
			new.id_comanda,
			new.id_mesa,
			new.data,
			CURRENT_TIMESTAMP,
			'I',
			'A');
END;

CREATE TRIGGER comanda_up AFTER
UPDATE ON COMANDA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_COMANDA
	VALUES (NULL,
			new.id_comanda,
			new.id_mesa,
			new.data,
			CURRENT_TIMESTAMP,
			'U',
			'A');
END;

CREATE TRIGGER comanda_del
BEFORE
DELETE ON COMANDA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_COMANDA
	VALUES (NULL,
			old.id_comanda,
			old.id_mesa,
			old.data,
			CURRENT_TIMESTAMP,
			'D',
			'B');
END;

CREATE TRIGGER mesa_in AFTER
INSERT ON MESA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_MESA
	VALUES (NULL,
			new.id_mesa,
			new.id_status,
			CURRENT_TIMESTAMP,
			'I',
			'A');
END;

CREATE TRIGGER mesa_up AFTER
UPDATE ON MESA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_MESA
	VALUES (NULL,
			new.id_mesa,
			new.id_status,
			CURRENT_TIMESTAMP,
			'U',
			'A');
END;

CREATE TRIGGER mesa_del
BEFORE
DELETE ON MESA
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_MESA
	VALUES (NULL,
			old.id_mesa,
			old.id_status,
			CURRENT_TIMESTAMP,
			'D',
			'B');
END;

CREATE TRIGGER pedido_in AFTER
INSERT ON PEDIDO
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_PEDIDO
	VALUES (NULL,
			new.id_pedido,
			new.id_produto,
			new.id_comanda,
			new.id_status,
			CURRENT_TIMESTAMP,
			'I',
			'A');
END;

CREATE TRIGGER pedido_up AFTER
UPDATE ON PEDIDO
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_PEDIDO
	VALUES (NULL,
			new.id_pedido,
			new.id_produto,
			new.id_comanda,
			new.id_status,
			CURRENT_TIMESTAMP,
			'U',
			'A');
END;

CREATE TRIGGER pedido_del
BEFORE
DELETE ON PEDIDO
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_PEDIDO
	VALUES (NULL,
			old.id_pedido,
			old.id_produto,
			old.id_comanda,
			old.id_status,
			CURRENT_TIMESTAMP,
			'D',
			'B');
END;

CREATE TRIGGER produto_in AFTER
INSERT ON PRODUTO
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_PRODUTO
	VALUES (NULL,
			new.id_produto,
			new.id_categoria,
			new.nome,
			new.preco,
			new.descricao,
			CURRENT_TIMESTAMP,
			'I',
			'A');
END;

CREATE TRIGGER produto_up AFTER
UPDATE ON PRODUTO
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_PRODUTO
	VALUES (NULL,
			new.id_produto,
			new.id_categoria,
			new.nome,
			new.preco,
			new.descricao,
			CURRENT_TIMESTAMP,
			'U',
			'A');
END;

CREATE TRIGGER produto_del
BEFORE
DELETE ON PRODUTO
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_PRODUTO
	VALUES (NULL,
			old.id_produto,
			old.id_categoria,
			old.nome,
			old.preco,
			old.descricao,
			CURRENT_TIMESTAMP,
			'D',
			'B');
END;

CREATE TRIGGER status_in AFTER
INSERT ON STATUS
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_STATUS
	VALUES (NULL,
			new.id_status,
			new.tipo_status,
			CURRENT_TIMESTAMP,
			'I',
			'A');
END;

CREATE TRIGGER status_up AFTER
UPDATE ON STATUS
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_STATUS
	VALUES (NULL,
			new.id_status,
			new.tipo_status,
			CURRENT_TIMESTAMP,
			'U',
			'A');
END;

CREATE TRIGGER status_del
BEFORE
DELETE ON STATUS
FOR EACH ROW
BEGIN
	INSERT INTO restaurante_backup.BKP_STATUS
	VALUES (NULL,
			old.id_status,
			old.tipo_status,
			CURRENT_TIMESTAMP,
			'D',
			'B');
END;
CREATE OR REPLACE VIEW valor_a_pagar as
    SELECT
        C.id_comanda as "COMANDA",
        C.data as "DATA",
        sum(P2.preco) as "VALOR"
    FROM COMANDA C
        JOIN PEDIDO P on C.id_comanda = P.id_comanda
        JOIN PRODUTO P2 on P.id_produto = P2.id_produto
        WHERE id_status=3
        GROUP BY C.id_comanda;

CREATE OR REPLACE VIEW pedidos as
    SELECT P.nome as "PEDIDO",
           P.preco as "PRECO",
           C2.nome as "CATEGORIA",
           P.descricao as "DESCRICAO",
           C.id_comanda as "COMANDA",
           id_mesa as "MESA",
           tipo_status as "STATUS"
    FROM PEDIDO PE
        JOIN PRODUTO P on PE.id_produto = P.id_produto
        JOIN COMANDA C on PE.id_comanda = C.id_comanda
        JOIN STATUS S on PE.id_status = S.id_status
        JOIN CATEGORIA C2 on P.id_categoria = C2.id_categoria