mahmudkuet

MemberService Infolady

Feb 7th, 2017
190
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. namespace App\Services\Household;
  3.  
  4. use App\Enum\ImageType;
  5. use App\Enum\User\UserRole;
  6. use App\Models\Household\HouseholdMember;
  7. use App\Models\Household\HouseholdMemberInfolady;
  8. use App\Services\AbstractService;
  9. use App\Util\Media\MediaService;
  10. use Carbon\Carbon;
  11. use Illuminate\Http\Request;
  12. use Validator;
  13. use Exception;
  14. use Auth;
  15. use DB;
  16.  
  17. /**
  18.  * Description of HouseholdService
  19.  *
  20.  * @author Mahabubul Hasan <codehasan@gmail.com>
  21.  */
  22. class MemberService extends AbstractService {
  23.  
  24.     public function __construct() {
  25.         parent::__construct(new HouseholdMember);
  26.     }
  27.  
  28.     /**
  29.      *
  30.      * @param  array  $data
  31.      * @return \Illuminate\Contracts\Validation\Validator
  32.      */
  33.     public function validator(array $data) {
  34.         if(array_get($data, 'primary') == 'yes'){
  35.             $rules = [
  36.                 'birth_reg_id'                      => 'string',
  37.                 'national_id'                       => 'string',
  38.                 'photo'                             => 'image|max:1024',
  39.                 'date_of_birth'                     => 'date_format:Y-m-d',
  40.                 'has_birth_mark'                    => 'boolean',
  41.                 'sex'                               => 'string',
  42.                 'marital_status'                    => 'string',
  43.                 'religion'                          => 'string',
  44.                 'ethnicity'                         => 'string',
  45.                 'household_position'                => 'string',
  46.                 'household_head_relation'           => 'string',
  47.                 'has_personal_mobile'               => 'boolean',
  48.                 'total_mobile'                      => 'integer',
  49.                 'mobile_type'                       => 'array',
  50.                 'total_basic_phone'                 => 'integer',
  51.                 'total_feature_phone'               => 'integer',
  52.                 'total_smart_phone'                 => 'integer',
  53.                 'mobile_1'                          => 'string',
  54.                 'mobile_2'                          => 'string',
  55.                 'has_email'                         => 'boolean',
  56.                 'email'                             => 'string',
  57.                 'has_video_calling_service'         => 'boolean',
  58.                 'video_calling_service'             => 'array',
  59.                 'has_facebook'                      => 'boolean',
  60.                 'facebook_id'                       => 'string',
  61.                 'fathers_name'                      => 'string',
  62.                 'mothers_name'                      => 'string',
  63.             ];
  64.         }
  65.         if(array_get($data, 'access_to_mfs') == 'yes'){
  66.             $rules = [
  67.                 'is_mfs_service'                    => 'boolean',
  68.                 'mfs_provider'                      => 'array',
  69.             ];
  70.         }
  71.         if(array_get($data, 'income_expenditure') == 'yes'){
  72.             $rules = [
  73.                 'employment_status'                 => 'string',
  74.                 'activity_sector'                   => 'string',
  75.                 'occupation'                        => 'string',
  76.                 'income_frequency'                  => 'string',
  77.                 'income_amount'                     => 'integer',
  78.             ];
  79.         }
  80.         if(array_get($data, 'health') == 'yes'){
  81.             $rules = [
  82.                 'blood_group'                       => 'string',
  83.                 'chronic_diseases'                  => 'array',
  84.                 'disabilities'                      => 'array',
  85.                 'height_inch'                       => 'numeric',
  86.                 'weight_kg'                         => 'numeric',
  87.             ];
  88.         }
  89.         if(array_get($data, 'education') == 'yes'){
  90.             $rules = [
  91.                 'is_currently_studing'              => 'boolean',
  92.                 'is_ever_study'                     => 'boolean',
  93.                 'is_go_pre_school'                  => 'boolean',
  94.                 'last_study_institute'              => 'string',
  95.                 'educational_institution_type'      => 'string',
  96.                 'highest_class_passed'              => 'string',
  97.                 'is_able_write_letter'              => 'boolean',
  98.                 'is_able_read_letter'               => 'boolean',
  99.                 'is_involved_exra_curricular'       => 'boolean',
  100.                 'is_able_computer_work'             => 'boolean',
  101.                 'is_able_create_mobile_contact'     => 'boolean',
  102.             ];
  103.         }
  104.  
  105.         $rules['name'] = 'required|string';
  106.  
  107.         return Validator::make($data, $rules);
  108.     }
  109.  
  110.     public function getList(){
  111.         return $this->getAll();
  112.     }
  113.  
  114.     public function create(Request $request){
  115.         $photo = '';
  116.         if($request->hasFile('photo')){
  117.             $photo = MediaService::upload(ImageType::MEMBER, $request->file('photo'));
  118.         }
  119.  
  120.         $data = $this->prepareInputData($request, 'create');
  121.         $data['photo'] = $photo;
  122.         $data['household_profile_id'] = 0;
  123.         $data['household_member_id_mobile'] = $request->get('household_member_id_mobile');
  124.  
  125.         DB::beginTransaction();
  126.         try {
  127.             $member = HouseholdMember::create($data);
  128.             HouseholdMemberInfolady::create([
  129.                 'household_member_id'  =>  $member->household_member_id,
  130.                 'infolady_id'   =>  Auth::id()
  131.             ]);
  132.             DB::commit();
  133.             return $member;
  134.         } catch (Exception $e) {
  135.             DB::rollback();
  136.             throw new \Exception($e->getMessage());
  137.         }
  138.  
  139.     }
  140.  
  141.     public function getItem($id)
  142.     {
  143.         return parent::getItem($id);
  144.     }
  145.  
  146.     public function update(Request $request, $id)
  147.     {
  148.         $member = $this->getItem($id);
  149.         if($request->hasFile('photo')){
  150.             MediaService::delete(ImageType::MEMBER, $member->photo);
  151.             $photo = MediaService::upload(ImageType::MEMBER, $request->file('photo'));
  152.         }else{
  153.             $photo = $member->photo;
  154.         }
  155.         $data = $this->prepareInputData($request, 'update', $member);
  156.         $data['photo'] = $photo;
  157.         $member->update($data);
  158.         return $member;
  159.     }
  160.  
  161.     public function getUnassignedMembers(){
  162.         return $this->getAll()->where('household_profile_id', 0);
  163.     }
  164.  
  165.     public function assign($member_id, $household_profile_id){
  166.         $member = $this->getItem($member_id);
  167.         return $member->update([
  168.             'household_profile_id'  =>  $household_profile_id
  169.         ]);
  170.     }
  171.  
  172.     public function unAssign($member_id){
  173.         return parent::getItem($member_id)->update([
  174.                     'household_profile_id'  =>  0
  175.                 ]);
  176.     }
  177.  
  178.     public function getAll(){
  179.         $rows = parent::getAll();
  180.         if(is_infolady() || Auth::user()->role->name == UserRole::INFOLADY){
  181.             $rows = $this->getAllByInfolady($rows, Auth::id());
  182.         }
  183.         $rows = $this->search($rows);
  184.  
  185.         return $rows;
  186.     }
  187.  
  188.     public function getMembersByHousehold($householdId){
  189.         $rows = self::getAll()->where('household_profile_id', $householdId);
  190.         return $rows;
  191.     }
  192.  
  193.     public function getAllByInfolady($rows, $infoladyId){
  194.         $householdMembers = HouseholdMemberInfolady::where('infolady_id', $infoladyId)->get()->toArray();
  195.         $householdMembersArray = array_pluck($householdMembers, 'household_member_id');
  196.         return $rows->whereIn('household_member_id', $householdMembersArray);
  197.     }
  198.  
  199.     public function search($query){
  200.         if(request('name')){
  201.             $query = $query->Where('household_members.name', 'LIKE', '%'. trim(request('name')) .'%');
  202.         }
  203.  
  204.         if(request('mobile')){
  205.             $query = $query->Where('household_members.mobile_1', 'LIKE', '%'. trim(request('mobile')) .'%')
  206.                 ->orWhere('mobile_2', 'LIKE', '%'. trim(request('mobile')) .'%');
  207.         }
  208.  
  209.         if(request('nid')){
  210.             $query = $query->Where('household_members.national_id', 'LIKE', '%'. trim(request('nid')) .'%');
  211.         }
  212.  
  213.         if(request('fathers_name')){
  214.             $query = $query->Where('household_members.fathers_name', 'LIKE', '%'. trim(request('fathers_name')) .'%');
  215.         }
  216.  
  217.         if(request('mothers_name')){
  218.             $query = $query->Where('household_members.mothers_name', 'LIKE', '%'. trim(request('mothers_name')) .'%');
  219.         }
  220.         if($q = trim(request('completeness'))){
  221.             $mandatory_fields = [
  222.                 'name',
  223.                 'date_of_birth',
  224.                 'sex',
  225.                 'marital_status',
  226.                 'religion',
  227.                 'household_position',
  228.                 'has_personal_mobile',
  229.                 'fathers_name',
  230.                 'mothers_name',
  231.                 'is_mfs_service',
  232.                 'employment_status',
  233.                 'chronic_diseases',
  234.                 'disabilities',
  235.                 'is_currently_studing',
  236.             ];
  237.             if($q == 'complete'){
  238.                 foreach ($mandatory_fields as $r){
  239.                     $query = $query->whereNotNull($r);
  240.                 }
  241.             }
  242.             if($q == 'incomplete'){
  243.                 $query = $query->where(function($query) use ($mandatory_fields){
  244.                     foreach ($mandatory_fields as $r){
  245.                         $query->orWhereNull($r);
  246.                     }
  247.                 });
  248.             }
  249.         }
  250.         return $query;
  251.     }
  252.  
  253.     private function prepareInputData(Request $request, $action = '', $member = null){
  254.         if($request->get('primary')=='yes'){
  255.  
  256.             $data['birth_reg_id'] = $request->input('birth_reg_id');
  257.             $data['national_id'] = $request->input('national_id');
  258.             $data['date_of_birth'] = $request->input('date_of_birth');
  259.             $data['has_birth_mark'] = $request->input('has_birth_mark');
  260.             $data['sex'] = $request->input('sex');
  261.             $data['marital_status'] = $request->input('marital_status');
  262.             $data['religion'] = $request->input('religion');
  263.             $data['ethnicity'] = $request->input('ethnicity');
  264.             $data['household_position'] = $request->input('household_position');
  265.             $data['household_head_relation'] = $request->input('household_head_relation');
  266.             $data['has_personal_mobile'] = $request->input('has_personal_mobile');
  267.             $data['total_mobile'] = $request->input('total_mobile');
  268.             $data['mobile_type'] = json_encode($request->input('mobile_type', []));
  269.             $data['total_basic_phone'] = $request->input('total_basic_phone');
  270.             $data['total_feature_phone'] = $request->input('total_feature_phone');
  271.             $data['total_smart_phone'] = $request->input('total_smart_phone');
  272.             $data['mobile_1'] = $request->input('mobile_1');
  273.             $data['mobile_2'] = $request->input('mobile_2');
  274.             $data['has_email'] = $request->input('has_email');
  275.             $data['email'] = $request->input('email');
  276.             $data['has_video_calling_service'] = $request->input('has_video_calling_service');
  277.             $data['video_calling_service'] = json_encode($request->input('video_calling_service', []));
  278.             $data['has_facebook'] = $request->input('has_facebook');
  279.             $data['facebook_id'] = $request->input('facebook_id');
  280.             $data['fathers_name'] = $request->input('fathers_name');
  281.             $data['mothers_name'] = $request->input('mothers_name');
  282.  
  283.             if($action == 'create') $data['primary_created_at'] = $request->input('primary_created_at', Carbon::now());
  284.  
  285.         }
  286.         if($request->get('basic_info')=='yes'){
  287.  
  288.             $data = [
  289.                 'sex'   =>  $request->input('sex'),
  290.                 'mothers_name'   =>  $request->input('mothers_name'),
  291.             ];
  292.         }
  293.         if($request->get('access_to_mfs')=='yes'){
  294.             $data['is_mfs_service'] = $request->input('is_mfs_service');
  295.             $data['mfs_provider'] = $request->input('mfs_provider');
  296.  
  297.             if($action == 'create'){
  298.                 $data['mfs_created_at'] = $request->input('mfs_created_at', Carbon::now());
  299.             }
  300.             if($action == 'update'){
  301.                 if( $member->mfs_created_at == 0){
  302.                     $data['mfs_created_at'] = $request->input('mfs_created_at', Carbon::now());
  303.                 }
  304.             }
  305.         }
  306.         if($request->get('income_expenditure')=='yes'){
  307.             $data['employment_status'] = $request->input('employment_status');
  308.             $data['activity_sector'] = $request->input('activity_sector');
  309.             $data['occupation'] = $request->input('occupation');
  310.             $data['income_frequency'] = $request->input('income_frequency');
  311.             $data['income_amount'] = $request->input('income_amount');
  312.  
  313.             if($action == 'create'){
  314.                 $data['income_expenditure_created_at'] = $request->input('income_expenditure_created_at', Carbon::now());
  315.             }
  316.             if($action == 'update'){
  317.                 if( $member->income_expenditure_created_at == 0){
  318.                     $data['income_expenditure_created_at'] = $request->input('income_expenditure_created_at', Carbon::now());
  319.                 }
  320.             }
  321.         }
  322.         if($request->get('health')=='yes'){
  323.             $data['blood_group'] = $request->input('blood_group');
  324.             $data['chronic_diseases'] = json_encode($request->input('chronic_diseases', []));
  325.             $data['disabilities'] = json_encode($request->input('disabilities', []));
  326.             $data['height_inch'] = $request->input('height_inch');
  327.             $data['weight_kg'] = $request->input('weight_kg');
  328.  
  329.             if($action == 'create'){
  330.                 $data['health_created_at'] = $request->input('health_created_at', Carbon::now());
  331.             }
  332.             if($action == 'update'){
  333.                 if( $member->health_created_at == 0){
  334.                     $data['health_created_at'] = $request->input('health_created_at', Carbon::now());
  335.                 }
  336.             }
  337.         }
  338.         if($request->get('education')=='yes'){
  339.             $data['is_currently_studing'] = $request->input('is_currently_studing');
  340.             $data['is_ever_study'] = $request->input('is_ever_study');
  341.             $data['is_go_pre_school'] = $request->input('is_go_pre_school');
  342.             $data['last_study_institute'] = $request->input('last_study_institute');
  343.             $data['educational_institution_type'] = $request->input('educational_institution_type');
  344.             $data['highest_class_passed'] = $request->input('highest_class_passed');
  345.             $data['is_able_write_letter'] = $request->input('is_able_write_letter');
  346.             $data['is_able_read_letter'] = $request->input('is_able_read_letter');
  347.             $data['is_involved_exra_curricular'] = $request->input('is_involved_exra_curricular');
  348.             $data['is_able_computer_work'] = $request->input('is_able_computer_work');
  349.             $data['is_able_create_mobile_contact'] = $request->input('is_able_create_mobile_contact');
  350.  
  351.             if($action == 'create'){
  352.                 $data['education_created_at'] = $request->input('education_created_at', Carbon::now());
  353.             }
  354.             if($action == 'update'){
  355.                 if( $member->education_created_at == 0){
  356.                     $data['education_created_at'] = $request->input('education_created_at', Carbon::now());
  357.                 }
  358.             }
  359.         }
  360.         $data['name'] = $request->input('name');
  361.         return $data;
  362.     }
  363.  
  364. }
RAW Paste Data