facturation/upgrade.php

207 lines
6.3 KiB
PHP
Raw Normal View History

2019-11-02 17:53:27 +01:00
<?php
namespace Garradin;
use Garradin\Plugin\Facturation\Facture;
2021-11-24 23:44:46 +01:00
use Garradin\Entities\Files\File;
define('DEVIS', 0);
define('FACT', 1);
define('CERFA', 2);
define('COTIS', 3);
2019-11-02 17:53:27 +01:00
$db = DB::getInstance();
$facture = new Facture;
$infos = $plugin->getInfos();
// 0.2.0 - Stock le contenu en json plutôt qu'en serialized
if (version_compare($infos->version, '0.2.0', '<'))
{
2021-11-06 02:50:23 +01:00
$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($infos->version, '0.3.0', '<'))
{
2021-11-06 02:50:23 +01:00
$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`;');
2020-12-29 18:07:26 +01:00
}
2022-01-07 01:24:32 +01:00
// 0.4.0 -
2020-12-29 18:07:26 +01:00
if (version_compare($infos->version, '0.4.0', '<'))
{
2021-11-06 02:50:23 +01:00
$db->exec(<<<EOT
CREATE TABLE IF NOT EXISTS plugin_facturation_paiement
-- Moyens de paiement
(
code TEXT NOT NULL PRIMARY KEY,
nom TEXT NOT NULL
);
2020-12-29 18:07:26 +01:00
2021-11-06 02:50:23 +01:00
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');
2020-12-29 18:07:26 +01:00
2021-11-06 02:50:23 +01:00
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
);
2020-12-29 18:07:26 +01:00
2021-11-06 02:50:23 +01:00
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;
2020-12-29 18:07:26 +01:00
2021-01-22 16:33:41 +01:00
EOT
);
}
2022-01-07 01:24:32 +01:00
// 0.6.0 -
if (version_compare($infos->version, '0.6.0', '<'))
{
2021-11-06 02:50:23 +01:00
$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
2021-11-06 02:50:23 +01:00
);
2022-01-07 01:24:32 +01:00
$factures = $facture->listAll();
foreach($factures as $k=>$f)
2021-11-06 02:50:23 +01:00
{
foreach($f->contenu as $line => $content)
{
// Petit bug qui peut arriver avec des contenus mal enregistrés en db
if (is_int($content))
{
continue;
}
2021-11-06 02:50:23 +01:00
$contenu[] = ['designation' => $content['designation'],
'prix' => (int) ($content['prix'] * 100) ];
}
2021-11-06 02:50:23 +01:00
$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);
}
2021-11-24 23:44:46 +01:00
2021-11-25 15:11:06 +01:00
$path = __DIR__.'/data/default_sign.png';
2021-11-24 23:44:46 +01:00
$png = (new File)->createAndStore('skel/plugin/facturation','sign.png', $path, null);
2021-11-06 02:50:23 +01:00
}
2022-01-07 01:24:32 +01:00
}
// 0.6.2 -
if (version_compare($infos->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);
}
2022-01-10 06:40:40 +01:00
}
// 0.7.1 - Ajout clé config TTC/HT
if (version_compare($infos->version, '0.7.1', '<'))
{
$plugin->setConfig('ttc', false);
2023-04-16 00:51:55 +02:00
}
// 0.7.4 - Signal menu item
if (version_compare($infos->version, '0.7.4', '<'))
{
$plugin->registerSignal('menu.item', [Facture::class, 'menuItem']);
}