diff --git a/Interfaces/GSD/Importer.php b/Interfaces/GSD/Importer.php index ae2a1c7..bf91740 100755 --- a/Interfaces/GSD/Importer.php +++ b/Interfaces/GSD/Importer.php @@ -14,50 +14,54 @@ declare(strict_types=1); namespace Modules\Exchange\Interfaces\GSD; -use phpOMS\Utils\IO\Zip\Zip; +use Modules\Accounting\Models\CostCenter; +use Modules\Accounting\Models\CostCenterMapper; +use Modules\Accounting\Models\CostObject; +use Modules\Accounting\Models\CostObjectMapper; use Modules\Admin\Models\Account; use Modules\Admin\Models\Address; -use Modules\Profile\Models\Profile; -use phpOMS\Message\RequestAbstract; -use phpOMS\Localization\ISO639x1Enum; -use Modules\ItemManagement\Models\Item; -use Modules\Profile\Models\ContactType; -use phpOMS\Localization\ISO3166TwoEnum; -use phpOMS\System\File\Local\Directory; -use Modules\Accounting\Models\CostCenter; -use Modules\Accounting\Models\CostObject; -use Modules\Profile\Models\ContactElement; +use Modules\Admin\Models\NullAccount; use Modules\ClientManagement\Models\Client; -use Modules\ItemManagement\Models\ItemL11n; -use Modules\Exchange\Models\ImporterAbstract; -use Modules\ItemManagement\Models\ItemMapper; -use Modules\Accounting\Models\CostCenterMapper; -use Modules\Accounting\Models\CostObjectMapper; -use Modules\ItemManagement\Models\ItemL11nType; -use Modules\SupplierManagement\Models\Supplier; -use phpOMS\DataStorage\Database\DatabaseStatus; use Modules\ClientManagement\Models\ClientMapper; -use Modules\ItemManagement\Models\NullItemL11nType; -use phpOMS\DataStorage\Database\DataMapperAbstract; -use Modules\ItemManagement\Models\ItemAttributeType; use Modules\Exchange\Interfaces\GSD\Model\GSDArticle; -use Modules\ItemManagement\Models\ItemL11nTypeMapper; -use Modules\SupplierManagement\Models\SupplierMapper; -use Modules\Exchange\Interfaces\GSD\Model\GSDCustomer; -use Modules\Exchange\Interfaces\GSD\Model\GSDSupplier; -use Modules\Exchange\Interfaces\GSD\Model\GSDCostCenter; -use Modules\Exchange\Interfaces\GSD\Model\GSDCostObject; -use Modules\ItemManagement\Models\ItemAttributeTypeL11n; -use Modules\ItemManagement\Models\NullItemAttributeType; -use Modules\ItemManagement\Models\ItemAttributeTypeMapper; use Modules\Exchange\Interfaces\GSD\Model\GSDArticleMapper; -use Modules\Exchange\Interfaces\GSD\Model\GSDCustomerMapper; -use Modules\Exchange\Interfaces\GSD\Model\GSDSupplierMapper; -use phpOMS\DataStorage\Database\Connection\ConnectionFactory; +use Modules\Exchange\Interfaces\GSD\Model\GSDCostCenter; use Modules\Exchange\Interfaces\GSD\Model\GSDCostCenterMapper; +use Modules\Exchange\Interfaces\GSD\Model\GSDCostObject; use Modules\Exchange\Interfaces\GSD\Model\GSDCostObjectMapper; +use Modules\Exchange\Interfaces\GSD\Model\GSDCustomer; +use Modules\Exchange\Interfaces\GSD\Model\GSDCustomerMapper; +use Modules\Exchange\Interfaces\GSD\Model\GSDSupplier; +use Modules\Exchange\Interfaces\GSD\Model\GSDSupplierMapper; +use Modules\Exchange\Models\ImporterAbstract; +use Modules\ItemManagement\Models\Item; +use Modules\ItemManagement\Models\ItemAttributeType; +use Modules\ItemManagement\Models\ItemAttributeTypeL11n; use Modules\ItemManagement\Models\ItemAttributeTypeL11nMapper; +use Modules\ItemManagement\Models\ItemAttributeTypeMapper; +use Modules\ItemManagement\Models\ItemL11n; +use Modules\ItemManagement\Models\ItemL11nType; +use Modules\ItemManagement\Models\ItemL11nTypeMapper; +use Modules\ItemManagement\Models\ItemMapper; +use Modules\ItemManagement\Models\NullItemAttributeType; +use Modules\ItemManagement\Models\NullItemL11nType; +use Modules\Media\Controller\Controller; +use Modules\Media\Models\Media; +use Modules\Media\Models\MediaMapper; +use Modules\Profile\Models\ContactElement; +use Modules\Profile\Models\ContactType; +use Modules\Profile\Models\Profile; +use Modules\SupplierManagement\Models\Supplier; +use Modules\SupplierManagement\Models\SupplierMapper; use phpOMS\DataStorage\Database\Connection\ConnectionAbstract; +use phpOMS\DataStorage\Database\Connection\ConnectionFactory; +use phpOMS\DataStorage\Database\DatabaseStatus; +use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\Localization\ISO3166TwoEnum; +use phpOMS\Localization\ISO639x1Enum; +use phpOMS\Message\RequestAbstract; +use phpOMS\System\File\Local\Directory; +use phpOMS\Utils\IO\Zip\Zip; /** * GSD import class @@ -77,6 +81,14 @@ final class Importer extends ImporterAbstract */ private ?ConnectionAbstract $remote = null; + /** + * Account + * + * @var int + * @since 1.0.0 + */ + private int $account = 1; + /** * Import all data in time span * @@ -115,17 +127,19 @@ final class Importer extends ImporterAbstract $end = new \DateTime($request->getData('end') ?? 'now'); $this->remote = ConnectionFactory::create([ - 'db' => (string) ($request->getData('db') ?? ''), - 'host' => (string) ($request->getData('host') ?? ''), - 'port' => (int) ($request->getData('port') ?? 0), - 'database' => (string) ($request->getData('database') ?? ''), - 'login' => (string) ($request->getData('login') ?? ''), - 'password' => (string) ($request->getData('password') ?? ''), + 'db' => (string) ($request->getData('db') ?? ''), + 'host' => (string) ($request->getData('host') ?? ''), + 'port' => (int) ($request->getData('port') ?? 0), + 'database' => (string) ($request->getData('database') ?? ''), + 'login' => (string) ($request->getData('login') ?? ''), + 'password' => (string) ($request->getData('password') ?? ''), 'datetimeformat' => (string) ($request->getData('datetimeformat') ?? 'Y-m-d H:i:s'), ]); $this->remote->connect(); + $this->account = $request->getHeader()->getAccount(); + if ($this->remote->getStatus() !== DatabaseStatus::OK) { return false; } @@ -422,17 +436,40 @@ final class Importer extends ImporterAbstract $itemAttrType = $this->createItemAttributeTypes(); $itemAttrValue = $this->createItemAttributeValues($itemAttrType); - $images = []; + $images = []; + $imagePath = Controller::FILE_PATH . '/Modules/ItemManagement/Articles/Images'; + + $media = []; if (!empty($files)) { - if (!\file_exists(__DIR__ . '/temp')) { - \mkdir(__DIR__ . '/temp'); + if (!\is_dir($imagePath)) { + \mkdir($imagePath, 0755, true); } - Zip::unpack($files['tmp_name'], __DIR__ . '/temp/'); + $jpgOld = Directory::listByExtension($imagePath, 'jpg'); + $pngOld = Directory::listByExtension($imagePath, 'png'); + $imagesOld = \array_merge($jpgOld, $pngOld); - $jpg = Directory::listByExtension(__DIR__ . '/temp/', 'jpg'); - $png = Directory::listByExtension(__DIR__ . '/temp/', 'png'); + Zip::unpack($files['tmp_name'], $imagePath); + + $jpg = Directory::listByExtension($imagePath, 'jpg'); + $png = Directory::listByExtension($imagePath, 'png'); $images = \array_merge($jpg, $png); + $images = \array_diff($images, $imagesOld); + + foreach ($images as $image) { + $number = (int) \explode('.', $image)[0]; + + $media[$number] = new Media(); + $media[$number]->setName((string) $number); + $media[$number]->setType('backend_image'); + $media[$number]->setPath('/Modules/Media/Files/Modules/ItemManagement/Articles/Images/' . $image); + $media[$number]->setVirtualPath('/Modules/ItemManagement/Articles/Images'); + $media[$number]->setExtension(\explode('.', $image)[1]); + $media[$number]->setSize(\filesize($imagePath . '/' . $image)); + $media[$number]->setCreatedBy(new NullAccount($this->account)); + + MediaMapper::create($media[$number]); + } } //$itemAttrType['segment'] = new ItemAttributeType(); @@ -440,15 +477,10 @@ final class Importer extends ImporterAbstract //$itemAttrType['devaluation'] = new ItemAttributeType(); foreach ($articles as $article) { - $obj = new Item(); - $obj->setNumber(\trim($article->number, ",. \t")); + $number = (int) \trim($article->number, ",. \t"); - foreach ($images as $image) { - if (\stripos($image, $article->number) !== false) { - var_dump($image); - break; - } - } + $obj = new Item(); + $obj->setNumber((string) $number); // German Language $obj->addL11n(new ItemL11n( @@ -486,16 +518,12 @@ final class Importer extends ImporterAbstract ISO639x1Enum::_EN )); - // @todo: implement - // api upload media - //$obj->addMedia(); + if (isset($media[$number])) { + $obj->addFile($media[$number]); + } ItemMapper::create($obj); } - - if (\file_exists(__DIR__ . '/temp')) { - Directory::delete(__DIR__ . '/temp'); - } } /** diff --git a/Interfaces/GSD/Model/GSDCustomerMapper.php b/Interfaces/GSD/Model/GSDCustomerMapper.php index 808a19b..205442f 100755 --- a/Interfaces/GSD/Model/GSDCustomerMapper.php +++ b/Interfaces/GSD/Model/GSDCustomerMapper.php @@ -67,8 +67,8 @@ final class GSDCustomerMapper extends DataMapperAbstract protected static array $ownsOne = [ 'addr' => [ - 'mapper' => GSDAddressMapper::class, - 'self' => 'AdressId', + 'mapper' => GSDAddressMapper::class, + 'external' => 'AdressId', ], ]; diff --git a/Interfaces/GSD/Model/GSDSupplierMapper.php b/Interfaces/GSD/Model/GSDSupplierMapper.php index 48ce907..1c1085c 100755 --- a/Interfaces/GSD/Model/GSDSupplierMapper.php +++ b/Interfaces/GSD/Model/GSDSupplierMapper.php @@ -47,8 +47,8 @@ final class GSDSupplierMapper extends DataMapperAbstract protected static array $ownsOne = [ 'addr' => [ - 'mapper' => GSDAddressMapper::class, - 'self' => 'AdressId', + 'mapper' => GSDAddressMapper::class, + 'external' => 'AdressId', ], ];