|
|
@@ -2,7 +2,10 @@
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
+use App\Helpers\DateHelper;
|
|
|
use App\Models\Product;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
+use Illuminate\Support\Str;
|
|
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
|
|
|
|
@@ -12,7 +15,43 @@ class ExportService
|
|
|
|
|
|
public function handle(array $filters = []): string
|
|
|
{
|
|
|
- $products = Product::cursor();
|
|
|
+ $q = Product::query();
|
|
|
+
|
|
|
+ foreach ($filters as $filterName => $filterValue) {
|
|
|
+ if(!$filterValue) continue;
|
|
|
+
|
|
|
+ if($filterName === 's') {
|
|
|
+ // accept search
|
|
|
+ $searchFields = ['nomenclature_number', 'article', 'name_tz', 'manufacturer_name', 'note'];
|
|
|
+ $q->where(function ($query) use ($searchFields, $filterValue) {
|
|
|
+ foreach ($searchFields as $searchField) {
|
|
|
+ $query->orWhere($searchField, 'LIKE', '%' . $filterValue . '%');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(Str::contains($filterName, 'price')) {
|
|
|
+ $filterValue = $filterValue * 100;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(Str::endsWith($filterName, '_from')) {
|
|
|
+ if(is_string($filterValue) && DateHelper::isDate($filterValue)) {
|
|
|
+ $filterValue .= ' 00:00:00';
|
|
|
+ }
|
|
|
+ $q->where(Str::replace('_from', '', $filterName), '>=', $filterValue);
|
|
|
+ } elseif(Str::endsWith($filterName, '_to')) {
|
|
|
+ if(is_string($filterValue) && DateHelper::isDate($filterValue)) {
|
|
|
+ $filterValue .= ' 23:59:59';
|
|
|
+ }
|
|
|
+ $q->where(Str::replace('_to', '', $filterName), '<=', $filterValue);
|
|
|
+ } else {
|
|
|
+ $q->where($filterName, '=', $filterValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $products = $q->cursor();
|
|
|
$inputFileType = 'Xlsx'; // Xlsx - Xml - Ods - Slk - Gnumeric - Csv
|
|
|
$inputFileName = './templates/ExportCatalogTemplate.xlsx';
|
|
|
|