feat: implement import and export functionality for product categories and products
This commit is contained in:
@@ -6,7 +6,10 @@ use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\ProductCategories\ProductCategoryRequest;
|
||||
use App\Http\Services\Admin\ProductCategory\ProductCategoryServiceInterface;
|
||||
use App\Repositories\Admin\ProductCategory\ProductCategoryRepositoryInterface;
|
||||
use App\Exports\ProductCategoriesExport;
|
||||
use App\Imports\ProductCategoriesImport;
|
||||
use Illuminate\Http\Request;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
|
||||
|
||||
@@ -139,4 +142,33 @@ class ProductCategoryController extends Controller
|
||||
->rawColumns(['details_control', 'action', 'is_active', 'checkbox', 'sub_group_html'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
public function export(Request $request)
|
||||
{
|
||||
if ($request->get('sample') == 1) {
|
||||
return Excel::download(new ProductCategoriesExport(), 'product_categories_sample.xlsx');
|
||||
}
|
||||
return Excel::download(new ProductCategoriesExport(), 'product_categories_' . date('Y-m-d') . '.xlsx');
|
||||
}
|
||||
|
||||
public function import(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'file' => 'required|mimes:xlsx,xls,csv'
|
||||
]);
|
||||
|
||||
try {
|
||||
Excel::import(new ProductCategoriesImport(), $request->file('file'));
|
||||
return redirect()->route('products.group.index')->with('success', 'Import product categories successfully');
|
||||
} catch (\Maatwebsite\Excel\Validators\ValidationException $e) {
|
||||
$failures = $e->failures();
|
||||
$errorMessage = 'Import failed at row(s): ';
|
||||
foreach ($failures as $failure) {
|
||||
$errorMessage .= $failure->row() . ' (' . implode(', ', $failure->errors()) . '); ';
|
||||
}
|
||||
return back()->withErrors($errorMessage);
|
||||
} catch (\Exception $e) {
|
||||
return back()->withErrors('Import failed: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,14 +2,16 @@
|
||||
|
||||
namespace App\Http\Controllers\admin\product;
|
||||
|
||||
use App\Exports\ProductsExport;
|
||||
use App\Imports\ProductsImport;
|
||||
use App\Enums\Product\ProductTypeEnums;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Product\ProductRequest;
|
||||
use App\Http\Services\ProductService;
|
||||
use App\Repositories\Group\GroupRepositoryInterface;
|
||||
use App\Repositories\Admin\Product\ProductRepositoryInterface;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
use Exception;
|
||||
|
||||
@@ -222,4 +224,33 @@ class ProductController extends Controller
|
||||
default => 0
|
||||
};
|
||||
}
|
||||
|
||||
public function export(Request $request)
|
||||
{
|
||||
if ($request->get('sample') == 1) {
|
||||
return Excel::download(new ProductsExport(), 'products_sample.xlsx');
|
||||
}
|
||||
return Excel::download(new ProductsExport(), 'products_' . date('Y-m-d') . '.xlsx');
|
||||
}
|
||||
|
||||
public function import(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'file' => 'required|mimes:xlsx,xls,csv'
|
||||
]);
|
||||
|
||||
try {
|
||||
Excel::import(new ProductsImport(), $request->file('file'));
|
||||
return redirect()->route('products.index')->with('success', 'Import products successfully');
|
||||
} catch (\Maatwebsite\Excel\Validators\ValidationException $e) {
|
||||
$failures = $e->failures();
|
||||
$errorMessage = 'Import failed at row(s): ';
|
||||
foreach ($failures as $failure) {
|
||||
$errorMessage .= $failure->row() . ' (' . implode(', ', $failure->errors()) . '); ';
|
||||
}
|
||||
return back()->withErrors($errorMessage);
|
||||
} catch (\Exception $e) {
|
||||
return back()->withErrors('Import failed: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user