Example #1
0
 /**
  *
  * @param  array $params Required field warehouse_id, product_id, qty
  * Optional field app, reff_id, uom_id, item_value
  * @return boolean
  * @throws UserException
  */
 public function updateStock($params)
 {
     $stock = MProductStock::findOne(['warehouse_id' => $params['warehouse_id'], 'product_id' => $params['product_id']]);
     if (isset($params['uom_id'])) {
         $qty_per_uom = ProductUom::find()->select('isi')->where(['product_id' => $params['product_id'], 'uom_id' => $params['uom_id']])->scalar();
         if ($qty_per_uom === false) {
             throw new NotFoundException("Uom '{$params['uom_id']}' not found for product '{$params['product_id']}'");
         }
     } else {
         $qty_per_uom = 1;
     }
     if (!$stock) {
         $stock = new MProductStock(['warehouse_id' => $params['warehouse_id'], 'product_id' => $params['product_id'], 'qty' => 0]);
     }
     // update cogs
     if (isset($params['price']) && $params['price'] !== '') {
         $params['qty_per_uom'] = $qty_per_uom;
         $this->updateCogs($params);
     }
     $stock->qty = $stock->qty + $params['qty'] * $qty_per_uom;
     if ($stock->canSetProperty('logParams')) {
         $logParams = ['mv_qty' => $params['qty'] * $qty_per_uom];
         foreach (['app', 'reff_id'] as $key) {
             if (isset($params[$key]) || array_key_exists($key, $params)) {
                 $logParams[$key] = $params[$key];
             }
         }
         $stock->logParams = $logParams;
     }
     if (!$stock->save()) {
         throw new UserException(implode(",\n", $stock->firstErrors));
     }
     return true;
 }