Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 2
            [id] => 546600
            [titulo] => Trabalho de Banco de Dados
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-02-23 12:57:30
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 418027
            [status] => A
            [isExample] => 
            [NomeUsuario] => Jothaz
            [Apelido] => 
            [Foto] => 418027_20150313165406.jpg
            [Conteudo] => [quote]Por ter ficado um pouco extenso, me perdi nas entidades e seus atributos com seus relacionamentos.[/quote]

Posta o que você já fez e descreva suas dificuldades, pois sua resposta acima é muito vaga.

Assim fica mais fácil ajudá-lo! ) )

Trabalho de Banco de Dados

Jardel Martins
|
MVP
    23 fev 2016

Bom dia!
Meu professor de BD, passou um trabalho para fechar notas e estou tendo algumas dúvidas e como o tempo é curto resolvi recorrer a vocês. Gostaria de saber até que ponto podem me ajudar.

Projeto de Implementação SGBD

Descrição do Problema
A rede de hotéis Bom Sono necessita de uma aplicação de banco de dados para gerenciar suas atividades financeiras. O gerente forneceu a seguinte descrição
A rede BomSono possui hotéis em diversas cidades. Cada hotel possui apartamentos de diferentes tipos. Existem apartamentos com um ou duas camas de casal, casal com uma cama de solteiro, casal com duas camas de solteiro e apartamentos com 1,2,3 e 4 camas. Alguns destes quartos são adaptados para pessoas portadoras de necessidade especiais. Os apartamentos podem ou não ter TV e/ou frigobar e cada tipo de apartamento tem um valor de diária fixo.
As reservas são feitas com antecedência. O cliente deve-se cadastrar no site informando o nome, endereço, nacionalidade, e-mail, telefone de contato e uma senha. Para reserva deve-se escolher um tipo de apartamento, informar o número de pessoas e as datas previstas para entrada e saída. Um cliente pode realizar várias reservas e cada reserva tem um código de identificação.
Quando um cliente chega ao hotel e faz o check-in, uma conta é aberta é aberta para aquele período de hospedagem e todo consumo realizado fica associada a esta hospedagem. Uma nota fiscal com o valor total será gerada no momento do check-out. O pagamento pode ser feito em cheque, cartão de crédito ou de débito.
Cada diária da direito apenas o café da manhã. Despesas de consumo do frigobar são anotadas diariamente, pela camareira que arruma o quarto. Por questões de segurança e necessário registrar diariamente qual camareira arrumou cada quarto. Além das camareiras o hotel tem funcionários atendentes de recepção de serviço de quarto, serviço geral e gerentes. É necessário guardar os dados de cada funcionário.
O restaurante é terceirizado e por isso, as refeições e demais consumos realizados no restaurante são lançados na conta do hospede por meio de uma nota completa de consumo, que deve estar assinada pelo hospede. Consumos do restaurante entregues no quarto tem o acréscimo de 10%.
O hotel ainda oferece serviços de lavandeiria, e existe uma tabela de preços disponíveis no quarto (Ex: 1- Lavar e passar terno, 2- Lavar e passar vestido, 3- Camisa social, etc.). Eventuais serviços de lavanderia também são contabilizados na conta do hospede.
O cliente pode entrar no site e cancelar sua reserva, sem custo se o cancelamento for feito com dois dias de antecedência. Reservas não canceladas no prazo e/ou no-show geram uma cobrança de uma diária. O banco de dados deve manter o histórico de todos os dados necessários ao controle da estádia dos hóspedes.
Descrição do Trabalho:
Os trabalhos devem ser feitos em grupos de 3 e 4 pessoas.
1ª Etapa: Elaborar o esquema conceitual diagrama EER. Para um banco de dados a ser utilizados para gerenciar as informações do hotel.
2ª Etapa: Projetar o banco de dados do sistema para o SGBD MySQLe gerar o esquema lógico.
3ª Etapa: Criar uma base de dados e elaborar as seguintes consultas:
a) Obter dados dos clientes;
b) Consultar as reservas de um determinado cliente.
c) Obter os dados de todos os hóspedes, conforme a ficha do Ministério do Turismo
d) Consultar os consumos e valores de diárias de um determinado hóspede.
e) Gerar nota fiscal completa no ato do check-out.
f) Obter os relatórios financeiros, por hotel, por cliente. Além de relatórios consolidados por semana e por mês.
g) Obter relatório de cancelamentos.
h) Fazer uso de funções, gatilhos e procedimentos na especificação do banco de dados.
i) Inserir dados no BD.

