eerste run betalingen
This commit is contained in:
parent
6845750220
commit
07d95daf72
|
@ -394,4 +394,27 @@ class CRM_Bij1migratie_Bij1MigratieService {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method om betalingsmethode te vertalen
|
||||
*
|
||||
* @param string $betalingsinstrument
|
||||
* @return null
|
||||
*/
|
||||
public function haalBetalingsinstrument(string $betalingsinstrument) {
|
||||
switch ($betalingsinstrument) {
|
||||
case "first":
|
||||
return $this->_frstPaymentId;
|
||||
break;
|
||||
case "oneoff":
|
||||
return $this->_ooffPaymentId;
|
||||
break;
|
||||
case "recurring":
|
||||
return $this->_rcurPaymentId;
|
||||
break;
|
||||
default:
|
||||
return $this->_eftPaymentId;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,38 +13,69 @@ class CRM_Bij1migratie_Contact {
|
|||
/**
|
||||
* Method om contact ID op te halen met mollie customer id
|
||||
*
|
||||
* @param $data
|
||||
* @param string $mollieCustomerId
|
||||
* @return false|string
|
||||
*/
|
||||
public function haalContactIdMetMollieCustomerId($data) {
|
||||
if (isset($data['mollie_customer_id']) && !empty($data['mollie_customer_id'])) {
|
||||
public function haalContactIdMetMollieCustomerId(string $mollieCustomerId) {
|
||||
if (!empty($mollieCustomerId)) {
|
||||
$identifierType = Civi::service('bij1Algemeen')->getMollieCustomerIdIdentityType();
|
||||
if ($identifierType) {
|
||||
$query = "SELECT entity_id FROM civicrm_value_contact_id_history WHERE identifier_type = %1 AND identifier = %2";
|
||||
$contactId = (int) CRM_Core_DAO::singleValueQuery($query, [
|
||||
$contactId = CRM_Core_DAO::singleValueQuery($query, [
|
||||
1 => [$identifierType, "String"],
|
||||
2 => [$data['mollie_customer_id'], "String"],
|
||||
2 => [$mollieCustomerId, "String"],
|
||||
]);
|
||||
if ($contactId) {
|
||||
// alleen als email gelijk of als naam gelijk indien geen email
|
||||
if (isset($data['email']) && !empty($data['email'])) {
|
||||
$email = CRM_Core_DAO::executeQuery("SELECT email FROM civicrm_email WHERE contact_id = %1", [1 => [$contactId, "Integer"]]);
|
||||
while ($email->fetch()) {
|
||||
if (isset($email->email) && !empty($email->email) && $email->email != $data['email']) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
$lastName = CRM_Core_DAO::singleValueQuery("SELECT last_name FROM civicrm_contact WHERE id = %1", [1 => [$contactId, "Integer"]]);
|
||||
if ($lastName != $data['achternaam']) {
|
||||
return FALSE;
|
||||
}
|
||||
return $contactId;
|
||||
return (int) $contactId;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method om contact met email op te zoeken
|
||||
*
|
||||
* @param $email
|
||||
* @return false|int
|
||||
* @throws API_Exception
|
||||
*/
|
||||
public function haalContactIdMetEmail($email) {
|
||||
if (!empty($email)) {
|
||||
$contactId = NULL;
|
||||
$count = CRM_Core_DAO::singleValueQuery("SELECT COUNT(DISTINCT(contact_id)) FROM civicrm_email WHERE email = %1", [1 => [$email, "String"]]);
|
||||
if ($count > 1) {
|
||||
$datum = new DateTime();
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', "n.v.t.")
|
||||
->addValue('migratiedatum', $datum->format("y-m-d"))
|
||||
->addValue('type_migratie', "B")
|
||||
->addValue('type_melding', 'waarschuwing')
|
||||
->addValue('melding', 'Waarschuwing, meerdere contacten met email: ' . $email . ', betaling aan eerste toegekend. Nakijken!')
|
||||
->execute();
|
||||
$query = "SELECT contact_id FROM civicrm_email WHERE email = %1 LIMIT 1";
|
||||
$contactId = CRM_Core_DAO::singleValueQuery($query, [1 => [$email, "String"]]);
|
||||
}
|
||||
if ($count == 1) {
|
||||
$query = "SELECT contact_id FROM civicrm_email WHERE email = %1";
|
||||
$contactId = CRM_Core_DAO::singleValueQuery($query, [1 => [$email, "String"]]);
|
||||
}
|
||||
if ($contactId) {
|
||||
return (int) $contactId;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method om klant te halen of te maken via de contacten migratie form processor
|
||||
*
|
||||
* @param array $data
|
||||
* @param DateTime $migratieDatum
|
||||
* @return false|int
|
||||
* @throws API_Exception
|
||||
* @throws \Civi\API\Exception\UnauthorizedException
|
||||
*/
|
||||
public function haalOfMaak(array $data, DateTime $migratieDatum) {
|
||||
try {
|
||||
$result = civicrm_api3('FormProcessor', 'bij1_contacten_migratie', $data);
|
||||
|
|
|
@ -242,26 +242,32 @@ class CRM_Bij1migratie_CsvFile {
|
|||
$data[$name] = $data[4];
|
||||
}
|
||||
break;
|
||||
case "status":
|
||||
$data[$name] = $data[5];
|
||||
break;
|
||||
case "betalingsinstrument":
|
||||
if (!empty($data[5])) {
|
||||
$data[$name] = $data[5];
|
||||
if (!empty($data[6])) {
|
||||
$data[$name] = Civi::service('bij1Migratie')->haalBetalingsinstrument($data[6]);
|
||||
}
|
||||
break;
|
||||
case "mollie_customer_id":
|
||||
$data[$name] = $data[6];
|
||||
break;
|
||||
case "bedrag":
|
||||
$data[$name] = $data[7];
|
||||
break;
|
||||
case "munteenheid":
|
||||
case "mandaat":
|
||||
$data[$name] = $data[8];
|
||||
break;
|
||||
case "klant":
|
||||
case "bedrag":
|
||||
$data[$name] = $data[9];
|
||||
break;
|
||||
case "email":
|
||||
case "munteenheid":
|
||||
$data[$name] = $data[10];
|
||||
break;
|
||||
case "klant":
|
||||
$data[$name] = $data[11];
|
||||
break;
|
||||
case "email":
|
||||
$data[$name] = $data[12];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@ class CRM_Bij1migratie_Migratie {
|
|||
*
|
||||
* @param string $migratieType
|
||||
* @param string $tableName
|
||||
* @throws
|
||||
*/
|
||||
public static function migreer(string $migratieType, string $tableName) {
|
||||
set_time_limit(0);
|
||||
|
@ -20,56 +19,16 @@ class CRM_Bij1migratie_Migratie {
|
|||
if ($data) {
|
||||
foreach ($data as $rij) {
|
||||
if (!empty($rij)) {
|
||||
try {
|
||||
switch ($migratieType) {
|
||||
case "A":
|
||||
$contact = new CRM_Bij1migratie_Contact();
|
||||
$rij['locatietype'] = Civi::service('bij1Algemeen')->getDefaultLocationTypeId();
|
||||
// eerst beoordelen of het contact gevonden kan worden met Mollie Customer Id
|
||||
$contactId = $contact->haalContactIdMetMollieCustomerId($rij);
|
||||
// als niks gevonden gebruik Form Processor om contact te vinden of te maken
|
||||
if (!$contactId) {
|
||||
$contactId = $contact->haalOfMaak($rij, $migratieDatum);
|
||||
}
|
||||
if ($contactId) {
|
||||
$rij['contact_id'] = $contactId;
|
||||
// verwerk de rest (email, adres, telefoon, notities, groepen, lidnummer, inschrijfdatum via Form Processor
|
||||
$result = civicrm_api3('FormProcessor', 'bij1_airtable_migratie', $rij);
|
||||
// voeg bankrekening toe indien van toepassing
|
||||
if (isset($rij['iban']) && !empty($rij['iban'])) {
|
||||
self::maakBankrekening($migratieDatum, $contactId, $rij['iban']);
|
||||
}
|
||||
// voeg identifier toe indien nodig
|
||||
if (isset($rij['mollie_customer_id']) && !empty($rij['mollie_customer_id'])) {
|
||||
self::maakMollieCustomerIdIdentifier($contactId, $rij['mollie_customer_id']);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "B":
|
||||
if (!self::bestaatBetaling($rij)) {
|
||||
}
|
||||
break;
|
||||
case "P":
|
||||
$rij['locatietype'] = Civi::service('bij1Algemeen')->getDefaultLocationTypeId();
|
||||
civicrm_api3('FormProcessor', 'bij1_contacten_migratie', $rij);
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'succes')
|
||||
->addValue('melding', 'Gemigreerd')
|
||||
->execute();
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (CiviCRM_API3_Exception $ex) {
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'fout')
|
||||
->addValue('melding', 'FOUT, melding van FormProcessor API call: ' . $ex->getMessage())
|
||||
->execute();
|
||||
switch ($migratieType) {
|
||||
case "A":
|
||||
self::migreerAirtable($migratieType, $migratieDatum, $rij);
|
||||
break;
|
||||
case "B":
|
||||
self::migreerBetaling($migratieType, $migratieDatum, $rij);
|
||||
break;
|
||||
case "P":
|
||||
self::migreerContact($migratieType, $migratieDatum, $rij);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -77,46 +36,187 @@ class CRM_Bij1migratie_Migratie {
|
|||
}
|
||||
|
||||
/**
|
||||
* Method om mollie customer id als identifier toe te voegen als die nog niet bestaat (airtable)
|
||||
* Method om betalingen te migreren
|
||||
*
|
||||
* @param int $contactId
|
||||
* @param string $mollieCustomerId
|
||||
* @param string $migratieType
|
||||
* @param DateTime $migratieDatum
|
||||
* @param array $rij
|
||||
* @throws API_Exception
|
||||
* @throws \Civi\API\Exception\UnauthorizedException
|
||||
*/
|
||||
public static function maakMollieCustomerIdIdentifier(int $contactId, string $mollieCustomerId) {
|
||||
if (!empty($contactId) && !empty($mollieCustomerId)) {
|
||||
$query = "SELECT COUNT(*) FROM civicrm_value_contact_id_history WHERE identifier_type = %1 AND entity_id = %2 AND identifier = %3";
|
||||
$queryParams = [
|
||||
1 => [Civi::service('bij1Algemeen')->getMollieCustomerIdIdentityType(), "String"],
|
||||
2 => [$contactId, "Integer"],
|
||||
3 => [$mollieCustomerId, "String"],
|
||||
];
|
||||
$count = CRM_Core_DAO::singleValueQuery($query, $queryParams);
|
||||
if ($count == 0) {
|
||||
$insert = "INSERT INTO civicrm_value_contact_id_history (entity_id, identifier_type, identifier) VALUES(%2, %1, %3)";
|
||||
CRM_Core_DAO::executeQuery($insert, $queryParams);
|
||||
private static function migreerBetaling(string $migratieType, DateTime $migratieDatum, array $rij) {
|
||||
$mollieCustomerId = NULL;
|
||||
$email = NULL;
|
||||
// alleen als paid of pending
|
||||
if ($rij['status'] == "paid" || $rij['status'] == "pending") {
|
||||
if (isset($rij['mollie_customer_id']) && !empty($rij['mollie_customer_id'])) {
|
||||
$mollieCustomerId = trim($rij['mollie_customer_id']);
|
||||
}
|
||||
if (isset($rij['email']) && !empty($rij['email'])) {
|
||||
$email = $rij['email'];
|
||||
}
|
||||
if ($mollieCustomerId || $email) {
|
||||
$contact = new CRM_Bij1migratie_Contact();
|
||||
$contactId = $contact->haalContactIdMetMollieCustomerId($rij['mollie_customer_id']);
|
||||
if (!$contactId && isset($rij['email']) && !empty($rij['email'])) {
|
||||
$contactId = $contact->haalContactIdMetEmail($rij['email']);
|
||||
}
|
||||
if ($contactId) {
|
||||
if ($rij['status'] == "paid") {
|
||||
$rij['status'] = Civi::service('bij1Migratie')->getCompletedContributionStatusId();
|
||||
} else {
|
||||
$rij['status'] = Civi::service('bij1Migratie')->getPendingContributionStatusId();
|
||||
}
|
||||
if (!self::bestaatBetaling($contactId, $rij)) {
|
||||
try {
|
||||
$bijdrage = \Civi\Api4\Contribution::create()
|
||||
->addValue('contact_id', $contactId)
|
||||
->addValue('financial_type_id', Civi::service('bij1Migratie')->getFinancialTypeId())
|
||||
->addValue('payment_instrument_id', 11)
|
||||
->addValue('receive_date', $rij['aanmaakdatum'])
|
||||
->addValue('total_amount', $rij['bedrag'])
|
||||
->addValue('contribution_status_id', $rij['status'])
|
||||
->addValue('trxn_id', $rij['transactie_id'])
|
||||
->addValue('mollie_betaling_data.mandaat_id', $rij['mandaat'])
|
||||
->addValue('mollie_betaling_data.klantnaam', $rij['klant'])
|
||||
->addValue('mollie_betaling_data.klantemail', $rij['email']);
|
||||
if (isset($rij['betalingsdatum'])) {
|
||||
$bijdrage->addValue('receipt_date', $rij['betalingsdatum']);
|
||||
}
|
||||
$bijdrage->execute();
|
||||
} catch (API_Exception $ex) {
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'fout')
|
||||
->addValue('melding', 'FOUT, melding van API4 Contribution Create: ' . $ex->getMessage())
|
||||
->execute();
|
||||
}
|
||||
}
|
||||
else {
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'waarschuwing')
|
||||
->addValue('melding', 'Waarschuwing, betaling bestaat al dus niet gemigreerd, data: ' . json_encode($rij))
|
||||
->execute();
|
||||
}
|
||||
}
|
||||
else {
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'fout')
|
||||
->addValue('melding', 'FOUT, geen contact gevonden met mollie customer id: ' . $rij['mollie_customer_id'] . ' of met email: ' . $rij['email'])
|
||||
->execute();
|
||||
}
|
||||
}
|
||||
else {
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'fout')
|
||||
->addValue('melding', 'FOUT, geen mollie customer id of email gevonden in data: ' . json_encode($rij))
|
||||
->execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method om contact te migreren
|
||||
*
|
||||
* @param string $migratieType
|
||||
* @param DateTime $migratieDatum
|
||||
* @param $rij
|
||||
* @throws API_Exception
|
||||
*/
|
||||
private static function migreerContact(string $migratieType, DateTime $migratieDatum, $rij) {
|
||||
$rij['locatietype'] = Civi::service('bij1Algemeen')->getDefaultLocationTypeId();
|
||||
try {
|
||||
civicrm_api3('FormProcessor', 'bij1_contacten_migratie', $rij);
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'succes')
|
||||
->addValue('melding', 'Gemigreerd')
|
||||
->execute();
|
||||
}
|
||||
catch (CiviCRM_API3_Exception $ex) {
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'fout')
|
||||
->addValue('melding', 'FOUT, melding van FormProcessor bij1_contacten_migratie API call: ' . $ex->getMessage())
|
||||
->execute();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method voor migratie airtable
|
||||
*
|
||||
* @param string $migratieType
|
||||
* @param DateTime $migratieDatum
|
||||
* @param array $rij
|
||||
* @throws API_Exception
|
||||
*/
|
||||
private static function migreerAirtable(string $migratieType, DateTime $migratieDatum, array $rij) {
|
||||
$contact = new CRM_Bij1migratie_Contact();
|
||||
$rij['locatietype'] = Civi::service('bij1Algemeen')->getDefaultLocationTypeId();
|
||||
// eerst beoordelen of het contact gevonden kan worden met Mollie Customer Id
|
||||
$contactId = $contact->haalContactIdMetMollieCustomerId($rij['mollie_customer_id']);
|
||||
// als niks gevonden gebruik Form Processor om contact te vinden of te maken
|
||||
if (!$contactId) {
|
||||
$contactId = $contact->haalOfMaak($rij, $migratieDatum);
|
||||
}
|
||||
if ($contactId) {
|
||||
$rij['contact_id'] = $contactId;
|
||||
// verwerk de rest (email, adres, telefoon, notities, groepen, lidnummer, inschrijfdatum via Form Processor
|
||||
try {
|
||||
civicrm_api3('FormProcessor', 'bij1_airtable_migratie', $rij);
|
||||
// voeg bankrekening toe indien van toepassing
|
||||
if (isset($rij['iban']) && !empty($rij['iban'])) {
|
||||
self::maakBankrekening($migratieDatum, $contactId, $rij['iban']);
|
||||
}
|
||||
}
|
||||
catch (CiviCRM_API3_Exception $ex) {
|
||||
\Civi\Api4\MigratieLog::create()
|
||||
->addValue('mollie_customer_id', $rij['mollie_customer_id'])
|
||||
->addValue('migratiedatum', $migratieDatum->format("y-m-d"))
|
||||
->addValue('type_migratie', $migratieType)
|
||||
->addValue('type_melding', 'fout')
|
||||
->addValue('melding', 'FOUT, melding van FormProcessor bij1_airtable_migratie API call: ' . $ex->getMessage())
|
||||
->execute();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method om te beoordelen of gift al bestaat voor contact
|
||||
*
|
||||
* @param $betaling
|
||||
* @param int $contactId
|
||||
* @param array $betaling
|
||||
* @return bool
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function bestaatBetaling($betaling) {
|
||||
$verplichten = ["contact_id", "donatiebedrag", "donatiedatum"];
|
||||
public static function bestaatBetaling(int $contactId, array $betaling) {
|
||||
$verplichten = ["bedrag", "aanmaakdatum"];
|
||||
foreach ($verplichten as $verplicht) {
|
||||
if (!isset($gift[$verplicht]) || empty($gift[$verplicht])) {
|
||||
if (!isset($betaling[$verplicht]) || empty($betaling[$verplicht])) {
|
||||
return FALSE;
|
||||
}
|
||||
$receiveDate = new DateTime($gift['donatiedatum']);
|
||||
$receiveDate = new DateTime($betaling['aanmaakdatum']);
|
||||
$query = "SELECT COUNT(*) FROM civicrm_contribution WHERE contact_id = %1 AND receive_date = %2 AND total_amount = %3";
|
||||
$count = CRM_Core_DAO::singleValueQuery($query, [
|
||||
1 => [(int) $gift['contact_id'], "Integer"],
|
||||
1 => [$contactId, "Integer"],
|
||||
2 => [$receiveDate->format("Y-m-d"), "String"],
|
||||
3 => [$gift['donatiebedrag'], "String"],
|
||||
3 => [$betaling['bedrag'], "String"],
|
||||
]);
|
||||
if ($count > 0) {
|
||||
return TRUE;
|
||||
|
|
|
@ -48,13 +48,13 @@ class Bij1MigratieContainer implements CompilerPassInterface {
|
|||
case "EFT":
|
||||
$definition->addMethodCall("setEftPaymentId", [(int) $dao->value]);
|
||||
break;
|
||||
case "FRST":
|
||||
case "mollie_frst":
|
||||
$definition->addMethodCall("setFrstPaymentId", [(int) $dao->value]);
|
||||
break;
|
||||
case "OOFF":
|
||||
case "mollie_ooff":
|
||||
$definition->addMethodCall("setOoffPaymentId", [(int) $dao->value]);
|
||||
break;
|
||||
case "RCUR":
|
||||
case "mollie_rcur":
|
||||
$definition->addMethodCall("setRcurPaymentId", [(int) $dao->value]);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue