Comment: | Merge trunk vers dev |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA1: |
0b5335059737d55413a5b24020eae919 |
User & Date: | bohwaz on 2019-01-28 16:58:42 |
Other Links: | branch diff | manifest | tags |
2019-01-29
| ||
12:41 | Préparation pour refonte compta check-in: 4a7b339386 user: bohwaz tags: dev | |
2019-01-28
| ||
16:58 | Merge trunk vers dev check-in: 0b53350597 user: bohwaz tags: dev | |
14:11 | Version 0.9.2 check-in: c48cf081fa user: bohwaz tags: trunk, stable, 0.9.2 | |
2019-01-22
| ||
11:37 | Merge trunk avec dev check-in: 344c04b375 user: bohwaz tags: dev | |
Modified debian/config.debian.php from [d4c3b1b5ce] to [2a98e1b5ea].
︙ | ︙ | |||
56 57 58 59 60 61 62 63 64 65 | else { $last_sqlite = $_ENV['XDG_DATA_HOME'] . '/garradin/association.sqlite'; } file_put_contents($last_file, $last_sqlite); define('Garradin\DB_FILE', $last_sqlite); define('Garradin\LOCAL_LOGIN', 1); } | > > > > > > > > > > > > | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | else { $last_sqlite = $_ENV['XDG_DATA_HOME'] . '/garradin/association.sqlite'; } file_put_contents($last_file, $last_sqlite); $secret_file = $_ENV['XDG_CONFIG_HOME'] . '/garradin/secret'; if (!file_exists($secret_file)) { $random = function_exists('random_bytes') ? random_bytes(64) : mt_rand(); $random = sha1($random . $secret_file); file_put_contents($secret_file, $random); } define('Garradin\SECRET_KEY', trim(file_get_contents($secret_file))); define('Garradin\DB_FILE', $last_sqlite); define('Garradin\LOCAL_LOGIN', 1); } |
Modified debian/garradin from [872310890e] to [f3db96af25].
1 2 3 4 5 | #!/bin/sh ROOT=/usr/share/garradin/www #ROOT=~/fossil/garradin/src/www ROUTER=${ROOT}/_route.php | | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/bin/sh ROOT=/usr/share/garradin/www #ROOT=~/fossil/garradin/src/www ROUTER=${ROOT}/_route.php PORT=8081 ADDRESS="127.0.0.1" VERBOSE=0 PID_FILE="${XDG_RUNTIME_DIR}/garradin/pid" [ ! -d `dirname $PID_FILE` ] && mkdir -p `dirname $PID_FILE` # Execute getopt ARGS=`getopt -o "p:vh" -l "port:,verbose,help" -n "garradin" -- "$@"` # Bad arguments if [ $? -ne 0 ]; then |
︙ | ︙ | |||
35 36 37 38 39 40 41 | cat <<EOF Usage : $0 [COMMANDE] [PROJET] Où COMMANDE peut être : server [-p|--port PORT] Démarre un serveur web Garradin sur le port spécifié | | | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | cat <<EOF Usage : $0 [COMMANDE] [PROJET] Où COMMANDE peut être : server [-p|--port PORT] Démarre un serveur web Garradin sur le port spécifié (ou sur le port 8081 par défaut) ui [-p|--port PORT] Idem que 'server' mais démarre ensuite le navigateur web par défaut et connecte automatiquement avec le premier administrateur de l'association. Si aucune COMMANDE n'est donnée, Garradin utilisera 'ui' par défaut. |
︙ | ︙ | |||
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | PROJECT="$2" [ "$PROJECT" = "" ] && PROJECT="1" export GARRADIN_STANDALONE="$PROJECT" [ $VERBOSE = 1 ] && { php -S ${ADDRESS}:${PORT} -t ${ROOT} -d variables_order=EGPCS ${ROUTER} & } || { php -S ${ADDRESS}:${PORT} -t ${ROOT} -d variables_order=EGPCS ${ROUTER} > /dev/null 2>&1 & } php_pid=$! sleep .5 [ "$CMD" = "ui" ] && { | > > > > > | < < < | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | PROJECT="$2" [ "$PROJECT" = "" ] && PROJECT="1" export GARRADIN_STANDALONE="$PROJECT" [ -f $PID_FILE ] && kill `cat $PID_FILE` > /dev/null 2>&1 && rm -f $PID_FILE [ $VERBOSE = 1 ] && { php -S ${ADDRESS}:${PORT} -t ${ROOT} -d variables_order=EGPCS ${ROUTER} & } || { php -S ${ADDRESS}:${PORT} -t ${ROOT} -d variables_order=EGPCS ${ROUTER} > /dev/null 2>&1 & } php_pid=$! echo $php_pid > $PID_FILE sleep .5 [ "$CMD" = "ui" ] && { URL="http://${ADDRESS}:${PORT}/admin/" [ "$DISPLAY" != "" ] && { x-www-browser ${URL} & } || { www-browser ${URL} & } } || { wait $php_pid } |
Added debian/garradin.desktop version [0ea3e7ac4d].
> > > > > > | 1 2 3 4 5 6 | [Desktop Entry] Name=Garradin Exec=garradin Icon=garradin Type=Application Categories=Office;Finance;Database |
Added debian/garradin.menu version [6b9a082e8a].
> > > | 1 2 3 | ?package(garradin):needs="X11" section="Applications/Office"\ title="Garradin" command="/usr/bin/garradin"\ icon="/usr/share/garradin/garradin.png" |
Added debian/garradin.png version [ed09b910ce].
cannot compute difference between binary files
Modified debian/makedeb.sh from [b70d32f694] to [242f467b69].
1 2 3 4 5 6 7 8 9 | #!/bin/bash # Ripped from fossil makdedeb.sh DEB_REV=${1-1} # .deb package build/revision number. PACKAGE_DEBNAME=garradin THISDIR=${PWD} DEB_ARCH_NAME=all | > | > > > > | > > > > > > > < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #!/bin/bash # Ripped from fossil makdedeb.sh DEB_REV=${1-1} # .deb package build/revision number. PACKAGE_DEBNAME=garradin THISDIR=${PWD} DEB_ARCH_NAME=all PACKAGE_VERSION=`cat ../src/VERSION` [ ! -f ../src/garradin-${PACKAGE_VERSION}.tar.bz2 ] && (cd ../src; make release) tar xjvf ../src/garradin-${PACKAGE_VERSION}.tar.bz2 -C /tmp SRCDIR="/tmp/garradin-${PACKAGE_VERSION}" test -e ${SRCDIR} || { echo "This script must be run from a BUILT copy of the source tree." exit 1 } DEBROOT=$PWD/deb.tmp test -d ${DEBROOT} && rm -fr ${DEBROOT} DEBLOCALPREFIX=${DEBROOT}/usr BINDIR=${DEBLOCALPREFIX}/bin mkdir -p ${BINDIR} mkdir -p ${DEBLOCALPREFIX}/share/doc/${PACKAGE_DEBNAME} cp ${THISDIR}/garradin ${BINDIR} mkdir -p "${DEBLOCALPREFIX}/share/menu" cp ${THISDIR}/garradin.menu "${DEBLOCALPREFIX}/share/menu/garradin" mkdir -p "${DEBLOCALPREFIX}/share/applications" cp ${THISDIR}/garradin.desktop "${DEBLOCALPREFIX}/share/applications/" CODEDIR=${DEBLOCALPREFIX}/share/${PACKAGE_DEBNAME} mkdir -p ${CODEDIR} cp -r ${SRCDIR}/* ${CODEDIR} cp ${THISDIR}/config.debian.php ${CODEDIR}/config.local.php rm -rf ${CODEDIR}/*.sqlite ${CODEDIR}/cache ${CODEDIR}/www/squelettes cp ${THISDIR}/garradin.png "${CODEDIR}" # Cleaning files that will be copied to /usr/share/doc rm -f ${CODEDIR}/{README,COPYING} cd $DEBROOT || { echo "Debian dest dir [$DEBROOT] not found. :(" exit 2 } rm -fr DEBIAN mkdir DEBIAN PACKAGE_DEB_VERSION=${PACKAGE_VERSION}-${DEB_REV} DEBFILE=${THISDIR}/${PACKAGE_DEBNAME}-${PACKAGE_DEB_VERSION}-dev-${DEB_ARCH_NAME}.deb PACKAGE_TIME=$(/bin/date) rm -f ${DEBFILE} echo "Creating .deb package [${DEBFILE}]..." |
︙ | ︙ | |||
134 135 136 137 138 139 140 141 142 143 | dpkg-deb --info ${DEBFILE} } cd - >/dev/null true && { echo "Cleaning up..." rm -fr ${DEBROOT} } echo "Done :)" | > | 145 146 147 148 149 150 151 152 153 154 155 | dpkg-deb --info ${DEBFILE} } cd - >/dev/null true && { echo "Cleaning up..." rm -fr ${DEBROOT} rm -rf ${SRCDIR} } echo "Done :)" |
Modified src/Makefile from [1650b4239f] to [054872df85].
︙ | ︙ | |||
27 28 29 30 31 32 33 | ln -s ${PWD} /tmp/garradin-${VERSION} tar cjvfh garradin-${VERSION}.tar.bz2 -C /tmp -T /tmp/garradin-${VERSION}-list.txt rm -f /tmp/garradin-${VERSION}* publish: release $(eval VERSION=$(shell cat VERSION)) fossil uv sync | | | 27 28 29 30 31 32 33 34 35 36 37 38 39 | ln -s ${PWD} /tmp/garradin-${VERSION} tar cjvfh garradin-${VERSION}.tar.bz2 -C /tmp -T /tmp/garradin-${VERSION}-list.txt rm -f /tmp/garradin-${VERSION}* publish: release $(eval VERSION=$(shell cat VERSION)) fossil uv sync fossil uv ls | fgrep -v 'garradin-0.8.5' | grep '^garradin-.*\.tar\.bz2' | xargs fossil uv rm fossil uv add garradin-${VERSION}.tar.bz2 fossil uv sync check-dependencies: grep -hEo '^use \\?KD2\\\w+|\\KD2\\\w+' -R include/lib/Garradin www | sed -r 's/^use \\?KD2\\|^\\KD2\\//' | sort | uniq |
Modified src/VERSION from [1c75e70a1f] to [ef2e10f968].
|
| | | 1 | 0.9.2 |
Modified src/include/lib/Garradin/Compta/Rapprochement.php from [dbf2a90fad] to [21098b9dae].
︙ | ︙ | |||
11 12 13 14 15 16 17 | class Rapprochement { public function getJournal($compte, $debut, $fin, &$solde_initial, &$solde_final, $sauf_deja_rapprochees = false) { $db = DB::getInstance(); $query = 'SELECT | | | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | class Rapprochement { public function getJournal($compte, $debut, $fin, &$solde_initial, &$solde_final, $sauf_deja_rapprochees = false) { $db = DB::getInstance(); $query = 'SELECT COALESCE((SELECT SUM(montant) FROM compta_journal WHERE compte_debit = :compte AND compte_credit NOT LIKE \'8%\' AND date < :date), 0) - COALESCE((SELECT SUM(montant) FROM compta_journal WHERE compte_credit = :compte AND compte_debit NOT LIKE \'8%\' AND date < :date), 0)'; $solde_initial = $solde = $db->firstColumn($query, [ 'compte' => $compte, 'date' => $debut, ]); $query = ' SELECT j.*, strftime(\'%s\', j.date) AS date, (CASE WHEN j.compte_debit = :compte THEN j.montant ELSE -(j.montant) END) AS solde, r.date AS date_rapprochement FROM compta_journal AS j LEFT JOIN compta_rapprochement AS r ON r.id_operation = j.id WHERE (compte_debit = :compte OR compte_credit = :compte) AND j.date >= :debut AND j.date <= :fin AND compte_debit NOT LIKE \'8%\' AND compte_credit NOT LIKE \'8%\' ' . ($sauf_deja_rapprochees ? 'AND r.id_operation IS NULL' : '') . ' ORDER BY date ASC;'; $result = $db->get($query, [ 'compte' => $compte, 'debut' => $debut, 'fin' => $fin, |
︙ | ︙ |
Modified src/include/lib/Garradin/Membres.php from [f75ceb8321] to [89209054f9].
︙ | ︙ | |||
346 347 348 349 350 351 352 | { Utils::sendEmail(Utils::EMAIL_CONTEXT_BULK, $config->get('email_asso'), $subject, $message); } return true; } | | > | | 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | { Utils::sendEmail(Utils::EMAIL_CONTEXT_BULK, $config->get('email_asso'), $subject, $message); } return true; } public function listAllByCategory($id_categorie, $only_with_email = false) { $where = $only_with_email ? ' AND email IS NOT NULL' : ''; return DB::getInstance()->get('SELECT id, email FROM membres WHERE id_categorie = ?' . $where, (int)$id_categorie); } public function listByCategory($cat, $fields, $page = 1, $order = null, $desc = false) { $begin = ($page - 1) * self::ITEMS_PER_PAGE; $db = DB::getInstance(); |
︙ | ︙ |
Modified src/include/lib/Garradin/Membres/Cotisations.php from [07c3d844f4] to [86b67dc8e7].
︙ | ︙ | |||
31 32 33 34 35 36 37 38 39 40 41 42 43 44 | if (empty($data['id_cotisation']) || !$db->firstColumn('SELECT 1 FROM cotisations WHERE id = ?;', (int) $data['id_cotisation'])) { throw new UserException('Cotisation inconnue.'); } $data['id_cotisation'] = (int) $data['id_cotisation']; if (empty($data['id_membre']) || !$db->firstColumn('SELECT 1 FROM membres WHERE id = ?;', (int) $data['id_membre'])) { throw new UserException('Membre inconnu ou invalide.'); } | > > > > > > | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | if (empty($data['id_cotisation']) || !$db->firstColumn('SELECT 1 FROM cotisations WHERE id = ?;', (int) $data['id_cotisation'])) { throw new UserException('Cotisation inconnue.'); } $data['id_cotisation'] = (int) $data['id_cotisation']; if (!empty($data['numero_membre'])) { $data['id_membre'] = (new Membres)->getIDWithNumero($data['numero_membre']); unset($data['numero_membre']); } if (empty($data['id_membre']) || !$db->firstColumn('SELECT 1 FROM membres WHERE id = ?;', (int) $data['id_membre'])) { throw new UserException('Membre inconnu ou invalide.'); } |
︙ | ︙ | |||
99 100 101 102 103 104 105 | } } $db->commit(); Plugin::fireSignal('cotisation.ajout', array_merge(['id' => $id], $data)); | | | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | } } $db->commit(); Plugin::fireSignal('cotisation.ajout', array_merge(['id' => $id], $data)); return $data['id_membre']; } /** * Supprimer un événement de cotisation * @param integer $id ID de l'événement à supprimer * @return integer true en cas de succès */ |
︙ | ︙ | |||
343 344 345 346 347 348 349 | * (si NULL = cotisation jamais enregistrée, si 1 = cotisation ponctuelle enregistrée, sinon date d'expiration) */ public function isMemberUpToDate($id, $id_cotisation) { $db = DB::getInstance(); return $db->first('SELECT c.*, CASE WHEN c.duree IS NOT NULL THEN date(cm.date, \'+\'||c.duree||\' days\') >= date() | | | 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | * (si NULL = cotisation jamais enregistrée, si 1 = cotisation ponctuelle enregistrée, sinon date d'expiration) */ public function isMemberUpToDate($id, $id_cotisation) { $db = DB::getInstance(); return $db->first('SELECT c.*, CASE WHEN c.duree IS NOT NULL THEN date(cm.date, \'+\'||c.duree||\' days\') >= date() WHEN c.fin IS NOT NULL THEN (cm.id IS NOT NULL) WHEN cm.id IS NOT NULL THEN 1 ELSE 0 END AS a_jour, CASE WHEN c.duree IS NOT NULL THEN date(cm.date, \'+\'||c.duree||\' days\') WHEN c.fin IS NOT NULL THEN c.fin ELSE 1 END AS expiration FROM cotisations AS c LEFT JOIN cotisations_membres AS cm ON cm.id_cotisation = c.id AND cm.id_membre = ? WHERE c.id = ? ORDER BY cm.date DESC;', (int)$id, (int)$id_cotisation); |
︙ | ︙ |
Modified src/templates/admin/config/logs.tpl from [bdfa29c9cf] to [c62511fc2c].
︙ | ︙ | |||
14 15 16 17 18 19 20 | {foreach from=$main.errors item="error"} <h2 class="ruler">{$error.type}: {$error.message} [Code: {$error.errorCode}]</h2> {if !empty($error.backtrace)} {foreach from=$error.backtrace item=trace} <article class="trace"> {if $trace.function} <h4> | | | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | {foreach from=$main.errors item="error"} <h2 class="ruler">{$error.type}: {$error.message} [Code: {$error.errorCode}]</h2> {if !empty($error.backtrace)} {foreach from=$error.backtrace item=trace} <article class="trace"> {if $trace.function} <h4> {$trace.function} {if !empty($trace.args)} <table> {foreach from=$trace.args key=name item=arg} <tr> <th>{$name}</th> <td>{$arg}</td> </tr> |
︙ | ︙ |
Modified src/www/admin/membres/cotisations/ajout.php from [392b5f9081] to [b2cc2cef01].
︙ | ︙ | |||
26 27 28 29 30 31 32 | $cotisations = new Cotisations; $m_cotisations = new Membres\Cotisations; $cats = new Compta\Categories; $banques = new Compta\Comptes_Bancaires; | < < | < < < < | < < < < < < < < < | > | < | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | $cotisations = new Cotisations; $m_cotisations = new Membres\Cotisations; $cats = new Compta\Categories; $banques = new Compta\Comptes_Bancaires; if (f('add') && $form->check('add_cotisation')) { try { $data = [ 'date' => f('date'), 'id_cotisation' => f('id_cotisation'), 'id_membre' => f('id_membre'), 'numero_membre' => f('numero_membre'), 'id_auteur' => $user->id, ]; $compta = [ 'montant' => f('montant'), 'moyen_paiement' => f('moyen_paiement'), 'numero_cheque' => f('numero_cheque'), 'banque' => f('banque'), 'numero_piece' => f('numero_piece'), 'remarques' => f('remarques'), 'a_encaisser' => f('a_encaisser'), ]; $id_membre = $m_cotisations->add($data, $compta); Utils::redirect(ADMIN_URL . 'membres/cotisations.php?id=' . $id_membre); } catch (UserException $e) { $form->addError($e->getMessage()); } } $tpl->assign('membre', $membre); $tpl->assign('cotisations', $cotisations->listCurrent()); $tpl->assign('default_co', null); $tpl->assign('default_amount', 0.00); |
︙ | ︙ |
Modified src/www/admin/membres/message_collectif.php from [528d973d74] to [4372383f21].
︙ | ︙ | |||
14 15 16 17 18 19 20 | 'recipients' => 'required|string', ]); if (preg_match('/^(categorie|recherche)_(\d+)$/', f('recipients'), $match)) { if ($match[1] == 'categorie') { | | | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 'recipients' => 'required|string', ]); if (preg_match('/^(categorie|recherche)_(\d+)$/', f('recipients'), $match)) { if ($match[1] == 'categorie') { $recipients = $membres->listAllByCategory($match[2], true); } else { $recipients = $recherche->search($match[2], 'id, email'); } if (!count($recipients) || !isset($recipients[0]->email)) |
︙ | ︙ |
Modified src/www/admin/upgrade.php from [92ea3090d6] to [0233e009d2].
︙ | ︙ | |||
249 250 251 252 253 254 255 256 257 258 259 260 261 262 | if (version_compare($v, '0.9.1', '<')) { // Mise à jour plan comptable: ajout compte licences fédérales $comptes = new Compta\Comptes; $comptes->importPlan(); $db->begin(); $db->exec('INSERT INTO "compta_categories" VALUES(NULL,-1,\'Licences fédérales\',\'Licences payées pour les adhérents (par exemple fédération sportive etc.)\',\'652\');'); $db->import(ROOT . '/include/data/0.9.1.sql'); $db->commit(); | > | 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 | if (version_compare($v, '0.9.1', '<')) { // Mise à jour plan comptable: ajout compte licences fédérales $comptes = new Compta\Comptes; $comptes->importPlan(); $db->exec('PRAGMA foreign_keys = OFF;'); $db->begin(); $db->exec('INSERT INTO "compta_categories" VALUES(NULL,-1,\'Licences fédérales\',\'Licences payées pour les adhérents (par exemple fédération sportive etc.)\',\'652\');'); $db->import(ROOT . '/include/data/0.9.1.sql'); $db->commit(); |
︙ | ︙ |