30require 
'../main.inc.php';
 
   31require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
 
   32if (isModEnabled(
'project')) {
 
   33  require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
 
   37$langs->loadLangs(array(
'companies', 
'donations'));
 
   40$action     = 
GETPOST(
'action', 
'aZ09') ? 
GETPOST(
'action', 
'aZ09') : 
'view'; 
 
   41$massaction = 
GETPOST(
'massaction', 
'alpha'); 
 
   42$contextpage = 
GETPOST(
'contextpage', 
'aZ') ? 
GETPOST(
'contextpage', 
'aZ') : 
'donationlist';
 
   43$toselect = 
GETPOST(
'toselect', 
'array');
 
   44$optioncss = 
GETPOST(
'optioncss', 
'alpha');
 
   45$mode = 
GETPOST(
'mode', 
'alpha');
 
   49$search_status = (
GETPOST(
"search_status", 
'intcomma') != 
'') ? 
GETPOST(
"search_status", 
'intcomma') : 
"-4";
 
   50$search_all = trim((
GETPOST(
'search_all', 
'alphanohtml') != 
'') ? 
GETPOST(
'search_all', 
'alphanohtml') : 
GETPOST(
'sall', 
'alphanohtml'));
 
   51$search_ref = 
GETPOST(
'search_ref', 
'alpha');
 
   52$search_company = 
GETPOST(
'search_company', 
'alpha');
 
   53$search_thirdparty = 
GETPOST(
'search_thirdparty', 
'alpha');
 
   54$search_name = 
GETPOST(
'search_name', 
'alpha');
 
   55$search_amount = 
GETPOST(
'search_amount', 
'alpha');
 
   56$moreforfilter = 
GETPOST(
'moreforfilter', 
'alpha');
 
   60$sortfield = 
GETPOST(
'sortfield', 
'aZ09comma');
 
   61$sortorder = 
GETPOST(
'sortorder', 
'aZ09comma');
 
   63if (empty($page) || $page < 0 || 
GETPOST(
'button_search', 
'alpha') || 
GETPOST(
'button_removefilter', 
'alpha')) {
 
   67$offset = $limit * $page;
 
   74$diroutputmassaction = $conf->don->dir_output.
'/temp/massgeneration/'.$user->id;
 
   75$hookmanager->initHooks(array($contextpage));   
 
   78$extrafields->fetch_name_optionals_label(
$object->table_element);
 
   81$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element, 
'', 
'search_');
 
   88  $sortfield = 
"d.datedon";
 
   92$search_all = trim(
GETPOST(
'search_all', 
'alphanohtml'));
 
   94foreach (
$object->fields as $key => $val) {
 
   95  if (
GETPOST(
'search_'.$key, 
'alpha') !== 
'') {
 
   96    $search[$key] = 
GETPOST(
'search_'.$key, 
'alpha');
 
   98  if (preg_match(
'/^(date|timestamp|datetime)/', $val[
'type'])) {
 
  105$fieldstosearchall = array(
 
  108  'd.lastname' => 
'Lastname',
 
  109  'd.firstname' => 
'Firstname',
 
  112include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_array_fields.tpl.php';
 
  122$permissiontoread = $user->hasRight(
'don', 
'read');
 
  123$permissiontoadd = $user->hasRight(
'don', 
'write');
 
  124$permissiontodelete = $user->hasRight(
'don', 
'delete');
 
  131if (
GETPOST(
'cancel', 
'alpha')) {
 
  135if (!
GETPOST(
'confirmmassaction', 
'alpha') && $massaction != 
'presend' && $massaction != 
'confirm_presend') {
 
  139if (
GETPOST(
'button_removefilter_x', 
'alpha') || 
GETPOST(
'button_removefilter.x', 
'alpha') || 
GETPOST(
'button_removefilter', 
'alpha')) { 
 
  142  $search_company = 
"";
 
  143  $search_thirdparty = 
"";
 
  154$form = 
new Form($db);
 
  158$donationstatic = 
new Don($db);
 
  159if (isModEnabled(
'project')) {
 
  160  $projectstatic = 
new Project($db);
 
  163$title = $langs->trans(
"Donations");
 
  164$help_url = 
'EN:Module_Donations|FR:Module_Dons|ES:Módulo_Donaciones|DE:Modul_Spenden';
 
  170$sql = 
"SELECT d.rowid, d.datedon, d.fk_soc as socid, d.firstname, d.lastname, d.societe,";
 
  171$sql .= 
" d.amount, d.fk_statut as status,";
 
  172$sql .= 
" p.rowid as pid, p.ref, p.title, p.public";
 
  174$parameters = array();
 
  175$reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters, $object, $action); 
 
  176$sql .= $hookmanager->resPrint;
 
  177$sql = preg_replace(
'/,\s*$/', 
'', $sql);
 
  181$sql .= 
" FROM ".MAIN_DB_PREFIX.$object->table_element.
" as d LEFT JOIN ".MAIN_DB_PREFIX.
"projet AS p";
 
  182$sql .= 
" ON p.rowid = d.fk_projet";
 
  183$sql .= 
" LEFT JOIN " . MAIN_DB_PREFIX . 
"societe AS s ON s.rowid = d.fk_soc";
 
  184$sql .= 
" WHERE d.entity IN (". 
getEntity(
'donation') . 
")";
 
  186if ($search_status != 
'' && $search_status != 
'-4') {
 
  187  $sql .= 
" AND d.fk_statut IN (".$db->sanitize($search_status).
")";
 
  189if (trim($search_ref) != 
'') {
 
  192if (trim($search_all) != 
'') {
 
  193  $sql .= 
natural_search(array_keys($fieldstosearchall), $search_all);
 
  195if (trim($search_company) != 
'') {
 
  198if (trim($search_thirdparty) != 
'') {
 
  201if (trim($search_name) != 
'') {
 
  202  $sql .= 
natural_search(array(
'd.lastname', 
'd.firstname'), $search_name);
 
  209$nbtotalofrecords = 
'';
 
  212  $sqlforcount = preg_replace(
'/^'.preg_quote($sqlfields, 
'/').
'/', 
'SELECT COUNT(*) as nbtotalofrecords', $sql);
 
  213  $sqlforcount = preg_replace(
'/GROUP BY .*$/', 
'', $sqlforcount);
 
  214  $resql = $db->query($sqlforcount);
 
  216    $objforcount = $db->fetch_object($resql);
 
  217    $nbtotalofrecords = $objforcount->nbtotalofrecords;
 
  222  if (($page * $limit) > $nbtotalofrecords) { 
 
  230$sql .= $db->order($sortfield, $sortorder);
 
  232  $sql .= $db->plimit($limit + 1, $offset);
 
  235$resql = $db->query($sql);
 
  241$num = $db->num_rows($resql);
 
  244if ($num == 1 && 
getDolGlobalInt(
'MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE') && $search_all && !$page) {
 
  245  $obj = $db->fetch_object($resql);
 
  247  header(
"Location: ".
dol_buildpath(
'/mymodule/myobject_card.php', 1).
'?id='.$id);
 
  255llxHeader(
'', $title, $help_url, 
'', 0, 0, $morejs, $morecss, 
'', 
'mod-donation page-list bodyforlist');  
 
  272$arrayofselected = is_array($toselect) ? $toselect : array();
 
  276  $param .= 
'&mode='.urlencode($mode);
 
  278if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
 
  279  $param .= 
'&contextpage='.urlencode($contextpage);
 
  281if ($limit > 0 && $limit != $conf->liste_limit) {
 
  282  $param .= 
'&limit='.((int) $limit);
 
  284if ($optioncss != 
'') {
 
  285  $param .= 
'&optioncss='.urlencode($optioncss);
 
  287if ($search_status && $search_status != -1) {
 
  288  $param .= 
'&search_status='.urlencode($search_status);
 
  291  $param .= 
'&search_ref='.urlencode($search_ref);
 
  293if ($search_company) {
 
  294  $param .= 
'&search_company='.urlencode($search_company);
 
  297  $param .= 
'&search_name='.urlencode($search_name);
 
  300  $param .= 
'&search_amount='.urlencode($search_amount);
 
  304$arrayofmassactions = array(
 
  310if (!empty($permissiontodelete)) {
 
  311  $arrayofmassactions[
'predelete'] = 
img_picto(
'', 
'delete', 
'class="pictofixedwidth"').$langs->trans(
"Delete");
 
  313if (
GETPOSTINT(
'nomassaction') || in_array($massaction, array(
'presend', 
'predelete'))) {
 
  314  $arrayofmassactions = array();
 
  316$massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
 
  319print 
'<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">'.
"\n";
 
  320if ($optioncss != 
'') {
 
  321  print 
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
 
  323print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
  324print 
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
 
  325print 
'<input type="hidden" name="action" value="list">';
 
  326print 
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
 
  327print 
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
 
  328print 
'<input type="hidden" name="page" value="'.$page.
'">';
 
  329print 
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
 
  330print 
'<input type="hidden" name="page_y" value="">';
 
  331print 
'<input type="hidden" name="mode" value="'.$mode.
'">';
 
  332print 
'<input type="hidden" name="type" value="'.$type.
'">';
 
  335$newcardbutton .= 
dolGetButtonTitle($langs->trans(
'ViewList'), 
'', 
'fa fa-bars imgforviewmode', $_SERVER[
"PHP_SELF"].
'?mode=common'.preg_replace(
'/(&|\?)*mode=[^&]+/', 
'', $param), 
'', ((empty($mode) || $mode == 
'common') ? 2 : 1), array(
'morecss' => 
'reposition'));
 
  336$newcardbutton .= 
dolGetButtonTitle($langs->trans(
'ViewKanban'), 
'', 
'fa fa-th-list imgforviewmode', $_SERVER[
"PHP_SELF"].
'?mode=kanban'.preg_replace(
'/(&|\?)*mode=[^&]+/', 
'', $param), 
'', ($mode == 
'kanban' ? 2 : 1), array(
'morecss' => 
'reposition'));
 
  337if ($user->hasRight(
'don', 
'creer')) {
 
  339  $newcardbutton .= 
dolGetButtonTitle($langs->trans(
'NewDonation'), 
'', 
'fa fa-plus-circle', DOL_URL_ROOT.
'/don/card.php?action=create');
 
  343print_barre_liste($langs->trans(
"Donations"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, 
'', $num, $nbtotalofrecords, 
'object_donation', 0, $newcardbutton, 
'', $limit, 0, 0, 1);
 
  347  foreach ($fieldstosearchall as $key => $val) {
 
  348    $fieldstosearchall[$key] = $langs->trans($val);
 
  349    $setupstring .= $key.
"=".$val.
";";
 
  351  print 
'<!-- Search done like if DONATION_QUICKSEARCH_ON_FIELDS = '.$setupstring.
' -->'.
"\n";
 
  352  print 
'<div class="divsearchfieldfilter">'.$langs->trans(
"FilterOnInto", $search_all).implode(
', ', $fieldstosearchall).
'</div>';
 
  355$varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
 
  356$htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage, 
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));  
 
  357$selectedfields = ($mode != 
'kanban' ? $htmlofselectarray : 
'');
 
  358$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) : 
'');
 
  360print 
'<div class="div-table-responsive">';
 
  361print 
'<table class="tagtable nobottomiftotal liste'.(!empty($moreforfilter) ? 
" listwithfilterbefore" : 
"").
'">'.
"\n";
 
  365print 
'<tr class="liste_titre_filter">';
 
  368  print 
'<td class="liste_titre center maxwidthsearch">';
 
  369  $searchpicto = $form->showFilterButtons(
'left');
 
  373print 
'<td class="liste_titre">';
 
  374print 
'<input class="flat" size="10" type="text" name="search_ref" value="'.$search_ref.
'">';
 
  377  print 
'<td class="liste_titre">';
 
  378  print 
'<input class="flat" size="10" type="text" name="search_thirdparty" value="'.$search_thirdparty.
'">';
 
  381  print 
'<td class="liste_titre">';
 
  382  print 
'<input class="flat" size="10" type="text" name="search_company" value="'.$search_company.
'">';
 
  385print 
'<td class="liste_titre">';
 
  386print 
'<input class="flat" size="10" type="text" name="search_name" value="'.$search_name.
'">';
 
  388print 
'<td class="liste_titre left">';
 
  391if (isModEnabled(
'project')) {
 
  392  print 
'<td class="liste_titre right">';
 
  396print 
'<td class="liste_titre right"><input name="search_amount" class="flat" type="text" size="8" value="'.$search_amount.
'"></td>';
 
  397print 
'<td class="liste_titre center parentonrightofpage">';
 
  399  Don::STATUS_DRAFT => $langs->trans(
"DonationStatusPromiseNotValidated"),
 
  400  Don::STATUS_VALIDATED => $langs->trans(
"DonationStatusPromiseValidated"),
 
  401  Don::STATUS_PAID => $langs->trans(
"DonationStatusPaid"),
 
  402  Don::STATUS_CANCELED => $langs->trans(
"Canceled")
 
  405print $form->selectarray(
'search_status', $liststatus, $search_status, -4, 0, 0, 
'', 0, 0, 0, 
'', 
'search_status maxwidth100 onrightofpage');
 
  408  print 
'<td class="liste_titre center maxwidthsearch">';
 
  409  $searchpicto = $form->showFilterButtons();
 
  415$totalarray = array();
 
  416$totalarray[
'nbfield'] = 0;
 
  420print 
'<tr class="liste_titre">';
 
  424  $totalarray[
'nbfield']++;
 
  427$totalarray[
'nbfield']++;
 
  429  print_liste_field_titre(
"ThirdParty", $_SERVER[
"PHP_SELF"], 
"d.fk_soc", 
"", $param, 
"", $sortfield, $sortorder);
 
  430  $totalarray[
'nbfield']++;
 
  433  $totalarray[
'nbfield']++;
 
  436$totalarray[
'nbfield']++;
 
  437print_liste_field_titre(
"Date", $_SERVER[
"PHP_SELF"], 
"d.datedon", 
"", $param, 
'', $sortfield, $sortorder, 
'center ');
 
  438$totalarray[
'nbfield']++;
 
  439if (isModEnabled(
'project')) {
 
  440  $langs->load(
"projects");
 
  441  print_liste_field_titre(
"Project", $_SERVER[
"PHP_SELF"], 
"d.fk_projet", 
"", $param, 
"", $sortfield, $sortorder);
 
  442  $totalarray[
'nbfield']++;
 
  444print_liste_field_titre(
"Amount", $_SERVER[
"PHP_SELF"], 
"d.amount", 
"", $param, 
'', $sortfield, $sortorder, 
'right ');
 
  445$totalarray[
'nbfield']++;
 
  446print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"], 
"d.fk_statut", 
"", $param, 
'', $sortfield, $sortorder, 
'center ');
 
  447$totalarray[
'nbfield']++;
 
  450  $totalarray[
'nbfield']++;
 
  455$savnbfield = $totalarray[
'nbfield'];
 
  456$totalarray = array();
 
  457$totalarray[
'nbfield'] = 0;
 
  458$imaxinloop = ($limit ? min($num, $limit) : $num);
 
  459while ($i < $imaxinloop) {
 
  460  $obj = $db->fetch_object($resql);
 
  462  $donationstatic->setVarsFromFetchObj($obj);
 
  465  $result = $company->fetch($obj->socid);
 
  467  if ($mode == 
'kanban') {
 
  469      print 
'<tr class="trkanban"><td colspan="'.$savnbfield.
'">';
 
  470      print 
'<div class="box-flex-container kanban">';
 
  473    $donationstatic->amount = $obj->amount;
 
  474    $donationstatic->date = $obj->datedon;
 
  475    $donationstatic->status = $obj->status;
 
  476    $donationstatic->id = $obj->rowid;
 
  477    $donationstatic->ref = $obj->rowid;
 
  479    if (!empty($obj->socid) && $company->id > 0) {
 
  480      $donationstatic->societe = $company->getNomUrl(1);
 
  482      $donationstatic->societe = $obj->societe;
 
  488    if ($massactionbutton || $massaction) { 
 
  490      if (in_array(
$object->id, $arrayofselected)) {
 
  494    print $donationstatic->getKanbanView(
'', array(
'selected' => $selected));
 
  495    if ($i == ($imaxinloop - 1)) {
 
  500    print 
'<tr class="oddeven">';
 
  504    $donationstatic->id = $obj->rowid;
 
  505    $donationstatic->ref = $obj->rowid;
 
  506    $donationstatic->lastname = $obj->lastname;
 
  507    $donationstatic->firstname = $obj->firstname;
 
  508    print 
"<td>".$donationstatic->getNomUrl(1).
"</td>";
 
  510      if (!empty($obj->socid) && $company->id > 0) {
 
  511        print 
"<td>".$company->getNomUrl(1).
"</td>";
 
  513        print 
"<td>".((string) $obj->societe).
"</td>";
 
  516      print 
"<td>".((string) $obj->societe).
"</td>";
 
  518    print 
"<td>".$donationstatic->getFullName($langs).
"</td>";
 
  519    print 
'<td class="center">'.dol_print_date($db->jdate($obj->datedon), 
'day').
'</td>';
 
  520    if (isModEnabled(
'project')) {
 
  523        $projectstatic->id = $obj->pid;
 
  524        $projectstatic->ref = $obj->ref;
 
  525        $projectstatic->id = $obj->pid;
 
  526        $projectstatic->public = $obj->public;
 
  527        $projectstatic->title = $obj->title;
 
  528        print $projectstatic->getNomUrl(1);
 
  534    print 
'<td class="right"><span class="amount">'.price($obj->amount).
'</span></td>';
 
  537    print 
'<td class="center">'.$donationstatic->LibStatut($obj->status, 5).
'</td>';
 
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
 
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
 
Class to manage donations.
 
Class to manage projects.
 
Class to manage third parties objects (customers, suppliers, prospects...)
 
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
 
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
 
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
 
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
 
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
 
dol_now($mode='auto')
Return date for now.
 
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
 
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
 
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
 
dolGetButtonTitleSeparator($moreClass="")
Add space between dolGetButtonTitle.
 
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
 
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
 
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
 
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
 
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
 
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
 
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.