diff --git a/app/Classes/Modules/Exports/Services/ExportsGroupTransactions.php b/app/Classes/Modules/Exports/Services/ExportsGroupTransactions.php new file mode 100644 index 00000000..ab8a8c9b --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsGroupTransactions.php @@ -0,0 +1,108 @@ +request = $request; + } + + public function headings(): array + { + return [ + 'DocNo', + 'DocDate', + 'PaymentDate', + 'DebtorCode', + 'Ref', + 'ShipInfo', + 'AccNo', + 'DetailDescription', + 'FurtherDescription', + 'ProjNo', + 'DeptNo', + 'Qty', + 'UnitPrice', + 'TaxType', + 'TaxableAmt', + 'TaxRate' + ]; + } + + public function query() + { + $start_date = $this->parseDate($this->request->input('startDate')); + $end_date = $this->parseDate($this->request->input('endDate')); + + return Group::when($start_date && $end_date, function ($query) use ($start_date, $end_date) { + $query->whereBetween('created_at', [ + $start_date->startOfDay(), + $end_date->endOfDay() + ]); + }) + ->when($start_date && !$end_date, function ($query) use ($start_date) { + $query->where('created_at', '>=', $start_date->startOfDay()); + }) + ->when(!$start_date && $end_date, function ($query) use ($end_date) { + $query->where('created_at', '<=', $end_date->endOfDay()); + }); + } + + private function parseDate($date) + { + return $date ? Carbon::parse($date)->startOfDay() : null; + } + + public function map($transaction): array + { + $company = $transaction->receiverCompany; + return [ + '<>', //'DocNo', + '', //'DocDate', + $transaction->created_at->format('m/d/Y H:m'), //'PaymentDate', + $company->debtor, //'DebtorCode', + $company->referece, //'Ref', + $company->referece, //'ShipInfo', + '500-0000', //'AccNo', + 'X1 Freight Service Charge', //'DetailDescription', + 'FurtherDescription', //'FurtherDescription', + 'M3', //'ProjNo', + 'CIEF', //'DeptNo', + '', //'Qty', + '', //'UnitPrice', + '', //'TaxType', + floatval($transaction->tax) > 0 ? number_format($transaction->tax, 2) : '0.00', //'TaxableAmt', + '', //'TaxRate' + ]; + } + + private function getTaxType($tax_percentage) + { + return floatval($tax_percentage) > 0 ? 'SV-6' : ''; + } +} diff --git a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php index bfd679c5..2b83181c 100644 --- a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php +++ b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Exports; use App\Classes\Modules\Exports\Services\ExportsCustomersOrderLatestDate; use App\Classes\Modules\Exports\Services\ExportsCustomerTotalOrderByYear; +use App\Classes\Modules\Exports\Services\ExportsGroupTransactions; use App\Classes\Modules\Exports\Services\ExportsPaymentTransactions; use App\Models\User; use Illuminate\Http\Request; @@ -33,6 +34,13 @@ class ExportCustomersToExcelController return $response; } + public function groupTransaction(Request $request){ + $exportsTransactions = new ExportsGroupTransactions($request); + $response = $exportsTransactions->download('group-transactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } + public function totalOrders(Request $request){ $exportsTotalOrders = new ExportsCustomerTotalOrderByYear($request); $response = $exportsTotalOrders->download('total-orders-' . $request->route('year') . '.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/resources/assets/vue/components/paymentsBilling/forms/DownloadBillingWithDatesComponent.vue b/resources/assets/vue/components/paymentsBilling/forms/DownloadBillingWithDatesComponent.vue index 640348b2..e56f6f6d 100644 --- a/resources/assets/vue/components/paymentsBilling/forms/DownloadBillingWithDatesComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/forms/DownloadBillingWithDatesComponent.vue @@ -69,6 +69,9 @@ export default { case 'walletsReportSection': apiRoute = route('walletTransactions.export'); break; + case 'groupTransactionSection': + apiRoute = route('groupTransaction.export'); + break; } window.open(apiRoute + '?startDate=' + this.parameters.startDate + '&endDate=' + this.parameters.endDate, '_blank'); }, diff --git a/resources/views/pages/paymentAndBilling.blade.php b/resources/views/pages/paymentAndBilling.blade.php index d76329ea..713f2601 100644 --- a/resources/views/pages/paymentAndBilling.blade.php +++ b/resources/views/pages/paymentAndBilling.blade.php @@ -131,6 +131,12 @@ +
+
+ Export Group Transactions CSV + +
+
diff --git a/routes/web.php b/routes/web.php index 7a11b705..49a4d87f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -579,6 +579,7 @@ Route::get('billplz/bills/{bill_no}', function($bill_no){ Route::get('/export/null-debtor/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@nullDebtor')->name('newDebtor.export'); Route::get('/export/payment-transactions/{section}/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@paymentTransactions')->name('paymentTransactions.export'); +Route::get('/export/group-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@groupTransaction')->name('groupTransaction.export'); Route::get('/delayed_container/customers', function(){ $containers = Container::whereHas('transports', function($query){