diff --git a/src/Command/GenerateWarrantyFromJobOrderCommand.php b/src/Command/GenerateWarrantyFromJobOrderCommand.php new file mode 100644 index 00000000..1412c706 --- /dev/null +++ b/src/Command/GenerateWarrantyFromJobOrderCommand.php @@ -0,0 +1,125 @@ +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 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; + + $qb = $this->em->getRepository(JobOrder::class)->createQueryBuilder('j'); + + // 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_NEW); + + $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); + + // get warranty period for battery + $warranty_period = 0; + if ($invoice_item->getBattery()->getWarrantyPrivate() != null) + { + $warranty_period = $invoice_item->getBattery()->getWarrantyPrivate(); + } + 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) + { + // check if plate number is "clean". If not, do not insert into warranty + if (!(Warranty::cleanPlateNumber($jo->getCustomerVehicle()->getPlateNumber()))) + { + continue; + } + // 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(); + } + } + } + } + } +} 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" },