/** * 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); } }