Introduce Economic customer helper class and customer route
Added a helper class `economic_customer` to standardize customer data handling within the Economic API. Introduced a new route, `/modules/economic/customer`, for retrieving customers using their customer number. Updated `economic` class to integrate the helper and support streamlined customer operations.
This commit is contained in:
@@ -8,15 +8,18 @@ require_once WD . '/modules/economic/endpoints/economic_departments_endpoint.php
|
|||||||
require_once WD . '/modules/economic/endpoints/economic_layouts_endpoint.php';
|
require_once WD . '/modules/economic/endpoints/economic_layouts_endpoint.php';
|
||||||
require_once WD . '/modules/economic/endpoints/economic_customers_endpoint.php';
|
require_once WD . '/modules/economic/endpoints/economic_customers_endpoint.php';
|
||||||
require_once WD . '/modules/economic/endpoints/economic_products_endpoint.php';
|
require_once WD . '/modules/economic/endpoints/economic_products_endpoint.php';
|
||||||
|
require_once WD . '/modules/economic/economic_helpers.php';
|
||||||
|
|
||||||
|
|
||||||
use economic_c;
|
use economic_c;
|
||||||
|
use economic_helpers;
|
||||||
use endpoints\economic_customers_endpoint;
|
use endpoints\economic_customers_endpoint;
|
||||||
use endpoints\economic_departments_endpoint;
|
use endpoints\economic_departments_endpoint;
|
||||||
use endpoints\economic_invoices_endpoint;
|
use endpoints\economic_invoices_endpoint;
|
||||||
use endpoints\economic_layouts_endpoint;
|
use endpoints\economic_layouts_endpoint;
|
||||||
use endpoints\economic_orders_endpoint;
|
use endpoints\economic_orders_endpoint;
|
||||||
use endpoints\economic_products_endpoint;
|
use endpoints\economic_products_endpoint;
|
||||||
|
use helpers\economic_customer;
|
||||||
use interfaces\economic_i;
|
use interfaces\economic_i;
|
||||||
|
|
||||||
class economic implements economic_i
|
class economic implements economic_i
|
||||||
@@ -56,6 +59,11 @@ class economic implements economic_i
|
|||||||
* @var economic_products_endpoint
|
* @var economic_products_endpoint
|
||||||
*/
|
*/
|
||||||
public economic_products_endpoint $products;
|
public economic_products_endpoint $products;
|
||||||
|
/**
|
||||||
|
* Helper classes
|
||||||
|
* @var economic_helpers
|
||||||
|
*/
|
||||||
|
protected economic_helpers $helpers;
|
||||||
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
@@ -67,5 +75,16 @@ class economic implements economic_i
|
|||||||
$this->layouts = new economic_layouts_endpoint();
|
$this->layouts = new economic_layouts_endpoint();
|
||||||
$this->customers = new economic_customers_endpoint();
|
$this->customers = new economic_customers_endpoint();
|
||||||
$this->products = new economic_products_endpoint();
|
$this->products = new economic_products_endpoint();
|
||||||
|
$this->helpers = new economic_helpers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a customer by their customer number
|
||||||
|
* @param int $customer_number The Economic customer number
|
||||||
|
* @return economic_customer
|
||||||
|
*/
|
||||||
|
public function getCustomer(int $customer_number): economic_customer
|
||||||
|
{
|
||||||
|
return new $this->helpers->economic_customer($customer_number);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use helpers\economic_customer;
|
||||||
|
|
||||||
|
class economic_helpers
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The Economic customer helper
|
||||||
|
* @var string $economic_customer
|
||||||
|
*/
|
||||||
|
public string $economic_customer = economic_customer::class;
|
||||||
|
}
|
||||||
-1
@@ -36,5 +36,4 @@ class economic_customers_endpoint
|
|||||||
// Return true if the customer exists
|
// Return true if the customer exists
|
||||||
return isset($tmp->customerNumber);
|
return isset($tmp->customerNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace helpers;
|
||||||
|
|
||||||
|
use classes\economic;
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class economic_customer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The Economic customerNumber, which is the unique identifier for a customer
|
||||||
|
* @var int $customer_number
|
||||||
|
*/
|
||||||
|
protected int $customer_number;
|
||||||
|
/**
|
||||||
|
* The raw customer data from the Economic API
|
||||||
|
* @var object $customer_data
|
||||||
|
*/
|
||||||
|
protected object $customer_data_object;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a new Economic customer object
|
||||||
|
* @throws Exception if the customer does not exist
|
||||||
|
*/
|
||||||
|
public function __construct(int $customer_number)
|
||||||
|
{
|
||||||
|
self::setCustomerNumber($customer_number);
|
||||||
|
self::requireExists();
|
||||||
|
self::fetchCustomerData();
|
||||||
|
self::requireSelected();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a customer exists
|
||||||
|
* @param int $customer_number The Economic customer number to check for
|
||||||
|
* @throws Exception if the customer does not exist
|
||||||
|
*/
|
||||||
|
protected function requireExists(): void
|
||||||
|
{
|
||||||
|
if (!self::exists()) {
|
||||||
|
throw new Exception('The customer does not exist in the Economic system');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a customer exists in the Economic system
|
||||||
|
* @return bool True if the customer exists, false if not
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function exists(): bool
|
||||||
|
{
|
||||||
|
// Make sure the customer number is set
|
||||||
|
self::requireCustomerNumber();
|
||||||
|
// Check if the customer exists
|
||||||
|
$economic = new economic();
|
||||||
|
return $economic->customers->customers->exists(self::getCustomerNumber());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Require that the customer number is set
|
||||||
|
* @throws Exception if the customer number is not set
|
||||||
|
*/
|
||||||
|
protected function requireCustomerNumber(): void
|
||||||
|
{
|
||||||
|
if (!isset($this->customer_number)) {
|
||||||
|
throw new Exception('The customer number is not set');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the customer number
|
||||||
|
* @return int The Economic customer number
|
||||||
|
*/
|
||||||
|
public function getCustomerNumber(): int
|
||||||
|
{
|
||||||
|
return $this->customer_number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the customer number
|
||||||
|
* @param int $customer_number The Economic customer number
|
||||||
|
*/
|
||||||
|
protected function setCustomerNumber(int $customer_number): void
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->customer_number = $customer_number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch the customer data from the Economic API and store it in the object property $customer_data_object
|
||||||
|
* @throws Exception if the customer data could not be fetched
|
||||||
|
* @throws Exception if the customer data is invalid or empty
|
||||||
|
*/
|
||||||
|
protected function fetchCustomerData(): void
|
||||||
|
{
|
||||||
|
// Get the customer data from the Economic API
|
||||||
|
$economic = new economic();
|
||||||
|
$tmp = $economic->customers->customers->get($this->customer_number);
|
||||||
|
// Check if the customer data is invalid or empty
|
||||||
|
if (!isset($tmp->customerNumber)) {
|
||||||
|
throw new Exception('The customer data is invalid or empty');
|
||||||
|
}
|
||||||
|
// Store the customer data in the object property
|
||||||
|
$this->customer_data_object = $tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Require that a customer is selected, i.e. that the customer data is valid and not empty
|
||||||
|
* @throws Exception if the customer data is invalid or empty
|
||||||
|
*/
|
||||||
|
protected function requireSelected(): void
|
||||||
|
{
|
||||||
|
if (!isset($this->customer_data_object->customerNumber)) {
|
||||||
|
throw new Exception('The customer data is invalid or empty');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the customer data as an object
|
||||||
|
* @return object The customer data as an object
|
||||||
|
* @throws Exception if the customer data is invalid or empty
|
||||||
|
*/
|
||||||
|
public function asObject(): object
|
||||||
|
{
|
||||||
|
self::requireSelected();
|
||||||
|
return $this->customer_data_object;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace routes;
|
||||||
|
|
||||||
|
use classes\authentication;
|
||||||
|
use classes\economic;
|
||||||
|
use classes\response;
|
||||||
|
use classes\router;
|
||||||
|
use objects\logs_o;
|
||||||
|
use traits\route_t;
|
||||||
|
|
||||||
|
class moduleEconomicCustomerRoute
|
||||||
|
{
|
||||||
|
use route_t;
|
||||||
|
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
global /** @var response $response */
|
||||||
|
/** @var router $router */
|
||||||
|
$router, $response;
|
||||||
|
|
||||||
|
|
||||||
|
/** Modules > Economic > Customer > Get customer */
|
||||||
|
$this->get('/modules/economic/customer', function () {
|
||||||
|
global $response;
|
||||||
|
self::requirePermission('modules_economic_customer_get');
|
||||||
|
$user = (new authentication())->get_user();
|
||||||
|
if ($user) {
|
||||||
|
self::requireParameters(['customer_number']);
|
||||||
|
self::requireType('customer_number', self::type_int());
|
||||||
|
self::requireMinLength('customer_number', 1);
|
||||||
|
self::requireMaxLength('customer_number', 10);
|
||||||
|
(new logs_o())->add('modules_economic', 'global', 1, 0, 'MODULES_ECONOMIC', 'User accessed the customer');
|
||||||
|
$result = (new economic())->getCustomer((int)$_GET['customer_number']);
|
||||||
|
$response->success((object)$result);
|
||||||
|
} else {
|
||||||
|
(new logs_o())->add('modules_economic', 'global', 0, 0, 'MODULES_ECONOMIC', 'User tried to access the customer without a valid session');
|
||||||
|
$response->error('Invalid session', 400);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user