Post mais votado

Jothaz
   - 23 fev 2016


Citação:
Por ter ficado um pouco extenso, me perdi nas entidades e seus atributos com seus relacionamentos.


Posta o que você já fez e descreva suas dificuldades, pois sua resposta acima é muito vaga.

Assim fica mais fácil ajudá-lo!

Jose Fernando
   - 23 fev 2016

Beleza, você passou descrição do trabalho, qual sua duvida?

Jardel Martins
|
MVP
    23 fev 2016

Por ter ficado um pouco extenso, me perdi nas entidades e seus atributos com seus relacionamentos.

Jose Fernando
   - 23 fev 2016

Posta o que você fez e o que está em dificuldade em fazer, mas iniciado.

Jardel Martins
|
MVP
    23 fev 2016

Acredito q se for desse jeito, ficará enorme (Clique na imagem para abrir em uma nova janela)

Nogueira
   - 23 fev 2016

Olá Jardel,

Que ferramente esta utilizando para criar o seu modelo?

Jardel Martins
|
MVP
    23 fev 2016

Ai, foi no word mesmo, mas eu utilizo o DIA

Jose Fernando
   - 23 fev 2016

use o datamodeler e o DBDesigner.

Nogueira
   - 23 fev 2016

Agora que li em cima, realmente diagramas EER são chatos de elaborar e tem poucas ferraentas.

Olhando o seu modelo, como o EER é mais conceitual e não é prático, eu acredito que não seja necessário ter uma entidade chamada hotel_cidade, pois esta já é representada por Hotel - localiza - Cidade, da mesma forma que precisa ter uma relação N:N de hotel e reserva, sem ligação com hotel_cidade (que não existirá mais)

Jose Fernando
   - 23 fev 2016

Concordo, mas é melhor que usar programas de desenho.

Nogueira
   - 23 fev 2016


Citação:
Concordo, mas é melhor que usar programas de desenho.


Sim, mas ele quer criar o modelo EER conceitua, não estou certo de que essas ferramentas tem a opção de criar este diagrama

Jardel Martins
|
MVP
    23 fev 2016

Hotel -> Cidade, não seria N:N?
se N:N não gera automaticamente uma nova tabela?

Nogueira
   - 23 fev 2016

Sim, mas este automaticamente em um modelo conceitual EER, não precisa existir a representação desta tabela entende?

O fato da relação 'localiza' ser N:N deixa implícito que terá uma nova tabela

Jardel Martins
|
MVP
    23 fev 2016

Como teriam muitos N:N no conceitual diminuiriam bastante as tabelas? seria isso? poderia esboçar como ficaria por favor?!!

Marcos P
   - 23 fev 2016

Jardel,

Uma dúvida : por quê o relacionamento Hotel x Cidade é N : N ?

Hotel, nesse caso é a unidade do hotel que você está modelando e não os diferentes hotéis que existem pela cidade... certo ?

Se for isso, o relacionamento é Hotel 1 x N Cidade, ou seja... Uma cidade tem várias unidades do hotel, mas uma dada unidade está sempre em uma ( e apenas uma ) cidade.

É isso ou entendi errado ?

Jardel Martins
|
MVP
    23 fev 2016

Rapaz isso é um dilema:

Pq inicialmente pensei do seu jeito e depois pensei:

Uma cidade pode ter vários hotéis,
e um mesmo hotel (mesmo cnpj) em várias cidades

Marcos P
   - 23 fev 2016

Não confunda uma rede de hotéis com uma unidade de uma rede de hotéis...

Se você está desenvolvendo um sistema para uma rede de hotéis, ou seja, seu cliente é uma rede de hotéis... você deve tratar Hotel como Unidade.

Afinal, os hóspedes, funcionários, reservas, consumos... se aplicam sempre a uma unidade ( podendo ser consolidados, em tempo de consulta, para a rede toda ! ).

Mesmo que seu sistema seja "multi-rede", continua valendo a regra de Hotel 1 : N Cidade. O que deveria ser incorporado nesse caso, é a rede a qual a unidade pertence ( Rede 1 : N Hotel ).

