# Procedure rapide de deploiement production - app `syndic/`

Objectif: installer la nouvelle app CodeIgniter 4 du dossier `syndic/` sur un autre domaine/sous-domaine, faire pointer le domaine vers `syndic/public`, appliquer les changements BDD, et mettre a jour les fichiers legacy `bur/` qui restent utilises.

## 1) Avant upload

1. Faire une sauvegarde complete de la BDD production.

## 2) Upload SFTP

Uploader le dossier `syndic/` complet sur le serveur, avec cette structure (syndic/ ou équivalent au meme niveau que bur/ et autres dossiers):

```text
  syndic/
  qrcode/
  interne/
  bur/
```

Points importants:
- Garder `syndic/public/.htaccess` et `syndic/public/.ovhconfig`.

## 3) Pointage du domaine

Dans la configuration du domaine/sous-domaine, definir le dossier racine web sur:

```text
syndic/public
```

## 4) Configurer `syndic/.env`

Sur le serveur, modifier `syndic/.env`.

Exemple a adapter:

```dotenv
CI_ENVIRONMENT = production

app.baseURL = 'https://DOMAINE-SYNDIC-A-REMPLACER/' 

database.default.hostname = HOTE_BDD_PROD 
database.default.database = NOM_BDD_PROD
database.default.username = USER_BDD_PROD
database.default.password = MOT_DE_PASSE_BDD_PROD
database.default.DBDriver = MySQLi
database.default.DBPrefix = (laisser vide)
database.default.port = 3306

```

Verifier surtout:

- `CI_ENVIRONMENT = production`;
- `app.baseURL` avec le vrai domaine et un slash final;
- les credentials BDD production;
- `encryption.key`, obligatoire pour CodeIgniter;

## 5) Verifier `writable/`

Si le site affiche:

```text
The WRITEPATH is not set correctly.
```

CodeIgniter ne trouve pas ou ne peut pas utiliser le dossier `writable`.

Verifier que le serveur contient bien:

```text
syndic/
  app/
  public/
  vendor/
  writable/
    cache/
    logs/
    session/
    uploads/
    debugbar/
```

Le domaine doit pointer vers:

```text
syndic/public
```

Il ne faut pas uploader uniquement le contenu de `public/` dans un autre dossier, sinon `public/index.php` ne retrouve plus correctement `../app/Config/Paths.php` et `../writable`.

Si les dossiers existent, verifier les droits SFTP de `syndic/writable/` et de ses sous-dossiers. Ils doivent etre inscriptibles par PHP. Sur OVH, essayer d'abord `755`; si l'erreur reste presente, passer les dossiers `writable/` en `775`.

## 6) Migration BDD

Executer le SQL prepare dans:

