CORE-POS/IS4C

View on GitHub
fannie/modules/plugins2.0/PIKiller/PITermCheck.php

Summary

Maintainability
C
7 hrs
Test Coverage
<?php

include(__DIR__ . '/../../../config.php');
if (!class_exists('FannieAPI')) {
    include(__DIR__ . '/../../../classlib2.0/FannieAPI.php');
}

class PITermCheck extends FannieRESTfulPage
{
    protected $header = 'Reprint Termination Letter';
    protected $title = 'Reprint Termination Letter';

    protected function get_id_handler()
    {
        if (!class_exists('GumCheckTemplate')) {
            echo 'Missing check template; enable plugin!';
            return false;
        }

        $dbc = $this->connection;

        $status = $dbc->prepare('SELECT Type FROM custdata WHERE CardNo=? AND personNum=1');
        $status = $dbc->getValue($status, array($this->id));
        $amount = FormLib::get('amount', false);
        if ($amount === false && $status != 'INACT2' && $status != 'TERM') {
            echo 'Can only terminate TERMPENDING owners';
            return false;
        }

        $equity = $dbc->prepare('SELECT payments FROM ' . $this->config->get('TRANS_DB') . $dbc->sep() . 'equity_live_balance WHERE memnum=?');
        $equity = $dbc->getValue($equity, array($this->id));

        $classA = $equity < 20 ? $equity : 20;
        $classB = $equity < 20 ? 0 : $equity - 20;

        if ($amount === false) {
            // Terminate account related tables
            $susp = new SuspensionsModel($dbc);
            $susp->cardno($this->id);
            $susp->type('T');
            $susp->reasoncode(64);
            $susp->save();
            
            $history = new SuspensionHistoryModel($dbc);
            $history->username($this->current_user);
            $history->postdate(date('Y-m-d H:i:s'));
            $history->cardno($this->id);
            $history->reasoncode(64);
            $history->save();
           
            $custP = $dbc->prepare("UPDATE custdata SET type='TERM', memType=0, Discount=0, ChargeLimit=0, MemDiscountLimit=0 WHERE CardNo=?");
            $dbc->execute($custP, array($this->id));
            
            $note = new MemberNotesModel($dbc);
            $note->cardno($this->id);
            $note->note('Equity termination');
            $note->stamp(date('Y-m-d H:i:s'));
            $note->username($this->current_user);
            $note->save();
            
            // Write a transaction to remote equity
            $trans = DTrans::getTransNo($dbc, 1001, 30);
            $dtrans_table = $this->config->get('TRANS_DB') . $dbc->sep() . 'dtransactions';
            $record = DTrans::defaults();
            $record['register_no'] = 30;
            $record['emp_no'] = 1001;
            $record['trans_no'] = $trans;
            $record['upc'] = $classA.'DP992';
            $record['description'] = 'Class A Equity';
            $record['trans_type'] = 'D';
            $record['department'] = 992;
            $record['unitPrice'] = -1*$classA;
            $record['total'] = -1*$classA;
            $record['regPrice'] = -1*$classA;
            $record['card_no'] = $this->id;
            $record['trans_id'] = 1;
            $info = DTrans::parameterize($record, 'datetime', $dbc->now());
            $prep = $dbc->prepare("INSERT INTO $dtrans_table ({$info['columnString']}) VALUES ({$info['valueString']})");
            $dbc->execute($prep, $info['arguments']);
           
            $record = DTrans::defaults();
            $record['register_no'] = 30;
            $record['emp_no'] = 1001;
            $record['trans_no'] = $trans;
            $record['upc'] = $classB.'DP991';
            $record['description'] = 'Class B Equity';
            $record['trans_type'] = 'D';
            $record['department'] = 991;
            $record['unitPrice'] = -1*$classB;
            $record['total'] = -1*$classB;
            $record['regPrice'] = -1*$classB;
            $record['card_no'] = $this->id;
            $record['trans_id'] = 2;
            $info = DTrans::parameterize($record, 'datetime', $dbc->now());
            $prep = $dbc->prepare("INSERT INTO $dtrans_table ({$info['columnString']}) VALUES ({$info['valueString']})");
            $dbc->execute($prep, $info['arguments']);
           
            $record = DTrans::defaults();
            $record['register_no'] = 30;
            $record['emp_no'] = 1001;
            $record['trans_no'] = $trans;
            $record['upc'] = $equity.'DP7030';
            $record['description'] = 'Abandon Equity';
            $record['trans_type'] = 'D';
            $record['department'] = 703;
            $record['unitPrice'] = $equity;
            $record['total'] = $equity;
            $record['regPrice'] = $equity;
            $record['card_no'] = $this->id;
            $record['trans_id'] = 3;
            $info = DTrans::parameterize($record, 'datetime', $dbc->now());
            $prep = $dbc->prepare("INSERT INTO $dtrans_table ({$info['columnString']}) VALUES ({$info['valueString']})");
            $dbc->execute($prep, $info['arguments']);
           
            $record = DTrans::defaults();
            $record['register_no'] = 30;
            $record['emp_no'] = 1001;
            $record['trans_no'] = $trans;
            $record['upc'] = '0';
            $record['description'] = '21000-00-00';
            $record['trans_type'] = 'C';
            $record['trans_subtype'] = 'CM';
            $record['card_no'] = $this->id;
            $record['trans_id'] = 4;
            $info = DTrans::parameterize($record, 'datetime', $dbc->now());
            $prep = $dbc->prepare("INSERT INTO $dtrans_table ({$info['columnString']}) VALUES ({$info['valueString']})");
            $dbc->execute($prep, $info['arguments']);
        } else {
            $equity = $amount;
            $classA = $equity < 20 ? $equity : 20;
            $classB = $equity < 20 ? 0 : $equity - 20;
        }
        
        /******************
        * Generate a check
        *****************/
        $pdf = new FPDF('P', 'mm', 'Letter');
        $pdf->SetMargins(null, null, null); // quarter-inch margins
        $pdf->SetAutoPageBreak(false);
        $pdf->AddPage();
       
        $custdata = new CustdataModel($dbc);
        $custdata->CardNo($this->id);
        $custdata->personNum(1);
        $custdata->load();
        $meminfo = new MeminfoModel($dbc);
        $meminfo->card_no($this->id);
        $meminfo->load();
       
        $pdf->SetXY(0, 0);
        $pdf->Image('../GiveUsMoneyPlugin/img/new_letterhead.png', 10, 10, 35);
        $pdf->SetFont('Arial', '', 12);
        $line_height = 5;
        $left = 55;
        $width = 125;
        $pdf->SetXY($left, 10);
        $pdf->Cell($width, $line_height, date('F d, Y'));
        $pdf->Ln(3*$line_height);
        $pdf->SetX($left);
        $pdf->Cell($width, $line_height, $this->id, 0, 1);
        $pdf->SetX($left);
        $pdf->Cell($width, $line_height, $custdata->FirstName() . ' ' . $custdata->LastName(), 0, 1);
        foreach (explode("\n", $meminfo->street()) as $addr) {
            $pdf->SetX($left);
            $pdf->Cell($width, $line_height, $addr, 0, 1);
        }
        $pdf->SetX($left);
        $pdf->Cell($width, $line_height, $meminfo->city() . ', ' . $meminfo->state() . ' ' . $meminfo->zip(), 0, 1);
        $pdf->Ln($line_height);
        $pdf->SetX($left);
        $pdf->Cell($width, $line_height, 'To Whom It May Concern:', 0, 1);
        $pdf->Ln($line_height);
        $pdf->SetX($left);
        $pdf->MultiCell($width, $line_height, 'The WFC Board of Directors reviewed and approved your application for termination');
        $pdf->Ln($line_height);
        $invest = sprintf('$%.2f Class A Voting Stock', $classA);
        if ($classB > 0) {
            $invest .= sprintf(' and $%.2f Class B Equity Stock', $classB);
        }
        $pdf->SetX($left);
        $pdf->MultiCell($width, $line_height, "We are returning your investment of {$invest}. As per our policy your equity was redeemed at face value. Please see the attached check");
        $pdf->Ln($line_height);
        $pdf->SetX($left);
        $pdf->MultiCell($width, $line_height, 'Thank you for your investment and support of the Whole Foods Co-op.  If you have questions or concerns regarding the return of investment, please contact the Finance Department.');
        $pdf->Ln($line_height);
        $pdf->SetX($left);
        $pdf->Cell($width, $line_height, 'Thank you,', 0, 1);
        $pdf->Ln(2*$line_height);
        $pdf->SetX($left);
        $pdf->Cell($width, $line_height, 'Finance Department', 0, 1);
        $pdf->Ln(2*$line_height);
        $pdf->SetX($left);
        $pdf->Cell($width, $line_height, '218.728.0884', 0, 1);
        $pdf->SetX($left);
        $pdf->Cell($width, $line_height, 'finance@wholefoods.coop', 0, 1);
       
        $pdf->Output('Equity Refund ' . $this->id . '.pdf', 'I');

        return false;
    }

    protected function get_view()
    {
        return <<<HTML
<form method="get" action="PITermCheck.php">
<p>
    <div class="form-group">
        <label>Owner #</label>
        <input type="text" name="id" required class="form-control" />
    </div>
    <div class="form-group">
        <label>Equity Amount</label>
        <input type="text" name="amount" required class="form-control" />
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-default">Generate Letter</button>
    </div>
</p>
</form>
HTML;
    }
}

FannieDispatch::conditionalExec();