From e9108100378f1fd3f6bb9177f29341bcdfebe9f8 Mon Sep 17 00:00:00 2001 From: daraelmin Date: Sun, 21 Mar 2021 14:38:15 +0100 Subject: [PATCH] activate exlcude button --- htdocs/adherents/card.php | 158 +++++++++++++++++- htdocs/adherents/class/adherent.class.php | 5 +- .../adherents/class/adherent_type.class.php | 14 +- htdocs/adherents/index.php | 36 ++-- htdocs/langs/en_US/members.lang | 7 + 5 files changed, 184 insertions(+), 36 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index b34e39872ac..57e510719bb 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -655,7 +655,7 @@ if (empty($reshook)) { $action = ''; } - if ($user->rights->adherent->supprimer && $action == 'confirm_resign') { + if ($user->rights->adherent->supprimer && $action == 'confirm_resiliate') { $error = 0; if ($confirm == 'yes') { @@ -726,6 +726,77 @@ if (empty($reshook)) { } } + if ($user->rights->adherent->supprimer && $action == 'confirm_exclude') { + $error = 0; + + if ($confirm == 'yes') { + $adht = new AdherentType($db); + $adht->fetch($object->typeid); + + $result = $object->exclude($user); + + if ($result >= 0 && !count($object->errors)) { + if ($object->email && GETPOST("send_mail")) { + $subject = ''; + $msg = ''; + + // Send subscription email + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; + $formmail = new FormMail($db); + // Set output language + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); + // Load traductions files required by page + $outputlangs->loadLangs(array("main", "members")); + // Get email content from template + $arraydefaultmessage = null; + $labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_EXCLUSION; + + if (!empty($labeltouse)) { + $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); + } + + if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { + $subject = $arraydefaultmessage->topic; + $msg = $arraydefaultmessage->content; + } + + if (empty($labeltouse) || (int) $labeltouse === -1) { + //fallback on the old configuration. + setEventMessages('WarningMandatorySetupNotComplete', null, 'errors'); + $error++; + } else { + $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); + complete_substitutions_array($substitutionarray, $outputlangs, $object); + $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); + $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnExclude()), $substitutionarray, $outputlangs); + + $moreinheader = 'X-Dolibarr-Info: send_an_email by adherents/card.php'."\r\n"; + + $result = $object->send_an_email($texttosend, $subjecttosend, array(), array(), array(), "", "", 0, -1, '', $moreinheader); + if ($result < 0) { + $error++; + setEventMessages($object->error, $object->errors, 'errors'); + } + } + } + } else { + $error++; + + if ($object->error) { + setEventMessages($object->error, $object->errors, 'errors'); + } else { + setEventMessages($object->error, $object->errors, 'errors'); + } + $action = ''; + } + } + if (!empty($backtopage) && !$error) { + header("Location: ".$backtopage); + exit; + } + } + // SPIP Management if ($user->rights->adherent->supprimer && $action == 'confirm_del_spip' && $confirm == 'yes') { if (!count($object->errors)) { @@ -1434,8 +1505,8 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print $form->formconfirm("card.php?rowid=".$id, $langs->trans("ValidateMember"), $langs->trans("ConfirmValidateMember"), "confirm_valid", $formquestion, 'yes', 1, 220); } - // Confirm terminate - if ($action == 'resign') { + // Confirm resiliate + if ($action == 'resiliate') { $langs->load("mails"); $adht = new AdherentType($db); @@ -1491,7 +1562,67 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if ($backtopage) { $formquestion[] = array('type' => 'hidden', 'name' => 'backtopage', 'value' => ($backtopage != '1' ? $backtopage : $_SERVER["HTTP_REFERER"])); } - print $form->formconfirm("card.php?rowid=".$id, $langs->trans("ResiliateMember"), $langs->trans("ConfirmResiliateMember"), "confirm_resign", $formquestion, 'no', 1, 240); + print $form->formconfirm("card.php?rowid=".$id, $langs->trans("ResiliateMember"), $langs->trans("ConfirmResiliateMember"), "confirm_resiliate", $formquestion, 'no', 1, 240); + } + + // Confirm exclude + if ($action == 'exclude') { + $langs->load("mails"); + + $adht = new AdherentType($db); + $adht->fetch($object->typeid); + + $subject = ''; + $msg = ''; + + // Send subscription email + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; + $formmail = new FormMail($db); + // Set output language + $outputlangs = new Translate('', $conf); + $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); + // Load traductions files required by page + $outputlangs->loadLangs(array("main", "members")); + // Get email content from template + $arraydefaultmessage = null; + $labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_EXCLUSION; + + if (!empty($labeltouse)) { + $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); + } + + if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { + $subject = $arraydefaultmessage->topic; + $msg = $arraydefaultmessage->content; + } + + $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); + complete_substitutions_array($substitutionarray, $outputlangs, $object); + $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); + $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnExclude()), $substitutionarray, $outputlangs); + + $tmp = $langs->trans("SendingAnEMailToMember"); + $tmp .= '
('.$langs->trans("MailFrom").': '.$conf->global->ADHERENT_MAIL_FROM.', '; + $tmp .= $langs->trans("MailRecipient").': '.$object->email.')'; + $helpcontent = ''; + $helpcontent .= ''.$langs->trans("MailFrom").': '.$conf->global->ADHERENT_MAIL_FROM.'
'."\n"; + $helpcontent .= ''.$langs->trans("MailRecipient").': '.$object->email.'
'."\n"; + $helpcontent .= ''.$langs->trans("Subject").':
'."\n"; + $helpcontent .= $subjecttosend."\n"; + $helpcontent .= "
"; + $helpcontent .= ''.$langs->trans("Content").':
'; + $helpcontent .= dol_htmlentitiesbr($texttosend)."\n"; + $label = $form->textwithpicto($tmp, $helpcontent, 1, 'help'); + + // Create an array + $formquestion = array(); + if ($object->email) { + $formquestion[] = array('type' => 'checkbox', 'name' => 'send_mail', 'label' => $label, 'value' => (!empty($conf->global->ADHERENT_DEFAULT_SENDINFOBYMAIL) ? 'true' : 'false')); + } + if ($backtopage) { + $formquestion[] = array('type' => 'hidden', 'name' => 'backtopage', 'value' => ($backtopage != '1' ? $backtopage : $_SERVER["HTTP_REFERER"])); + } + print $form->formconfirm("card.php?rowid=".$id, $langs->trans("ExcludeMember"), $langs->trans("ConfirmExcludeMember"), "confirm_exclude", $formquestion, 'no', 1, 240); } // Confirm remove member @@ -1584,12 +1715,12 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { } 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 + print " ".img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft, not excluded and not resiliated } } else { print $langs->trans("SubscriptionNotReceived"); if ($object->statut > 0) { - print " ".img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft and not terminated + print " ".img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft, not excluded and not resiliated } } } @@ -1740,7 +1871,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { } // Reactivate - if ($object->statut == 0) { + if ($object->statut == 0 || $object->statut == -2) { if ($user->rights->adherent->creer) { print '
'.$langs->trans("Reenable")."
\n"; } else { @@ -1748,15 +1879,24 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { } } - // Terminate + // Resiliate if ($object->statut >= 1) { if ($user->rights->adherent->supprimer) { - print '
'.$langs->trans("Resiliate")."
\n"; + print '
'.$langs->trans("Resiliate")."
\n"; } else { print '
'.$langs->trans("Resiliate")."
"; } } + // Exclude + if ($object->statut >= 1) { + if ($user->rights->adherent->supprimer) { + print '
'.$langs->trans("Exclude")."
\n"; + } else { + print '
'.$langs->trans("Exclude")."
"; + } + } + // Create third party if (!empty($conf->societe->enabled) && !$object->socid) { if ($user->rights->societe->creer) { diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 8ee02238f1e..bb56eaf4947 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -1918,7 +1918,10 @@ class Adherent extends CommonObject } /** - * Fonction qui exclu un adherent + * Functiun to exlude (set adherent.status to -2) a member + * TODO + * A private note should be added to know why the member has been excluded + * For historical purpose it add an "extra-subscription" type excluded * * @param User $user User making change * @return int <0 if KO, >0 if OK diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index 6c7dddecaa6..c4402a157bd 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -103,8 +103,8 @@ class AdherentType extends CommonObject /** @var string Email sent after resiliation */ public $mail_resiliate = ''; - /** @var string Email sent after exclusion */ - public $mail_exclusion = ''; + /** @var string Email sent after exclude */ + public $mail_exclude = ''; /** @var array Array of members */ public $members = array(); @@ -825,15 +825,15 @@ class AdherentType extends CommonObject } /** - * getMailOnExclusion + * getMailOnExclude * * @return string Return mail model content of type or empty */ - public function getMailOnExclusion() + public function getMailOnExclude() { - // NOTE mail_exclusion not defined so never used - if (!empty($this->mail_exclusion) && trim(dol_htmlentitiesbr_decode($this->mail_exclusion))) { // Property not yet defined - return $this->mail_exclusion; + // NOTE mail_exclude not defined so never used + if (!empty($this->mail_exclude) && trim(dol_htmlentitiesbr_decode($this->mail_exclude))) { // Property not yet defined + return $this->mail_exclude; } return ''; diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php index c0599561df0..f5c5b1100a4 100644 --- a/htdocs/adherents/index.php +++ b/htdocs/adherents/index.php @@ -82,8 +82,8 @@ print load_fiche_titre($langs->trans("MembersArea"), $resultboxes['selectboxlist $MembersValidated = array(); $MembersToValidate = array(); $MembersUpToDate = array(); -$MembersResiliated = array(); $MembersExcluded = array(); +$MembersResiliated = array(); $AdherentType = array(); @@ -117,12 +117,12 @@ if ($result) { if ($objp->statut == 1) { $MembersValidated[$objp->rowid] = $objp->somme; } - if ($objp->statut == 0) { - $MembersResiliated[$objp->rowid] = $objp->somme; - } if ($objp->statut == -2) { $MembersExcluded[$objp->rowid] = $objp->somme; } + if ($objp->statut == 0) { + $MembersResiliated[$objp->rowid] = $objp->somme; + } $i++; } @@ -203,7 +203,6 @@ if ($conf->use_javascript_ajax) { $SumResiliated = 0; $SumExcluded = 0; - $total = 0; $dataval = array(); $i = 0; @@ -211,17 +210,17 @@ if ($conf->use_javascript_ajax) { $dataval['draft'][] = array($i, isset($MembersToValidate[$key]) ? $MembersToValidate[$key] : 0); $dataval['notuptodate'][] = array($i, isset($MembersValidated[$key]) ? $MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) : 0); $dataval['uptodate'][] = array($i, isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0); - $dataval['resiliated'][] = array($i, isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0); $dataval['excluded'][] = array($i, isset($MembersExcluded[$key]) ? $MembersExcluded[$key] : 0); + $dataval['resiliated'][] = array($i, isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0); $SumToValidate += isset($MembersToValidate[$key]) ? $MembersToValidate[$key] : 0; $SumValidated += isset($MembersValidated[$key]) ? $MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) : 0; $SumUpToDate += isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0; - $SumResiliated += isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0; $SumExcluded += isset($MembersExcluded[$key]) ? $MembersExcluded [$key] : 0; + $SumResiliated += isset($MembersResiliated[$key]) ? $MembersResiliated[$key] : 0; $i++; } - $total = $SumToValidate + $SumValidated + $SumUpToDate + $SumResiliated + $SumExcluded; + $total = $SumToValidate + $SumValidated + $SumUpToDate + $SumExcluded + $SumResiliated; $dataseries = array(); $dataseries[] = array($langs->transnoentitiesnoconv("OutOfDate"), round($SumValidated)); $dataseries[] = array($langs->transnoentitiesnoconv("UpToDate"), round($SumUpToDate)); @@ -244,8 +243,7 @@ if ($conf->use_javascript_ajax) { $boxgraph .= ''; $boxgraph .= ''.$langs->trans("Total").''; - - $boxgraph .= $SumToValidate + $SumValidated + $SumUpToDate + $SumResiliated + $SumExcluded; + $boxgraph .= $SumToValidate + $SumValidated + $SumUpToDate + $SumExcluded + $SumResiliated; $boxgraph .= ''; $boxgraph .= ''; $boxgraph .= ''; @@ -481,27 +479,27 @@ print ''.$langs->trans("MembersTypes").''; print ''.$langs->trans("MembersStatusToValid").''; print ''.$langs->trans("OutOfDate").''; print ''.$langs->trans("UpToDate").''; -print ''.$langs->trans("MembersStatusResiliated").''; print ''.$langs->trans("MembersStatusExcluded").''; +print ''.$langs->trans("MembersStatusResiliated").''; print "\n"; foreach ($AdherentType as $key => $adhtype) { print ''; print ''.$adhtype->getNomUrl(1, dol_size(32)).''; print ''.(isset($MembersToValidate[$key]) && $MembersToValidate[$key] > 0 ? $MembersToValidate[$key] : '').' '.$staticmember->LibStatut(-1, $adhtype->subscription, 0, 3).''; - print ''.(isset($MembersValidated[$key]) && ($MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) > 0) ? $MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) : '').' '.$staticmember->LibStatut(1, $adhtype->subscription, 0, 3).''; - print ''.(isset($MembersUpToDate[$key]) && $MembersUpToDate[$key] > 0 ? $MembersUpToDate[$key] : '').' '.$staticmember->LibStatut(1, $adhtype->subscription, $now, 3).''; - print ''.(isset($MembersResiliated[$key]) && $MembersResiliated[$key] > 0 ? $MembersResiliated[$key] : '').' '.$staticmember->LibStatut(0, $adhtype->subscription, 0, 3).''; + print ''.(isset($MembersValidated[$key]) && ($MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) > 0) ? $MembersValidated[$key] - (isset($MembersUpToDate[$key]) ? $MembersUpToDate[$key] : 0) : '').' '.$staticmember->LibStatut(1, 1, 0, 3).''; + print ''.(isset($MembersUpToDate[$key]) && $MembersUpToDate[$key] > 0 ? $MembersUpToDate[$key] : '').' '.$staticmember->LibStatut(1, $adhtype->subscription, $now+10, 3).''; print ''.(isset($MembersExcluded[$key]) && $MembersExcluded[$key] > 0 ? $MembersExcluded[$key] : '').' '.$staticmember->LibStatut(-2, $adhtype->subscription, 0, 3).''; + print ''.(isset($MembersResiliated[$key]) && $MembersResiliated[$key] > 0 ? $MembersResiliated[$key] : '').' '.$staticmember->LibStatut(0, $adhtype->subscription, 0, 3).''; print "\n"; } print ''; print ''.$langs->trans("Total").''; -print ''.$SumToValidate.' '.$staticmember->LibStatut(-1, $adhtype->subscription, 0, 3).''; -print ''.$SumValidated.' '.$staticmember->LibStatut(1, $adhtype->subscription, 0, 3).''; -print ''.$SumUpToDate.' '.$staticmember->LibStatut(1, $adhtype->subscription, $now, 3).''; -print ''.$SumResiliated.' '.$staticmember->LibStatut(0, $adhtype->subscription, 0, 3).''; -print ''.$SumExcluded.' '.$staticmember->LibStatut(-2, $adhtype->subscription, 0, 3).''; +print ''.$SumToValidate.' '.$staticmember->LibStatut(-1, 1, 0, 3).''; +print ''.$SumValidated.' '.$staticmember->LibStatut(1, 1, 0, 3).''; +print ''.$SumUpToDate.' '.$staticmember->LibStatut(1, 1, $now+10, 3).''; +print ''.$SumExcluded.' '.$staticmember->LibStatut(-2, 1, 0, 3).''; +print ''.$SumResiliated.' '.$staticmember->LibStatut(0, 1, 0, 3).''; print ''; print "\n"; diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index 5812248b129..31d0790b331 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -21,10 +21,12 @@ MembersListToValid=List of draft members (to be validated) MembersListValid=List of valid members MembersListUpToDate=List of valid members with up-to-date subscription MembersListNotUpToDate=List of valid members with out-of-date subscription +MembersListExcluded=List of excluded members MembersListResiliated=List of terminated members MembersListQualified=List of qualified members MenuMembersToValidate=Draft members MenuMembersValidated=Validated members +MenuMembersExcluded=Excluded members MenuMembersResiliated=Terminated members MembersWithSubscriptionToReceive=Members with subscription to receive MembersWithSubscriptionToReceiveShort=Subscription to receive @@ -47,9 +49,12 @@ MemberStatusActiveLate=Subscription expired MemberStatusActiveLateShort=Expired MemberStatusPaid=Subscription up to date MemberStatusPaidShort=Up to date +MemberStatusExcluded=Excluded member +MemberStatusExcludedShort=Excluded MemberStatusResiliated=Terminated member MemberStatusResiliatedShort=Terminated MembersStatusToValid=Draft members +MembersStatusExcluded=Excluded members MembersStatusResiliated=Terminated members MemberStatusNoSubscription=Validated (no subscription needed) MemberStatusNoSubscriptionShort=Validated @@ -82,6 +87,8 @@ Physical=Physical Moral=Moral MorAndPhy=Moral and Physical Reenable=Reenable +ExcludeMember=Exclude a member +ConfirmExcludeMember=Are you sure you want to exclude this member ? ResiliateMember=Terminate a member ConfirmResiliateMember=Are you sure you want to terminate this member? DeleteMember=Delete a member