export functionality refactored

This commit is contained in:
Prashant Singh 2019-03-12 12:13:48 +05:30
parent 9eb1deb3fa
commit 9578f7609b
10 changed files with 104 additions and 278 deletions

View File

@ -21,7 +21,7 @@ class DataGridExport implements FromView, ShouldAutoSize
*
* @var mixed
*/
public $gridData;
protected $gridData = array();
/**
* Create a new instance.
@ -40,23 +40,17 @@ class DataGridExport implements FromView, ShouldAutoSize
*/
public function view(): View
{
$pagination = false;
$results = [];
$columns = [];
$columns = array();
foreach($this->gridData as $key => $data) {
if ($key == 'collection') {
$results = $data['data'];
foreach($this->gridData as $key => $gridData) {
$columns = array_keys((array) $gridData);
break;
}
if ($key == 'columns') {
$columns = $data;
}
}
return view('admin::export.export', [
'results' => $results,
return view('admin::export.temp', [
'columns' => $columns,
'records' => $this->gridData,
]);
}
}

View File

@ -37,28 +37,43 @@ class ExportController extends Controller
public function export()
{
$criteria = request()->all();
$format = $criteria['format'];
$gridName = explode('\\', $criteria['gridName']);
$path = '\Webkul\Admin\DataGrids'.'\\'.last($gridName);
$proceed = false;
foreach($this->exportableGrids as $exportableGrid) {
if(last($gridName) == $exportableGrid) {
$proceed = true;
}
}
if($proceed) {
$gridInstance = new $path;
dd($gridInstance->export());
$records = array();
$records = $gridInstance->export();
die;
// $results = request()->input('gridData');
if(count($records) == 0) {
session()->flash('warning', trans('admin::app.export.no-records'));
// $data = json_decode($results, true);
return redirect()->back();
}
// $results = (object) $data;
if ($format == 'csv') {
return Excel::download(new DataGridExport($records), last($gridName).'.csv');
} else if($format == 'xls') {
return Excel::download(new DataGridExport($records), last($gridName).'.xlsx');
} else {
session()->flash('warning', trans('admin::app.export.illegal-format'));
// $file_name = request()->all('file_name');
return redirect()->back();
}
} else {
return redirect()->back();
}
// if (request()->all()['format'] == 'csv') {
// return Excel::download(new DataGridExport($results), $file_name.'.csv');
// } else {
// return Excel::download(new DataGridExport($results), $file_name.'.xlsx');
// }
}
}

View File

@ -786,7 +786,9 @@ return [
'duplicate-error' => 'Identifier must be unique, duplicate identifier :identifier at row :position.',
'enough-row-error' => 'file has not enough rows',
'allowed-type' => 'Allowed Type :',
'file-type' => 'csv, xls, xlsx.'
'file-type' => 'csv, xls, xlsx.',
'no-records' => 'Nothing to export',
'illegal-format' => 'Error! This type of format is either not supported or its illegal format'
],
'response' => [

View File

@ -26,8 +26,8 @@
</div>
<div class="page-content">
@inject('customer','Webkul\Admin\DataGrids\CustomerDataGrid')
{!! $customer->render() !!}
@inject('customerGrid','Webkul\Admin\DataGrids\CustomerDataGrid')
{!! $customerGrid->render() !!}
</div>
</div>
@ -41,51 +41,6 @@
@stop
@push('scripts')
<script type="text/x-template" id="export-form-template">
<form method="POST" action="{{ route('admin.datagrid.export') }}">
<div class="page-content">
<div class="form-container">
@csrf()
<?php
$data = json_encode((array) $customer);
?>
<input type="hidden" name="gridData" value="{{ $data }}">
<input type="hidden" name="file_name" value="Customer">
<div class="control-group">
<label for="format" class="required">
{{ __('admin::app.export.format') }}
</label>
<select name="format" class="control" v-validate="'required'">
<option value="xls">{{ __('admin::app.export.xls') }}</option>
<option value="csv">{{ __('admin::app.export.csv') }}</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-lg btn-primary" @click="closeModal">
{{ __('admin::app.export.export') }}
</button>
</form>
</script>
<script>
Vue.component('export-form', {
template: '#export-form-template',
methods: {
closeModal () {
this.$parent.closeModal();
}
}
});
</script>
@include('admin::export.export', ['gridName' => $customerGrid])
@endpush

View File

@ -1,18 +1,39 @@
<table>
<thead>
<tr>
@foreach ($columns as $column)
<th>{{ $column['index'] }}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($results as $result)
<tr>
@foreach ($columns as $column)
<td class="">{{ $result[$column['index']] }} </td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
<script type="text/x-template" id="export-form-template">
<form method="POST" action="{{ route('admin.datagrid.export') }}">
<div class="page-content">
<div class="form-container">
@csrf()
<input type="hidden" name="gridName" value="{{ get_class($gridName) }}">
<div class="control-group">
<label for="format" class="required">
{{ __('admin::app.export.format') }}
</label>
<select name="format" class="control" v-validate="'required'">
<option value="xls">{{ __('admin::app.export.xls') }}</option>
<option value="csv">{{ __('admin::app.export.csv') }}</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-lg btn-primary" @click="closeModal">
{{ __('admin::app.export.export') }}
</button>
</form>
</script>
<script>
Vue.component('export-form', {
template: '#export-form-template',
methods: {
closeModal () {
this.$parent.closeModal();
}
}
});
</script>

View File

@ -0,0 +1,18 @@
<table>
<thead>
<tr>
@foreach ($columns as $key => $value)
<th>{{ $value }}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach ($records as $record)
<tr>
@foreach($record as $column => $value)
<td>{{ $value }} </td>
@endforeach
</tr>
@endforeach
</tbody>
</table>

View File

@ -37,50 +37,5 @@
@stop
@push('scripts')
<script type="text/x-template" id="export-form-template">
<form method="POST" action="{{ route('admin.datagrid.export') }}">
<div class="page-content">
<div class="form-container">
@csrf()
<?php
$data = json_encode((array) $orderInvoicesGrid);
?>
<input type="hidden" name="gridData" value="{{ $data }}">
<input type="hidden" name="file_name" value="Invoice">
<div class="control-group">
<label for="format" class="required">
{{ __('admin::app.export.format') }}
</label>
<select name="format" class="control" v-validate="'required'">
<option value="xls">XLS</option>
<option value="csv">CSV</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-lg btn-primary" @click="closeModal">
{{ __('admin::app.export.export') }}
</button>
</form>
</script>
<script>
Vue.component('export-form', {
template: '#export-form-template',
methods: {
closeModal () {
this.$parent.closeModal();
}
}
});
</script>
@include('admin::export.export', ['gridName' => $orderInvoicesGrid])
@endpush

View File

@ -37,49 +37,5 @@
@stop
@push('scripts')
<script type="text/x-template" id="export-form-template">
<form method="POST" action="{{ route('admin.datagrid.export') }}">
<div class="page-content">
<div class="form-container">
@csrf()
<?php
$data = json_encode((array) $orderGrid);
?>
<input type="hidden" name="gridName" value="{{ get_class($orderGrid) }}">
<div class="control-group">
<label for="format" class="required">
{{ __('admin::app.export.format') }}
</label>
<select name="format" class="control" v-validate="'required'">
<option value="xls">XLS</option>
<option value="csv">CSV</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-lg btn-primary" @click="closeModal">
{{ __('admin::app.export.export') }}
</button>
</form>
</script>
<script>
Vue.component('export-form', {
template: '#export-form-template',
methods: {
closeModal () {
this.$parent.closeModal();
}
}
});
</script>
@include('admin::export.export', ['gridName' => $orderGrid])
@endpush

View File

@ -37,50 +37,5 @@
@stop
@push('scripts')
<script type="text/x-template" id="export-form-template">
<form method="POST" action="{{ route('admin.datagrid.export') }}">
<div class="page-content">
<div class="form-container">
@csrf()
<?php
$data = json_encode((array) $orderShipmentsGrid);
?>
<input type="hidden" name="gridData" value="{{ $data }}">
<input type="hidden" name="file_name" value="Shipment">
<div class="control-group">
<label for="format" class="required">
{{ __('admin::app.export.format') }}
</label>
<select name="format" class="control" v-validate="'required'">
<option value="xls">XLS</option>
<option value="csv">CSV</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-lg btn-primary" @click="closeModal">
{{ __('admin::app.export.export') }}
</button>
</form>
</script>
<script>
Vue.component('export-form', {
template: '#export-form-template',
methods: {
closeModal () {
this.$parent.closeModal();
}
}
});
</script>
@include('admin::export.export', ['gridName' => $orderShipmentsGrid])
@endpush

View File

@ -32,8 +32,8 @@
</div>
<div class="page-content">
@inject('taxrates', 'Webkul\Admin\DataGrids\TaxRateDataGrid')
{!! $taxrates->render() !!}
@inject('taxRateGrid', 'Webkul\Admin\DataGrids\TaxRateDataGrid')
{!! $taxRateGrid->render() !!}
</div>
</div>
@ -69,50 +69,5 @@
@endsection
@push('scripts')
<script type="text/x-template" id="export-form-template">
<form method="POST" action="{{ route('admin.datagrid.export') }}">
<div class="page-content">
<div class="form-container">
@csrf()
<?php
$data = json_encode((array) $taxrates);
?>
<input type="hidden" name="gridData" value="{{ $data }}">
<input type="hidden" name="file_name" value="Tax rates">
<div class="control-group">
<label for="format" class="required">
{{ __('admin::app.export.format') }}
</label>
<select name="format" class="control" v-validate="'required'">
<option value="xls">{{ __('admin::app.export.xls') }}</option>
<option value="csv">{{ __('admin::app.export.csv') }}</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-lg btn-primary" @click="closeModal">
{{ __('admin::app.export.export') }}
</button>
</form>
</script>
<script>
Vue.component('export-form', {
template: '#export-form-template',
methods: {
closeModal () {
this.$parent.closeModal();
}
}
});
</script>
@include('admin::export.export', ['gridName' => $taxRateGrid])
@endpush