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()); } } }