Member.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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_email',
  36. 'father_phone',
  37. 'father_fiscal_code',
  38. 'father_document_files',
  39. 'mother_document_files',
  40. 'mother_email',
  41. 'mother_phone',
  42. 'mother_fiscal_code',
  43. 'father_doc_number',
  44. 'father_doc_type',
  45. 'mother_doc_number',
  46. 'mother_doc_type',
  47. 'enabled',
  48. 'no_send_mail',
  49. 'exclude_from_records',
  50. 'current_status',
  51. 'certificate',
  52. 'certificate_date',
  53. 'to_complete',
  54. 'is_archived',
  55. 'archived_date',
  56. 'is_deleted',
  57. 'deleted_date',
  58. ];
  59. public function nation()
  60. {
  61. return $this->belongsTo(Nation::class);
  62. }
  63. public function province()
  64. {
  65. return $this->belongsTo(Province::class);
  66. }
  67. public function city()
  68. {
  69. return $this->belongsTo(City::class);
  70. }
  71. public function birth_nation()
  72. {
  73. return $this->belongsTo(Nation::class);
  74. }
  75. public function birth_province()
  76. {
  77. return $this->belongsTo(Province::class);
  78. }
  79. public function birth_city()
  80. {
  81. return $this->belongsTo(City::class);
  82. }
  83. public function cards()
  84. {
  85. return $this->hasMany(MemberCard::class);
  86. }
  87. public function categories()
  88. {
  89. return $this->hasMany(MemberCategory::class);
  90. }
  91. public function courses()
  92. {
  93. return $this->hasMany(MemberCourse::class);
  94. }
  95. public function subscriptions()
  96. {
  97. return $this->hasMany(MemberSubscription::class);
  98. }
  99. public function certificates()
  100. {
  101. return $this->hasMany(MemberCertificate::class)->orderBy('expire_date', 'DESC');
  102. }
  103. public function isAdult()
  104. {
  105. $date1 = new DateTime($this->birth_date);
  106. $date2 = new DateTime("now");
  107. $interval = $date1->diff($date2);
  108. return $this->birth_date == '' || $interval->y >= 18;
  109. }
  110. public function getAge()
  111. {
  112. $date1 = new DateTime($this->birth_date);
  113. $date2 = new DateTime("now");
  114. $interval = $date1->diff($date2);
  115. return strval($interval->y);
  116. return $interval->y;
  117. }
  118. public function isActive()
  119. {
  120. // Se uno ha una tessera o meno compare nella lista degli utenti (attivo/disattivo),
  121. // per il certificato medico compare la data di scadenza sempre nella lista utenti.
  122. // Se uno invece ha eseguito i pagamenti, al posto del bottone abbiamo detto che mettiamo la scritta (iscritto (ha pagato),
  123. //in sospeso (stato legato alla validità o meno della tessera o del certificato medico, non iscritto (non ha pagato). Io questo ho capito.
  124. $subscribed = $this->isSubscribed();
  125. $hasCard = $subscribed["status"] == 2;
  126. $hasCertificate = $this->hasCertificate()["status"];
  127. $ret = array('status' => 0, 'status_text' => '', 'date' => '');
  128. if ($hasCard)
  129. {
  130. if ($hasCertificate)
  131. $ret = array('status' => 2, 'status_text' => 'Attiva', 'date' => $subscribed["date"]);
  132. else
  133. $ret = array('status' => 1,'status_text' => 'Sospeso', 'date' => $subscribed["date"]);
  134. }
  135. /*$ret = array('status' => 0, 'status_text' => '', 'date' => '');
  136. $records = \App\Models\Record::where('member_id', $this->id)->where('type', 'IN')->with('causal')->get();
  137. foreach($records as $record)
  138. {
  139. if ($record->causal->user_status == 1)
  140. {
  141. if ($record->date < date('Y-m-d', strtotime('+1 year')))
  142. $ret = array('status' => 2, 'status_text' => 'Attiva', 'date' => $newDate = date('Y-m-d', strtotime($record->date. ' + 1 years')));
  143. // if (!$hasCard || !$hasCertificate)
  144. if (!$hasCertificate)
  145. $ret = array('status' => 1,'status_text' => 'Sospeso', 'date' => $newDate = date('Y-m-d', strtotime($record->date. ' + 1 years')));
  146. }
  147. }*/
  148. return $ret;
  149. }
  150. public function isSubscribed()
  151. {
  152. $ret = array('status' => 0, 'date' => '');
  153. $cards = \App\Models\MemberCard::where('member_id', $this->id)->with('card')->orderBy('expire_date')->get();
  154. foreach($cards as $card)
  155. {
  156. if ($card->card->use_for_user_check)
  157. {
  158. $ret = array('status' => $card->expire_date . " 23:59:59" > date("Y-m-d") ? 2 : 1, 'date' => $card->expire_date);
  159. }
  160. }
  161. return $ret;
  162. }
  163. public function getStatus()
  164. {
  165. $ret = array('status' => 0, 'date' => '', 'status_text' => 'Non tesserato');
  166. $cards = \App\Models\MemberCard::where('member_id', $this->id)->with('card')->orderBy('expire_date')->get();
  167. foreach($cards as $card)
  168. {
  169. if ($card->card->use_for_user_check)
  170. {
  171. $s = 0;
  172. if ($card->expire_date . " 23:59:59" > date("Y-m-d"))
  173. {
  174. $c = $this->hasCertificate();
  175. $s = $c["status"] == true ? 2 : 1;
  176. }
  177. $ret = array('status' => $s, 'date' => $card->expire_date, 'status_text' => $s == 2 ? 'Tesserato' : ($s == 1 ? 'Sospeso' : 'Non tesserato'));
  178. //$ret = array('status' => $card->expire_date . " 23:59:59" > date("Y-m-d") ? 2 : 1, 'date' => $card->expire_date, 'status_text' => $card->expire_date . " 23:59:59" > date("Y-m-d") ? 'Tesserato' : 'Sospeso');
  179. }
  180. }
  181. return $ret;
  182. }
  183. public function hasCertificate()
  184. {
  185. $ret = array('status' => false, 'date' => '');
  186. $certificates = \App\Models\MemberCertificate::where('member_id', $this->id)->orderBy('expire_date', 'DESC')->get();
  187. foreach($certificates as $idx => $certificate)
  188. {
  189. if ($idx == 0)
  190. $ret = array('status' => $certificate->expire_date . " 23:59:59" > date("Y-m-d"), 'date' => $certificate->expire_date);
  191. }
  192. return $ret;
  193. }
  194. public function getMoney()
  195. {
  196. $ret = 0;
  197. // Soldi virtuali caricati
  198. $records = \App\Models\Record::where('member_id', $this->id)->where('type', 'IN')
  199. ->where(function ($query) {
  200. $query->where('deleted', false)->orWhere('deleted', null);
  201. })->get();
  202. //->with('causal')->get();
  203. foreach($records as $record)
  204. {
  205. foreach($record->rows as $r)
  206. {
  207. if ($r->causal->money == 1)
  208. {
  209. $ret += $r->amount;
  210. }
  211. }
  212. }
  213. // Soldi virtuali spesi
  214. $records = \App\Models\Record::where('member_id', $this->id)->where('type', 'IN')->with('payment_method')
  215. ->where(function ($query) {
  216. $query->where('deleted', false)->orWhere('deleted', null);
  217. })->get();
  218. foreach($records as $record)
  219. {
  220. if ($record->payment_method->money == 1)
  221. {
  222. $ret -= $record->amount;
  223. }
  224. }
  225. // Soldi EXTRA
  226. $records = \App\Models\Money::where('member_id', $this->id)->get();
  227. foreach($records as $record)
  228. {
  229. $ret += floatval($record->amount);
  230. }
  231. return $ret;
  232. }
  233. }