From 38023bdb00791fa0cdb2fbe426b62131af6ebbf2 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Wed, 20 Sep 2023 20:40:00 +0800 Subject: [PATCH] Add insurance information to customer vehicle endpoint #761 --- .../CustomerAppAPI/VehicleController.php | 17 ++++++++++++++ src/Entity/CustomerVehicle.php | 22 +++++++++++-------- src/Entity/GatewayTransaction.php | 11 ---------- src/Entity/InsuranceApplication.php | 1 + src/Ramcar/InsuranceApplicationStatus.php | 4 ++++ 5 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/Controller/CustomerAppAPI/VehicleController.php b/src/Controller/CustomerAppAPI/VehicleController.php index 51a8ce80..d56a86ee 100644 --- a/src/Controller/CustomerAppAPI/VehicleController.php +++ b/src/Controller/CustomerAppAPI/VehicleController.php @@ -176,6 +176,22 @@ class VehicleController extends ApiController if ($cv->getName() != null) $cv_name = $cv->getName(); + // get latest insurance row + $insurance = null; + $iobj = $cv->getLatestInsuranceApplication(); + if (!empty($iobj)) { + $gt = $iobj->getGatewayTransaction(); + + $insurance = [ + 'id' => $iobj->getID(), + 'status' => $iobj->getStatus(), + 'coc_url' => $iobj->getCOC(), + 'checkout_url' => $gt->getMetadata()['checkout_url'], + 'transaction_status' => $gt->getStatus(), + 'premium_amount' => (string)bcdiv($gt->getAmount(), 100), // NOTE: hard expressing as string so it's consistent + ]; + } + $cv_list[] = [ 'cv_id' => $cv->getID(), 'mfg_id' => $cv->getVehicle()->getManufacturer()->getID(), @@ -192,6 +208,7 @@ class VehicleController extends ApiController 'is_motolite' => $cv->hasMotoliteBattery() ? 1 : 0, 'is_active' => $cv->isActive() ? 1 : 0, 'warranty' => $warranty, + 'latest_insurance' => $insurance, ]; } diff --git a/src/Entity/CustomerVehicle.php b/src/Entity/CustomerVehicle.php index 281d14db..a120c71e 100644 --- a/src/Entity/CustomerVehicle.php +++ b/src/Entity/CustomerVehicle.php @@ -2,11 +2,13 @@ namespace App\Entity; +use App\Ramcar\InsuranceApplicationStatus; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; use Symfony\Component\Validator\Constraints as Assert; use DateTime; +use Doctrine\Common\Collections\Criteria; /** * @ORM\Entity @@ -116,15 +118,13 @@ class CustomerVehicle // link to insurance /** - * @ORM\OneToOne(targetEntity="InsuranceApplication", inversedBy="customer_vehicle") - * @ORM\JoinColumn(name="insurance_application_id", referencedColumnName="id", nullable=true) + * @ORM\OneToMany(targetEntity="InsuranceApplication", mappedBy="customer_vehicle") */ - protected $insurance_application; + protected $insurance_applications; public function __construct() { $this->flag_active = true; - $this->job_orders = new ArrayCollection(); } @@ -290,14 +290,18 @@ class CustomerVehicle return $this->flag_active; } - public function setInsuranceApplication(InsuranceApplication $application) + public function getInsuranceApplications() { - $this->insurance_application = $application; - return $this; + return $this->insurance_applications; } - public function getInsuranceApplication() + public function getLatestInsuranceApplication() { - return $this->insurance_application; + $criteria = Criteria::create() + ->where(Criteria::expr()->notIn('status', [InsuranceApplicationStatus::EXPIRED, InsuranceApplicationStatus::CANCELLED])) + ->orderBy(['date_submit' => Criteria::DESC]) + ->setMaxResults(1); + + return $this->insurance_applications->matching($criteria)[0]; } } diff --git a/src/Entity/GatewayTransaction.php b/src/Entity/GatewayTransaction.php index 2bd6ecb8..e53a7f4b 100644 --- a/src/Entity/GatewayTransaction.php +++ b/src/Entity/GatewayTransaction.php @@ -180,17 +180,6 @@ class GatewayTransaction return $this->ext_transaction_id; } - public function setCallbackClass($callback_class) - { - $this->callback_class = $callback_class; - return $this; - } - - public function getCallbackClass() - { - return $this->callback_class; - } - public function setMetadata($metadata) { $this->metadata = $metadata; diff --git a/src/Entity/InsuranceApplication.php b/src/Entity/InsuranceApplication.php index 7cda138c..d582feff 100644 --- a/src/Entity/InsuranceApplication.php +++ b/src/Entity/InsuranceApplication.php @@ -33,6 +33,7 @@ class InsuranceApplication /** * @ORM\ManyToOne(targetEntity="CustomerVehicle", inversedBy="insurance") * @ORM\JoinColumn(name="customer_vehicle_id", referencedColumnName="id") + * @Assert\NotBlank() */ protected $customer_vehicle; diff --git a/src/Ramcar/InsuranceApplicationStatus.php b/src/Ramcar/InsuranceApplicationStatus.php index 821615eb..8908a3a8 100644 --- a/src/Ramcar/InsuranceApplicationStatus.php +++ b/src/Ramcar/InsuranceApplicationStatus.php @@ -7,10 +7,14 @@ class InsuranceApplicationStatus extends NameValue const CREATED = 'created'; const PAID = 'paid'; const COMPLETED = 'completed'; + const CANCELLED = 'cancelled'; + const EXPIRED = 'expired'; const COLLECTION = [ 'created' => 'Created', 'paid' => 'Paid', 'completed' => 'Completed', + 'cancelled' => 'Cancelled', + 'expired' => 'Expired', ]; }