diff --git a/src/Calc/CalcValues.php b/src/Calc/CalcValues.php
index 3132eec..c89f4a5 100644
--- a/src/Calc/CalcValues.php
+++ b/src/Calc/CalcValues.php
@@ -55,12 +55,12 @@ class CalcValues
/** @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->getId(), $opt->getEdgesCollectionContainer());
}
}
}
- $this->parseEdgeCollection($price, $option, $option->getEdgesCollectionContainer());
+ $this->parseEdgeCollection($price, $option->getId(), $option->getEdgesCollectionContainer());
}
@@ -69,11 +69,11 @@ class CalcValues
/**
* @param $price
- * @param Base $option
+ * @param id
* @param EdgeCollectionContainer $container
* @return int
*/
- private function parseEdgeCollection($price, $option, EdgeCollectionContainer $container)
+ private function parseEdgeCollection($price, $id, EdgeCollectionContainer $container, $isSub = false)
{
$calcValue1 = 0;
@@ -99,9 +99,16 @@ class CalcValues
if($edge->getCalcValue() != "") {
$cv = $this->formelCalc->parse($edge->getCalcValue());
eval('$cv = ' . $cv . ';');
- $this->engine->addCalcVariable($option->getId() . '_' . $collection->getName(), $cv);
- }
+ if($isSub) {
+ $this->engine->addCalcVariable($id, $cv);
+ }else{
+ $this->engine->addCalcVariable($id . '_' . $collection->getName(), $cv);
+ }
+ }
+ if($edge->getEdgesCollectionContainer()->count() > 0) {
+ $this->parseEdgeCollection($price, $id . '_' . $collection->getName(), $edge->getEdgesCollectionContainer(), true);
+ }
}
}
diff --git a/src/General/Parser/Edge.php b/src/General/Parser/Edge.php
index d1af096..dac9371 100644
--- a/src/General/Parser/Edge.php
+++ b/src/General/Parser/Edge.php
@@ -38,19 +38,28 @@ class Edge
$edge->setPauschale(floatval($this->node->attributes()->pauschale));
}
- $value = (string)$this->node;
- if(preg_match("/^([0-9a-zA-Z_]+)$/", trim($value), $regs)) {
- $edge->setValues([$regs[1]]);
- }elseif(preg_match("/^([0-9]+)-([0-9]+)$/", trim($value), $regs)) {
- $edge->setRegion(true);
- $edge->setFrom(intval($regs[1]));
- $edge->setTo(intval($regs[2]));
- }elseif(preg_match("/^([0-9]+)-$/", trim($value), $regs)) {
- $edge->setRegion(true);
- $edge->setFrom(intval($regs[1]));
- }elseif(strpos(trim($value), ",") !== false) {
- $values = explode(",", trim($value));
- $edge->setValues($values);
+ if(isset($this->node->attributes()->value) && $this->node->children()) {
+ $edge->setValues([(string)$this->node->attributes()->value]);
+ if($this->node->children()) {
+ $edgeCollectionContainerParser = new EdgeCollectionContainer($this->node);
+ $edge->setEdgesCollectionContainer($edgeCollectionContainerParser->parse());
+ }
+ }else {
+
+ $value = (string)$this->node;
+ if (preg_match("/^([0-9a-zA-Z_]+)$/", trim($value), $regs)) {
+ $edge->setValues([$regs[1]]);
+ } elseif (preg_match("/^([0-9]+)-([0-9]+)$/", trim($value), $regs)) {
+ $edge->setRegion(true);
+ $edge->setFrom(intval($regs[1]));
+ $edge->setTo(intval($regs[2]));
+ } elseif (preg_match("/^([0-9]+)-$/", trim($value), $regs)) {
+ $edge->setRegion(true);
+ $edge->setFrom(intval($regs[1]));
+ } elseif (strpos(trim($value), ",") !== false) {
+ $values = explode(",", trim($value));
+ $edge->setValues($values);
+ }
}
return $edge;
diff --git a/src/General/Type/Edge.php b/src/General/Type/Edge.php
index 677af9a..1784bf8 100644
--- a/src/General/Type/Edge.php
+++ b/src/General/Type/Edge.php
@@ -14,6 +14,14 @@ class Edge
protected $region = false;
+ /** @var EdgeCollectionContainer */
+ protected $edgesCollectionContainer = null;
+
+ public function __construct()
+ {
+ $this->edgesCollectionContainer = new EdgeCollectionContainer();
+ }
+
/**
* @return string
*/
@@ -168,4 +176,20 @@ class Edge
return false;
}
+
+ /**
+ * @return EdgeCollectionContainer
+ */
+ public function getEdgesCollectionContainer()
+ {
+ return $this->edgesCollectionContainer;
+ }
+
+ /**
+ * @param EdgeCollectionContainer $edgesCollectionContainer
+ */
+ public function setEdgesCollectionContainer($edgesCollectionContainer)
+ {
+ $this->edgesCollectionContainer = $edgesCollectionContainer;
+ }
}
\ No newline at end of file
diff --git a/tests/Complex/SecondTest.php b/tests/Complex/SecondTest.php
new file mode 100644
index 0000000..c6c1723
--- /dev/null
+++ b/tests/Complex/SecondTest.php
@@ -0,0 +1,48 @@
+parse(simplexml_load_string(file_get_contents(__DIR__ . '/../TestFiles/Complex2/papierContainer.xml')));
+
+ $this->engine = new Engine();
+ $this->engine->setPaperContainer($paperContainer);
+ $this->engine->setPaperRepository($repository);
+ $this->engine->setFormulas(file_get_contents(__DIR__.'/../TestFiles/Complex2/formels.txt'));
+ $this->engine->setParameters(file_get_contents(__DIR__.'/../TestFiles/Complex2/parameters.txt'));
+
+ $this->engine->loadString(file_get_contents(__DIR__ . '/../TestFiles/Complex2/1.xml'));
+
+ }
+
+ public function tearDown()
+ {
+ $this->engine = null;
+ }
+
+ public function testIfArticleCountIsCorrect()
+ {
+ $this->assertEquals(1, $this->engine->getArticles()->Count());
+ }
+
+ public function testIfDefaultPriceIsOk()
+ {
+ $this->assertEquals(328.53 , $this->engine->getPrice());
+ }
+}
\ No newline at end of file
diff --git a/tests/Mock/PaperRepostory.php b/tests/Mock/PaperRepostory.php
index d62ae91..d952a9c 100644
--- a/tests/Mock/PaperRepostory.php
+++ b/tests/Mock/PaperRepostory.php
@@ -170,6 +170,14 @@ class PaperRepostory implements ObjectRepository
$papier['CONG300_1']->setDescription1('300 g/m² Naturkarton gerippt hochweiß');
$papier['CONG300_1']->setDescription2('300 g/m² Conqueror gerippt diamantweiß');
+ $papier['grasnatur85'] = new Paper();
+ $papier['grasnatur85']->setArtNr('grasnatur85');
+ $papier['grasnatur85']->setGrammatur('85');
+ $papier['grasnatur85']->setPreis('160');
+ $papier['grasnatur85']->setVolume('1.2');
+ $papier['grasnatur85']->setDescription1('Graspapier 50% Faseranteil (85 g/m²)');
+ $papier['grasnatur85']->setDescription2('Graspapier 50% Faseranteil (85 g/m²)');
+
return $papier[$criteria['artNr']];
diff --git a/tests/Recursiv/FirstTest.php b/tests/Recursiv/FirstTest.php
new file mode 100644
index 0000000..988c44c
--- /dev/null
+++ b/tests/Recursiv/FirstTest.php
@@ -0,0 +1,45 @@
+parse(simplexml_load_string(file_get_contents(__DIR__ . '/../TestFiles/Recursiv/papierContainer.xml')));
+
+ $this->engine = new Engine();
+ $this->engine->setPaperContainer($paperContainer);
+ $this->engine->setPaperRepository($repository);
+ $this->engine->setFormulas(file_get_contents(__DIR__.'/../TestFiles/Recursiv/formels.txt'));
+ $this->engine->setParameters(file_get_contents(__DIR__.'/../TestFiles/Recursiv/parameters.txt'));
+
+ $this->engine->loadString(file_get_contents(__DIR__ . '/../TestFiles/Recursiv/1.xml'));
+
+ }
+
+ public function tearDown()
+ {
+ $this->engine = null;
+ }
+
+ public function testIfArticleCountIsCorrect()
+ {
+ $this->assertEquals(1, $this->engine->getArticles()->Count());
+ $this->engine->getPrice();
+ }
+
+}
\ No newline at end of file
diff --git a/tests/TestFiles/Complex2/1.xml b/tests/TestFiles/Complex2/1.xml
new file mode 100644
index 0000000..e605043
--- /dev/null
+++ b/tests/TestFiles/Complex2/1.xml
@@ -0,0 +1,565 @@
+
+
+
+ Plakate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/TestFiles/Complex2/formels.txt b/tests/TestFiles/Complex2/formels.txt
new file mode 100644
index 0000000..9db7d27
--- /dev/null
+++ b/tests/TestFiles/Complex2/formels.txt
@@ -0,0 +1,145 @@
+// Grasdruckerei
+//Farbkostenberechnung pro Seite auf Basis A4=100%
+$farbe_a4='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P)';
+$farbe_a5='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_a5$P)';
+$farbe_a6='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_a6$P)';
+$farbe_a7='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_a7$P)';
+$farbe_dl='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_dl$P)';
+$farbe_210='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_210$P)';
+$farbe_148='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_148$P)';
+$farbe_a3='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_a3$P)';
+$farbe_a2='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_a2$P)';
+$farbe_a1='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_a1$P)';
+$farbe_3b='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_3b$P)';
+$farbe_vk2='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_vk2$P)';
+$farbe_vk4='($Vauflage$V*$Vseitenzahl$V*$Pfarbkst$P*$Pfarbe_faktor_vk4$P)';
+
+//#########################
+
+//Flyer
+$flyer40='($Pflyerklick$P*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V)';
+$flyer44='($Pflyerklick$P*2*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V)';
+$fflyer44='($Pfflyerklick$P*2*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V)';
+
+// Karten
+$weihnachtskarte2s='((0.5*$Vauflage$V)+(5))/1.19';
+$weihnachtskarte4s='((1.5*$Vauflage$V)+(5))/1.19';
+$karte40='($Pkarteklick$P*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V)';
+$karte44='($Pkarteklick$P*2*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V)';
+$faltkarte44='($Pfkarteklick$P*2*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V)';
+$einleger='($Pflyerklick$P*2*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V)';
+$planonut='$pnuten+($Vauflage$V*$pnut$P)';
+$geschlossennut='$pnuten+($Vauflage$V*$pnutgeschlossen$P)';
+
+//kalender
+$kalendera5='($Vauflage$V*$Vseiten$V*.3)+($Vauflage$V*6.96)+5';
+$kalendera4='($Vauflage$V*$Vseiten$V*.5)+($Vauflage$V*7.96)+5';
+$kalendera3='($Vauflage$V*$Vseiten$V*.75)+($Vauflage$V*9.2)+5';
+
+//Bogen
+$bogen40='($Pfarbdruck1$P*$Vauflage$V*$Vsorten$V)+($Vpapier_value$V*$Vauflage$V)';
+$bogen44='($Pflyerklick$P*2*$Vauflage$V*$Vsorten$V)+($Vpapier_value$V*$Vauflage$V)';
+// Visitenkarte einseitig doppelseitigKlappvisitenkarten
+$vk40='$Pvkpauschale$P+($Pvisitenkarte$P*$Vauflage$V/10)+(($Vpapier_value$V*$Vauflage$V)/20)';
+$vk44='$Pvkpauschale$P+($Pvisitenkarte$P*$Vauflage$V*2/10)+(($Vpapier_value$V*$Vauflage$V)/20)';
+$vkk44='20+($Pvisitenkartek$P*$Vauflage$V)*4+$Pvkpauschale$P+($Vpapier_value$V/10*$Vauflage$V)+($Pnut$P*$Vauflage$V)+(($Vpapier_value$V*$Vauflage$V)/20)';
+
+// Poster
+$rahmen='((((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V))/10000)*30.5)+($Vauflage$V*15)';
+$poster='2.5+(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pposterqm1$P)/10000)';
+$postera1='(($Pposterqm1$P/2)*$Vauflage$V)+$Pposterpauschale$P';
+$fhhpostera1='(($Pposterqm1$P/2)*$Vmenge$V)';
+$postera0='(($Pposterqm1$P/1)*$Vauflage$V)+$Pposterpauschale$P';
+
+//plakat
+$plakata3='(0.25*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V)+19.8';
+$plakata4='(0.15*$Vauflage$V)+($Vpapier_value$V*$Vauflage$V/2)+19.9';
+$plakat160='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pplakat160qm1$P)/10000)+$Pplakatpauschale$P';
+$plakat140='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pplakat140qm1$P)/10000)';
+$plakat80='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pplakat80qm1$P)/10000)';
+
+
+//Leinwand
+$leinwand='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*70)/10000)';
+$leisten='((tonumber($Vkurz$V)+tonumber($Vlang$V)*$Vauflage$V)*2)*5.5/100';
+$aufziehen='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*40)/10000)+(5*$Vauflage$V)';
+
+//Banner
+$banner='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pbannerqm$P)/10000)';
+$mesh='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pmeshqm$P)/10000)';
+$blockout='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pblockoutqm$P)/10000)';
+$pp='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pppqm$P)/10000)';
+$lamprotect='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*30)/10000)';
+$solprotect='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*12)/10000)';
+$solprotectmm='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*12)/1000000)';
+$oesen='((tonumber($Vkurz$V)+tonumber($Vlang$V)*$Vauflage$V)*2)/50';
+
+// Tapete
+$tapete='(((tonumber($Vkurz$V)*tonumber($Vlang$V))*$Vauflage$V)*(44.5)/10000)';
+
+//Klebefolie
+
+$cutfolie='(((tonumber($Vkurz$V+1)*tonumber($Vlang$V+1)*$Vauflage$V)*$Pcutfolieqm$P)/10000)+$Pcutfoliepausch$P';
+$cuttransfer='(((tonumber($Vkurz$V+1)*tonumber($Vlang$V+1)*$Vauflage$V)*$Pcuttransferqm$P)/10000)';
+$aufkleber='(((tonumber($Vkurz$V+1)*tonumber($Vlang$V+1)*$Vauflage$V)*$Paufkleberqm$P)/1000000)+25';
+$klebefolie='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pklebefolieqm$P)/10000)';
+$diafilm='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*(70))/10000)';
+
+//Plotten
+$pltfarbe='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pplotfarbe$P)/1000000)';
+$pltsw='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pplotsw$P)/1000000)';
+$pltfarbefl='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pplotfarbefl$P)/1000000)';
+//Laminieren
+$laminierenposter='(((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Plaminieren$P)/10000)';
+//Kaschieren
+$kaschieren3hsposter='((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pk3hs$P)/10000+$Pruestkosten$P';
+$kaschieren5hsposter='((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pk5hs$P)/10000+$Pruestkosten$P';
+$kaschieren5fsposter='((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pk5fs$P)/10000+$Pruestkosten$P';
+$kaschieren5hsposter='((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pk5fs$P)/10000+$Pruestkosten$P';
+$kaschieren10fsposter='((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pk10fs$P)/10000+$Pruestkosten$P';
+$kaschierenaluposter='((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pkalu$P)/10000+$Pruestkosten$P';
+$kaschierenalufolie='((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pkalu$P)/11000';
+
+$kaschieren3hs='((tonumber($Vkurz$V)*tonumber($Vlang$V)*$Vauflage$V)*$Pkaschieren3hs$P)/10000+$Pruestkosten$P';
+$kaschieren5hs='(($Vauflage$V)*$Pk5hs$P)/10000+$Pruestkosten$P';
+$kaschieren10hs='(($Vauflage$V)*$Pk10hs$P)/10000+$Pruestkosten$P';
+$kaschieren5fs='(($Vauflage$V)*$Pk5fs$P)/10000+$Pruestkosten$P';
+$kaschieren10fs='(($Vauflage$V)*$Pk10fs$P)/10000+$Pruestkosten$P';
+$kaschierenalu='(($Vauflage$V)*$Pkalu$P)/10000+$Pruestkosten$P';
+
+//RollUpbasic
+$rollbasic='(144.35/1.19*$Vauflage$V)';
+
+// Cellophanieren
+$cello='10+$Pcello$P*$Vauflage$V';
+$cellodps='10+$Pcello$P*2*$Vauflage$V';
+$formelvkcello='5+($Pcello$P*$Vauflage$V/20)';
+
+//Taschenlaminat
+$formeltl='$Ptaschenlaminieren3$P*$Vauflage$V';
+
+//eckenrunden
+$formel7='$Peckenrundeneinrichten$P+($Peckenrunden$P*$Vauflage$V)';
+//Falten
+$falten='$Pfalte$P*$Vauflage$V';
+//nuten
+$nutplano='$Pnuten$P+($Pnut$P*$Vauflage$V)';
+// nuten für kombiartikel
+$nutplan='($Pnut$P*$Vauflage$V)';
+$nutzu='$Pnuten$P+($Pnutgeschlossen$P*$Vauflage$V)';
+//heften
+$heften='10+(0.15*$Vauflage$V)';
+
+//Briefpapier
+$briefpapier='($Vauflage$V*0.10)+25+($Vpapier_value$V/2*$Vauflage$V)';
+
+// Zeitungen
+// abizeitung
+$abi_a4_sw='($Vauflage$V*$Vswseiten$V)*0.025)+($Vauflage$V*.08)';
+//Schuelerzeitung
+$sza5fc='($Vauflage$V*0.6)+10+(($Vauflage$V*$Vswswseiten$V)*0.015)+($Vauflage$V*0.15)+($Vpapier_value$V/2*$Vauflage$V*$Vswswseiten$V)+($Vauflage$V/2*$Vumschlag_value$V)';
+$sza4fc='($Vauflage$V*0.6)+10+(($Vauflage$V*$Vswswseiten$V)*0.025)+($Vauflage$V*0.15)+($Vpapier_value$V/2*$Vauflage$V*$Vswswseiten$V)+($Vauflage$V/2*$Vumschlag_value$V)';
+$sza5='10+(($Vauflage$V*$Vswswseiten$V)*0.015)+($Vauflage$V*0.15)+($Vpapier_value$V/4*$Vauflage$V*$Vswswseiten$V)+($Vauflage$V/4*$Vumschlag_value$V)';
+$sza4='10+(($Vauflage$V*$Vswswseiten$V)*0.025)+($Vauflage$V*0.15)+($Vpapier_value$V/2*$Vauflage$V*$Vswswseiten$V)+($Vauflage$V/2*$Vumschlag_value$V)';
+$sz4ca5='10+(($Vauflage$V*$Vswswseiten$V)*0.15)+($Vauflage$V*0.15)+($Vpapier_value$V/4*$Vauflage$V*$Vswswseiten$V)+($Vauflage$V/4*$Vumschlag_value$V)';
+$sz4ca4='10+(($Vauflage$V*$Vswswseiten$V)*0.25)+($Vauflage$V*0.15)+($Vpapier_value$V/2*$Vauflage$V*$Vswswseiten$V)+($Vauflage$V/2*$Vumschlag_value$V)';
\ No newline at end of file
diff --git a/tests/TestFiles/Complex2/papierContainer.xml b/tests/TestFiles/Complex2/papierContainer.xml
new file mode 100644
index 0000000..f0bd1e9
--- /dev/null
+++ b/tests/TestFiles/Complex2/papierContainer.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/TestFiles/Complex2/parameters.txt b/tests/TestFiles/Complex2/parameters.txt
new file mode 100644
index 0000000..f1b5095
--- /dev/null
+++ b/tests/TestFiles/Complex2/parameters.txt
@@ -0,0 +1,140 @@
+//Grasdruckerei
+
+//Stundensätze Druckmaschinen
+$stundensatz_sm52=85;
+$stundensatz_sm102_extern=160;
+
+//Leistungswerte Maschinen (Stück/h)
+$sm52_speed=5000;
+$sm102_fremd_speed=8000;
+$falzen_speed=5000;
+$falzen_speed_mit_nuten=3000;
+
+//Sammelhefter intern
+$heften_intern_fix=25;
+$heften_intern_var=0.30;
+
+//Sammelhefter extern
+$stundensatz_sammelhefter=120;
+$sammelhefter_speed=4500;
+
+//Sammelhefter Rüsten in Minuten
+$sammelhefter_ruesten=0.25;
+
+//Klebebindung
+$kb_intern_fix=30;
+$kb_intern_var=0.55;
+
+//Klebebinder extern
+$stundensatz_kb=180;
+$kb_speed=2300;
+
+//Klebebinder Rüsten in Minuten
+$kb_ruesten=0.5;
+
+//Wire-O
+$wireo_fix=7;
+$wireo_var=1.5;
+
+//Plattenkosten
+$platten_sm52=8;
+$platten_sm102=35;
+
+//Rüsten pro Platte (in Euro)
+$ruesten_sm52=8;
+$ruesten_sm102=30;
+
+$av_stundensatz=58;
+$dtp_stundensatz=75;
+
+//Farbkosten pro Seite A4
+$farbkst=0.000800;
+
+//Formatfaktor auf Basis A4 = 100% für Farbkostenberechnung
+$farbe_faktor_a5=0.5;
+$farbe_faktor_a6=0.25;
+$farbe_faktor_a7=0.125;
+$farbe_faktor_dl=0.3;
+$farbe_faktor_210=0.67;
+$farbe_faktor_148=0.4;
+$farbe_faktor_a3=2;
+$farbe_faktor_a2=4;
+$farbe_faktor_a1=8;
+$farbe_faktor_3b=10;
+$farbe_faktor_vk2=0.1;
+$farbe_faktor_vk4=0.2;
+
+//Stundensätze Maschinen WV
+$falzen_horizon=65;
+$schneidemaschine=40;
+
+//Stundensätze Falzen extern
+$stundensatz_falzen_extern=90;
+$falzen_fremd_speed=5000;
+
+//Falzen extern Rüsten in Minuten
+$falzen_extern_ruesten=0.25;
+
+//Schneidemaschine Hubhöhe in mm
+$hubhoehe=150;
+
+//Anzahl Schnitte/h
+$schnitte_pro_stunde=120;
+
+//Zeiten WV (in Minuten)
+$falzen_ruesten=17;
+$nuten_ruesten=8;
+$schneiden_ruesten=2.5;
+
+//Zusätzliche Fixkosten WV
+$zus_falzbrueche=8;
+$zus_nutlinien=7;
+
+//Flyer
+$av_flyer_zeit=0.32;
+$dtp_flyer_zeit=0.17;
+$trockenzeit_flyer=5;
+
+//Broschüre
+$av_broschuere_zeit=0.40;
+$dtp_broschuere_zeit=0.30;
+$trockenzeit_broschuere=5; //prüfen, ob benötigt wird
+
+//Papierformate für Papierpreisberechnung
+$papierbreite_a3=470;
+$papierhoehe_a3=320;
+$papierbreite_a2=1020;
+$papierhoehe_a2=720;
+
+//Papierzuschlag für Vorschneiden bei Druck im A3 pro 100 kg
+$zuschlag_vorschneiden=16;
+$zuschuss_a3=10;
+$zuschuss_a2=100;
+
+//Klickkosten Digitaldruck
+$klickkosten_4c=0.088;
+$klickkosten_1c=0.037;
+$zuschuss_digital=10;
+
+//Blockleimung
+$blockleimung_fix=15;
+$blockleimung_var=0.30;
+
+//Verpacken
+$verpacken_pro_kg=0.12;
+
+//Verpackungsmaterial pro 6 kg
+$verpackungsmaterial=0.30;
+
+//Verpackungsgewichtsbasis in kg
+$verpackungsgewichtsbasis=6;
+
+//Korrekturabzug
+$laserproof=25;
+
+//Belegexemplar
+$belegexemplar=12;
+
+//Produktionszeit Faktor auf Wertschöpfung
+$oeko_faktor=0.95;
+$express_faktor=1.3;
diff --git a/tests/TestFiles/Recursiv/1.xml b/tests/TestFiles/Recursiv/1.xml
new file mode 100644
index 0000000..138c296
--- /dev/null
+++ b/tests/TestFiles/Recursiv/1.xml
@@ -0,0 +1,72 @@
+
+
+
+ Plakate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/TestFiles/Recursiv/formels.txt b/tests/TestFiles/Recursiv/formels.txt
new file mode 100644
index 0000000..e69de29
diff --git a/tests/TestFiles/Recursiv/papierContainer.xml b/tests/TestFiles/Recursiv/papierContainer.xml
new file mode 100644
index 0000000..f0bd1e9
--- /dev/null
+++ b/tests/TestFiles/Recursiv/papierContainer.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/TestFiles/Recursiv/parameters.txt b/tests/TestFiles/Recursiv/parameters.txt
new file mode 100644
index 0000000..e69de29