Exemplo n.º 1
0
function docs_spsr_make($core, $comp, $from, $to, $onew, $mark, $done)
{
    if ($from) {
        $fsql = " AND order_time >= '" . strtotime(date2form($from) . ' 00:00:00') . "'";
    } else {
        $fsql = '';
    }
    if ($to) {
        $tsql = " AND order_time <= '" . strtotime(date2form($to) . ' 23:59:59') . "'";
    } else {
        $tsql = '';
    }
    if ($onew) {
        $nsql = " AND order_courier = 0 ";
    } else {
        $nsql = '';
    }
    // Load offers and orders
    $offer = $core->db->icol("SELECT offer_id, offer_descr FROM " . DB_OFFER);
    $order = $core->db->data("SELECT * FROM " . DB_ORDER . " WHERE comp_id = '" . $comp['comp_id'] . "' AND order_delivery = 2 AND order_status IN ( 6, 7 ) {$fsql} {$tsql} {$usql} {$nsql} ORDER BY order_id ASC LIMIT 1000");
    // Process order items
    foreach ($order as &$o) {
        if ($o['order_items'] && ($items = unserialize($o['order_items']))) {
            $vars = $core->wmsale->get('vars', $o['offer_id']);
            if (count($items) == 1) {
                list($i, $v) = each($items);
                $o['items'] = $v > 1 ? sprintf("%s - %s", $vars[$i]['var_short'], $v) : $vars[$i]['var_short'];
            } else {
                $ib = array();
                foreach ($items as $i => $v) {
                    $ib[] = sprintf("%s - %s", $vars[$i]['var_short'], $v);
                }
                $o['items'] = implode(', ', $ib);
            }
        }
    }
    // Make the listing
    docs_spsr_excel($comp, $offer, $order, $core);
    // Marking orders
    foreach ($order as &$o) {
        if ($mark) {
            $core->db->query("UPDATE " . DB_ORDER . " SET order_courier = 1 WHERE order_id = '" . $o['order_id'] . "' LIMIT 1");
        }
        if ($done) {
            order_edit($core, $o['order_id'], array('status' => 8));
        }
    }
}
Exemplo n.º 2
0
}
unset($s, $sites);
// Stage 2.2. Counting spacing site convert
$sites = $core->db->icol("SELECT site_id, COUNT(*) FROM " . DB_CLICK . " WHERE click_space = 1 AND click_unique = 1 AND click_date BETWEEN '{$week1}' AND '{$today}' GROUP BY site_id");
foreach ($sites as $s => $c) {
    $ords = $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE space_id = '{$s}' AND flow_id != 0 AND order_status > 5 AND order_status < 12 AND order_time BETWEEN '{$ff}' AND '{$tt}'");
    $conv = $ords / $c;
    $core->db->edit(DB_SITE, array('site_convert' => $conv), "site_id = '{$s}'");
}
unset($s, $sites);
// Stage 3. Cleaning up the clicks and old orders
$core->db->del(DB_CLICK, "click_date < '{$week4}'");
$orders = $core->db->col("SELECT order_id FROM " . DB_ORDER . " WHERE order_time < '{$ff}' AND order_status < 5");
if ($orders) {
    foreach ($orders as $o) {
        order_edit($core, $o, array('status' => 5, 'reason' => 6));
    }
}
// Stage 4. Order statistics from the 7th day
$orders = $core->db->data("SELECT offer_id, flow_id, wm_id, order_status FROM " . DB_ORDER . " WHERE flow_id != 0 AND order_time BETWEEN '{$ff}' AND '{$ft}'");
$flowstat = array();
foreach ($orders as &$o) {
    if (!$flowstat[$o['flow_id']]) {
        $flowstat[$o['flow_id']] = array('ca' => 0, 'sa' => 0, 'cc' => 0, 'sc' => 0);
    }
    $l = $o['order_status'] == 5 || $o['order_status'] > 10 ? 'c' : 'a';
    $flowstat[$o['flow_id']]['c' . $l] += 1;
    $flowstat[$o['flow_id']]['s' . $l] += $core->wmsale->price($o['offer_id'], $o['wm_id'], 'wmp');
}
unset($o, $orders);
foreach ($flowstat as $f => $s) {
Exemplo n.º 3
0
function api_sale_edit($core, $user)
{
    // Get order data
    $cid = $core->user->get($user, 'user_comp');
    if (!$cid) {
        return array('status' => 'error', 'error' => 'access-denied');
    }
    $id = $core->post['oid'] ? (int) $core->post['oid'] : (int) $core->get['oid'];
    $eid = $core->post['eid'] ? (int) $core->post['eid'] : (int) $core->get['eid'];
    if (!($id || $eid)) {
        return array('status' => 'error', 'error' => 'orderid');
    }
    $order = $id ? $core->db->row("SELECT * FROM " . DB_ORDER . " WHERE comp_id = '{$cid}' AND order_id = '{$id}' LIMIT 1") : $core->db->row("SELECT * FROM " . DB_ORDER . " WHERE comp_id = '{$cid}' AND ext_oid = '{$eid}' LIMIT 1");
    if (!$order['order_id']) {
        return array('status' => 'error', 'error' => 'access');
    }
    $data = array();
    // Get parameters
    if (isset($core->get['accept'])) {
        $data['accept'] = (int) $core->get['accept'];
    }
    if (isset($core->get['status'])) {
        $data['status'] = (int) $core->get['status'];
    }
    if (isset($core->get['reason'])) {
        $data['reason'] = (int) $core->get['reason'];
    }
    if (isset($core->get['check'])) {
        $data['check'] = (int) $core->get['check'];
    }
    if (isset($core->get['track'])) {
        $data['track'] = $core->get['track'];
    }
    if (isset($core->get['calls'])) {
        $data['calls'] = $core->get['calls'];
    }
    // Post parameters same to get
    if (isset($core->post['accept'])) {
        $data['accept'] = (int) $core->post['accept'];
    }
    if (isset($core->post['status'])) {
        $data['status'] = (int) $core->post['status'];
    }
    if (isset($core->post['reason'])) {
        $data['reason'] = (int) $core->post['reason'];
    }
    if (isset($core->post['check'])) {
        $data['check'] = (int) $core->post['check'];
    }
    if (isset($core->post['track'])) {
        $data['track'] = $core->post['track'];
    }
    if (isset($core->post['calls'])) {
        $data['calls'] = $core->post['calls'];
    }
    // Post only parameters
    if (isset($core->post['name'])) {
        $data['name'] = $core->post['name'];
    }
    if (isset($core->post['phone'])) {
        $data['phone'] = $core->post['phone'];
    }
    if (isset($core->post['addr'])) {
        $data['addr'] = $core->post['addr'];
    }
    if (isset($core->post['index'])) {
        $data['index'] = $core->post['index'];
    }
    if (isset($core->post['area'])) {
        $data['area'] = $core->post['area'];
    }
    if (isset($core->post['city'])) {
        $data['city'] = $core->post['city'];
    }
    if (isset($core->post['street'])) {
        $data['street'] = $core->post['street'];
    }
    if (isset($core->post['delivery'])) {
        $data['delivery'] = (int) $core->post['delivery'];
    }
    if (isset($core->post['discount'])) {
        $data['discount'] = (int) $core->post['discount'];
    }
    if (isset($core->post['count'])) {
        $data['count'] = (int) $core->post['count'];
    }
    if (isset($core->post['items'])) {
        $data['items'] = $core->post['items'];
    }
    if (isset($core->post['more'])) {
        $data['more'] = (int) $core->post['more'];
    }
    if (isset($core->post['comment'])) {
        $data['comment'] = (int) $core->post['comment'];
    }
    // Save the order
    require_once PATH_LIB . 'common.php';
    return order_edit($core, $order['order_id'], $data, $order) ? array('status' => 'ok') : array('status' => 'error', 'error' => 'edit');
}
Exemplo n.º 4
0
function cron_spsr($core)
{
    $ct = time() - 14400;
    $accs = $core->db->data("SELECT comp_spsr, comp_spsr_login, comp_spsr_pass FROM" . DB_COMP . " WHERE comp_spsr_login != ''");
    foreach ($accs as $a) {
        $spsr = new SPSRtrack($a['comp_spsr_login'], $a['comp_spsr_pass'], $a['comp_spsr'], SPSR_COOKIE);
        $ids = $spsr->show(date('Y-m-d'), date('Y-m-d', strtotime('-2 days')));
        unset($spsr);
        if (count($ids)) {
            $oids = implode(',', array_keys($ids));
            $orders = $core->db->icol("SELECT order_id, order_status FROM " . DB_ORDER . " WHERE track_on = 0 AND order_id IN ( {$oids} ) AND order_status BETWEEN 6 AND 9");
            foreach ($orders as $o => $s) {
                $changes = array('track' => $ids[$o], 'track_on' => 1, 'track_check' => '$ct');
                if ($s < 9) {
                    $changes['status'] = 8;
                }
                order_edit($core, $o, $changes);
            }
            unset($ids, $oids, $o, $orders);
        }
    }
}
Exemplo n.º 5
0
function order_action($core)
{
    $action = $core->get['a'] ? $core->get['a'] : null;
    $id = $core->post['id'] ? (int) $core->post['id'] : ($core->get['id'] ? (int) $core->get['id'] : 0);
    switch ($action) {
        case 'order-notify':
            $prev = (int) $core->get['prev'];
            if ($core->user->comp && !$core->user->call) {
                echo json_encode(array('previous' => time(), 'ords' => $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE order_status = 1 AND order_time >= '{$prev}' AND comp_id = '" . $core->user->comp . "'")));
            } else {
                echo json_encode(array('previous' => time(), 'ords' => $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE order_status = 1 AND order_time >= '{$prev}'")));
            }
            $core->_die();
        case 'order-spsr':
            $comp = $core->user->comp ? $core->wmsale->get('comp', $core->user->comp) : false;
            $to = $core->text->line($core->post['to']);
            $area = $core->text->line($core->post['area']);
            $price = $core->text->line($core->post['price']);
            require_once PATH . 'lib/spsr.php';
            if ($comp['comp_spsr_login'] && $comp['comp_spsr_pass']) {
                $spsr = new SPSRtrack($comp['comp_spsr_login'], $comp['comp_spsr_pass'], $comp['comp_spsr'], SPSR_COOKIE);
            } else {
                $spsr = new SPSRtrack(SPSR_LOGIN, SPSR_PASS, SPSR_ID, SPSR_COOKIE);
            }
            $info = $spsr->price($comp['comp_spsr_from'] ? $comp['comp_spsr_from'] : SPSR_CITY, $to, $area, $price);
            unset($spsr);
            echo json_encode($info);
            $core->_die();
        case 'order-rupost':
            $to = (int) $core->get['to'];
            $price = (int) $core->get['price'];
            $req = $reqmd5 = array('apikey' => RUP_API, 'method' => 'calc', 'from_index' => RUP_FROM, 'to_index' => $to, 'weight' => RUP_WG, 'ob_cennost_rub' => $price);
            $reqmd5[] = RUP_KEY;
            $req['hash'] = md5(implode('|', $reqmd5));
            $info = json_decode(curl('http://russianpostcalc.ru/api_v1.php', $req), true);
            if ($info['calc']) {
                $d = 0;
                $c = 0;
                foreach ($info['calc'] as $i) {
                    if ($i['type'] == 'rp_1class') {
                        $d = $i['days'];
                        $c = $i['cost'];
                        break;
                    }
                }
                $res = $d ? array('ok' => 1, 'dd' => $d, 'cost' => $c) : array('error' => 'nodelivery');
            } else {
                $res = array('error' => 'bad');
            }
            echo json_encode($res);
            $core->_die();
        case 'order-phone':
            $phone = preg_replace('#([^0-9]+)#', '', $core->get['phone']);
            $ptc = substr($phone, 1, 6);
            $data = $core->db->row("SELECT * FROM " . DB_PDB . " WHERE `phone` = '{$ptc}' LIMIT 1");
            if ($data) {
                $place = $data['region'];
                if ($data['city']) {
                    $place .= ', ' . $data['city'];
                }
                printf("<b>База</b>: %s (%s)", $data['operator'], $place);
            }
            $curl = curl_init('http://mnp.tele2.ru/gateway.php?' . substr($phone, 1));
            curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0');
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($curl, CURLOPT_REFERER, 'http://mnp.tele2.ru/whois.html');
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json, text/javascript, */*; q=0.01', 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3', 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With: XMLHttpRequest'));
            $tele2 = curl_exec($curl);
            curl_close($curl);
            if ($tele2) {
                $tele2info = json_decode($tele2, true);
                if (is_array($tele2info['response'])) {
                    if ($data) {
                        echo '<br />';
                    }
                    printf("<b>Tele2</b>: %s (%s)", $tele2info['response']['mnc']['value'], $tele2info['response']['geocode']['value']);
                }
            }
            $core->_die();
        case 'order-move':
            $comp = (int) $core->post['comp'];
            if (($core->user->level || $core->user->call) && $comp && order_edit($core, $id, array('comp' => $comp))) {
                msgo($core, 'move');
            } else {
                msgo($core, 'nomove');
            }
        case 'order-pickup':
            if ($oid = order_take($core, $id)) {
                $core->go($core->url('i', 'order', $oid));
            } else {
                $core->go($core->url('m', 'order', 'pickup'));
            }
        case 'order-call':
            $status = $core->text->link($core->post['status']);
            if ($status == 'del' && !$core->user->level) {
                msgo($core, 'call');
            }
            if ($status == 'shave' && !($core->user->level || $core->user->shave)) {
                msgo($core, 'call');
            }
            if ($cs = order_accept($status)) {
                order_edit($core, $id, $cs);
            }
            msgo($core, 'call');
        case 'order-send':
            $code = $core->text->line($core->post['code']);
            if (order_edit($core, $id, array('status' => 8, 'track' => $code))) {
                msgo($core, 'send');
            } else {
                msgo($core, 'nocode');
            }
        case 'order-trackcall':
            $status = (int) $core->post['status'];
            $core->db->query("UPDATE " . DB_ORDER . " SET track_calls = track_calls + 1, track_result = '{$status}', track_call = '" . time() . "' WHERE order_id = '{$id}' LIMIT 1");
            msgo($core, 'called');
        case 'order-esend':
            if (order_edit($core, $id, array('status' => 8))) {
                msgo($core, 'send');
            } else {
                msgo($core, 'nocode');
            }
        case 'order-snew':
            $core->db->query("UPDATE " . DB_ORDER . " SET order_courier = 0 WHERE order_id = '{$id}' LIMIT 1");
            msgo($core, 'save');
        case 'order-sold':
            $core->db->query("UPDATE " . DB_ORDER . " SET order_courier = 1 WHERE order_id = '{$id}' LIMIT 1");
            msgo($core, 'save');
        case 'order-courier':
            $from = $core->post['from'] ? form2date($core->post['from']) : false;
            $to = $core->post['to'] ? form2date($core->post['to']) : false;
            $onew = $core->post['new'] ? 1 : 0;
            $mark = $core->post['mark'] ? 1 : 0;
            $done = $core->post['done'] ? 1 : 0;
            $comp = $core->wmsale->get('comp', $core->user->comp);
            require_once PATH_LIB . 'addr.php';
            require_once PATH_LIB . 'docs.php';
            docs_spsr_make($core, $comp, $from, $to, $onew, $mark, $done);
            $core->_die();
        case 'order-packed':
            if (order_edit($core, $id, array('status' => 7))) {
                msgo($core, 'pack');
            } else {
                msgo($core, 'error');
            }
        case 'order-arrive':
            if (order_edit($core, $id, array('status' => 9))) {
                msgo($core, 'arrive');
            } else {
                msgo($core, 'error');
            }
        case 'order-done':
            if (order_edit($core, $id, array('status' => 10))) {
                msgo($core, 'done');
            } else {
                msgo($core, 'error');
            }
        case 'order-return':
            if (order_edit($core, $id, array('status' => 11))) {
                msgo($core, 'done');
            } else {
                msgo($core, 'error');
            }
        case 'order-uncheck':
            if (order_edit($core, $id, array('check' => 0))) {
                msgo($core, 'done');
            } else {
                msgo($core, 'error');
            }
        case 'order-reset':
            if (order_edit($core, $id, array('status' => 12))) {
                msgo($core, 'done');
            } else {
                msgo($core, 'error');
            }
        case 'order-docs':
            $ord = $core->db->row("SELECT * FROM " . DB_ORDER . " WHERE order_id = '{$id}' LIMIT 1");
            if ($core->user->level || $core->user->call || $core->user->id == $ord['user_id'] || $core->user->comp == $ord['comp_id']) {
                $comp = $core->wmsale->get('comp', $ord['comp_id']);
                require_once PATH_LIB . 'docs.php';
                docs_xls_make($ord, $comp);
                $core->_die();
            } else {
                $core->go($core->url('mm', '', 'access'));
            }
        case 'order-edit':
            $changes = array();
            $order = $core->db->row("SELECT * FROM " . DB_ORDER . " WHERE order_id = '{$id}' LIMIT 1");
            $status = $order['order_status'];
            // Basic order info
            if (isset($core->post['name'])) {
                $changes['name'] = $core->text->line($core->post['name']);
            }
            if (isset($core->post['addr'])) {
                $changes['addr'] = $core->text->line($core->post['addr']);
            }
            if (isset($core->post['area'])) {
                $changes['area'] = $core->text->line($core->post['area']);
            }
            if (isset($core->post['city'])) {
                $changes['city'] = $core->text->line($core->post['city']);
            }
            if (isset($core->post['street'])) {
                $changes['street'] = $core->text->line($core->post['street']);
            }
            if (isset($core->post['phone'])) {
                $changes['phone'] = preg_replace('#([^0-9]+)#', '', $core->post['phone']);
            }
            if (isset($core->post['index'])) {
                $changes['index'] = (int) $core->post['index'];
            }
            if (isset($core->post['track'])) {
                $changes['track'] = $core->text->line($core->post['track']);
            }
            // Item delivery and counts
            if (isset($core->post['delivery'])) {
                $changes['delivery'] = (int) $core->post['delivery'];
            }
            if (isset($core->post['discount'])) {
                $changes['discount'] = (int) $core->post['discount'];
            }
            if (isset($core->post['more'])) {
                $changes['more'] = (int) $core->post['more'];
            }
            if (isset($core->post['counts'])) {
                $changes['counts'] = array();
                foreach ($core->post['counts'] as $i => $c) {
                    if ($c = (int) $c) {
                        $changes['counts'][(int) $i] = $c;
                    }
                }
            }
            if (isset($core->post['comment'])) {
                $changes['comment'] = $core->text->line($core->post['comment']);
            }
            if (isset($core->post['meta']) && is_array($core->post['meta'])) {
                $changes['meta'] = array();
                foreach ($core->post['meta'] as $k => $v) {
                    $changes['meta'][$k] = stripslashes($v);
                }
            }
            // Check for status
            $act = $core->text->link($core->post['act']);
            switch ($status) {
                case 2:
                case 3:
                case 4:
                    // Order accept progress
                    if ($status == 'del' && !$core->user->level) {
                        break;
                    }
                    if ($status == 'shave' && !($core->user->level || $core->user->shave)) {
                        break;
                    }
                    if ($cs = order_accept($act)) {
                        $changes += $cs;
                    }
                    break;
                case 6:
                    // Packing
                    if ($act == 'done') {
                        $changes['status'] = 7;
                    }
                    break;
                case 7:
                    // Sending
                    if ($act == 'done') {
                        $changes['status'] = 8;
                    }
                    if ($act == 'back') {
                        $changes['status'] = 6;
                    }
                    break;
                case 8:
                case 9:
                    // Delivery and payment
                    if ($act == 'done') {
                        $changes['status'] = $status + 1;
                    }
                    if ($act == 'return') {
                        $changes['status'] = 11;
                    }
                    if ($act == 'back') {
                        $changes['status'] = $status - 1;
                    }
                    break;
            }
            // Checks and controls of orders
            if ($core->post['check']) {
                $changes['check'] = 1;
            }
            if ($core->post['uncheck']) {
                $changes['check'] = 0;
            }
            // Saving order data
            order_edit($core, $id, $changes, $order);
            // Processing bans
            if ($core->post['banip'] || $core->post['banphone']) {
                require_once PATH . 'lib/ban.php';
                if ($core->post['banip']) {
                    ban_ip($core, $order['order_ip'], true);
                }
                if ($core->post['banphone']) {
                    ban_phone($core, $order['order_phone']);
                }
            }
            // Processing order cancels
            if ($core->post['delip'] || $core->post['delphone']) {
                $sql = "SELECT order_id FROM " . DB_ORDER . " WHERE order_id != '" . $order['order_id'] . "' AND order_status < 5 AND comp_id = '" . $order['comp_id'] . "'";
                if ($core->post['delip']) {
                    $sql .= " AND order_ip = '" . $order['order_ip'] . "'";
                }
                if ($core->post['delphone']) {
                    $sql .= " AND order_phone = '" . $order['order_phone'] . "'";
                }
                $ids = $core->db->col($sql);
                foreach ($ids as $i) {
                    order_edit($core, $i, array('status' => 5, 'reason' => 7));
                }
            }
            // Order save competed, returning back
            if ($core->post['next']) {
                $core->go($core->url('a', 'order-pickup', ''));
            } else {
                $core->go($core->post['r'] ? $core->post['r'] : $core->url('mm', 'order', 'save'));
            }
        case 'track-info':
            $order = $core->db->row("SELECT * FROM " . DB_ORDER . " WHERE order_id = '{$id}' LIMIT 1");
            if ($order['track_code']) {
                $core->tpl->load('track', 'track');
                $core->tpl->vars('track', array('id' => $id));
                switch ($order['order_delivery']) {
                    case 1:
                        require_once PATH . 'lib/track.php';
                        $info = PostTracker::info($order['track_code']);
                        break;
                    case 2:
                        require_once PATH . 'lib/spsr.php';
                        $info = SPSRtrack::info($order['track_code']);
                        break;
                }
                foreach ($info as $i) {
                    $core->tpl->block('track', 'place', array('date' => $i['date'] . ($i['time'] ? ' ' . $i['time'] : ''), 'status' => $i['status'], 'city' => $i['city']));
                }
                $core->tpl->output('track');
            }
            $core->_die();
    }
    return false;
}