CORE-POS/IS4C

View on GitHub
fannie/modules/plugins2.0/WooSync/WooOrdersTask.php

Summary

Maintainability
B
4 hrs
Test Coverage
<?php
/*******************************************************************************

    Copyright 2014 Whole Foods Co-op

    This file is part of IT CORE.

    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

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

use COREPOS\Fannie\API\item\ItemText;

if (!class_exists('OrderItemLib')) {
    include(__DIR__ . '/../../../ordering/OrderItemLib.php');
}
if (!class_exists('SpecialOrderLib')) {
    include(__DIR__ . '/../../../ordering/SpecialOrderLib.php');
}

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

/**
*/
class WooOrdersTask extends FannieTask 
{
    public $name = 'Import Special Orders';

    public $description = 'Imports order data from WooCommerce';

    public $default_schedule = array(
        'min' => 0,
        'hour' => 1,
        'day' => '*',
        'month' => '*',
        'weekday' => '*',
    );

    public function run()
    {
        if (!class_exists('Automattic\WooCommerce\Client')) {
            $this->cronMsg('Library missing. Use composer to install automattic/woocommerce');
            return false;
        }
        $settings = $this->config->get('PLUGIN_SETTINGS');

        // hardcoded for now
        $settings['WooUrl'] = 'http://order.wholefoods.coop';
        $settings['WooKey'] = 'ck_92e50dfa535d08b383a7282279ac0e649236df10';
        $settings['WooSecret'] = 'cs_4a23e11bffbdd1a7de6c35b5326c2690510f7591';

        $woo = new Automattic\WooCommerce\Client(
            $settings['WooUrl'],
            $settings['WooKey'],
            $settings['WooSecret'],
            array('wp_api'=>true, 'version'=>'wc/v1', 'timeoue'=>120)
        );

        /**
          Get a list of recent orders
        */
        $orders = array();
        $page = 1;
        do {
            $json = $woo->get('orders', array('after' => date('Y-m-d 00:00:00', strtotime('yesterday')), 'page'=>1));
            $headers = $woo->headers();
            foreach ($json as $o) {
                $orders[] = $o;
            }
            $page++;
        } while (isset($headers['Link']) && strstr($headers['Link'], 'rel="next"'));

        $dbc = FannieDB::get($this->config->get('OP_DB'));
        $existsP = $dbc->prepare('
            SELECT orderID
            FROM ' . $this->config->get('TRANS_DB') . $dbc->sep() . 'SpecialOrders
            WHERE onlineID=?');
        $contactP = $dbc->prepare('
            UPDATE ' . $this->config->get('TRANS_DB') . $dbc->sep() . 'SpecialOrders
            SET firstName=?,
                lastName=?,
                street=?,
                city=?,
                state=?,
                zip=?,
                phone=?,
                email=?,
                sendEmails=1
            WHERE specialOrderID=?');
        $setID = $dbc->prepare('
            UPDATE ' . $this->config->get('TRANS_DB') . $dbc->sep() . 'SpecialOrders
            SET onlineID=?
            WHERE specialOrderID=?');
        $transID = $dbc->prepare('
            SELECT MAX(trans_id)+1
            FROM ' . $this->config->get('TRANS_DB') . $dbc->sep() . 'PendingSpecialOrder
            WHERE order_id=?');
        $spo = new SpecialOrderLib($dbc, $this->config);
        foreach ($orders as $order) {
            $exists = $dbc->getValue($existsP, array($order['id']));
            if ($exists) {
                continue;
            }
            $coreID = $spo->createEmptyOrder();
            $dbc->execute($setID, array($order['id'], $coreID));
            foreach ($order['line_items'] as $line) {
                $item = OrderItemLib::getItem(substr($line['sku'], 0, strlen($line['sku'])-3));
                $row = $spo->genericRow($coreID);
                $row['upc'] = $item['upc'];
                $row['description'] = $item['description'];
                $row['trans_type'] = 'I';
                $row['department'] = $item['department'];
                $row['quantity'] = $item['caseSize'];
                $row['unitPrice'] = $item['normal_price'];
                $row['total'] = $line['total'];
                $row['regPrice'] = $item['normal_price'];
                $row['tax'] = $item['tax'];
                $row['foodstamp'] = $item['foodstamp'];
                $row['discountable'] = $item['discount'];
                $row['ItemQtty'] = $line['quantity'];
                $row['mixMatch'] = $item['vendorName'];
                $row['trans_id'] = $dbc->getValue($transID, array($coreID));;
                $dbc->smartInsert($this->config->get('TRANS_DB') . $dbc->sep() . 'PendingSpecialOrder', $row);
            }
            $customer = $woo->get('customers/' . $order['customer_id']);
            $dbc->execute($contactP, array(
                $customer['first_name'],
                $customer['last_name'],
                $customer['billing']['address_1'] . (empty($customer['billing']['address_2']) ? '' : "\n" . $customer['billing']['address_2']),
                $customer['billing']['city'],
                $customer['billing']['state'],
                $customer['billing']['postcode'],
                $customer['billing']['phone'],
                $customer['email'],
                $coreID,
            ));
        }
    }
}