Add Color DB

This commit is contained in:
Thomas Peterson 2025-01-22 15:31:19 +01:00
parent 8f8379f522
commit 37290c2ced
12 changed files with 807 additions and 507 deletions

File diff suppressed because one or more lines are too long

View File

@ -15,7 +15,8 @@
"require": {
"php": ">=8.1",
"doctrine/orm": "^2.5",
"azuyalabs/yasumi": "^2.5"
"azuyalabs/yasumi": "^2.5",
"bitandblack/colors": "2.13.0"
},
"require-dev": {
"phpunit/phpunit": "^9",

1131
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,8 @@
<?php
namespace PSC\Library\Calc\Option\Parser;
use Color\System\HKS;
use Color\System\PANTONE;
use Doctrine\Persistence\ObjectRepository;
use PSC\Library\Calc\General\Parser\EdgeCollectionContainer;
use PSC\Library\Calc\Option\Parser\Select\Opt;
@ -28,6 +30,8 @@ class Select extends Base
$this->element = new \PSC\Library\Calc\Option\Type\PaperDbSelect();
}elseif(isset($node['mode']) && (string)$node['mode'] == \PSC\Library\Calc\Option\Type\Select::$modeDelivery) {
$this->element = new \PSC\Library\Calc\Option\Type\DeliverySelect();
}elseif(isset($node['mode']) && (string)$node['mode'] == \PSC\Library\Calc\Option\Type\Select::$modeColorDb) {
$this->element = new \PSC\Library\Calc\Option\Type\ColorDBSelect();
}else{
$this->element = new \PSC\Library\Calc\Option\Type\Select();
}
@ -48,6 +52,8 @@ class Select extends Base
$this->parseModePapierDb();
}elseif(isset($this->node['mode']) && (string)$this->node['mode'] == \PSC\Library\Calc\Option\Type\Select::$modeDelivery) {
$this->parseModeDelivery();
}elseif(isset($this->node['mode']) && (string)$this->node['mode'] == \PSC\Library\Calc\Option\Type\Select::$modeColorDb) {
$this->parseModeColorDb();
}else{
$this->parseModeNormal();
}
@ -90,6 +96,28 @@ class Select extends Base
}
}
private function parseModeColorDb(): void
{
$colorSystem = (string)$this->node['container'];
if(str_contains($colorSystem, "panton")) {
$system = new PANTONE(\Color\System\Enum\PANTONE::from($colorSystem));
}
if(str_contains($colorSystem, "hks")) {
$system = new HKS(\Color\System\Enum\HKS::from($colorSystem));
}
if($system) {
foreach ($system->getAllColors() as $color) {
$optColor = new \PSC\Library\Calc\Option\Type\Select\ColorOpt();
$optColor->setId($color->getName());
$optColor->setLabel($color->getName());
$optColor->setColor($color);
$optColor->setValue((string)$color->getHEX());
$this->element->addOption($optColor);
}
}
}
private function parseModeNormal()
{
foreach ($this->node->opt as $opt) {

View File

@ -0,0 +1,18 @@
<?php
namespace PSC\Library\Calc\Option\Type;
use PSC\Library\Calc\Option\Type\Select\Opt;
use PSC\Library\Calc\Option\Type\Select\PaperOpt;
use PSC\Library\Calc\Tests\Mock\Paper;
class ColorDBSelect extends Select
{
public function getSelectedOption()
{
/** @var Opt $opt */
foreach($this->getOptions() as $opt) {
if($opt->isSelected()) return $opt;
}
}
}

View File

@ -7,6 +7,7 @@ class Select extends Base
{
static public $modePaperDb = 'papierdb';
static public $modeColorDb = 'colordb';
static public $modeDelivery = 'delivery';
static public $modeNone = '';

View File

@ -0,0 +1,32 @@
<?php
namespace PSC\Library\Calc\Option\Type\Select;
use Color\Value\ValueInterface;
use PSC\Library\Calc\General\Type\EdgeCollectionContainer;
use PSC\Library\Calc\Option\Type\Base;
class ColorOpt extends Opt
{
protected $color = null;
private string $value = "";
public function setValue(string $value)
{
$this->value = $value;
}
public function getValue(): string
{
return $this->value;
}
public function getColor(): ValueInterface|null
{
return $this->color;
}
public function setColor(ValueInterface $color): void
{
$this->color = $color;
}
}

View File

@ -0,0 +1,45 @@
<?php
namespace PSC\Library\Calc\Tests\Calc;
use PHPUnit\Framework\TestCase;
use PSC\Library\Calc\Article;
use PSC\Library\Calc\Engine;
use PSC\Library\Calc\Option\Type\Base;
use PSC\Library\Calc\PaperContainer\Container;
class ColorDBTest extends TestCase
{
/** @var Engine */
protected $engine = null;
public function setUp(): void
{
$this->engine = new Engine(new Container());
$this->engine->loadString(file_get_contents(__DIR__ . '/../TestFiles/Calc/colors.xml'));
}
public function tearDown(): void
{
$this->engine = null;
}
public function testIfOptionsNotValid()
{
$this->engine->calc();
/** @var Article $article */
$article = $this->engine->getArticle();
/** @var Base $option */
$option = $article->getOptionById('colorpantone');
$this->assertTrue($option->isValid());
$this->assertSame('142', $option->getSelectedOption()->getId());
$option = $article->getOptionById('colorhks');
$this->assertTrue($option->isValid());
$this->assertSame('78', $option->getSelectedOption()->getId());
}
}

View File

@ -83,4 +83,30 @@ class SelectTest extends TestCase
$this->assertEquals(5, $element->getOptions()->count());
}
public function testIfSelectWithColorModePantoneReturnsCorrectOpt()
{
$parser = new Parser();
/** @var Parser\Select $obj */
$obj = $parser->getOptByType(simplexml_load_string(file_get_contents(__DIR__ . '/../../TestFiles/Option/Select/selectColorDBPantone.xml')));
/** @var Select $element */
$element = $obj->parse();
$this->assertInstanceOf('PSC\Library\Calc\Option\Type\Select', $element);
$this->assertEquals(1354, $element->getOptions()->count());
}
public function testIfSelectWithColorModeReturnsCorrectOpt()
{
$parser = new Parser();
/** @var Parser\Select $obj */
$obj = $parser->getOptByType(simplexml_load_string(file_get_contents(__DIR__ . '/../../TestFiles/Option/Select/selectColorDBHKS.xml')));
/** @var Select $element */
$element = $obj->parse();
$this->assertInstanceOf('PSC\Library\Calc\Option\Type\Select', $element);
$this->assertEquals(86, $element->getOptions()->count());
}
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<kalkulation>
<artikel>
<name>color</name>
<kommentar>color</kommentar>
<option id="colorhks" name="colorhks" type="Select" mode="colordb" container="hks-n" default="78">
</option>
<option id="colorpantone" name="colorpantone" type="Select" mode="colordb" container="pantone+-solid-uncoated" default="142">
</option>
</artikel>
</kalkulation>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<option id="color" name="Color" type="Select" mode="colordb" container="hks-n" default="90">
<auflage>
<grenze formel="(0)">1-</grenze>
</auflage>
</option>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<option id="papier" name="Material" type="Select" mode="colordb" container="pantone+-solid-uncoated" default="142">
<auflage>
<grenze formel="(0)">1-</grenze>
</auflage>
</option>