-- Refonte complete du module Restaurant -> "Shop & Cafe Restaurant" (27/07/2026), a partir de zero
-- comme demande explicitement par l'utilisateur. L'ancien module (restaurant_compte/restaurant_vente,
-- aucune donnee en base - 0 ligne dans les 2 tables) est supprime sans archive (decision actee).
-- Le circuit reutilise au maximum l'existant : point de vente = une zone d'activite (compte_ps_zone_
-- activite) avec le flag "restaurant" coche dans compte_ps_zone_activite_role (flag deja existant,
-- reutilise tel quel plutot que d'en ajouter un redondant) ; stock/mouvements = stocks/stocks_produits_
-- quantite/stocks_mouvement(_officiel) deja generalises ; paiement espece = compte_ps_caisse_flux ;
-- carte = parametre_appareil/carte_ticket (source='Shop') ; credit client = client_bon (source='Shop').

-- 1) Ancien module Restaurant : supprime completement (aucune donnee a perdre, verifie avant migration).

-- 2) Catalogue produit : extension pour le mode supermarche (code-barre/photo/categorie) et la
--    distinction produit direct / produit prepare (recette, voir plus bas).
ALTER TABLE `stocks_produits`
  ADD COLUMN `code_barre` VARCHAR(50) NULL DEFAULT NULL AFTER `nom`,
  ADD COLUMN `id_categorie` INT(11) NULL DEFAULT NULL AFTER `type_vente`,
  ADD COLUMN `mode_vente` ENUM('direct','prepare') NOT NULL DEFAULT 'direct' AFTER `id_categorie`,
  ADD COLUMN `photo` VARCHAR(255) NULL DEFAULT NULL AFTER `mode_vente`,
  ADD COLUMN `unite` VARCHAR(20) NOT NULL DEFAULT 'unite' AFTER `photo`,
  ADD UNIQUE KEY `uk_code_barre` (`code_barre`);

-- Les 21 produits deja crees sous l'ancien type_vente='restaurant' (cafe, the, boissons - aucune
-- vente historique liee, tables restaurant_compte/vente vides) rejoignent le type_vente='produit'
-- generaliste (comme tout produit de Statistique > Graphique, voir SKILL_MODULE_VENTE.md §69/§72)
-- au lieu de garder une categorie 'restaurant' qui n'existe plus nulle part ailleurs dans le code.
UPDATE `stocks_produits` SET `type_vente` = 'produit' WHERE `type_vente` = 'restaurant';

-- 3) Categories du catalogue (Cafe, Boissons, Epicerie, Snacks, Plats...).
CREATE TABLE `shop_categorie` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(100) NOT NULL,
  `icone` varchar(50) DEFAULT NULL,
  `ordre` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

-- 4) Point de vente = complement d'une zone d'activite existante (stock associe + parametrage propre
--    au module) - la zone elle-meme (compte_ps_zone_activite) reste la source de verite pour la
--    caisse (colonne `caisse`) et son apparition dans Tresorerie > Caisse (flag `caisse=1` sur
--    compte_ps_zone_activite_role, deja le mecanisme existant, rien a modifier de ce cote).
CREATE TABLE `shop_point_vente` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_zone_activite` int(11) NOT NULL,
  `id_stock` int(11) NOT NULL,
  `actif` tinyint(1) NOT NULL DEFAULT 1,
  `id_creation` int(11) NOT NULL,
  `date_creation` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_zone_activite` (`id_zone_activite`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

-- Appareils TPE autorises pour un point de vente - plusieurs-a-plusieurs (un meme appareil physique
-- peut servir a 2 points de vente, ou un point de vente peut avoir plusieurs appareils). L'appareil
-- lui-meme reste dans parametre_appareil (meme table que les appareils CMI existants) - cette table
-- est juste la liste blanche "utilisable ici".
CREATE TABLE `shop_point_vente_appareil` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_point_vente` int(11) NOT NULL,
  `id_appareil` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_pv_appareil` (`id_point_vente`,`id_appareil`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

-- 5) Recette (bill-of-materials) d'un produit prepare - historisee par nature : les mouvements de
--    stock generes a la vente (stocks_mouvement) sont deja des faits fixes, jamais recalcules si la
--    recette change plus tard (voir SKILL_MODULE_VENTE.md, decision actee avec l'utilisateur).
CREATE TABLE `shop_recette` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_produit` int(11) NOT NULL COMMENT 'produit fini (mode_vente=prepare)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_produit` (`id_produit`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

CREATE TABLE `shop_recette_ligne` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_recette` int(11) NOT NULL,
  `id_produit_ingredient` int(11) NOT NULL,
  `qte` decimal(10,3) NOT NULL COMMENT 'quantite consommee par unite vendue du produit fini',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

-- 6) Compte journalier du point de vente (un seul ouvert a la fois, garde applicative comme ComptePv).
CREATE TABLE `shop_compte` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_point_vente` int(11) NOT NULL,
  `date_debut` datetime NOT NULL,
  `date_fin` datetime DEFAULT NULL,
  `id_creation` int(11) NOT NULL,
  `date_creation` datetime NOT NULL,
  `id_cloture` int(11) DEFAULT NULL,
  `date_cloture` datetime DEFAULT NULL,
  `ca` decimal(10,2) DEFAULT NULL COMMENT 'fige a la cloture',
  `espece_comptee` decimal(10,2) DEFAULT NULL COMMENT 'montant reellement compte en caisse a la cloture',
  `ecart` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

CREATE TABLE `shop_compte_employe` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_compte` int(11) NOT NULL,
  `id_employe` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_compte_employe` (`id_compte`,`id_employe`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

-- 7) Ticket de vente (un ticket = une commande/vente au comptoir).
CREATE TABLE `shop_ticket` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_compte` int(11) NOT NULL,
  `numero` int(11) NOT NULL,
  `date_ticket` datetime NOT NULL,
  `id_employe` int(11) NOT NULL DEFAULT 0,
  `id_client` int(11) NOT NULL DEFAULT 0,
  `statut` varchar(20) NOT NULL DEFAULT 'paye',
  `montant` decimal(10,2) NOT NULL DEFAULT 0,
  `methode` varchar(20) DEFAULT NULL COMMENT 'espece | carte | client',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

CREATE TABLE `shop_ticket_description` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_ticket` int(11) NOT NULL,
  `id_produit` int(11) NOT NULL,
  `qte` decimal(10,3) NOT NULL,
  `prix` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;

-- 8) Depenses (sortie de caisse) du compte en cours - meme principe que carburant_compte_sortie_caisse.
CREATE TABLE `shop_depense` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_compte` int(11) NOT NULL,
  `motif` varchar(255) NOT NULL,
  `montant` decimal(10,2) NOT NULL,
  `id_creation` int(11) NOT NULL,
  `date_creation` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
