jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/397716 )

Change subject: Add stripe import
......................................................................


Add stripe import

At this stage an exception is thrown if non-USD currencies are in use and 
utm_campaign column is respected
if set, ditto utm_medium with a default of MGEventEmail

There is a desire for currency support & I think that might be the case for 
another import too.
I also feel there is a desire for being able to set an import-wide default for 
a field. I've left these
out of this iteration.

Bug: T172423

Change-Id: I63a85f352caec1d695724a9b1dd1129f9a29781c
---
A sites/all/modules/offline2civicrm/StripeFile.php
M sites/all/modules/offline2civicrm/offline2civicrm.info
M sites/all/modules/offline2civicrm/offline2civicrm.module
A sites/all/modules/offline2civicrm/tests/StripeFileTest.php
A sites/all/modules/offline2civicrm/tests/data/stripe.csv
5 files changed, 184 insertions(+), 0 deletions(-)

Approvals:
  jenkins-bot: Verified
  Ejegg: Looks good to me, approved



diff --git a/sites/all/modules/offline2civicrm/StripeFile.php 
b/sites/all/modules/offline2civicrm/StripeFile.php
new file mode 100644
index 0000000..49b9f03
--- /dev/null
+++ b/sites/all/modules/offline2civicrm/StripeFile.php
@@ -0,0 +1,119 @@
+<?php
+
+class StripeFile extends ChecksFile {
+  protected function getRequiredColumns() {
+    return array(
+      'Created (UTC)',
+      'Card Name',
+      'Converted Amount',
+      'id',
+    );
+  }
+
+  /**
+   * Do any final transformation on a normalized and default-laden queue 
message.
+   *
+   * @param array $msg
+   *
+   * @throws \WmfException
+   */
+  protected function mungeMessage(&$msg) {
+    list($msg['first_name'], $msg['last_name']) = 
wmf_civicrm_janky_split_name( $msg['full_name'] );
+    $msg['currency'] = strtoupper($msg['currency']);
+    $msg['original_currency'] = strtoupper($msg['original_currency']);
+    parent::mungeMessage($msg);
+  }
+
+  protected function getFieldMapping() {
+    return array(
+      // Is this correct? - maps to gateway_refund_id' on refund?
+      'id' => 'gateway_txn_id',
+      'utm_source' => 'utm_source',
+      'utm_campaign' => 'utm_campaign',
+      'utm_medium' => 'utm_medium',
+      'Card Address Line1' => 'street_address',
+      'Card Address Line2' => 'supplemental_address_1',
+      'Card Address City' => 'city',
+      'Converted Amount' => 'gross',
+      'Amount' => 'original_gross',
+      'Created (UTC)' => 'date',
+      'Customer Email' => 'email',
+      'Converted Currency' => 'currency',
+      'Currency' => 'original_currency',
+      'Card Name' => 'full_name',
+      'Card Address State' => 'state_province',
+      'Card Address Zip' => 'postal_code',
+      'Card Address Country' => 'country',
+
+
+      //id,
+      //Description,
+      //Amount ,,
+      //Amount Refunded,
+      //Currency,
+      //Converted Amount Refunded,Fee,
+      //Tax,
+      //Converted Currency,
+      //Mode,
+      //Status,
+      //Statement Descriptor,
+      //Customer ID,
+      //Customer Description,,
+      //Captured,Card ID,
+      //Card Last4,
+      //Card Brand,
+      //Card Funding,
+      //Card Exp Month,
+      //Card Exp Year,
+      //Card Issue Country,
+      //Card Fingerprint,
+      //Card CVC Status,
+      //Card AVS Zip Status,
+      //Card AVS Line1 Status,
+      //Card Tokenization Method,
+      //Disputed Amount,
+      //Dispute Status,
+      //Dispute Reason,
+      //Dispute Date (UTC),
+      //Dispute Evidence Due (UTC)
+      //Invoice ID,
+      //Payment Source Type,
+      //Destination,
+      //Transfer,
+      //Transfer Group,
+      //event_id (metadata),
+      //event_name (metadata),
+      //order_number (metadata)
+    );
+  }
+
+  protected function getDefaultValues() {
+    return array_merge(parent::getDefaultValues(), array(
+        'gateway' => 'stripe',
+        'no_thank_you' => 'stripe',
+        'payment_instrument' => 'Stripe',
+        'payment_method' => 'Stripe',
+        'utm_medium' => 'MGEventEmail',
+        'contact_source' => 'Stripe import',
+      )
+    );
+  }
+
+  /**
+   * Read a row and transform into normalized queue message form
+   *
+   * @param $data
+   *
+   * @return array queue message format
+   *
+   * @throws \EmptyRowException
+   * @throws \WmfException
+   */
+  protected function parseRow($data) {
+    if (!empty($data['Converted Amount Refunded'])) {
+      throw new WmfException(WmfException::INVALID_MESSAGE, 'Refunds not 
currently handled. Please log a Phab if required');
+    }
+    return parent::parseRow($data);
+  }
+
+}
diff --git a/sites/all/modules/offline2civicrm/offline2civicrm.info 
b/sites/all/modules/offline2civicrm/offline2civicrm.info
index 4a49a4f..967c081 100644
--- a/sites/all/modules/offline2civicrm/offline2civicrm.info
+++ b/sites/all/modules/offline2civicrm/offline2civicrm.info
@@ -22,6 +22,7 @@
 files[] = PayPalChecksFile.php
 files[] = RefundFile.php
 files[] = SquareFile.php
+files[] = StripeFile.php
 files[] = TrilogyFile.php
 files[] = WmfImportFile.php
 files[] = WmfOrgImportFile.php
diff --git a/sites/all/modules/offline2civicrm/offline2civicrm.module 
b/sites/all/modules/offline2civicrm/offline2civicrm.module
index 71cb137..ed491c3 100644
--- a/sites/all/modules/offline2civicrm/offline2civicrm.module
+++ b/sites/all/modules/offline2civicrm/offline2civicrm.module
@@ -115,6 +115,7 @@
       'jpmorgan' => t('JP Morgan'),
       'paypal' => t('PayPal EFT'),
       'square' => t('Square'),
+      'stripe' => t('Stripe'),
       'trilogy' => t('Trilogy'),
     ),
   );
