From 24d297b48f0792065098de6cfe428353f6f53398 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Thu, 7 May 2020 11:13:43 +0000 Subject: [PATCH 1/2] Add error log if JO fulfillment cannot created the warranty. Fix for warranty creation issues when creating warranty from existing JO. #400 --- .../GenerateWarrantyFromJobOrderCommand.php | 47 ++++++++++++++----- .../JobOrderHandler/ResqJobOrderHandler.php | 2 + 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/Command/GenerateWarrantyFromJobOrderCommand.php b/src/Command/GenerateWarrantyFromJobOrderCommand.php index 23f436c4..69ae25b8 100644 --- a/src/Command/GenerateWarrantyFromJobOrderCommand.php +++ b/src/Command/GenerateWarrantyFromJobOrderCommand.php @@ -19,6 +19,8 @@ use App\Entity\SAPBattery; use App\Ramcar\ServiceType; use App\Ramcar\WarrantyStatus; +use DoctrineExtensions\Query\Mysql\DateFormat; + class GenerateWarrantyFromJobOrderCommand extends Command { protected $em; @@ -39,7 +41,9 @@ class GenerateWarrantyFromJobOrderCommand extends Command { $this->setName('warranty:generate') ->setDescription('Generates warranty from job order and inserts into database') - ->setHelp('Generate warranty from job order'); + ->setHelp('Generate warranty from job order') + ->addArgument('start_date', InputArgument::REQUIRED, 'Start Date') + ->addArgument('end_date', InputArgument::REQUIRED, 'End Date'); } protected function computeDateExpire($date_create, $warranty_period) @@ -96,8 +100,9 @@ class GenerateWarrantyFromJobOrderCommand extends Command protected function findWarranty($plate_number, $expiry_date) { - $date_expire = $expiry_date->format('Y-m-d'); - if (!isset($this->warranties_hash[$plate_number][$date_expire])) + // find warranty given plate number and expiration date + $results = $this->em->getRepository(Warranty::class)->findBy(['plate_number' => $plate_number, 'date_expire' => $expiry_date]); + if (empty($results)) { return false; } @@ -109,9 +114,19 @@ class GenerateWarrantyFromJobOrderCommand extends Command { $em = $this->em; + $s_date = $input->getArgument('start_date'); + $e_date = $input->getArgument('end_date'); + + $start_date = DateTime::createFromFormat('Ymd', $s_date); + $end_date = DateTime::createFromFormat('Ymd', $e_date); + $end_date->setTime(23, 59); + // to save on joins, go with invoice item first - $query = $em->createQuery('select ii,i,jo,cv from App\Entity\InvoiceItem ii inner join ii.invoice i inner join i.job_order jo inner join jo.cus_vehicle cv join jo.customer c where ii.battery is not null and jo.service_type = :service_type'); - $query->setParameter('service_type', ServiceType::BATTERY_REPLACEMENT_NEW); + $query = $em->createQuery('select ii,i,jo,cv from App\Entity\InvoiceItem ii inner join ii.invoice i inner join i.job_order jo inner join jo.cus_vehicle cv join jo.customer c where ii.battery is not null and jo.service_type = :service_type and jo.date_schedule > :date_start and jo.date_schedule < :date_end'); + $query->setParameter('service_type', ServiceType::BATTERY_REPLACEMENT_NEW) + ->setParameter('date_start', $start_date) + ->setParameter('date_end', $end_date); + /* $query = $em->createQuery('SELECT jo FROM App\Entity\JobOrder jo WHERE jo.service_type = :service_type'); @@ -175,9 +190,16 @@ class GenerateWarrantyFromJobOrderCommand extends Command // check if warranty already exists $cleaned_plate_number = Warranty::cleanPlateNumber($cv->getPlateNumber()); - $expiry_date = $this->computeDateExpire($jo->getInvoice()->getDateCreate(), $warranty_period); - $found_warranty = $this->findWarranty($cleaned_plate_number, $expiry_date); - if (!$found_warranty) + //$expiry_date = $this->computeDateExpire($jo->getInvoice()->getDateCreate(), $warranty_period); + // use date_schedule as the starting point of expiry date computation + $expiry_date_date_schedule = $this->computeDateExpire($jo->getDateSchedule(), $warranty_period); + $found_warranty_date_schedule = $this->findWarranty($cleaned_plate_number, $expiry_date_date_schedule); + + // need to check for warranty if date schedule != date_create because first version of this command used date_create for expiry date computation + $expiry_date_date_create = $this->computeDateExpire($jo->getDateCreate(), $warranty_period); + $found_warranty_date_create = $this->findWarranty($cleaned_plate_number, $expiry_date_date_create); + + if ((!$found_warranty_date_schedule) && (!$found_warranty_date_create)) { $bty_model_id = $invoice_item->getBattery()->getModel()->getID(); $bty_size_id = $invoice_item->getBattery()->getSize()->getID(); @@ -188,7 +210,7 @@ class GenerateWarrantyFromJobOrderCommand extends Command $date_create = date('Y-m-d H:i:s'); - $date_expire = $expiry_date->format('Y-m-d'); + $date_expire = $expiry_date_date_schedule->format('Y-m-d'); $first_name = addslashes(trim($customer->getFirstName())); $last_name = addslashes(trim($customer->getLastName())); @@ -197,13 +219,16 @@ class GenerateWarrantyFromJobOrderCommand extends Command $values = '(' . $bty_model_id . ',' . $bty_size_id . ',NULL,\'' . $warranty_class . '\',\'' . $cleaned_plate_number . '\',\'' . WarrantyStatus::ACTIVE . '\',\'' . $date_create . '\',\'' . $date_purchase . '\',\'' . $date_expire . '\',NULL,' - . $sap_code . ',NULL,\'' . $first_name . '\',\'' . $last_name . '\',\'' . $mobile_number . '\');'; + . $sap_code . ',NULL,\'' . $first_name . '\',\'' . $last_name . '\',\'' . $mobile_number . '\',' . 0 . ',NULL' . ');'; - $sql_statement = 'INSERT INTO `warranty` (bty_model_id,bty_size_id,serial,warranty_class,plate_number,status,date_create,date_purchase,date_expire,date_claim,sap_bty_id,claim_id,first_name,last_name,mobile_number) VALUES ' . $values . "\n"; + $sql_statement = 'INSERT INTO `warranty` (bty_model_id,bty_size_id,serial,warranty_class,plate_number,status,date_create,date_purchase,date_expire,date_claim,sap_bty_id,claim_id,first_name,last_name,mobile_number,flag_activated,warranty_privacy_policy) VALUES ' . $values . "\n"; echo $sql_statement; } + else + error_log('Warranty already exists for ' . $cleaned_plate_number . ' with expiration date ' . + $expiry_date_date_schedule->format('Y-m-d') . ' or ' . $expiry_date_date_create->format('Y-m-d')); } } } diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 585c6135..918de33c 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -862,6 +862,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface $this->wh->createWarranty($serial, $plate_number, $first_name, $last_name, $mobile_number, $batt_list, $date_purchase, $warranty_class); } + else + error_log('Invalid plate number for warranty. Plate number = ' . $obj->getCustomerVehicle()->getPlateNumber()); } } } From 78136cc281f9e5d6c648ce1f5f0b3f5d0682ff43 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 8 May 2020 05:30:27 +0000 Subject: [PATCH 2/2] Add output file for existing warranties and invalid plate numbers. #400 --- .../GenerateWarrantyFromJobOrderCommand.php | 69 +++++++++++-------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/src/Command/GenerateWarrantyFromJobOrderCommand.php b/src/Command/GenerateWarrantyFromJobOrderCommand.php index 69ae25b8..a5c64488 100644 --- a/src/Command/GenerateWarrantyFromJobOrderCommand.php +++ b/src/Command/GenerateWarrantyFromJobOrderCommand.php @@ -32,7 +32,6 @@ class GenerateWarrantyFromJobOrderCommand extends Command $this->em = $em; $this->loadSAPBatteries(); - $this->loadWarranties(); parent::__construct(); } @@ -43,7 +42,8 @@ class GenerateWarrantyFromJobOrderCommand extends Command ->setDescription('Generates warranty from job order and inserts into database') ->setHelp('Generate warranty from job order') ->addArgument('start_date', InputArgument::REQUIRED, 'Start Date') - ->addArgument('end_date', InputArgument::REQUIRED, 'End Date'); + ->addArgument('end_date', InputArgument::REQUIRED, 'End Date') + ->addArgument('output_filename', InputArgument::REQUIRED, 'Output Filename'); } protected function computeDateExpire($date_create, $warranty_period) @@ -66,28 +66,6 @@ class GenerateWarrantyFromJobOrderCommand extends Command } } - protected function loadWarranties() - { - $this->warranties_hash = []; - - /* - $warranties = $this->em->getRepository(Warranty::class)->findAll(); - foreach($warranties as $warranty) - { - $plate_number = $warranty->getPlateNumber(); - $date_expire = $warranty->getDateExpire(); - - // skip null date expire - if ($date_expire == null) - continue; - - $expiry_date = $date_expire->format('Y-m-d'); - - $this->warranties_hash[$plate_number][$expiry_date] = $warranty->getID(); - } - */ - } - protected function findSAPBattery($batt_id) { if (!isset($this->sapbatt_hash[$batt_id])) @@ -116,6 +94,7 @@ class GenerateWarrantyFromJobOrderCommand extends Command $s_date = $input->getArgument('start_date'); $e_date = $input->getArgument('end_date'); + $output_filename = $input->getArgument('output_filename'); $start_date = DateTime::createFromFormat('Ymd', $s_date); $end_date = DateTime::createFromFormat('Ymd', $e_date); @@ -135,6 +114,7 @@ class GenerateWarrantyFromJobOrderCommand extends Command $result = $query->iterate(); + $dupe_warranties = []; foreach ($result as $row) { $invoice_item = $row[0]; @@ -184,6 +164,11 @@ class GenerateWarrantyFromJobOrderCommand extends Command // check if plate number is "clean". If not, do not insert into warranty if (!(Warranty::cleanPlateNumber($cv->getPlateNumber()))) { + // log with the dupes + $dupe_warranties[] = [ + 'plate_number' => $cv->getPlateNumber(), + ]; + continue; } @@ -195,8 +180,9 @@ class GenerateWarrantyFromJobOrderCommand extends Command $expiry_date_date_schedule = $this->computeDateExpire($jo->getDateSchedule(), $warranty_period); $found_warranty_date_schedule = $this->findWarranty($cleaned_plate_number, $expiry_date_date_schedule); - // need to check for warranty if date schedule != date_create because first version of this command used date_create for expiry date computation - $expiry_date_date_create = $this->computeDateExpire($jo->getDateCreate(), $warranty_period); + // need to check for warranty using invoice date_create because + // first version of this command used invoice's date_create for expiry date computation + $expiry_date_date_create = $this->computeDateExpire($jo->getInvoice()->getDateCreate(), $warranty_period); $found_warranty_date_create = $this->findWarranty($cleaned_plate_number, $expiry_date_date_create); if ((!$found_warranty_date_schedule) && (!$found_warranty_date_create)) @@ -227,8 +213,18 @@ class GenerateWarrantyFromJobOrderCommand extends Command } else - error_log('Warranty already exists for ' . $cleaned_plate_number . ' with expiration date ' . - $expiry_date_date_schedule->format('Y-m-d') . ' or ' . $expiry_date_date_create->format('Y-m-d')); + { + $expiry_date = ''; + if ($expiry_date_date_create != $expiry_date_date_schedule) + $expiry_date = $expiry_date_date_create->format('Y-m-d'); + else + $expiry_date = $expiry_date_date_schedule->format('Y-m-d'); + + $dupe_warranties[] = [ + 'plate_number' => $cleaned_plate_number, + 'expiry_date' => $expiry_date, + ]; + } } } } @@ -237,6 +233,23 @@ class GenerateWarrantyFromJobOrderCommand extends Command $em->clear(); } + // check if dupes were found + if (count($dupe_warranties) > 0) + { + // output file + $dupe_outfile = fopen($output_filename, 'a'); + + foreach ($dupe_warranties as $dupe) + { + if (empty($dupe['expiry_date'])) + fwrite($dupe_outfile, 'Invalid plate number ' . $dupe['plate_number'] . "\n"); + else + fwrite($dupe_outfile, 'Warranty already exists for ' . $dupe['plate_number'] . ' with expiration date ' . $dupe['expiry_date'] . "\n"); + } + + fclose($dupe_outfile); + } + return 0; } }