Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.92 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * Created by PhpStorm.
  5. * User: snark | itfrogs.ru
  6. * Date: 1/22/16
  7. * Time: 2:22 AM
  8. */
  9. date_default_timezone_set('Europe/Moscow');
  10.  
  11. class shopPromscanCli extends waCliController
  12. {
  13. /**
  14. * @var shopPromPlugin $plugin
  15. * @var waConfig $config
  16. */
  17. public function execute()
  18. {
  19. $config = wa('shop')->getConfig();
  20. $from = $config->getGeneralSettings('email');
  21. $name = $config->getGeneralSettings('name');
  22.  
  23. $plugin = wa()->getPlugin('prom');
  24. $settings = $plugin->getSettings();
  25. $prom = new shopPromPluginApi($settings);
  26. $pom = new shopPromOrderModel();
  27. $spm = new shopProductModel();
  28. $order_model = new shopOrderModel();
  29. $items_model = new shopOrderItemsModel();
  30. $log_model = new shopOrderLogModel();
  31. $contact_model = new waContactModel();
  32. $shop_url = wa()->getRouteUrl('shop/frontend', true);
  33. $view = wa()->getView();
  34. $view->assign('shop_url', $shop_url);
  35. $order_url = wa()->getRouteUrl('/frontend/my/order/', true);
  36.  
  37. /*
  38. if (($settings['scan_timestamp'] + 60) > time()) {
  39. waLog::log('Попытка повторного запуска скрипта. Остановлено.', 'prom-new.log');
  40. exit('Скрипт еще работает.');
  41.  
  42. }
  43. */
  44.  
  45. $asm = new waAppSettingsModel();
  46. $asm->set(array('shop', 'prom'), 'check_timestamp', time());
  47.  
  48. $parameters = array(
  49. 'status' => 'pending',
  50. );
  51. $response = $prom->api('orders/list', $parameters);
  52. $orders = $response['orders'];
  53. $ids = array();
  54. foreach ($orders as $prom_order) {
  55. var_dump($prom_order);
  56. if ($prom_order['status'] == 'pending') {
  57. //сохраняем айдишники ожидающих заказов, чтобы потом поменять им статус на принятые
  58. $ids[] = $prom_order['id'];
  59.  
  60. $contact = $contact_model->getByEmail($prom_order['email']);
  61. $is_first = 0;
  62.  
  63. //Регистрируем юзера у себя, если его нет
  64. if (empty($contact)) {
  65. $contact = new waContact();
  66. $contact->set('firstname', $prom_order['client_first_name']);
  67. $contact->set('lastname', $prom_order['client_last_name']);
  68. $contact->set('email', $prom_order['email']);
  69. $contact->set('phone', $prom_order['phone']);
  70. $password = substr(md5(uniqid()), 0, 6);
  71. $contact->setPassword($password);
  72. $contact->save();
  73. $view->assign('email', $prom_order['email']);
  74. $view->assign('username', $contact->getName());
  75. $view->assign('password', $password);
  76.  
  77. $to = $prom_order['email'];
  78. $body = $view->fetch('string:' . $settings['customer_body']);
  79. $subj = $settings['customer_subj'];
  80. $is_first = 1;
  81.  
  82. try {
  83. $message = new waMailMessage($subj, $body);
  84. $message->addReplyTo($to);
  85. $message->setFrom($from, $name);
  86. $message->setTo($to);
  87. $status = $message->send();
  88.  
  89. if ($settings['mail_log'] == 1) {
  90. if ($status) {
  91. waLog::log(sprintf(_wp('Registration message to %s has been sent successfully'), $to), 'prom-mail.log');
  92. }
  93. else {
  94. waLog::log(sprintf(_wp('Registration message to %s not been sended'), $to), 'prom-mail.log');
  95. }
  96. }
  97. }
  98. catch (waException $e) {
  99. waLog::log(_wp('Error send email for new contact: ' . $prom_order['email']), 'prom-mail-error.log');
  100. waLog::log($e, 'prom-mail-error.log');
  101. }
  102.  
  103. }
  104.  
  105. //Если вдруг случайно мы поймали ордер, который уже есть в системе, пропускаем его
  106. $prom_order_link = $pom->getByField('prom_order_id', $prom_order['id']);
  107. if (!empty($prom_order_link)) {
  108. continue;
  109. }
  110.  
  111. $order = array(
  112. 'contact' => $contact,
  113. 'total' => floatval(rtrim(preg_replace('/[^0-9,.]/', '', $prom_order['price']), '.')),
  114. 'params' => array(
  115. 'shipping_address.street' => $prom_order['delivery_address'],
  116. ),
  117. 'contact_id' =>$contact['id'],
  118. 'create_datetime' => date('Y-m-d H:i:s'),
  119. 'currency' =>$settings['currency'],
  120. 'is_first' => $is_first,
  121. );
  122.  
  123. $order['id'] = $order_model->insert($order);
  124.  
  125. $items = array();
  126. foreach ($prom_order['products'] as $prom_product) {
  127. $product = $spm->getById($prom_product['external_id']);
  128. if (empty($product)) {
  129. $params = array(
  130. "status" => "canceled",
  131. "ids" => array($prom_order['id']),
  132. "cancellation_reason" => "not_available",
  133. "cancellation_text" => "",
  134. );
  135. $prom->api('orders/set_status', $params);
  136. $items = array();
  137. break;
  138. }
  139.  
  140. $prom_price = floatval(rtrim(preg_replace('/[^0-9,.]/', '', $prom_order['price']), '.'));
  141. if ($product['price'] > $prom_price) {
  142. $params = array(
  143. "status" => "canceled",
  144. "ids" => array($prom_order['id']),
  145. "cancellation_reason" => "less_than_minimal_price",
  146. "cancellation_text" => "",
  147. );
  148. $prom->api('orders/set_status', $params);
  149. $items = array();
  150. break;
  151. }
  152.  
  153. $item = array(
  154. 'order_id' => $order['id'],
  155. 'name' => $product['name'],
  156. 'product_id' => $product['id'],
  157. 'sku_id' => $product['sku_id'],
  158. 'type' => 'product',
  159. 'price' => $prom_price,
  160. 'quantity' => $prom_product['quantity'],
  161. );
  162. $item['id'] = $items_model->insert($item);
  163. $items[] = $item;
  164. $order['items'] = $items;
  165. }
  166.  
  167. if (empty($items)) {
  168. $this->deleteOrder($order);
  169. }
  170. else {
  171. try {
  172. $to = $prom_order['email'];
  173. $view->assign('email', $prom_order['email']);
  174. $view->assign('username', $contact['name']);
  175. $view->assign('order_url', $order_url . $order['id'] . '/');
  176.  
  177. $body = $view->fetch('string:' . $settings['order_body']);
  178. $subj = $settings['order_subj'];
  179. $message = new waMailMessage($subj, $body);
  180. $message->addReplyTo($to);
  181. $message->setFrom($from, $name);
  182. $message->setTo($to);
  183. $status = $message->send();
  184.  
  185. if ($settings['mail_log'] == 1) {
  186. if ($status) {
  187. waLog::log(sprintf(_wp('New order message to %s has been sent successfully'), $to), 'prom-mail.log');
  188. }
  189. else {
  190. waLog::log(sprintf(_wp('New order message to %s not been sended'), $to), 'prom-mail.log');
  191. }
  192. }
  193.  
  194. }
  195. catch (waException $e) {
  196. waLog::log(_wp('Error send email for new contact: ' . $prom_order['email']), 'prom-mail-error.log');
  197. waLog::log($e, 'prom-mail-error.log');
  198. }
  199.  
  200. $log = array(
  201. 'order_id' => $order['id'],
  202. 'contact_id' => $contact['id'],
  203. 'action_id' => 'create',
  204. 'datetime' => date('Y-m-d H:i:s'),
  205. 'before_state_id' => '',
  206. 'after_state_id' => 'new',
  207. 'text' => _wp('<i class="icon16 email"></i>Notification <strong>Order created from prom.ua</strong> sended to customer.'),
  208. );
  209. $log_model->insert($log);
  210.  
  211. if (!empty($prom_order['delivery_option'])) {
  212. $log['before_state_id'] = 'new';
  213. $log['text'] = _wp('Delivery option: ') . $prom_order['delivery_option'];
  214. $log_model->insert($log);
  215. }
  216. if (!empty($prom_order['payment_option'])) {
  217. $log['before_state_id'] = 'new';
  218. $log['text'] = _wp('Payment option: ') . $prom_order['payment_option'];
  219. $log_model->insert($log);
  220. }
  221.  
  222. $p_order = array(
  223. 'order_id' => $order['id'],
  224. 'prom_order_id' => $prom_order['id'],
  225. 'status' => 'received',
  226. );
  227. $pom->insert($p_order, 1);
  228. $params = array(
  229. "status" => "received",
  230. "ids" => array($prom_order['id']),
  231. );
  232. $r = $prom->api('orders/set_status', $params, 'array', 'post');
  233. var_dump($r);
  234. }
  235.  
  236. }
  237. }
  238. }
  239.  
  240. private function deleteOrder($order) {
  241. $order_model = new shopOrderModel();
  242. $items_model = new shopOrderItemsModel();
  243.  
  244. if (!empty($order['items'])) {
  245. $ids = array();
  246. foreach ($order['items'] as $item) {
  247. $ids[] = $item['id'];
  248. }
  249. $items_model->deleteById($ids);
  250. }
  251. if (isset($order['id'])) {
  252. $order_model->deleteById($order['id']);
  253. }
  254. }
  255.  
  256.  
  257. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement