Skip to content

Instantly share code, notes, and snippets.

@jacques
Created April 25, 2017 09:02
Show Gist options
  • Save jacques/57c672e5e7efe1b26be65fe3adb48c91 to your computer and use it in GitHub Desktop.
Save jacques/57c672e5e7efe1b26be65fe3adb48c91 to your computer and use it in GitHub Desktop.

Revisions

  1. jacques created this gist Apr 25, 2017.
    74 changes: 74 additions & 0 deletions galaxyformat.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,74 @@
    /**
    * Exports the Standard Two-Day Debit Order Service File
    */
    $app->get('/admin/debitorders/:batch_id/exportgalaxy', $authenticate($app), $is_admin($app), function ($batch_id) use ($app, $dsns) {
    $batch = $dsns['bank']->prepare("SELECT * FROM company_debitorder_batches WHERE id=?")->execute([$batch_id])->fetchRow();
    /**
    * Only batches which have been finalised can be exported.
    */
    #if ($batch['processed_at'] == '0000-00-00 00:00:00') {
    # die ("You cannot export a batch that is still open.");
    #}
    if ($batch['type'] == 'twoday' || $batch['type'] == 'oneday') {
    $fp = fopen('/var/tmp/galaxy_debitorder_batch_' . $batch_id . '.txt', 'w');
    $iyandi_user_code = '7955';
    $header = vsprintf ("Header %04d%-30s%08d%04d\r\n", [ $iyandi_user_code, 'IMOGO', date("Ymd"), $batch_id]);
    fwrite($fp, $header);
    $efts = $dsns['bank']->prepare("SELECT * FROM company_debitorder_queue WHERE company_debitorder_batch_id=?")->execute([$batch_id])->fetchAll();
    $date_minus_2days = Carbon::now()->subDays(2);
    if ($batch['type'] == 'oneday') {
    $date_plus_2days = Carbon::createFromFormat('Y-m-d', $batch['action_date']);
    } else {
    $date_plus_2days = Carbon::createFromFormat('Y-m-d', $batch['action_date']);
    }
    $date_plus_7days = Carbon::createFromFormat('Y-m-d', $batch['action_date'])->addDays(7);
    $date_minus_2days = $date_minus_2days->format('Ymd');
    $date_plus_2days = $date_plus_2days->format('Ymd');
    $date_plus_7days = $date_plus_7days->format('Ymd');
    foreach ($efts as $eft) {
    # Deduct %04d%04d%06d%13s%-30s%-6s%-06s%10s%-30s%06d%011d%1d%8d%06d%011d%1d%8d%8d%8d%1s%-15s%-50s%013d%-10s%50s\r\n
    fwrite($fp, trim(vsprintf("Deduct %04d%04d%06d%13s%-30s%-6s%-06s%10s%-30s%06d%011d%1d%8d%06d%011d%1d%8d%8d%8d%1s%-14s%1s%-50s%013d%-10s%50s\r\n",
    [
    $iyandi_user_code, # Company Number
    null, # Company Branch Number
    null, # Company Branch Postal Code
    '9999999999999', # IMB use txn ref
    substr($eft['bank_account_holder'], 0, 30), # Last name
    substr($eft['bank_account_holder'], 0, 1), # Initials
    '000000', # Postal code - 6 characters - for the individual
    '0000000000', # Mobile Number - 10 chars max
    null, # Email Address - 30 chars max
    $eft['bank_account_branch_code'],
    $eft['bank_account_number'],
    $eft['bank_account_type'],
    $date_plus_2days,
    '000000',
    '0000000000',
    0,
    $date_minus_2days,
    $date_plus_7days,
    date("Ymd"),
    'M',
    substr('CB ' . $eft['client_customer_reference'] . ' ' . $eft['company_debitorder_batch_id'], 0, 14),
    'Z',
    substr('CASHB ' . $eft['company_debitorder_batch_id'] . ' ' . $eft['client_transaction_reference'] . ' ' . $date_plus_2days, 0, 50),
    $eft['debit_onceoff_amount'],
    ($batch['type'] == 'oneday') ? 'AbsaDirectSSVS' : 'AbsaDirectTWO DAY',
    null
    ])) . "\r\n");
    }
    $trailer = vsprintf("Trailer%09d%17s%011d\r\n", [$batch['debitorders'], null, $batch['amount']]);
    fwrite($fp, $trailer);
    fclose($fp);
    $data = file_get_contents('/var/tmp/galaxy_debitorder_batch_' . $batch_id . '.txt');
    $app->contentType('application/octet-stream');
    $app->response()->header('Pragma', 'no-cache');
    $app->response()->header('Expires', 0);
    $app->response()->header('Content-Disposition', 'attachment; filename="imogo-galaxy-debitorer-batch-' . $batch_id . '.txt"');
    $app->response()->header('Content-Transfer-Encoding', 'ascii');
    $app->response()->header('Content-Length', strlen($data));
    $app->response()->body($data);
    } else {
    die ("You can only export galaxy files for two day batches.");
    }
    });