post('/guest/validation/customer-number', function () { // Get the post data global $response; self::requireParameters(['customer_number']); // Validate the customer number $customer_number = (int)$this->getParameter('customer_number'); self::requireType($customer_number, $this->type_int()); self::requireMinValue($customer_number, 1); self::requireMaxValue($customer_number, 999999999); $customer_number = (int)$this->getParameter('customer_number'); // Check if the customer number exists $doesCustomerExist = (new users_o())->getUserByCustomerNumber($customer_number)->exists(); // Return the result $response->success(['exists' => $doesCustomerExist, 'customer_number' => $customer_number]); }); $this->get('/cvr/search', function () { global $response; //self::requirePermission('cvr_search'); // TODO: Remove this self::requireParameters(['query']); $query = self::getParameter('query'); if (strlen($query) < 2) { $response->error('Query must be at least 2 characters long', 400); } $virkdata = new virkdata(); $result = $virkdata->searchCompanies($query); $response->success($result, 200); }, [ 'cvr_search' => 'Search CVR numbers' ]); $this->get('/guest/departments', function () { global $response; $departments = (new departments_o()); try { $self_serve_module_enabled = (bool)(new selfserve())->config->enabled->getVariableValue(); } catch (\Throwable) { $self_serve_module_enabled = false; } // Check if the department lane status is requested to be included $include_lane_status = false; if (self::isParametersSet(['include_lanes']) && self::getParameter('include_lanes')) { $include_lane_status = true; } $response->success($departments->listObjectsWithPaginationIfSet(function ($department_array) use ($departments, $include_lane_status, $self_serve_module_enabled) { $additional_data = []; // If including lane status, fetch it if ($include_lane_status) { $department = $departments->select((int)$department_array['id']); // Include the status of self-serve in the department (disabled, when staffed hours) $department_self_serve_enabled = (bool)$department->getSelfServeEnabled(); $additional_data['self_serve_enabled'] = $department_self_serve_enabled; $additional_data['self_serve_module_enabled'] = $self_serve_module_enabled; $additional_data['lanes'] = array_map( /** * @param department_lanes_o $lane * @return array */ function (department_lanes_o $lane) use ($department_self_serve_enabled, $self_serve_module_enabled) { $status = (string)$lane->getLaneStatus()->name; $lane_self_serve_enabled = $lane->isSelfServeEnabled(); $self_serve_available = $self_serve_module_enabled && $department_self_serve_enabled && $lane_self_serve_enabled && strtoupper(trim($status)) === 'AVAILABLE'; $self_serve_unavailable_reason = null; if (!$self_serve_module_enabled) { $self_serve_unavailable_reason = 'self_serve_module_disabled'; } elseif (!$department_self_serve_enabled) { $self_serve_unavailable_reason = 'department_self_serve_disabled'; } elseif (!$lane_self_serve_enabled) { $self_serve_unavailable_reason = 'lane_self_serve_disabled'; } elseif (strtoupper(trim($status)) !== 'AVAILABLE') { $self_serve_unavailable_reason = 'lane_status_' . strtolower($status); } return [ 'id' => (int)$lane->id, 'name' => (string)$lane->name->value(), 'status' => $status, 'products' => $lane->getSelfServeLaneProducts(), 'selfserve_enabled' => $lane_self_serve_enabled, 'selfserve_available' => $self_serve_available, 'selfserve_unavailable_reason' => $self_serve_unavailable_reason, 'machine_available' => $self_serve_available && !empty($lane->relay_machine_id->value()), 'dynamic_image_id' => $lane->dynamic_image_id->value() ? (int)$lane->dynamic_image_id->value() : null, ]; }, $department->getLanes()); } // Only return id and name return [ 'id' => $department_array['id'], 'name' => $department_array['name'], 'longitude' => $department_array['longitude'], 'latitude' => $department_array['latitude'], 'address' => $department_array['description'], ...$additional_data ]; }, $departments->forceRestrictFilters([ 'visible' => 1, // Only show visible departments, this is to prevent showing internal system departments to the end-user. ])), 200); }); } }