-- LE PRIX D'UNE PRESTATION DEVIENT OPTIONNEL.
--
-- POURQUOI. Le concierge n'est pas toujours remunere a l'acte. Selon le contrat qui le lie a
-- son client, il touche un pourcentage des loyers, un forfait par sejour, ou il facture chaque
-- prestation. Dans les deux premiers cas, le prix unitaire d'un menage n'existe pas — et le
-- lui faire saisir quand meme l'obligeait a inventer un chiffre.
--
-- CE QUE CETTE MIGRATION CORRIGE VRAIMENT, et c'est plus grave qu'un confort de saisie :
--
--     intervention_lignes.prix_cents INT UNSIGNED NOT NULL DEFAULT 0
--
-- Ce DEFAULT 0 confond « on ne sait pas » et « c'est gratuit ». Une prestation sans prix etait
-- donc enregistree a zero, et les ecrans affichaient « 0,00 € » — une affirmation fausse la ou
-- il fallait ne rien dire. C'est le meme piege que partout ailleurs dans ce projet : l'absence
-- traitee comme un zero. NULL est le seul moyen de distinguer les deux.
--
-- LES ZEROS EXISTANTS RESTENT DES ZEROS. On ne reecrit pas de donnees : un 0 en base peut
-- signifier « offert » aussi bien que « jamais renseigne », et rien ici ne permet de trancher.
-- Supposer l'un des deux effacerait une information qu'on ne sait pas reconstituer. La regle
-- vaut au-dela de ce cas : une migration change la FORME, pas le CONTENU.
--
-- CONSEQUENCE A CONNAITRE : SUM() ignore les NULL en SQL. Une visite a trois prestations dont
-- une seule chiffree rendra donc le montant de celle-la, sans rien signaler. Tout total doit
-- etre accompagne du nombre de lignes sans montant — voir MontantPrestations::sansMontant().

ALTER TABLE tarifs
    -- Le tarif garde son role principal, qui n'a rien a voir avec l'argent : declarer ce
    -- qu'on fait sur ce logement. Sans tarif, rien ne peut y etre demande — c'est le
    -- catalogue de l'offre, et il reste obligatoire. Seul le prix devient facultatif.
    MODIFY COLUMN prix_cents INT UNSIGNED NULL;

ALTER TABLE intervention_lignes
    -- Le DEFAULT disparait avec le NOT NULL : laisser « DEFAULT 0 » sur une colonne nullable
    -- reintroduirait exactement la confusion qu'on retire, par la porte de derriere.
    MODIFY COLUMN prix_cents INT UNSIGNED NULL;
