public function testMultiLevel() { $formula = new Formula('{{key}} key {{subformula2}} {{subformula1}} {{subformula2}} {{anotherone}}'); $formula->setSubFormula('subformula1', new Formula('{{key}} and {{sf3}}')); $formula->setSubFormula('subformula2', new Formula('{{sf2}}')); $formula->setSubFormula('subformula3', new Formula('UNUSED')); $formula->setParameter('key', 'VIC'); $formula->setParameter('value', 'MCKEY'); $formula->setParameter('sf2', 'valuesf2'); $formula->setParameter('sf3', 'valuesf3'); $renderer = new StrtrFormulaRendererModel(); $this->phpString($renderer->render($formula, $formula->parse()))->isEqualTo('VIC key valuesf2 VIC and valuesf3 valuesf2 {{anotherone}}'); }
public function validateFormula($attribute, $params) { if (!empty($this->{$attribute})) { $formula = new Formula($this->{$attribute}, Formula::CALCULABLE); $formula->setParameter('var_purchase_price', 100); // $formula->setIsCalculable(true); if (!$formula->render()) { $this->addError($attribute, 'Incorrect formula.'); } } }
protected function calculateFormula($model) { if (!empty($model->store->formula_purchase_p) && !empty($model->purchase_price)) { $formula = new Formula($model->store->formula_purchase_p, Formula::CALCULABLE); $formula->setParameter('var_purchase_price', $model->purchase_price); $formula->setIsCalculable(true); if ($formula->render()) { $model->sale_price = round($formula->render(), $model->store->round_purchase_p_precision, constant($model->store->round_purchase_p_mode)); $model->total_price = $model->sale_price + $model->shipping_price; $model->update(); } } }