Está en la página 1de 7

Crear una habitación

create or replace procedure agregar_hab(ide in number, camas in number,


precio in FLOAT) as
numero number := 0;
BEGIN
   
    select count(id) into numero from HABITACION where id = ide;

    if(precio <= 0) then


        dbms_output.put_line('El precio costo por dia tiene que ser mayor a
0');
        rollback;
    elsif (numero > 0) then
        dbms_output.put_line('Ya hay ' || numero || ' habitacion con el
mismo numero');
        rollback;
    elsif (numero = 0 AND precio > 0) THEN
    insert into habitacion (id,numero_camas, costo) values(ide,
camas,precio);
    commit;
    end if;
end;

Modificar una habitación

create or replace procedure modif_hab(ide in number, camas in number, precio


in float) as
BEGIN
    update HABITACION
    set numero_camas=camas, costo=precio
    where id=ide;
end;
Eliminar una habitación

create or replace procedure elim_hab(ide in number) as


numero number:= 0;
BEGIN
    select count(*) into numero from reservacion where fk_hab = ide AND
reservacion.STATUS like '%RESERVADA' or reservacion.STATUS like '%ocupada';

    if(numero > 0) THEN


        dbms_output.put_line('La habitacion esta ocupada o reservada');
        rollback;
    else
        delete from habitacion where id=ide;
        commit;
    end if;
end;
Reservación de habitación

create or replace procedure agregar_reserv(fk_habv in number, fk_usrv in


number, fecha_iniciov in date, fecha_finv in date) as
dias int :=0;
cos_hab NUMBER;
costototal float:=0.0;
existe number:=0;
reservada number :=0;
usuariorico number := 0;
num_res number;
rescount number;
begin
    insert into reservacion_temp select * from reservacion where fk_hab =
fk_habv AND reservacion.STATUS like '%RESERVADA' OR reservacion.STATUS like
'%OCUPADA';
    select count(id) into rescount from reservacion_temp;

    if(rescount=0)then
        reservada:=0;
    else
        for row in (select * from reservacion_temp) loop
            if(fecha_iniciov between row.fecha_inicio AND row.fecha_fin OR
fecha_finv between row.fecha_inicio AND row.fecha_fin) then
                reservada := 1;
            end if;
        end loop;
    end if;

   

    dias := fecha_finv - fecha_iniciov;


    select costo into cos_hab from habitacion where id = fk_habv;
    costototal :=  dias*cos_hab;
    select count(id) into existe from HABITACION where id = fk_habv;
    select saldo into usuariorico from usuario where id_ = fk_usrv;
   
    insert into reservacion (fk_hab, fk_usr, fecha_inicio, fecha_fin,
reservacion.status, costo_total) values(fk_habv, fk_usrv, fecha_iniciov,
fecha_finv, 'RESERVADA', costototal);
    select max(id) into num_res from reservacion;

    if(existe!=1)THEN
        dbms_output.put_line('Habitación inexistente');
        rollback;
    elsif(reservada=1) then
        dbms_output.put_line('La habitacion esta ocupada o reservada');
        rollback;
    elsif(usuariorico<costototal) then
        dbms_output.put_line('El usuario no cuenta con saldo suficiente,
srry :(');
        rollback;
    else
        update usuario set saldo = saldo - costototal where id_ = fk_usrv;
        dbms_output.put_line('Numero de reservación: ' || num_res);
        dbms_output.put_line('Numero de habitación: ' || fk_habv);
        dbms_output.put_line('El total de dias reservados es: ' || dias);
        dbms_output.put_line('Fecha inicio: ' || fecha_iniciov || '  Fecha
fin: ' || fecha_finv);
        dbms_output.put_line('Monto a pagar: ' || costototal);
        dbms_output.put_line('El status ahora es: RESERVADA');
        dbms_output.put_line(' ');
        dbms_output.put_line('FAVOR DE CONSERVAR SU NUMERO DE RESERVACIÓN,
YA QUE SERA NECESARIO A LA HORA DE OCUPAR LA HABITACIÓN O EN CASO DE
CANCELAR');
        execute immediate 'truncate table reservacion_temp';
        commit;
    end if;
end;
Cancelar habitación

create or replace procedure cancel_hab(numero_rev in number) as


existe number;
reservada number;
ocupada number;
devol number;
costo_hab number;
usuario number;
BEGIN

    select count(*) into ocupada from reservacion where id=numero_rev AND


reservacion.STATUS like '%OCUPADA';
    select count(*) into reservada from reservacion where id=numero_rev AND
reservacion.STATUS like '%RESERVADA';
    select count(*) into existe from reservacion where id=numero_rev AND
reservacion.STATUS like '%RESERVADA' OR reservacion.STATUS like '%OCUPADA';
    select costo_total into costo_hab from reservacion where id=numero_rev;
    select fk_usr into usuario from reservacion where id=numero_rev;
    update reservacion set reservacion.status='CANCELADO' where
id=numero_rev;

    if(existe=0)then
        dbms_output.put_line('La reservación no existe');
        rollback;
    elsif(ocupada=1) THEN
        devol:=costo_hab*0.60;
        deposito(usuario,devol, 'Devolución');
        commit;
    elsif(reservada=1)THEN
        devol:=costo_hab*0.90;
        deposito(usuario,devol, 'Devolución');
        commit;
    end if;
end;

Ocupar Habitación

create or replace procedure ocupar_hab(numero_rev in number) as


existe number;
BEGIN
    select count(*) into existe from reservacion where id=numero_rev AND
reservacion.STATUS like '%RESERVADA';

    if(existe=0)then
        dbms_output.put_line('La reservación no existe, ya esta ocupada o ha
sido cancelada');
        rollback;
    else
        update reservacion set reservacion.status='OCUPADA' where
id=numero_rev;
        commit;
    end if;
end;

Finalizar reservación

create or replace procedure fin_rev(numero_rev in number) as


existe number;
fechaxd date;
dias int;
cobro number;
usuariorico number;
usu_id number;
costototal number;
hab_id number;
begin
    select count(*) into existe from reservacion where id=numero_rev AND
reservacion.STATUS like '%RESERVADA';
    select fecha_fin into fechaxd from reservacion where id=numero_rev;

    if(existe=0)then
        dbms_output.put_line('La reservación no existe o ya ha sido
finalizada');
        rollback;
    end if;
    if(sysdate=fechaxd)then
        update reservacion set reservacion.status='FINALIZADA' where
id=numero_rev;
        dbms_output.put_line('Vuelva pronto :)');
        commit;
    elsif(sysdate<fechaxd)then
        dbms_output.put_line('Por que se va antes? :(, no le gustó ¿verdad?
anyways, no hay devoluciones');
        commit;
    else
        select fk_usr into usu_id from reservacion where id=numero_rev;
        select fk_hab into hab_id from reservacion where id=numero_rev;
        select saldo into usuariorico from usuario where id_=usu_id;
        select costo into costototal from habitacion where id=hab_id;
        dias:=fechaxd-sysdate;
        cobro:=dias*costototal;

        if(cobro>usuariorico)then
            dbms_output.put_line('LLAMANDO A LA POLICIA');
            rollback;
        else
            retiro(usu_id,cobro);
            dbms_output.put_line('Se le han cobrado los dias extra, se puede
retirar');
            commit;
        end if;
       
    end if;
end;

También podría gustarte