diff --git a/src/Controller/WarrantyController.php b/src/Controller/WarrantyController.php index 369c6632..9385d157 100644 --- a/src/Controller/WarrantyController.php +++ b/src/Controller/WarrantyController.php @@ -15,6 +15,7 @@ use Doctrine\ORM\Query; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Bundle\FrameworkBundle\Controller\Controller; @@ -372,9 +373,47 @@ class WarrantyController extends Controller $file = $req->files->get('csv_file'); // process the csv file - $this->processWarrantyFile($file, $em); + $inv_entries = $this->processWarrantyFile($file, $em); - return $this->render('warranty/upload.form.html.twig'); + $resp = new StreamedResponse(); + $resp->setCallback(function() use($inv_entries) { + // csv output + $csv_handle = fopen('php://output', 'w+'); + fputcsv($csv_handle, [ + 'Owner First Name', + 'Owner Last Name', + 'Owner Email', + 'Owner Address', + 'Owner Mobile', + 'Owner Telephone', + 'Vehicle Make', + 'Vehicle Model', + 'Vehicle Year', + 'Vehicle Plate Number', + 'Battery Serial Number', + 'Battery Sales Invoice', + 'Battery Date of Purchase', + 'Distributor Name', + 'Distributor Address', + 'Application Type ID', + 'Battery ID', + 'Ownership Type', + ]); + foreach ($inv_entries as $row) + { + fputcsv($csv_handle, $row); + } + + fclose($csv_handle); + }); + + $filename = 'invalid_warranties' . '.csv'; + + $resp->setStatusCode(200); + $resp->headers->set('Content-Type', 'text/csv; charset=utf-8'); + $resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); + + return $resp; } protected function processWarrantyFile(UploadedFile $csv_file, EntityManagerInterface $em) @@ -410,6 +449,7 @@ class WarrantyController extends Controller // 17 - Ownership Type $row_num = 0; + $invalid_entries = []; while (($fields = fgetcsv($fh)) !== false) { // start processing at row 1, not 0 @@ -428,69 +468,92 @@ class WarrantyController extends Controller $purchase_date = trim($fields[12]); $battery_id = trim($fields[16]); - // new warranty - $warranty = new Warranty(); + // check if purchase_date or plate_number or serial is empty or if + // purchase date is valid + $date_purchase = DateTime::createFromFormat('d-M-y', $purchase_date); - // clean the plate number - $cleaned_plate_number = Warranty::cleanPlateNumber($plate_number); - if ($cleaned_plate_number) + if (empty($purchase_date) || + empty($plate_number) || + empty($serial) || + ($date_purchase == false)) { - error_log("mogol plate number " . $cleaned_plate_number); - // continue processing - // check if purchase_date is empty. If so, ignore entry - $date_purchase = DateTime::createFromFormat('d-M-y', $purchase_date); - if ($date_purchase != false) + // add to invalid_entries + $invalid_entries[] = [ + 'owner_first_name' => $first_name, + 'owner_last_name' => $last_name, + 'owner_email' => trim($fields[2]), + 'owner_address' => trim($fields[3]), + 'owner_mobile' => $mobile_number, + 'owner_telephone' => trim($fields[5]), + 'vehicle_make' => trim($fields[6]), + 'vehicle_model' => trim($fields[7]), + 'vehicle_year' => trim($fields[8]), + 'vehicle_plate_number' => $plate_number, + 'battery_serial_number' => $serial, + 'battery_sales_invoice' => trim($fields[11]), + 'battery_date_purchase' => $purchase_date, + 'distributor_name' => trim($fields[13]), + 'distributor_address' => trim($fields[14]), + 'application_type_id' => trim($fields[15]), + 'battery_id' => $battery_id, + 'ownership_typ' => trim($fields[17]), + ]; + } + else + { + + // new warranty + $warranty = new Warranty(); + + // get the battery purchased + // check battery first. If not found, check sap_battery + $battery = $em->getRepository(Battery::class)->find($battery_id); + if ($battery != null) { - error_log ("mogol date purchase " . $purchase_date); - // get the battery purchased - // check battery first. If not found, check sap_battery - $battery = $em->getRepository(Battery::class)->find($battery_id); + // get the battery model and battery size + $model_id = $battery->getModel()->getID(); + $size_id = $battery->getSize()->getID(); + + $bty_model = $em->getRepository(BatteryModel::class)->find($model_id); + $bty_size = $em->getRepository(BatterySize::class)->find($size_id); + + if ($bty_model != null) + { + $warranty->setBatteryModel($bty_model); + } + + if ($bty_size != null) + { + $warranty->setBatterySize($bty_size); + } + } + else + { + // find battery in sap_battery + $battery = $em->getRepository(SAPBattery::class)->find($battery_id); if ($battery != null) { - // get the battery model and battery size - $model_id = $battery->getModel()->getID(); - $size_id = $battery->getSize()->getID(); - - $bty_model = $em->getRepository(BatteryModel::class)->find($model_id); - $bty_size = $em->getRepository(BatterySize::class)->find($size_id); - - if ($bty_model != null) - { - $warranty->setBatteryModel($bty_model); - } - - if ($bty_size != null) - { - $warranty->setBatterySize($bty_size); - } + // battery is SAPBattery + $warranty->setSAPBattery($battery); } - else - { - // find battery in sap_battery - $battery = $em->getRepository(SAPBattery::class)->find($battery_id); - if ($battery != null) - { - // battery is SAPBattery - $warranty->setSAPBattery($battery); - } - } - - // set and save values - error_log("mogol serial " . $serial); - $warranty->setSerial($serial) - ->setPlateNumber($cleaned_plate_number) - ->setFirstName($first_name) - ->setLastName($last_name) - ->setMobileNumber($mobile_number) - ->setDatePurchase($date_purchase); - - $em->persist($warranty); - $em->flush(); } - } + // set and save values + $warranty->setSerial($serial) + ->setPlateNumber($plate_number) + ->setFirstName($first_name) + ->setLastName($last_name) + ->setMobileNumber($mobile_number) + ->setDatePurchase($date_purchase); + + $em->persist($warranty); + $em->flush(); + } + $row_num++; } + + return $invalid_entries; } protected function fillDropdownParameters(&$params)