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)); } } }
} 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) {
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'); }
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); } } }
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; }