Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 /**
   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;
     }
 }
Esempio n. 3
0
 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;
 }