Eileen has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/401819 )
Change subject: WIP Citibank import
......................................................................
WIP Citibank import
Add Citibank import. Some things to think about....
1) I chose the existing payment instrument 'Citibank International'
(which had only about 10 existing contributions)
2) From the csv provided it appears most are Organizations but
a few are Individuals maybe and it's not clear how to identify those
from the code
3) There is relatively little data about each transaction. I have mapped:
'Account Name' => 'gateway_account',
'Global Reference Number' => 'gateway_txn_id',
'Amount' => 'gross',
'Date Posted' => 'settlement_date',
'Date Received' => 'date',
'Originator Name' => 'organization_name',
4) Special instructions Line 1 contains some data which might be marginally
useful?
I have not mapped at this stage
5) I have mapped Date posted to 'settlement_date' & Date Received to 'date' - is
this right? I didn't use time received. SHould I?
6) I have used the following defaults (from JP Morgan) are they correct?
'contact_type' => 'Organization',
'contact_source' => 'citibank import',
'gateway' => 'citibank',
'gift_source' => 'Community Gift',
'no_thank_you' => 'No Contact Details',
'payment_instrument' => 'Citibank International',
'restrictions' => 'Unrestricted - General',
'currency' => 'USD',
Change-Id: Ib9aa8c630249d1e398871ccd07424cdcde947afd
---
A sites/all/modules/offline2civicrm/CitibankFile.php
M sites/all/modules/offline2civicrm/offline2civicrm.info
M sites/all/modules/offline2civicrm/offline2civicrm.module
A sites/all/modules/offline2civicrm/tests/CitibankFileTest.php
A sites/all/modules/offline2civicrm/tests/data/citibank.csv
M sites/all/modules/offline2civicrm/tests/includes/BaseChecksFileTest.php
6 files changed, 120 insertions(+), 4 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/crm
refs/changes/19/401819/1
diff --git a/sites/all/modules/offline2civicrm/CitibankFile.php
b/sites/all/modules/offline2civicrm/CitibankFile.php
new file mode 100644
index 0000000..9ea2385
--- /dev/null
+++ b/sites/all/modules/offline2civicrm/CitibankFile.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Class CitibankFile
+ *
+ * Imports Citibank csv.
+ */
+class CitibankFile extends ChecksFile {
+
+ protected function getRequiredColumns() {
+ return array(
+ 'Date Received',
+ 'Date Posted',
+ 'Amount',
+ 'Originator Name',
+ 'Global Reference Number',
+ );
+ }
+
+ protected function getRequiredData() {
+ return parent::getRequiredData() + array(
+ 'gateway_txn_id',
+ );
+ }
+
+ protected function getFieldMapping() {
+ return array(
+ 'Account Name' => 'gateway_account',
+ 'Global Reference Number' => 'gateway_txn_id',
+ 'Amount' => 'gross',
+ 'Date Posted' => 'settlement_date',
+ 'Date Received' => 'date',
+ 'Originator Name' => 'organization_name',
+ // Should we map this anywhere - not super informative but?
+ //'Special Instructions Line 1' => 'source',
+ );
+ }
+
+ protected function getDatetimeFields() {
+ return array(
+ 'date',
+ 'settlement_date',
+ );
+ }
+
+ protected function mungeMessage(&$msg) {
+ parent::mungeMessage($msg);
+ if (substr($msg['organization_name'], 0, 2) == '1/') {
+ // For reasons that are unclear sometimes this string appears at the
start of the Originator Name field.
+ $msg['organization_name'] = substr($msg['organization_name'], 2);
+ }
+
+ }
+
+ protected function getDefaultValues() {
+ return array_merge(parent::getDefaultValues(), array(
+ 'contact_type' => 'Organization',
+ 'contact_source' => 'citibank import',
+ 'gateway' => 'citibank',
+ 'gift_source' => 'Community Gift',
+ 'no_thank_you' => 'No Contact Details',
+ 'payment_instrument' => 'Citibank International',
+ 'restrictions' => 'Unrestricted - General',
+ 'currency' => 'USD',
+ ));
+ }
+
+}
diff --git a/sites/all/modules/offline2civicrm/offline2civicrm.info
b/sites/all/modules/offline2civicrm/offline2civicrm.info
index 058cd03..473e1ed 100644
--- a/sites/all/modules/offline2civicrm/offline2civicrm.info
+++ b/sites/all/modules/offline2civicrm/offline2civicrm.info
@@ -19,6 +19,7 @@
files[] = IgnoredRowException.php
files[] = JpMorganFile.php
files[] = BenevityFile.php
+files[] = CitibankFile.php
files[] = PayPalChecksFile.php
files[] = RefundFile.php
files[] = SquareFile.php
diff --git a/sites/all/modules/offline2civicrm/offline2civicrm.module
b/sites/all/modules/offline2civicrm/offline2civicrm.module
index ed491c3..a286eb1 100644
--- a/sites/all/modules/offline2civicrm/offline2civicrm.module
+++ b/sites/all/modules/offline2civicrm/offline2civicrm.module
@@ -107,6 +107,7 @@
'#default_value' => 'generic_ind',
'#options' => array(
'benevity' => t('Benevity'),
+ 'citibank' => t('Citibank'),
'engage' => t('Engage'),
'coinbase' => t('Coinbase Merchant Orders'),
'foreign_checks' => t('Foreign Checks'),
@@ -183,6 +184,10 @@
$importer = new BenevityFile($file->uri);
break;
+ case 'citibank':
+ $importer = new CitibankFile($file->uri);
+ break;
+
case 'paypal':
$importer = new PayPalChecksFile($file->uri);
break;
diff --git a/sites/all/modules/offline2civicrm/tests/CitibankFileTest.php
b/sites/all/modules/offline2civicrm/tests/CitibankFileTest.php
new file mode 100644
index 0000000..222a66c
--- /dev/null
+++ b/sites/all/modules/offline2civicrm/tests/CitibankFileTest.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * @group Import
+ * @group Offline2Civicrm
+ */
+class CitibankFileTest extends BaseChecksFileTest {
+
+ function setUp() {
+ parent::setUp();
+ $this->trxn_ids = array('S1234123445401', 'F123412349E701');
+ $this->gateway = 'citibank';
+ }
+
+ /**
+ * Test basic import.
+ */
+ function testImport() {
+ civicrm_initialize();
+
+ $importer = new CitibankFile(__DIR__ . "/data/citibank.csv");
+ $messages = $importer->import();
+ $this->assertEquals('All rows were imported', $messages['Result']);
+ $contribution =
wmf_civicrm_get_contributions_from_gateway_id($this->gateway,
$this->trxn_ids[0])[0];
+ $this->assertEquals('284620.85', $contribution['total_amount']);
+ $this->assertEquals('USD', $contribution['currency']);
+
+ $contact = $this->callAPISuccessGetSingle('Contact', array('id' =>
$contribution['contact_id']));
+ $this->assertEquals('Organization Name', $contact['display_name']);
+ $this->assertEquals('Organization', $contact['contact_type']);
+ }
+
+}
diff --git a/sites/all/modules/offline2civicrm/tests/data/citibank.csv
b/sites/all/modules/offline2civicrm/tests/data/citibank.csv
new file mode 100644
index 0000000..9d4c0cb
--- /dev/null
+++ b/sites/all/modules/offline2civicrm/tests/data/citibank.csv
@@ -0,0 +1,3 @@
+Beneficiary Account,Beneficiary Name,Amount,Date Posted,Date Received,Time
Received,Originator Name,Sending Bank,Special Instructions Line 1,Special
Instructions Line 2,Special Instructions Line 3,Special Instructions Line
4,Special Instructions Line 5,Fed Reference Number,Global Reference Number
+123412340,WIKIMEDIA FOUNDATION INC,284620.85,09/27/17,09/27/17,04:59:47
AM,1/Organization Name,Bank name,TRANSFER OF COLLECTION PROCEEDS WEEK 38FR
RPTNO. 38FR-2017-1234,,,,#NAME?,1.23E+12,S1234123445401
+123412340,WIKIMEDIA FOUNDATION INC,89.65,09/27/17,09/27/17,05:03:31 AM,Another
org,INTL FCSTONE LTD,DONATION FROM UK ONLINE GIVING FOUNDATION,,,,-- ORIGINATOR
INFORMATION: 17145,20171234B6B7HU2R12341234123427B1Q8021R123435,F123412349E701
diff --git
a/sites/all/modules/offline2civicrm/tests/includes/BaseChecksFileTest.php
b/sites/all/modules/offline2civicrm/tests/includes/BaseChecksFileTest.php
index d69e203..ea97ec8 100644
--- a/sites/all/modules/offline2civicrm/tests/includes/BaseChecksFileTest.php
+++ b/sites/all/modules/offline2civicrm/tests/includes/BaseChecksFileTest.php
@@ -57,12 +57,18 @@
* Clean up transactions from previous test runs.
*/
function doCleanUp() {
+ $contributions = array();
if ($this->trxn_id) {
$contributions =
wmf_civicrm_get_contributions_from_gateway_id($this->gateway, $this->trxn_id);
- if ($contributions) {
- foreach ($contributions as $contribution) {
- $this->callAPISuccess('Contribution', 'delete', array('id' =>
$contribution['id']));
- }
+ }
+ elseif (!empty($this->trxn_ids)) {
+ foreach ($this->trxn_ids as $trxn_id) {
+ $contributions = array_merge($contributions,
wmf_civicrm_get_contributions_from_gateway_id($this->gateway, $trxn_id));
+ }
+ }
+ if ($contributions) {
+ foreach ($contributions as $contribution) {
+ $this->callAPISuccess('Contribution', 'delete', array('id' =>
$contribution['id']));
}
}
$this->doMouseHunt();
--
To view, visit https://gerrit.wikimedia.org/r/401819
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib9aa8c630249d1e398871ccd07424cdcde947afd
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/crm
Gerrit-Branch: master
Gerrit-Owner: Eileen <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits