diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php
index 79640cb981c..194251c9ecc 100644
--- a/htdocs/adherents/card.php
+++ b/htdocs/adherents/card.php
@@ -1672,7 +1672,11 @@ else
}
else
{
- if (! $adht->subscription)
+ if ($object->need_subscription == 0)
+ {
+ print $langs->trans("SubscriptionNotNeeded");
+ }
+ elseif (! $adht->subscription)
{
print $langs->trans("SubscriptionNotRecorded");
if ($object->statut > 0) print " ".img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft and not terminated
diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php
index ea9835ecce9..07a8af10484 100644
--- a/htdocs/adherents/class/adherent.class.php
+++ b/htdocs/adherents/class/adherent.class.php
@@ -2178,7 +2178,8 @@ class Adherent extends CommonObject
{
if ($statut == -1) return $langs->trans("MemberStatusDraft");
elseif ($statut >= 1) {
- if (! $date_end_subscription) return $langs->trans("MemberStatusActive");
+ if ($need_subscription == 0) return $langs->trans("MemberStatusNoSubscription");
+ elseif (! $date_end_subscription) return $langs->trans("MemberStatusActive");
elseif ($date_end_subscription < time()) return $langs->trans("MemberStatusActiveLate");
else return $langs->trans("MemberStatusPaid");
}
@@ -2188,7 +2189,8 @@ class Adherent extends CommonObject
{
if ($statut == -1) return $langs->trans("MemberStatusDraftShort");
elseif ($statut >= 1) {
- if (! $date_end_subscription) return $langs->trans("MemberStatusActiveShort");
+ if ($need_subscription == 0) return $langs->trans("MemberStatusNoSubscription");
+ elseif (! $date_end_subscription) return $langs->trans("MemberStatusActiveShort");
elseif ($date_end_subscription < time()) return $langs->trans("MemberStatusActiveLateShort");
else return $langs->trans("MemberStatusPaidShort");
}
@@ -2198,7 +2200,8 @@ class Adherent extends CommonObject
{
if ($statut == -1) return img_picto($langs->trans('MemberStatusDraft'), 'statut0').' '.$langs->trans("MemberStatusDraftShort");
elseif ($statut >= 1) {
- if (! $date_end_subscription) return img_picto($langs->trans('MemberStatusActive'), 'statut1').' '.$langs->trans("MemberStatusActiveShort");
+ if ($need_subscription == 0) return img_picto($langs->trans('MemberStatusNoSubscription'), 'statut4').' '.$langs->trans("MemberStatusNoSubscriptionShort");
+ elseif (! $date_end_subscription) return img_picto($langs->trans('MemberStatusActive'), 'statut1').' '.$langs->trans("MemberStatusActiveShort");
elseif ($date_end_subscription < time()) return img_picto($langs->trans('MemberStatusActiveLate'), 'statut3').' '.$langs->trans("MemberStatusActiveLateShort");
else return img_picto($langs->trans('MemberStatusPaid'), 'statut4').' '.$langs->trans("MemberStatusPaidShort");
}
@@ -2208,7 +2211,8 @@ class Adherent extends CommonObject
{
if ($statut == -1) return img_picto($langs->trans('MemberStatusDraft'), 'statut0');
elseif ($statut >= 1) {
- if (! $date_end_subscription) return img_picto($langs->trans('MemberStatusActive'), 'statut1');
+ if ($need_subscription == 0) return img_picto($langs->trans('MemberStatusNoSubscription'), 'statut4');
+ elseif (! $date_end_subscription) return img_picto($langs->trans('MemberStatusActive'), 'statut1');
elseif ($date_end_subscription < time()) return img_picto($langs->trans('MemberStatusActiveLate'), 'statut3');
else return img_picto($langs->trans('MemberStatusPaid'), 'statut4');
}
@@ -2218,7 +2222,8 @@ class Adherent extends CommonObject
{
if ($statut == -1) return img_picto($langs->trans('MemberStatusDraft'), 'statut0').' '.$langs->trans("MemberStatusDraft");
elseif ($statut >= 1) {
- if (! $date_end_subscription) return img_picto($langs->trans('MemberStatusActive'), 'statut1').' '.$langs->trans("MemberStatusActive");
+ if ($need_subscription == 0) return img_picto($langs->trans('MemberStatusNoSubscription'), 'statut4').' '.$langs->trans("MemberStatusNoSubscription");
+ elseif (! $date_end_subscription) return img_picto($langs->trans('MemberStatusActive'), 'statut1').' '.$langs->trans("MemberStatusActive");
elseif ($date_end_subscription < time()) return img_picto($langs->trans('MemberStatusActiveLate'), 'statut3').' '.$langs->trans("MemberStatusActiveLate");
else return img_picto($langs->trans('MemberStatusPaid'), 'statut4').' '.$langs->trans("MemberStatusPaid");
}
@@ -2228,7 +2233,8 @@ class Adherent extends CommonObject
{
if ($statut == -1) return ''.$langs->trans("MemberStatusDraftShort").' '.img_picto($langs->trans('MemberStatusDraft'), 'statut0');
elseif ($statut >= 1) {
- if (! $date_end_subscription) return ''.$langs->trans("MemberStatusActiveShort").' '.img_picto($langs->trans('MemberStatusActive'), 'statut1');
+ if ($need_subscription == 0) return ''.$langs->trans("MemberStatusNoSubscriptionShort").' '.img_picto($langs->trans('MemberStatusNoSubscription'), 'statut4');
+ elseif (! $date_end_subscription) return ''.$langs->trans("MemberStatusActiveShort").' '.img_picto($langs->trans('MemberStatusActive'), 'statut1');
elseif ($date_end_subscription < time()) return ''.$langs->trans("MemberStatusActiveLateShort").' '.img_picto($langs->trans('MemberStatusActiveLate'), 'statut3');
else return ''.$langs->trans("MemberStatusPaidShort").' '.img_picto($langs->trans('MemberStatusPaid'), 'statut4');
}
@@ -2238,7 +2244,8 @@ class Adherent extends CommonObject
{
if ($statut == -1) return $langs->trans("MemberStatusDraft").' '.img_picto($langs->trans('MemberStatusDraft'), 'statut0');
if ($statut >= 1) {
- if (! $date_end_subscription) return $langs->trans("MemberStatusActive").' '.img_picto($langs->trans('MemberStatusActive'), 'statut1');
+ if ($need_subscription == 0) return $langs->trans("MemberStatusNoSubscription").' '.img_picto($langs->trans('MemberStatusNoSubscription'), 'statut4');
+ elseif (! $date_end_subscription) return $langs->trans("MemberStatusActive").' '.img_picto($langs->trans('MemberStatusActive'), 'statut1');
elseif ($date_end_subscription < time()) return $langs->trans("MemberStatusActiveLate").' '.img_picto($langs->trans('MemberStatusActiveLate'), 'statut3');
else return $langs->trans("MemberStatusPaid").' '.img_picto($langs->trans('MemberStatusPaid'), 'statut4');
}
@@ -2301,9 +2308,11 @@ class Adherent extends CommonObject
$sql = "SELECT a.rowid, a.datefin, a.statut";
$sql.= " FROM ".MAIN_DB_PREFIX."adherent as a";
- $sql.= " WHERE a.statut = 1";
+ $sql.= ", ".MAIN_DB_PREFIX."adherent_type as t";
+ $sql.= " WHERE d.fk_adherent_type = t.rowid";
+ $sql.= " AND a.statut = 1";
$sql.= " AND a.entity IN (".getEntity('adherent').")";
- $sql.= " AND (a.datefin IS NULL or a.datefin < '".$this->db->idate($now)."')";
+ $sql.= " AND ((a.datefin IS NULL or a.datefin < '".$this->db->idate($now)."') AND t.subscription = 1)";
$resql=$this->db->query($sql);
if ($resql)
diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php
index 6b465c7bf9f..b858693255e 100644
--- a/htdocs/adherents/index.php
+++ b/htdocs/adherents/index.php
@@ -104,8 +104,7 @@ $now=dol_now();
$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 ((t.subscription = 0 AND d.datefin IS NULL) OR d.datefin >= '".$db->idate($now)."')";
-$sql.= " AND d.statut = 1 AND d.datefin >= '".$db->idate($now)."'";
+$sql.= " AND d.statut = 1 AND (d.datefin >= '".$db->idate($now)."' OR t.subscription = 0)";
$sql.= " AND t.rowid = d.fk_adherent_type";
$sql.= " GROUP BY d.fk_adherent_type";
diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php
index 52bdba74485..57d99a387e2 100644
--- a/htdocs/adherents/list.php
+++ b/htdocs/adherents/list.php
@@ -294,8 +294,8 @@ if ($search_town) $sql.= natural_search("d.town", $search_town);
if ($search_zip) $sql.= natural_search("d.zip", $search_zip);
if ($search_state) $sql.= natural_search("state.nom", $search_state);
if ($search_country) $sql .= " AND d.country IN (".$search_country.')';
-if ($filter == 'uptodate') $sql.=" AND datefin >= '".$db->idate($now)."'";
-if ($filter == 'outofdate') $sql.=" AND (datefin IS NULL OR datefin < '".$db->idate($now)."')";
+if ($filter == 'uptodate') $sql.=" AND (datefin >= '".$db->idate($now)."' OR t.subscription = 0)";
+if ($filter == 'outofdate') $sql.=" AND ((datefin IS NULL OR datefin < '".$db->idate($now)."') AND t.subscription = 1)";
// Add where from extra fields
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php
index 08cd29de5e1..ac15e8d28ae 100644
--- a/htdocs/adherents/type.php
+++ b/htdocs/adherents/type.php
@@ -524,14 +524,14 @@ if ($rowid > 0)
{
$sql.= natural_search("d.email", $search_email);
}
- if ($filter == 'uptodate')
- {
- $sql.=" AND datefin >= '".$db->idate($now)."'";
- }
- if ($filter == 'outofdate')
- {
- $sql.=" AND datefin < '".$db->idate($now)."'";
- }
+ if ($filter == 'uptodate')
+ {
+ $sql.=" AND (datefin >= '".$db->idate($now)."') OR t.subscription = 0)";
+ }
+ if ($filter == 'outofdate')
+ {
+ $sql.=" AND (datefin < '".$db->idate($now)."' AND t.subscription = 1)";
+ }
$sql.= " ".$db->order($sortfield, $sortorder);
diff --git a/htdocs/core/modules/mailings/fraise.modules.php b/htdocs/core/modules/mailings/fraise.modules.php
index 51bc8a85de6..670b831c25f 100644
--- a/htdocs/core/modules/mailings/fraise.modules.php
+++ b/htdocs/core/modules/mailings/fraise.modules.php
@@ -256,8 +256,8 @@ class mailing_fraise extends MailingTargets
$sql.= " AND a.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$this->db->escape($mailing_id).")";
// Filter on status
if (isset($_POST["filter"]) && $_POST["filter"] == '-1') $sql.= " AND a.statut=-1";
- if (isset($_POST["filter"]) && $_POST["filter"] == '1a') $sql.= " AND a.statut=1 AND a.datefin >= '".$this->db->idate($now)."'";
- if (isset($_POST["filter"]) && $_POST["filter"] == '1b') $sql.= " AND a.statut=1 AND (a.datefin IS NULL or a.datefin < '".$this->db->idate($now)."')";
+ if (isset($_POST["filter"]) && $_POST["filter"] == '1a') $sql.= " AND a.statut=1 AND (a.datefin >= '".$this->db->idate($now)."' OR ta.subscription = 0)";
+ if (isset($_POST["filter"]) && $_POST["filter"] == '1b') $sql.= " AND a.statut=1 AND ((a.datefin IS NULL or a.datefin < '".$this->db->idate($now)."') AND ta.subscription = 1)";
if (isset($_POST["filter"]) && $_POST["filter"] == '0') $sql.= " AND a.statut=0";
// Filter on date
if ($dateendsubscriptionafter > 0) $sql.=" AND datefin > '".$this->db->idate($dateendsubscriptionafter)."'";