From b119deca9ffd90707e48fe91c530d5e10f6765c5 Mon Sep 17 00:00:00 2001 From: denisdulici Date: Mon, 20 Jan 2020 23:18:47 +0300 Subject: [PATCH] items import/export --- app/Exports/Common/Items.php | 14 ++++++++++--- app/Imports/Common/Items.php | 35 +++++++++++++++++++++++++++++---- app/Models/Common/Item.php | 2 +- public/files/import/items.xlsx | Bin 6532 -> 9022 bytes 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/app/Exports/Common/Items.php b/app/Exports/Common/Items.php index 6c7bd6127..22c2aee92 100644 --- a/app/Exports/Common/Items.php +++ b/app/Exports/Common/Items.php @@ -9,7 +9,7 @@ class Items extends Export { public function collection() { - $model = Model::usingSearchString(request('search')); + $model = Model::with(['category', 'tax'])->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); @@ -18,6 +18,14 @@ class Items extends Export return $model->get(); } + public function map($model): array + { + $model->category_name = $model->category->name; + $model->tax_rate = $model->tax->rate; + + return parent::map($model); + } + public function fields(): array { return [ @@ -25,8 +33,8 @@ class Items extends Export 'description', 'sale_price', 'purchase_price', - 'category_id', - 'tax_id', + 'category_name', + 'tax_rate', 'enabled', ]; } diff --git a/app/Imports/Common/Items.php b/app/Imports/Common/Items.php index 44c2cbd26..31fa1dfb7 100644 --- a/app/Imports/Common/Items.php +++ b/app/Imports/Common/Items.php @@ -3,18 +3,45 @@ namespace App\Imports\Common; use App\Abstracts\Import; -use App\Models\Common\Item as Model; use App\Http\Requests\Common\Item as Request; -use App\Jobs\Common\CreateItem; +use App\Models\Common\Item as Model; +use App\Models\Setting\Category; +use App\Models\Setting\Tax; class Items extends Import { public function model(array $row) { return new Model($row); - //$request = (new Request())->merge($row); + } - //return dispatch_now(new CreateItem($request)); + public function map($row): array + { + $row = parent::map($row); + + if (empty($row['category_id']) && !empty($row['category_name'])) { + $row['category_id'] = Category::firstOrCreate([ + 'name' => $row['category_name'], + ], [ + 'company_id' => session('company_id'), + 'type' => 'income', + 'color' => '#' . dechex(rand(0x000000, 0xFFFFFF)), + 'enabled' => 1, + ])->id; + } + + if (empty($row['tax_id']) && !empty($row['tax_rate'])) { + $row['tax_id'] = Tax::firstOrCreate([ + 'rate' => $row['tax_rate'], + ], [ + 'company_id' => session('company_id'), + 'type' => 'normal', + 'name' => $row['tax_rate'], + 'enabled' => 1, + ])->id; + } + + return $row; } public function rules(): array diff --git a/app/Models/Common/Item.php b/app/Models/Common/Item.php index ea551dfc0..030cd03db 100644 --- a/app/Models/Common/Item.php +++ b/app/Models/Common/Item.php @@ -41,7 +41,7 @@ class Item extends Model public function tax() { - return $this->belongsTo('App\Models\Setting\Tax')->withDefault(['name' => trans('general.na')]); + return $this->belongsTo('App\Models\Setting\Tax')->withDefault(['name' => trans('general.na'), 'rate' => 0]); } public function bill_items() diff --git a/public/files/import/items.xlsx b/public/files/import/items.xlsx index b7955b7971dfc2d83278b41700304692e80dfa68..a40ac42572fd17ccc85d065041597a444be12f6c 100644 GIT binary patch literal 9022 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 Nz<_&@BPD*+`#-7ra-0AF literal 6532 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 VDxjhN0^uOO!-#{EO8V>H{{cp