diff --git a/Controller.php b/Controller.php index 1de81f9..bb392b3 100644 --- a/Controller.php +++ b/Controller.php @@ -187,21 +187,20 @@ final class Controller extends ModuleAbstract implements WebInterface return; } - $import = $this->importDataFromRequest($request); + $import = $this->importDataFromRequest($request); + $status = NotificationLevel::ERROR; + $message = 'Import failed.'; if ($import) { - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Exchange', - 'message' => 'Import succeeded.' - ]); - } else { - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::ERROR, - 'title' => 'Exchange', - 'message' => 'Import failed.' - ]); + $status = NotificationLevel::OK; + $message = 'Import succeeded.'; } + + $response->set($request->getUri()->__toString(), [ + 'status' => status, + 'title' => 'Exchange', + 'message' => $message + ]); } /** @@ -217,11 +216,11 @@ final class Controller extends ModuleAbstract implements WebInterface { $interfaces = InterfaceManagerMapper::getAll(); foreach ($interfaces as $interface) { - if ($request->getData('exchange') === $interface->getInterfacePath()) { + if ($request->getData('exchange') ?? '' === $interface->getInterfacePath()) { $class = '\\Modules\\Exchange\\Interfaces\\' . $interface->getInterfacePath() . '\\Importer'; - $importer = new $class(); + $importer = new $class($this->app->dbPool->get()); - return $importer->importRequest($request); + return $importer->importFromRequest($request); } } diff --git a/Interfaces/GSD/Importer.php b/Interfaces/GSD/Importer.php index d5058d0..4884110 100644 --- a/Interfaces/GSD/Importer.php +++ b/Interfaces/GSD/Importer.php @@ -12,12 +12,12 @@ */ declare(strict_types=1); -namespace Interfaces\GSD; +namespace Modules\Exchange\Interfaces\GSD; -use Interfaces\ImporterAbstract; -use Interfaces\GSD\Model\GSDCostCenterMapper; -use Interfaces\GSD\Model\GSDCostObjectMapper; -use Interfaces\GSD\Model\GSDCustomerMapper; +use Modules\Exchange\Models\ImporterAbstract; +use Modules\Exchange\Interfaces\GSD\Model\GSDCostCenterMapper; +use Modules\Exchange\Interfaces\GSD\Model\GSDCostObjectMapper; +use Modules\Exchange\Interfaces\GSD\Model\GSDCustomerMapper; use Modules\Accounting\Models\CostCenterMapper; use Modules\Accounting\Models\CostCenter; @@ -28,17 +28,28 @@ use Modules\ClientManagement\Models\ClientMapper; use Modules\ClientManagement\Models\Client; use phpOMS\DataStorage\Database\Query\Builder; +use phpOMS\DataStorage\Database\Connection\ConnectionFactory; +use phpOMS\DataStorage\Database\DatabaseStatus; +use phpOMS\Message\RequestAbstract; /** * GSD import class * - * @package Interfaces\GSD + * @package Modules\Exchange\Models\Interfaces\GSD * @license OMS License 1.0 * @link http://website.orange-management.de * @since 1.0.0 */ final class Importer extends ImporterAbstract { + /** + * Database connection. + * + * @var ConnectionInterface + * @since 1.0.0 + */ + private $remote = null; + /** * Import all data in time span * @@ -63,6 +74,57 @@ final class Importer extends ImporterAbstract $this->importBatchPosting($start, $end); } + public function importFromRequest(RequestAbstract $request) : bool + { + $start = new \DateTime($request->getData('start') ?? 'now'); + $end = new \DateTime($request->getData('end') ?? 'now'); + + $this->remote = ConnectionFactory::create([ + 'db' => $request->getData('db') ?? '', + 'host' => $request->getData('host') ?? '', + 'port' => (int) ($request->getData('port') ?? 0), + 'database' => $request->getData('database') ?? '', + 'login' => $request->getData('login') ?? '', + 'password' => $request->getData('password') ?? '', + ]); + + if ($this->remote->getStatus() !== DatabaseStatus::OK) { + return false; + } + + if (((bool) ($request->getData('customers') ?? false))) { + $this->importAddress($start, $end); + $this->importCustomer($start, $end); + } + + if (((bool) ($request->getData('suppliers') ?? false))) { + $this->importAddress($start, $end); + $this->importSupplier($start, $end); + } + + if (((bool) ($request->getData('accounts') ?? false))) { + $this->importAccount($start, $end); + } + + if (((bool) ($request->getData('costcenters') ?? false))) { + $this->importCostCenter($start, $end); + } + + if (((bool) ($request->getData('costobjects') ?? false))) { + $this->importCostObject($start, $end); + } + + if (((bool) ($request->getData('articles') ?? false))) { + $this->importArticle($start, $end); + } + + if (((bool) ($request->getData('invoices') ?? false))) { + $this->importInvoice($start, $end); + } + + return true; + } + /** * Import cost centers * @@ -75,11 +137,11 @@ final class Importer extends ImporterAbstract */ public function importCostCenter(\DateTime $start, \DateTime $end) : void { - DataMapperAbstract::setConnection($this->app->dbPool->get('gsd')); + DataMapperAbstract::setConnection($this->remote); $costCenters = GSDCostCenterMapper::getAll(); $obj = new CostCenter(); - DataMapperAbstract::setConnection($this->app->dbPool->get('oms')); + DataMapperAbstract::setConnection($this->local); foreach ($costCenters as $cc) { $obj->setCostCenter((int) $cc->getCostCenter()); @@ -101,11 +163,11 @@ final class Importer extends ImporterAbstract */ public function importCostObject(\DateTime $start, \DateTime $end) : void { - DataMapperAbstract::setConnection($this->app->dbPool->get('gsd')); + DataMapperAbstract::setConnection($this->remote); $costObjects = GSDCostObjectMapper::getAll(); $obj = new CostObject(); - DataMapperAbstract::setConnection($this->app->dbPool->get('oms')); + DataMapperAbstract::setConnection($this->local); foreach ($costObjects as $co) { $obj->setCostObject((int) $co->getCostObject()); diff --git a/Interfaces/GSD/Model/GSDCostCenterMapper.php b/Interfaces/GSD/Model/GSDCostCenterMapper.php index b17b4b1..96fabf6 100644 --- a/Interfaces/GSD/Model/GSDCostCenterMapper.php +++ b/Interfaces/GSD/Model/GSDCostCenterMapper.php @@ -35,7 +35,7 @@ final class GSDCostCenterMapper extends DataMapperAbstract */ protected static $columns = [ 'ROW_ID' => ['name' => 'ROW_ID', 'type' => 'int', 'internal' => 'id'], - 'row_create_time' => ['name' => 'row_create_time', 'type' => '\DateTime', 'internal' => 'createdAt'], + 'row_create_time' => ['name' => 'row_create_time', 'type' => 'DateTime', 'internal' => 'createdAt'], 'row_create_user' => ['name' => 'row_create_user', 'type' => 'int', 'internal' => 'createdBy'], 'KST' => ['name' => 'KST', 'type' => 'string', 'internal' => 'costcenter'], 'Bezeichnung' => ['name' => 'Bezeichnung', 'type' => 'string', 'internal' => 'description'], diff --git a/Interfaces/GSD/Model/GSDCostObjectMapper.php b/Interfaces/GSD/Model/GSDCostObjectMapper.php index 17a90e9..3edbaa5 100644 --- a/Interfaces/GSD/Model/GSDCostObjectMapper.php +++ b/Interfaces/GSD/Model/GSDCostObjectMapper.php @@ -35,7 +35,7 @@ final class GSDCostObjectMapper extends DataMapperAbstract */ protected static $columns = [ 'ROW_ID' => ['name' => 'ROW_ID', 'type' => 'int', 'internal' => 'id'], - 'row_create_time' => ['name' => 'row_create_time', 'type' => '\DateTime', 'internal' => 'createdAt'], + 'row_create_time' => ['name' => 'row_create_time', 'type' => 'DateTime', 'internal' => 'createdAt'], 'row_create_user' => ['name' => 'row_create_user', 'type' => 'int', 'internal' => 'createdBy'], 'KTR' => ['name' => 'KTR', 'type' => 'string', 'internal' => 'costobject'], 'Bezeichnung' => ['name' => 'Bezeichnung', 'type' => 'string', 'internal' => 'description'], diff --git a/Interfaces/GSD/import.tpl.php b/Interfaces/GSD/import.tpl.php index 90da985..f8a2033 100644 --- a/Interfaces/GSD/import.tpl.php +++ b/Interfaces/GSD/import.tpl.php @@ -7,6 +7,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Models/ImporterAbstract.php b/Models/ImporterAbstract.php index 5a29280..6a486d1 100644 --- a/Models/ImporterAbstract.php +++ b/Models/ImporterAbstract.php @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Interfaces; +namespace Modules\Exchange\Models; use phpOMS\DataStorage\Database\Connection\ConnectionInterface; @@ -34,14 +34,6 @@ abstract class ImporterAbstract */ private $local = null; - /** - * Database connection. - * - * @var ConnectionInterface - * @since 1.0.0 - */ - private $remote = null; - /** * Constructor * @@ -50,9 +42,8 @@ abstract class ImporterAbstract * * @since 1.0.0 */ - public function __construct(ConnectionInterface $local, ConnectionInterface $remote) + public function __construct(ConnectionInterface $local) { $this->remote = $remote; - $this->local = $local; } } diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index 8b00cae..699c6b0 100644 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -11,13 +11,18 @@ * @link http://website.orange-management.de */ return ['Exchange' => [ - 'End' => 'End', + 'Database' => 'Database', + 'End' => 'End', 'Exchange' => 'Exchange', - 'Export' => 'Export', + 'Export' => 'Export', 'Exports' => 'Exports', - 'Import' => 'Import', + 'Host' => 'Host', + 'Import' => 'Import', 'Imports' => 'Imports', + 'Login' => 'Login', 'Options' => 'Options', + 'Password' => 'Password', + 'Port' => 'Port', 'Start' => 'Start', 'Title' => 'Title', 'Website' => 'Website',