Add vehicle make and manufacturer CSV export functionality #746
This commit is contained in:
parent
26824713da
commit
4516566d56
3 changed files with 90 additions and 0 deletions
74
public/assets/js/csv_export.js
Normal file
74
public/assets/js/csv_export.js
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
$(function() {
|
||||||
|
// export table to csv
|
||||||
|
$(document).on('click', '[data-export-csv]', async function(e) {
|
||||||
|
const el = e.target.closest('[data-export-csv]');
|
||||||
|
const oldLabel = el.innerHTML;
|
||||||
|
|
||||||
|
// set loading status
|
||||||
|
el.disabled = true;
|
||||||
|
el.innerHTML = 'Exporting...';
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
|
||||||
|
formData.append('datatable[pagination][page]', 1);
|
||||||
|
formData.append('datatable[pagination][perpage]', 10000000);
|
||||||
|
|
||||||
|
// get all rows
|
||||||
|
const response = await fetch(el.dataset.url, {
|
||||||
|
method: el.dataset.method,
|
||||||
|
body: formData,
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
|
||||||
|
if (response.status === 200) {
|
||||||
|
// empty set returned
|
||||||
|
if (parseInt(result.meta.total) === 0) {
|
||||||
|
swal({
|
||||||
|
title: 'Whoops',
|
||||||
|
html: 'No data to export!',
|
||||||
|
type: 'warning',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// build csv data
|
||||||
|
const csvRows = [];
|
||||||
|
const fieldList = el.dataset.fields.split(',');
|
||||||
|
csvRows.push(el.dataset.headers);
|
||||||
|
|
||||||
|
result.data.forEach((row) => {
|
||||||
|
const fieldData = [];
|
||||||
|
fieldList.forEach((field) => {
|
||||||
|
fieldData.push('"' + row[field] + '"');
|
||||||
|
});
|
||||||
|
|
||||||
|
csvRows.push(fieldData.join(','));
|
||||||
|
});
|
||||||
|
|
||||||
|
const csvData = csvRows.join('\n');
|
||||||
|
|
||||||
|
// build the csv file
|
||||||
|
const csvFile = new Blob([csvData], {
|
||||||
|
type: 'text/csv',
|
||||||
|
});
|
||||||
|
|
||||||
|
// create a link to the file and download it
|
||||||
|
const url = window.URL.createObjectURL(csvFile);
|
||||||
|
const a = document.createElement('a');
|
||||||
|
a.href = url;
|
||||||
|
a.download = el.dataset.filename + '.csv';
|
||||||
|
a.click();
|
||||||
|
} else {
|
||||||
|
// something went wrong on the server
|
||||||
|
swal({
|
||||||
|
title: 'Whoops',
|
||||||
|
html: 'An error has occurred while retrieving data.',
|
||||||
|
type: 'error',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove loading status
|
||||||
|
el.disabled = false;
|
||||||
|
el.innerHTML = oldLabel;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -33,6 +33,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xl-4 order-1 order-xl-2 m--align-right">
|
<div class="col-xl-4 order-1 order-xl-2 m--align-right">
|
||||||
|
<button type="button" class="btn btn-success m-btn m-btn--custom m-btn--icon m-btn--air m-btn--pill mr-2" data-export-csv data-url="{{ url('vmfg_rows') }}" data-method="post" data-headers="ID,Name" data-fields="id,name" data-filename="resq-vehicle-mfg-list-{{ 'now'|date('Y-m-d') }}">
|
||||||
|
<span>
|
||||||
|
<i class="fa fa-list"></i>
|
||||||
|
<span>Export Manufacturer List</span>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
<a href="{{ url('vmfg_create') }}" class="btn btn-focus m-btn m-btn--custom m-btn--icon m-btn--air m-btn--pill">
|
<a href="{{ url('vmfg_create') }}" class="btn btn-focus m-btn m-btn--custom m-btn--icon m-btn--air m-btn--pill">
|
||||||
<span>
|
<span>
|
||||||
<i class="la la-industry"></i>
|
<i class="la la-industry"></i>
|
||||||
|
|
@ -54,6 +61,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
|
<script src="{{ asset('assets/js/csv_export.js') }}"></script>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
var options = {
|
var options = {
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xl-4 order-1 order-xl-2 m--align-right">
|
<div class="col-xl-4 order-1 order-xl-2 m--align-right">
|
||||||
|
<button type="button" class="btn btn-success m-btn m-btn--custom m-btn--icon m-btn--air m-btn--pill mr-2" data-export-csv data-url="{{ url('vehicle_rows') }}" data-method="post" data-headers="ID,Name,Manufacturer" data-fields="id,make,mfg_name" data-filename="resq-vehicle-make-list-{{ 'now'|date('Y-m-d') }}">
|
||||||
|
<span>
|
||||||
|
<i class="fa fa-list"></i>
|
||||||
|
<span>Export Vehicle List</span>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
<a href="{{ url('vehicle_create') }}" class="btn btn-focus m-btn m-btn--custom m-btn--icon m-btn--air m-btn--pill">
|
<a href="{{ url('vehicle_create') }}" class="btn btn-focus m-btn m-btn--custom m-btn--icon m-btn--air m-btn--pill">
|
||||||
<span>
|
<span>
|
||||||
<i class="fa fa-car"></i>
|
<i class="fa fa-car"></i>
|
||||||
|
|
@ -54,6 +61,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
|
<script src="{{ asset('assets/js/csv_export.js') }}"></script>
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
var options = {
|
var options = {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue