From 9b42e2d1273a938b07438d607b7dcac393833c0e Mon Sep 17 00:00:00 2001 From: denisdulici Date: Tue, 21 Jan 2020 00:04:10 +0300 Subject: [PATCH] payments import/export --- app/Exports/Purchases/Payments.php | 20 +++++++++++++++----- app/Imports/Purchases/Payments.php | 29 +++++++++++++++++++++++++++++ public/files/import/payments.xlsx | Bin 6669 -> 9160 bytes 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/app/Exports/Purchases/Payments.php b/app/Exports/Purchases/Payments.php index 48a1a8288..731a8969b 100644 --- a/app/Exports/Purchases/Payments.php +++ b/app/Exports/Purchases/Payments.php @@ -9,7 +9,7 @@ class Payments extends Export { public function collection() { - $model = Model::type('expense')->usingSearchString(request('search')); + $model = Model::with(['account', 'bill', 'category', 'contact'])->type('expense')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); @@ -18,6 +18,16 @@ class Payments extends Export return $model->get(); } + public function map($model): array + { + $model->account_name = $model->account->name; + $model->bill_number = $model->bill ? $model->bill->bill_number : 0; + $model->contact_email = $model->contact->email; + $model->category_name = $model->category->name; + + return parent::map($model); + } + public function fields(): array { return [ @@ -25,10 +35,10 @@ class Payments extends Export 'amount', 'currency_code', 'currency_rate', - 'account_id', - 'document_id', - 'contact_id', - 'category_id', + 'account_name', + 'bill_number', + 'contact_email', + 'category_name', 'description', 'payment_method', 'reference', diff --git a/app/Imports/Purchases/Payments.php b/app/Imports/Purchases/Payments.php index 41f6d6785..6c6a20e9f 100644 --- a/app/Imports/Purchases/Payments.php +++ b/app/Imports/Purchases/Payments.php @@ -5,6 +5,7 @@ namespace App\Imports\Purchases; use App\Abstracts\Import; use App\Models\Banking\Transaction as Model; use App\Http\Requests\Banking\Transaction as Request; +use App\Models\Purchase\Bill; class Payments extends Import { @@ -19,6 +20,34 @@ class Payments extends Import $row['type'] = 'expense'; + if (empty($row['account_id']) && !empty($row['account_name'])) { + $row['account_id'] = $this->getAccountIdFromName($row); + } + + if (empty($row['account_id']) && !empty($row['account_number'])) { + $row['account_id'] = $this->getAccountIdFromNumber($row); + } + + if (empty($row['account_id']) && !empty($row['currency_code'])) { + $row['account_id'] = $this->getAccountIdFromCurrency($row); + } + + if (empty($row['contact_id']) && !empty($row['contact_name'])) { + $row['contact_id'] = $this->getContactIdFromName($row, 'vendor'); + } + + if (empty($row['contact_id']) && !empty($row['contact_email'])) { + $row['contact_id'] = $this->getContactIdFromEmail($row, 'vendor'); + } + + if (empty($row['category_id']) && !empty($row['category_name'])) { + $row['category_id'] = $this->getCategoryIdFromName($row, 'expense'); + } + + if (!empty($row['bill_number'])) { + $row['document_id'] = Bill::number($row['bill_number'])->pluck('id')->first(); + } + return $row; } diff --git a/public/files/import/payments.xlsx b/public/files/import/payments.xlsx index c2a0f0f0e9ee9ef7a0cb3e9830ee7ff7381d78ae..fad84f1d46abe3060b6bbb8cf68ab04a3b3c66c8 100644 GIT binary patch literal 9160 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