'storeCategoryWithID', 'setCourse' => 'setCourse', 'hideMsg' => 'hideMsg']; use WithFileUploads; public $sortField = 'id'; public $sortAsc = false; public $groupMsg = ''; public $type = 'dati'; public $from = ''; public $selectedCourseMember = 0; protected $messages = [ 'birth_nation_id.required' => 'birth_nation_id', 'birth_province_id.required' => 'birth_province_id', 'birth_city_id.required' => 'birth_city_id', 'nation_id.required' => 'nation_id', 'province_id.required' => 'province_id', 'city_id.required' => 'city_id', 'gender' => 'gender' ]; public function change($type) { $this->type = $type; } public function sortBy($field) { if ($this->sortField === $field) { $this->sortAsc = ! $this->sortAsc; } else { $this->sortAsc = true; } $this->sortField = $field; } public $records, $first_name, $last_name, $image, $image_old, $status, $birth_place, $birth_city_id, $birth_province_id, $birth_nation_id, $birth_date, $gender, $no_send_mail, $exclude_from_records, $fiscal_code, $address, $zip_code, $nation_id, $province_id, $city_id, $phone, $phone2, $phone3, $email, $enabled, $dataId, $update = false, $add = false; public $isSaving = false; public $importoBorsellino, $father_name, $mother_name, $father_email, $mother_email, $father_phone, $mother_phone, $father_fiscal_code, $mother_fiscal_code, $father_doc_number, $father_doc_type, $mother_doc_number, $mother_doc_type, $mother_document_files, $father_document_files; public $document_type, $document_number, $document_from, $document_expire_date, $document_files, $document_files_old; public $selectId = 0; public $causalId = 0; public $error_fc = false; public $under18 = false; public $money = 0; public $refreshAfter = 0; public $checkedAll = false; public $multipleIds = []; public $multipleAction = ''; public $isItaly = true; public $isBirthItaly = true; public $showDetail = false; public $currentMember; public $currentStatus; public $age = ''; public $disciplines = array(); public $cards = array(); public $categories = array(); public $courses = array(); public $course_names = array(); public $course_levels = array(); public $course_types = array(); public $course_frequencies = array(); public $course_subscriptions = array(); public $createSubscription = false; public $payMonths = array(); public $suspendedMonths = array(); public $showCourse = array(); public $searchTxt; public $search; public $showReset = false; public $advanced = false; public $birthNations = array(); public $birthProvinces = array(); public $birthCities = array(); public $active; // Card data public $member_cards = array(), $card_card_id, $card_number, $card_date, $card_accept_date, $card_status, $card_discipline1_id, $card_discipline2_id, $card_discipline3_id, $addCard, $updateCard, $cardDataId; // Categories data public $member_categories = array(), $category_category_id; // Courses data public $member_courses = array(), $course_course_id, $course_date_from, $course_date_to, $course_when = array(), $addCourse, $updateCourse, $courseDataId, $course_course_subscription_id, $course_status, $course_note, $course_price, $course_subscription_price, $course_subscribed, $course_months = array(), $course_exist; public $course_name, $course_level_id, $course_type_id, $course_frequency_id; // Certificates data public $member_certificates = array(), $certificate_type, $certificate_filename_old, $certificate_filename, $certificate_expire_date, $certificate_status, $addCertificate, $updateCertificate, $certificateDataId; public $filterCard = []; public $filterCategory = []; public $filterCertNormal = 0; public $filterCertAgonistic = 0; public $filterCertScaduto = 0; public $filterCertInScadenza = 0; protected $rules = [ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required', 'phone' => 'required', 'birth_date' => 'before_or_equal:today' ]; public function resetFields() { $this->dataId = -1; $this->first_name = ''; $this->last_name = ''; $this->status = ''; $this->birth_city_id = null; $this->birth_province_id = null; $this->birth_nation_id = null; $this->birth_date = null; $this->birth_place = ''; $this->importoBorsellino = 0; $this->father_name = ''; $this->mother_name = ''; $this->father_email = ''; $this->mother_email = ''; $this->father_phone = ''; $this->mother_phone = ''; $this->father_fiscal_code = ''; $this->mother_fiscal_code = ''; $this->father_doc_number = ''; $this->mother_doc_number = ''; $this->father_doc_type = ''; $this->mother_doc_type = ''; $this->mother_document_files = array(); $this->father_document_files = array(); $this->gender = null; $this->no_send_mail = false; $this->exclude_from_records = false; $this->fiscal_code = ''; $this->address = ''; $this->zip_code = ''; $this->document_type = ''; $this->document_number = ''; $this->document_from = ''; $this->document_expire_date = null; $this->document_files = array(); //$this->nation_id = null; //$this->province_id = null; $this->nation_id = null; $this->province_id = null; $this->city_id = null; $this->phone = ''; $this->phone2 = ''; $this->phone3 = ''; $this->email = ''; $this->enabled = true; $this->under18 = false; $this->money = 0; $this->image = null; $this->age = ''; $this->error_fc = false; $this->isSaving = false; $this->emit('load-data-table'); } public function resetCardFields() { $this->card_card_id = null; $this->card_number = ''; $this->card_date = null; $this->card_accept_date = null; $this->card_status = 0; $this->card_discipline1_id = null; $this->card_discipline2_id = null; $this->card_discipline3_id = null; } public function resetCertificateFields() { $this->certificate_type = 'N'; $this->certificate_filename = ''; $this->certificate_filename_old = ''; $this->certificate_expire_date = null; $this->certificate_status = 0; } public function resetCourseFields() { $this->course_course_id = null; $this->course_when = array(); $this->course_when[] = array('day' => array(), 'from' => '', 'to' => ''); $this->course_date_from = null; $this->course_date_to = null; $this->course_course_subscription_id = null; $this->course_status = 0; $this->course_price = 0; $this->course_subscription_price = 0; $this->course_exist = false; $this->course_subscribed = false; $this->course_months = array(); $this->course_note = ''; $this->course_name = ''; $this->course_level_id = ''; $this->course_type_id = ''; $this->course_frequency_id = ''; } public function executeMultipleAction() { if ($this->multipleAction == 'delete') $this->multipleDelete(); } public function updatedImage() { $this->validate([ 'image' => 'image|max:1024', ]); $this->image_old = ''; } public function updatedCourseName() { $this->course_course_id = null; $this->course_level_id = ''; $this->course_type_id = ''; $this->course_frequency_id = ''; $levels_ids = []; if ($this->course_name != '') { list($n, $y) = explode("(", $this->course_name); $y = trim(str_replace(")", "", $y)); $all = \App\Models\Course::where('name', 'like', '%' . trim($n) . "%")->where('year', $y)->where('enabled', true)->get(); foreach ($all as $a) { $levels_ids[] = $a->course_level_id; } } $this->course_levels = \App\Models\CourseLevel::select('*')->where('enabled', true)->whereIn('id', $levels_ids)->get(); $this->course_types = []; $this->course_frequencies = []; } public function updatedCourseLevelId() { $this->course_course_id = null; $this->course_type_id = ''; $this->course_frequency_id = ''; $types_ids = []; if ($this->course_level_id != '') { list($n, $y) = explode("(", $this->course_name); $y = trim(str_replace(")", "", $y)); $all = \App\Models\Course::where('name', 'like', '%' . trim($n) . "%")->where('year', $y)->where('enabled', true)->where('course_level_id', $this->course_level_id)->get(); foreach ($all as $a) { $types_ids[] = $a->course_type_id; } } $this->course_types = \App\Models\CourseType::select('*')->where('enabled', true)->whereIn('id', $types_ids)->get(); $this->course_frequencies = []; } public function updatedCourseTypeId() { $this->course_course_id = null; $this->course_frequency_id = ''; $frequencies_ids = []; if ($this->course_type_id != '') { list($n, $y) = explode("(", $this->course_name); $y = trim(str_replace(")", "", $y)); $all = \App\Models\Course::where('name', 'like', '%' . trim($n) . "%")->where('year', $y)->where('enabled', true)->where('course_level_id', $this->course_level_id)->where('course_type_id', $this->course_type_id)->get(); foreach ($all as $a) { $frequencies_ids[] = $a->course_frequency_id; } } $this->course_frequencies = \App\Models\CourseFrequency::select('*')->where('enabled', true)->whereIn('id', $frequencies_ids)->get(); } public function updatedCourseFrequencyId() { $this->course_course_id = null; if ($this->course_frequency_id != '') { list($n, $y) = explode("(", $this->course_name); $y = trim(str_replace(")", "", $y)); $this->course_course_id = \App\Models\Course::where('name', 'like', '%' . trim($n) . "%")->where('year', $y)->where('course_level_id', $this->course_level_id)->where('course_type_id', $this->course_type_id)->where('course_frequency_id', $this->course_frequency_id)->first()->id; if ($this->course_course_id > 0) { $c = \App\Models\Course::findOrFail($this->course_course_id); $this->course_price = formatPrice($c->price); $this->course_subscription_price = formatPrice($c->subscription_price); // Controllo se sono già iscritto la corso $this->course_exist = \App\Models\MemberCourse::where('course_id', $this->course_course_id)->where('member_id', $this->dataId)->count() > 0; } else { $this->course_price = 0; $this->course_subscription_price = 0; $this->course_exist = false; } } else { $this->course_price = 0; $this->course_subscription_price = 0; $this->course_exist = false; } } public $documents = []; public $father_documents = []; public $mother_documents = []; public function removeDocument($idx, $type) { if ($type == 'father') { unset($this->father_document_files[$idx]); } elseif ($type == 'mother') { unset($this->mother_document_files[$idx]); } else { unset($this->document_files[$idx]); } } public function updatedDocuments() { foreach ($this->documents as $document) { $name = $document->getClientOriginalName(); $document->storeAs('public', $name); $this->document_files[] = $name; } $this->documents = []; } public function updatedFatherDocuments() { foreach ($this->father_documents as $document) { $name = $document->getClientOriginalName(); $document->storeAs('public', $name); $this->father_document_files[] = $name; } $this->father_documents = []; } public function updatedMotherDocuments() { foreach ($this->mother_documents as $document) { $name = $document->getClientOriginalName(); $document->storeAs('public', $name); $this->mother_document_files[] = $name; } $this->mother_documents = []; } public function resetCategoryFields() { $this->category_category_id = null; } public function getCategories($records, $indentation) { foreach ($records as $record) { // $this->categories[] = array('id' => $record->id, 'name' => str_repeat(" / ", $indentation) . $record->name); $this->categories[] = array('id' => $record->id, 'name' => $record->getTree()); if (count($record->childs)) $this->getCategories($record->childs, $indentation + 1); } } public function getCourses($records, $indentation) { foreach ($records as $record) { // $this->categories[] = array('id' => $record->id, 'name' => str_repeat(" / ", $indentation) . $record->name); $this->courses[] = array('id' => $record->id, 'name' => $record->getTree()); if (count($record->childs)) $this->getCourses($record->childs, $indentation + 1); } } public function updatedBirthDate() { $this->validateOnly('birth_date'); $date1 = new DateTime($this->birth_date); $date2 = new DateTime("now"); $interval = $date1->diff($date2); $this->age = $interval->y . " anni"; $this->under18 = $interval->y < 18; } public function mount() { if (isset($_GET["new"])) { $this->refreshAfter = 1; $this->add(); } if (isset($_GET["from"])) { $this->from = $_GET["from"]; } $this->cards = \App\Models\Card::select('id', 'name')->get(); $this->disciplines = \App\Models\Discipline::select('id', 'name')->get(); $this->categories = array(); $this->getCategories(\App\Models\Category::select('id', 'name')->where('parent_id', null)->get(), 0); $this->courses = \App\Models\Course::select('id', 'name')->where('enabled', null)->get(); $this->course_subscriptions = \App\Models\CourseSubscription::select('*')->where('enabled', true)->get(); // $this->getCourses(\App\Models\Course::select('id', 'name')->where('parent_id', null)->get(), 0); /*$this->nations = \App\Models\Nation::select('id', 'name')->orderBy('name')->get(); $this->provinces = \App\Models\Province::where('nation_id', 1)->orderBy('name')->get(); $this->cities = \App\Models\City::where('province_id', 178)->orderBy('name')->orderBy('name')->get();*/ $c = \App\Models\Causal::where('type', 'IN')->where('money', true)->first(); if ($c) $this->causalId = $c->id; if (isset($_GET["member_detail"])) { $this->showDetailF($_GET["member_detail"]); $this->refreshAfter = 1; } /*$this->birthNations = \App\Models\Nation::select('id', 'name')->orderBy('name')->get(); $this->birthProvinces = \App\Models\Province::where('nation_id', 1)->orderBy('name')->get(); $this->birthCities = \App\Models\City::where('province_id', 178)->orderBy('name')->orderBy('name')->get();*/ } public function updated() { if ($this->isSaving) { $zzz = []; if ($this->birth_nation_id == null) $zzz[] = 'birth_nation_id=' . $this->birth_nation_id; if ($this->isBirthItaly) { if ($this->birth_province_id == null) $zzz[] = 'birth_province_id=' . $this->birth_province_id; if ($this->birth_city_id == null) $zzz[] = 'birth_city_id=' . $this->birth_city_id; } if ($this->nation_id == null) $zzz[] = 'nation_id=' . $this->nation_id; if ($this->isItaly) { if ($this->province_id == null) $zzz[] = 'province_id=' . $this->province_id; if ($this->city_id == null) $zzz[] = 'city_id=' . $this->city_id; } $this->emit('setErrorMsg', $zzz); } // $this->emit('load-select'); } public function hydrate() { if ($this->isSaving) { $zzz = []; if ($this->birth_nation_id == null) $zzz[] = 'birth_nation_id=' . $this->birth_nation_id; if ($this->isBirthItaly) { if ($this->birth_province_id == null) $zzz[] = 'birth_province_id=' . $this->birth_province_id; if ($this->birth_city_id == null) $zzz[] = 'birth_city_id=' . $this->birth_city_id; } if ($this->nation_id == null) $zzz[] = 'nation_id=' . $this->nation_id; if ($this->isItaly) { if ($this->province_id == null) $zzz[] = 'province_id=' . $this->province_id; if ($this->city_id == null) $zzz[] = 'city_id=' . $this->city_id; } $this->emit('setErrorMsg', $zzz); } $this->emit('load-select'); // $this->emit('destroy-data-table'); } public function checkIsItaly() { $n = \App\Models\Nation::findOrFail($this->nation_id); $this->isItaly = $n->is_italy; } public function checkIsBirthItaly() { if ($this->birth_nation_id > 0) { $n = \App\Models\Nation::findOrFail($this->birth_nation_id); $this->isBirthItaly = $n->is_italy; } else $this->isBirthItaly = false; } /*public function loadProvinces() { $n = \App\Models\Nation::findOrFail($this->nation_id); $this->isItaly = $n->is_italy; $this->provinces = \App\Models\Province::where('nation_id', $this->nation_id)->orderBy('name')->get(); $this->cities = array(); $this->selectId++; } public function loadCities() { $this->cities = \App\Models\City::where('province_id', $this->province_id)->orderBy('name')->orderBy('name')->get(); $this->selectId++; } public function loadBirthProvinces() { $n = \App\Models\Nation::findOrFail($this->birth_nation_id); $this->isBirthItaly = $n->is_italy; $this->birthProvinces = \App\Models\Province::where('nation_id', $this->birth_nation_id)->orderBy('name')->get(); $this->birthCities = array(); $this->selectId++; } public function loadBirthCities() { $this->birthCities = \App\Models\City::where('province_id', $this->birth_province_id)->get(); $this->selectId++; } */ public function search() { if ($this->searchTxt != '') { $this->search = $this->searchTxt; $this->showReset = true; } } public function resetSearch() { $this->showReset = false; $this->searchTxt = ''; $this->search = $this->searchTxt; } public function advancedSearch() { $this->advanced = true; } public function advancedSearchCancel() { $this->filterCard = []; $this->filterCategory = []; $this->filterCertNormal = 0; $this->filterCertAgonistic = 0; $this->filterCertScaduto = 0; $this->filterCertInScadenza = 0; $this->advanced = false; } public function render() { $this->course_names = []; $allC = \App\Models\Course::orderBy('name')->get(); foreach ($allC as $c) { $cN = $c->name . " (" . $c->year . ")"; if (!in_array($cN, $this->course_names)) $this->course_names[] = $cN; } //$this->course_names = \App\Models\Course::orderBy('name')->groupBy('name')->pluck('name'); $datas = []; // $this->emit('destroy-data-table'); if (false) { if (!$this->advanced) { /*if ($this->search != '') $datas = \App\Models\Member::select('members.*') // , \DB::raw('SUM(records.id) As total')) ->where('first_name', 'LIKE', '%' . $this->search . '%') ->orWhere('last_name', 'LIKE', '%' . $this->search . '%') ->orWhere('email', 'LIKE', '%' . $this->search . '%'); $this->records = \App\Models\Member::where('first_name', 'LIKE', '%' . $this->search . '%')->orWhere('last_name', 'LIKE', '%' . $this->search . '%')->orWhere('email', 'LIKE', '%' . $this->search . '%')->get(); else*/ $this->records = \App\Models\Member::select('id', 'first_name', 'last_name', 'phone')->get(); //$datas = \App\Models\Member::select('members.*'); } else { //$this->records = \App\Models\Member::where('id', '>', 0); $datas = \App\Models\Member::select('members.*')->where('id', '>', 0); if (sizeof($this->filterCard) > 0) { $card_ids = \App\Models\MemberCard::whereIn('card_id', $this->filterCard)->pluck('member_id'); //$this->records->whereIn('id', $card_ids); $datas = $datas->whereIn('id', $card_ids); } if (sizeof($this->filterCategory) > 0) { $cats_ids = \App\Models\MemberCategory::whereIn('category_id', $this->filterCategory)->pluck('member_id'); //$this->records->whereIn('id', $cats_ids); $datas = $datas->whereIn('id', $cats_ids); } $certs = []; if ($this->filterCertNormal > 0) { $normal = \App\Models\MemberCertificate::where('type', 'N')->pluck('member_id'); //$this->records->whereIn('id', $normal); $datas = $datas->whereIn('id', $normal);; } if ($this->filterCertAgonistic > 0) { $agonistic = \App\Models\MemberCertificate::where('type', 'A')->pluck('member_id'); //$this->records->whereIn('id', $agonistic); $datas = $datas->whereIn('id', $agonistic); } if ($this->filterCertScaduto > 0) { $scaduto = \App\Models\MemberCertificate::where('expire_date', '<', date("Y-m-d"))->pluck('member_id'); //$this->records->whereIn('id', $scaduto); $datas = $datas->whereIn('id', $scaduto); } if ($this->filterCertInScadenza > 0) { $scaduto = \App\Models\MemberCertificate::whereBetween('expire_date', [date("Y-m-d"), date("Y-m-d", strtotime("+1 month"))])->pluck('member_id'); //$this->records->whereIn('id', $scaduto); $datas = $datas->whereIn('id', $scaduto); } if (sizeof($certs) > 0) { $datas = $datas->whereIn('id', $certs); //$this->records->whereIn('id', $certs); } $this->records = $datas->get(); } foreach ($this->records as $r) { $r->age = $r->getAge(); $active = $r->isActive(); $r->status = $active["status"]; $r->date = $active["date"]; $r->certificate = $r->hasCertificate()["date"]; $r->state = $r->getStatus()["status"]; } /* if ($this->sortAsc) $this->records = $this->records->sortBy($this->sortField); else $this->records = $this->records->sortByDesc($this->sortField); */ //$datas = $datas->get(); // ->orderBy($this->sortField, $this->sortAsc ? 'ASC' : 'DESC')->paginate(10); //$this->records = $this->records->get(); $this->emit('load-data-table'); } $this->loadMemberCards(); $this->loadMemberCourses(); $this->loadMemberCategories(); $this->loadMemberCertificates(); return view('livewire.member', ['datas' => $datas]); } public function updatedCourseCourseId() { if ($this->course_course_id > 0) { $c = \App\Models\Course::findOrFail($this->course_course_id); $this->course_price = formatPrice($c->price); $this->course_subscription_price = formatPrice($c->subscription_price); // Controllo se sono già iscritto la corso $this->course_exist = \App\Models\MemberCourse::where('course_id', $this->course_course_id)->where('member_id', $this->dataId)->count() > 0; } else { $this->course_price = 0; $this->course_subscription_price = 0; $this->course_exist = false; } } public function loadMemberCards() { $this->member_cards = \App\Models\MemberCard::where('member_id', $this->dataId)->get(); // return view('livewire.member'); } public function loadMemberCourses() { $this->member_courses = \App\Models\MemberCourse::where('member_id', $this->dataId)->get(); // return view('livewire.member'); } public function loadMemberCategories() { $this->member_categories = \App\Models\MemberCategory::where('member_id', $this->dataId)->get(); // return view('livewire.member'); } public function loadMemberCertificates() { $this->member_certificates = \App\Models\MemberCertificate::where('member_id', $this->dataId)->orderBy('expire_date', 'DESC')->get(); // return view('livewire.member'); } public function showDetailF($id) { if (!isset($_GET["from"]) && $this->from == '') $this->from = 'members'; $this->currentMember = \App\Models\Member::findOrFail($id); $this->currentStatus = $this->currentMember->getStatus(); $this->showDetail = true; } public function add() { //$this->from = 'members'; $this->emit('load-select'); $this->emit('hide-search'); $this->showDetail = false; $this->resetFields(); $this->add = true; $this->update = false; $this->emit('setEdit', true); $this->emit('setEditCorso', false); } public function store($close) { $this->isSaving = true; $this->emit('load-select'); $this->emit('goToTop'); $rules = [ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required', 'phone' => 'required', 'birth_nation_id' => 'required', //'birth_place' => 'required', 'address' => 'required', 'zip_code' => 'required', 'nation_id' => 'required', 'fiscal_code' => 'required', 'birth_date' => 'before_or_equal:today', 'gender' => 'required' ]; if ($this->isBirthItaly) { $rules['birth_province_id'] = 'required'; $rules['birth_city_id'] = 'required'; } else { $rules['birth_place'] = 'required'; } if ($this->isItaly) { $rules['province_id'] = 'required'; $rules['city_id'] = 'required'; } $zzz = []; if ($this->birth_nation_id == null) $zzz[] = 'birth_nation_id=' . $this->birth_nation_id; if ($this->isBirthItaly) { if ($this->birth_province_id == null) $zzz[] = 'birth_province_id=' . $this->birth_province_id; if ($this->birth_city_id == null) $zzz[] = 'birth_city_id=' . $this->birth_city_id; } if ($this->nation_id == null) $zzz[] = 'nation_id=' . $this->nation_id; if ($this->isItaly) { if ($this->province_id == null) $zzz[] = 'province_id=' . $this->province_id; if ($this->city_id == null) $zzz[] = 'city_id=' . $this->city_id; } $this->emit('setErrorMsg', $zzz); $existingMember = \App\Models\Member::where('fiscal_code', $this->fiscal_code)->first(); if ($existingMember) { $this->addError('fiscal_code', 'Codice fiscale già presente.'); return; } $this->validate($rules); //$this->emit('setErrors'); try { $name = ''; if ($this->image) { $name = md5($this->image . microtime()) . '.' . $this->image->extension(); $this->image->storeAs('public', $name); } $docs = implode("|", $this->document_files); $father_docs = implode("|", $this->father_document_files); $mother_docs = implode("|", $this->mother_document_files); $member = \App\Models\Member::create([ 'first_name' => strtoupper($this->first_name), 'last_name' => strtoupper($this->last_name), 'status' => $this->status, 'birth_city_id' => $this->birth_city_id > 0 ? $this->birth_city_id : null, 'birth_province_id' => $this->birth_province_id > 0 ? $this->birth_province_id : null, 'birth_nation_id' => $this->birth_nation_id > 0 ? $this->birth_nation_id : null, 'birth_date' => $this->birth_date, 'birth_place' => $this->birth_place, 'father_name' => $this->father_name, 'mother_name' => $this->mother_name, 'father_email' => strtolower($this->father_email), 'mother_email' => strtolower($this->mother_email), 'father_phone' => $this->father_phone, 'mother_phone' => $this->mother_phone, 'father_fiscal_code' => $this->father_fiscal_code, 'mother_fiscal_code' => $this->mother_fiscal_code, 'father_doc_number' => $this->father_doc_number, 'father_doc_type' => $this->father_doc_type, 'mother_doc_number' => $this->mother_doc_number, 'mother_doc_type' => $this->mother_doc_type, 'document_type' => $this->document_type, 'document_number' => $this->document_number, 'document_from' => $this->document_from, 'document_expire_date' => $this->document_expire_date, 'document_files' => $docs, 'mother_document_files' => $mother_docs, 'father_document_files' => $father_docs, 'gender' => $this->gender, 'no_send_mail' => $this->no_send_mail, 'exclude_from_records' => $this->exclude_from_records, 'fiscal_code' => $this->fiscal_code, 'address' => $this->address, 'zip_code' => $this->zip_code, 'nation_id' => $this->nation_id > 0 ? $this->nation_id : null, 'province_id' => $this->province_id > 0 ? $this->province_id : null, 'city_id' => $this->city_id > 0 ? $this->city_id : null, 'phone' => $this->phone, 'phone2' => $this->phone2, 'phone3' => $this->phone3, 'email' => strtolower($this->email), 'image' => $name, 'to_complete' => false, 'enabled' => $this->enabled ]); session()->flash('success, Tesserato creato'); updateMemberData($member->id); $this->resetFields(); if ($close) { $this->add = false; } else { $this->edit($member->id); } $this->emit('setEdit', false); } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function duplicate($id) { $member = \App\Models\Member::findOrFail($id); $newMember = $member->replicate(); $newMember->save(); $this->edit($newMember->id); } public function edit($id) { if (!isset($_GET["from"]) && $this->from == '') $this->from = 'members'; $this->showDetail = false; $this->emit('setEdit', true); $this->emit('setEditCorso', false); $this->emit('hide-search'); try { $member = \App\Models\Member::findOrFail($id); if (!$member) { session()->flash('error', 'Tesserato non trovato'); } else { $this->first_name = $member->first_name; $this->last_name = $member->last_name; $this->status = $member->status; $this->birth_city_id = $member->birth_city_id; $this->birth_province_id = $member->birth_province_id; $this->birth_nation_id = $member->birth_nation_id; $this->birth_date = $member->birth_date; $this->birth_place = $member->birth_place; $this->father_name = $member->father_name; $this->mother_name = $member->mother_name; $this->father_email = strtolower($member->father_email); $this->mother_email = strtolower($member->mother_email); $this->father_phone = $member->father_phone; $this->mother_phone = $member->mother_phone; $this->father_fiscal_code = $member->father_fiscal_code; $this->mother_fiscal_code = $member->mother_fiscal_code; $this->father_doc_number = $member->father_doc_number; $this->mother_doc_number = $member->mother_doc_number; $this->father_doc_type = $member->father_doc_type; $this->mother_doc_type = $member->mother_doc_type; $this->father_document_files = explode("|", $member->father_document_files); $this->mother_document_files = explode("|", $member->mother_document_files); $this->document_type = $member->document_type; $this->document_number = $member->document_number; $this->document_from = $member->document_from; $this->document_expire_date = $member->document_expire_date; $this->document_files = explode("|", $member->document_files); $this->gender = $member->gender; $this->no_send_mail = $member->no_send_mail; $this->exclude_from_records = $member->exclude_from_records; $this->fiscal_code = $member->fiscal_code; $this->address = $member->address; $this->zip_code = $member->zip_code; $this->nation_id = $member->nation_id; $this->province_id = $member->province_id; $this->city_id = $member->city_id; $this->phone = $member->phone; $this->phone2 = $member->phone2; $this->phone3 = $member->phone3; $this->email = strtolower($member->email); $this->image_old = $member->image; $this->enabled = $member->enabled; $this->dataId = $member->id; $this->active = $member->getStatus(); $this->money = $member->getMoney(); $this->checkIsBirthItaly(); $date1 = new DateTime($this->birth_date); $date2 = new DateTime("now"); $interval = $date1->diff($date2); $this->age = $interval->y . " anni"; $this->under18 = $interval->y < 18; //$this->provinces = \App\Models\Province::where('nation_id', $this->nation_id)->get(); //$this->cities = \App\Models\City::where('province_id', $this->province_id)->get(); //$this->birthProvinces = \App\Models\Province::where('nation_id', $this->birth_nation_id)->get(); //$this->birthCities = \App\Models\City::where('province_id', $this->birth_province_id)->get(); $this->update = true; $this->add = false; $this->emit('setIds', $this->nation_id, $this->birth_nation_id); $this->emit('load-select'); $this->emit('load-provinces', $this->nation_id, 'provinceClass'); $this->emit('load-provinces', $this->birth_nation_id, 'provinceBirthClass'); $this->emit('load-cities', $this->province_id, 'cityClass'); $this->emit('load-cities', $this->birth_province_id, 'cityBirthClass'); } } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function updateAAA($close) { $this->emit('goToTop'); $this->isSaving = true; $this->emit('load-select'); $rules = [ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required', 'phone' => 'required', 'birth_nation_id' => 'required', //'birth_place' => 'required', 'address' => 'required', 'zip_code' => 'required', 'nation_id' => 'required', 'fiscal_code' => 'required', 'birth_date' => 'before_or_equal:today' ]; if ($this->isBirthItaly) { $rules['birth_province_id'] = 'required'; $rules['birth_city_id'] = 'required'; } else { $rules['birth_place'] = 'required'; } if ($this->isItaly) { $rules['province_id'] = 'required'; $rules['city_id'] = 'required'; } $zzz = []; if ($this->birth_nation_id == null) $zzz[] = 'birth_nation_id=' . $this->birth_nation_id; if ($this->isBirthItaly) { if ($this->birth_province_id == null) $zzz[] = 'birth_province_id=' . $this->birth_province_id; if ($this->birth_city_id == null) $zzz[] = 'birth_city_id=' . $this->birth_city_id; } if ($this->nation_id == null) $zzz[] = 'nation_id=' . $this->nation_id; if ($this->isItaly) { if ($this->province_id == null) $zzz[] = 'province_id=' . $this->province_id; if ($this->city_id == null) $zzz[] = 'city_id=' . $this->city_id; } $this->emit('setErrorMsg', $zzz); $this->validate($rules); try { $name = ''; if ($this->image) { $name = md5($this->image . microtime()) . '.' . $this->image->extension(); $this->image->storeAs('public', $name); } $docs = implode("|", $this->document_files); $father_docs = implode("|", $this->father_document_files); $mother_docs = implode("|", $this->mother_document_files); \App\Models\Member::whereId($this->dataId)->update([ 'first_name' => strtoupper($this->first_name), 'last_name' => strtoupper($this->last_name), 'status' => $this->status, 'birth_city_id' => $this->birth_city_id > 0 ? $this->birth_city_id : null, 'birth_province_id' => $this->birth_province_id > 0 ? $this->birth_province_id : null, 'birth_nation_id' => $this->birth_nation_id > 0 ? $this->birth_nation_id : null, 'birth_date' => $this->birth_date, 'birth_place' => $this->birth_place, 'father_name' => $this->father_name, 'mother_name' => $this->mother_name, 'father_email' => strtolower($this->father_email), 'mother_email' => strtolower($this->mother_email), 'father_phone' => $this->father_phone, 'mother_phone' => $this->mother_phone, 'father_fiscal_code' => $this->father_fiscal_code, 'mother_fiscal_code' => $this->mother_fiscal_code, 'father_doc_number' => $this->father_doc_number, 'father_doc_type' => $this->father_doc_type, 'mother_doc_number' => $this->mother_doc_number, 'mother_doc_type' => $this->mother_doc_type, 'father_document_files' => $father_docs, 'mother_document_files' => $mother_docs, 'document_type' => $this->document_type, 'document_number' => $this->document_number, 'document_from' => $this->document_from, 'document_expire_date' => $this->document_expire_date, 'document_files' => $docs, 'gender' => $this->gender, 'no_send_mail' => $this->no_send_mail, 'exclude_from_records' => $this->exclude_from_records, 'fiscal_code' => $this->fiscal_code, 'address' => $this->address, 'zip_code' => $this->zip_code, 'nation_id' => $this->nation_id > 0 ? $this->nation_id : null, 'province_id' => $this->province_id > 0 ? $this->province_id : null, 'city_id' => $this->city_id > 0 ? $this->city_id : null, 'image' => $name != '' ? $name : $this->image_old, 'phone' => $this->phone, 'phone2' => $this->phone2, 'phone3' => $this->phone3, 'email' => strtolower($this->email), 'to_complete' => false, 'enabled' => $this->enabled ]); updateMemberData($this->dataId); session()->flash('success', 'Tesserato aggiornato'); if ($close) { $this->resetFields(); $this->update = false; } $this->emit('setEdit', false); } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function cancel() { $this->add = false; $this->update = false; $this->showDetail = false; $this->resetFields(); $this->emit('setEdit', false); //$this->emit('setEditCorso', false); $this->emit('reload'); } public function delete($id) { try { \App\Models\Member::find($id)->delete(); session()->flash('success', "Tesserato eliminato"); $this->emit('reload'); } catch (\Exception $e) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function checkUncheckAll() { if (!$this->checkedAll) { $this->multipleIds = array(); } else { foreach ($this->records as $r) { $this->multipleIds[] = $r->id; } } } public function multipleDelete() { try { foreach ($this->multipleIds as $id) { \App\Models\Member::find($id)->delete(); } } catch (\Exception $e) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } $this->multipleAction = ''; } // Card public function addCard() { $this->resetCardFields(); $this->addCard = true; $this->updateCard = false; } public function storeCard() { $this->validate(['card_card_id' => 'required']); try { // in base alla card selezionata calcolo la scadenza $expire_date = null; if ($this->card_date != '') { $y = date("Y", strtotime($this->card_date)); $card = \App\Models\Card::findOrFail($this->card_card_id); if ($card->next_day_expire > 0 && $card->next_month_expire > 0) { $m = strlen($card->next_month_expire) == 1 ? ('0' . $card->next_month_expire) : $card->next_month_expire; if (date("md", strtotime($this->card_date)) > ($m . $card->next_day_expire)) $y += 1; $next_exp = date($y . "-" . $m . "-" . $card->next_day_expire); if ($next_exp > $this->card_date) { $expire_date = $next_exp; } else $expire_date = date($y . "-" . $card->next_month_expire . "-" . $card->next_day_expire, strtotime(' + 1 years')); } else { if ($card->one_year_expire) { $expire_date = date("Y-m-d", strtotime($this->card_date . ' + 1 years')); } } } \App\Models\MemberCard::create([ 'member_id' => $this->dataId, 'card_id' => $this->card_card_id, 'number' => $this->card_number, 'date' => $this->card_date, 'accept_date' => $this->card_accept_date != '' ? $this->card_accept_date : $this->card_date, 'expire_date' => $expire_date, 'status' => $this->card_status, 'discipline1_id' => $this->card_discipline1_id, 'discipline2_id' => $this->card_discipline2_id, 'discipline3_id' => $this->card_discipline3_id, ]); updateMemberData($this->dataId); session()->flash('success, Tesserato creato'); $this->resetCardFields(); $this->addCard = false; } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function editCard($id) { try { $memberCard = \App\Models\MemberCard::findOrFail($id); if (!$memberCard) { session()->flash('error', 'Tesserato non trovato'); } else { $this->card_card_id = $memberCard->card_id; $this->card_number = $memberCard->number; $this->card_date = $memberCard->date; $this->card_accept_date = $memberCard->accept_date; $this->card_status = $memberCard->status; $this->card_discipline1_id = $memberCard->discipline1_id; $this->card_discipline2_id = $memberCard->discipline2_id; $this->card_discipline3_id = $memberCard->discipline3_id; $this->cardDataId = $memberCard->id; $this->updateCard = true; $this->addCard = false; } } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function updateCard() { $this->validate(['card_card_id' => 'required']); try { \Illuminate\Support\Facades\Log::info('Starting card update', [ 'member_id' => $this->dataId, 'card_id' => $this->card_card_id, 'card_number' => $this->card_number ]); $expire_date = null; if ($this->card_date != '') { $card = \App\Models\Card::findOrFail($this->card_card_id); \Illuminate\Support\Facades\Log::info('Card details', [ 'card_id' => $card->id, 'next_day_expire' => $card->next_day_expire, 'next_month_expire' => $card->next_month_expire, 'one_year_expire' => $card->one_year_expire ]); if ($card->next_day_expire > 0 && $card->next_month_expire > 0) { $y = date("Y", strtotime($this->card_date)); $m = strlen($card->next_month_expire) == 1 ? ('0' . $card->next_month_expire) : $card->next_month_expire; $d = strlen($card->next_day_expire) == 1 ? ('0' . $card->next_day_expire) : $card->next_day_expire; $next_exp = $y . "-" . $m . "-" . $d; // Format dates for comparison $input_date_obj = new \DateTime($this->card_date); $next_exp_obj = new \DateTime($next_exp); if ($next_exp_obj > $input_date_obj) { $expire_date = $next_exp; } else { // Add 1 year to the expiration date if the input date is after the expiration date $next_exp_obj->modify('+1 year'); $expire_date = $next_exp_obj->format('Y-m-d'); } \Illuminate\Support\Facades\Log::info('Calculated expiration date (next_day_expire/next_month_expire rule)', [ 'input_date' => $this->card_date, 'next_exp' => $next_exp, 'expire_date' => $expire_date, 'comparison' => ($next_exp_obj > $input_date_obj) ? 'next_exp is after input_date' : 'next_exp is before or equal to input_date' ]); } else { if ($card->one_year_expire) { $expire_date = date("Y-m-d", strtotime($this->card_date . ' + 1 years')); \Illuminate\Support\Facades\Log::info('Calculated expiration date (one_year_expire rule)', [ 'input_date' => $this->card_date, 'expire_date' => $expire_date ]); } } } \Illuminate\Support\Facades\Log::info('Updating member card', [ 'card_id' => $this->cardDataId, 'member_id' => $this->dataId, 'card_number' => $this->card_number, 'date' => $this->card_date, 'expire_date' => $expire_date, 'status' => $this->card_status ]); \App\Models\MemberCard::whereId($this->cardDataId)->update([ 'member_id' => $this->dataId, 'card_id' => $this->card_card_id, 'number' => $this->card_number, 'date' => $this->card_date, 'accept_date' => $this->card_accept_date != '' ? $this->card_accept_date : $this->card_date, 'expire_date' => $expire_date, 'status' => $this->card_status, 'discipline1_id' => $this->card_discipline1_id, 'discipline2_id' => $this->card_discipline2_id, 'discipline3_id' => $this->card_discipline3_id, ]); updateMemberData($this->dataId); \Illuminate\Support\Facades\Log::info('Card updated successfully', [ 'card_id' => $this->cardDataId, 'member_id' => $this->dataId ]); session()->flash('success', 'Tesserato aggiornato'); $this->resetCardFields(); $this->updateCard = false; } catch (\Exception $ex) { \Illuminate\Support\Facades\Log::error('Error updating card', [ 'card_id' => $this->cardDataId, 'member_id' => $this->dataId, 'error_message' => $ex->getMessage(), 'error_trace' => $ex->getTraceAsString() ]); session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function cancelCard() { $this->addCard = false; $this->updateCard = false; $this->resetCardFields(); } public function deleteCard($id) { try { \App\Models\MemberCard::find($id)->delete(); session()->flash('success', "Tesserato eliminato"); } catch (\Exception $e) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } // Courses public function addCourse() { $this->resetCourseFields(); /*if ($this->under18) { $this->course_months[] = array("m" => 9, "status" => ""); $this->course_months[] = array("m" => 10, "status" => ""); $this->course_months[] = array("m" => 11, "status" => ""); $this->course_months[] = array("m" => 12, "status" => ""); $this->course_months[] = array("m" => 1, "status" => ""); $this->course_months[] = array("m" => 2, "status" => ""); $this->course_months[] = array("m" => 3, "status" => ""); $this->course_months[] = array("m" => 4, "status" => ""); $this->course_months[] = array("m" => 5, "status" => ""); $this->course_months[] = array("m" => 6, "status" => ""); }*/ $this->addCourse = true; $this->updateCourse = false; $this->emit('setEditCorso', true); } public function storeCourse() { $this->validate(['course_course_id' => 'required']); try { \App\Models\MemberCourse::create([ 'member_id' => $this->dataId, 'course_id' => $this->course_course_id, 'date_from' => $this->course_date_from, 'date_to' => $this->course_date_to, 'course_subscription_id' => $this->course_course_subscription_id, 'status' => $this->course_status, 'subscribed' => false, // default non iscritto 'price' => currencyToDouble($this->course_price), 'subscription_price' => currencyToDouble($this->course_subscription_price), 'notes' => $this->course_note, 'months' => json_encode($this->course_months), 'when' => json_encode($this->course_when) ]); // Se il corso ha associato una categoria iscrivo anche al gruppo $c = \App\Models\Course::findOrFail($this->course_course_id); if ($c) { if ($c->category_id > 0) { \App\Models\MemberCategory::create([ 'member_id' => $this->dataId, 'category_id' => $c->category_id, 'date' => \Carbon\Carbon::now() ]); } } session()->flash('success, Corso creato'); $this->resetCourseFields(); $this->addCourse = false; $this->emit('setEditCorso', false); } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function editCourse($id) { try { $memberCourse = \App\Models\MemberCourse::findOrFail($id); if (!$memberCourse) { session()->flash('error', 'Corso non trovato'); } else { $this->course_course_id = $memberCourse->course_id; // Carico i dati relativi alla struttura ad albero $c = \App\Models\Course::findOrFail($this->course_course_id); $this->course_name = $c->name . " (" . $c->year . ")"; $this->course_level_id = $c->course_level_id; $this->course_type_id = $c->course_type_id; $this->course_frequency_id = $c->course_frequency_id; $all = \App\Models\Course::where('name', 'like', '%' . $c->name . "%")->where('enabled', true)->get(); foreach ($all as $a) { $levels_ids[] = $a->course_level_id; } $this->course_levels = \App\Models\CourseLevel::select('*')->where('enabled', true)->whereIn('id', $levels_ids)->get(); $all = \App\Models\Course::where('name', 'like', '%' . $c->name . "%")->where('enabled', true)->where('course_level_id', $this->course_level_id)->get(); foreach ($all as $a) { $types_ids[] = $a->course_type_id; } $this->course_types = \App\Models\CourseType::select('*')->where('enabled', true)->whereIn('id', $types_ids)->get(); $frequencies_ids = []; $all = \App\Models\Course::where('name', 'like', '%' . $c->name . "%")->where('enabled', true)->where('course_level_id', $this->course_level_id)->where('course_type_id', $this->course_type_id)->get(); foreach ($all as $a) { $frequencies_ids[] = $a->course_frequency_id; } $this->course_frequencies = \App\Models\CourseFrequency::select('*')->where('enabled', true)->whereIn('id', $frequencies_ids)->get(); $this->course_when = array(); $this->course_date_from = $memberCourse->date_from; $this->course_date_to = $memberCourse->date_to; foreach (json_decode($memberCourse->when) as $z) { $this->course_when[] = array("day" => $z->day, "from" => $z->from, "to" => $z->to); } //$this->course_when = json_decode($memberCourse->when); $this->course_course_subscription_id = $memberCourse->course_subscription_id; $this->course_status = $memberCourse->status; $this->course_subscribed = $memberCourse->subscribed == 1 ? true : false; $this->course_price = formatPrice($memberCourse->price); $this->course_subscription_price = formatPrice($memberCourse->subscription_price); $this->course_note = $memberCourse->notes; foreach (json_decode($memberCourse->months) as $z) { $this->course_months[] = array("m" => $z->m, "status" => $z->status); } $this->courseDataId = $memberCourse->id; $this->updateCourse = true; $this->addCourse = false; $this->emit('setEditCorso', true); } } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function updateCourse() { //$this->validate(); $this->validate(['course_course_id' => 'required']); try { \App\Models\MemberCourse::whereId($this->courseDataId)->update([ 'member_id' => $this->dataId, 'course_id' => $this->course_course_id, 'date_from' => $this->course_date_from, 'date_to' => $this->course_date_to, 'course_subscription_id' => $this->course_course_subscription_id, 'status' => $this->course_status, 'price' => currencyToDouble($this->course_price), 'subscription_price' => currencyToDouble($this->course_subscription_price), 'notes' => $this->course_note, 'months' => json_encode($this->course_months), 'when' => json_encode($this->course_when) ]); session()->flash('success', 'Corso aggiornato'); $this->resetCourseFields(); $this->updateCourse = false; $this->emit('setEditCorso', false); } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function cancelCourse() { $this->addCourse = false; $this->updateCourse = false; $this->emit('setEditCorso', false); $this->resetCourseFields(); } public function deleteCourse($id) { try { \App\Models\MemberCourse::find($id)->delete(); session()->flash('success', "Corso eliminato"); } catch (\Exception $e) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function addRow() { $this->course_when[] = array('day' => array(), 'from' => '', 'to' => ''); } public function delRow($idx) { unset($this->course_when[$idx]); } // Certificates public function addCertificate() { $this->resetCertificateFields(); $this->addCertificate = true; $this->updateCertificate = false; } public function storeCertificate() { $this->validate(['certificate_expire_date' => 'required']); // $this->validate(); try { $name = ''; try { if ($this->certificate_filename) { $name = md5($this->certificate_filename . microtime()) . '.' . $this->certificate_filename->extension(); $this->certificate_filename->storeAs('public', $name); } } catch (\Exception $ex) { //session()->flash('error','Errore (' . $ex->getMessage() . ')'); } if ($this->dataId > -1) { \App\Models\MemberCertificate::create([ 'member_id' => $this->dataId, 'type' => $this->certificate_type, 'filename' => $name, 'expire_date' => $this->certificate_expire_date, 'status' => $this->certificate_status ]); updateMemberData($this->dataId); } /*else { $this->certificateTmp = new \App\Models\MemberCertificate(); $this->certificateTmp->type = $this->certificate_type; $this->certificateTmp->filename = $name; $this->certificateTmp->expire_date = $this->certificate_expire_date; $this->certificateTmp->status = $this->certificate_status; $this->certificateTmp->status = $this->certificate_status; // s $this->member_certificates[] = $certificateTmp; }*/ session()->flash('success, Tesserato creato'); $this->resetCertificateFields(); $this->addCertificate = false; } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function editCertificate($id) { try { $memberCertificate = \App\Models\MemberCertificate::findOrFail($id); if (!$memberCertificate) { session()->flash('error', 'Tesserato non trovato'); } else { $this->certificate_type = $memberCertificate->type; $this->certificate_filename_old = $memberCertificate->filename; $this->certificate_expire_date = $memberCertificate->expire_date; $this->certificate_status = $memberCertificate->status; $this->cardCertificateId = $memberCertificate->id; $this->updateCertificate = true; $this->addCertificate = false; } } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function updateCertificate() { $this->validate(['certificate_expire_date' => 'required']); try { $name = ''; try { if ($this->certificate_filename) { $name = md5($this->certificate_filename . microtime()) . '.' . $this->certificate_filename->extension(); $this->certificate_filename->storeAs('public', $name); } } catch (\Exception $ex) { //session()->flash('error','Errore (' . $ex->getMessage() . ')'); } \App\Models\MemberCertificate::whereId($this->cardCertificateId)->update([ 'member_id' => $this->dataId, 'type' => $this->certificate_type, 'filename' => $name != '' ? $name : $this->certificate_filename_old, 'expire_date' => $this->certificate_expire_date, 'status' => $this->certificate_status ]); updateMemberData($this->dataId); session()->flash('success', 'Tesserato aggiornato'); $this->resetCertificateFields(); $this->updateCertificate = false; } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function cancelCertificate() { $this->addCertificate = false; $this->updateCertificate = false; $this->resetCertificateFields(); } public function deleteCertificate($id) { try { \App\Models\MemberCertificate::find($id)->delete(); session()->flash('success', "Tesserato eliminato"); } catch (\Exception $e) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } // Gruppi di appartenenza public function storeCategory() { $this->validate(['category_category_id' => 'required']); try { \App\Models\MemberCategory::create([ 'member_id' => $this->dataId, 'category_id' => $this->category_category_id, 'date' => \Carbon\Carbon::now() ]); session()->flash('success, Associazione creato'); $this->resetCategoryFields(); $this->addCard = false; } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function hideMsg() { $this->groupMsg = ''; } public function storeCategoryWithID($id) { $this->groupMsg = ''; try { if (\App\Models\MemberCategory::where('member_id', $this->dataId)->where('category_id', $id)->first()) { $this->groupMsg = '
Attenzione, questo corso è stato già inserito'; } else { \App\Models\MemberCategory::create([ 'member_id' => $this->dataId, 'category_id' => $id, 'date' => \Carbon\Carbon::now() ]); session()->flash('success, Associazione creato'); $this->resetCategoryFields(); $this->addCard = false; } } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function deleteCategory($id) { try { \App\Models\MemberCategory::find($id)->delete(); session()->flash('success', "Associazione eliminata"); } catch (\Exception $e) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function setCourse($id) { $this->course_course_id = $id; } public function getNation($nation) { if ($nation > 0) { $ret = \App\Models\Nation::findOrFail($nation); return $ret->name; } return ""; } public function getProvince($province) { if ($province > 0) { $ret = \App\Models\Province::findOrFail($province); return $ret->name; } return ""; } public function getCity($city) { if ($city > 0) { $ret = \App\Models\City::findOrFail($city); return $ret->name; } return ""; } public function getFiscalCode() { $this->error_fc = false; $cf = new codicefiscale(); $cf->setDateSeparator('-'); if ($this->first_name != '' && $this->last_name != '' && $this->birth_date != '' && $this->gender != '' && $this->birth_city_id > 0) { $code = ''; if ($this->birth_city_id > 0) { $code = \App\Models\City::findOrFail($this->birth_city_id)->code; } $codice = $cf->calcola($this->first_name, $this->last_name, $this->birth_date, $this->gender, $code); $this->fiscal_code = $codice; } else $this->error_fc = true; } public function setMonth($m) { $exist = -1; foreach ($this->course_months as $idx => $x) { if ($x["m"] == $m) { $exist = $idx; break; } } if ($exist > -1) { array_splice($this->course_months, $exist, 1); } else { $this->course_months[] = array("m" => $m, "status" => ""); } /* if (in_array($m, $this->course_months)) { $i = array_search($m, $this->course_months); array_splice($this->course_months, $i, 1); } else { $this->course_months[] = $m; }*/ } public function newPayment($course) { $c = \App\Models\Course::findOrFail($course["course_id"]); $price = $course["price"]; if (sizeof($this->payMonths) == 1) { $month = $this->payMonths[0]; $records = \App\Models\Record::where('member_course_id', $this->selectedCourseMember)->where('deleted', 0)->get(); foreach ($records as $record) { if (in_array($month, json_decode($record->months))) { foreach ($record->rows as $row) { if ($row->causal_id == $c->causal_id && !str_contains(strtolower($row->note), 'iscrizione')) { $tot = sizeof(json_decode($row->when)); foreach(json_decode($row->when) as $m) { $price -= $row->amount / $tot; } } } } } } $this->emit('setEdit', false); $this->emit('setEditCorso', false); return redirect()->to('/in?new=1&memberId=' . $this->dataId . '&causalId=' . $c->causal_id . '&subCausalId=' . $c->sub_causal_id . '&createSubscription=' . $this->createSubscription . (sizeof($this->payMonths) > 0 ? '&months=' . implode("|", $this->payMonths) : "") . '&price=' . $price . '&subscription_price=' . $course["subscription_price"] . "&courseId=" . $course["id"]); } public function block($course) { $xxx = json_decode($course["months"]); foreach ($xxx as $idx => $mm) { if (in_array($mm->m, $this->payMonths)) { $xxx[$idx]->status = 2; } } $c = \App\Models\MemberCourse::findOrFail($course["id"]); $c->months = json_encode($xxx); $c->save(); $this->payMonths = array(); } public function reactivate($course) { $xxx = json_decode($course["months"]); foreach ($xxx as $idx => $mm) { if (in_array($mm->m, $this->suspendedMonths)) { $xxx[$idx]->status = ""; } } $c = \App\Models\MemberCourse::findOrFail($course["id"]); $c->months = json_encode($xxx); $c->save(); $this->suspendedMonths = array(); } public function setPayMonth($m, $months, $selectedCourseMember) { if ($this->selectedCourseMember != $selectedCourseMember) $this->payMonths = array(); $this->selectedCourseMember = $selectedCourseMember; if (in_array($m, $this->payMonths)) { $i = array_search($m, $this->payMonths); array_splice($this->payMonths, $i, 1); } else if (in_array($m, $this->suspendedMonths)) { $i = array_search($m, $this->suspendedMonths); array_splice($this->suspendedMonths, $i, 1); } else { foreach (json_decode($months) as $mm) { if ($mm->m == $m) { if ($mm->status == "") $this->payMonths[] = $m; if ($mm->status == "1") { $mc = \App\Models\MemberCourse::findOrFail($selectedCourseMember); $price = $mc->price; $payed = 0; $extraC = ''; $recordsPayed = \App\Models\Record::where('member_course_id', $selectedCourseMember)->where('deleted', 0)->get(); foreach ($recordsPayed as $record) { if (in_array($m, json_decode($record->months))) { foreach ($record->rows as $row) { if ($row->causal_id == $mc->course->causal_id && !str_contains(strtolower($row->note), 'iscrizione')) { $tot = sizeof(json_decode($row->when)); $payed += $row->amount / $tot; } } if ($payed < $price) $this->payMonths[] = $m; } } } if ($mm->status == "2") $this->suspendedMonths[] = $m; } } } if (sizeof($this->payMonths) > 0 && sizeof($this->suspendedMonths) > 0) { $this->payMonths = array(); $this->suspendedMonths = array(); } } public function setCreateSubscription($subscribed, $selectedCourseMember) { if ($this->selectedCourseMember != $selectedCourseMember) $this->payMonths = array(); $this->selectedCourseMember = $selectedCourseMember; if (!$subscribed) $this->createSubscription = !$this->createSubscription; } public function showHideCourse($id) { if (in_array($id, $this->showCourse)) { $i = array_search($id, $this->showCourse); array_splice($this->showCourse, $i, 1); } else { $this->showCourse[] = $id; } } public function getMonthStatus($m, $months, $selectedCourseMember) { $class = "grey"; foreach (json_decode($months) as $mm) { if ($mm->m == $m) { if ($mm->status == "") { if (in_array($m, $this->payMonths) && $this->selectedCourseMember == $selectedCourseMember) $class = "blue"; else $class = "orange"; } if ($mm->status == "1") { $class = "green"; } if ($mm->status == "2") { if (in_array($m, $this->suspendedMonths) && $this->selectedCourseMember == $selectedCourseMember) $class = "blue"; else $class = "yellow"; } if ($class == 'green') { $mc = \App\Models\MemberCourse::findOrFail($selectedCourseMember); $price = $mc->price; $payed = 0; $extraC = ''; $recordsPayed = \App\Models\Record::where('member_course_id', $selectedCourseMember)->where('deleted', 0)->get(); foreach ($recordsPayed as $record) { if (in_array($m, json_decode($record->months))) { foreach ($record->rows as $row) { if ($row->causal_id == $mc->course->causal_id && !str_contains(strtolower($row->note), 'iscrizione')) { $tot = sizeof(json_decode($row->when)); $payed += $row->amount / $tot; } } } } if ($payed < $price) $class = 'orange half'; //$class .= $extraC; } } } return $class; } public function getSubscriptionStatus($subscribed, $selectedCourseMember) { $class = "grey"; if ($this->createSubscription && $this->selectedCourseMember == $selectedCourseMember) $class = "blue"; else $class = "orange"; if ($subscribed) $class = "green"; return $class; } public function checkMonth($m) { $ret = false; foreach ($this->course_months as $idx => $x) { if ($x["m"] == $m) { $ret = true; break; } } return $ret; } public function setDay($idx, $d) { if (in_array($d, $this->course_when[$idx]["day"])) { $i = array_search($d, $this->course_when[$idx]["day"]); array_splice($this->course_when[$idx]["day"], $i, 1); } else { $this->course_when[$idx]["day"][] = $d; } } public function updateBorsellino($importoBorsellino, $s) { if ($importoBorsellino > 0) { $imp = $importoBorsellino; if ($s == "-") $imp = $imp * -1; $money = new \App\Models\Money(); $money->member_id = $this->currentMember->id; $money->record_id = null; $money->amount = $imp; $money->date = date("Y-m-d"); $money->note = 'Forzato ' . $imp; $money->save(); } $this->emit('saved'); } public function getMonth($m) { $ret = ''; switch ($m) { case 1: $ret = 'Gennaio'; break; case 2: $ret = 'Febbraio'; break; case 3: $ret = 'Marzo'; break; case 4: $ret = 'Aprile'; break; case 5: $ret = 'Maggio'; break; case 6: $ret = 'Giugno'; break; case 7: $ret = 'Luglio'; break; case 8: $ret = 'Agosto'; break; case 9: $ret = 'Settembre'; break; case 10: $ret = 'Ottobre'; break; case 11: $ret = 'Novembre'; break; case 12: $ret = 'Dicembre'; break; default: $ret = ''; break; } return $ret; } } class codicefiscale { /** * Array delle consonanti */ protected $_consonanti = array( 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z' ); /** * Array delle vocali */ protected $_vocali = array( 'A', 'E', 'I', 'O', 'U' ); /** * Array per il calcolo della lettera del mese * Al numero del mese corrisponde una lettera */ protected $_mesi = array( 1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E', 6 => 'H', 7 => 'L', 8 => 'M', 9 => 'P', 10 => 'R', 11 => 'S', 12 => 'T' ); protected $_pari = array( '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 0, 'B' => 1, 'C' => 2, 'D' => 3, 'E' => 4, 'F' => 5, 'G' => 6, 'H' => 7, 'I' => 8, 'J' => 9, 'K' => 10, 'L' => 11, 'M' => 12, 'N' => 13, 'O' => 14, 'P' => 15, 'Q' => 16, 'R' => 17, 'S' => 18, 'T' => 19, 'U' => 20, 'V' => 21, 'W' => 22, 'X' => 23, 'Y' => 24, 'Z' => 25 ); protected $_dispari = array( '0' => 1, '1' => 0, '2' => 5, '3' => 7, '4' => 9, '5' => 13, '6' => 15, '7' => 17, '8' => 19, '9' => 21, 'A' => 1, 'B' => 0, 'C' => 5, 'D' => 7, 'E' => 9, 'F' => 13, 'G' => 15, 'H' => 17, 'I' => 19, 'J' => 21, 'K' => 2, 'L' => 4, 'M' => 18, 'N' => 20, 'O' => 11, 'P' => 3, 'Q' => 6, 'R' => 8, 'S' => 12, 'T' => 14, 'U' => 16, 'V' => 10, 'W' => 22, 'X' => 25, 'Y' => 24, 'Z' => 23 ); protected $_controllo = array( '0' => 'A', '1' => 'B', '2' => 'C', '3' => 'D', '4' => 'E', '5' => 'F', '6' => 'G', '7' => 'H', '8' => 'I', '9' => 'J', '10' => 'K', '11' => 'L', '12' => 'M', '13' => 'N', '14' => 'O', '15' => 'P', '16' => 'Q', '17' => 'R', '18' => 'S', '19' => 'T', '20' => 'U', '21' => 'V', '22' => 'W', '23' => 'X', '24' => 'Y', '25' => 'Z' ); /** * Stringa di errore */ protected $_error = null; /** * Separatore per la data di nascita */ protected $_dateSeparator = '/'; /** * Percorso del file del database SQLite * dei codici catastali */ protected $_dbCatastali = null; /** * Trasforma la stringa passata in un array di lettere * e lo incrocia con un ulteriore array */ protected function _getLettere($string, array $haystack) { $letters = array(); foreach (str_split($string) as $needle) { if (in_array($needle, $haystack)) { $letters[] = $needle; } } return $letters; } /** * Ritorna un array con le vocali di una data stringa */ protected function _getVocali($string) { return $this->_getLettere($string, $this->_vocali); } /** * Ritorna un array con le consonanti di una data stringa */ protected function _getConsonanti($string) { return $this->_getLettere($string, $this->_consonanti); } /** * Pulisce la stringa filtrando tutti i caratteri che * non sono lettere. Lo switch $toupper se impostato a TRUE * converte la stringa risultante in MAIUSCOLO. */ protected function _sanitize($string, $toupper = true) { $result = preg_replace('/[^A-Za-z]*/', '', $string); return ($toupper) ? strtoupper($result) : $result; } /** * Se la stringa passata a funzione e' costituita * da meno di 3 caratteri, rimpiazza le lettere * mancanti con la lettera X. */ protected function _addMissingX($string) { $code = $string; while (strlen($code) < 3) { $code .= 'X'; } return $code; } /** * Ottiene il codice identificativo del nome */ protected function _calcolaNome($string) { $nome = $this->_sanitize($string); $code = ''; // Se il nome inserito e' piu' corto di 3 lettere // si aggiungono tante X quanti sono i caratteri // mancanti. if (strlen($nome) < 3) { return $this->_addMissingX($nome); } $nome_cons = $this->_getConsonanti($nome); // Se le consonanti contenute nel nome sono minori // o uguali a 3 vengono considerate nell'ordine in cui // compaiono. if (count($nome_cons) <= 3) { $code = implode('', $nome_cons); } else { // Se invece abbiamo almeno 4 consonanti, prendiamo // la prima, la terza e la quarta. for ($i = 0; $i < 4; $i++) { if ($i == 1) continue; if (!empty($nome_cons[$i])) { $code .= $nome_cons[$i]; } } } // Se compaiono meno di 3 consonanti nel nome, si // utilizzano le vocali, nell'ordine in cui compaiono // nel nome. if (strlen($code) < 3) { $nome_voc = $this->_getVocali($nome); while (strlen($code) < 3) { $code .= array_shift($nome_voc); } } return $code; } protected function _calcolaCognome($string) { $cognome = $this->_sanitize($string); $code = ''; // Se il cognome inserito e' piu' corto di 3 lettere // si aggiungono tante X quanti sono i caratteri // mancanti. if (strlen($cognome) < 3) { return $this->_addMissingX($cognome); } $cognome_cons = $this->_getConsonanti($cognome); // Per il calcolo del cognome si prendono le prime // 3 consonanti. for ($i = 0; $i < 3; $i++) { if (array_key_exists($i, $cognome_cons)) { $code .= $cognome_cons[$i]; } } // Se le consonanti non bastano, vengono prese // le vocali nell'ordine in cui compaiono. if (strlen($code) < 3) { $cognome_voc = $this->_getVocali($cognome); while (strlen($code) < 3) { $code .= array_shift($cognome_voc); } } return $code; } /** * Imposta il separatore di data ( default: / ) */ public function setDateSeparator($char) { $this->_dateSeparator = $char; return $this; } /** * Ritorna la parte di codice fiscale corrispondente * alla data di nascita del soggetto (Forma: AAMGG) */ protected function _calcolaDataNascita($data, $sesso) { $dn = explode($this->_dateSeparator, $data); $giorno = (int) @$dn[2]; $mese = (int) @$dn[1]; $anno = (int) @$dn[0]; // Le ultime due cifre dell'anno di nascita $aa = substr($anno, -2); // La lettera corrispondente al mese di nascita $mm = $this->_mesi[$mese]; // Il giorno viene calcolato a seconda del sesso // del soggetto di cui si calcola il codice: // se e' Maschio si mette il giorno reale, se e' // Femmina viene aggiungo 40 a questo numero. $gg = (strtoupper($sesso) == 'M') ? $giorno : ($giorno + 40); // Bug #1: Thanks to Luca if (strlen($gg) < 2) $gg = '0' . $gg; return $aa . $mm . $gg; } /** * Ritorna la cifra di controllo sulla base dei * 15 caratteri del codice fiscale calcolati. */ protected function _calcolaCifraControllo($codice) { $code = str_split($codice); $sum = 0; for ($i = 1; $i <= count($code); $i++) { $cifra = $code[$i - 1]; $sum += ($i % 2) ? $this->_dispari[$cifra] : $this->_pari[$cifra]; } $sum %= 26; return $this->_controllo[$sum]; } /** * Imposta il messaggio di errore */ protected function _setError($string) { $this->_error = $string; } /** * Verifica la presenza di un errore. * Ritorna TRUE se presente, FALSE altrimenti. */ public function hasError() { return !is_null($this->_error); } /** * Ritorna la stringa di errore */ public function getError() { return $this->_error; } /** * Ritorna il codice fiscale utilizzando i parametri * passati a funzione. Se si verifica */ public function calcola($nome, $cognome, $data, $sesso, $comune) { $codice = $this->_calcolaCognome($cognome) . $this->_calcolaNome($nome) . $this->_calcolaDataNascita($data, $sesso) . $comune; if ($this->hasError()) { return false; } $codice .= $this->_calcolaCifraControllo($codice); if (strlen($codice) != 16) { //$this->_setError(self::ERR_GENERIC); return 'ERROR'; } return $codice; } }