engine = $engine; $this->article = $article; $this->formelCalc = new Formel($engine, $article); } public function calc() { $price = 0; /** @var Base $option */ foreach($this->article->getOptions() as $option) { if($option instanceof PaperDbSelect) { /** @var Select\Opt $opt */ foreach($option->getOptions() as $opt) { if ($opt->isValid() && $opt->isSelected()) { /** @var Paper $paper */ $paper = $this->engine->getPaperRepository()->findOneBy(['artNr' => $opt->getId()]); $this->engine->setVariable($option->getId().'_digital_fix', $paper->getDigitalFix()); $this->engine->setVariable($option->getId().'_digital_var', $paper->getDigitalVar()); $this->engine->setVariable($option->getId().'_value', $paper->getPreis()); $this->engine->setVariable($option->getId().'_volume', $paper->getVolume()); } } }elseif($option instanceof Select) { /** @var Select\Opt $opt */ foreach($option->getOptions() as $opt) { if($opt->isValid() && $opt->isSelected()) { $price = $this->parseEdgeCollection($price, $option, $opt->getEdgesCollectionContainer()); } } } $price = $this->parseEdgeCollection($price, $option, $option->getEdgesCollectionContainer()); } return $price; } /** * @param $price * @param Base $option * @param EdgeCollectionContainer $container * @return int */ private function parseEdgeCollection($price, $option, EdgeCollectionContainer $container) { $calcValue1 = 0; $calcValue2 = 0; $calcValueAccount1 = 0; $calcValueAccount2 = 0; /** @var EdgeCollection $collection */ foreach($container as $collection) { if($collection->getName() == "opt") continue; if($collection->getFormel() != "") { $formel = $this->formelCalc->parse($collection->getFormel()); eval('$var = ' . $formel . ';'); }else{ $var = $this->engine->getVariables()[$collection->getName()]; } /** @var Edge $edge */ foreach($collection as $edge) { if($edge->isValid($var)) { if($edge->getPauschale() != 0) { eval('$price += ' . $edge->getPauschale() . ';'); } if($edge->getPreis() != 0) { eval('$price += ' . ($edge->getPreis()*$var) . ';'); } if($edge->getCalcValue() != "") { $cv = $this->formelCalc->parse($edge->getCalcValue()); eval('$cv = ' . $cv . ';'); $this->engine->addCalcVariable($option->getId() . '_' . $collection->getName(), $cv); } if($edge->getFormel() != "") { $formel = $this->formelCalc->parse($edge->getFormel()); if ($formel != "" && $option->getId() != 'weight' && !$option->isAjaxExport()) { $p = 0; eval('@$p = ' . $formel . ';'); if($p > 0) { $price += $p; } $this->engine->setVariable('price', $price); } } } } } return $price; } }