Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Services\Household;
- use App\Enum\ImageType;
- use App\Enum\User\UserRole;
- use App\Models\Household\HouseholdMember;
- use App\Models\Household\HouseholdMemberInfolady;
- use App\Services\AbstractService;
- use App\Util\Media\MediaService;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- use Validator;
- use Exception;
- use Auth;
- use DB;
- /**
- * Description of HouseholdService
- *
- * @author Mahabubul Hasan <codehasan@gmail.com>
- */
- class MemberService extends AbstractService {
- public function __construct() {
- parent::__construct(new HouseholdMember);
- }
- /**
- *
- * @param array $data
- * @return \Illuminate\Contracts\Validation\Validator
- */
- public function validator(array $data) {
- if(array_get($data, 'primary') == 'yes'){
- $rules = [
- 'birth_reg_id' => 'string',
- 'national_id' => 'string',
- 'photo' => 'image|max:1024',
- 'date_of_birth' => 'date_format:Y-m-d',
- 'has_birth_mark' => 'boolean',
- 'sex' => 'string',
- 'marital_status' => 'string',
- 'religion' => 'string',
- 'ethnicity' => 'string',
- 'household_position' => 'string',
- 'household_head_relation' => 'string',
- 'has_personal_mobile' => 'boolean',
- 'total_mobile' => 'integer',
- 'mobile_type' => 'array',
- 'total_basic_phone' => 'integer',
- 'total_feature_phone' => 'integer',
- 'total_smart_phone' => 'integer',
- 'mobile_1' => 'string',
- 'mobile_2' => 'string',
- 'has_email' => 'boolean',
- 'email' => 'string',
- 'has_video_calling_service' => 'boolean',
- 'video_calling_service' => 'array',
- 'has_facebook' => 'boolean',
- 'facebook_id' => 'string',
- 'fathers_name' => 'string',
- 'mothers_name' => 'string',
- ];
- }
- if(array_get($data, 'access_to_mfs') == 'yes'){
- $rules = [
- 'is_mfs_service' => 'boolean',
- 'mfs_provider' => 'array',
- ];
- }
- if(array_get($data, 'income_expenditure') == 'yes'){
- $rules = [
- 'employment_status' => 'string',
- 'activity_sector' => 'string',
- 'occupation' => 'string',
- 'income_frequency' => 'string',
- 'income_amount' => 'integer',
- ];
- }
- if(array_get($data, 'health') == 'yes'){
- $rules = [
- 'blood_group' => 'string',
- 'chronic_diseases' => 'array',
- 'disabilities' => 'array',
- 'height_inch' => 'numeric',
- 'weight_kg' => 'numeric',
- ];
- }
- if(array_get($data, 'education') == 'yes'){
- $rules = [
- 'is_currently_studing' => 'boolean',
- 'is_ever_study' => 'boolean',
- 'is_go_pre_school' => 'boolean',
- 'last_study_institute' => 'string',
- 'educational_institution_type' => 'string',
- 'highest_class_passed' => 'string',
- 'is_able_write_letter' => 'boolean',
- 'is_able_read_letter' => 'boolean',
- 'is_involved_exra_curricular' => 'boolean',
- 'is_able_computer_work' => 'boolean',
- 'is_able_create_mobile_contact' => 'boolean',
- ];
- }
- $rules['name'] = 'required|string';
- return Validator::make($data, $rules);
- }
- public function getList(){
- return $this->getAll();
- }
- public function create(Request $request){
- $photo = '';
- if($request->hasFile('photo')){
- $photo = MediaService::upload(ImageType::MEMBER, $request->file('photo'));
- }
- $data = $this->prepareInputData($request, 'create');
- $data['photo'] = $photo;
- $data['household_profile_id'] = 0;
- $data['household_member_id_mobile'] = $request->get('household_member_id_mobile');
- DB::beginTransaction();
- try {
- $member = HouseholdMember::create($data);
- HouseholdMemberInfolady::create([
- 'household_member_id' => $member->household_member_id,
- 'infolady_id' => Auth::id()
- ]);
- DB::commit();
- return $member;
- } catch (Exception $e) {
- DB::rollback();
- throw new \Exception($e->getMessage());
- }
- }
- public function getItem($id)
- {
- return parent::getItem($id);
- }
- public function update(Request $request, $id)
- {
- $member = $this->getItem($id);
- if($request->hasFile('photo')){
- MediaService::delete(ImageType::MEMBER, $member->photo);
- $photo = MediaService::upload(ImageType::MEMBER, $request->file('photo'));
- }else{
- $photo = $member->photo;
- }
- $data = $this->prepareInputData($request, 'update', $member);
- $data['photo'] = $photo;
- $member->update($data);
- return $member;
- }
- public function getUnassignedMembers(){
- return $this->getAll()->where('household_profile_id', 0);
- }
- public function assign($member_id, $household_profile_id){
- $member = $this->getItem($member_id);
- return $member->update([
- 'household_profile_id' => $household_profile_id
- ]);
- }
- public function unAssign($member_id){
- return parent::getItem($member_id)->update([
- 'household_profile_id' => 0
- ]);
- }
- public function getAll(){
- $rows = parent::getAll();
- if(is_infolady() || Auth::user()->role->name == UserRole::INFOLADY){
- $rows = $this->getAllByInfolady($rows, Auth::id());
- }
- $rows = $this->search($rows);
- return $rows;
- }
- public function getMembersByHousehold($householdId){
- $rows = self::getAll()->where('household_profile_id', $householdId);
- return $rows;
- }
- public function getAllByInfolady($rows, $infoladyId){
- $householdMembers = HouseholdMemberInfolady::where('infolady_id', $infoladyId)->get()->toArray();
- $householdMembersArray = array_pluck($householdMembers, 'household_member_id');
- return $rows->whereIn('household_member_id', $householdMembersArray);
- }
- public function search($query){
- if(request('name')){
- $query = $query->Where('household_members.name', 'LIKE', '%'. trim(request('name')) .'%');
- }
- if(request('mobile')){
- $query = $query->Where('household_members.mobile_1', 'LIKE', '%'. trim(request('mobile')) .'%')
- ->orWhere('mobile_2', 'LIKE', '%'. trim(request('mobile')) .'%');
- }
- if(request('nid')){
- $query = $query->Where('household_members.national_id', 'LIKE', '%'. trim(request('nid')) .'%');
- }
- if(request('fathers_name')){
- $query = $query->Where('household_members.fathers_name', 'LIKE', '%'. trim(request('fathers_name')) .'%');
- }
- if(request('mothers_name')){
- $query = $query->Where('household_members.mothers_name', 'LIKE', '%'. trim(request('mothers_name')) .'%');
- }
- if($q = trim(request('completeness'))){
- $mandatory_fields = [
- 'name',
- 'date_of_birth',
- 'sex',
- 'marital_status',
- 'religion',
- 'household_position',
- 'has_personal_mobile',
- 'fathers_name',
- 'mothers_name',
- 'is_mfs_service',
- 'employment_status',
- 'chronic_diseases',
- 'disabilities',
- 'is_currently_studing',
- ];
- if($q == 'complete'){
- foreach ($mandatory_fields as $r){
- $query = $query->whereNotNull($r);
- }
- }
- if($q == 'incomplete'){
- $query = $query->where(function($query) use ($mandatory_fields){
- foreach ($mandatory_fields as $r){
- $query->orWhereNull($r);
- }
- });
- }
- }
- return $query;
- }
- private function prepareInputData(Request $request, $action = '', $member = null){
- if($request->get('primary')=='yes'){
- $data['birth_reg_id'] = $request->input('birth_reg_id');
- $data['national_id'] = $request->input('national_id');
- $data['date_of_birth'] = $request->input('date_of_birth');
- $data['has_birth_mark'] = $request->input('has_birth_mark');
- $data['sex'] = $request->input('sex');
- $data['marital_status'] = $request->input('marital_status');
- $data['religion'] = $request->input('religion');
- $data['ethnicity'] = $request->input('ethnicity');
- $data['household_position'] = $request->input('household_position');
- $data['household_head_relation'] = $request->input('household_head_relation');
- $data['has_personal_mobile'] = $request->input('has_personal_mobile');
- $data['total_mobile'] = $request->input('total_mobile');
- $data['mobile_type'] = json_encode($request->input('mobile_type', []));
- $data['total_basic_phone'] = $request->input('total_basic_phone');
- $data['total_feature_phone'] = $request->input('total_feature_phone');
- $data['total_smart_phone'] = $request->input('total_smart_phone');
- $data['mobile_1'] = $request->input('mobile_1');
- $data['mobile_2'] = $request->input('mobile_2');
- $data['has_email'] = $request->input('has_email');
- $data['email'] = $request->input('email');
- $data['has_video_calling_service'] = $request->input('has_video_calling_service');
- $data['video_calling_service'] = json_encode($request->input('video_calling_service', []));
- $data['has_facebook'] = $request->input('has_facebook');
- $data['facebook_id'] = $request->input('facebook_id');
- $data['fathers_name'] = $request->input('fathers_name');
- $data['mothers_name'] = $request->input('mothers_name');
- if($action == 'create') $data['primary_created_at'] = $request->input('primary_created_at', Carbon::now());
- }
- if($request->get('basic_info')=='yes'){
- $data = [
- 'sex' => $request->input('sex'),
- 'mothers_name' => $request->input('mothers_name'),
- ];
- }
- if($request->get('access_to_mfs')=='yes'){
- $data['is_mfs_service'] = $request->input('is_mfs_service');
- $data['mfs_provider'] = $request->input('mfs_provider');
- if($action == 'create'){
- $data['mfs_created_at'] = $request->input('mfs_created_at', Carbon::now());
- }
- if($action == 'update'){
- if( $member->mfs_created_at == 0){
- $data['mfs_created_at'] = $request->input('mfs_created_at', Carbon::now());
- }
- }
- }
- if($request->get('income_expenditure')=='yes'){
- $data['employment_status'] = $request->input('employment_status');
- $data['activity_sector'] = $request->input('activity_sector');
- $data['occupation'] = $request->input('occupation');
- $data['income_frequency'] = $request->input('income_frequency');
- $data['income_amount'] = $request->input('income_amount');
- if($action == 'create'){
- $data['income_expenditure_created_at'] = $request->input('income_expenditure_created_at', Carbon::now());
- }
- if($action == 'update'){
- if( $member->income_expenditure_created_at == 0){
- $data['income_expenditure_created_at'] = $request->input('income_expenditure_created_at', Carbon::now());
- }
- }
- }
- if($request->get('health')=='yes'){
- $data['blood_group'] = $request->input('blood_group');
- $data['chronic_diseases'] = json_encode($request->input('chronic_diseases', []));
- $data['disabilities'] = json_encode($request->input('disabilities', []));
- $data['height_inch'] = $request->input('height_inch');
- $data['weight_kg'] = $request->input('weight_kg');
- if($action == 'create'){
- $data['health_created_at'] = $request->input('health_created_at', Carbon::now());
- }
- if($action == 'update'){
- if( $member->health_created_at == 0){
- $data['health_created_at'] = $request->input('health_created_at', Carbon::now());
- }
- }
- }
- if($request->get('education')=='yes'){
- $data['is_currently_studing'] = $request->input('is_currently_studing');
- $data['is_ever_study'] = $request->input('is_ever_study');
- $data['is_go_pre_school'] = $request->input('is_go_pre_school');
- $data['last_study_institute'] = $request->input('last_study_institute');
- $data['educational_institution_type'] = $request->input('educational_institution_type');
- $data['highest_class_passed'] = $request->input('highest_class_passed');
- $data['is_able_write_letter'] = $request->input('is_able_write_letter');
- $data['is_able_read_letter'] = $request->input('is_able_read_letter');
- $data['is_involved_exra_curricular'] = $request->input('is_involved_exra_curricular');
- $data['is_able_computer_work'] = $request->input('is_able_computer_work');
- $data['is_able_create_mobile_contact'] = $request->input('is_able_create_mobile_contact');
- if($action == 'create'){
- $data['education_created_at'] = $request->input('education_created_at', Carbon::now());
- }
- if($action == 'update'){
- if( $member->education_created_at == 0){
- $data['education_created_at'] = $request->input('education_created_at', Carbon::now());
- }
- }
- }
- $data['name'] = $request->input('name');
- return $data;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement