Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

Institution.php 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace App\Models\Banking;
  3. use Illuminate\Database\Eloquent\Casts\Attribute;
  4. use Illuminate\Database\Eloquent\Factories\HasFactory;
  5. use Illuminate\Database\Eloquent\Model;
  6. use Illuminate\Database\Eloquent\Relations\HasMany;
  7. use Illuminate\Support\Carbon;
  8. use Illuminate\Support\Facades\Storage;
  9. class Institution extends Model
  10. {
  11. use HasFactory;
  12. protected $table = 'institutions';
  13. protected $fillable = [
  14. 'external_institution_id',
  15. 'name',
  16. 'logo',
  17. 'website',
  18. 'phone',
  19. 'address',
  20. 'created_by',
  21. 'updated_by',
  22. ];
  23. protected $appends = [
  24. 'logo_url',
  25. ];
  26. public function bankAccounts(): HasMany
  27. {
  28. return $this->hasMany(BankAccount::class, 'institution_id');
  29. }
  30. public function connectedBankAccounts(): HasMany
  31. {
  32. return $this->hasMany(ConnectedBankAccount::class, 'institution_id');
  33. }
  34. public function getLastTransactionDate(): ?string
  35. {
  36. $latestDate = $this->connectedBankAccounts->map(function ($connectedBankAccount) {
  37. if ($connectedBankAccount->bankAccount) {
  38. return $connectedBankAccount->bankAccount->transactions()->max('posted_at');
  39. }
  40. return null;
  41. })->filter()->max();
  42. if ($latestDate) {
  43. return Carbon::parse($latestDate)->diffForHumans();
  44. }
  45. return null;
  46. }
  47. public function getLastImportDate(): ?string
  48. {
  49. $latestDate = $this->connectedBankAccounts->map(function ($connectedBankAccount) {
  50. return $connectedBankAccount->last_imported_at;
  51. })->filter()->max();
  52. if ($latestDate) {
  53. return Carbon::parse($latestDate)->diffForHumans();
  54. }
  55. return null;
  56. }
  57. protected function logoUrl(): Attribute
  58. {
  59. return Attribute::get(static function (mixed $value, array $attributes): ?string {
  60. if ($attributes['logo']) {
  61. return Storage::disk('public')->url($attributes['logo']);
  62. }
  63. return null;
  64. });
  65. }
  66. public function logo(): Attribute
  67. {
  68. return Attribute::set(static function (mixed $value): ?string {
  69. if ($value) {
  70. $decoded = base64_decode($value);
  71. $filename = 'institution_logo_' . uniqid('', true) . '.png';
  72. Storage::disk('public')->put($filename, $decoded);
  73. return $filename;
  74. }
  75. return null;
  76. });
  77. }
  78. }