253 lines
6.9 KiB
PHP
253 lines
6.9 KiB
PHP
<?php
|
|
|
|
namespace App\Service;
|
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
|
|
use App\Entity\MotorVehicleType;
|
|
|
|
use App\Insurance\ClientData;
|
|
use App\Insurance\LineType;
|
|
use App\Insurance\ClientType;
|
|
|
|
class InsuranceDataValidator
|
|
{
|
|
protected $em;
|
|
|
|
public function __construct(EntityManagerInterface $em)
|
|
{
|
|
$this->em = $em;
|
|
}
|
|
|
|
public function validateClientData(ClientData$client_data)
|
|
{
|
|
// client type is required
|
|
if (empty($client_data->getClientType()))
|
|
{
|
|
$error = 'Client type is required.';
|
|
return $error;
|
|
}
|
|
|
|
// client type values should either be C or I
|
|
if (($client_data->getClientType() !== ClientType::CORPORATE) &&
|
|
($client_data->getClientType() !== ClientType::INDIVIDUAL))
|
|
{
|
|
$error = 'Invalid client type values. Values should only be C for corporate type or I for individual.';
|
|
return $error;
|
|
}
|
|
|
|
// first name is required
|
|
if (empty($client_data->getFirstName()))
|
|
{
|
|
$error = 'First name is required.';
|
|
return $error;
|
|
}
|
|
|
|
// surname is required
|
|
if (empty($client_data->getSurname()))
|
|
{
|
|
$error = 'Surname is required.';
|
|
return $error;
|
|
}
|
|
|
|
// corporate name is required
|
|
if (empty($client_data->getCorporateName()))
|
|
{
|
|
$error = 'Corporate name is required.';
|
|
return $error;
|
|
}
|
|
|
|
// number address is required
|
|
if (empty($client_data->getAddressNumber()))
|
|
{
|
|
$error = 'House number address is required.';
|
|
return $error;
|
|
}
|
|
|
|
// barangay address is required
|
|
if (empty($client_data->getAddressBarangay()))
|
|
{
|
|
$error = 'Barangay address is required.';
|
|
return $error;
|
|
}
|
|
|
|
// city address is required
|
|
if (empty($client_data->getAddressCity()))
|
|
{
|
|
$error = 'City address is required.';
|
|
return $error;
|
|
}
|
|
|
|
// province address is required
|
|
if (empty($client_data->getAddressProvince()))
|
|
{
|
|
$error = 'Province address is required.';
|
|
return $error;
|
|
}
|
|
|
|
// zipcode is required
|
|
if (empty($client_data->getZipcode()))
|
|
{
|
|
$error = 'Zipcode is required.';
|
|
return $error;
|
|
}
|
|
|
|
// mobile number is required
|
|
if (empty($client_data->getMobileNumber()))
|
|
{
|
|
$error = 'Mobile number is required.';
|
|
return $error;
|
|
}
|
|
|
|
// email address is required
|
|
if (empty($client_data->getEmailAddress()))
|
|
{
|
|
$error = 'Email address is required.';
|
|
return $error;
|
|
}
|
|
|
|
// make is required
|
|
if (empty($client_data->getMake()))
|
|
{
|
|
$error = 'Vehicle make is required.';
|
|
return $error;
|
|
}
|
|
|
|
// model is required
|
|
if (empty($client_data->getMake()))
|
|
{
|
|
$error = 'Vehicle make is required.';
|
|
return $error;
|
|
}
|
|
|
|
// series is required
|
|
if (empty($client_data->getSeries()))
|
|
{
|
|
$error = 'Vehicle series is required.';
|
|
return $error;
|
|
}
|
|
|
|
// color is required
|
|
if (empty($client_data->getColor()))
|
|
{
|
|
$error = 'Vehicle color is required.';
|
|
return $error;
|
|
}
|
|
|
|
// plate number is required
|
|
if (empty($client_data->getPlateNumber()))
|
|
{
|
|
$error = 'Plate number is required.';
|
|
return $error;
|
|
}
|
|
|
|
// plate number is correct format
|
|
$is_valid_plate = $this->checkPlateNumber($client_data->getPlateNumber());
|
|
if (!($is_valid_plate))
|
|
{
|
|
$error = 'Invalid plate number.';
|
|
return $error;
|
|
}
|
|
|
|
// MV file number is required
|
|
if (empty($client_data->getMvFileNumber()))
|
|
{
|
|
$error = 'MV file number is required.';
|
|
return $error;
|
|
}
|
|
|
|
// motor number is required
|
|
if (empty($client_data->getMotorNumber()))
|
|
{
|
|
$error = 'Motor number is required.';
|
|
return $error;
|
|
}
|
|
|
|
// serial or chassis number is required
|
|
if (empty($client_data->getSerialChassis()))
|
|
{
|
|
$error = 'Serial or chassis number is required.';
|
|
return $error;
|
|
}
|
|
|
|
// vehicle year model is required
|
|
if (empty($client_data->getYearModel()))
|
|
{
|
|
$error = 'Vehicle year model is required.';
|
|
return $error;
|
|
}
|
|
|
|
// motor vehicle type id is required
|
|
if ($client_data->getMvTypeID() == 0)
|
|
{
|
|
$error = 'Motor vehicle type must be set.';
|
|
return $error;
|
|
}
|
|
|
|
// check if it's a valid MV type
|
|
$mv_type_id = $client_data->getMvTypeID();
|
|
$mv_type = $this->em->getRepository(MotorVehicleType::class)->findBy(['mv_type_id' => $mv_type_id]);
|
|
if ($mv_type == null)
|
|
{
|
|
$error = 'Invalid motor vehicle type.';
|
|
return $error;
|
|
}
|
|
|
|
// body type is required
|
|
if (empty($client_data->getBodyType()))
|
|
{
|
|
$error = 'Vehicle body type is required.';
|
|
return $error;
|
|
}
|
|
|
|
// line is required
|
|
if (empty($client_data->getLine()))
|
|
{
|
|
$error = 'Line type is required.';
|
|
return $error;
|
|
}
|
|
|
|
// check line if valid
|
|
if (($client_data->getLine() !== LineType::PRIVATE_CAR) &&
|
|
($client_data->getLine() !== LineType::PRIVATE_MOTORCYCLE) &&
|
|
($client_data->getLine() !== LineType::COMMERCIAL_VEHICLE) &&
|
|
($client_data->getLine() !== LineType::PUBLIC_MOTORCYCLE))
|
|
{
|
|
$error = 'Invalid line type.';
|
|
return $error;
|
|
}
|
|
|
|
// check line type and flag_public combination
|
|
// if line type is MCOC/private motorcycle, flag_public should be false
|
|
// if line type is LCOC/public motorcycle, flag_public should be true
|
|
if ($client_data->getLine() == LineType::PRIVATE_MOTORCYCLE)
|
|
{
|
|
if ($client_data->isPublic())
|
|
{
|
|
$error = 'Line type is invalid for public vehicles.';
|
|
return $error;
|
|
}
|
|
}
|
|
|
|
if ($client_data->getLine() == LineType::PUBLIC_MOTORCYCLE)
|
|
{
|
|
if (!($client_data->isPublic()))
|
|
{
|
|
$error = 'Line type is invalid for private vehicles.';
|
|
return $error;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
protected function checkPlateNumber($plate)
|
|
{
|
|
// check if alphanumeric, max length is 11, no spaces, uppercase
|
|
$res = preg_match("/^[A-Z0-9]{1,11}+$/", $plate);
|
|
if ($res)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
}
|