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