<?php namespace Paheko; use Paheko\Plugin\Facturation\Facture; use Paheko\Entities\Files\File; define('DEVIS', 0); define('FACT', 1); define('CERFA', 2); define('COTIS', 3); $db = DB::getInstance(); $facture = new Facture; $version = $plugin->get('version'); // 0.2.0 - Stock le contenu en json plutôt qu'en serialized if (version_compare($version, '0.2.0', '<')) { $r = (array) DB::getInstance()->get('SELECT * FROM plugin_facturation_factures'); foreach ($r as $e) { $e->contenu =json_encode(unserialize((string) $e->contenu)); $db->update('plugin_facturation_factures', $e, $db->where('id', (int)$e->id)); } } // 0.3.0 - Migration Facturation\Config vers la table plugins if (version_compare($version, '0.3.0', '<')) { $conf = $db->getAssoc('SELECT cle, valeur FROM plugin_facturation_config ORDER BY cle;'); foreach($conf as $k=>$v) { if(!$plugin->setConfig($k, $v)) { throw new UserException('Erreur dans la conversion de la configuration pour la clé : '.$k); } } $db->exec('DROP TABLE `plugin_facturation_config`;'); } // 0.4.0 - if (version_compare($version, '0.4.0', '<')) { $db->exec(<<<EOT CREATE TABLE IF NOT EXISTS plugin_facturation_paiement -- Moyens de paiement ( code TEXT NOT NULL PRIMARY KEY, nom TEXT NOT NULL ); INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('CB', 'Carte bleue'); INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('CH', 'Chèque'); INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('ES', 'Espèces'); INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('PR', 'Prélèvement'); INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('TI', 'TIP'); INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('VI', 'Virement'); INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('AU', 'Autre'); CREATE TABLE IF NOT EXISTS plugin_facturation_factures_tmp ( id INTEGER PRIMARY KEY, type_facture INTEGER NOT NULL DEFAULT 0, numero TEXT NOT NULL UNIQUE, receveur_membre INTEGER NOT NULL, -- bool receveur_id INTEGER NOT NULL, date_emission TEXT NOT NULL, -- CHECK (date(date_emission) IS NOT NULL AND date(date_emission) = date_emission), date_echeance TEXT NOT NULL, -- CHECK (date(date_echeance) IS NOT NULL AND date(date_echeance) = date_echeance), reglee INTEGER DEFAULT 0, -- bool archivee INTEGER DEFAULT 0, -- bool moyen_paiement TEXT NOT NULL, contenu TEXT NOT NULL, total REAL DEFAULT 0 ); INSERT INTO plugin_facturation_factures_tmp SELECT * FROM plugin_facturation_factures; DROP TABLE plugin_facturation_factures; ALTER TABLE plugin_facturation_factures_tmp RENAME TO plugin_facturation_factures; EOT ); } // 0.6.0 - if (version_compare($version, '0.6.0', '<')) { $r = $db->first('SELECT id, total FROM plugin_facturation_factures;'); if (strpos($r->total,'.')) { // SQL -> total integer $db->exec(<<<EOT CREATE TABLE IF NOT EXISTS plugin_facturation_factures_tmp ( id INTEGER PRIMARY KEY, type_facture INTEGER NOT NULL DEFAULT 0, numero TEXT NOT NULL UNIQUE, receveur_membre INTEGER NOT NULL, -- bool receveur_id INTEGER NOT NULL, date_emission TEXT NOT NULL, -- CHECK (date(date_emission) IS NOT NULL AND date(date_emission) = date_emission), date_echeance TEXT NOT NULL, -- CHECK (date(date_echeance) IS NOT NULL AND date(date_echeance) = date_echeance), reglee INTEGER DEFAULT 0, -- bool archivee INTEGER DEFAULT 0, -- bool moyen_paiement TEXT NOT NULL, contenu TEXT NOT NULL, total INTEGER DEFAULT 0 ); INSERT INTO plugin_facturation_factures_tmp SELECT * FROM plugin_facturation_factures; DROP TABLE plugin_facturation_factures; ALTER TABLE plugin_facturation_factures_tmp RENAME TO plugin_facturation_factures; EOT ); $factures = $facture->listAll(); foreach($factures as $k=>$f) { foreach($f->contenu as $line => $content) { // Petit bug qui peut arriver avec des contenus mal enregistrés en db if (is_int($content)) { continue; } $contenu[] = ['designation' => $content['designation'], 'prix' => (int) ($content['prix'] * 100) ]; } $f->contenu = $contenu; $data = (array) $f; $data['total'] = (int) ($data['total'] * 100); unset($data['id']); unset($data['date_emission']); unset($data['date_echeance']); $facture->edit($f->id, $data); unset($contenu); } $path = __DIR__.'/data/default_sign.png'; $png = (new File)->createAndStore('skel/plugin/facturation','sign.png', $path, null); } } // 0.6.2 - if (version_compare($version, '0.6.2', '<')) { $db->exec(<<<EOT INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('HA', 'HelloAsso'); INSERT OR IGNORE INTO plugin_facturation_paiement (code, nom) VALUES ('AU', 'Autre'); CREATE TABLE IF NOT EXISTS plugin_facturation_txt_cerfa ( id PRIMARY KEY, menu TEXT NOT NULL UNIQUE, texte TEXT NOT NULL ); INSERT OR IGNORE INTO plugin_facturation_txt_cerfa ("id","menu","texte") VALUES ('0','Aucun',''); INSERT OR IGNORE INTO plugin_facturation_txt_cerfa ("id","menu","texte") VALUES ('1','HelloAsso','Don via HelloAsso'); INSERT OR IGNORE INTO plugin_facturation_txt_cerfa ("id","menu","texte") VALUES ('2','Frais de déplacement', 'Renonciation aux remboursements de frais de déplacement'); INSERT OR IGNORE INTO plugin_facturation_txt_cerfa ("id","menu","texte") VALUES ('3','Don en nature','Don en nature'); EOT ); // Migration CERFA $factures = $facture->listAll(); foreach($factures as $k=>$f) { if ($f->type_facture != CERFA) { continue; } $f->contenu = ['forme' => 1, 'nature' => 1, 'texte' => 0]; $data = (array) $f; unset($data['id']); unset($data['date_emission']); unset($data['date_echeance']); $facture->edit($f->id, $data); } } // 0.7.1 - Ajout clé config TTC/HT if (version_compare($version, '0.7.1', '<')) { $plugin->setConfig('ttc', false); } // 0.7.4 - Signal menu item if (version_compare($version, '0.7.4', '<')) { $plugin->registerSignal('menu.item', [Facture::class, 'menuItem']); }