241 lines
5.5 KiB
SQL
241 lines
5.5 KiB
SQL
create trigger tai_commandesproduit
|
|
after insert
|
|
on commandesproduits
|
|
for each row
|
|
begin
|
|
|
|
declare v_nom varchar(255);
|
|
declare v_description varchar(1024);
|
|
declare v_marque varchar(255);
|
|
declare v_achatmin varchar(255);
|
|
declare v_economie varchar(255);
|
|
declare v_unite varchar(255);
|
|
declare v_format varchar(255);
|
|
declare v_limite varchar(255);
|
|
declare v_categorie varchar(255);
|
|
|
|
|
|
select p.nom,
|
|
p.description,
|
|
p.marque,
|
|
p.achat_minimum,
|
|
p.economie,
|
|
p.unite,
|
|
f2.nom,
|
|
p.limite_achat,
|
|
c2.nom into v_nom, v_description, v_marque, v_achatmin, v_economie, v_unite, v_format, v_limite, v_categorie
|
|
from produits p
|
|
inner join format f2 on p.format = f2.id_format
|
|
inner join categorie c2 on p.categorie = c2.id_categorie
|
|
where p.id_produit = new.id_produit;
|
|
|
|
insert into historiquecommandeproduit
|
|
values ((select id_historique from historiquecommande hc where hc.id_commande = new.id_commande),
|
|
new.id_produit,
|
|
v_nom,
|
|
v_description,
|
|
v_marque,
|
|
v_achatmin,
|
|
v_limite,
|
|
v_economie,
|
|
v_unite,
|
|
v_format,
|
|
v_categorie,
|
|
new.quantite);
|
|
|
|
end;
|
|
|
|
|
|
create trigger tai_commandes
|
|
after insert
|
|
on commandes
|
|
for each row
|
|
begin
|
|
|
|
DECLARE done INT DEFAULT FALSE;
|
|
declare v_nom varchar(255);
|
|
declare v_prenom varchar(255);
|
|
declare v_courriel varchar(255);
|
|
declare v_produit int;
|
|
declare v_quantite decimal;
|
|
declare c_panier cursor for select id_produit, quantite from panier where panier.id_compte = new.id_compte;
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
|
|
|
select c.nom, c.prenom, c.courriel into v_nom, v_prenom, v_courriel
|
|
from comptes c
|
|
where c.id_compte = new.id_compte;
|
|
|
|
insert into historiquecommande
|
|
values (0,
|
|
new.id_commande,
|
|
new.id_compte,
|
|
v_nom,
|
|
v_prenom,
|
|
v_courriel,
|
|
new.date,
|
|
new.status,
|
|
new.prix_total,
|
|
new.trace_paiement);
|
|
|
|
#commandesproduit
|
|
open c_panier;
|
|
|
|
panier_loop: loop
|
|
fetch c_panier into v_produit, v_quantite;
|
|
|
|
IF done THEN
|
|
LEAVE panier_loop;
|
|
END IF;
|
|
|
|
|
|
insert into commandesproduits values (new.id_commande, v_produit, v_quantite);
|
|
end loop;
|
|
|
|
close c_panier;
|
|
|
|
delete from panier where panier.id_compte = new.id_compte;
|
|
end;
|
|
|
|
create trigger tbd_commandes
|
|
before delete
|
|
on commandes
|
|
for each row
|
|
begin
|
|
|
|
delete from commandesproduits where commandesproduits.id_commande = old.id_commande;
|
|
|
|
end;
|
|
|
|
create trigger tbi_commandes
|
|
before insert
|
|
on commandes
|
|
for each row
|
|
begin
|
|
|
|
declare num varchar(1024);
|
|
|
|
set new.date = now();
|
|
select CONCAT('DIET-', FLOOR(5 + RAND() * 60), '1', REPLACE(CURDATE(), '-', '')) into num from dual;
|
|
set new.numero_commande = num;
|
|
|
|
end;
|
|
|
|
create trigger tai_events
|
|
after insert
|
|
on events
|
|
for each row
|
|
begin
|
|
|
|
if new.color = '#0071c5'
|
|
then
|
|
insert into datescommandes values (new.start, new.end);
|
|
end if;
|
|
|
|
end;
|
|
|
|
create trigger tau_events
|
|
after UPDATE
|
|
on events
|
|
for each row
|
|
begin
|
|
declare nb int;
|
|
|
|
if new.color = '#0071c5'
|
|
then
|
|
|
|
select count(*) into nb from datescommandes where date_debut = old.start
|
|
and date_fin = old.end;
|
|
|
|
if nb > 0
|
|
then
|
|
update datescommandes
|
|
set date_debut = new.start,
|
|
date_fin = new.end,
|
|
nom = new.title
|
|
where date_debut = old.start
|
|
and date_fin = old.end;
|
|
else
|
|
insert into datescommandes values (new.start, new.end, new.title);
|
|
end if;
|
|
|
|
end if;
|
|
|
|
end;
|
|
|
|
create trigger tau_produits
|
|
after update
|
|
on produits
|
|
for each row
|
|
begin
|
|
|
|
call updatelimiteproduit(new.id_produit, new.limite_achat);
|
|
|
|
end;
|
|
|
|
create procedure updatelimiteproduit(in p_id int, in p_limite int) begin
|
|
DECLARE done INT DEFAULT FALSE;
|
|
declare v_compte int;
|
|
declare v_quantite int;
|
|
declare c_panier cursor for select id_compte, quantite from panier where id_produit = p_id;
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
|
|
|
open c_panier;
|
|
|
|
panier_loop: loop
|
|
fetch c_panier into v_compte, v_quantite;
|
|
|
|
IF done THEN
|
|
LEAVE panier_loop;
|
|
END IF;
|
|
|
|
if v_quantite > p_limite then
|
|
update panier set quantite = p_limite where id_compte = v_compte and id_produit = p_id;
|
|
end if;
|
|
end loop;
|
|
|
|
close c_panier;
|
|
|
|
end;
|
|
|
|
|
|
create trigger tai_commandes2
|
|
after insert
|
|
on commandes
|
|
for each row
|
|
begin
|
|
|
|
DECLARE done INT DEFAULT FALSE;
|
|
declare v_produit int;
|
|
declare v_quantite decimal;
|
|
declare c_panier cursor for select id_produit, quantite from panier where panier.id_compte = new.id_compte;
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
|
|
|
open c_panier;
|
|
|
|
panier_loop: loop
|
|
fetch c_panier into v_produit, v_quantite;
|
|
|
|
IF done THEN
|
|
LEAVE panier_loop;
|
|
END IF;
|
|
|
|
|
|
insert into commandesproduits values (new.id_commande, v_produit, v_quantite);
|
|
end loop;
|
|
|
|
close c_panier;
|
|
|
|
delete from panier where panier.id_compte = new.id_compte;
|
|
|
|
end;
|
|
|
|
|
|
create trigger tbd_historiquecommande
|
|
before delete
|
|
on historiquecommande
|
|
for each row
|
|
begin
|
|
|
|
delete from historiquecommandeproduit where historiquecommandeproduit.id_historique = old.id_historique;
|
|
|
|
end; |