From 9efc0e3a75b6cb7ecea0b220e606899afbad75b2 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Tue, 26 Nov 2019 07:53:31 +0000 Subject: [PATCH 1/4] Add CustomerController to CAPI. #281 --- config/api_acl.yaml | 5 + src/Controller/CAPI/CustomerController.php | 114 +++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 src/Controller/CAPI/CustomerController.php diff --git a/config/api_acl.yaml b/config/api_acl.yaml index 39557cf6..2ff18704 100644 --- a/config/api_acl.yaml +++ b/config/api_acl.yaml @@ -50,3 +50,8 @@ access_keys: acls: - id: privacypolicy.find label: Find Privacy Policy + - id: customer + label: Customer + acls: + - id: customer.register + label: Register Customer diff --git a/src/Controller/CAPI/CustomerController.php b/src/Controller/CAPI/CustomerController.php new file mode 100644 index 00000000..9c07b7f9 --- /dev/null +++ b/src/Controller/CAPI/CustomerController.php @@ -0,0 +1,114 @@ +acl_gen = $acl_gen; + } + + public function register(Request $req, EntityManagerInterface $em) + { + // required parameters + $params = [ + 'first_name', + 'last_name', + 'mobile_number', + 'make_id', + 'model_year', + 'plate_number', + 'color', + 'condition', + 'fuel_type', + ]; + + $msg = $this->checkRequiredParameters($req, $params); + error_log('msg - ' . $msg); + if ($msg) + return new APIResponse(false, $msg); + + $first_name = $req->request->get('first_name'); + $last_name = $req->request->get('last_name'); + $mobile_number = $req->request->get('mobile_number'); + + $make_id = $req->request->get('make_id'); + $model_year = $req->request->get('model_year'); + $plate_number = $this->cleanPlateNumber($req->request->get('plate_number')); + $color = $req->request->get('color'); + $condition = $req->request->get('condition'); + $fuel_type = $req->request->get('fuel_type'); + + // check if vehicle exists + $vehicle = $em->getRepository(Vehicle::class)->find($make_id); + if ($vehicle == null) + return new APIResponse(false, 'Invalid vehicle make.'); + + // check if customer already exists + $customers = $em->getRepository(Customer::class)->findBy(['phone_mobile' => $number]); + if (!empty($customers)) + { + foreach($customers as $customer) + { + // get customer vehicles for customer + $c_vehicles = $customer->getVehicles(); + + $cv_found = false; + if (!empty($c_vehicles)) + { + // check if plate number of customer vehicle matches plate number + foreach($c_vehicles as $c_vehicle) + { + $clean_cv_plate = $this->cleanPlateNumber($c_vehicle->getPlateNumber()); + + // check if it's already there + if ($clean_cv_plate == $plate_number) + { + // customer and customer vehicle already exists + $cv_found = true; + break; + } + } + } + + // if there is a customer vehicle matched + if ($cv_found) + { + // vehicle found, do nothing + // TODO: do we need to report that vehicle was found + } + else + { + // customer already exists but not customer vehicle + // add customer vehicle + + } + } + } + } + + protected function cleanPlateNumber($plate) + { + // remove spaces and make upper case + return strtoupper(str_replace(' ', '', $plate)); + } + +} From 16cd59dbfd3522e07d45c68f45cf6bd1d1c1aab9 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 27 Nov 2019 03:23:39 +0000 Subject: [PATCH 2/4] Add route to register customer. Finish register function. #281 --- .../api-bundle/Command/TestAPICommand.php | 15 ++- config/routes/capi.yaml | 8 ++ src/Controller/CAPI/CustomerController.php | 96 ++++++++++++++++++- 3 files changed, 115 insertions(+), 4 deletions(-) diff --git a/catalyst/api-bundle/Command/TestAPICommand.php b/catalyst/api-bundle/Command/TestAPICommand.php index bf35ce1e..9699ce0c 100644 --- a/catalyst/api-bundle/Command/TestAPICommand.php +++ b/catalyst/api-bundle/Command/TestAPICommand.php @@ -41,7 +41,6 @@ class TestAPICommand extends Command // TODO: shift this out of the bundle, since it's project specific - // warranty register $serial = 'AJ34LJADR12134LKJL5'; $plate_num = 'XEN918'; @@ -119,5 +118,19 @@ class TestAPICommand extends Command // privacy policy $privacy_policy_id = 2; $api->get('/capi/privacy_policy/' . $privacy_policy_id ); + + // register new customer + $params = [ + 'first_name' => 'Krispups', + 'last_name' =>'Porzindog', + 'mobile_number' => '9221111111', + 'make_id' => '22241', + 'model_year' => '2018', + 'plate_number' => 'KPP1234', + 'color' => 'White', + 'condition' => 'new', + 'fuel_type' => 'gas', + ]; + $api->post('/capi/customer', $params); } } diff --git a/config/routes/capi.yaml b/config/routes/capi.yaml index cf533814..04fe01d0 100644 --- a/config/routes/capi.yaml +++ b/config/routes/capi.yaml @@ -135,3 +135,11 @@ capi_privacy_policy: path: /capi/privacy_policy/{id} controller: App\Controller\CAPI\PrivacyPolicyController::getPrivacyPolicy methods: [GET] + +# customer + +# register customer and customer vehicle +capi_customer_register: + path: /capi/customer + controller: App\Controller\CAPI\CustomerController::register + methods: [POST] diff --git a/src/Controller/CAPI/CustomerController.php b/src/Controller/CAPI/CustomerController.php index 9c07b7f9..495486ba 100644 --- a/src/Controller/CAPI/CustomerController.php +++ b/src/Controller/CAPI/CustomerController.php @@ -28,6 +28,8 @@ class CustomerController extends APIController public function register(Request $req, EntityManagerInterface $em) { + $this->denyAccessUnlessGranted('customer.register', null, 'No access.'); + // required parameters $params = [ 'first_name', @@ -62,8 +64,33 @@ class CustomerController extends APIController if ($vehicle == null) return new APIResponse(false, 'Invalid vehicle make.'); + // clean up mobile number + // does it fit our 09XXXXXXXXX pattern? + if (preg_match('/^09[0-9]{9}$/', $mobile_number)) + { + // remove first '0' + $mobile_number = substr($mobile_number, 1); + error_log("CONVERTED TO $mobile_number"); + } + + // does it fit our 9XXXXXXXXX pattern? + if (!preg_match('/^9[0-9]{9}$/', $mobile_number)) + return new APIResponse(false, 'Invalid mobile number.'); + + /* + // min length 2 + // TODO: we need to check proper phone number format + // format should be '9XXXXXXXXX' + // TODO: if format doesn't fit and there's a 0 or 63 prefix, we should be able to detect and convert + if (strlen($mobile_number <= 2)) + continue; + */ + + + $data = []; + $message = ''; // check if customer already exists - $customers = $em->getRepository(Customer::class)->findBy(['phone_mobile' => $number]); + $customers = $em->getRepository(Customer::class)->findBy(['phone_mobile' => $mobile_number]); if (!empty($customers)) { foreach($customers as $customer) @@ -93,16 +120,79 @@ class CustomerController extends APIController if ($cv_found) { // vehicle found, do nothing - // TODO: do we need to report that vehicle was found + $message = 'Customer found.'; } else { // customer already exists but not customer vehicle // add customer vehicle - + $new_cv = new CustomerVehicle(); + + $new_cv->setCustomer($customer) + ->setPlateNumber($plate_number) + ->setStatusCondition($condition) + ->setModelYear($model_year) + ->setColor($color) + ->setFuelType($fuel_type) + ->setHasMotoliteBattery(true) + ->setVehicle($vehicle); + + $em->persist($new_cv); + + $message = 'Vehicle added.'; + $data[] = [ + 'make_id' => $make_id, + 'model_year' => $model_year, + 'plate_number' => $plate_number, + 'color' => $color, + 'condition' => $condition, + 'fuel_type' => $fuel_type, + ]; } } } + else + { + // customer not found + $new_cust = new Customer(); + $new_cust->setFirstName($first_name) + ->setLastName($last_name) + ->setPhoneMobile($mobile_number); + + $em->persist($new_cust); + + // add customer vehicle + $new_cv = new CustomerVehicle(); + + $new_cv->setCustomer($new_cust) + ->setPlateNumber($plate_number) + ->setStatusCondition($condition) + ->setModelYear($model_year) + ->setColor($color) + ->setFuelType($fuel_type) + ->setHasMotoliteBattery(true) + ->setVehicle($vehicle); + + $em->persist($new_cv); + + $message = 'Customer and vehicle added.'; + $data[] = [ + 'first_name' => $first_name, + 'last_name' => $last_name, + 'mobile_number' => $mobile_number, + 'make_id' => $make_id, + 'model_year' => $model_year, + 'plate_number' => $plate_number, + 'color' => $color, + 'condition' => $condition, + 'fuel_type' => $fuel_type, + ]; + } + + $em->flush(); + $em->clear(); + + return new APIResponse(true, $message, $data); } protected function cleanPlateNumber($plate) From 2a45de2b31c350804f31b90152c52db3e1dd5c01 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 27 Nov 2019 03:27:53 +0000 Subject: [PATCH 3/4] Rename the path for customer registration. #281 --- config/routes/capi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/routes/capi.yaml b/config/routes/capi.yaml index 04fe01d0..ee3c8668 100644 --- a/config/routes/capi.yaml +++ b/config/routes/capi.yaml @@ -140,6 +140,6 @@ capi_privacy_policy: # register customer and customer vehicle capi_customer_register: - path: /capi/customer + path: /capi/quick_registration controller: App\Controller\CAPI\CustomerController::register methods: [POST] From 8921f2442b9074cdcd32e7b224fb303f1a5e2ec2 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 27 Nov 2019 03:37:42 +0000 Subject: [PATCH 4/4] Add prefix for vehicle data. #281 --- .../api-bundle/Command/TestAPICommand.php | 14 +++++------ src/Controller/CAPI/CustomerController.php | 24 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/catalyst/api-bundle/Command/TestAPICommand.php b/catalyst/api-bundle/Command/TestAPICommand.php index 9699ce0c..d32097fe 100644 --- a/catalyst/api-bundle/Command/TestAPICommand.php +++ b/catalyst/api-bundle/Command/TestAPICommand.php @@ -124,13 +124,13 @@ class TestAPICommand extends Command 'first_name' => 'Krispups', 'last_name' =>'Porzindog', 'mobile_number' => '9221111111', - 'make_id' => '22241', - 'model_year' => '2018', - 'plate_number' => 'KPP1234', - 'color' => 'White', - 'condition' => 'new', - 'fuel_type' => 'gas', + 'v_make_id' => '22241', + 'v_model_year' => '2018', + 'v_plate_number' => 'KPP1234', + 'v_color' => 'White', + 'v_condition' => 'new', + 'v_fuel_type' => 'gas', ]; - $api->post('/capi/customer', $params); + $api->post('/capi/quick_registration', $params); } } diff --git a/src/Controller/CAPI/CustomerController.php b/src/Controller/CAPI/CustomerController.php index 495486ba..55aae2bd 100644 --- a/src/Controller/CAPI/CustomerController.php +++ b/src/Controller/CAPI/CustomerController.php @@ -35,12 +35,12 @@ class CustomerController extends APIController 'first_name', 'last_name', 'mobile_number', - 'make_id', - 'model_year', - 'plate_number', - 'color', - 'condition', - 'fuel_type', + 'v_make_id', + 'v_model_year', + 'v_plate_number', + 'v_color', + 'v_condition', + 'v_fuel_type', ]; $msg = $this->checkRequiredParameters($req, $params); @@ -52,12 +52,12 @@ class CustomerController extends APIController $last_name = $req->request->get('last_name'); $mobile_number = $req->request->get('mobile_number'); - $make_id = $req->request->get('make_id'); - $model_year = $req->request->get('model_year'); - $plate_number = $this->cleanPlateNumber($req->request->get('plate_number')); - $color = $req->request->get('color'); - $condition = $req->request->get('condition'); - $fuel_type = $req->request->get('fuel_type'); + $make_id = $req->request->get('v_make_id'); + $model_year = $req->request->get('v_model_year'); + $plate_number = $this->cleanPlateNumber($req->request->get('v_plate_number')); + $color = $req->request->get('v_color'); + $condition = $req->request->get('v_condition'); + $fuel_type = $req->request->get('v_fuel_type'); // check if vehicle exists $vehicle = $em->getRepository(Vehicle::class)->find($make_id);