Add upload of csv file to ReportController. Add templates for upload. #248
This commit is contained in:
parent
c695a1f9b2
commit
a5e6a632f4
3 changed files with 137 additions and 0 deletions
|
|
@ -31,4 +31,9 @@ rep_battery_conflict_submit:
|
||||||
rep_popapp_comp_form:
|
rep_popapp_comp_form:
|
||||||
path: /report/popapp_comparison
|
path: /report/popapp_comparison
|
||||||
controller: App\Controller\ReportController::popappComparisonForm
|
controller: App\Controller\ReportController::popappComparisonForm
|
||||||
|
methods: [GET]
|
||||||
|
|
||||||
|
rep_popapp_comp_submit:
|
||||||
|
path: /report/popapp_comparison
|
||||||
|
controller: App\Controller\ReportController::popappComparisonSubmit
|
||||||
methods: [POST]
|
methods: [POST]
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,16 @@ use App\Ramcar\JOStatus;
|
||||||
use App\Entity\JORejection;
|
use App\Entity\JORejection;
|
||||||
use App\Entity\Battery;
|
use App\Entity\Battery;
|
||||||
use App\Entity\JobOrder;
|
use App\Entity\JobOrder;
|
||||||
|
use App\Entity\Warranty;
|
||||||
|
use App\Entity\CustomerVehicle;
|
||||||
|
|
||||||
use Doctrine\ORM\Query;
|
use Doctrine\ORM\Query;
|
||||||
use Doctrine\ORM\QueryBuilder;
|
use Doctrine\ORM\QueryBuilder;
|
||||||
|
use Doctrine\DBAL\Connection;
|
||||||
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\StreamedResponse;
|
||||||
|
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||||
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
|
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
|
||||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||||
|
|
@ -399,4 +403,77 @@ class ReportController extends Controller
|
||||||
|
|
||||||
return $resp;
|
return $resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Menu(selected="outlet_list")
|
||||||
|
*/
|
||||||
|
public function popappComparisonForm()
|
||||||
|
{
|
||||||
|
$this->denyAccessUnlessGranted('report.popapp.comparison', null, 'No access.');
|
||||||
|
|
||||||
|
return $this->render('report/popapp/form.html.twig');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function popappComparisonSubmit(Request $req)
|
||||||
|
{
|
||||||
|
// retrieve temporary info for file
|
||||||
|
$file = $req->files->get('csv_file');
|
||||||
|
|
||||||
|
// process the csv file
|
||||||
|
$this->processPopappFile($file);
|
||||||
|
|
||||||
|
// return response
|
||||||
|
return $this->json([
|
||||||
|
'success' => true,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function processPopappFile(UploadedFile $csv_file)
|
||||||
|
{
|
||||||
|
// attempt to open file
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$fh = fopen($csv_file, "r");
|
||||||
|
}
|
||||||
|
catch (Exception $e)
|
||||||
|
{
|
||||||
|
throw new Exception('The file "' . $csv_file . '" could be read.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// loop through the rows
|
||||||
|
$serial_numbers = [];
|
||||||
|
$row_num = 0;
|
||||||
|
while(($fields = fgetcsv($fh)) !== false)
|
||||||
|
{
|
||||||
|
if ($row_num <= 2)
|
||||||
|
{
|
||||||
|
$row_num++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the serial numbers
|
||||||
|
$serial_numbers[] = trim($fields[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the warranty for serial
|
||||||
|
$qb = $this->getDoctrine()
|
||||||
|
->getRepository(Warranty::class)
|
||||||
|
->createQueryBuilder('q');
|
||||||
|
$warranty_query = $qb->select('q')
|
||||||
|
->where('q.serial IN(:serials)')
|
||||||
|
->setParameter('serials', $serial_numbers, Connection::PARAM_STR_ARRAY);
|
||||||
|
|
||||||
|
$warr_results = $warranty_query->getQuery()->getResult();
|
||||||
|
|
||||||
|
// get the plate numbers
|
||||||
|
$plate_numbers = [];
|
||||||
|
foreach ($warr_results as $warranty)
|
||||||
|
{
|
||||||
|
$plate_numbers[] = $warranty->getPlateNumber();
|
||||||
|
// what if plate number is 0000 or NONE?
|
||||||
|
}
|
||||||
|
|
||||||
|
// search in customer vehicle using the plate numbers
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
55
templates/report/popapp/form.html.twig
Normal file
55
templates/report/popapp/form.html.twig
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<!-- BEGIN: Subheader -->
|
||||||
|
<div class="m-subheader">
|
||||||
|
<div class="d-flex align-items-center">
|
||||||
|
<div class="mr-auto">
|
||||||
|
<h3 class="m-subheader__title">Popapp Comparison Report</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- END: Subheader -->
|
||||||
|
<div class="m-content">
|
||||||
|
<!--Begin::Section-->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-6">
|
||||||
|
<div class="m-portlet m-portlet--mobile">
|
||||||
|
<div class="m-portlet__head">
|
||||||
|
<div class="m-portlet__head-caption">
|
||||||
|
<div class="m-portlet__head-title">
|
||||||
|
<span class="m-portlet__head-icon">
|
||||||
|
<i class="fa fa-upload"></i>
|
||||||
|
</span>
|
||||||
|
<h3 class="m-portlet__head-text">
|
||||||
|
Upload Popapp CSV File
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<form id="upload_form" class="m-form m-form--fit m-form--label-align-right m-form--group-seperator-dashed" method="post" action="{{ url('rep_popapp_comp_submit') }}" enctype="multipart/form-data">
|
||||||
|
<div class="m-portlet__body">
|
||||||
|
<div class="form-group m-form__group row">
|
||||||
|
<input type="file" id="csv_file" name="csv_file" >
|
||||||
|
</div>
|
||||||
|
<div class="m-portlet__foot m-portlet__foot--fit">
|
||||||
|
<div class="m-form__actions m-form__actions--solid m-form__actions--right">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<button type="submit" class="btn btn-success">Submit</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block scripts %}
|
||||||
|
<script>
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
Loading…
Reference in a new issue