resq/src/Service/InsuranceClientDataValidator.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;
}
}