public function fetch_report_data() { global $FANNIE_PLUGIN_SETTINGS, $FANNIE_OP_DB; $dbc = FannieDB::get($FANNIE_PLUGIN_SETTINGS['GiveUsMoneyDB']); $dt = FormLib::get('endDate', date('Y-m-d')); $dividends = new GumDividendsModel($dbc); $dividends->yearEndDate($dt); $map = new GumDividendPayoffMapModel($dbc); $check = new GumPayoffsModel($dbc); $data = array(); foreach ($dividends->find('card_no') as $dividend) { $record = array($dividend->card_no(), sprintf('%.2f', $dividend->equityAmount()), $dividend->daysHeld(), sprintf('%.2f%%', $dividend->dividendRate() * 100), sprintf('%.2f', $dividend->dividendAmount())); $checkID = false; $map->reset(); $map->gumDividendID($dividend->gumDividendID()); foreach ($map->find('gumPayoffID', true) as $obj) { $checkID = $obj->gumPayoffID(); } if (!$checkID) { $record[] = '?'; } else { $check->gumPayoffID($checkID); $check->load(); $record[] = $check->checkNumber(); } $data[] = $record; } return $data; }
/** Create an entry in GumPayoffs representing a new check @param $map_model a model for a mapping table (e.g., GumLoanPayoffMapModel) where the new gumPayoffID can be saved @param $mapped [boolean, default true] save a reference in the $map_model Set to false if simply allocating a check number for use from outside the plugin. Turning off mapping will return the check number rather than the gumPayoffID @return [int] gumPayoffID or [boolean] false on failure */ public static function allocateCheck($map_model, $mapped = true) { global $FANNIE_PLUGIN_SETTINGS; $dbc = FannieDB::get($FANNIE_PLUGIN_SETTINGS['GiveUsMoneyDB']); $settings = new GumSettingsModel($dbc); $cn = 0; $result = $dbc->query('SELECT MAX(checkNumber) as max_cn FROM GumPayoffs'); if ($dbc->num_rows($result) > 0) { $row = $dbc->fetch_row($result); if ($row['max_cn'] != '') { $cn = $row['max_cn']; } } if ($cn == 0) { // first ever check $settings->key('firstCheckNumber'); if ($settings->load()) { $cn = $settings->value(); } else { $cn = 1; } } else { // go to next $cn++; } /** Create a new GumPayoffs entry for the check then save its ID in the provided map. If the 2nd step fails somehow, delete the GumPayoffs record so the check number is wasted. */ $payoff = new GumPayoffsModel($dbc); $payoff->checkNumber($cn); $id = $payoff->save(); if (!$mapped) { return $cn; } if ($id !== false) { $map_model->gumPayoffID($id); $finish = $map_model->save(); if ($finish === false) { $payoff->gumPayoffID($id); $payoff->delete(); return false; } else { return $id; } } else { return false; } }
function post_printFY_handler() { global $FANNIE_PLUGIN_SETTINGS, $FANNIE_OP_DB, $FANNIE_ROOT; $dbc = FannieDB::get($FANNIE_PLUGIN_SETTINGS['GiveUsMoneyDB']); if (!class_exists('FPDF')) { include $FANNIE_ROOT . 'src/fpdf/fpdf.php'; define('FPDF_FONTPATH', 'font/'); } $pdf = new FPDF('P', 'mm', 'Letter'); $pdf->SetMargins(6.35, 6.35, 6.35); // quarter-inch margins $pdf->SetAutoPageBreak(false); $key = FormLib::get('key'); $privkey = false; if ($key) { $privkey = openssl_pkey_get_private($key); } $map = new GumDividendPayoffMapModel($dbc); $bridge = GumLib::getSetting('posLayer'); $dividends = new GumDividendsModel($dbc); $dividends->yearEndDate($this->printFY); $acc = array(); $prevCN = -1; $combined = array(); foreach ($dividends->find('card_no') as $dividend) { if (!isset($combined[$dividend->card_no()])) { $combined[$dividend->card_no()] = array(); } $combined[$dividend->card_no()][] = $dividend; } foreach ($combined as $card_no => $acc) { if (!empty($acc)) { $ttl = 0.0; // roll up totals to a single amount foreach ($acc as $a) { $ttl += $a->dividendAmount(); } // lookup check $map->reset(); $map->gumDividendID($acc[0]->gumDividendID()); $checkID = false; foreach ($map->find('gumPayoffID', true) as $obj) { $checkID = $obj->gumPayoffID(); break; } if ($checkID) { $check = new GumPayoffsModel($dbc); $check->gumPayoffID($checkID); $check->load(); } else { // allocate a new check if needed $checkID = GumLib::allocateCheck($map); $check = new GumPayoffsModel($dbc); $check->gumPayoffID($checkID); $check->load(); $check->amount($ttl); $check->save(); // map rolled up dividends to same check foreach ($acc as $a) { $map->gumDividendID($a->gumDividendID()); $map->gumPayoffID($checkID); $map->save(); } } $pdf->AddPage(); $custdata = $bridge::getCustdata($card_no); $meminfo = $bridge::getMeminfo($card_no); // bridge may change selected database $dbc = FannieDB::get($FANNIE_PLUGIN_SETTINGS['GiveUsMoneyDB']); $this->taxid = new GumTaxIdentifiersModel($dbc); $this->taxid->card_no($custdata->CardNo()); $ssn = 'Unknown'; if ($this->taxid->load()) { $ssn = 'xxx-xx-' . $this->taxid->maskedTaxIdentifier(); if ($privkey) { $try = openssl_private_decrypt($this->taxid->encryptedTaxIdentifier(), $decrypted, $privkey); if ($try) { $ssn = $decrypted; } } } $form = new GumTaxDividendFormTemplate($custdata, $meminfo, $ssn, date('Y'), array(1 => sprintf('%.2f', $ttl))); $ret .= $form->renderAsPDF($pdf, 105); $template = new GumCheckTemplate($custdata, $meminfo, $ttl, 'Dividend Payment', $check->checkNumber()); $template->renderAsPDF($pdf); $check->checkIssued(1); $check->issueDate(date('Y-m-d H:i:s')); $check->save(); $pdf->Image('img/new_letterhead.png', 10, 10, 35); if (!isset($pdf->fonts['gillsansmtpro-book'])) { $pdf->AddFont('GillSansMTPro-Book', '', 'GillSansMTPro-Book.php'); } $pdf->SetFont('GillSansMTPro-Book', '', 11); $l = 55; $pdf->SetXY($l, 20); $pdf->Cell(0, 5, date('j F Y'), 0, 1); $pdf->Ln(5); $pdf->SetX($l); $pdf->Cell(0, 5, 'Dear Owner:', 0, 1); $pdf->Ln(2); $pdf->SetX($l); $pdf->MultiCell(135, 5, 'Based on the Co-op\'s profitability in Fiscal Year 2015 (July 1, 2014-June 30, 2015), the Board of Directors approved a four percent (4%) dividend on your Class C equity investment. Your dividend is pro-rated based on when you made your investment during that fiscal year. As this check represents an annual return on your investment, the amount cannot be compounded.'); $pdf->Ln(2); $pdf->SetX($l); $pdf->MultiCell(135, 5, 'You are welcome to cash your check toward a purchase at the Co-op. Thank you for investing in Whole Foods Co-op'); $pdf->Ln(4); $pdf->SetX($l); $pdf->Cell(0, 5, 'Thank you,', 0, 1); $pdf->Ln(4); $pdf->SetX($l); $pdf->Cell(0, 5, 'Sharon Murphy', 0, 1); $pdf->Ln(2); $pdf->SetX($l); $pdf->Cell(0, 5, 'General Manager', 0, 1); } } $pdf->Output('Dividends.pdf', 'I'); return false; }