export and import

This commit is contained in:
glovetleong
2022-03-02 09:54:12 +08:00
parent ae392dd052
commit 6d624d3196
8 changed files with 270 additions and 3 deletions
+3
View File
@@ -25,3 +25,6 @@ docker-compose.yml
package-lock.json package-lock.json
public/* public/*
/public/* /public/*
/storage/app/public
public
/storage/framework/laravel-excel
+87
View File
@@ -0,0 +1,87 @@
<?php
namespace App\Classes\General;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Cache;
class ExcelHandel
{
function __construct()
{
}
public static function generateFolder($path = '')
{
$folder = \Storage::disk('public')->makeDirectory($path);
return $folder;
}
public static function insertExcel($path = '', $base64Set = [])
{
$file_info = [];
$folder_path = ExcelHandel::generateFolder('excels/' . $path);
foreach ($base64Set as $key => $row) {
$exceldata = $row;
$filename = (string) Str::uuid();
$f = finfo_open();
$mime_type = finfo_file($f, $exceldata, FILEINFO_MIME_TYPE);
$extension = 'xls';
switch ($mime_type) {
case 'application/vnd.ms-excel':
$extension = 'xls';
break;
case 'application/zip':
$extension = 'xlsx';
break;
}
if (empty($extension)) {
return false;
}
$exceldata = explode('base64,', $exceldata);
$exceldata = base64_decode($exceldata[1]);
$filename_with_ext = $filename . '.' . $extension;
$file = ExcelHandel::generateExcel($path, $exceldata, $filename, $extension);
$file_info[] = [
'path' => $path,
'filename' => $filename_with_ext,
'mime_type' => $mime_type,
'extension' => $extension,
'file_info' => empty($file) ? [] : $file,
];
}
return $file_info;
}
public static function generateExcel($path = '', $exceldata = '', $filename = '', $extension = '')
{
$file_info = [];
$file = \Storage::disk('public')->put('excels/' . $path . '/' . $filename . '.' . $extension, $exceldata);
$file_info['original']['file'] = storage_path('app/public/excels/' . $path . '/' . $filename . '.' . $extension);
return $file_info;
}
public static function removeExcel($excel_info = [])
{
$excel_info = json_decode(json_encode($excel_info), true);
foreach ($excel_info as $key => $row) {
if (!empty($row['path'])) {
\File::delete([$row['file_info']['original']['file']]);
}
}
return true;
}
}
@@ -0,0 +1,100 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Models\Company;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
class ExportsNullDebtors implements FromQuery, WithHeadingRow, WithMapping
{
use Exportable;
public function headings(): array
{
return [
'Code',
'CompanyName',
'Desc2',
'AreaCode',
'SalesAgent',
'DebtorType',
'DisplayTerm',
'AgingOn',
'StatementType',
'CurrencyCode',
'RegisterNo',
'Address1',
'Address2',
'Address3',
'Address4',
'PostCode',
'DeliverAddr1',
'DeliverAddr2',
'DeliverAddr3',
'DeliverAddr4',
'DeliverPostCode',
'Attention',
'Phone1',
'Phone2',
'Fax1',
'Fax2',
'ExemptNo',
'ExpiryDate',
'PriceCategory',
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return Company::where('debtor', '=', null);
}
/**
* @param Company $company
*
* @return array
*/
public function map($company): array
{
return [
$company->reference, //Code
$company->name, //CompanyName
'', //Desc2
'', //AreaCode
'', //SalesAgent
'', //DebtorType
'', //DisplayTerm
'', //AgingOn
'', //StatementType
'MYR', //CurrencyCode
$company->reference, //RegisterNo
'', //Address1
'', //Address2
'', //Address3
'', //Address4
'', //PostCode
'', //DeliverAddr1
'', //DeliverAddr2
'', //DeliverAddr3
'', //DeliverAddr4
'', //DeliverPostCode
'', //Attention
'', //Phone1
'', //Phone2
'', //Fax1
'', //Fax2
'', //ExemptNo
'', //ExpiryDate
'', //PriceCategory
];
}
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Imports\Services;
use App\Models\Company;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithValidation;
class ImportsDebtor implements ToModel, WithHeadingRow, WithBatchInserts, WithValidation
{
public function __construct() {
}
public function model($row = [])
{
$reference = str_replace('/CIEF', '', $row['2nd_description']);
$debtor = $row['code'];
$company = Company::where('reference', $reference)->first();
if ($company) {
$company->debtor = $debtor;
$company->update();
}
return [];
}
public function batchSize(): int
{
return 100;
}
public function rules(): array
{
return [
];
}
}
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Exports;
use App\Classes\Modules\Exports\Services\ExportsCustomers; use App\Classes\Modules\Exports\Services\ExportsCustomers;
use App\Classes\Modules\Exports\Services\ExportsTransactions; use App\Classes\Modules\Exports\Services\ExportsTransactions;
use App\Classes\Modules\Exports\Services\ExportsNullDebtors;
use App\Models\User; use App\Models\User;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@@ -24,4 +25,10 @@ class ExportCustomersToExcelController
$request->headers->set('Authorization', 'Bearer '.$token); $request->headers->set('Authorization', 'Bearer '.$token);
return $exportsTransactions->download('transactions.csv', Excel::CSV, ['Content-Type' => 'text/csv']); return $exportsTransactions->download('transactions.csv', Excel::CSV, ['Content-Type' => 'text/csv']);
} }
public function nullDebtor(ExportsNullDebtors $exportsNullDebtors, Request $request){
$token = Auth::fromUser(User::find(1));
$request->headers->set('Authorization', 'Bearer '.$token);
return $exportsNullDebtors->download('nullDebtor.csv', Excel::CSV, ['Content-Type' => 'text/csv']);
}
} }
@@ -0,0 +1,25 @@
<?php
namespace App\Http\Controllers\Imports;
use App\Classes\Modules\Imports\Services\ImportsDebtor;
use App\Classes\General\ExcelHandel;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
class ImportUpdateDebtorController
{
public function import(Request $request) {
$token = Auth::fromUser(User::find(1));
$request->headers->set('Authorization', 'Bearer '.$token);
$excel_file = $request->input('excel_file');
$excel_file = ExcelHandel::insertExcel('debtor', $excel_file);
return $import = Excel::import(new ImportsDebtor(), $excel_file[0]['file_info']['original']['file']);
}
}
+3
View File
@@ -168,6 +168,9 @@ Route::get('billplz/bills/{bill_no}', function($bill_no){
Route::get('/export/customers/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export'); Route::get('/export/customers/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export');
Route::get('/export/transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@transactions'); Route::get('/export/transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@transactions');
Route::get('/export/null-debtor/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@nullDebtor');
Route::get('/import/update-debtor/f614e339d7058904a831aad742e24d55', 'Imports\ImportUpdateDebtorController@import');
Route::get('/products', function (\App\Classes\Modules\Exports\Services\ExportsProducts $exportsProducts) { Route::get('/products', function (\App\Classes\Modules\Exports\Services\ExportsProducts $exportsProducts) {
return $exportsProducts->download('products.csv', Excel::CSV, ['Content-Type' => 'text/csv']); return $exportsProducts->download('products.csv', Excel::CSV, ['Content-Type' => 'text/csv']);
-2
View File
@@ -1,2 +0,0 @@
*
!.gitignore