diff --git a/app/Exports/Banking/RecurringTransactions.php b/app/Exports/Banking/RecurringTransactions.php
new file mode 100644
index 000000000..87d51745c
--- /dev/null
+++ b/app/Exports/Banking/RecurringTransactions.php
@@ -0,0 +1,28 @@
+ids = $ids;
+ }
+
+ public function sheets(): array
+ {
+ return [
+ new Recurring($this->ids),
+ new Base($this->ids),
+ ];
+ }
+}
diff --git a/app/Exports/Banking/Sheets/Recurring.php b/app/Exports/Banking/Sheets/Recurring.php
new file mode 100644
index 000000000..286a19359
--- /dev/null
+++ b/app/Exports/Banking/Sheets/Recurring.php
@@ -0,0 +1,36 @@
+cursor();
+ }
+
+ public function map($model): array
+ {
+ $model->transaction_number = $model->recurable->number;
+
+ return parent::map($model);
+ }
+
+ public function fields(): array
+ {
+ return [
+ 'recurable_type',
+ 'transaction_number',
+ 'frequency',
+ 'interval',
+ 'started_at',
+ 'status',
+ 'limit_by',
+ 'limit_count',
+ 'auto_send',
+ ];
+ }
+}
diff --git a/app/Exports/Banking/Sheets/RecurringTransactions.php b/app/Exports/Banking/Sheets/RecurringTransactions.php
new file mode 100644
index 000000000..5e4b44ca5
--- /dev/null
+++ b/app/Exports/Banking/Sheets/RecurringTransactions.php
@@ -0,0 +1,53 @@
+isRecurring()->cursor();
+ }
+
+ public function map($model): array
+ {
+ $model->account_name = $model->account->name;
+ $model->contact_email = $model->contact->email;
+ $model->category_name = $model->category->name;
+ $model->invoice_bill_number = $model->document->document_number ?? 0;
+
+ return parent::map($model);
+ }
+
+ public function fields(): array
+ {
+ return [
+ 'type',
+ 'number',
+ 'paid_at',
+ 'amount',
+ 'currency_code',
+ 'currency_rate',
+ 'account_name',
+ 'invoice_bill_number',
+ 'contact_email',
+ 'category_name',
+ 'description',
+ 'payment_method',
+ 'reference',
+ 'reconciled',
+ ];
+ }
+
+ public function columnFormats(): array
+ {
+ return [
+ 'C' => NumberFormat::FORMAT_DATE_YYYYMMDD,
+ ];
+ }
+}
diff --git a/app/Http/Controllers/Banking/RecurringTransactions.php b/app/Http/Controllers/Banking/RecurringTransactions.php
index 2f15bc89c..21ee0314c 100644
--- a/app/Http/Controllers/Banking/RecurringTransactions.php
+++ b/app/Http/Controllers/Banking/RecurringTransactions.php
@@ -3,7 +3,10 @@
namespace App\Http\Controllers\Banking;
use App\Abstracts\Http\Controller;
+use App\Exports\Banking\RecurringTransactions as Export;
use App\Http\Requests\Banking\Transaction as Request;
+use App\Http\Requests\Common\Import as ImportRequest;
+use App\Imports\Banking\RecurringTransactions as Import;
use App\Jobs\Banking\CreateTransaction;
use App\Jobs\Banking\UpdateTransaction;
use App\Models\Banking\Account;
@@ -97,7 +100,7 @@ class RecurringTransactions extends Controller
if ($response['success']) {
$response['redirect'] = route('recurring-transactions.show', $response['data']->id);
- $message = trans('messages.success.added', ['type' => trans_choice('general.transactions', 1)]);
+ $message = trans('messages.success.added', ['type' => trans_choice('general.recurring_transactions', 1)]);
flash($message)->success();
} else {
@@ -122,13 +125,37 @@ class RecurringTransactions extends Controller
{
$clone = $recurring_transaction->duplicate();
- $message = trans('messages.success.duplicated', ['type' => trans_choice('general.transactions', 1)]);
+ $message = trans('messages.success.duplicated', ['type' => trans_choice('general.recurring_transactions', 1)]);
flash($message)->success();
return redirect()->route('recurring-transactions.edit', $clone->id);
}
+ /**
+ * Import the specified resource.
+ *
+ * @param ImportRequest $request
+ *
+ * @return Response
+ */
+ public function import(ImportRequest $request)
+ {
+ $response = $this->importExcel(new Import, $request, trans_choice('general.recurring_transactions', 2));
+
+ if ($response['success']) {
+ $response['redirect'] = route('recurring-transactions.index');
+
+ flash($response['message'])->success();
+ } else {
+ $response['redirect'] = route('import.create', ['banking', 'recurring-transactions']);
+
+ flash($response['message'])->error()->important();
+ }
+
+ return response()->json($response);
+ }
+
/**
* Show the form for editing the specified resource.
*
@@ -174,7 +201,7 @@ class RecurringTransactions extends Controller
if ($response['success']) {
$response['redirect'] = route('recurring-transactions.show', $recurring_transaction->id);
- $message = trans('messages.success.updated', ['type' => trans_choice('general.transactions', 1)]);
+ $message = trans('messages.success.updated', ['type' => trans_choice('general.recurring_transactions', 1)]);
flash($message)->success();
} else {
@@ -187,6 +214,16 @@ class RecurringTransactions extends Controller
return response()->json($response);
}
+
+ /**
+ * Export the specified resource.
+ *
+ * @return Response
+ */
+ public function export()
+ {
+ return $this->exportExcel(new Export, trans_choice('general.recurring_transactions', 2));
+ }
/**
* End recurring template.
diff --git a/app/Imports/Banking/RecurringTransactions.php b/app/Imports/Banking/RecurringTransactions.php
new file mode 100644
index 000000000..22670959f
--- /dev/null
+++ b/app/Imports/Banking/RecurringTransactions.php
@@ -0,0 +1,18 @@
+ new Base(),
+ 'recurring' => new Recurring(),
+ ];
+ }
+}
diff --git a/app/Imports/Banking/Sheets/Recurring.php b/app/Imports/Banking/Sheets/Recurring.php
new file mode 100644
index 000000000..3d9ac9577
--- /dev/null
+++ b/app/Imports/Banking/Sheets/Recurring.php
@@ -0,0 +1,24 @@
+number($row['transaction_number'])->pluck('id')->first();
+
+ return $row;
+ }
+}
diff --git a/app/Imports/Banking/Sheets/RecurringTransactions.php b/app/Imports/Banking/Sheets/RecurringTransactions.php
new file mode 100644
index 000000000..bdec04a77
--- /dev/null
+++ b/app/Imports/Banking/Sheets/RecurringTransactions.php
@@ -0,0 +1,38 @@
+getCurrencyCode($row);
+ $row['account_id'] = $this->getAccountId($row);
+ $row['category_id'] = $this->getCategoryId($row, $transaction_type);
+ $row['contact_id'] = $this->getContactId($row, $transaction_type);
+
+ if ($transaction_type == 'income') {
+ $row['document_id'] = Document::invoiceRecurring()->number($row['invoice_bill_number'])->pluck('id')->first();
+ } else {
+ $row['document_id'] = Document::billRecurring()->number($row['invoice_bill_number'])->pluck('id')->first();
+ }
+
+ return $row;
+ }
+}
diff --git a/resources/views/banking/recurring_transactions/index.blade.php b/resources/views/banking/recurring_transactions/index.blade.php
index fad645a4a..fec5c155c 100644
--- a/resources/views/banking/recurring_transactions/index.blade.php
+++ b/resources/views/banking/recurring_transactions/index.blade.php
@@ -21,6 +21,24 @@
@endcan
+
+
+
+ more_horiz
+
+
+ @can('create-banking-transactions')
+
+ {{ trans('import.import') }}
+
+ @endcan
+
+
+ {{ trans('general.export') }}
+
+
+
+
@if ($transactions->count() || request()->get('search', false))
@@ -141,23 +159,29 @@
@endif