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,69 +468,92 @@ class WarrantyController extends Controller
$purchase_date = trim($fields[12]); $purchase_date = trim($fields[12]);
$battery_id = trim($fields[16]); $battery_id = trim($fields[16]);
// new warranty // check if purchase_date or plate_number or serial is empty or if
$warranty = new Warranty(); // purchase date is valid
$date_purchase = DateTime::createFromFormat('d-M-y', $purchase_date);
// clean the plate number if (empty($purchase_date) ||
$cleaned_plate_number = Warranty::cleanPlateNumber($plate_number); empty($plate_number) ||
if ($cleaned_plate_number) empty($serial) ||
($date_purchase == false))
{ {
error_log("mogol plate number " . $cleaned_plate_number); // add to invalid_entries
// continue processing $invalid_entries[] = [
// check if purchase_date is empty. If so, ignore entry 'owner_first_name' => $first_name,
$date_purchase = DateTime::createFromFormat('d-M-y', $purchase_date); 'owner_last_name' => $last_name,
if ($date_purchase != false) '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 model and battery size
// get the battery purchased $model_id = $battery->getModel()->getID();
// check battery first. If not found, check sap_battery $size_id = $battery->getSize()->getID();
$battery = $em->getRepository(Battery::class)->find($battery_id);
$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) if ($battery != null)
{ {
// get the battery model and battery size // battery is SAPBattery
$model_id = $battery->getModel()->getID(); $warranty->setSAPBattery($battery);
$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)
{
// 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++; $row_num++;
} }
return $invalid_entries;
} }
protected function fillDropdownParameters(&$params) protected function fillDropdownParameters(&$params)