diff --git a/app/Classes/Modules/Exports/Services/ExportsV2Transactions.php b/app/Classes/Modules/Exports/Services/ExportsV2Transactions.php
new file mode 100644
index 00000000..007293c2
--- /dev/null
+++ b/app/Classes/Modules/Exports/Services/ExportsV2Transactions.php
@@ -0,0 +1,104 @@
+startDate = $startDate ? Carbon::parse($startDate)->startOfDay() : Carbon::now()->subMonths(1);
+ $this->endDate = $endDate ? Carbon::parse($endDate)->endOfDay() : Carbon::now();
+ }
+
+ /**
+ * @return \Illuminate\Support\Collection|mixed
+ */
+ public function query()
+ {
+ return Transaction::whereBetween('created_at', [$this->startDate, $this->endDate]) //Limit, 'expensive' query;
+ ->whereIn('type', [TransactionType::PAYMENT, TransactionType::BILL])
+ ->where('owner_type', '!=', Wallet::class);
+ }
+
+ /**
+ * @param $transaction
+ * @return array
+ */
+ public function map($transaction): array
+ {
+ $transactionTypes = [
+ 0 => 'PAYMENT_ATTEMPT',
+ 1 => 'PAYMENT',
+ 2 => 'INVOICE',
+ 3 => 'BILL',
+ 4 => 'PROFORMA',
+ 5 => 'TOP_UP',
+ 6 => 'REFUND',
+ 7 => 'PURCHASE_ORDER',
+ 8 => 'SUPPLIER_DELIVER',
+ 9 => 'CREDIT_NOTE',
+ 10 => 'WITHDRAW',
+ 11 => 'DEBIT_NOTE',
+ 12 => 'TRANSFER_FEE'
+ ];
+
+ $transactionStatus = [
+ 0 => 'PENDING_SUBMISSION',
+ 1 => 'PENDING_VERIFICATION',
+ 2 => 'APPROVED',
+ 3 => 'COMPLETED',
+ 4 => 'REJECTED',
+ 5 => 'SUSPENDED',
+ 6 => 'EXPIRED'
+ ];
+
+
+ $booking = $transaction->owner;
+ if(!($booking instanceof Booking)){
+ $booking = $booking->owner;
+ }
+
+ $company = $booking->company;
+
+ if(!$company instanceof Company) dd($transaction);
+
+ return [
+ $company->reference,
+ $booking ? $booking->marking : '',
+ $transaction->bill_no,
+ $transaction->owner_id,
+ $transaction->owner_type,
+ $transactionTypes[$transaction->type],
+ $transaction->issuerCompany->name,
+ $transaction->reciver,
+ $transaction->currency->short_code,
+ $transaction->amount,
+ $transaction->original_currency->short_code,
+ $transaction->original_amount,
+ $transaction->currency_rate,
+ $transaction->tax,
+ $transaction->service_charge,
+ isset($transactionStatus[$transaction->status]) ? $transactionStatus[$transaction->status] : 'Unknown Status',
+ \PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel($transaction->created_at),
+ \PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel($transaction->updated_at),
+ ];
+ }
+}
diff --git a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php
index 91ace417..b693f326 100644
--- a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php
+++ b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php
@@ -6,6 +6,7 @@ namespace App\Http\Controllers\Exports;
use App\Classes\Modules\Exports\Services\ExportCurrencyVendorOrder;
use App\Classes\Modules\Exports\Services\ExportsCustomers;
use App\Classes\Modules\Exports\Services\ExportsTransactions;
+use App\Classes\Modules\Exports\Services\ExportsV2Transactions;
use App\Classes\Modules\Exports\Services\ExportsBookingTransactions;
use App\Classes\Modules\Exports\Services\ExportsLeadsTransactions;
use App\Classes\Modules\Exports\Services\ExportsNullDebtors;
@@ -23,6 +24,7 @@ use App\Classes\Modules\Exports\Services\ExportsImportedReceiptMappeds;
use App\Classes\Modules\Exports\Services\ExportsWhiteFormTransactions;
use Illuminate\Support\Facades\Storage;
use App\Classes\General\AWSS3Helper;
+use Illuminate\Support\Carbon;
class ExportCustomersToExcelController
{
@@ -72,6 +74,39 @@ class ExportCustomersToExcelController
}
}
+ public function v2transactions(Request $request){
+
+ $validated = $request->validate([
+ 'startDate' => 'nullable|date_format:d-m-Y',
+ 'endDate' => 'nullable|date_format:d-m-Y|after_or_equal:startDate',
+ ]);
+
+ $startDate = null;
+ $endDate = null;
+
+ if (isset($validated['startDate']) && $validated['startDate']) {
+ $startDate = Carbon::createFromFormat('d-m-Y', $validated['startDate'])->startOfDay();
+ } else {
+ $startDate = Carbon::now()->subMonths(1)->startOfDay();
+ }
+
+ if (isset($validated['endDate']) && $validated['endDate']) {
+ $endDate = Carbon::createFromFormat('d-m-Y', $validated['endDate'])->endOfDay();
+ } else {
+ $endDate = Carbon::now()->endOfDay();
+ }
+
+ $exportsTransactions = new ExportsV2Transactions($startDate, $endDate);
+ $exportFileName = 'transactions.csv';
+ $filesystemDriver = Storage::getDefaultDriver();
+
+ if ($filesystemDriver === 's3') {
+ return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $exportsTransactions)]);
+ } else {
+ return $exportsTransactions->download($exportFileName, Excel::CSV, ['Content-Type' => 'text/csv']);
+ }
+ }
+
public function nullDebtor(ExportsNullDebtors $exportsNullDebtors, Request $request){
$exportFileName = 'nullDebtor.xls';
$filesystemDriver = Storage::getDefaultDriver();
diff --git a/resources/assets/vue/components/bookings/elements/DownloadTransactionsReportComponent.vue b/resources/assets/vue/components/bookings/elements/DownloadTransactionsReportComponent.vue
new file mode 100644
index 00000000..1d08a452
--- /dev/null
+++ b/resources/assets/vue/components/bookings/elements/DownloadTransactionsReportComponent.vue
@@ -0,0 +1,110 @@
+
+ (default: last 1 month) (default: last 2 weeks)