diff --git a/src/Calc/Valid.php b/src/Calc/Valid.php index 5885611..b6974fe 100644 --- a/src/Calc/Valid.php +++ b/src/Calc/Valid.php @@ -51,6 +51,7 @@ class Valid if($option instanceof Select|| $option instanceof Checkbox) { $valid = false; + $nextShouldBeValid = false; /** @var Select\Opt $opt */ foreach ($option->getOptions() as $opt) { @@ -90,9 +91,21 @@ class Valid }else { if ($this->engine->getVariables()[$option->getId()] == $opt->getId()) { - $opt->setIsSelected(true); + if(!$opt->isValid()) { + $nextShouldBeValid = true; + } else { + $opt->setIsSelected(true); + } + } else { - $opt->setIsSelected(false); + if($nextShouldBeValid && $opt->isValid()) { + $this->engine->getVariables()[$option->getId()] = $opt->getId(); + $opt->setIsSelected(true); + $nextShouldBeValid = false; + } else{ + $opt->setIsSelected(false); + } + } } diff --git a/tests/Customer/K/CalcTest.php b/tests/Customer/K/CalcTest.php index db6bbdb..508c052 100644 --- a/tests/Customer/K/CalcTest.php +++ b/tests/Customer/K/CalcTest.php @@ -40,9 +40,10 @@ class CalcTest extends TestCase public function testCalcPlan(): void { $this->engine->setVariable('anz_ausfuhren', 2500); + $this->engine->calc(); /** @var Select $option */ $option = $this->engine->getArticle()->getOptionById('tarif'); - - $this->assertSame("Basic", $option->getValue()); + + $this->assertSame("Business", $option->getValue()); } } diff --git a/tests/Customer/Q/CalcTest.php b/tests/Customer/Q/CalcTest.php new file mode 100644 index 0000000..8319768 --- /dev/null +++ b/tests/Customer/Q/CalcTest.php @@ -0,0 +1,58 @@ +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(11.22, $this->engine->getPrice()); + + } + + public function testCalcPriceDefaultChange(): void + { + $this->engine->setVariable('print', '885731'); + + $this->assertSame(50.29, $this->engine->getPrice()); + + } + +} diff --git a/tests/Customer/Q/calc.xml b/tests/Customer/Q/calc.xml new file mode 100644 index 0000000..06bb3d5 --- /dev/null +++ b/tests/Customer/Q/calc.xml @@ -0,0 +1,1615 @@ + + + + Klapp-Visitenkarten quer 4/4 farbig (beidseitiger Druck) + + + + + \ No newline at end of file diff --git a/tests/Customer/Q/calcTemplates.xml b/tests/Customer/Q/calcTemplates.xml new file mode 100644 index 0000000..093d936 --- /dev/null +++ b/tests/Customer/Q/calcTemplates.xml @@ -0,0 +1,2 @@ + + diff --git a/tests/Customer/Q/formels.txt b/tests/Customer/Q/formels.txt new file mode 100644 index 0000000..e27ee52 --- /dev/null +++ b/tests/Customer/Q/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/Q/papierContainer.xml b/tests/Customer/Q/papierContainer.xml new file mode 100644 index 0000000..58f9d81 --- /dev/null +++ b/tests/Customer/Q/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/Q/parameters.txt b/tests/Customer/Q/parameters.txt new file mode 100644 index 0000000..e4fe065 --- /dev/null +++ b/tests/Customer/Q/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;