Integrate caching for CVR lookup, add economic customer creation endpoint, and enhance license plate recognition validation
- Implemented Redis caching for CVR lookups to improve performance and reduce API calls. - Introduced economic customer creation functionality with new `createCustomer` method and corresponding route. - Enhanced license plate recognition validation to handle plates shorter than 3 characters.
This commit is contained in:
@@ -118,4 +118,27 @@ class economic implements economic_i
|
||||
{
|
||||
return new $this->helpers->economic_tasks();
|
||||
}
|
||||
|
||||
public function createCustomer(int $customer_number, string $name, int $cvr_number, string $email, int $phone): economic_customer
|
||||
{
|
||||
$result = $this->customers->customers->create([
|
||||
'customerNumber' => $customer_number,
|
||||
'corporateIdentificationNumber' => (string)$cvr_number,
|
||||
'customerGroup' => [
|
||||
'customerGroupNumber' => 1,
|
||||
],
|
||||
'paymentTerms' => [
|
||||
'paymentTermsNumber' => 12,
|
||||
],
|
||||
'name' => $name,
|
||||
'email' => $email,
|
||||
'phone' => $phone,
|
||||
'currency' => 'DKK',
|
||||
'vatZone' => [
|
||||
'vatZoneNumber' => 1,
|
||||
]
|
||||
]);
|
||||
|
||||
return new $this->helpers->economic_customer($customer_number);
|
||||
}
|
||||
}
|
||||
+14
@@ -21,6 +21,20 @@ class economic_customers_endpoint
|
||||
// Return the response as an object
|
||||
return json_decode($response);
|
||||
}
|
||||
/**
|
||||
* Create a customer
|
||||
* @param array $data
|
||||
* @return object
|
||||
*/
|
||||
public function create(array $data): object
|
||||
{
|
||||
$response = $this->send_request(
|
||||
'/customers/',
|
||||
'POST',
|
||||
json_encode($data)
|
||||
);
|
||||
return json_decode($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get customers by filters
|
||||
|
||||
@@ -43,5 +43,37 @@ class moduleEconomicCustomerRoute
|
||||
]
|
||||
);
|
||||
|
||||
/** Modules > Economic > Customer > Create customer */
|
||||
$this->post('/modules/economic/customer', function () {
|
||||
global $response;
|
||||
self::requirePermission('modules_economic_customer_create');
|
||||
$user = (new authentication())->get_user();
|
||||
if ($user || true) {
|
||||
self::requireParameters(['customer_number', 'cvr', 'email', 'phone', 'name']);
|
||||
self::requireMinLength('customer_number', 1);
|
||||
self::requireMaxLength('customer_number', 10);
|
||||
self::requireMinLength('cvr', 1);
|
||||
self::requireMaxLength('cvr', 10);
|
||||
self::requireMinLength('email', 1);
|
||||
self::requireMaxLength('email', 255);
|
||||
self::requireMinLength('phone', 1);
|
||||
self::requireMaxLength('phone', 255);
|
||||
self::requireMinLength('name', 1);
|
||||
self::requireMaxLength('name', 255);
|
||||
(new logs_o())->add('modules_economic', 'global', 1, 0, 'MODULES_ECONOMIC', 'User accessed the customer');
|
||||
$result = (new economic())->createCustomer(
|
||||
(int)self::getParameter('customer_number'),
|
||||
(string)self::getParameter('name'),
|
||||
(int)self::getParameter('cvr'),
|
||||
(string)self::getParameter('email'),
|
||||
(int)self::getParameter('phone'),
|
||||
);
|
||||
$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);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -40,8 +40,10 @@ class moduleScannerRoute
|
||||
if ($lpr_result['success']) {
|
||||
// Set the LICENSE_PLATE_NUMBER to uppercase and remove spaces.
|
||||
$lpr_result['license_plate_number'] = strtoupper(str_replace(' ', '', $lpr_result['license_plate_number']));
|
||||
// Make sure the scanned plate is more than 3 characters long.
|
||||
$scannedPlateIsTooShort = strlen($lpr_result['license_plate_number']) <= 3;
|
||||
// If the confidence is below 90%, consider it a failure.
|
||||
if (isset($lpr_result['confidence']) && $lpr_result['confidence'] < 0.9) {
|
||||
if (isset($lpr_result['confidence']) && $lpr_result['confidence'] < 0.9 && !$scannedPlateIsTooShort) {
|
||||
throw new Exception('License plate recognition confidence too low. Score: ' . $lpr_result['confidence'] . ' Plate: ' . $lpr_result['license_plate_number'] . ' Raw: ' . json_encode($lpr_result['raw_response']));
|
||||
}
|
||||
// Success
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace routes;
|
||||
use classes\economic;
|
||||
use classes\router;
|
||||
use classes\virkdata;
|
||||
use modules\virkdata\helpers\virkdata_response;
|
||||
use objects\users_o;
|
||||
use traits\route_t;
|
||||
|
||||
@@ -86,14 +87,18 @@ class workerRoute
|
||||
if (!is_numeric($cvr)) {
|
||||
$response->error('Invalid CVR number', 400);
|
||||
}
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, 'https://cvrapi.dk/api?search=' . $cvr . '&country=dk');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'Truck Wash ApS (truckwash.dk) - Kundeimporterings-modul');
|
||||
$result = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
$result = json_decode($result);
|
||||
$response->success(['cvr' => $cvr, 'result' => $result, 'phone' => $result->phone, 'email' => $result->email], 200);
|
||||
// Check if the result is cached
|
||||
if (!empty(redis->get('cvr_lookup_' . $cvr))) {
|
||||
$result = (new virkdata_response())->populate((array)json_decode(redis->get('cvr_lookup_' . $cvr)));
|
||||
} else {
|
||||
$virkdata = new virkdata();
|
||||
$result = $virkdata->getCompanyInformation($cvr, '', []);
|
||||
// Cache the result
|
||||
redis->set('cvr_lookup_' . $cvr, json_encode($result->asArray()));
|
||||
// Set the cache expiration time (3 days)
|
||||
redis->expire('cvr_lookup_' . $cvr, (60 * 60 * 24 * 4));
|
||||
}
|
||||
$response->success(['cvr' => $cvr, 'result' => (object)$result->asArray(), 'phone' => $result->phone, 'email' => $result->email], 200);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user