feat: implement import and export functionality for product categories and products

This commit is contained in:
pbao9
2026-02-21 11:28:03 +07:00
parent bfabd54176
commit 71e70b01da
11 changed files with 359 additions and 4 deletions
@@ -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());
}
}
}