Passed
Push — master ( b8999c...a2f941 )
by Curtis
09:12 queued 03:15
created

DataImport::getEntriesAttribute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
namespace App\Models\enso\dataimport;
4
5
use Illuminate\Database\Eloquent\Model;
6
use Illuminate\Http\UploadedFile;
7
use Illuminate\Support\Facades\Storage;
8
use LaravelEnso\DataImport\Enums\ImportTypes;
9
use LaravelEnso\DataImport\Enums\Statuses;
10
use LaravelEnso\DataImport\Exceptions\DataImport as DataImportException;
11
use LaravelEnso\DataImport\Jobs\Import as Job;
12
use LaravelEnso\DataImport\Services\Structure;
13
use LaravelEnso\DataImport\Services\Template;
14
use App\Contracts\enso\files\Attachable;
15
use App\Contracts\enso\files\AuthorizesFileAccess;
16
use App\Traits\enso\files\FilePolicies;
17
use App\Traits\enso\files\HasFile;
18
use LaravelEnso\Helpers\Services\Obj;
19
use LaravelEnso\Helpers\Traits\CascadesMorphMap;
20
use LaravelEnso\IO\Contracts\IOOperation;
21
use LaravelEnso\IO\Enums\IOTypes;
22
use LaravelEnso\IO\Traits\HasIOStatuses;
23
use LaravelEnso\Tables\Traits\TableCache;
24
use LaravelEnso\TrackWho\Traits\CreatedBy;
25
class DataImport extends Model implements Attachable, IOOperation, AuthorizesFileAccess
26
{
27
    use CascadesMorphMap, CreatedBy, HasIOStatuses, HasFile, FilePolicies, TableCache;
0 ignored issues
show
introduced by
The trait LaravelEnso\IO\Traits\HasIOStatuses requires some properties which are not provided by App\Models\enso\dataimport\DataImport: $name, $entries, $status
Loading history...
introduced by
The trait App\Traits\enso\files\HasFile requires some properties which are not provided by App\Models\enso\dataimport\DataImport: $optimizeImages, $resizeImages, $saved_name, $mimeTypes, $file
Loading history...
28
29
    protected $extensions = ['xlsx'];
30
31
    protected $guarded = ['id'];
32
33
    protected $casts = ['status' => 'integer', 'file_parsed' => 'boolean'];
34
35
    protected $folder = 'imports';
36
37
    public function rejected()
38
    {
39
        return $this->hasOne(RejectedImport::class);
40
    }
41
42
    public function handle(UploadedFile $file, array $params = [])
43
    {
44
        $template = new Template($this);
0 ignored issues
show
Bug introduced by
$this of type App\Models\enso\dataimport\DataImport is incompatible with the type LaravelEnso\DataImport\Models\DataImport expected by parameter $dataImport of LaravelEnso\DataImport\S...Template::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

44
        $template = new Template(/** @scrutinizer ignore-type */ $this);
Loading history...
45
        $structure = new Structure($template, $file);
46
47
        if ($structure->isValid()) {
48
            tap($this)->save()
49
                ->upload($file);
50
51
            Job::dispatch($this, $template, $structure->sheets(), new Obj($params));
52
        }
53
54
        return $structure->summary();
55
    }
56
57
    public function getEntriesAttribute()
58
    {
59
        return $this->entries();
60
    }
61
62
    public function entries()
63
    {
64
        return $this->successful + $this->failed;
65
    }
66
67
    public function rejectedFolder()
68
    {
69
        return $this->folder.DIRECTORY_SEPARATOR."rejected_{$this->id}";
70
    }
71
72
    public function delete()
73
    {
74
        if ($this->status !== Statuses::Finalized) {
75
            throw DataImportException::deleteRunningImport();
76
        }
77
78
        Storage::deleteDirectory($this->rejectedFolder());
79
80
        optional($this->rejected)->delete();
81
82
        parent::delete();
83
    }
84
85
    public function isFinalized()
86
    {
87
        return $this->file_parsed
88
            && $this->chunks === $this->processed_chunks;
89
    }
90
91
    public function name()
92
    {
93
        return ImportTypes::get($this->type);
94
    }
95
96
    public function type()
97
    {
98
        return IOTypes::Import;
99
    }
100
}
101