Modelar é criar definições e impor limites... crie os seus !

Jardel Martins
|
MVP
    23 fev 2016

Acredito que eu tenha entendido

Marcos P
   - 23 fev 2016


Citação:
Modelar é criar definições e impor limites... crie os seus !


Boa sorte !

David Sylvestre
   - 26 fev 2016


Citação:
Rapaz isso é um dilema:

Pq inicialmente pensei do seu jeito e depois pensei:

Uma cidade pode ter vários hotéis,
e um mesmo hotel (mesmo cnpj) em várias cidades

Jardel, mude seu ponto de visão ao desenvolver, tente se aproximar mais do cliente (professor) e entenda qual a real necessidade do sistema tirando essas duvidas.
É melhor entender a regra real que o cliente vive do que supor, desenvolver e ver que nao atende.

Jardel Martins
|
MVP
    11 mar 2016

Gnt pra acabar me ajudem, não consegui fazer as questoes seguintes:

f) Obter os relatórios financeiros, por hotel, por cliente. Além de relatórios consolidados por semana e por mês.
g) Obter relatório de cancelamentos.

segue o banco em anexo#Código

-- MySQL Workbench Synchronization
-- Generated: 2016-02-28 14:29
-- Model: New Model
-- Version: 1.0
-- Project: Name of the project
-- Author: Jardel_Martins

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`tab_cidade` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(100) NOT NULL,
  `cep` VARCHAR(25) NOT NULL,
  `uf` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_cliente` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(100) NOT NULL,
  `cpf` VARCHAR(15) NOT NULL,
  `endereco` VARCHAR(45) NOT NULL,
  `nacionalidade` VARCHAR(45) NOT NULL,
  `email` VARCHAR(85) NOT NULL,
  `telefone` VARCHAR(45) NOT NULL,
  `senha` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`funcionarios` (
  `id` INT(8) ZEROFILL NOT NULL,
  `nome` VARCHAR(125) NOT NULL,
  `cpf` VARCHAR(15) NULL DEFAULT NULL,
  `funcao` VARCHAR(120) NULL DEFAULT NULL,
  `salario` DECIMAL(8,2) NULL DEFAULT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_hotel` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `cnpj` VARCHAR(25) NOT NULL,
  `cidade_id` INT(11) NOT NULL,
  `nome` VARCHAR(100) NOT NULL,
  INDEX `fk_hotel_cidade1_idx` (`cidade_id` ASC),
  UNIQUE INDEX `cnpj_Hotel_UNIQUE` (`cnpj` ASC),
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_hotel_cidade1`
    FOREIGN KEY (`cidade_id`)
    REFERENCES `hotel_bomsono`.`tab_cidade` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`nota_fiscal` (
  `id` INT(11) NOT NULL,
  `cliente_id` INT(11) NOT NULL,
  `data_emissao` DATE NOT NULL,
  `chave` VARCHAR(45) NOT NULL,
  `numero` INT(11) NULL DEFAULT NULL,
  `serie` INT(11) NULL DEFAULT NULL,
  `valor_total` DECIMAL(12,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`id`),
  INDEX `fk_nota_fiscal_cad_cliente1_idx` (`cliente_id` ASC),
  CONSTRAINT `fk_nota_fiscal_cad_cliente1`
    FOREIGN KEY (`cliente_id`)
    REFERENCES `hotel_bomsono`.`cad_cliente` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_reserva` (
  `codigo` INT(11) ZEROFILL NOT NULL AUTO_INCREMENT,
  `cliente_id` INT(11) NOT NULL,
  `apartamentos_id` INT(11) NOT NULL,
  `num_pessoa` INT(11) NOT NULL,
  `data_entrada` DATE NOT NULL,
  `data_saida` DATE NOT NULL,
  `cancelamento` ENUM('true', 'false') NOT NULL DEFAULT 'false',
  PRIMARY KEY (`codigo`),
  INDEX `fk_cad_reserva_cad_apartamento1_idx` (`apartamentos_id` ASC),
  INDEX `fk_cad_reserva_cad_cliente1_idx` (`cliente_id` ASC),
  CONSTRAINT `fk_cad_reserva_cad_apartamento1`
    FOREIGN KEY (`apartamentos_id`)
    REFERENCES `hotel_bomsono`.`cad_apartamento` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_cad_reserva_cad_cliente1`
    FOREIGN KEY (`cliente_id`)
    REFERENCES `hotel_bomsono`.`cad_cliente` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_apartamento` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `hotel_id` INT(11) NOT NULL,
  `cama_casal` INT(2) ZEROFILL NOT NULL,
  `cama_solteiro` INT(2) ZEROFILL NOT NULL,
  `necessidade_especial` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'NAO',
  `tv` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'NAO',
  `frigobar` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'NAO',
  `valor_diaria` DECIMAL(8,2) NOT NULL,
  INDEX `fk_cad_apartamento_cad_hotel1_idx` (`hotel_id` ASC),
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_cad_apartamento_cad_hotel1`
    FOREIGN KEY (`hotel_id`)
    REFERENCES `hotel_bomsono`.`cad_hotel` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`hot_checkin` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `reserva_codigo` INT(11) ZEROFILL NOT NULL,
  `data_entrada` DATE NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_hot_checkin_cad_reserva1_idx` (`reserva_codigo` ASC),
  CONSTRAINT `fk_hot_checkin_cad_reserva1`
    FOREIGN KEY (`reserva_codigo`)
    REFERENCES `hotel_bomsono`.`cad_reserva` (`codigo`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`hot_conta` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `checkin_id` INT(11) NOT NULL,
  `valor_conta` DECIMAL(8,2) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_hot_conta_hot_checkin1_idx` (`checkin_id` ASC),
  CONSTRAINT `fk_hot_conta_hot_checkin1`
    FOREIGN KEY (`checkin_id`)
    REFERENCES `hotel_bomsono`.`hot_checkin` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_servico` (
  `codigo` INT(8) ZEROFILL NOT NULL,
  `descricao` VARCHAR(120) NOT NULL,
  `valor_unitario` DECIMAL(8,2) NOT NULL,
  `tipo_servico` VARCHAR(45) NULL DEFAULT NULL,
  PRIMARY KEY (`codigo`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_limpeza_apartamento` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `apartamentos_id` INT(11) NOT NULL,
  `funcionarios_id` INT(8) ZEROFILL NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_cad_limpeza_apartamento_cad_apartamento1_idx` (`apartamentos_id` ASC),
  INDEX `fk_cad_limpeza_apartamento_funcionarios1_idx` (`funcionarios_id` ASC),
  CONSTRAINT `fk_cad_limpeza_apartamento_cad_apartamento1`
    FOREIGN KEY (`apartamentos_id`)
    REFERENCES `hotel_bomsono`.`cad_apartamento` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_cad_limpeza_apartamento_funcionarios1`
    FOREIGN KEY (`funcionarios_id`)
    REFERENCES `hotel_bomsono`.`funcionarios` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_conta_restaurante` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `valor_consumido` DECIMAL(12,2) NOT NULL,
  `conta_id` INT(11) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_cad_conta_restaurante_hot_conta1_idx` (`conta_id` ASC),
  CONSTRAINT `fk_cad_conta_restaurante_hot_conta1`
    FOREIGN KEY (`conta_id`)
    REFERENCES `hotel_bomsono`.`hot_conta` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`consumo_restaurante` (
  `conta_restaurante_id` INT(11) NOT NULL,
  `codigo_produto` INT(8) ZEROFILL NOT NULL,
  `quantidade` DECIMAL(8,2) NOT NULL,
  `entrega_domicilio` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'NAO',
  `recibo_assinado` ENUM('SIM', 'NAO') NOT NULL DEFAULT 'SIM',
  INDEX `fk_consumo_restaurante_cad_conta_restaurante1_idx` (`conta_restaurante_id` ASC),
  PRIMARY KEY (`codigo_produto`),
  CONSTRAINT `fk_consumo_restaurante_cad_conta_restaurante1`
    FOREIGN KEY (`conta_restaurante_id`)
    REFERENCES `hotel_bomsono`.`cad_conta_restaurante` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_consumo_restaurante_cad_produtos_restaurante1`
    FOREIGN KEY (`codigo_produto`)
    REFERENCES `hotel_bomsono`.`cad_produtos_restaurante` (`codigo`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`cad_produtos_restaurante` (
  `codigo` INT(8) ZEROFILL NOT NULL,
  `descricao` VARCHAR(120) NOT NULL,
  `valor_unitario` DECIMAL(8,2) NOT NULL,
  PRIMARY KEY (`codigo`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`consumo_servico` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `codigo_servico` INT(8) ZEROFILL NOT NULL,
  `conta_id` INT(11) NOT NULL,
  `quantidade` VARCHAR(45) NOT NULL,
  `valor_servico` DECIMAL(12,2) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_consumo_servico_hot_conta1_idx` (`conta_id` ASC),
  INDEX `fk_consumo_servico_cad_servico1_idx` (`codigo_servico` ASC),
  CONSTRAINT `fk_consumo_servico_hot_conta1`
    FOREIGN KEY (`conta_id`)
    REFERENCES `hotel_bomsono`.`hot_conta` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_consumo_servico_cad_servico1`
    FOREIGN KEY (`codigo_servico`)
    REFERENCES `hotel_bomsono`.`cad_servico` (`codigo`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `hotel_bomsono`.`hot_check_out` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `checkin_id` INT(11) NOT NULL,
  `data_saida` DATE NOT NULL,
  `valor_total` DECIMAL(12,2) NOT NULL,
  `tipo_pagamento` ENUM('cheque', 'debito', 'credito') NOT NULL,
  `nota_fiscal_id` INT(11) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_hot_check_out_hot_checkin1_idx` (`checkin_id` ASC),
  INDEX `fk_hot_check_out_nota_fiscal1_idx` (`nota_fiscal_id` ASC),
  CONSTRAINT `fk_hot_check_out_hot_checkin1`
    FOREIGN KEY (`checkin_id`)
    REFERENCES `hotel_bomsono`.`hot_checkin` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_hot_check_out_nota_fiscal1`
    FOREIGN KEY (`nota_fiscal_id`)
    REFERENCES `hotel_bomsono`.`nota_fiscal` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

-- INSERTS DADOS

INSERT INTO `hotel_bomsono`.`tab_cidade` (`id`, `nome`, `cep`, `uf`) VALUES ('1', 'Almenara', '399000-000', 'MG');
INSERT INTO `hotel_bomsono`.`tab_cidade` (`id`, `nome`, `cep`, `uf`) VALUES ('2', 'Medina', '391299-000', 'MG');
INSERT INTO `hotel_bomsono`.`tab_cidade` (`id`, `nome`, `cep`, `uf`) VALUES ('3', 'Porto Seguro', '381291-992', 'BA');

INSERT INTO `hotel_bomsono`.`cad_hotel` (`cnpj`, `cidade_id`, `nome`) VALUES ('38.354.344/0001-71', '1', 'HOTEL BOM SONO SEDE');
INSERT INTO `hotel_bomsono`.`cad_hotel` (`cnpj`, `cidade_id`, `nome`) VALUES ('69.866.311/0001-34', '2', 'HOTEL BOM SONO I');
INSERT INTO `hotel_bomsono`.`cad_hotel` (`cnpj`, `cidade_id`, `nome`) VALUES ('03.852.142/0001-75', '3', 'HOTEL BOM SONO BA');

INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `tv`, `frigobar`, `valor_diaria`) VALUES ('1', '2', '1', 'SIM', 'SIM', '120');
INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `tv`, `frigobar`, `valor_diaria`) VALUES ('1', '1', '0', 'SIM', 'SIM', '100');
INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `necessidade_especial`, `tv`, `frigobar`, `valor_diaria`) VALUES ('1', '0', '4', 'SIM', 'SIM', 'NAO', '130');
INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `valor_diaria`) VALUES ('2', '1', '2', '110');
INSERT INTO `hotel_bomsono`.`cad_apartamento` (`hotel_id`, `cama_casal`, `cama_solteiro`, `necessidade_especial`, `tv`, `frigobar`, `valor_diaria`) VALUES ('2', '2', '0', 'SIM', 'NAO', 'SIM', '140');

call sp_InsereCliente("Thiago Alves", "121.562.506-50", "brasileiro","Rua 41","thiago@mg.com.br","(44)1241-2412","tezinha");

call sp_InsereDadosReserva(1,1,2,'2016-08-24','2016-08-26');

INSERT INTO `hotel_bomsono`.`hotel_check_in` (`reserva_codigo`, `data_entrada`) VALUES ('00000000001', '2016-08-24');


-- tg_CriarReserva
DELIMITER $$
 
CREATE TRIGGER tg_CriarReserva AFTER INSERT
ON dados_reserva
FOR EACH ROW
BEGIN
    INSERT INTO cad_reserva  (dados_id, apartamento_id, num_pessoa, data_entrada, data_saida) 
			VALUES (NEW.id, NEW.apartamento_id, NEW.num_pessoa, NEW.data_entrada,NEW.data_saida);
END$$

DELIMITER ;

USE `hotel_bomsono`;
DROP procedure IF EXISTS `sp_InsereCliente`;

DELIMITER $$
USE `hotel_bomsono`$$
CREATE PROCEDURE `sp_InsereCliente` (in vNome varchar(120), 
									 in vCpf varchar(15), 
									 in vNacionalidade varchar(120),
                                     in vEndereco varchar(120),
                                     in vEmail varchar(120),
                                     in vTelefone varchar(18),
                                     in vSenha varchar(16))
BEGIN
IF ((vNome != '') && (vCpf != '')) THEN
INSERT INTO cad_cliente (nome, cpf, nacionalidade , endereco, email, telefone, senha)
VALUES (vNome, vCpf, vNacionalidade, vEndereco, vEmail, vTelefone, vSenha);
ELSE
SELECT 'NOME e CPF devem ser fornecidos para o cadastro!' AS Msg;
END IF; 
END$$

DELIMITER ;

call sp_InsereCliente("Thiago Alves", "121.562.506-50", "brasileiro","Rua 41","thiago@mg.com.br","(44)1241-2412","tezinha");

USE `hotel_bomsono`;
DROP procedure IF EXISTS `sp_InsereDadosReserva`;

DELIMITER $$
USE `hotel_bomsono`$$
CREATE PROCEDURE `sp_InsereDadosReserva` (in vCliente_id INT, 
										  in vApartamento_id INT, 
										  in vNum_pessoa INT,
										  in vData_entrada DATE,
										  in vData_saida DATE)
BEGIN
IF ((vCliente_id != '') && (vApartamento_id != '')) THEN
INSERT INTO dados_reserva (cliente_id, apartamento_id, num_pessoa , data_entrada, data_saida)
VALUES (vCliente_id, vApartamento_id, vNum_pessoa, vData_entrada, vData_saida);
SELECT '  realizado com sucesso!' AS Msg;
ELSE
SELECT 'Cliente e Apartamento devem ser fornecidos para o cadastro!' AS Msg;
END IF; 

END$$

DELIMITER ;

call sp_InsereDadosReserva(1,1,2,'2016-08-24','2016-08-26');

-- tg_AbrirConta

DELIMITER $$
 
CREATE TRIGGER tg_AbrirConta AFTER INSERT
ON hotel_check_in
FOR EACH ROW
BEGIN
    INSERT INTO hotel_conta  (checkin_id, valor_conta) 
			VALUES (NEW.id, 0);
END$$

DELIMITER ;

--tg_AtualizaConsumoRestaurante

DELIMITER $$
 
CREATE TRIGGER tg_AtualizaConsumoRestaurante AFTER INSERT
ON consumo_restaurante
FOR EACH ROW
BEGIN
declare valor_total decimal(8,2);
	
    IF (NEW.entrega_domicilio = "SIM") THEN 
    SET valor_total = (NEW.valor_unitario * NEW.quantidade) * 1.10;
    ELSE 
		SET valor_total = (NEW.valor_unitario * NEW.quantidade);
    END IF;
    
    UPDATE hotel_conta SET valor_consumido = valor_total
	WHERE reserva_codigo = NEW.reserva_codigo AND NEW.recibo_assinado = "SIM";
END$$

DELIMITER ;

--tg_AtualizaConsumoServico
DELIMITER $$
 
CREATE TRIGGER tg_AtualizaConsumoServico AFTER INSERT
ON consumo_servico
FOR EACH ROW
BEGIN
declare valor_total decimal(8,2);

    SET valor_total = (NEW.valor_unitario * NEW.quantidade) * 1.10;

    UPDATE hotel_conta SET valor_consumido = valor_consumido + valor_total
	WHERE reserva_codigo = NEW.reserva_codigo;
END$$

DELIMITER ;

MARTINS CONSTR