diff --git a/src/Calc/Valid.php b/src/Calc/Valid.php
index 96c584e..49326f4 100644
--- a/src/Calc/Valid.php
+++ b/src/Calc/Valid.php
@@ -3,11 +3,14 @@ namespace PSC\Library\Calc\Calc;
use PSC\Library\Calc\Article;
use PSC\Library\Calc\Engine;
+use PSC\Library\Calc\Error\Validation\Input\Max;
+use PSC\Library\Calc\Error\Validation\Input\Min;
use PSC\Library\Calc\General\Type\Edge;
use PSC\Library\Calc\General\Type\EdgeCollection;
use PSC\Library\Calc\General\Type\EdgeCollectionContainer;
use PSC\Library\Calc\Option\Type\Base;
use PSC\Library\Calc\Option\Type\Checkbox;
+use PSC\Library\Calc\Option\Type\Input;
use PSC\Library\Calc\Option\Type\Select;
class Valid
@@ -37,7 +40,18 @@ class Valid
/** @var Base $option */
foreach($this->article->getOptions() as $option) {
-
+ if($option instanceof Input) {
+ if($option->getMaxValue() && $option->getMaxValue() <= $option->getRawValue()) {
+ $option->setIsValid(false);
+ $option->addValidationError(new Max($option->getRawValue(), $option->getMaxValue()));
+ continue;
+ }
+ if($option->getMinValue() && $option->getMinValue() >= $option->getRawValue()) {
+ $option->setIsValid(false);
+ $option->addValidationError(new Min($option->getRawValue(), $option->getMinValue()));
+ continue;
+ }
+ }
if($option instanceof Select|| $option instanceof Checkbox) {
$valid = false;
diff --git a/src/Error/Validation/Base.php b/src/Error/Validation/Base.php
new file mode 100644
index 0000000..2774a90
--- /dev/null
+++ b/src/Error/Validation/Base.php
@@ -0,0 +1,11 @@
+TYPE;
+ }
+
+ public function __construct(int $currentValue, int $maxValue)
+ {
+ $this->currentValue = $currentValue;
+ $this->maxValue = $maxValue;
+ }
+
+ public function getMessage(): string
+ {
+ return "value must be lower then " . $this->maxValue;
+ }
+}
diff --git a/src/Error/Validation/Input/Min.php b/src/Error/Validation/Input/Min.php
new file mode 100644
index 0000000..3108895
--- /dev/null
+++ b/src/Error/Validation/Input/Min.php
@@ -0,0 +1,30 @@
+TYPE;
+ }
+
+ public function __construct(int $currentValue, int $minValue)
+ {
+ $this->minValue = $minValue;
+ $this->currentValue = $currentValue;
+ }
+
+ public function getMessage(): string
+ {
+ return "value must be greater then " . $this->minValue;
+ }
+}
diff --git a/src/Error/Validation/Set.php b/src/Error/Validation/Set.php
new file mode 100644
index 0000000..1ab905d
--- /dev/null
+++ b/src/Error/Validation/Set.php
@@ -0,0 +1,46 @@
+values);
+ }
+
+ public function getIterator(): Traversable
+ {
+ return new ArrayIterator($this->values);
+ }
+
+ public function add(Base $base): Set
+ {
+ if($this->has($base)) {
+ return $this;
+ }
+
+ $this->values[] = $base;
+ return $this;
+ }
+
+ private function has(Base $base): bool
+ {
+ return array_search($base, $this->values) !== false;
+ }
+
+ public function first(): ?Base
+ {
+ if($this->count() === 0) {
+ return null;
+ }
+ return array_values($this->values)[0];
+ }
+}
diff --git a/src/Option/Parser/Base.php b/src/Option/Parser/Base.php
index 5a599d6..98b42fc 100644
--- a/src/Option/Parser/Base.php
+++ b/src/Option/Parser/Base.php
@@ -48,4 +48,4 @@ class Base
return false;
}
-}
\ No newline at end of file
+}
diff --git a/src/Option/Parser/Input.php b/src/Option/Parser/Input.php
index 087b997..432886f 100644
--- a/src/Option/Parser/Input.php
+++ b/src/Option/Parser/Input.php
@@ -2,22 +2,30 @@
namespace PSC\Library\Calc\Option\Parser;
use PSC\Library\Calc\General\Parser\EdgeCollectionContainer;
+use PSC\Library\Calc\Option\Type\Input as PSCInput;
+use SimpleXMLElement;
class Input extends Base
{
- protected $element;
-
public function __construct(\SimpleXMLElement $node)
{
$this->element = new \PSC\Library\Calc\Option\Type\Input();
parent::__construct($node);
}
- public function parse()
+ public function parse(): PSCInput
{
parent::parse();
+ if(isset($this->node['min'])) {
+ $this->element->setMinValue((int)$this->node['min']);
+ }
+
+ if(isset($this->node['max'])) {
+ $this->element->setMaxValue((int)$this->node['max']);
+ }
+
if($this->node->children()) {
$edgeCollectionContainerParser = new EdgeCollectionContainer($this->node);
$this->element->setEdgesCollectionContainer($edgeCollectionContainerParser->parse());
@@ -26,4 +34,4 @@ class Input extends Base
return $this->element;
}
-}
\ No newline at end of file
+}
diff --git a/src/Option/Type/Base.php b/src/Option/Type/Base.php
index f457faf..f6bcc03 100644
--- a/src/Option/Type/Base.php
+++ b/src/Option/Type/Base.php
@@ -1,6 +1,8 @@
edgesCollectionContainer = new EdgeCollectionContainer();
+ $this->validationErrors = new Set();
+ }
+
+ public function addValidationError(PSCBase $error)
+ {
+ $this->validationErrors->add($error);
+ }
+
+ public function getValidationErrors(): Set
+ {
+ return $this->validationErrors;
}
/**
@@ -294,4 +309,4 @@ class Base
'valid' => $this->isValid()
];
}
-}
\ No newline at end of file
+}
diff --git a/src/Option/Type/Input.php b/src/Option/Type/Input.php
index cf04df6..1663ae5 100644
--- a/src/Option/Type/Input.php
+++ b/src/Option/Type/Input.php
@@ -3,7 +3,29 @@ namespace PSC\Library\Calc\Option\Type;
class Input extends Base
{
+ private ?int $minValue = null;
+
+ private ?int $maxValue = null;
public $type = 'input';
-}
\ No newline at end of file
+ public function setMinValue(?int $min): void
+ {
+ $this->minValue = $min;
+ }
+
+ public function getMinValue(): ?int
+ {
+ return $this->minValue;
+ }
+
+ public function setMaxValue(?int $max): void
+ {
+ $this->maxValue = $max;
+ }
+
+ public function getMaxValue(): ?int
+ {
+ return $this->maxValue;
+ }
+}
diff --git a/tests/Customer/P/CalcTest.php b/tests/Customer/P/CalcTest.php
new file mode 100644
index 0000000..bb11806
--- /dev/null
+++ b/tests/Customer/P/CalcTest.php
@@ -0,0 +1,73 @@
+parse(simplexml_load_string(file_get_contents(__DIR__ . '/papierContainer.xml')));
+
+ $this->engine = new Engine();
+ $this->engine->setPaperContainer($paperContainer);
+ $this->engine->setPaperRepository($repository);
+ $this->engine->setFormulas(file_get_contents(__DIR__ . '/formels.txt'));
+ $this->engine->setParameters(file_get_contents(__DIR__ . '/parameters.txt'));
+ $this->engine->setTemplates(file_get_contents(__DIR__ . '/calcTemplates.xml'));
+
+ $this->engine->loadString(file_get_contents(__DIR__ . '/calc.xml'));
+
+ }
+
+ public function tearDown(): void
+ {
+ $this->engine = null;
+ }
+
+ public function testCalcPrice(): void
+ {
+ $article = $this->engine->getArticle();
+
+ $this->assertSame(92.16, $this->engine->getPrice());
+
+ }
+
+ public function testMaxBreite(): void
+ {
+ $article = $this->engine->getArticle();
+
+ $this->engine->setVariable('breite_frei', 600);
+ $this->engine->calc();
+ $this->assertFalse($article->getOptionById('breite_frei')->isValid());
+ $this->assertEquals(1, count($article->getOptionById('breite_frei')->getValidationErrors()));
+ $this->assertInstanceOf(Max::class, $article->getOptionById('breite_frei')->getValidationErrors()->first());
+ }
+
+ public function testMinBreite(): void
+ {
+ $article = $this->engine->getArticle();
+
+ $this->engine->setVariable('breite_frei', 10);
+ $this->engine->calc();
+ $this->assertFalse($article->getOptionById('breite_frei')->isValid());
+ $this->assertEquals(1, count($article->getOptionById('breite_frei')->getValidationErrors()));
+ $this->assertInstanceOf(Min::class, $article->getOptionById('breite_frei')->getValidationErrors()->first());
+ }
+
+
+}
diff --git a/tests/Customer/P/calc.xml b/tests/Customer/P/calc.xml
new file mode 100644
index 0000000..406c81e
--- /dev/null
+++ b/tests/Customer/P/calc.xml
@@ -0,0 +1,483 @@
+
+
+
+ Aufkleber Proppe
+ Freies Format
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// Gesamtfläche mm² Formel
+
+
+// Kosten Datencheck
+
+
+// Kosten Druckplatten
+
+
+// Fixkosten Druck
+
+
+// variable Kosten Druck
+
+
+// Fixkosten Material
+
+
+// variable Kosten Material
+
+
+// variable Kosten Farbe
+
+
+// Anzahl Schnitte
+
+
+// Fixkosten Schneiden
+
+
+// variable Kosten Schneiden
+
+
+
+
+
+// =(Auflage*Zuschuß+MatFix)*Mat Stärke/Schneidehöhe*4 (Schnitte)*Zeit je Schnitt*Std Satz
+
+// Fixkosten Ecken runden
+
+
+// variable Kosten Ecken runden
+
+
+// Fixkosten Ösen
+
+
+// variable Kosten ösen
+
+
+// Fixkosten lochen
+
+
+// variable Kosten Lochung
+
+
+// Fixkosten Stanzung
+
+
+// variable Kosten Stanzung
+
+
+// Fixkosten Prägung (Nutzen geteilt durch 2???)
+
+
+// variable Kosten Prägung
+
+
+// Fixkosten Heissfolie (Nutzen geteilt durch 2???)
+
+
+// variable Kosten Heissfolie
+
+
+// Fixkosten Falzen
+
+
+// variable Kosten Falzen
+
+
+
+// variable Kosten bündlen
+
+
+// variable Kosten verpacken (Anzahl Ex pro Karton)
+
+
+// Kosten Kartons
+
+
+
+
+// Gewicht Produkte
+
+
+// Gewicht Kartons
+
+
+// Gewicht Umkartons
+
+
+
+
+
+
+
+
+
+
+// Gesamtgewicht für Produktkalkulation
+
+
+
+
diff --git a/tests/Customer/P/calcTemplates.xml b/tests/Customer/P/calcTemplates.xml
new file mode 100644
index 0000000..093d936
--- /dev/null
+++ b/tests/Customer/P/calcTemplates.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/tests/Customer/P/formels.txt b/tests/Customer/P/formels.txt
new file mode 100644
index 0000000..a6ccf7e
--- /dev/null
+++ b/tests/Customer/P/formels.txt
@@ -0,0 +1,127 @@
+//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)';
diff --git a/tests/Customer/P/papierContainer.xml b/tests/Customer/P/papierContainer.xml
new file mode 100644
index 0000000..2f328fc
--- /dev/null
+++ b/tests/Customer/P/papierContainer.xml
@@ -0,0 +1,330 @@
+
+
+
+
+//Proppe
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 2
+
+
+
+
+
+ Diese 2 Zeilen standen vorher innerhalb des Papiercontainers an letzter Stelle. Wenn 4-seitige Anhägeeti in Klak aktiv, dann wieder einfügen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Customer/P/parameters.txt b/tests/Customer/P/parameters.txt
new file mode 100644
index 0000000..201ddbb
--- /dev/null
+++ b/tests/Customer/P/parameters.txt
@@ -0,0 +1,192 @@
+//Proppe
+$gewinnzuschlag=1.1;
+$druckbogen_breite_proppe=490;
+$druckbogen_hoehe_proppe=325;
+$stundensatz_datencheck_proppe=68;
+$beschnitt_proppe=1.5;
+$plattenpreis_proppe=13;
+$stundensatz_druck_proppe=135;
+$einrichtezeit_druck_proppe=0.6;
+$zuschussfaktor_proppe=1.01;
+$maschinenleistung_druck_proppe=6000;
+
+$material_fix_propppe=220;
+$farbe_kg_propppe=16.5;
+
+$stundensatz_schneiden_proppe=61;
+$hubhoehe_schneiden_proppe=75;
+$zeit_je_schnitt_proppe=0.3;
+$schneiden_ruesten_proppe=9;
+
+$ecken_runden_ruesten_proppe=6;
+$ecken_runden_zeit_pro_hub=25;
+$hubhoehe_ecken_proppe=30;
+$stundensatz_ecken_runden_proppe=45;
+
+$oesen_ruesten_proppe=6;
+$oesen_anzahl_pro_h=1000;
+$stundensatz_oesen_proppe=45;
+$material_oesen_proppe=0.016;
+
+$lochen_ruesten_proppe=6;
+$lochen_zeit_pro_hub=90;
+$hubhoehe_lochen_proppe=50;
+$stundensatz_lochen_proppe=45;
+
+$stanzen_ruesten_proppe=15;
+$stanzen_zeit_pro_1000_proppe=5;
+$stanzen_werkzeug_proppe=650;
+$stundensatz_stanzen_proppe=65;
+
+$praegen_pro_h_proppe=2250;
+$praegestempel_proppe=85;
+$stundensatz_praegen_proppe=70;
+
+$heissfolie_pro_h_proppe=1900;
+$heissfoliestempel_proppe=65;
+$stundensatz_heissfolie_proppe=135;
+
+$falzen_ruesten_proppe=20.4;
+$falzen_pro_h_proppe=4000;
+$stundensatz_falzen_proppe=45;
+
+$buendeln_pro_h_proppe=80000;
+$stundensatz_buendeln_proppe=40;
+
+$verpackung_breite_mm_proppe=214;
+$verpackung_laenge_mm_proppe=302;
+$verpackung_hoehe_mm_proppe=100;
+$verpackung_material_proppe=0.32;
+$verpackung_material_umverp_proppe=1.8;
+$karton_gewicht_proppe=200;
+$umkarton_gewicht_proppe=300;
+$zuschlag_versand_proppe=3;
+
+$versandkosten_proppe_bis_05000g=9.2;
+$versandkosten_proppe_bis_10000g=10.2;
+$versandkosten_proppe_bis_20000g=11.2;
+$versandkosten_proppe_bis_30000g=17.2;
+$versandkosten_proppe_bis_35000g=26.3;
+$versandkosten_proppe_bis_40000g=27.3;
+$versandkosten_proppe_bis_50000g=28.3;
+$versandkosten_proppe_bis_60000g=34.3;
+$versandkosten_proppe_bis_65000g=43.4;
+$versandkosten_proppe_bis_70000g=44.4;
+$versandkosten_proppe_bis_80000g=45.4;
+$versandkosten_proppe_bis_90000g=51.4;
+
+$auftragspauschale_proppe=35;
+
+
+
+//express
+$exp1=0.1;
+$exp2=1.2;
+
+
+// copyshop
+$swst1=0.08/1.07;
+$swst2=0.065/1.07;
+$swst3=0.055/1.07;
+$swst4=0.05/1.07;
+$swst5=0.045/1.07;
+$swst6=0.035/1.07;
+$titeldruck=0.6/1.07;
+$fst1=0.9/1.07;
+$fst2=0.75/1.07;
+$fst3=0.55/1.07;
+$fst4=0.45/1.07;
+$fst5=0.4/1.07;
+$fst6=0.25/1.07;
+$fswst1=0.2/1.07;
+$fswst2=0.11/1.07;
+$fswst3=0.10/1.07;
+$fswst4=0.09/1.07;
+$fswst5=0.08/1.07;
+$fswst6=0.06/1.07;
+$b100=3.3/1.07;
+$b150=3.7/1.07;
+$b200=4.3/1.07;
+$b300=5.3/1.07;
+$b300plus=6.3/1.07;
+//shopende
+//farbdrucke
+$farbdruck1=0.80;
+$farbdruck2=0.80*0.85;
+$farbdruck3=0.80*0.75;
+$farbdruck4=0.80*0.65;
+$farbdruck5=0.80*0.55;
+$farbdruck6=0.80*0.45;
+$farbdruck7=0.80*0.37;
+$farbdruck8=0.80*0.31;
+$pauschale=30;
+$posterpauschale=0;
+$posterqm1=39.85/1.19;
+$plakatpauschale=10;
+$plakat140qm1=25;
+$plakat160qm1=20;
+$plakat80qm1=15;
+$plakatA3=10;
+$plakataffichenqm1=17.5;
+
+$aufkleberqm=45;
+$klebefolieqm=45;
+$cutfolieqm=45;
+$cuttransferqm=15;
+$cutfoliepausch=25;
+$solprotectqm=15;
+$wallmountqm=60;
+//banner
+$bannerqm=40;
+$meshqm=40;
+$ppqm=40;
+$blockoutqm=40;
+
+$vkpauschale=17.5;
+$laminieren=30;
+
+//Flyer
+$flyerschneiden=7.5;
+$fflyerschneiden=8;
+$flyer=20;
+$fflyer=30;
+$karten=20;
+//$karten=35;
+$fkarten=25;
+$flyerklick=0.3;
+$fflyerklick=0.3;
+$fflyerfalten=0.01;
+$fkarteklick=0.310;
+$karteklick=0.25;
+// Weihnachtskarten
+
+$klick=0.5;
+$visitenkarte=0.60;
+$k3hs=50;
+$k5hs=55;
+$k10hs=65;
+$k5fs=55;
+$k10fs=59.9;
+$kalu=89.99;
+$cello=0.1;
+$taschenlaminierena4=0.8;
+$taschenlaminierena3=1.25;
+$eckenrunden=0.01;
+$eckenrundeneinrichten=5;
+$nuten=12;
+$nut=.12;
+$nutgeschlossen=.18;
+$schneiden=2.5;
+$falten=0.01;
+$MiniRolli3=21.99;
+$MiniRolli4=16.99;
+$ruestkosten=0;
+$tbk=.60;
+$tbkpauschale=30;
+//plotten
+$plotsw=3.95;
+$plotfarbe=9.95;
+$plotfarbefl=14.95;
+
+//aufschlag
+$aufschlag=1.5;
diff --git a/tests/Mock/PaperRepostory.php b/tests/Mock/PaperRepostory.php
index 8f0c31c..4092dea 100644
--- a/tests/Mock/PaperRepostory.php
+++ b/tests/Mock/PaperRepostory.php
@@ -263,6 +263,16 @@ class PaperRepostory implements ObjectRepository
$papier['sm150g']->setPapierTyp11(1);
$papier['sm150g']->setPapierTyp14(1);
+ $papier['931001'] = new Paper();
+ $papier['931001']->setArtNr('931001');
+ $papier['931001']->setGrammatur('200');
+ $papier['931001']->setPreis('300');
+ $papier['931001']->setVolume(1);
+ $papier['931001']->setPapierTyp3(1);
+ $papier['931001']->setDescription1('Haftpapier hochglänzend weiß, permanent 80g');
+ $papier['931001']->setDescription2('Michaelis - High Gloss White permanent geschlitzt');
+
+
return $papier[$criteria['artNr']];
}