Exemplo n.º 1
0
 /**
  * Insert to log info about moving
  * @param int $stock_id
  * @param int|null $chunk_size Insert items by chunks of this size. If null make insert at a time
  */
 private function logMove($src_id, $dst_id, $chunk_size = 100)
 {
     if ($chunk_size !== null && $chunk_size <= 0) {
         return;
     }
     $stock_model = new shopStockModel();
     $src_stock = $stock_model->getById($src_id);
     $dst_stock = $stock_model->getById($dst_id);
     $src_name = $src_stock ? '@' . $src_stock['name'] : '';
     $dst_name = $dst_stock ? '@' . $dst_stock['name'] : '';
     $log_model = new shopProductStocksLogModel();
     $sql = "SELECT COUNT(src.stock_id) FROM `shop_product_stocks` src\n            LEFT JOIN `shop_product_stocks` dst ON dst.sku_id = src.sku_id AND \n                dst.stock_id = {$dst_id}\n            WHERE src.stock_id = {$src_id}";
     $total_count = (int) $this->query($sql)->fetchField();
     if ($chunk_size === null) {
         $chunk_size = $total_count;
     }
     for ($offset = 0; $offset < $total_count; $offset += $chunk_size) {
         $data_1 = array();
         $data_2 = array();
         $sql = "SELECT \n                    src.sku_id, src.product_id, src.count AS src_count,\n                    dst.count AS dst_count\n                FROM `shop_product_stocks` src\n                LEFT JOIN `shop_product_stocks` dst ON dst.sku_id = src.sku_id AND \n                    dst.stock_id = {$dst_id}\n                WHERE src.stock_id = {$src_id}\n                ORDER BY src.sku_id\n                LIMIT {$offset}, {$chunk_size}";
         foreach ($this->query($sql) as $row) {
             if ($row['src_count'] == 0) {
                 // nothing to move, ignore insert to log
                 continue;
             }
             $data_1[] = array('product_id' => $row['product_id'], 'sku_id' => $row['sku_id'], 'stock_id' => $src_id, 'before_count' => $row['src_count'], 'after_count' => 0, 'diff_count' => -$row['src_count'], 'type' => shopProductStocksLogModel::TYPE_STOCK, 'datetime' => date('Y-m-d H:i:s'));
             $data_2[] = array('product_id' => $row['product_id'], 'sku_id' => $row['sku_id'], 'stock_id' => $dst_id, 'before_count' => $row['dst_count'], 'after_count' => $row['src_count'] + (int) $row['dst_count'], 'diff_count' => $row['src_count'], 'type' => shopProductStocksLogModel::TYPE_STOCK, 'datetime' => date('Y-m-d H:i:s'));
         }
         $log_model->multipleInsert($data_1);
         $log_model->multipleInsert($data_2);
     }
 }
Exemplo n.º 2
0
 public function execute()
 {
     $id = $this->get('id', true);
     $stock_model = new shopStockModel();
     $stock = $stock_model->getById($id);
     if (!$stock) {
         throw new waAPIException('invalid_param', 'Stock not found', 404);
     }
     $this->response = $stock;
 }
Exemplo n.º 3
0
 public function getStocks($stock_ids)
 {
     if (!$stock_ids) {
         return array();
     }
     $model = new shopStockModel();
     return $model->getById($stock_ids);
 }