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

Reply via email to