mirror of
https://github.com/Karaka-Management/oms-Exchange.git
synced 2026-02-01 10:48:41 +00:00
fix exchange setup
This commit is contained in:
parent
9ff392e85a
commit
1847e5da5a
|
|
@ -14,12 +14,15 @@ declare(strict_types=1);
|
|||
|
||||
namespace Modules\Exchange\Controller;
|
||||
|
||||
use Modules\Exchange\Models\InterfaceManager;
|
||||
use Modules\Exchange\Models\InterfaceManagerMapper;
|
||||
use Modules\Media\Models\UploadFile;
|
||||
use phpOMS\Message\NotificationLevel;
|
||||
use phpOMS\Message\RequestAbstract;
|
||||
use phpOMS\Message\ResponseAbstract;
|
||||
use phpOMS\System\File\Local\Directory;
|
||||
use phpOMS\Model\Message\FormValidation;
|
||||
use phpOMS\Message\Http\RequestStatusCode;
|
||||
|
||||
/**
|
||||
* Exchange controller class.
|
||||
|
|
@ -89,6 +92,59 @@ final class ApiController extends Controller
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to validate account creation from request
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
*
|
||||
* @return array<string, bool>
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private function validateInterfaceInstall(RequestAbstract $request) : array
|
||||
{
|
||||
$val = [];
|
||||
if (($val['interface'] = empty($request->getData('interface')))
|
||||
|| ($val['path'] = !\is_dir(__DIR__ . '/../Interfaces/' . $request->getData('interface')))
|
||||
) {
|
||||
return $val;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Api method to install exchange interface
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @api
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function apiInterfaceInstall(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
if (!empty($val = $this->validateInterfaceInstall($request))) {
|
||||
$response->set('interface_install', new FormValidation($val));
|
||||
$response->getHeader()->setStatusCode(RequestStatusCode::R_400);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$interface = new InterfaceManager(
|
||||
__DIR__ . '/../Interfaces/' . $request->getData('interface') . '/interface.json'
|
||||
);
|
||||
$interface->load();
|
||||
|
||||
InterfaceManagerMapper::create($interface);
|
||||
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Interface', 'Interface successfully installed', $interface);
|
||||
}
|
||||
|
||||
/**
|
||||
* Api method to export data
|
||||
*
|
||||
|
|
|
|||
|
|
@ -100,9 +100,10 @@ final class Importer extends ImporterAbstract
|
|||
'database' => (string) ($request->getData('database') ?? ''),
|
||||
'login' => (string) ($request->getData('login') ?? ''),
|
||||
'password' => (string) ($request->getData('password') ?? ''),
|
||||
'prefix' => '',
|
||||
]);
|
||||
|
||||
$this->remote->connect();
|
||||
|
||||
if ($this->remote->getStatus() !== DatabaseStatus::OK) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -152,8 +153,8 @@ final class Importer extends ImporterAbstract
|
|||
{
|
||||
DataMapperAbstract::setConnection($this->remote);
|
||||
$query = GSDCostCenterMapper::getQuery();
|
||||
$query->where('row_create_time', '=>', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
$query->where('FiKostenstellen_3.row_create_time', '>=', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('FiKostenstellen_3.row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
|
||||
$costCenters = GSDCostCenterMapper::getAllByQuery($query);
|
||||
|
||||
|
|
@ -162,7 +163,7 @@ final class Importer extends ImporterAbstract
|
|||
foreach ($costCenters as $cc) {
|
||||
$obj = new CostCenter();
|
||||
$obj->setCode($cc->getCostCenter());
|
||||
$obj->setName($cc->getDescription());
|
||||
$obj->setName(\trim($cc->getDescription(), " ,\t"));
|
||||
|
||||
CostCenterMapper::create($obj);
|
||||
}
|
||||
|
|
@ -182,8 +183,8 @@ final class Importer extends ImporterAbstract
|
|||
{
|
||||
DataMapperAbstract::setConnection($this->remote);
|
||||
$query = GSDCostObjectMapper::getQuery();
|
||||
$query->where('row_create_time', '=>', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
$query->where('FiKostentraeger_3.row_create_time', '>=', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('FiKostentraeger_3.row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
|
||||
$costObjects = GSDCostObjectMapper::getAllByQuery($query);
|
||||
|
||||
|
|
@ -192,7 +193,7 @@ final class Importer extends ImporterAbstract
|
|||
foreach ($costObjects as $co) {
|
||||
$obj = new CostObject();
|
||||
$obj->setCode($co->getCostObject());
|
||||
$obj->setName($co->getDescription());
|
||||
$obj->setName(\trim($co->getDescription(), " ,\t"));
|
||||
|
||||
CostObjectMapper::create($obj);
|
||||
}
|
||||
|
|
@ -212,8 +213,8 @@ final class Importer extends ImporterAbstract
|
|||
{
|
||||
DataMapperAbstract::setConnection($this->remote);
|
||||
$query = GSDCustomerMapper::getQuery();
|
||||
$query->where('row_create_time', '=>', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
$query->where('Kunden_3.row_create_time', '>=', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('Kunden_3.row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
|
||||
$customers = GSDCustomerMapper::getAllByQuery($query);
|
||||
|
||||
|
|
@ -221,12 +222,12 @@ final class Importer extends ImporterAbstract
|
|||
|
||||
foreach ($customers as $customer) {
|
||||
$obj = new Client();
|
||||
$obj->setNumber($customer->getNumber());
|
||||
$obj->setNumber(\trim($customer->getNumber()));
|
||||
|
||||
$account = new Account();
|
||||
$account->setName1($customer->getAddress()->getName1());
|
||||
$account->setName2($customer->getAddress()->getName2());
|
||||
$account->setName3($customer->getAddress()->getName3());
|
||||
$account->setName1(\trim($customer->getAddress()->getName1(), " ,\t"));
|
||||
$account->setName2(\trim($customer->getAddress()->getName2(), " ,\t"));
|
||||
$account->setName3(\trim($customer->getAddress()->getName3(), " ,\t"));
|
||||
|
||||
$profile = new Profile($account);
|
||||
$obj->setProfile($profile);
|
||||
|
|
@ -249,8 +250,8 @@ final class Importer extends ImporterAbstract
|
|||
{
|
||||
DataMapperAbstract::setConnection($this->remote);
|
||||
$query = GSDSupplierMapper::getQuery();
|
||||
$query->where('row_create_time', '=>', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
$query->where('Lieferanten_3.row_create_time', '>=', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('Lieferanten_3.row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
|
||||
$suppliers = GSDSupplierMapper::getAllByQuery($query);
|
||||
|
||||
|
|
@ -261,9 +262,9 @@ final class Importer extends ImporterAbstract
|
|||
$obj->setNumber($supplier->getNumber());
|
||||
|
||||
$account = new Account();
|
||||
$account->setName1($supplier->getAddress()->getName1());
|
||||
$account->setName2($supplier->getAddress()->getName2());
|
||||
$account->setName3($supplier->getAddress()->getName3());
|
||||
$account->setName1(\trim($supplier->getAddress()->getName1(), " ,\t"));
|
||||
$account->setName2(\trim($supplier->getAddress()->getName2(), " ,\t"));
|
||||
$account->setName3(\trim($supplier->getAddress()->getName3(), " ,\t"));
|
||||
|
||||
$profile = new Profile($account);
|
||||
$obj->setProfile($profile);
|
||||
|
|
@ -300,8 +301,8 @@ final class Importer extends ImporterAbstract
|
|||
{
|
||||
DataMapperAbstract::setConnection($this->remote);
|
||||
$query = GSDArticleMapper::getQuery();
|
||||
$query->where('row_create_time', '=>', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
$query->where('Artikel_3.row_create_time', '>=', $start->format('Y-m-d H:i:s'))
|
||||
->andWhere('Artikel_3.row_create_time', '<=', $end->format('Y-m-d H:i:s'));
|
||||
|
||||
$articles = GSDArticleMapper::getAllByQuery($query);
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Modules\Exchange\Interfaces\GSD\Model;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class GSDAddress
|
||||
class GSDAddress
|
||||
{
|
||||
/**
|
||||
* ID.
|
||||
|
|
@ -120,6 +120,32 @@ final class GSDAddress
|
|||
*/
|
||||
private string $website = '';
|
||||
|
||||
/**
|
||||
* Creator.
|
||||
*
|
||||
* @var int
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected int $createdBy = 0;
|
||||
|
||||
/**
|
||||
* Created.
|
||||
*
|
||||
* @var \DateTimeImmutable
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected \DateTimeImmutable $createdAt;
|
||||
|
||||
/**
|
||||
* Construct.
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->createdAt = new \DateTimeImmutable('now');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get name1
|
||||
*
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Modules\Exchange\Interfaces\GSD\Model;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class GSDArticle
|
||||
class GSDArticle
|
||||
{
|
||||
/**
|
||||
* ID.
|
||||
|
|
@ -33,12 +33,20 @@ final class GSDArticle
|
|||
protected int $id = 0;
|
||||
|
||||
/**
|
||||
* Create at.
|
||||
* Creator.
|
||||
*
|
||||
* @var int
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected int $createdBy = 0;
|
||||
|
||||
/**
|
||||
* Created.
|
||||
*
|
||||
* @var \DateTimeImmutable
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private \DateTimeImmutable $createdAt;
|
||||
protected \DateTimeImmutable $createdAt;
|
||||
|
||||
/**
|
||||
* Article number.
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Modules\Exchange\Interfaces\GSD\Model;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class GSDCostCenter implements \JsonSerializable
|
||||
class GSDCostCenter implements \JsonSerializable
|
||||
{
|
||||
/**
|
||||
* ID.
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ final class GSDCostCenterMapper extends DataMapperAbstract
|
|||
'ROW_ID' => ['name' => 'ROW_ID', 'type' => 'int', 'internal' => 'id'],
|
||||
'row_create_time' => ['name' => 'row_create_time', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt', 'readonly' => true],
|
||||
'row_create_user' => ['name' => 'row_create_user', 'type' => 'int', 'internal' => 'createdBy', 'readonly' => true],
|
||||
'KST' => ['name' => 'KST', 'type' => 'string', 'internal' => 'costcenter'],
|
||||
'KST' => ['name' => 'KST', 'type' => 'string', 'internal' => 'costCenter'],
|
||||
'Bezeichnung' => ['name' => 'Bezeichnung', 'type' => 'string', 'internal' => 'description'],
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Modules\Exchange\Interfaces\GSD\Model;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class GSDCostObject implements \JsonSerializable
|
||||
class GSDCostObject implements \JsonSerializable
|
||||
{
|
||||
/**
|
||||
* ID.
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ final class GSDCostObjectMapper extends DataMapperAbstract
|
|||
'ROW_ID' => ['name' => 'ROW_ID', 'type' => 'int', 'internal' => 'id'],
|
||||
'row_create_time' => ['name' => 'row_create_time', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt', 'readonly' => true],
|
||||
'row_create_user' => ['name' => 'row_create_user', 'type' => 'int', 'internal' => 'createdBy', 'readonly' => true],
|
||||
'KTR' => ['name' => 'KTR', 'type' => 'string', 'internal' => 'costobject'],
|
||||
'KTR' => ['name' => 'KTR', 'type' => 'string', 'internal' => 'costObject'],
|
||||
'Bezeichnung' => ['name' => 'Bezeichnung', 'type' => 'string', 'internal' => 'description'],
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Modules\Exchange\Interfaces\GSD\Model;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class GSDCustomer
|
||||
class GSDCustomer
|
||||
{
|
||||
/**
|
||||
* ID.
|
||||
|
|
@ -38,7 +38,7 @@ final class GSDCustomer
|
|||
* @var int
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected $createdBy = 0;
|
||||
protected int $createdBy = 0;
|
||||
|
||||
/**
|
||||
* Created.
|
||||
|
|
|
|||
|
|
@ -39,18 +39,19 @@ final class GSDCustomerMapper extends DataMapperAbstract
|
|||
'Kundennummer' => ['name' => 'Kundennummer', 'type' => 'string', 'internal' => 'number'],
|
||||
'Info' => ['name' => 'Info', 'type' => 'string', 'internal' => 'info'],
|
||||
'Auftragssperre' => ['name' => 'Auftragssperre', 'type' => 'string', 'internal' => 'deliveryStatus'],
|
||||
'KreditLimitintern' => ['name' => 'KreditLimitintern', 'type' => 'string', 'internal' => 'creditlimit'],
|
||||
'KreditLimitintern' => ['name' => 'KreditLimitintern', 'type' => 'float', 'internal' => 'creditlimit'],
|
||||
'EGUstId' => ['name' => 'EGUstId', 'type' => 'string', 'internal' => 'egustid'],
|
||||
'Steuernummer' => ['name' => 'Steuernummer', 'type' => 'string', 'internal' => 'taxid'],
|
||||
'BIC' => ['name' => 'BIC', 'type' => 'string', 'internal' => 'bic'],
|
||||
'IBAN' => ['name' => 'IBAN', 'type' => 'string', 'internal' => 'iban'],
|
||||
'Verkaeufer' => ['name' => 'Verkaeufer', 'type' => 'int', 'internal' => 'salesRep'],
|
||||
'Verkaeufer' => ['name' => 'Verkaeufer', 'type' => 'int', 'internal' => 'salesRep'],
|
||||
'AdressId' => ['name' => 'AdressId', 'type' => 'int', 'internal' => 'addr'],
|
||||
];
|
||||
|
||||
protected static array $ownsOne = [
|
||||
'addr' => [
|
||||
'mapper' => GSDAddressMapper::class,
|
||||
'self' => 'AddressId',
|
||||
'self' => 'AdressId',
|
||||
],
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Modules\Exchange\Interfaces\GSD\Model;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class GSDSupplier
|
||||
class GSDSupplier
|
||||
{
|
||||
/**
|
||||
* ID.
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ final class GSDSupplierMapper extends DataMapperAbstract
|
|||
protected static array $ownsOne = [
|
||||
'addr' => [
|
||||
'mapper' => GSDAddressMapper::class,
|
||||
'self' => 'AddressId',
|
||||
'self' => 'AdressId',
|
||||
],
|
||||
];
|
||||
|
||||
|
|
|
|||
27
Interfaces/GSD/Model/NullGSDAddress.php
Normal file
27
Interfaces/GSD/Model/NullGSDAddress.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.4
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Exchange\Interfaces\GSD\Model;
|
||||
|
||||
/**
|
||||
* Null model.
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class NullGSDAddress
|
||||
{
|
||||
}
|
||||
27
Interfaces/GSD/Model/NullGSDArticle.php
Normal file
27
Interfaces/GSD/Model/NullGSDArticle.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.4
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Exchange\Interfaces\GSD\Model;
|
||||
|
||||
/**
|
||||
* Null model.
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class NullGSDArticle
|
||||
{
|
||||
}
|
||||
27
Interfaces/GSD/Model/NullGSDCostCenter.php
Normal file
27
Interfaces/GSD/Model/NullGSDCostCenter.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.4
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Exchange\Interfaces\GSD\Model;
|
||||
|
||||
/**
|
||||
* Null model.
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class NullGSDCostCenter
|
||||
{
|
||||
}
|
||||
27
Interfaces/GSD/Model/NullGSDCostObject.php
Normal file
27
Interfaces/GSD/Model/NullGSDCostObject.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.4
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Exchange\Interfaces\GSD\Model;
|
||||
|
||||
/**
|
||||
* Null model.
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class NullGSDCostObject
|
||||
{
|
||||
}
|
||||
27
Interfaces/GSD/Model/NullGSDCustomer.php
Normal file
27
Interfaces/GSD/Model/NullGSDCustomer.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.4
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Exchange\Interfaces\GSD\Model;
|
||||
|
||||
/**
|
||||
* Null model.
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class NullGSDCustomer
|
||||
{
|
||||
}
|
||||
27
Interfaces/GSD/Model/NullGSDSupplier.php
Normal file
27
Interfaces/GSD/Model/NullGSDSupplier.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.4
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link https://orange-management.org
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Exchange\Interfaces\GSD\Model;
|
||||
|
||||
/**
|
||||
* Null model.
|
||||
*
|
||||
* @package Modules\Exchange\Interfaces\GSD\Model
|
||||
* @license OMS License 1.0
|
||||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class NullGSDSupplier
|
||||
{
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user