```sql
ALTER TABLE `utilisateurs`
  ADD COLUMN `utiPassHash` VARCHAR(255) NULL AFTER `utiPass`;

ALTER TABLE `utilisateurs`
  ADD COLUMN `utiSyn` INT NULL AFTER `utiDroit`;

UPDATE `utilisateurs`
SET
  `utiTitre` = 'Personne Physique',
  `utiNom` = 'Pierre',
  `utiAdresse` = 'Rue des Ecoles 67',
  `utiCode` = 6280,
  `utiLocalite` = 'Acoz',
  `utiPays` = '',
  `utiTVA` = 'BE 0125.365.987',
  `utiMail` = 'pierv@n',
  `utiPass` = '@Asc!!2025@@',
  `utiPassHash` = '$2y$12$G0Qyaj2K/UHuFGd3jCDuAuemvCe2xnLQ67dksRiZx5oOYiEGnIpOW',
  `utiDroit` = 4,
  `utiContact` = 'Max',
  `utiGsm` = '0478/86.23.68',
  `utiTel` = NULL
WHERE `utiId` = 36;

UPDATE `utilisateurs`
SET
  `utiTitre` = NULL,
  `utiNom` = 'Maxime',
  `utiAdresse` = '',
  `utiCode` = 0,
  `utiLocalite` = '',
  `utiPays` = '',
  `utiTVA` = '',
  `utiMail` = 'boss!!',
  `utiPass` = 'max!',
  `utiPassHash` = '$2y$12$M/SbH7D4IHcxftbsthxg2.26f3kTKblw2ihOE.ssbeOgzhG3k9vXG',
  `utiDroit` = 2,
  `utiContact` = NULL,
  `utiGsm` = NULL,
  `utiTel` = NULL
WHERE `utiId` = 40;

UPDATE `utilisateurs`
SET
  `utiTitre` = NULL,
  `utiNom` = 'Denis',
  `utiAdresse` = '',
  `utiCode` = 0,
  `utiLocalite` = '',
  `utiPays` = '',
  `utiTVA` = '',
  `utiMail` = '@denis@',
  `utiPass` = '!1235!',
  `utiPassHash` = '$2y$12$VKUzV.Hku0EaQHU7vNSum.9aNwkHwIUZojrKxyS22goWFLHA4A3Ie',
  `utiDroit` = 1,
  `utiContact` = NULL,
  `utiGsm` = NULL,
  `utiTel` = NULL
WHERE `utiId` = 39;

UPDATE `utilisateurs`
SET
  `utiTitre` = NULL,
  `utiNom` = 'Johan',
  `utiAdresse` = '',
  `utiCode` = 0,
  `utiLocalite` = '',
  `utiPays` = '',
  `utiTVA` = '',
  `utiMail` = '?yohan@',
  `utiPass` = '#1258#',
  `utiPassHash` = '$2y$12$frXLUfsiF3/T8M6b..6ewOjVqzJ54g7kbv7hrTHyP4tTT4Uja9KJa',
  `utiDroit` = 1,
  `utiContact` = NULL,
  `utiGsm` = NULL,
  `utiTel` = NULL
WHERE `utiId` = 41;

UPDATE `utilisateurs`
SET
  `utiTitre` = NULL,
  `utiNom` = 'Fabrice',
  `utiAdresse` = '',
  `utiCode` = 0,
  `utiLocalite` = '',
  `utiPays` = '',
  `utiTVA` = '',
  `utiMail` = 'ghost',
  `utiPass` = '@74!',
  `utiPassHash` = '$2y$12$FpVdj9so3LubsoM1f5PGJOfGxyxb3HDulHAojIGh2K/pZNDs3Huua',
  `utiDroit` = 1,
  `utiContact` = NULL,
  `utiGsm` = NULL,
  `utiTel` = NULL
WHERE `utiId` = 42;

INSERT INTO `utilisateurs` (
  `utiId`,
  `utiTitre`,
  `utiNom`,
  `utiAdresse`,
  `utiCode`,
  `utiLocalite`,
  `utiPays`,
  `utiTVA`,
  `utiMail`,
  `utiPass`,
  `utiPassHash`,
  `utiDroit`,
  `utiSyn`,
  `utiContact`,
  `utiGsm`,
  `utiTel`
) VALUES
(
  43,
  NULL,
  'Syndic Test LJ',
  '',
  0,
  '',
  '',
  '',
  'syndic-test@example.test',
  '',
  '$2y$12$TsBMNt1qUAqd2oyZwXJ/7e/IVO/PqSM1EH3rZ8U8TdiN9w6IbuWS2',
  5,
  7,
  NULL,
  NULL,
  NULL
),
(
  44,
  NULL,
  'Syndic Test Travaux',
  '',
  0,
  '',
  '',
  '',
  'syndic-travaux@example.test',
  '',
  '$2y$12$nNuZaluCa7uf2G/1VHbk2uF1CDE.2/KxgvHIMkCUGN9EqjlIbKFP6',
  5,
  45,
  NULL,
  NULL,
  NULL
);

  ALTER TABLE `payements`
  ADD COLUMN `pay_etat` TINYINT(1) NOT NULL DEFAULT 0 AFTER `pay_realisee`;

ALTER TABLE `payements`
  ADD COLUMN `pay_etat_date` DATETIME NULL AFTER `pay_etat`;

  CREATE TABLE `tech_uti` (
  `tu_id` INT NOT NULL AUTO_INCREMENT,
  `tu_tech` INT NOT NULL,
  `tu_uti` INT NOT NULL,
  PRIMARY KEY (`tu_id`),
  KEY `idx_tech_uti_uti` (`tu_uti`),
  KEY `idx_tech_uti_tech` (`tu_tech`)
);

INSERT INTO `tech_uti` (`tu_tech`, `tu_uti`) VALUES (2, 39);
INSERT INTO `tech_uti` (`tu_tech`, `tu_uti`) VALUES (3, 41);
INSERT INTO `tech_uti` (`tu_tech`, `tu_uti`) VALUES (4, 36);
INSERT INTO `tech_uti` (`tu_tech`, `tu_uti`) VALUES (1, 40);
INSERT INTO `tech_uti` (`tu_tech`, `tu_uti`) VALUES (5, 39);
INSERT INTO `tech_uti` (`tu_tech`, `tu_uti`) VALUES (5, 41);
INSERT INTO `tech_uti` (`tu_tech`, `tu_uti`) VALUES (8, 40);
INSERT INTO `tech_uti` (`tu_tech`, `tu_uti`) VALUES (8, 41);

ALTER TABLE `taches`
  ADD COLUMN `tach_pay` INT NOT NULL DEFAULT 0 AFTER `tach_date_fin`;

  ALTER TABLE `taches`
  ADD COLUMN `tach_fact` INT NOT NULL DEFAULT 0 AFTER `tach_pay`;

  ALTER TABLE `taches`
  ADD COLUMN `tach_cont` INT NOT NULL DEFAULT 0 AFTER `tach_fact`;
  ALTER TABLE `taches`
  ADD COLUMN `tach_asc` INT NOT NULL DEFAULT 0 AFTER `tach_cont`;

```

Ce SQL ajoute notamment:

- `utilisateurs.utiPassHash`;
- `utilisateurs.utiSyn`;
- les hashes des comptes existants;
- les deux comptes syndic de test;
- `payements.pay_etat`;
- `payements.pay_etat_date`;
- la table `tech_uti` et ses liaisons;
- `taches.tach_pay`;
- `taches.tach_fact`;
- `taches.tach_cont`;
- `taches.tach_asc`.

## 7) Fichiers legacy `bur/` a transferer

Transferer aussi ces fichiers vers le dossier `bur/` de production:

```text
bur/cmsAccueil.php
bur/cmsMenu.php
bur/etapeEtat.php
```
