| Server IP : 95.46.96.79 / Your IP : 216.73.216.84 Web Server : Apache/2.4.41 (Ubuntu) System : Linux zaimer.uz 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : akslabs_uz_usr ( 1001) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/sugurtatrip__usr95/data/www/sugurtatrip.uz/apiv1/policy/src/Api/ |
Upload File : |
<?php
namespace Api;
use Core\PriceLoader;
use Core\ApiActions;
use Gross\GrossPriceModel;
use Gross\GrossInfoModel;
use Gross\GrossPolicyModel;
use Utils\ActivityMapper;
class GrossController extends PriceLoader {
public function handle_request($request) {
if(isset($request['data']['activity_id'])) {
$activity_id = ActivityMapper::getActivityId($request['data']['activity_id'], 'gross');
$request['data']['activity_id'] = $activity_id;
}
switch ($request['action']) {
case ApiActions::REQUEST_OFFERS:
$gross_info_model = $this->createGrossInfoModel($request['data']);
$programs = $gross_info_model->getPrograms();
$programs_ids = array_map(function($program) {
return $program->program_id;
}, $programs);
$request['data']['programs'] = $programs_ids;
$gross_price_model = $this->createGrossPriceModel($request['data']);
$result = $gross_price_model->calculatePolicyOffers();
return $result;
case ApiActions::GROSS_CALCULATE_POLICY:
$request['data']['programs'] = [];
$gross_price_model = $this->createGrossPriceModel($request['data']);
$result = $gross_price_model->calculatePolicy();
return $result;
case ApiActions::GROSS_CREATE_POLICY_LOCAL:
$gross_policy_model = $this->createGrossPolicyModel($request['data'], $this->getRequestId());
$result = $gross_policy_model->createPolicyLocal();
return $result;
case ApiActions::GROSS_CREATE_PAID_POLICY:
$gross_policy_model = $this->createGrossPolicyModel($request['data'], $this->getRequestId());
$result = $gross_policy_model->createPaidPolicy();
return $result;
case ApiActions::GROSS_ISSUE_POLICY:
$gross_policy_model = $this->createGrossPolicyModel($request['data'], $this->getRequestId());
$result = $gross_policy_model->issuePolicy();
return $result;
case ApiActions::GROSS_CHECK_ISSUED_POLICY:
$gross_policy_model = $this->createGrossPolicyModel($request['data'], $this->getRequestId());
$result = $gross_policy_model->checkIssued();
return $result;
case ApiActions::GROSS_GET_POLICY:
$gross_policy_model = $this->createGrossPolicyModel($request['data'], $this->getRequestId());
$result = $gross_policy_model->getPolicy($request['data']);
return $result;
default:
return [
'message' => 'Action doesn\'t exist for this partner'
];
}
}
public function prepareData($price) {
return [
'partner' => 'Gross',
'result' => $price
];
}
private function createGrossInfoModel($data) {
$countries = $this->mapCountriesToIds($data['countries_iso']);
$gross_info_model = new GrossInfoModel($countries);
return $gross_info_model;
}
private function createGrossPriceModel($data) {
$begin_date = $data['start_date'] ?? (new \DateTime())->format('d.m.Y');
$end_date = $data['end_date'] ?? (new \DateTime('tomorrow'))->format('d.m.Y');
$countries = $this->mapCountriesToAlpha2($data['countries_iso']);
$has_covid = $data['has_covid'] ?? false;
$birthdays = $data['date_births'] ?? [];
$programs = $data['programs'] ?? [];
$program_id = $data['program_id'] ?? null;
$purpose_id = $data['activity_id'] ?? 1;
$gross_price_model = new GrossPriceModel($begin_date, $end_date, $countries, $birthdays, $has_covid, $programs, $program_id, $purpose_id);
return $gross_price_model;
}
private function createGrossPolicyModel($data, ?int $request_id) {
if (!isset($data['countries_iso'])) {
$data['countries_iso'] = [];
}
if (!isset($data['insured'])) {
$data['insured'] = [];
}
if(!isset($data['applicant'])) {
$data['applicant'] = [];
$data['applicant']['country'] = '';
}
$data['country'] = $this->mapCountriesToAlpha2($data['countries_iso']);
$data['insured'] = array_map(function($insured) {
$insured['country'] = $this->mapCountryToAlpha2($insured['country']);
return $insured;
}, $data['insured']);
$data['applicant']['country'] = $this->mapCountryToAlpha2($data['applicant']['country']);
return new GrossPolicyModel( $data, $request_id);
}
private function mapCountriesToAlpha2($countries) {
$countriesListJSON = file_get_contents(__DIR__ . '/../Data/Countries.json');
$countriesList = json_decode($countriesListJSON, true);
$countries_alpha2 = array_map(function($alpha3) use ($countriesList) {
$country = array_filter($countriesList, function($item) use ($alpha3) {
return $item['alpha3'] === $alpha3;
});
return reset($country)['alpha2'];
}, $countries);
return $countries_alpha2;
}
private function mapCountryToAlpha2($countryCode) {
$countriesListJSON = file_get_contents(__DIR__ . '/../Data/Countries.json');
$countriesList = json_decode($countriesListJSON, true);
$filteredCountries = array_filter($countriesList, function ($country) use ($countryCode) {
return $country['alpha3'] === $countryCode;
});
$selected_country = reset($filteredCountries);
if ($selected_country === false) {
return $countryCode;
}
return $selected_country['alpha2'];
}
private function mapCountriesToIds($countries) {
$countriesListJSON = file_get_contents(__DIR__ . '/../Data/Countries.json');
$grossCountriesListJSON = file_get_contents(__DIR__ . '/../Data/GrossCountries.json');
$countriesList = json_decode($countriesListJSON, true);
$grossCountriesList = json_decode($grossCountriesListJSON, true);
$countries_ids = [];
$countries_alpha2 = array_map(function($alpha3) use ($countriesList) {
$country = array_filter($countriesList, function($item) use ($alpha3) {
return $item['alpha3'] === $alpha3;
});
return reset($country)['alpha2'];
}, $countries);
foreach ($countries_alpha2 as $alpha2) {
$grossCountry = array_filter($grossCountriesList, function($item) use ($alpha2) {
return $item['code'] === $alpha2;
});
$countries_ids[] = reset($grossCountry)['id'];
}
return $countries_ids;
}
}