diff --git a/Controller/ApiController.php b/Controller/ApiController.php index c04821f..bcecaf1 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -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 + * + * @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 * diff --git a/Interfaces/GSD/Importer.php b/Interfaces/GSD/Importer.php index 7befa76..50fba94 100755 --- a/Interfaces/GSD/Importer.php +++ b/Interfaces/GSD/Importer.php @@ -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); diff --git a/Interfaces/GSD/Model/GSDAddress.php b/Interfaces/GSD/Model/GSDAddress.php index 4298839..caf0bcf 100755 --- a/Interfaces/GSD/Model/GSDAddress.php +++ b/Interfaces/GSD/Model/GSDAddress.php @@ -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 * diff --git a/Interfaces/GSD/Model/GSDArticle.php b/Interfaces/GSD/Model/GSDArticle.php index ec74fe3..4a72b76 100755 --- a/Interfaces/GSD/Model/GSDArticle.php +++ b/Interfaces/GSD/Model/GSDArticle.php @@ -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. diff --git a/Interfaces/GSD/Model/GSDCostCenter.php b/Interfaces/GSD/Model/GSDCostCenter.php index e64d8d1..d70704d 100755 --- a/Interfaces/GSD/Model/GSDCostCenter.php +++ b/Interfaces/GSD/Model/GSDCostCenter.php @@ -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. diff --git a/Interfaces/GSD/Model/GSDCostCenterMapper.php b/Interfaces/GSD/Model/GSDCostCenterMapper.php index 4c41134..97fba8c 100755 --- a/Interfaces/GSD/Model/GSDCostCenterMapper.php +++ b/Interfaces/GSD/Model/GSDCostCenterMapper.php @@ -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'], ]; diff --git a/Interfaces/GSD/Model/GSDCostObject.php b/Interfaces/GSD/Model/GSDCostObject.php index de36792..eb5852c 100755 --- a/Interfaces/GSD/Model/GSDCostObject.php +++ b/Interfaces/GSD/Model/GSDCostObject.php @@ -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. diff --git a/Interfaces/GSD/Model/GSDCostObjectMapper.php b/Interfaces/GSD/Model/GSDCostObjectMapper.php index 8829e9c..d33e2d2 100755 --- a/Interfaces/GSD/Model/GSDCostObjectMapper.php +++ b/Interfaces/GSD/Model/GSDCostObjectMapper.php @@ -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'], ]; diff --git a/Interfaces/GSD/Model/GSDCustomer.php b/Interfaces/GSD/Model/GSDCustomer.php index eb343ef..6d67e68 100755 --- a/Interfaces/GSD/Model/GSDCustomer.php +++ b/Interfaces/GSD/Model/GSDCustomer.php @@ -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. diff --git a/Interfaces/GSD/Model/GSDCustomerMapper.php b/Interfaces/GSD/Model/GSDCustomerMapper.php index a841b0c..60d1e9f 100755 --- a/Interfaces/GSD/Model/GSDCustomerMapper.php +++ b/Interfaces/GSD/Model/GSDCustomerMapper.php @@ -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', ], ]; diff --git a/Interfaces/GSD/Model/GSDSupplier.php b/Interfaces/GSD/Model/GSDSupplier.php index 2237eb1..d3e6fb2 100755 --- a/Interfaces/GSD/Model/GSDSupplier.php +++ b/Interfaces/GSD/Model/GSDSupplier.php @@ -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. diff --git a/Interfaces/GSD/Model/GSDSupplierMapper.php b/Interfaces/GSD/Model/GSDSupplierMapper.php index d989dce..93dc1cc 100755 --- a/Interfaces/GSD/Model/GSDSupplierMapper.php +++ b/Interfaces/GSD/Model/GSDSupplierMapper.php @@ -47,7 +47,7 @@ final class GSDSupplierMapper extends DataMapperAbstract protected static array $ownsOne = [ 'addr' => [ 'mapper' => GSDAddressMapper::class, - 'self' => 'AddressId', + 'self' => 'AdressId', ], ]; diff --git a/Interfaces/GSD/Model/NullGSDAddress.php b/Interfaces/GSD/Model/NullGSDAddress.php new file mode 100644 index 0000000..f3177e6 --- /dev/null +++ b/Interfaces/GSD/Model/NullGSDAddress.php @@ -0,0 +1,27 @@ +