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 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)