Introduced a `setSearchableFields` method to restrict searchable fields in database queries, enhancing security by preventing unintended access to sensitive data. Updated user and department routes to leverage this feature. Default behavior remains unchanged when no searchable fields are specified.
94 lines
3.3 KiB
PHP
94 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace customers;
|
|
|
|
use economic_m;
|
|
use objects\users_o;
|
|
|
|
class economicCustomers extends economic_m
|
|
{
|
|
public users_o $users_o;
|
|
|
|
public function searchCustomers(string|int $search, string $filter, int $limit = 10, int $page = 1): object
|
|
{
|
|
// Make sure the search string is ready for the API
|
|
$search = urlencode($search);
|
|
// Search for customers
|
|
$url = '/customers?filter=' . $filter . '$like:' . $search . '&pagesize=' . $limit . '&skippages=' . $page - 1;
|
|
$response = $this->send_request($url, 'GET', '');
|
|
return json_decode($response);
|
|
}
|
|
|
|
public function getCustomerName(int $customer_number): string|null
|
|
{
|
|
// Check if the customer name is cached
|
|
$tmp_user = self::getUsersObject()->getUserByCustomerNumber($customer_number);
|
|
$cached = $tmp_user->getCached('economic_customer');
|
|
if ($cached) {
|
|
return $cached->name;
|
|
}
|
|
// Get the customer name from the economic system
|
|
$tmp_user->getCustomerEcocomicData($customer_number);
|
|
$cached = $tmp_user->getCached('economic_customer');
|
|
if ($cached) {
|
|
return $cached->name;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getUsersObject(): users_o
|
|
{
|
|
if (!isset($this->users_o)) {
|
|
$this->users_o = new users_o();
|
|
}
|
|
return $this->users_o;
|
|
}
|
|
|
|
public function getCustomerId(int $customerNumber): object|bool
|
|
{
|
|
// Check if the customer exists
|
|
$url = '/customers/' . $customerNumber;
|
|
$response = $this->send_request($url, 'GET', '');
|
|
$response = json_decode($response);
|
|
|
|
return isset($response->customerNumber) ? $response : false;
|
|
}
|
|
|
|
public function getCustomerProduct(int $customer_number, int $product_id): object
|
|
{
|
|
// Get the customer product
|
|
$url = '/customers/' . $customer_number . '/templates/invoiceline/' . $product_id;
|
|
$response = $this->send_request($url, 'GET', '');
|
|
return json_decode($response);
|
|
}
|
|
|
|
public function getCustomerDiscountPercentage(int $customer_number): int
|
|
{
|
|
// If the customer number is 0, return 0
|
|
if ($customer_number === 0) {
|
|
return 0;
|
|
}
|
|
// Get the customer products
|
|
$products = $this->getCustomerProducts($customer_number, 1)->collection;
|
|
$discount = $this->getCustomerProductDiscount($customer_number, $products[0]->product->productNumber);
|
|
// Since the discount is global, we only need to get the discount for one product
|
|
return $discount->discountPercentage;
|
|
}
|
|
|
|
public function getCustomerProducts(int $customer_number, int $limit = 10, int $page = 1): object
|
|
{
|
|
// Get the customer products
|
|
$url = '/customers/' . $customer_number . '/templates/invoiceline/?pagesize=' . $limit . '&skippages=' . $page - 1;
|
|
$response = $this->send_request($url, 'GET', '');
|
|
return json_decode($response);
|
|
}
|
|
|
|
public function getCustomerProductDiscount(int $customer_number, int $product_id)
|
|
{
|
|
// Get the customer global discount
|
|
$url = '/customers/' . $customer_number . '/templates/invoiceline/' . $product_id;
|
|
$response = $this->send_request($url, 'GET', '');
|
|
$response = json_decode($response);
|
|
return $response;
|
|
}
|
|
} |