Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Created by PhpStorm.
- * User: snark | itfrogs.ru
- * Date: 1/22/16
- * Time: 2:22 AM
- */
- date_default_timezone_set('Europe/Moscow');
- class shopPromscanCli extends waCliController
- {
- /**
- * @var shopPromPlugin $plugin
- * @var waConfig $config
- */
- public function execute()
- {
- $config = wa('shop')->getConfig();
- $from = $config->getGeneralSettings('email');
- $name = $config->getGeneralSettings('name');
- $plugin = wa()->getPlugin('prom');
- $settings = $plugin->getSettings();
- $prom = new shopPromPluginApi($settings);
- $pom = new shopPromOrderModel();
- $spm = new shopProductModel();
- $order_model = new shopOrderModel();
- $items_model = new shopOrderItemsModel();
- $log_model = new shopOrderLogModel();
- $contact_model = new waContactModel();
- $shop_url = wa()->getRouteUrl('shop/frontend', true);
- $view = wa()->getView();
- $view->assign('shop_url', $shop_url);
- $order_url = wa()->getRouteUrl('/frontend/my/order/', true);
- /*
- if (($settings['scan_timestamp'] + 60) > time()) {
- waLog::log('Попытка повторного запуска скрипта. Остановлено.', 'prom-new.log');
- exit('Скрипт еще работает.');
- }
- */
- $asm = new waAppSettingsModel();
- $asm->set(array('shop', 'prom'), 'check_timestamp', time());
- $parameters = array(
- 'status' => 'pending',
- );
- $response = $prom->api('orders/list', $parameters);
- $orders = $response['orders'];
- $ids = array();
- foreach ($orders as $prom_order) {
- var_dump($prom_order);
- if ($prom_order['status'] == 'pending') {
- //сохраняем айдишники ожидающих заказов, чтобы потом поменять им статус на принятые
- $ids[] = $prom_order['id'];
- $contact = $contact_model->getByEmail($prom_order['email']);
- $is_first = 0;
- //Регистрируем юзера у себя, если его нет
- if (empty($contact)) {
- $contact = new waContact();
- $contact->set('firstname', $prom_order['client_first_name']);
- $contact->set('lastname', $prom_order['client_last_name']);
- $contact->set('email', $prom_order['email']);
- $contact->set('phone', $prom_order['phone']);
- $password = substr(md5(uniqid()), 0, 6);
- $contact->setPassword($password);
- $contact->save();
- $view->assign('email', $prom_order['email']);
- $view->assign('username', $contact->getName());
- $view->assign('password', $password);
- $to = $prom_order['email'];
- $body = $view->fetch('string:' . $settings['customer_body']);
- $subj = $settings['customer_subj'];
- $is_first = 1;
- try {
- $message = new waMailMessage($subj, $body);
- $message->addReplyTo($to);
- $message->setFrom($from, $name);
- $message->setTo($to);
- $status = $message->send();
- if ($settings['mail_log'] == 1) {
- if ($status) {
- waLog::log(sprintf(_wp('Registration message to %s has been sent successfully'), $to), 'prom-mail.log');
- }
- else {
- waLog::log(sprintf(_wp('Registration message to %s not been sended'), $to), 'prom-mail.log');
- }
- }
- }
- catch (waException $e) {
- waLog::log(_wp('Error send email for new contact: ' . $prom_order['email']), 'prom-mail-error.log');
- waLog::log($e, 'prom-mail-error.log');
- }
- }
- //Если вдруг случайно мы поймали ордер, который уже есть в системе, пропускаем его
- $prom_order_link = $pom->getByField('prom_order_id', $prom_order['id']);
- if (!empty($prom_order_link)) {
- continue;
- }
- $order = array(
- 'contact' => $contact,
- 'total' => floatval(rtrim(preg_replace('/[^0-9,.]/', '', $prom_order['price']), '.')),
- 'params' => array(
- 'shipping_address.street' => $prom_order['delivery_address'],
- ),
- 'contact_id' =>$contact['id'],
- 'create_datetime' => date('Y-m-d H:i:s'),
- 'currency' =>$settings['currency'],
- 'is_first' => $is_first,
- );
- $order['id'] = $order_model->insert($order);
- $items = array();
- foreach ($prom_order['products'] as $prom_product) {
- $product = $spm->getById($prom_product['external_id']);
- if (empty($product)) {
- $params = array(
- "status" => "canceled",
- "ids" => array($prom_order['id']),
- "cancellation_reason" => "not_available",
- "cancellation_text" => "",
- );
- $prom->api('orders/set_status', $params);
- $items = array();
- break;
- }
- $prom_price = floatval(rtrim(preg_replace('/[^0-9,.]/', '', $prom_order['price']), '.'));
- if ($product['price'] > $prom_price) {
- $params = array(
- "status" => "canceled",
- "ids" => array($prom_order['id']),
- "cancellation_reason" => "less_than_minimal_price",
- "cancellation_text" => "",
- );
- $prom->api('orders/set_status', $params);
- $items = array();
- break;
- }
- $item = array(
- 'order_id' => $order['id'],
- 'name' => $product['name'],
- 'product_id' => $product['id'],
- 'sku_id' => $product['sku_id'],
- 'type' => 'product',
- 'price' => $prom_price,
- 'quantity' => $prom_product['quantity'],
- );
- $item['id'] = $items_model->insert($item);
- $items[] = $item;
- $order['items'] = $items;
- }
- if (empty($items)) {
- $this->deleteOrder($order);
- }
- else {
- try {
- $to = $prom_order['email'];
- $view->assign('email', $prom_order['email']);
- $view->assign('username', $contact['name']);
- $view->assign('order_url', $order_url . $order['id'] . '/');
- $body = $view->fetch('string:' . $settings['order_body']);
- $subj = $settings['order_subj'];
- $message = new waMailMessage($subj, $body);
- $message->addReplyTo($to);
- $message->setFrom($from, $name);
- $message->setTo($to);
- $status = $message->send();
- if ($settings['mail_log'] == 1) {
- if ($status) {
- waLog::log(sprintf(_wp('New order message to %s has been sent successfully'), $to), 'prom-mail.log');
- }
- else {
- waLog::log(sprintf(_wp('New order message to %s not been sended'), $to), 'prom-mail.log');
- }
- }
- }
- catch (waException $e) {
- waLog::log(_wp('Error send email for new contact: ' . $prom_order['email']), 'prom-mail-error.log');
- waLog::log($e, 'prom-mail-error.log');
- }
- $log = array(
- 'order_id' => $order['id'],
- 'contact_id' => $contact['id'],
- 'action_id' => 'create',
- 'datetime' => date('Y-m-d H:i:s'),
- 'before_state_id' => '',
- 'after_state_id' => 'new',
- 'text' => _wp('<i class="icon16 email"></i>Notification <strong>Order created from prom.ua</strong> sended to customer.'),
- );
- $log_model->insert($log);
- if (!empty($prom_order['delivery_option'])) {
- $log['before_state_id'] = 'new';
- $log['text'] = _wp('Delivery option: ') . $prom_order['delivery_option'];
- $log_model->insert($log);
- }
- if (!empty($prom_order['payment_option'])) {
- $log['before_state_id'] = 'new';
- $log['text'] = _wp('Payment option: ') . $prom_order['payment_option'];
- $log_model->insert($log);
- }
- $p_order = array(
- 'order_id' => $order['id'],
- 'prom_order_id' => $prom_order['id'],
- 'status' => 'received',
- );
- $pom->insert($p_order, 1);
- $params = array(
- "status" => "received",
- "ids" => array($prom_order['id']),
- );
- $r = $prom->api('orders/set_status', $params, 'array', 'post');
- var_dump($r);
- }
- }
- }
- }
- private function deleteOrder($order) {
- $order_model = new shopOrderModel();
- $items_model = new shopOrderItemsModel();
- if (!empty($order['items'])) {
- $ids = array();
- foreach ($order['items'] as $item) {
- $ids[] = $item['id'];
- }
- $items_model->deleteById($ids);
- }
- if (isset($order['id'])) {
- $order_model->deleteById($order['id']);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement