CORE-POS/IS4C

View on GitHub
fannie/modules/plugins2.0/Otto/OttoTask.php

Summary

Maintainability
C
1 day
Test Coverage
<?php

if (!class_exists('Gohanman\\Otto\\Otto')) {
    include(__DIR__ . '/noauto/Otto.php');
}
if (!class_exists('Gohanman\\Otto\\Message')) {
    include(__DIR__ . '/noauto/Message.php');
}

class OttoTask extends FannieTask
{

    public function run()
    {
        $settings = $this->config->get('PLUGIN_SETTINGS');
        $url = $settings['OttoStatUrl'];

        $otto = new Gohanman\Otto\Otto($url);
        $msg = new Gohanman\Otto\Message();
        $yesterday = strtotime('yesterday');
        $tdate = date('Y-m-d', $yesterday);
        $msg->title('Sales for ' . date('D, M jS', $yesterday));

        // walk back to monday
        $monday = $yesterday;
        while (date('N', $monday) != 1) {
            $monday = mktime(0, 0, 0, date('n', $monday), date('j', $monday) - 1, date('Y', $monday));
        }
        // subtract one year
        $ly = mktime(0, 0, 0, date('n', $monday), date('j', $monday), date('Y', $monday) - 1);
        // walk forward until a monday
        while (date('N', $ly) != 1) {
            $ly = mktime(0, 0, 0, date('n', $ly), date('j', $ly) + 1, date('Y', $ly));
        }
        // find corresponding weekday
        $dayNo = date('N', $yesterday);
        $inc = $dayNo < date('N', $ly) ? -1  : 1;
        $max = 0;
        while (date('N', $ly) != $dayNo) {
            $ly = mktime(0,0,0, date('n', $ly), date('j', $ly) + $inc, date('Y', $ly));
            $max++;
            if ($max > 6) {
                $ly = strtotime('1 year ago');
                break;
            }
        }
        $lastYear = date('Y-m-d', $ly);

        $dlog = DTransactionsModel::selectDlog($tdate);
        $dbc = FannieDB::get($this->config->get('OP_DB'));
        $nabs = DTrans::memTypeIgnore($dbc);
        $prep = $dbc->prepare("
            SELECT s.storeID, s.description,
                SUM(total) as ttl
            FROM {$dlog} AS d
                INNER JOIN MasterSuperDepts AS m ON d.department=m.dept_ID
                INNER JOIN Stores AS s ON s.storeID=d.store_id
            WHERE s.hasOwnItems=1
                AND m.superID <> 0
                AND d.trans_type IN ('I', 'D')
                AND d.tdate BETWEEN ? AND ?
                AND d.memType NOT IN {$nabs}
            GROUP BY s.storeID, s.description
            ORDER BY s.description");

        $dlogLY = DTransactionsModel::selectDlog($lastYear);
        $lyP = $dbc->prepare("
            SELECT SUM(total) as ttl
            FROM {$dlogLY} AS d
                INNER JOIN MasterSuperDepts AS m ON d.department=m.dept_ID
                INNER JOIN Stores AS s ON s.storeID=d.store_id
            WHERE s.hasOwnItems=1
                AND m.superID <> 0
                AND d.trans_type IN ('I', 'D')
                AND d.tdate BETWEEN ? AND ?
                AND d.memType NOT IN {$nabs}
                AND d.store_id=?");

        $res = $dbc->execute($prep, array($tdate, $tdate . ' 23:59:59'));
        $body = '';
        $org = 0;
        $orgLY = 0;
        while ($row = $dbc->fetchRow($res)) {
            $salesLY = $dbc->getValue($lyP, array($lastYear, $lastYear . ' 23:59:59', $row['storeID']));
            $growth = ($row['ttl'] - $salesLY) / $salesLY;
            $orgLY += $salesLY;
            $pctGrowth = sprintf('%.1f%%', $growth * 100);
            $body .= '**' . $row['description'] . '**: $' . number_format($row['ttl']) . ' (' . $pctGrowth . ")\n\n";
            $org += $row['ttl'];
        }
        $growth = ($org - $orgLY) / $orgLY;
        $pctGrowth = sprintf('%.1f%%', $growth * 100);
        $body .= '**Organization**: $' . number_format($org) . ' (' . $pctGrowth . ')';

        $msg->body($body);
        var_dump($otto->post($msg));

        if (date('N', $yesterday) == 7) {
            $wkEnd = $tdate;
            $wkStart = date('Y-m-d', mktime(0, 0, 0, date('n', $yesterday), date('j',$yesterday) - 6, date('Y', $yesterday)));
            $lyEnd = $lastYear;
            $ly = strtotime($lastYear);
            $lyStart = date('Y-m-d', mktime(0, 0, 0, date('n', $ly), date('j',$ly) - 6, date('Y', $ly)));

            $msg = new Gohanman\Otto\Message();
            $msg->title('Sales for the week of ' . date('D, M jS', strtotime($wkStart)));

            $res = $dbc->execute($prep, array($wkStart, $wkEnd . ' 23:59:59'));
            $body = '';
            $org = 0;
            $orgLY = 0;
            while ($row = $dbc->fetchRow($res)) {
                $salesLY = $dbc->getValue($lyP, array($lyStart, $lyEnd . ' 23:59:59', $row['storeID']));
                $growth = ($row['ttl'] - $salesLY) / $salesLY;
                $orgLY += $salesLY;
                $pctGrowth = sprintf('%.1f%%', $growth * 100);
                $body .= '**' . $row['description'] . '**: $' . number_format($row['ttl']) . ' (' . $pctGrowth . ")\n\n";
                $org += $row['ttl'];
            }
            $growth = ($org - $orgLY) / $orgLY;
            $pctGrowth = sprintf('%.1f%%', $growth * 100);
            $body .= '**Organization**: $' . number_format($org) . ' (' . $pctGrowth . ')';

            $msg->body($body);
            var_dump($otto->post($msg));
        }
    }
}