diff --git a/app/Classes/Modules/Exports/Services/ExportsSegmentCustomers.php b/app/Classes/Modules/Exports/Services/ExportsSegmentCustomers.php new file mode 100644 index 00000000..9723eb1e --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsSegmentCustomers.php @@ -0,0 +1,74 @@ +customerMarking = $customerMarking; + $this->segment = $segment; + + $this->filters = [ + "company_segments_in" => [$this->segment], + ]; + + if ($this->customerMarking != 0) { + $this->filters['marking_in'] = [$this->customerMarking]; + } + } + + + public function headings(): array + { + return [ + 'Company Name', + 'Company Marking', + 'Is Credit Term Customers', + 'Auto Release', + ]; + } + + public function query() + { + return (new ApplyFiltersToQuery())->execute(Company::query(), $this->filters); + } + + + public function map($list): array + { + $companyModule = $list->companyModules()->first(); + $marking = $companyModule->getMarking(); + + $isCreditTermCustomer = false; + $segments = $companyModule->connections()->first()->segments()->pluck('name')->toArray(); + + $isCreditTermCustomer = in_array('Credit Term Customer', $segments); + $autoRelease = in_array('Auto Release', $segments); + + return [ + $list->name, + $marking, + $isCreditTermCustomer ? 'TRUE' : 'FALSE', + $autoRelease ? 'TRUE' : 'FALSE', + ]; + } +} diff --git a/app/Http/Controllers/Exports/ExportCompanyModuleSummaryController.php b/app/Http/Controllers/Exports/ExportCompanyModuleSummaryController.php index 4fe784ab..39f5f33b 100644 --- a/app/Http/Controllers/Exports/ExportCompanyModuleSummaryController.php +++ b/app/Http/Controllers/Exports/ExportCompanyModuleSummaryController.php @@ -10,6 +10,8 @@ use Illuminate\Support\Facades\Auth; use Maatwebsite\Excel\Excel; use Illuminate\Support\Facades\Storage; use App\Classes\General\AWSS3Helper; +use App\Classes\Modules\Exports\Services\ExportsSegmentCustomers; +use App\Models\Segment; class ExportCompanyModuleSummaryController { @@ -53,4 +55,26 @@ class ExportCompanyModuleSummaryController return $response; } } + + public function exportSegmentCustomers(Request $request) + { + $exportsSegmentCustomers = new ExportsSegmentCustomers($request); + + $customer_marking = $request->route('companyMarking'); + $segment = $request->route('segment'); + $exportsSegmentCustomers->setParameters($customer_marking, $segment); + + $segment_name = Segment::find($request->route('segment'))->name; + $segment_name = $segment_name ? strtolower(str_replace(' ', '_', $segment_name)): 'segment'; + $exportFileName = $segment_name . '_customers.xls'; + + $filesystemDriver = Storage::getDefaultDriver(); + if ($filesystemDriver === 's3') { + return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $exportsSegmentCustomers)]); + } else { + $response = $exportsSegmentCustomers->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } + } } diff --git a/resources/assets/vue/components/segments/elements/SegmentCompanyComponent.vue b/resources/assets/vue/components/segments/elements/SegmentCompanyComponent.vue index 376b96d8..120e71b2 100644 --- a/resources/assets/vue/components/segments/elements/SegmentCompanyComponent.vue +++ b/resources/assets/vue/components/segments/elements/SegmentCompanyComponent.vue @@ -1,6 +1,6 @@