From 7e7d99d9c957d8a78d38c5fcbcdc9b275ca51474 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 22 Feb 2019 05:29:10 -0500 Subject: [PATCH 1/3] Add initial changes to script that generates warranties for existing job orders --- .../GenerateWarrantyFromJobOrderCommand.php | 86 +++++++++++++++++++ symfony.lock | 15 ++++ 2 files changed, 101 insertions(+) create mode 100644 src/Command/GenerateWarrantyFromJobOrderCommand.php diff --git a/src/Command/GenerateWarrantyFromJobOrderCommand.php b/src/Command/GenerateWarrantyFromJobOrderCommand.php new file mode 100644 index 00000000..26e4c759 --- /dev/null +++ b/src/Command/GenerateWarrantyFromJobOrderCommand.php @@ -0,0 +1,86 @@ +em = $em; + + parent::__construct(); + } + + protected function configure() + { + $this->setName('warranty:generate') + ->setDescription('Generates warranty from job order and inserts into database') + ->setHelp('Generate warranty from job order'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $em = $this->em; + + $qb = $this->em->getRepository(JobOrder::class)->createQueryBuilder('j'); + + // get all job orders with service_type='battery_warranty' + $qb->select('j') + ->where('j.service_type = :service_type') + ->setParameter('service_type', ServiceType::BATTERY_REPLACEMENT_WARRANTY); + + $query = $qb->getQuery(); + $result = $query->getResult(); + + foreach ($result as $jo) + { + $invoice_items = []; + // For now, one invoice == one battery + $invoice_items = $jo->getInvoice()->getItems(); + $invoice_item = $invoice_items[0]; + if ($invoice_item != null) + { + if($invoice_item->getBattery() != null) + { + // manually retrieve the SAPBattery using the SAPCode + $battery_sap_code = $invoice_item->getBattery()->getSAPCode(); + $sap_battery = $this->em->getRepository(SAPBattery::class)->find($battery_sap_code); + + if ($jo->getInvoice()->getDatePaid() != null) + { + // TODO: compute for date_expire = datePurchase + warranty period + // get warranty period from battery. Check if personal or commercial + // warranty period in battery is in months + $warranty = new Warranty(); + $warranty->setWarrantyClass($jo->getWarrantyClass()) + ->setFirstName($jo->getCustomer()->getFirstName()) + ->setLastName($jo->getCustomer()->getLastName()) + ->setMobileNumber($jo->getCustomer()->getPhoneMobile()) + ->setPlateNumber($jo->getCustomerVehicle()->getPlateNumber()) + ->setDatePurchase($jo->getInvoice()->getDatePaid()) + ->setBatteryModel($invoice_item->getBattery()->getModel()) + ->setBatterySize($invoice_item->getBattery()->getSize()) + ->setSAPBattery($sap_battery); + $em->persist($warranty); + } + $em->flush(); + } + } + } + } +} diff --git a/symfony.lock b/symfony.lock index 80750229..45250b81 100644 --- a/symfony.lock +++ b/symfony.lock @@ -1,4 +1,16 @@ { + "creof/doctrine2-spatial": { + "version": "1.2.0" + }, + "creof/geo-parser": { + "version": "2.1.0" + }, + "creof/wkb-parser": { + "version": "v2.3.0" + }, + "creof/wkt-parser": { + "version": "2.2.0" + }, "data-dog/audit-bundle": { "version": "v0.1.10" }, @@ -263,6 +275,9 @@ "symfony/stopwatch": { "version": "v4.0.2" }, + "symfony/thanks": { + "version": "v1.1.0" + }, "symfony/twig-bridge": { "version": "v4.0.2" }, From 084d058341f43e21831e30f7f2692b76e8307fae Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Tue, 26 Feb 2019 20:04:51 -0500 Subject: [PATCH 2/3] Create Symfony command to generate warranties from existing job orders #187 --- .../GenerateWarrantyFromJobOrderCommand.php | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/Command/GenerateWarrantyFromJobOrderCommand.php b/src/Command/GenerateWarrantyFromJobOrderCommand.php index 26e4c759..ef41209e 100644 --- a/src/Command/GenerateWarrantyFromJobOrderCommand.php +++ b/src/Command/GenerateWarrantyFromJobOrderCommand.php @@ -2,6 +2,9 @@ namespace App\Command; +use DateTime; +use DateInterval; + use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -33,6 +36,13 @@ class GenerateWarrantyFromJobOrderCommand extends Command ->setHelp('Generate warranty from job order'); } + protected function computeDateExpire($date_create, $warranty_period) + { + $expire_date = clone $date_create; + $expire_date->add(new DateInterval('P'.$warranty_period.'M')); + return $expire_date; + } + protected function execute(InputInterface $input, OutputInterface $output) { $em = $this->em; @@ -61,18 +71,32 @@ class GenerateWarrantyFromJobOrderCommand extends Command $battery_sap_code = $invoice_item->getBattery()->getSAPCode(); $sap_battery = $this->em->getRepository(SAPBattery::class)->find($battery_sap_code); - if ($jo->getInvoice()->getDatePaid() != null) + // get warranty period for battery + $warranty_period = 0; + if ($invoice_item->getBattery()->getWarrantyPrivate() != null) { - // TODO: compute for date_expire = datePurchase + warranty period - // get warranty period from battery. Check if personal or commercial - // warranty period in battery is in months + $warranty_period = $invoice_item->getBattery()->getWarrantyPrivate(); + } + else + { + $warranty_period = $invoice_item->getBattery()->getWarrantyCommercial(); + } + + if ($jo->getInvoice()->getDateCreate() != null) + { + // check if plate number is "clean". If not, do not insert into warranty + if (!(Warranty::cleanPlateNumber($jo->getCustomerVehicle()->getPlateNumber()))) + { + continue; + } $warranty = new Warranty(); $warranty->setWarrantyClass($jo->getWarrantyClass()) ->setFirstName($jo->getCustomer()->getFirstName()) ->setLastName($jo->getCustomer()->getLastName()) ->setMobileNumber($jo->getCustomer()->getPhoneMobile()) ->setPlateNumber($jo->getCustomerVehicle()->getPlateNumber()) - ->setDatePurchase($jo->getInvoice()->getDatePaid()) + ->setDatePurchase($jo->getInvoice()->getDateCreate()) + ->setDateExpire($this->computeDateExpire($jo->getInvoice()->getDateCreate(), $warranty_period)) ->setBatteryModel($invoice_item->getBattery()->getModel()) ->setBatterySize($invoice_item->getBattery()->getSize()) ->setSAPBattery($sap_battery); From beeaed5c001af87a16d88607d1153a9e0d252b42 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 12 Apr 2019 01:44:00 +0000 Subject: [PATCH 3/3] Fix query that checks if a warranty already exists. #187 --- .../GenerateWarrantyFromJobOrderCommand.php | 49 ++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/src/Command/GenerateWarrantyFromJobOrderCommand.php b/src/Command/GenerateWarrantyFromJobOrderCommand.php index ef41209e..1412c706 100644 --- a/src/Command/GenerateWarrantyFromJobOrderCommand.php +++ b/src/Command/GenerateWarrantyFromJobOrderCommand.php @@ -49,10 +49,10 @@ class GenerateWarrantyFromJobOrderCommand extends Command $qb = $this->em->getRepository(JobOrder::class)->createQueryBuilder('j'); - // get all job orders with service_type='battery_warranty' + // get all job orders with service_type='battery_replacement_new' $qb->select('j') ->where('j.service_type = :service_type') - ->setParameter('service_type', ServiceType::BATTERY_REPLACEMENT_WARRANTY); + ->setParameter('service_type', ServiceType::BATTERY_REPLACEMENT_NEW); $query = $qb->getQuery(); $result = $query->getResult(); @@ -77,10 +77,14 @@ class GenerateWarrantyFromJobOrderCommand extends Command { $warranty_period = $invoice_item->getBattery()->getWarrantyPrivate(); } - else + if ($invoice_item->getBattery()->getWarrantyCommercial() != null) { $warranty_period = $invoice_item->getBattery()->getWarrantyCommercial(); } + if ($invoice_item->getBattery()->getWarrantyTnv() != null) + { + $warranty_period = $invoice_item->getBattery()->getWarrantyTnv(); + } if ($jo->getInvoice()->getDateCreate() != null) { @@ -89,20 +93,31 @@ class GenerateWarrantyFromJobOrderCommand extends Command { continue; } - $warranty = new Warranty(); - $warranty->setWarrantyClass($jo->getWarrantyClass()) - ->setFirstName($jo->getCustomer()->getFirstName()) - ->setLastName($jo->getCustomer()->getLastName()) - ->setMobileNumber($jo->getCustomer()->getPhoneMobile()) - ->setPlateNumber($jo->getCustomerVehicle()->getPlateNumber()) - ->setDatePurchase($jo->getInvoice()->getDateCreate()) - ->setDateExpire($this->computeDateExpire($jo->getInvoice()->getDateCreate(), $warranty_period)) - ->setBatteryModel($invoice_item->getBattery()->getModel()) - ->setBatterySize($invoice_item->getBattery()->getSize()) - ->setSAPBattery($sap_battery); - $em->persist($warranty); - } - $em->flush(); + // check if warranty already exists + $cleaned_plate_number = Warranty::cleanPlateNumber($jo->getCustomerVehicle()->getPlateNumber()); + $expiry_date = $this->computeDateExpire($jo->getInvoice()->getDateCreate(), $warranty_period); + $found_warranty = $this->em->createQuery("SELECT count(w) FROM App\Entity\Warranty w + WHERE w.plate_number = :plate_number AND w.date_expire = :date_expire") + ->setParameter('plate_number', $cleaned_plate_number) + ->setParameter('date_expire', $expiry_date->format('Y-m-d')) + ->getSingleScalarResult(); + if ($found_warranty == 0) + { + $warranty = new Warranty(); + $warranty->setWarrantyClass($jo->getWarrantyClass()) + ->setFirstName($jo->getCustomer()->getFirstName()) + ->setLastName($jo->getCustomer()->getLastName()) + ->setMobileNumber($jo->getCustomer()->getPhoneMobile()) + ->setPlateNumber($cleaned_plate_number) + ->setDatePurchase($jo->getInvoice()->getDateCreate()) + ->setDateExpire($expiry_date) + ->setBatteryModel($invoice_item->getBattery()->getModel()) + ->setBatterySize($invoice_item->getBattery()->getSize()) + ->setSAPBattery($sap_battery); + $em->persist($warranty); + } + $em->flush(); + } } } }