public function save($runValidation = true, $attributes = NULL) { if ($this->isNewRecord) { parent::save($runValidation, $attributes); } $finv_id = $this->finv_id; //$this->unsetAttributes(); //$this->refresh(); $this->finv_amt = 0; $this->finv_total = 0; $this->finv_vat = 0; $criteria = new CDbCriteria(); $criteria->compare('t.fiit_finv_id', $finv_id); $fiits = FiitInvoiceItem::model()->findAll($criteria); foreach ($fiits as $fiit) { if (empty($fiit->fiit_price) || empty($fiit->fiit_quantity)) { continue; } $fiit->fiit_amt = round($fiit->fiit_price * $fiit->fiit_quantity, 2); $fiit->fiit_vat = 0; if (!empty($fiit->fiit_fvat_id)) { $fiit->fiit_vat = round($fiit->fiit_amt * $fiit->fiitFvat->fvat_rate / 100, 2); } $fiit->fiit_total = $fiit->fiit_amt + $fiit->fiit_vat; try { // don't use $fiit->save() there it will run infinite loop if (!$fiit->saveWithoutRecalc()) { $this->addError('fiit_id', Yii::t('D2finvModule.model', 'Can not update invoice item!')); return FALSE; } } catch (Exception $e) { $this->addError('', $e->getMessage()); return FALSE; } $this->finv_amt += $fiit->fiit_amt; $this->finv_total += $fiit->fiit_total; $this->finv_vat += $fiit->fiit_vat; } $this->finv_basic_amt = Yii::app()->currency->convertToBase($this->finv_amt, $this->finv_fcrn_id, $this->finv_date); $this->finv_basic_total = Yii::app()->currency->convertToBase($this->finv_total, $this->finv_fcrn_id, $this->finv_date); $this->finv_basic_vat = Yii::app()->currency->convertToBase($this->finv_vat, $this->finv_fcrn_id, $this->finv_date); try { if (!parent::save()) { $this->addError('finv_id', Yii::t('D2finvModule.model', 'Can not update invoice!')); return FALSE; } } catch (Exception $e) { $this->addError('finv_id', $e->getMessage()); return FALSE; } return TRUE; }