-
Notifications
You must be signed in to change notification settings - Fork 52
/
Client.php
67 lines (58 loc) · 2.12 KB
/
Client.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Client extends Model
{
protected $guarded = [];
protected $table = 'clients_old';
protected $appends = ['currency'];
/**
* Get the projects for the client.
*/
public function projects()
{
return $this->hasMany(Project::class);
}
public function scopeActive($query)
{
return $query->where('is_active', true);
}
public function getCurrencyAttribute()
{
return config("constants.countries.{$this->country}.currency");
}
/**
* Returns the clients with relations that can be invoiced.
*
* @param array $billings Billings for which client should be added in the response.
*/
public static function getInvoicableClients(array $billings = [])
{
return self::active()
->whereHas('projects', function ($query) use ($billings) {
$query->whereHas('stages', function ($query) use ($billings) {
$query->whereHas('billings', function ($query) use ($billings) {
$query->doesntHave('invoice')->orWhereIn('id', $billings);
});
});
})
->with([
'projects' => function ($query) use ($billings) {
$query->whereHas('stages', function ($query) use ($billings) {
$query->whereHas('billings', function ($query) use ($billings) {
$query->doesntHave('invoice')->orWhereIn('id', $billings);
});
});
},
'projects.stages' => function ($query) use ($billings) {
$query->whereHas('billings', function ($query) use ($billings) {
$query->doesntHave('invoice')->orWhereIn('id', $billings);
});
},
'projects.stages.billings' => function ($query) use ($billings) {
$query->doesntHave('invoice')->orWhereIn('id', $billings);
},
])
->get();
}
}