-- transaction réalisant une commande
--
\set nproduits 2000
\set id_produit random(1, :nproduits)
\set nclients 10000
\set id_client random(1, :nclients)
\set nmode_exp 4
\set mode_exp random(1, :nmode_exp)
\set quantite random(1, 16)
\set nproduits 2000
\set produit_id random(1, :nproduits)

BEGIN;

WITH nouvelle_commande AS (
    INSERT INTO magasin.commandes (numero_commande, client_id, date_commande, mode_expedition)
    VALUES (magasin.get_numero_commande(), :id_client, now(), :mode_exp)
    RETURNING numero_commande
)
INSERT INTO magasin.lignes_commandes (numero_commande, produit_id, fournisseur_id, quantite, prix_unitaire, remise)
SELECT numero_commande, produit_id, fournisseur_id, :quantite, prix, 0
FROM nouvelle_commande, 
LATERAL (SELECT pf.produit_id, pf.fournisseur_id, p.prix
        FROM magasin.produit_fournisseurs pf
        JOIN magasin.produits p USING (produit_id)
        WHERE p.produit_id = :produit_id LIMIT 1
        ) a;
COMMIT;

