diff --git a/htdocs/adherents/class/adherentstats.class.php b/htdocs/adherents/class/adherentstats.class.php index ed2fa05cf51..99111747fa9 100644 --- a/htdocs/adherents/class/adherentstats.class.php +++ b/htdocs/adherents/class/adherentstats.class.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003 Rodolphe Quiedeville * Copyright (c) 2005-2011 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2023 Waël Almoman * * 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 @@ -172,15 +173,13 @@ class AdherentStats extends Stats return $this->_getAllByYear($sql); } - - /** * Return count of member by status group by adh type, total and average * - * @param int $numberYears Years to scan - * @return array Array with total of draft, pending, uptodate, expired, resiliated for each member tag + * @param int $numberYears Years to scan + * @return array Array with total of draft, pending, uptodate, expired, resiliated for each member type */ - public function countMembersByTagAndStatus($numberYears = 2) + public function countMembersByTypeAndStatus($numberYears) { global $user; @@ -188,23 +187,19 @@ class AdherentStats extends Stats $endYear = date('Y'); $startYear = $endYear - $numberYears; - $sql = "SELECT c.rowid as fk_categorie, c.label as label"; + $sql = "SELECT t.rowid as fk_adherent_type, t.libelle as label"; $sql .= ", COUNT(".$this->db->ifsql("d.statut = ".Adherent::STATUS_DRAFT, "'members_draft'", 'NULL').") as members_draft"; $sql .= ", COUNT(".$this->db->ifsql("d.statut = ".Adherent::STATUS_VALIDATED." AND (d.datefin IS NULL AND t.subscription = '1')", "'members_pending'", 'NULL').") as members_pending"; $sql .= ", COUNT(".$this->db->ifsql("d.statut = ".Adherent::STATUS_VALIDATED." AND (d.datefin >= '".$this->db->idate($now)."' OR t.subscription = 0)", "'members_uptodate'", 'NULL').") as members_uptodate"; $sql .= ", COUNT(".$this->db->ifsql("d.statut = ".Adherent::STATUS_VALIDATED." AND (d.datefin < '".$this->db->idate($now)."' AND t.subscription = 1)", "'members_expired'", 'NULL').") as members_expired"; $sql .= ", COUNT(".$this->db->ifsql("d.statut = ".Adherent::STATUS_EXCLUDED, "'members_excluded'", 'NULL').") as members_excluded"; $sql .= ", COUNT(".$this->db->ifsql("d.statut = ".Adherent::STATUS_RESILIATED, "'members_resiliated'", 'NULL').") as members_resiliated"; - $sql .= " FROM ".MAIN_DB_PREFIX."categorie as c"; - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."categorie_member as ct ON c.rowid = ct.fk_categorie"; - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."adherent as d ON d.rowid = ct.fk_member"; - $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."adherent_type as t ON t.rowid = d.fk_adherent_type"; - $sql .= " WHERE c.entity IN (".getEntity('member_type').")"; - $sql .= " AND d.entity IN (" . getEntity('adherent') . ")"; - $sql .= " AND t.entity IN (" . getEntity('adherent') . ")"; + $sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as t"; + $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."adherent as d ON t.rowid = d.fk_adherent_type AND d.entity IN (" . getEntity('adherent') . ")"; $sql .= " AND d.datefin > '".$this->db->idate(dol_get_first_day($startYear))."'"; - $sql .= " AND c.fk_parent = 0"; - $sql .= " GROUP BY c.rowid"; + $sql .= " WHERE t.entity IN (".getEntity('member_type').")"; + $sql .= " AND t.statut = 1"; + $sql .= " GROUP BY t.rowid"; dol_syslog("box_members_by_type::select nb of members per type", LOG_DEBUG); $result = $this->db->query($sql); @@ -224,7 +219,7 @@ class AdherentStats extends Stats ); while ($i < $num) { $objp = $this->db->fetch_object($result); - $MembersCountArray[$objp->fk_categorie] = array( + $MembersCountArray[$objp->fk_adherent_type] = array( 'label' => $objp->label, 'members_draft' => (int) $objp->members_draft, 'members_pending' => (int) $objp->members_pending, @@ -234,13 +229,13 @@ class AdherentStats extends Stats 'members_resiliated' => (int) $objp->members_resiliated ); $totalrow = 0; - foreach ($MembersCountArray[$objp->fk_categorie] as $key=>$nb) { + foreach ($MembersCountArray[$objp->fk_adherent_type] as $key=>$nb) { if ($key!='label') { $totalrow += $nb; $totalstatus[$key] += $nb; } } - $MembersCountArray[$objp->fk_categorie]['total_adhtype'] = $totalrow; + $MembersCountArray[$objp->fk_adherent_type]['total_adhtype'] = $totalrow; $i++; } $this->db->free($result); diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index fd031421c8b..92b2cfe1425 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -5,7 +5,7 @@ * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2019 Nicolas ZABOURI * Copyright (C) 2021 Frédéric France - * Copyright (C) 2021 Waël Almoman + * Copyright (C) 2021-2023 Waël Almoman * * 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 @@ -85,173 +85,34 @@ $subscriptionstatic = new Subscription($db); print load_fiche_titre($langs->trans("MembersArea"), $resultboxes['selectboxlist'], 'members'); -$MembersValidated = array(); -$MembersToValidate = array(); -$MembersWaitingSubscription = array(); -$MembersUpToDate = array(); -$MembersExpired = array(); -$MembersExcluded = array(); -$MembersResiliated = array(); - -$AdherentType = array(); - -// Type of membership -$sql = "SELECT t.rowid, t.libelle as label, t.subscription,"; -$sql .= " d.statut, count(d.rowid) as somme"; -$sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as t"; -$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."adherent as d"; -$sql .= " ON t.rowid = d.fk_adherent_type"; -$sql .= " AND d.entity IN (".getEntity('adherent').")"; -$sql .= " WHERE t.entity IN (".getEntity('member_type').")"; -$sql .= " GROUP BY t.rowid, t.libelle, t.subscription, d.statut"; - -dol_syslog("index.php::select nb of members per type", LOG_DEBUG); -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - while ($i < $num) { - $objp = $db->fetch_object($resql); - - $adhtype = new AdherentType($db); - $adhtype->id = $objp->rowid; - $adhtype->subscription = $objp->subscription; - $adhtype->label = $objp->label; - $AdherentType[$objp->rowid] = $adhtype; - - if ($objp->statut == -1) { - $MembersToValidate[$objp->rowid] = $objp->somme; - } - if ($objp->statut == 1) { - $MembersValidated[$objp->rowid] = $objp->somme; - } - if ($objp->statut == -2) { - $MembersExcluded[$objp->rowid] = $objp->somme; - } - if ($objp->statut == 0) { - $MembersResiliated[$objp->rowid] = $objp->somme; - } - - $i++; - } - $db->free($resql); -} - -$now = dol_now(); - -// Members waiting subscription -$sql = "SELECT count(*) as somme , d.fk_adherent_type"; -$sql .= " FROM ".MAIN_DB_PREFIX."adherent as d, ".MAIN_DB_PREFIX."adherent_type as t"; -$sql .= " WHERE d.entity IN (".getEntity('adherent').")"; -$sql .= " AND d.statut = 1"; // validated -$sql .= " AND (d.datefin IS NULL AND t.subscription = '1')"; -$sql .= " AND t.rowid = d.fk_adherent_type"; -$sql .= " GROUP BY d.fk_adherent_type"; - -dol_syslog("index.php::select nb of uptodate members by type", LOG_DEBUG); -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - while ($i < $num) { - $objp = $db->fetch_object($resql); - $MembersWaitingSubscription[$objp->fk_adherent_type] = $objp->somme; - $i++; - } - $db->free($resql); -} - -// Members up to date list -// current rule: uptodate = the end date is in future or no subcription required -// old rule: uptodate = if type does not need payment, that end date is null, if type need payment that end date is in future) -$sql = "SELECT count(*) as somme , d.fk_adherent_type"; -$sql .= " FROM ".MAIN_DB_PREFIX."adherent as d, ".MAIN_DB_PREFIX."adherent_type as t"; -$sql .= " WHERE d.entity IN (".getEntity('adherent').")"; -$sql .= " AND d.statut = 1"; // validated -$sql .= " AND (d.datefin >= '".$db->idate($now)."' OR t.subscription = '0')"; // end date in future -$sql .= " AND t.rowid = d.fk_adherent_type"; -$sql .= " GROUP BY d.fk_adherent_type"; - -dol_syslog("index.php::select nb of uptodate members by type", LOG_DEBUG); -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - while ($i < $num) { - $objp = $db->fetch_object($resql); - $MembersUpToDate[$objp->fk_adherent_type] = $objp->somme; - $i++; - } - $db->free($resql); -} - -// Members expired list -$sql = "SELECT count(*) as somme , d.fk_adherent_type"; -$sql .= " FROM ".MAIN_DB_PREFIX."adherent as d, ".MAIN_DB_PREFIX."adherent_type as t"; -$sql .= " WHERE d.entity IN (".getEntity('adherent').")"; -$sql .= " AND d.statut = 1"; // validated -$sql .= " AND (d.datefin < '".$db->idate($now)."' AND t.subscription = '1')"; -$sql .= " AND t.rowid = d.fk_adherent_type"; -$sql .= " GROUP BY d.fk_adherent_type"; - -dol_syslog("index.php::select nb of uptodate members by type", LOG_DEBUG); -$resql = $db->query($sql); -if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - while ($i < $num) { - $objp = $db->fetch_object($resql); - $MembersExpired[$objp->fk_adherent_type] = $objp->somme; - $i++; - } - $db->free($resql); -} - /* * Statistics */ $boxgraph = ''; if ($conf->use_javascript_ajax) { + $year = date('Y'); + $numberyears = empty(getDolGlobalInt("MAIN_NB_OF_YEAR_IN_WIDGET_GRAPH")) ? 2 : getDolGlobalInt("MAIN_NB_OF_YEAR_IN_WIDGET_GRAPH"); + $boxgraph .='
'; $boxgraph .=''; - $boxgraph .=''; + $boxgraph .=''; $boxgraph .=''; $boxgraph .= ''; $boxgraph .= '
'.$langs->trans("Statistics").'
'.$langs->trans("Statistics").' ('.$year-$numberyears.' - '.$year.')
'; - $SumToValidate = 0; - $SumWaitingSubscription = 0; - $SumUpToDate = 0; - $SumExpired = 0; - $SumResiliated = 0; - $SumExcluded = 0; + require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherentstats.class.php'; + $stats = new AdherentStats($db, 0, $userid); - $total = 0; - $dataval = array(); - $i = 0; - foreach ($AdherentType as $key => $adhtype) { - $dataval['draft'][] = array($i, isset($MembersToValidate[$key]) ? $MembersToValidate[$key] : 0); - $dataval['waitingsubscription'][] = array($i, isset($MembersWaitingSubscription[$key]) ? $MembersWaitingSubscription[$key] : 0); - $dataval['uptodate'][] = array($i, isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0); - $dataval['expired'][] = array($i, isset($MembersExpired[$key]) ? $MembersExpired[$key] : 0); - $dataval['excluded'][] = array($i, isset($MembersExcluded[$key]) ? $MembersExcluded[$key] : 0); - $dataval['resiliated'][] = array($i, isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0); + // Show array + $sumMembers = $stats->countMembersByTypeAndStatus($numberyears); + $total = $sumMembers['total']['members_draft'] + $sumMembers['total']['members_pending'] + $sumMembers['total']['members_uptodate'] + $sumMembers['total']['members_expired'] + $sumMembers['total']['members_excluded'] + $sumMembers['total']['members_resiliated']; - $SumToValidate += isset($MembersToValidate[$key]) ? $MembersToValidate[$key] : 0; - $SumWaitingSubscription += isset($MembersWaitingSubscription[$key]) ? $MembersWaitingSubscription[$key] : 0; - $SumUpToDate += isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0; - $SumExpired += isset($MembersExpired[$key]) ? $MembersExpired[$key] : 0; - $SumExcluded += isset($MembersExcluded[$key]) ? $MembersExcluded [$key] : 0; - $SumResiliated += isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0; - $i++; - } - $total = $SumToValidate + $SumWaitingSubscription + $SumUpToDate + $SumExpired + $SumExcluded + $SumResiliated; $dataseries = array(); - $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusToValid"), round($SumToValidate)); // Draft, not yet validated - $dataseries[] = array($langs->transnoentitiesnoconv("WaitingSubscription"), round($SumWaitingSubscription)); - $dataseries[] = array($langs->transnoentitiesnoconv("UpToDate"), round($SumUpToDate)); - $dataseries[] = array($langs->transnoentitiesnoconv("OutOfDate"), round($SumExpired)); - $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusExcluded"), round($SumExcluded)); - $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusResiliated"), round($SumResiliated)); + $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusToValid"), $sumMembers['total']['members_draft']); // Draft, not yet validated + $dataseries[] = array($langs->transnoentitiesnoconv("WaitingSubscription"), $sumMembers['total']['members_pending']); + $dataseries[] = array($langs->transnoentitiesnoconv("UpToDate"), $sumMembers['total']['members_uptodate']); + $dataseries[] = array($langs->transnoentitiesnoconv("OutOfDate"), $sumMembers['total']['members_expired']); + $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusExcluded"), $sumMembers['total']['members_excluded']); + $dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusResiliated"), $sumMembers['total']['members_resiliated']); include DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/theme_vars.inc.php'; @@ -268,7 +129,7 @@ if ($conf->use_javascript_ajax) { $boxgraph .= '
'.$langs->trans("Total").''; - $boxgraph .= $SumToValidate + $SumWaitingSubscription + $SumUpToDate + $SumExpired + $SumExcluded + $SumResiliated; + $boxgraph .= $total; $boxgraph .= '
'; $boxgraph .= '
'; diff --git a/htdocs/core/boxes/box_members_by_type.php b/htdocs/core/boxes/box_members_by_type.php index fcb47ac5d13..be1709b519e 100644 --- a/htdocs/core/boxes/box_members_by_type.php +++ b/htdocs/core/boxes/box_members_by_type.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2017 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2015-2020 Frederic France - * Copyright (C) 2021 Waël Almoman + * Copyright (C) 2021-2023 Waël Almoman * * 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 @@ -88,160 +88,74 @@ class box_members_by_type extends ModeleBoxes require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent_type.class.php'; $staticmember = new Adherent($this->db); - $this->info_box_head = array('text' => $langs->trans("BoxTitleMembersByType", $max)); + $year = date('Y'); + $numberyears = empty(getDolGlobalInt("MAIN_NB_OF_YEAR_IN_WIDGET_GRAPH")) ? 2 : getDolGlobalInt("MAIN_NB_OF_YEAR_IN_WIDGET_GRAPH"); + + $this->info_box_head = array('text' => $langs->trans("BoxTitleMembersByType").' ('.$year-$numberyears.' - '.$year.')'); if ($user->rights->adherent->lire) { - $MembersToValidate = array(); - $MembersPending = array(); - $MembersValidated = array(); - $MembersUpToDate = array(); - $MembersExcluded = array(); - $MembersResiliated = array(); - - $SumToValidate = 0; - $SumPending = 0; - $SumExpired = 0; - $SumUpToDate = 0; - $SumResiliated = 0; - $SumExcluded = 0; - - $AdherentType = array(); - - // Type of membership - $sql = "SELECT t.rowid, t.libelle as label, t.subscription,"; - $sql .= " d.statut, count(d.rowid) as somme"; - $sql .= " FROM " . MAIN_DB_PREFIX . "adherent_type as t"; - $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "adherent as d"; - $sql .= " ON t.rowid = d.fk_adherent_type"; - $sql .= " AND d.entity IN (" . getEntity('adherent') . ")"; - $sql .= " WHERE t.entity IN (" . getEntity('member_type') . ")"; - $sql .= " GROUP BY t.rowid, t.libelle, t.subscription, d.statut"; - - dol_syslog("box_members_by_type::select nb of members per type", LOG_DEBUG); - $result = $this->db->query($sql); - if ($result) { - $num = $this->db->num_rows($result); - $i = 0; - while ($i < $num) { - $objp = $this->db->fetch_object($result); - - $adhtype = new AdherentType($this->db); - $adhtype->id = $objp->rowid; - $adhtype->subscription = $objp->subscription; - $adhtype->label = $objp->label; - $AdherentType[$objp->rowid] = $adhtype; - - if ($objp->statut == Adherent::STATUS_DRAFT) { - $MembersToValidate[$objp->rowid] = $objp->somme; - } - if ($objp->statut == Adherent::STATUS_VALIDATED) { - $MembersValidated[$objp->rowid] = $objp->somme; - } - if ($objp->statut == Adherent::STATUS_EXCLUDED) { - $MembersExcluded[$objp->rowid] = $objp->somme; - } - if ($objp->statut == Adherent::STATUS_RESILIATED) { - $MembersResiliated[$objp->rowid] = $objp->somme; - } - - $i++; - } - $this->db->free($result); - $now = dol_now(); - - // Members up to date list - // current rule: uptodate = the end date is in future whatever is type - // old rule: uptodate = if type does not need payment, that end date is null, if type need payment that end date is in future) - $sql = "SELECT count(*) as somme , d.fk_adherent_type"; - $sql .= " FROM " . MAIN_DB_PREFIX . "adherent as d, " . MAIN_DB_PREFIX . "adherent_type as t"; - $sql .= " WHERE d.entity IN (" . getEntity('adherent') . ")"; - $sql .= " AND d.statut = 1 AND (d.datefin >= '" . $this->db->idate($now) . "' OR t.subscription = 0)"; - $sql .= " AND t.rowid = d.fk_adherent_type"; - $sql .= " GROUP BY d.fk_adherent_type"; - - dol_syslog("index.php::select nb of uptodate members by type", LOG_DEBUG); - $result = $this->db->query($sql); - if ($result) { - $num2 = $this->db->num_rows($result); - $i = 0; - while ($i < $num2) { - $objp = $this->db->fetch_object($result); - $MembersUpToDate[$objp->fk_adherent_type] = $objp->somme; - $i++; - } - $this->db->free($result); - } - // Members pendding (Waiting for first subscription) - $sql = "SELECT count(*) as somme , d.fk_adherent_type"; - $sql .= " FROM " . MAIN_DB_PREFIX . "adherent as d, " . MAIN_DB_PREFIX . "adherent_type as t"; - $sql .= " WHERE d.entity IN (" . getEntity('adherent') . ")"; - $sql .= " AND d.statut = 1 AND (d.datefin IS NULL AND t.subscription = 1)"; - $sql .= " AND t.rowid = d.fk_adherent_type"; - $sql .= " GROUP BY d.fk_adherent_type"; - - dol_syslog("index.php::select nb of uptodate members by type", LOG_DEBUG); - $result = $this->db->query($sql); - if ($result) { - $num2 = $this->db->num_rows($result); - $i = 0; - while ($i < $num2) { - $objp = $this->db->fetch_object($result); - $MembersPending[$objp->fk_adherent_type] = $objp->somme; - $i++; - } - $this->db->free($result); - } - + require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherentstats.class.php'; + $stats = new AdherentStats($this->db, $user->socid, $user->id); + // Show array + $sumMembers = $stats->countMembersByTypeAndStatus($numberyears); + if ($sumMembers) { $line = 0; $this->info_box_contents[$line][] = array( 'td' => 'class=""', 'text' => '', ); - // Draft + // Members Status To Valid $labelstatus = $staticmember->LibStatut($staticmember::STATUS_DRAFT, 0, 0, 1); $this->info_box_contents[$line][] = array( - 'td' => 'class="right tdoverflowmax100" width="15%" title="'.dol_escape_htmltag($labelstatus).'"', + 'td' => 'class="right tdoverflowmax100" width="10%" title="'.dol_escape_htmltag($labelstatus).'"', 'text' => $labelstatus ); - // Pending (Waiting for first subscription) + // Waiting for subscription $labelstatus = $staticmember->LibStatut($staticmember::STATUS_VALIDATED, 1, 0, 1); $this->info_box_contents[$line][] = array( - 'td' => 'class="right tdoverflowmax100" width="15%" title="'.dol_escape_htmltag($labelstatus).'"', - 'text' => $labelstatus + 'td' => 'class="right tdoverflowmax100" width="10%" title="'.dol_escape_htmltag($labelstatus).'"', + 'text' => $labelstatus, ); // Up to date $labelstatus = $staticmember->LibStatut($staticmember::STATUS_VALIDATED, 1, dol_now() + 86400, 1); $this->info_box_contents[$line][] = array( - 'td' => 'class="right tdoverflowmax100" width="15%" title="'.dol_escape_htmltag($labelstatus).'"', + 'td' => 'class="right tdoverflowmax100" width="10%" title="'.dol_escape_htmltag($labelstatus).'"', 'text' => $labelstatus, ); // Expired $labelstatus = $staticmember->LibStatut($staticmember::STATUS_VALIDATED, 1, dol_now() - 86400, 1); $this->info_box_contents[$line][] = array( - 'td' => 'class="right tdoverflowmax100" width="15%" title="'.dol_escape_htmltag($labelstatus).'"', + 'td' => 'class="right tdoverflowmax100" width="10%" title="'.dol_escape_htmltag($labelstatus).'"', 'text' => $labelstatus ); // Excluded $labelstatus = $staticmember->LibStatut($staticmember::STATUS_EXCLUDED, 0, 0, 1); $this->info_box_contents[$line][] = array( - 'td' => 'class="right tdoverflowmax100" width="15%" title="'.dol_escape_htmltag($labelstatus).'"', + 'td' => 'class="right tdoverflowmax100" width="10%" title="'.dol_escape_htmltag($labelstatus).'"', 'text' => $labelstatus ); // Resiliated $labelstatus = $staticmember->LibStatut($staticmember::STATUS_RESILIATED, 0, 0, 1); $this->info_box_contents[$line][] = array( - 'td' => 'class="right tdoverflowmax100" width="15%" title="'.dol_escape_htmltag($labelstatus).'"', + 'td' => 'class="right tdoverflowmax100" width="10%" title="'.dol_escape_htmltag($labelstatus).'"', 'text' => $labelstatus ); + // Total row + $labelstatus = $staticmember->LibStatut($staticmember::STATUS_RESILIATED, 0, 0, 1); + $this->info_box_contents[$line][] = array( + 'td' => 'class="right tdoverflowmax100" width="10%" title="'.dol_escape_htmltag($langs->trans("Total")).'"', + 'text' => $langs->trans("Total") + ); $line++; + foreach ($sumMembers as $key => $data) { + $adhtype = new AdherentType($this->db); + $adhtype->id = $key; - foreach ($AdherentType as $key => $adhtype) { - $SumToValidate += isset($MembersToValidate[$key]) ? $MembersToValidate[$key] : 0; - $SumPending += isset($MembersPending[$key]) ? $MembersPending[$key] : 0; - $SumExpired += isset($MembersValidated[$key]) ? $MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) - (isset($MembersPending[$key]) ? $MembersPending[$key] : 0): 0; - $SumUpToDate += isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0; - $SumExcluded += isset($MembersExcluded[$key]) ? $MembersExcluded [$key] : 0; - $SumResiliated += isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0; + if ($key=='total') { + break; + } + $adhtype->label = $data['label']; + $AdherentType[$key] = $adhtype; $this->info_box_contents[$line][] = array( 'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"', @@ -250,39 +164,43 @@ class box_members_by_type extends ModeleBoxes ); $this->info_box_contents[$line][] = array( 'td' => 'class="right"', - 'text' => (isset($MembersToValidate[$key]) && $MembersToValidate[$key] > 0 ? $MembersToValidate[$key] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_DRAFT, 1, 0, 3), + 'text' => (isset($data['members_draft']) && $data['members_draft'] > 0 ? $data['members_draft'] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_DRAFT, 1, 0, 3), 'asis' => 1, ); $this->info_box_contents[$line][] = array( 'td' => 'class="right"', - 'text' => (isset($MembersPending[$key]) && $MembersPending[$key] > 0 ? $MembersPending[$key] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, 0, 3), + 'text' => (isset($data['members_pending']) && $data['members_pending'] > 0 ? $data['members_pending'] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, $now, 3), 'asis' => 1, ); $this->info_box_contents[$line][] = array( 'td' => 'class="right"', - 'text' => (isset($MembersUpToDate[$key]) && $MembersUpToDate[$key] > 0 ? $MembersUpToDate[$key] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, $now, 3), + 'text' => (isset($data['members_uptodate']) && $data['members_uptodate'] > 0 ? $data['members_uptodate'] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_VALIDATED, 0, 0, 3), 'asis' => 1, ); $this->info_box_contents[$line][] = array( 'td' => 'class="right"', - 'text' => (isset($MembersValidated[$key]) && ($MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) > 0) ? $MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, 1, 3), + 'text' => (isset($data['members_expired']) && $data['members_expired'] > 0 ? $data['members_expired'] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, 1, 3), 'asis' => 1, ); $this->info_box_contents[$line][] = array( 'td' => 'class="right"', - 'text' => (isset($MembersExcluded[$key]) && $MembersExcluded[$key] > 0 ? $MembersExcluded[$key] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_EXCLUDED, 1, $now, 3), + 'text' => (isset($data['members_excluded']) && $data['members_excluded'] > 0 ? $data['members_excluded'] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_EXCLUDED, 1, $now, 3), 'asis' => 1, ); $this->info_box_contents[$line][] = array( 'td' => 'class="right"', - 'text' => (isset($MembersResiliated[$key]) && $MembersResiliated[$key] > 0 ? $MembersResiliated[$key] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_RESILIATED, 1, 0, 3), + 'text' => (isset($data['members_resiliated']) && $data['members_resiliated'] > 0 ? $data['members_resiliated'] : '') . ' ' . $staticmember->LibStatut(Adherent::STATUS_RESILIATED, 1, 0, 3), + 'asis' => 1, + ); + $this->info_box_contents[$line][] = array( + 'td' => 'class="right"', + 'text' => (isset($data['total_adhtype']) && $data['total_adhtype'] > 0 ? $data['total_adhtype'] : ''), 'asis' => 1, ); - $line++; } - if ($num == 0) { + if (count($sumMembers) == 0) { $this->info_box_contents[$line][0] = array( 'td' => 'colspan="7" class="center"', 'text' => $langs->trans("NoRecordedMembersByType") @@ -295,32 +213,37 @@ class box_members_by_type extends ModeleBoxes ); $this->info_box_contents[$line][] = array( 'td' => 'class="liste_total right"', - 'text' => $SumToValidate.' '.$staticmember->LibStatut(Adherent::STATUS_DRAFT, 1, 0, 3), + 'text' => $sumMembers['total']['members_draft'].' '.$staticmember->LibStatut(Adherent::STATUS_DRAFT, 1, 0, 3), 'asis' => 1 ); $this->info_box_contents[$line][] = array( 'td' => 'class="liste_total right"', - 'text' => $SumPending.' '.$staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, 0, 3), + 'text' => $sumMembers['total']['members_pending'].' '.$staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, $now, 3), 'asis' => 1 ); $this->info_box_contents[$line][] = array( 'td' => 'class="liste_total right"', - 'text' => $SumUpToDate.' '.$staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, $now, 3), + 'text' => $sumMembers['total']['members_uptodate'].' '.$staticmember->LibStatut(Adherent::STATUS_VALIDATED, 0, 0, 3), 'asis' => 1 ); $this->info_box_contents[$line][] = array( 'td' => 'class="liste_total right"', - 'text' => $SumExpired.' '.$staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, 1, 3), + 'text' => $sumMembers['total']['members_expired'].' '.$staticmember->LibStatut(Adherent::STATUS_VALIDATED, 1, 1, 3), 'asis' => 1 ); $this->info_box_contents[$line][] = array( 'td' => 'class="liste_total right"', - 'text' => $SumExcluded.' '.$staticmember->LibStatut(Adherent::STATUS_EXCLUDED, 1, 0, 3), + 'text' => $sumMembers['total']['members_excluded'].' '.$staticmember->LibStatut(Adherent::STATUS_EXCLUDED, 1, 0, 3), 'asis' => 1 ); $this->info_box_contents[$line][] = array( 'td' => 'class="liste_total right"', - 'text' => $SumResiliated.' '.$staticmember->LibStatut(Adherent::STATUS_RESILIATED, 1, 0, 3), + 'text' => $sumMembers['total']['members_resiliated'].' '.$staticmember->LibStatut(Adherent::STATUS_RESILIATED, 1, 0, 3), + 'asis' => 1 + ); + $this->info_box_contents[$line][] = array( + 'td' => 'class="liste_total right"', + 'text' => $sumMembers['total']['all'], 'asis' => 1 ); }