Skip to content

Commit

Permalink
proposed fix for #8 (join_date only for first membership)
Browse files Browse the repository at this point in the history
  • Loading branch information
bjendres committed Oct 31, 2016
1 parent 76201f9 commit 5ba7a6d
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions api/v3/MembershipPayment/Synchronize.php
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,9 @@ function _membership_payment_synchronize($financial_type_id, $membership_type_id
$contribution_id = $new_payments->contribution_id;
$date = date('Ymdhis', strtotime($new_payments->contribution_date));

// add a subquery for the oldest membership ID
$oldest_membership_id = "(SELECT MIN(id) FROM civicrm_membership WHERE contact_id = $contact_id AND membership_type_id IN ($membership_type_id_list))";

// now, try to find a valid membership
// TODO: optimize by building a membership list in memory instead of individual queries?
$find_corresponding_membership_sql = "
Expand All @@ -126,8 +129,8 @@ function _membership_payment_synchronize($financial_type_id, $membership_type_id
WHERE
contact_id = $contact_id
AND membership_type_id IN ($membership_type_id_list)
AND ((start_date <= (DATE('$date') + INTERVAL $rangeback DAY)) OR (join_date <= (DATE('$date') + INTERVAL $rangeback DAY)))
AND ((end_date > (DATE('$date') - INTERVAL $gracedays DAY)) OR (end_date IS NULL))
AND ((start_date <= (DATE('{$date}') + INTERVAL {$rangeback} DAY)) OR (civicrm_membership.id = {$oldest_membership_id} AND join_date <= (DATE('{$date}') + INTERVAL {$rangeback} DAY)))
AND ((end_date > (DATE('{$date}') - INTERVAL {$gracedays} DAY)) OR (end_date IS NULL))
GROUP BY
civicrm_membership.contact_id;
";
Expand Down

0 comments on commit 5ba7a6d

Please sign in to comment.