218 lines
6.9 KiB
PHP
218 lines
6.9 KiB
PHP
<?php
|
|
|
|
namespace App\Controller\Insurance;
|
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
|
|
use App\Controller\LoggedController;
|
|
|
|
use App\Insurance\ClientData;
|
|
use App\Insurance\ClientType;
|
|
use App\Insurance\LineType;
|
|
|
|
use App\Ramcar\APIResult;
|
|
|
|
use App\Service\InsuranceDataValidator;
|
|
use App\Service\InsuranceConnector;
|
|
|
|
use App\Entity\MobileSession;
|
|
|
|
// controller to connect mobile app to insurance api
|
|
class InsuranceAPIController extends Controller implements LoggedController
|
|
{
|
|
protected $session;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->session = null;
|
|
}
|
|
|
|
public function createCTPLApplication(Request $req, EntityManagerInterface $em, InsuranceDataValidator $ins_validator,
|
|
InsuranceConnector $insurance)
|
|
{
|
|
// check parameters
|
|
$required_params = [
|
|
'client_type',
|
|
'first_name',
|
|
'last_name',
|
|
'corporate_name',
|
|
'address_number',
|
|
'address_barangay',
|
|
'address_city',
|
|
'address_province',
|
|
'zipcode',
|
|
'mobile_number',
|
|
'email_address',
|
|
'make',
|
|
'model',
|
|
'series',
|
|
'color',
|
|
'plate_number',
|
|
'mv_file_number',
|
|
'motor_number',
|
|
'serial_chassis',
|
|
'year_model',
|
|
'mv_type_id',
|
|
'body_type',
|
|
'is_public',
|
|
'line',
|
|
];
|
|
|
|
// check required parameters and api key
|
|
$res = $this->checkParamsAndKey($req, $em, $required_params);
|
|
if ($res->isError())
|
|
return $res->getReturnResponse();
|
|
|
|
// create client data
|
|
$client_data = new ClientData();
|
|
|
|
$this->setClientData($req, $client_data);
|
|
|
|
// check if client data values are valid
|
|
$error_message = $ins_validator->validateClientData($client_data);
|
|
if ($error_message != null)
|
|
{
|
|
error_log('client data values are not valid ' . $error_message);
|
|
// return error message
|
|
$res->setError(true)
|
|
->setErrorMessage($error_message);
|
|
|
|
return $res->getReturnResponse();
|
|
}
|
|
|
|
$result = $insurance->processApplication($client_data);
|
|
|
|
// check status of result
|
|
if ($result['status'] == 'error')
|
|
{
|
|
// get message and return error message
|
|
$message = $result['message'];
|
|
$res->setError(true)
|
|
->setErrorMessage($message);
|
|
|
|
return $res->getReturnResponse();
|
|
}
|
|
|
|
// return data portion of result received from insurance api
|
|
$data = $result['data'];
|
|
|
|
$res->setData($data);
|
|
|
|
return $res->getReturnResponse();
|
|
}
|
|
|
|
protected function setClientData(Request $req, ClientData $client_data)
|
|
{
|
|
// set client info part
|
|
$client_data->setClientType($req->request->get('client_type', ''))
|
|
->setFirstName($req->request->get('first_name', ''))
|
|
->setMiddleName($req->request->get('middle_name', ''))
|
|
->setSurname($req->request->get('last_name', ''))
|
|
->setCorporateName($req->request->get('corporate_name', ''));
|
|
|
|
// set the client contact info part
|
|
$client_data->setAddressNumber($req->request->get('address_number', ''))
|
|
->setAddressStreet($req->request->get('address_street', ''))
|
|
->setAddressBuilding($req->request->get('address_building', ''))
|
|
->setAddressBarangay($req->request->get('address_barangay', ''))
|
|
->setAddressCity($req->request->get('address_city', ''))
|
|
->setAddressProvince($req->request->get('address_province', ''))
|
|
->setZipcode($req->request->get('zipcode', 0))
|
|
->setMobileNumber($req->request->get('mobile_number', ''))
|
|
->setEmailAddress($req->request->get('email_address', ''));
|
|
|
|
// set the car info part
|
|
$client_data->setMake($req->request->get('make', ''))
|
|
->setModel($req->request->get('model', ''))
|
|
->setSeries($req->request->get('series', ''))
|
|
->setColor($req->request->get('color', ''))
|
|
->setPlateNumber($req->request->get('plate_number', ''))
|
|
->setMvFileNumber($req->request->get('mv_file_number', ''))
|
|
->setMotorNumber($req->request->get('motor_number', ''))
|
|
->setSerialChassis($req->request->get('serial_chassis', ''))
|
|
->setYearModel($req->request->get('year_model', 0))
|
|
->setMvTypeID($req->request->get('mv_type_id', 0))
|
|
->setBodyType($req->request->get('body_type', ''))
|
|
->setLine($req->request->get('line', ''))
|
|
->setPublic($req->request->get('is_public', false));
|
|
}
|
|
|
|
protected function checkMissingParameters(Request $req, $params = [])
|
|
{
|
|
$missing = [];
|
|
|
|
// check if parameters are there
|
|
foreach ($params as $param)
|
|
{
|
|
if ($req->getMethod() == 'GET')
|
|
{
|
|
$check = $req->query->get($param);
|
|
if (empty($check))
|
|
$missing[] = $param;
|
|
}
|
|
else if ($req->getMethod() == 'POST')
|
|
{
|
|
$check = $req->request->get($param);
|
|
if (empty($check))
|
|
$missing[] = $param;
|
|
}
|
|
else
|
|
return $params;
|
|
}
|
|
|
|
return $missing;
|
|
}
|
|
|
|
protected function checkAPIKey($em, $api_key)
|
|
{
|
|
// find the api key (session id)
|
|
$session = $em->getRepository(MobileSession::class)->find($api_key);
|
|
if ($session == null)
|
|
return null;
|
|
|
|
return $session;
|
|
}
|
|
|
|
protected function checkParamsAndKey(Request $req, $em, $params)
|
|
{
|
|
// returns APIResult object
|
|
$res = new APIResult();
|
|
|
|
// check for api_key in query string
|
|
$api_key = $req->query->get('api_key');
|
|
if (empty($api_key))
|
|
{
|
|
$res->setError(true)
|
|
->setErrorMessage('Missing API key');
|
|
return $res;
|
|
}
|
|
|
|
// check missing parameters
|
|
$missing = $this->checkMissingParameters($req, $params);
|
|
if (count($missing) > 0)
|
|
{
|
|
$miss_string = implode(', ', $missing);
|
|
$res->setError(true)
|
|
->setErrorMessage('Missing parameter(s): ' . $miss_string);
|
|
return $res;
|
|
}
|
|
|
|
// check api key
|
|
$sess = $this->checkAPIKey($em, $req->query->get('api_key'));
|
|
if ($sess == null)
|
|
{
|
|
$res->setError(true)
|
|
->setErrorMessage('Invalid API Key');
|
|
return $res;
|
|
}
|
|
|
|
// store session
|
|
$this->session = $sess;
|
|
|
|
return $res;
|
|
}
|
|
}
|