Пример #1
0
 /**
  * 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;
 }