Include invalid plate numbers in warranty. Return a csv file with the invalid entries that cannot be inserted into the database. #258

This commit is contained in:
Korina Cordero 2019-08-29 10:48:08 +00:00
parent 33e0e6b41b
commit dbee60bf46

View file

@ -15,6 +15,7 @@ use Doctrine\ORM\Query;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller;
@ -372,9 +373,47 @@ class WarrantyController extends Controller
$file = $req->files->get('csv_file'); $file = $req->files->get('csv_file');
// process the 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) protected function processWarrantyFile(UploadedFile $csv_file, EntityManagerInterface $em)
@ -410,6 +449,7 @@ class WarrantyController extends Controller
// 17 - Ownership Type // 17 - Ownership Type
$row_num = 0; $row_num = 0;
$invalid_entries = [];
while (($fields = fgetcsv($fh)) !== false) while (($fields = fgetcsv($fh)) !== false)
{ {
// start processing at row 1, not 0 // start processing at row 1, not 0
@ -428,20 +468,43 @@ class WarrantyController extends Controller
$purchase_date = trim($fields[12]); $purchase_date = trim($fields[12]);
$battery_id = trim($fields[16]); $battery_id = trim($fields[16]);
// 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);
if (empty($purchase_date) ||
empty($plate_number) ||
empty($serial) ||
($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 // new warranty
$warranty = new Warranty(); $warranty = new Warranty();
// clean the plate number
$cleaned_plate_number = Warranty::cleanPlateNumber($plate_number);
if ($cleaned_plate_number)
{
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)
{
error_log ("mogol date purchase " . $purchase_date);
// get the battery purchased // get the battery purchased
// check battery first. If not found, check sap_battery // check battery first. If not found, check sap_battery
$battery = $em->getRepository(Battery::class)->find($battery_id); $battery = $em->getRepository(Battery::class)->find($battery_id);
@ -476,9 +539,8 @@ class WarrantyController extends Controller
} }
// set and save values // set and save values
error_log("mogol serial " . $serial);
$warranty->setSerial($serial) $warranty->setSerial($serial)
->setPlateNumber($cleaned_plate_number) ->setPlateNumber($plate_number)
->setFirstName($first_name) ->setFirstName($first_name)
->setLastName($last_name) ->setLastName($last_name)
->setMobileNumber($mobile_number) ->setMobileNumber($mobile_number)
@ -487,10 +549,11 @@ class WarrantyController extends Controller
$em->persist($warranty); $em->persist($warranty);
$em->flush(); $em->flush();
} }
}
$row_num++; $row_num++;
} }
return $invalid_entries;
} }
protected function fillDropdownParameters(&$params) protected function fillDropdownParameters(&$params)