fix data import

This commit is contained in:
Dennis Eichhorn 2020-10-21 19:34:10 +02:00
parent 065a17c86b
commit 6497cd9066

View File

@ -14,48 +14,50 @@ declare(strict_types=1);
namespace Modules\Exchange\Interfaces\GSD; namespace Modules\Exchange\Interfaces\GSD;
use Modules\Accounting\Models\CostCenter; use phpOMS\Utils\IO\Zip\Zip;
use Modules\Accounting\Models\CostCenterMapper;
use Modules\Accounting\Models\CostObject;
use Modules\Accounting\Models\CostObjectMapper;
use Modules\Admin\Models\Account; use Modules\Admin\Models\Account;
use Modules\Admin\Models\Address; use Modules\Admin\Models\Address;
use Modules\ClientManagement\Models\Client;
use Modules\ClientManagement\Models\ClientMapper;
use Modules\Exchange\Interfaces\GSD\Model\GSDArticle;
use Modules\Exchange\Interfaces\GSD\Model\GSDArticleMapper;
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\Profile\Models\ContactElement;
use Modules\Profile\Models\ContactType;
use Modules\Profile\Models\Profile; 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\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\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\GSDCostCenterMapper;
use Modules\Exchange\Interfaces\GSD\Model\GSDCostObjectMapper;
use Modules\ItemManagement\Models\ItemAttributeTypeL11nMapper;
use phpOMS\DataStorage\Database\Connection\ConnectionAbstract;
/** /**
* GSD import class * GSD import class
@ -73,7 +75,7 @@ final class Importer extends ImporterAbstract
* @var ConnectionAbstract * @var ConnectionAbstract
* @since 1.0.0 * @since 1.0.0
*/ */
private $remote = null; private ?ConnectionAbstract $remote = null;
/** /**
* Import all data in time span * Import all data in time span
@ -119,6 +121,7 @@ final class Importer extends ImporterAbstract
'database' => (string) ($request->getData('database') ?? ''), 'database' => (string) ($request->getData('database') ?? ''),
'login' => (string) ($request->getData('login') ?? ''), 'login' => (string) ($request->getData('login') ?? ''),
'password' => (string) ($request->getData('password') ?? ''), 'password' => (string) ($request->getData('password') ?? ''),
'datetimeformat' => (string) ($request->getData('datetimeformat') ?? 'Y-m-d H:i:s'),
]); ]);
$this->remote->connect(); $this->remote->connect();
@ -148,7 +151,7 @@ final class Importer extends ImporterAbstract
} }
if (((bool) ($request->getData('articles') ?? false))) { if (((bool) ($request->getData('articles') ?? false))) {
$this->importArticle($start, $end); $this->importArticle($start, $end, $request->getFiles()['articles_backend'] ?? []);
} }
if (((bool) ($request->getData('invoices') ?? false))) { if (((bool) ($request->getData('invoices') ?? false))) {
@ -172,8 +175,8 @@ final class Importer extends ImporterAbstract
{ {
DataMapperAbstract::setConnection($this->remote); DataMapperAbstract::setConnection($this->remote);
$query = GSDCostCenterMapper::getQuery(); $query = GSDCostCenterMapper::getQuery();
$query->where('FiKostenstellen_3.row_create_time', '>=', $start->format('Y-m-d H:i:s')) $query->where('FiKostenstellen_3.row_create_time', '>=', $start)
->andWhere('FiKostenstellen_3.row_create_time', '<=', $end->format('Y-m-d H:i:s')); ->andWhere('FiKostenstellen_3.row_create_time', '<=', $end);
/** @var GSDCostCenter[] $costCenters */ /** @var GSDCostCenter[] $costCenters */
$costCenters = GSDCostCenterMapper::getAllByQuery($query); $costCenters = GSDCostCenterMapper::getAllByQuery($query);
@ -203,8 +206,8 @@ final class Importer extends ImporterAbstract
{ {
DataMapperAbstract::setConnection($this->remote); DataMapperAbstract::setConnection($this->remote);
$query = GSDCostObjectMapper::getQuery(); $query = GSDCostObjectMapper::getQuery();
$query->where('FiKostentraeger_3.row_create_time', '>=', $start->format('Y-m-d H:i:s')) $query->where('FiKostentraeger_3.row_create_time', '>=', $start)
->andWhere('FiKostentraeger_3.row_create_time', '<=', $end->format('Y-m-d H:i:s')); ->andWhere('FiKostentraeger_3.row_create_time', '<=', $end);
/** @var GSDCostObject[] $costObjects */ /** @var GSDCostObject[] $costObjects */
$costObjects = GSDCostObjectMapper::getAllByQuery($query); $costObjects = GSDCostObjectMapper::getAllByQuery($query);
@ -234,8 +237,8 @@ final class Importer extends ImporterAbstract
{ {
DataMapperAbstract::setConnection($this->remote); DataMapperAbstract::setConnection($this->remote);
$query = GSDCustomerMapper::getQuery(); $query = GSDCustomerMapper::getQuery();
$query->where('Kunden_3.row_create_time', '>=', $start->format('Y-m-d H:i:s')) $query->where('Kunden_3.row_create_time', '>=', $start)
->andWhere('Kunden_3.row_create_time', '<=', $end->format('Y-m-d H:i:s')); ->andWhere('Kunden_3.row_create_time', '<=', $end);
/** @var GSDCustomer[] $customers */ /** @var GSDCustomer[] $customers */
$customers = GSDCustomerMapper::getAllByQuery($query); $customers = GSDCustomerMapper::getAllByQuery($query);
@ -253,7 +256,7 @@ final class Importer extends ImporterAbstract
$profile = new Profile($account); $profile = new Profile($account);
$obj = new Client(); $obj = new Client();
$obj->setNumber(\trim($customer->number)); $obj->setNumber(\trim($customer->number, "., \t"));
$obj->setProfile($profile); $obj->setProfile($profile);
$addr = new Address(); $addr = new Address();
@ -313,8 +316,8 @@ final class Importer extends ImporterAbstract
{ {
DataMapperAbstract::setConnection($this->remote); DataMapperAbstract::setConnection($this->remote);
$query = GSDSupplierMapper::getQuery(); $query = GSDSupplierMapper::getQuery();
$query->where('Lieferanten_3.row_create_time', '>=', $start->format('Y-m-d H:i:s')) $query->where('Lieferanten_3.row_create_time', '>=', $start)
->andWhere('Lieferanten_3.row_create_time', '<=', $end->format('Y-m-d H:i:s')); ->andWhere('Lieferanten_3.row_create_time', '<=', $end);
/** @var GSDSupplier[] $suppliers */ /** @var GSDSupplier[] $suppliers */
$suppliers = GSDSupplierMapper::getAllByQuery($query); $suppliers = GSDSupplierMapper::getAllByQuery($query);
@ -332,7 +335,7 @@ final class Importer extends ImporterAbstract
$profile = new Profile($account); $profile = new Profile($account);
$obj = new Supplier(); $obj = new Supplier();
$obj->setNumber(\trim($supplier->number)); $obj->setNumber(\trim($supplier->number, "., \t"));
$obj->setProfile($profile); $obj->setProfile($profile);
$addr = new Address(); $addr = new Address();
@ -395,37 +398,57 @@ final class Importer extends ImporterAbstract
/** /**
* Import articles * Import articles
* *
* @param \DateTime $start Start time (inclusive) * @param \DateTime $start Start time (inclusive)
* @param \DateTime $end End time (inclusive) * @param \DateTime $end End time (inclusive)
* @param array $images Article images
* *
* @return void * @return void
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public function importArticle(\DateTime $start, \DateTime $end) : void public function importArticle(\DateTime $start, \DateTime $end, array $files = []) : void
{ {
DataMapperAbstract::setConnection($this->remote); DataMapperAbstract::setConnection($this->remote);
$query = GSDArticleMapper::getQuery(); $query = GSDArticleMapper::getQuery();
$query->where('Artikel_3.row_create_time', '>=', $start->format('Y-m-d H:i:s')) $query->where('Artikel_3.row_create_time', '>=', $start)
->andWhere('Artikel_3.row_create_time', '<=', $end->format('Y-m-d H:i:s')); ->andWhere('Artikel_3.row_create_time', '<=', $end);
/** @var GSDArticle[] $articles */ /** @var GSDArticle[] $articles */
$articles = GSDArticleMapper::getAllByQuery($query); $articles = GSDArticleMapper::getAllByQuery($query);
DataMapperAbstract::setConnection($this->local); DataMapperAbstract::setConnection($this->local);
$itemL11nType = $this->createItemL11nTypes(); $itemL11nType = $this->createItemL11nTypes();
$itemAttrType = $this->createItemAttributeTypes(); $itemAttrType = $this->createItemAttributeTypes();
$itemAttrValue = $this->createItemAttributeValues($itemAttrType); $itemAttrValue = $this->createItemAttributeValues($itemAttrType);
$images = [];
if (!empty($files)) {
if (!\file_exists(__DIR__ . '/temp')) {
\mkdir(__DIR__ . '/temp');
}
Zip::unpack($files['tmp_name'], __DIR__ . '/temp/');
$jpg = Directory::listByExtension(__DIR__ . '/temp/', 'jpg');
$png = Directory::listByExtension(__DIR__ . '/temp/', 'png');
$images = \array_merge($jpg, $png);
}
//$itemAttrType['segment'] = new ItemAttributeType(); //$itemAttrType['segment'] = new ItemAttributeType();
//$itemAttrType['productgroup'] = new ItemAttributeType(); //$itemAttrType['productgroup'] = new ItemAttributeType();
//$itemAttrType['devaluation'] = new ItemAttributeType(); //$itemAttrType['devaluation'] = new ItemAttributeType();
foreach ($articles as $article) { foreach ($articles as $article) {
$obj = new Item(); $obj = new Item();
$obj->setNumber($article->number); $obj->setNumber(\trim($article->number, ",. \t"));
foreach ($images as $image) {
if (\stripos($image, $article->number) !== false) {
var_dump($image);
break;
}
}
// German Language // German Language
$obj->addL11n(new ItemL11n( $obj->addL11n(new ItemL11n(
@ -463,8 +486,16 @@ final class Importer extends ImporterAbstract
ISO639x1Enum::_EN ISO639x1Enum::_EN
)); ));
// @todo: implement
// api upload media
//$obj->addMedia();
ItemMapper::create($obj); ItemMapper::create($obj);
} }
if (\file_exists(__DIR__ . '/temp')) {
Directory::delete(__DIR__ . '/temp');
}
} }
/** /**