@@ -194,6 +195,11 @@
         case 'square':
           $importer = new SquareFile($file->uri);
           break;
+
+        case 'stripe':
+          $importer = new StripeFile($file->uri);
+          break;
+
         case 'trilogy':
           $importer = new TrilogyFile($file->uri);
           break;
diff --git a/sites/all/modules/offline2civicrm/tests/StripeFileTest.php 
b/sites/all/modules/offline2civicrm/tests/StripeFileTest.php
new file mode 100644
index 0000000..b05630a
--- /dev/null
+++ b/sites/all/modules/offline2civicrm/tests/StripeFileTest.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * @group Import
+ * @group Offline2Civicrm
+ */
+class StripeTest extends BaseChecksFileTest {
+
+  function setUp() {
+    parent::setUp();
+    $this->gateway = 'stripe';
+  }
+
+  /**
+   * Test basic import.
+   */
+  function testImport() {
+    civicrm_initialize();
+
+    $importer = new StripeFile(__DIR__ . "/data/stripe.csv");
+    $messages = $importer->import();
+    $this->assertEquals('2 out of 3 rows were imported.', $messages['Result']);
+    $firstGateWayID = 'ch_1Al1231231231231231231123';
+    $contribution = 
wmf_civicrm_get_contributions_from_gateway_id($this->gateway, $firstGateWayID);
+    $this->assertEquals(1, count($contribution));
+    $this->assertEquals('STRIPE CH_1AL1231231231231231231123', 
$contribution[0]['trxn_id']);
+    $this->assertEquals('500', $contribution[0]['total_amount']);
+    $this->assertEquals('USD', $contribution[0]['currency']);
+    $this->assertEquals('big campaign', db_query("SELECT {utm_campaign} from 
{contribution_tracking} WHERE contribution_id = 
{$contribution[0]['id']}")->fetchField());
+
+    $contact = $this->callAPISuccessGetSingle('Contact', array('id' => 
$contribution[0]['contact_id'], 'return' => array(
+      'first_name',
+      'last_name',
+      'contact_source',
+    )));
+    $this->assertEquals('Charles', $contact['first_name']);
+    $this->assertEquals('Darwin', $contact['last_name']);
+    $this->assertEquals('Stripe import', $contact['contact_source']);
+
+    $contribution2 = 
wmf_civicrm_get_contributions_from_gateway_id($this->gateway, 
'ch_1Bl1231231231231231231123');
+    $contribution2 = $contribution2[0];
+    $this->assertEquals(1000, $contribution2['original_amount']);
+    $this->assertEquals('GBP', $contribution2['original_currency']);
+    $this->assertEquals('USD', $contribution2['currency']);
+    $this->assertEquals(1500, $contribution2['total_amount']);
+    $this->assertEquals('GBP 1000', $contribution2['source']);
+
+    $this->callAPISuccess('Contribution', 'delete', array('id' => 
$contribution[0]['id']));
+    $this->callAPISuccess('Contribution', 'delete', array('id' => 
$contribution[0]['id'] + 1));
+    $this->callAPISuccess('Contact', 'delete', array('id' => $contact['id']));
+    $this->callAPISuccess('Contact', 'delete', array('id' => $contact['id'] + 
1));
+  }
+
+}
diff --git a/sites/all/modules/offline2civicrm/tests/data/stripe.csv 
b/sites/all/modules/offline2civicrm/tests/data/stripe.csv
new file mode 100644
index 0000000..cb7826a
--- /dev/null
+++ b/sites/all/modules/offline2civicrm/tests/data/stripe.csv
@@ -0,0 +1,4 @@
+id,Description,Created (UTC),Amount,Amount Refunded,Currency,Converted 
Amount,Converted Amount Refunded,Fee ,Tax,Converted 
Currency,Mode,Status,Statement Descriptor,Customer ID,Customer 
Description,Customer Email,Captured,Card ID,Card Last4,Card Brand,Card 
Funding,Card Exp Month,Card Exp Year,Card Name,Card Address Line1,Card Address 
Line2,Card Address City,Card Address State,Card Address Country,Card Address 
Zip,Card Issue Country,Card Fingerprint,Card CVC Status,Card AVS Zip 
Status,Card AVS Line1 Status,Card Tokenization Method,Disputed Amount,Dispute 
Status,Dispute Reason,Dispute Date (UTC),Dispute Evidence Due (UTC),Invoice 
ID,Payment Source Type,Destination,Transfer,Transfer Group,event_id 
(metadata),event_name (metadata),order_number (metadata),utm_campaign
+ch_1Al1231231231231231231123,Event Tickets for Event: 3302,07/30/17 12:24 
PM,500 ,0 ,usd ,500,0 ,18.3,0 ,usd ,Live,Paid , , , , ,TRUE 
,card_1Al12312312312312323123 ,3389 ,MasterCard,credit ,6 ,2020 ,Charles 
Darwin, , , , ,US ,20910 ,US ,2SGj123123123123,pass ,pass , , , , , , , , ,card 
, , , ,3302 ,Wikipedia D.C. Fall Fundraiser,ET-LHY1231591231233123a-3302,big 
campaign
+ch_1Bl1231231231231231231123,Event Tickets for Event: 3302,07/28/17 04:04 
AM,1000 ,0 ,gbp ,1500 ,0 ,62.3,0 ,usd ,Live,Paid , , , , ,TRUE 
,card_1234234234234234234234uR,2012 ,MasterCard,credit ,9 ,2019 ,Marie Currie , 
, , , ,US ,20854 ,US ,uI234234234234vW,pass ,pass , , , , , , , , ,card , , , 
,3302 ,Wikipedia D.C. Fall Fundraiser,ET-Q2342342342342342347-3302,
+ch_1Bl12312312312888888888,Event Tickets for Event: 3302,07/28/17 04:04 AM,0 
,1000 ,usd ,0 ,1000 ,62.3,0 ,usd ,Live,Paid , , , , ,TRUE 
,card_1234234234234234234234uR,2012 ,MasterCard,credit ,9 ,2019 ,Marie Currie , 
, , , ,US ,20854 ,US ,uI234234234234vW,pass ,pass , , , , , , , , ,card , , , 
,3302 ,Wikipedia D.C. Fall Fundraiser,ET-Q2342342342342342347-3302,

-- 
To view, visit https://gerrit.wikimedia.org/r/397716
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I63a85f352caec1d695724a9b1dd1129f9a29781c
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/crm
Gerrit-Branch: deployment
Gerrit-Owner: Ejegg <ej...@ejegg.com>
Gerrit-Reviewer: Eileen <emcnaugh...@wikimedia.org>
Gerrit-Reviewer: Ejegg <ej...@ejegg.com>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to