Member.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. use DateTime;
  6. class Member extends Model
  7. {
  8. use HasFactory;
  9. protected $fillable = [
  10. 'first_name',
  11. 'last_name',
  12. 'status',
  13. 'birth_city_id',
  14. 'birth_province_id',
  15. 'birth_nation_id',
  16. 'birth_date',
  17. 'gender',
  18. 'address',
  19. 'zip_code',
  20. 'fiscal_code',
  21. 'nation_id',
  22. 'province_id',
  23. 'city_id',
  24. 'phone',
  25. 'phone2',
  26. 'phone3',
  27. 'email',
  28. 'image',
  29. 'document_type',
  30. 'document_number',
  31. 'document_from',
  32. 'document_expire_date',
  33. 'document_files',
  34. 'father_name',
  35. 'father_mail',
  36. 'father_phone',
  37. 'father_fiscal_code',
  38. 'mother_name',
  39. 'mother_mail',
  40. 'mother_phone',
  41. 'mother_fiscal_code',
  42. 'enabled',
  43. ];
  44. public function nation()
  45. {
  46. return $this->belongsTo(Nation::class);
  47. }
  48. public function province()
  49. {
  50. return $this->belongsTo(Province::class);
  51. }
  52. public function city()
  53. {
  54. return $this->belongsTo(City::class);
  55. }
  56. public function birth_nation()
  57. {
  58. return $this->belongsTo(Nation::class);
  59. }
  60. public function birth_province()
  61. {
  62. return $this->belongsTo(Province::class);
  63. }
  64. public function birth_city()
  65. {
  66. return $this->belongsTo(City::class);
  67. }
  68. public function cards()
  69. {
  70. return $this->hasMany(MemberCard::class);
  71. }
  72. public function categories()
  73. {
  74. return $this->hasMany(MemberCategory::class);
  75. }
  76. public function courses()
  77. {
  78. return $this->hasMany(MemberCourse::class);
  79. }
  80. public function certificates()
  81. {
  82. return $this->hasMany(MemberCertificate::class)->orderBy('expire_date', 'DESC');
  83. }
  84. public function isAdult()
  85. {
  86. $date1 = new DateTime($this->birth_date);
  87. $date2 = new DateTime("now");
  88. $interval = $date1->diff($date2);
  89. return $this->birth_date == '' || $interval->y >= 18;
  90. }
  91. public function getAge()
  92. {
  93. $date1 = new DateTime($this->birth_date);
  94. $date2 = new DateTime("now");
  95. $interval = $date1->diff($date2);
  96. return $interval->y;
  97. }
  98. public function isActive()
  99. {
  100. // Se uno ha una tessera o meno compare nella lista degli utenti (attivo/disattivo),
  101. // per il certificato medico compare la data di scadenza sempre nella lista utenti.
  102. // Se uno invece ha eseguito i pagamenti, al posto del bottone abbiamo detto che mettiamo la scritta (iscritto (ha pagato),
  103. //in sospeso (stato legato alla validità o meno della tessera o del certificato medico, non iscritto (non ha pagato). Io questo ho capito.
  104. $subscribed = $this->isSubscribed();
  105. $hasCard = $subscribed["status"] == 2;
  106. $hasCertificate = $this->hasCertificate()["status"];
  107. $ret = array('status' => 0, 'status_text' => '', 'date' => '');
  108. if ($hasCard)
  109. {
  110. if ($hasCertificate)
  111. $ret = array('status' => 2, 'status_text' => 'Attiva', 'date' => $subscribed["date"]);
  112. else
  113. $ret = array('status' => 1,'status_text' => 'Sospeso', 'date' => $subscribed["date"]);
  114. }
  115. /*$ret = array('status' => 0, 'status_text' => '', 'date' => '');
  116. $records = \App\Models\Record::where('member_id', $this->id)->where('type', 'IN')->with('causal')->get();
  117. foreach($records as $record)
  118. {
  119. if ($record->causal->user_status == 1)
  120. {
  121. if ($record->date < date('Y-m-d', strtotime('+1 year')))
  122. $ret = array('status' => 2, 'status_text' => 'Attiva', 'date' => $newDate = date('Y-m-d', strtotime($record->date. ' + 1 years')));
  123. // if (!$hasCard || !$hasCertificate)
  124. if (!$hasCertificate)
  125. $ret = array('status' => 1,'status_text' => 'Sospeso', 'date' => $newDate = date('Y-m-d', strtotime($record->date. ' + 1 years')));
  126. }
  127. }*/
  128. return $ret;
  129. }
  130. public function isSubscribed()
  131. {
  132. $ret = array('status' => 0, 'date' => '');
  133. $cards = \App\Models\MemberCard::where('member_id', $this->id)->with('card')->orderBy('expire_date')->get();
  134. foreach($cards as $card)
  135. {
  136. if ($card->card->use_for_user_check)
  137. {
  138. $ret = array('status' => $card->expire_date > date("Y-m-d") ? 2 : 1, 'date' => $card->expire_date);
  139. }
  140. }
  141. return $ret;
  142. }
  143. public function getStatus()
  144. {
  145. $ret = array('status' => 0, 'date' => '', 'status_text' => 'Non tesserato');
  146. $cards = \App\Models\MemberCard::where('member_id', $this->id)->with('card')->orderBy('expire_date')->get();
  147. foreach($cards as $card)
  148. {
  149. if ($card->card->use_for_user_check)
  150. {
  151. $ret = array('status' => $card->expire_date > date("Y-m-d") ? 2 : 1, 'date' => $card->expire_date, 'status_text' => $card->expire_date > date("Y-m-d") ? 'Tesserato' : 'Sospeso');
  152. }
  153. }
  154. return $ret;
  155. }
  156. public function hasCertificate()
  157. {
  158. $ret = array('status' => false, 'date' => '');
  159. $certificates = \App\Models\MemberCertificate::where('member_id', $this->id)->orderBy('expire_date')->get();
  160. foreach($certificates as $certificate)
  161. {
  162. $ret = array('status' => $certificate->expire_date > date("Y-m-d"), 'date' => $certificate->expire_date);
  163. }
  164. return $ret;
  165. }
  166. public function getMoney()
  167. {
  168. $ret = 0;
  169. // Soldi virtuali caricati
  170. $records = \App\Models\Record::where('member_id', $this->id)->where('type', 'IN')->get();
  171. //->with('causal')->get();
  172. foreach($records as $record)
  173. {
  174. foreach($record->rows as $r)
  175. {
  176. if ($r->causal->money == 1)
  177. {
  178. $ret += $r->amount;
  179. }
  180. }
  181. }
  182. // Soldi virtuali spesi
  183. $records = \App\Models\Record::where('member_id', $this->id)->where('type', 'IN')->with('payment_method')->get();
  184. foreach($records as $record)
  185. {
  186. if ($record->payment_method->money == 1)
  187. {
  188. $ret -= $record->amount;
  189. }
  190. }
  191. return $ret;
  192. }
  193. }