* Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2019 Nicolas ZABOURI * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/don/index.php * \ingroup donations * \brief Home page of donation module */ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; $hookmanager = new HookManager($db); // Initialize technical object to manage hooks. Note that conf->hooks_modules contains array $hookmanager->initHooks(array('donationindex')); $langs->load("donations"); // Security check $result = restrictedArea($user, 'don'); $donation_static = new Don($db); /* * Actions */ // None /* * View */ $donstatic = new Don($db); $help_url = 'EN:Module_Donations|FR:Module_Dons|ES:Módulo_Donaciones'; llxHeader('', $langs->trans("Donations"), $help_url); $nb = array(); $somme = array(); $total = 0; $sql = "SELECT count(d.rowid) as nb, sum(d.amount) as somme , d.fk_statut"; $sql .= " FROM ".MAIN_DB_PREFIX."don as d WHERE d.entity IN (".getEntity('donation').")"; $sql .= " GROUP BY d.fk_statut"; $sql .= " ORDER BY d.fk_statut"; $result = $db->query($sql); if ($result) { $i = 0; $num = $db->num_rows($result); while ($i < $num) { $objp = $db->fetch_object($result); $somme[$objp->fk_statut] = $objp->somme; $nb[$objp->fk_statut] = $objp->nb; $total += $objp->somme; $i++; } $db->free($result); } else { dol_print_error($db); } print load_fiche_titre($langs->trans("DonationsArea"), '', 'object_donation'); print '
'; if (!empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is useless due to the global search combo { if (!empty($conf->don->enabled) && $user->rights->don->lire) { $listofsearchfields['search_donation'] = array('text'=>'Donation'); } if (count($listofsearchfields)) { print '
'; print ''; print ''; $i = 0; foreach ($listofsearchfields as $key => $value) { if ($i == 0) print ''; print ''; print ''; if ($i == 0) print ''; print ''; $i++; } print '
'.$langs->trans("Search").'
'; print '
'; print '
'; } } $dataseries = array(); $colorseries = array(); include_once DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/theme_vars.inc.php'; print ''; print ''; print ''; print "\n"; $listofstatus = array(0, 1, -1, 2); foreach ($listofstatus as $status) { $dataseries[] = array($donstatic->LibStatut($status, 1), (isset($nb[$status]) ? (int) $nb[$status] : 0)); if ($status == Don::STATUS_DRAFT) $colorseries[$status] = '-'.$badgeStatus0; if ($status == Don::STATUS_VALIDATED) $colorseries[$status] = $badgeStatus1; if ($status == Don::STATUS_CANCELED) $colorseries[$status] = $badgeStatus9; if ($status == Don::STATUS_PAID) $colorseries[$status] = $badgeStatus6; } if ($conf->use_javascript_ajax) { print ''; } print ''; print ''; print ''; print ''; print ''; print ''; $total = 0; $totalnb = 0; foreach ($listofstatus as $status) { print ''; print ''; print ''; print ''; print ''; $totalnb += (!empty($nb[$status]) ? $nb[$status] : 0); $total += (!empty($somme[$status]) ? $somme[$status] : 0); print ""; } print ''; print ''; print ''; print ''; print ''; print ''; print "
'.$langs->trans("Statistics").'
'; include_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php'; $dolgraph = new DolGraph(); $dolgraph->SetData($dataseries); $dolgraph->SetDataColor(array_values($colorseries)); $dolgraph->setShowLegend(2); $dolgraph->setShowPercent(1); $dolgraph->SetType(array('pie')); $dolgraph->setHeight('200'); $dolgraph->draw('idgraphstatus'); print $dolgraph->show($total ? 0 : 1); print '
'.$langs->trans("Status").''.$langs->trans("Number").''.$langs->trans("Total").''.$langs->trans("Average").'
'.$donstatic->LibStatut($status, 4).''.(!empty($nb[$status]) ? $nb[$status] : ' ').''.(!empty($nb[$status]) ?price($somme[$status], 'MT') : ' ').''.(!empty($nb[$status]) ?price(price2num($somme[$status] / $nb[$status], 'MT')) : ' ').'
'.$langs->trans("Total").''.$totalnb.''.price($total, 'MT').''.($totalnb ?price(price2num($total / $totalnb, 'MT')) : ' ').'
"; print '
'; $max = 10; /* * Last modified donations */ $sql = "SELECT c.rowid, c.ref, c.fk_statut, c.societe, c.lastname, c.firstname, c.tms as datem, c.amount"; $sql .= " FROM ".MAIN_DB_PREFIX."don as c"; $sql .= " WHERE c.entity = ".$conf->entity; //$sql.= " AND c.fk_statut > 2"; $sql .= " ORDER BY c.tms DESC"; $sql .= $db->plimit($max, 0); $resql = $db->query($sql); if ($resql) { print ''; print ''; print ''; $num = $db->num_rows($resql); if ($num) { $i = 0; while ($i < $num) { $obj = $db->fetch_object($resql); print ''; $donation_static->id = $obj->rowid; $donation_static->ref = $obj->ref ? $obj->ref : $obj->rowid; print ''; print ''; print ''; // Date print ''; print ''; print ''; $i++; } } print "
'.$langs->trans("LastModifiedDonations", $max).'
'; print $donation_static->getNomUrl(1); print ''; print $obj->societe; print ($obj->societe && ($obj->lastname || $obj->firstname) ? ' / ' : ''); print dolGetFirstLastname($obj->lastname, $obj->firstname); print ''; print price($obj->amount, 1); print ''.dol_print_date($db->jdate($obj->datem), 'day').''.$donation_static->LibStatut($obj->fk_statut, 5).'

"; } else dol_print_error($db); print '
'; $parameters = array('user' => $user); $reshook = $hookmanager->executeHooks('dashboardDonation', $parameters, $object); // Note that $action and $object may have been modified by hook llxFooter(); $db->close();