CORE-POS/IS4C

View on GitHub
fannie/modules/plugins2.0/MyWeb/models/MySpecialOrdersModel.php

Summary

Maintainability
B
5 hrs
Test Coverage
<?php

use COREPOS\Fannie\API\item\ItemText;

/*******************************************************************************

    Copyright 2017 Whole Foods Co-op

    This file is part of CORE-POS.

    IT CORE is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    IT CORE is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    in the file license.txt along with IT CORE; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*********************************************************************************/
        

/**
  @class SpecialOrdersModel
*/
class MySpecialOrdersModel extends BasicModel
{
    protected $name = "MySpecialOrders";

    protected $columns = array(
    'specialOrderID' => array('type'=>'INT', 'increment'=>true, 'primary_key'=>true),
    'customerID' => array('type'=>'INT', 'index'=>true),
    'orderDate' => array('type'=>'DATETIME'),
    'upc' => array('type'=>'VARCHAR(13)'),
    'brand' => array('type'=>'VARCHAR(255)'),
    'description' => array('type'=>'VARCHAR(255)'),
    'price' => array('type'=>'MONEY'),
    'caseSize' => array('type'=>'SMALLINT'),
    'numCases' => array('type'=>'SMALLINT'),
    'status' => array('type'=>'VARCHAR(255)'),
    'originalOrderID' => array('type'=>'INT'),
    'originalTransID' => array('type'=>'INT'),
    );

    public function etl($config)
    {
        $settings = $config->get('PLUGIN_SETTINGS');
        $mydb = $settings['MyWebDB'] . $this->connection->sep();
        $opdb = $config->get('OP_DB') . $this->connection->sep();
        $transdb = $config->get('TRANS_DB') . $this->connection->sep();
        $this->whichDB($settings['MyWebDB']);

        $this->connection->query("TRUNCATE TABLE {$mydb}MySpecialOrders");

        $cutoff = date('Y-m-d', strtotime('1 year ago'));
        $query = "SELECT o.quantity,
                o.ItemQtty,
                o.total,
                o.datetime,
                " . ItemText::longDescriptionSQL('u', 'o') . ",
                " . ItemText::longBrandSQL() . ",
                o.upc,
                s.statusFlag,
                o.card_no,
                o.order_id,
                o.trans_id
            FROM {$transdb}CompleteSpecialOrder AS o
                INNER JOIN {$transdb}SpecialOrders AS s ON o.order_id=s.specialOrderID
                LEFT JOIN {$opdb}custdata AS c ON o.card_no=c.CardNo
                LEFT JOIN {$opdb}products AS p ON o.upc=p.upc AND p.store_id=1
                LEFT JOIN {$opdb}productUser AS u ON o.upc=u.upc
            WHERE o.datetime > ?
                AND s.statusFlag IN (5, 7)
                AND s.noDuplicate=0
                AND o.trans_id > 0
                AND c.personNum=1
                AND c.type='PC'";
        $prep = $this->connection->prepare($query);
        $res = $this->connection->execute($prep, array($cutoff));
        $this->connection->startTransaction();
        $num = $this->connection->numRows($res);
        $count = 1;
        while ($row = $this->connection->fetchRow($res)) {
            //echo "$count/$num\r";
            $this->reset();
            $this->customerID($row['card_no']);
            list($tdate,) = explode(' ', $row['datetime'], 2);
            $this->orderDate($tdate);
            $this->upc($row['upc']);
            $this->brand($row['brand']);
            $this->description($row['description']);
            $this->price($row['total']);
            $this->caseSize($row['quantity']);
            $this->numCases($row['ItemQtty']);
            $this->originalOrderID($row['order_id']);
            $this->originalTransID($row['trans_id']);
            switch ($row['statusFlag']) {
                case 5:
                case 7:
                    $this->status('Completed');
                    break;
                default:
                    $this->status('Unknown');
                    break;
            }
            $this->save();
            $count++;
        }
        //echo "\n";
        $this->connection->commitTransaction();

        $query = "SELECT o.quantity,
                o.ItemQtty,
                o.total,
                o.datetime,
                " . ItemText::longDescriptionSQL('u', 'o') . ",
                " . ItemText::longBrandSQL() . ",
                o.upc,
                s.statusFlag,
                o.card_no,
                o.order_id,
                o.trans_id
            FROM {$transdb}PendingSpecialOrder AS o
                INNER JOIN {$transdb}SpecialOrders AS s ON o.order_id=s.specialOrderID
                LEFT JOIN {$opdb}custdata AS c ON o.card_no=c.CardNo
                LEFT JOIN {$opdb}products AS p ON o.upc=p.upc AND p.store_id=1
                LEFT JOIN {$opdb}productUser AS u ON o.upc=u.upc
            WHERE s.statusFlag IN (0, 1, 2, 3, 4, 5)
                AND o.trans_id > 0
                AND c.personNum=1
                AND c.type='PC'";
        $res = $this->connection->query($query);
        $this->connection->startTransaction();
        $num = $this->connection->numRows($res);
        $count = 1;
        while ($row = $this->connection->fetchRow($res)) {
            //echo "$count/$num\r";
            $this->reset();
            $this->customerID($row['card_no']);
            list($tdate,) = explode(' ', $row['datetime'], 2);
            $this->orderDate($tdate);
            $this->upc($row['upc']);
            $this->brand($row['brand']);
            $this->description($row['description']);
            $this->price($row['total']);
            $this->caseSize($row['quantity']);
            $this->numCases($row['ItemQtty']);
            $this->originalOrderID($row['order_id']);
            $this->originalTransID($row['trans_id']);
            switch ($row['statusFlag']) {
                case 0:
                case 1:
                case 2:
                case 3:
                    $this->status('Processing order');
                    break;
                case 4:
                    $this->status('Ordered from Supplier');
                    break;
                case 5:
                    $this->status('At the Store');
                    break;
                default:
                    $this->status('Unknown');
                    break;
            }
            $this->save();
            $count++;
        }
        //echo "\n";
        $this->connection->commitTransaction();
    }
}