/** * Delete stock with or not recounting total counter of skus * * @param int $stock_id * @param boolean $recount */ public function deleteStock($stock_id, $recount = true) { $stock_id = (int) $stock_id; $stock_model = new shopStockModel(); $stock = $stock_model->getById($stock_id); $stock_name = $stock ? $stock['name'] : ''; if ($stock_id) { if ($recount) { $sql = "UPDATE `shop_product_skus` s\n JOIN `{$this->table}` ps ON s.id = ps.sku_id\n SET s.count = s.count - ps.count\n WHERE ps.stock_id = {$stock_id}"; if (!$this->exec($sql)) { return false; } $sql = "UPDATE `shop_product` p\n JOIN (\n SELECT product_id, SUM(count) count\n FROM {$this->table}\n WHERE stock_id = {$stock_id}\n GROUP BY product_id\n ) AS ps ON p.id = ps.product_id\n SET p.count = p.count - ps.count"; if (!$this->exec($sql)) { return false; } $product_model = new shopProductModel(); $product_model->correctCount(); } $log_model = new shopProductStocksLogModel(); $log_model->updateByField(array('stock_id' => $stock_id), array('stock_id' => null, 'stock_name' => $stock_name)); return $this->deleteByField('stock_id', $stock_id); } return false; }