checkExercice(); $cats = new Compta_Categories; $banques = new Compta_Comptes_Bancaires; if (isset($_GET['depense'])) $type = Compta_Categories::DEPENSES; elseif (isset($_GET['virement'])) $type = 'virement'; elseif (isset($_GET['dette'])) $type = 'dette'; elseif (isset($_GET['avance'])) $type = null; else $type = Compta_Categories::RECETTES; $error = false; $debug = "_POST=".print_r($_POST, true); if (!empty($_POST['save'])) { if (!utils::CSRF_check('compta_saisie')) { $error = 'Une erreur est survenue, merci de renvoyer le formulaire.'; } else { try { if (is_null($type)) { $fluxs = []; $solde = 0.0; for ($n=0; array_key_exists('compte_'.$n, $_POST); $n++) { $compte = $_POST['compte_'.$n]; if (array_key_exists('montant_'.$n, $_POST)) { $montant = $_POST['montant_'.$n]; if ($montant == 0.0) { continue; } else { $solde += $montant; $fluxs[] = ['compte' => $compte, 'montant' => $montant]; } } else { if ($solde != 0.0) { $fluxs[] = ['compte' => $compte, 'montant' => - $solde]; } break; } } $debug .= "
fluxs = ".print_r($fluxs, true); $id = $journal->add([ 'libelle' => utils::post('libelle'), 'date' => utils::post('date'), 'fluxs' => $fluxs, 'numero_piece' => utils::post('numero_piece'), 'remarques' => utils::post('remarques'), 'id_auteur' => $user['id'], ]); } elseif ($type === 'virement') { $id = $journal->add([ 'libelle' => utils::post('libelle'), 'date' => utils::post('date'), 'fluxs' => [ ['compte'=>utils::post('compte1'), 'montant' => - utils::post('montant')] , ['compte'=>utils::post('compte2'), 'montant' => utils::post('montant')] ], 'numero_piece' => utils::post('numero_piece'), 'remarques' => utils::post('remarques'), 'id_auteur' => $user['id'], ]); } else { $cat = $cats->get(utils::post('categorie')); if (!$cat) { throw new UserException('Il faut choisir une catégorie.'); } if ($type == 'dette') { if (!trim(utils::post('compte')) || (utils::post('compte') != 4010 && utils::post('compte') != 4110)) { throw new UserException('Type de dette invalide.'); } } else { if (utils::post('moyen_paiement') == 'ES') { $a = Compta_Comptes::CAISSE; $b = $cat['compte']; } else { if (!trim(utils::post('banque'))) { throw new UserException('Le compte bancaire choisi est invalide.'); } if (!array_key_exists(utils::post('banque'), $banques->getList())) { throw new UserException('Le compte bancaire choisi n\'existe pas.'); } $a = utils::post('banque'); $b = $cat['compte']; } } if ($type === Compta_Categories::DEPENSES) { $debit = $b; $credit = $a; } elseif ($type === Compta_Categories::RECETTES) { $debit = $a; $credit = $b; } elseif ($type === 'dette') { $debit = $cat['compte']; $credit = utils::post('compte'); } $id = $journal->add([ 'libelle' => utils::post('libelle'), 'date' => utils::post('date'), 'fluxs' => [ ['compte'=>$credit, 'montant' => - utils::post('montant')] , ['compte'=>$debit, 'montant' => utils::post('montant')] ], 'moyen_paiement'=> ($type === 'dette') ? null : utils::post('moyen_paiement'), 'numero_cheque' => ($type === 'dette') ? null : utils::post('numero_cheque'), 'numero_piece' => utils::post('numero_piece'), 'remarques' => utils::post('remarques'), 'id_categorie' => ($type === 'dette') ? null : (int)$cat['id'], 'id_auteur' => $user['id'], ]); } $membres->sessionStore('compta_date', utils::post('date')); if ($type == Compta_Categories::DEPENSES) $type = 'depense'; elseif (is_null($type)) $type = 'avance'; elseif ($type == Compta_Categories::RECETTES) $type = 'recette'; utils::redirect('/admin/compta/operations/saisir.php?'.$type.'&ok='.(int)$id); } catch (UserException $e) { $error = $e->getMessage(); } } } $tpl->assign('error', $error); $tpl->assign('debug', $debug."END"); $tpl->assign('type', $type); if (is_null($type)) { $tpl->assign('comptes', $comptes->listTree()); $tpl->assign('fluxs', [ 0 => ['compte' => '', 'montant' => 0.0] , 1 => ['compte' => '', 'montant' => 0.0] ] ); } else { $tpl->assign('moyens_paiement', $cats->listMoyensPaiement()); $tpl->assign('moyen_paiement', utils::post('moyen_paiement') ?: 'ES'); $tpl->assign('categories', $cats->getList($type === 'dette' ? Compta_Categories::DEPENSES : $type)); $tpl->assign('comptes_bancaires', $banques->getList()); $tpl->assign('banque', utils::post('banque')); } if (!$membres->sessionGet('compta_date')) { $exercices = new Compta_Exercices; $exercice = $exercices->getCurrent(); if ($exercice['debut'] > time() || $exercice['fin'] < time()) { $membres->sessionStore('compta_date', date('Y-m-d', $exercice['debut'])); } else { $membres->sessionStore('compta_date', date('Y-m-d')); } } $tpl->assign('date', $membres->sessionGet('compta_date') ?: false); $tpl->assign('ok', (int) utils::get('ok')); $tpl->display('admin/compta/operations/saisir.tpl'); ?>