-- 1. Mudar o delimitador
DELIMITER $$
-- 2. Criar a Procedure com a nova lógica (duracao ao invés de data final)
CREATE PROCEDURE novoAluguel_Final (
IN vAluguel VARCHAR(10),
IN vCliente VARCHAR(10),
IN vHospedagem VARCHAR(10),
IN vDataInicio DATE,
IN vDuracaoDias INT, -- Novo parâmetro: Duração em dias
IN vPrecoUnitario DECIMAL(10,2)
)
BEGIN
DECLARE vDataFinal DATE;
DECLARE vPrecoTotal DECIMAL(10,2);
DECLARE vMensagem VARCHAR(150);
-- TRATAMENTO DE ERRO: Gerencia o erro de Chave Duplicada (Código 1062)
DECLARE EXIT HANDLER FOR 1062
BEGIN
SET vMensagem = CONCAT('ERRO 1062: O ID de aluguel (', vAluguel, ') já existe na base.');
SELECT vMensagem;
END;
-- 3. CÁLCULO DE REGRAS DE NEGÓCIO
-- Substituir data final pela duração: Usa DATE_ADD(data, INTERVAL valor unidade)
SET vDataFinal = DATE_ADD(vDataInicio, INTERVAL vDuracaoDias DAY);
-- Determinar o custo total: Multiplica dias pela diária
SET vPrecoTotal = vDuracaoDias * vPrecoUnitario;
-- 4. INSERÇÃO SEGURA (DML)
INSERT INTO alugueis
(aluguel_id, cliente_id, hospedagem_id, data_inicio, data_final, preco_total)
VALUES
(vAluguel, vCliente, vHospedagem, vDataInicio, vDataFinal, vPrecoTotal);
-- Mensagem de sucesso
SET vMensagem = CONCAT('SUCESSO: Aluguel ', vAluguel, ' incluído. Data Final Calculada: ', vDataFinal);
SELECT vMensagem;
END$$
-- 5. Restaurar o delimitador
DELIMITER ;