Skip to content
Snippets Groups Projects
Commit f2e10985 authored by ErikHommel's avatar ErikHommel
Browse files

fix expired membership when extending

parent 9b2bb95f
No related branches found
No related tags found
No related merge requests found
......@@ -66,7 +66,7 @@ class ExtendMembership extends AbstractAction {
if ($contactId) {
try {
$membershipData = civicrm_api3('Membership', 'getsingle', [
'return' => ["id", "end_date"],
'return' => ["id", "end_date", 'status_id'],
'contact_id' => (int) $contactId,
'membership_type_id' => $this->configuration->getParameter('membership_type_id'),
'options' => ['sort' => "start_date DESC", 'limit' => 1],
......@@ -97,32 +97,57 @@ class ExtendMembership extends AbstractAction {
*/
private function extendMembership($membershipData, ParameterBagInterface $parameters, ParameterBagInterface $output) {
$contactId = $parameters->getParameter('contact_id');
// extend the membership by one year:
$newEndDate = strtotime('now');
$newEndDate = strtotime(date("Y-m-01"), $newEndDate);
$newEndDate = strtotime("+ 1 year", $newEndDate);
// update the membership or create
$membershipParams = [
'end_date' => date('Ymd', $newEndDate),
'membership_type_id' => $this->configuration->getParameter('membership_type_id'),
'contact_id' => $contactId,
];
try {
if ($membershipData['id']) {
$membershipParams['id'] = $membershipData['id'];
// check activity if current status already expired
if (!$this->checkExpired($membershipData['status_id'], $contactId)) {
// extend the membership by one year:
$newEndDate = strtotime('now');
$newEndDate = strtotime(date("Y-m-01"), $newEndDate);
$newEndDate = strtotime("+ 1 year", $newEndDate);
// update the membership or create
$membershipParams = [
'end_date' => date('Ymd', $newEndDate),
'membership_type_id' => $this->configuration->getParameter('membership_type_id'),
'contact_id' => $contactId,
];
try {
if ($membershipData['id']) {
$membershipParams['id'] = $membershipData['id'];
}
$created = civicrm_api3('Membership', 'create', $membershipParams);
$output->setParameter('membership_id', $created['id']);
$output->setParameter('new_end_date', date('d-m-Y', $newEndDate));
}
catch (\CiviCRM_API3_Exception $ex) {
$errorActivityData = [
'assignee_id' => $this->configuration->getParameter('error_contact_id'),
'target_id' => $contactId,
'subject' => E::ts("Fout bij het verlengen van een lidmaatschap voor contact ID ") . $contactId,
'details' => E::ts("Fout van de API Membership create: ") . $ex->getMessage(),
];
\Civi::service('aivlgeneric')->createToCheckActivity($errorActivityData);
}
$created = civicrm_api3('Membership', 'create', $membershipParams);
$output->setParameter('membership_id', $created['id']);
$output->setParameter('new_end_date', date('d-m-Y', $newEndDate));
}
catch (\CiviCRM_API3_Exception $ex) {
}
/**
* Method to check if membership already expired
*
* @param $statusId
* @param $contactId
* @return false
*/
private function checkExpired($statusId, $contactId) {
if ((int) $statusId == \Civi::service('aivlgeneric')->getExpiredMembershipStatusId()) {
$errorActivityData = [
'assignee_id' => $this->configuration->getParameter('error_contact_id'),
'subject' => E::ts("Fout bij het verlengen van een lidmaatschap voor contact ID ") . $contactId,
'details' => E::ts("Fout van de API Membership create: ") . $ex->getMessage(),
'target_id' => $contactId,
'subject' => E::ts("Fout bij verlengen lidmaatschap: is al verlopen voor ") . $contactId,
'details' => E::ts("Lidmaatschap is al verlopen, pas handmatig aan indien nodig."),
];
\Civi::service('aivlgeneric')->createToCheckActivity($errorActivityData);
return TRUE;
}
return FALSE;
}
/**
......
......@@ -15,7 +15,7 @@
<url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url>
</urls>
<releaseDate>2020-12-17</releaseDate>
<version>1.10</version>
<version>1.11</version>
<develStage>beta</develStage>
<compatibility>
<ver>4.7</ver>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment