where('type',$type); // } if (isset($key) && $key != null) { $companies->where(function ($query) use ($key){ $query->where('name','like',"%$key%"); // ->orWhere('email','like',"%$key%"); // ->orWhere('phone','like',"%$key%"); }); } $companies = $companies->whereNull('deleted_at'); $count = $companies->count(); $companies = $companies->skip($per_page*$current_page)->limit($per_page)->orderBy('id','DESC')->get(); return response()->json(compact('companies','count','per_page')); } public function register_company (Request $request) { $validator = Validator::make($request->all(), [ 'company_name' => 'required|string|max:255', 'access_of_multiple_sites' => 'required| numeric', 'phone' => 'required|string|max:255|unique:companies', 'commercial_number' => 'required|string|max:255|unique:companies', 'industrial' => 'required|string|max:255', 'website_address' => 'required|string|max:255', 'address' => 'required|string|max:255', 'total_users_request' => 'required|numeric', 'http_host_demo' => 'required|string|max:255', 'version_number' => 'required|string|max:255', 'theme_id' => 'required|numeric', 'font_id' => 'required|numeric', 'register_date' => 'required', 'expire_date' => 'required', 'languages_ids.*' => 'required|numeric', 'company_admins' => 'required', 'company_admins.*.name' => 'required|string|max:255', 'company_admins.*.email' => 'required|string|email|max:255|unique:users', 'company_admins.*.password' => 'required|string|min:6|confirmed', 'company_branches' => 'required', 'company_branches.*.branch_name' => 'required', 'company_branches.*.branch_users.*.name' => 'required|string|max:255', 'company_branches.*.branch_users.*.email' => 'required|string|email|max:255|unique:users', 'company_branches.*.branch_users.*.password' => 'required|string|min:6|confirmed', 'company_branches.*.branch_users.*.type' => 'required|string|in:manger_authority_person,decision_maker,supervisor,employee', 'company_branches.*.branch_users.*.position' => 'required|string|max:255', 'company_branches.*.branch_users.*.phone' => 'required|string|max:255', 'company_branches.*.branch_users.*.hire_date' => 'required|string|max:255', 'company_branches.*.branch_users.*.is_active' => 'required|in:0,1', ]); // check duplicates in company admins $emails[] = array_column($request['company_admins'], 'email'); // check duplicates in branches users $branch_users = array_column($request['company_branches'], 'branch_users'); $branch_users_emails = call_user_func_array('array_merge', $branch_users); $emails[] = array_column($branch_users_emails, 'email'); $emails = call_user_func_array('array_merge', $emails); //combine all emails $emails = app('App\Http\Controllers\HelperController') ->display_duplicated_emails($emails); if(!empty($emails)){ return $emails; } if($request['expire_date'] < $request['register_date']){ return response()->json(['error' => 'register_date can not be greater than expire_date'],400); } if($request['access_of_multiple_sites'] < sizeof($request['company_branches']) ){ return response()->json(['error' => 'company_branches can not be greater than access_of_multiple_sites'],400); } if($validator->fails()){ $error = $validator->errors(); return response()->json(compact('error'),400); } if (!empty($request['logo_photo'])) { if(empty($request['logo_photo_type'])){ return response()->json(['error' => 'logo_photo_type is required .'], 400); } $logo_photo = app('App\Http\Controllers\HelperController') ->upload_single_photo($request['logo_photo'], $request['logo_photo_type']); }else{ $logo_photo = NULL; } if (!empty($request['back_ground_photo'])) { if(empty($request['back_ground_photo_type'])){ return response()->json(['error' => 'back_ground_photo_type is required .'], 400); } $back_ground_photo = app('App\Http\Controllers\HelperController') ->upload_single_photo($request['back_ground_photo'], $request['back_ground_photo_type']); }else{ $back_ground_photo = NULL; } //create company .. $company = Company::create([ 'name' => $request['company_name'], 'access_of_multiple_sites' => $request['access_of_multiple_sites'], 'phone' => $request['phone'], 'register_date' => $request['register_date'], 'expire_date' => $request['expire_date'], 'commercial_number' => $request['commercial_number'], 'industrial' => $request['industrial'], 'website_address' => $request['website_address'], 'address' => $request['address'], 'total_users_request' => $request['total_users_request'], 'http_host_demo' => $request['http_host_demo'], 'version_number' => $request['version_number'], 'theme_id' => $request['theme_id'], 'font_id' => $request['font_id'], 'logo' => $logo_photo, 'back_ground_photo' => $back_ground_photo, ]); //create company languages foreach ($request['languages_ids'] as $key => $lang_id) { $lang = CompanyLanguage::create([ 'company_id' => $company->id, 'language_id' => $lang_id, ]); } //create admins and make relation with company .. foreach ($request['company_admins'] as $key => $admin) { if (!empty($admin['photo'])) { if(empty($admin['photo_type'])){ return response()->json(['error' => 'photo_type is required .'], 400); } $photo = app('App\Http\Controllers\HelperController') ->upload_single_photo($admin['photo'], $admin['photo_type']); }else{ $photo = NULL; } $new_admin = User::create([ 'name' => $admin['name'], 'email' => $admin['email'], 'photo' => $photo, 'type' => 'company_admin', 'password' => Hash::make($admin['password']), ]); $company_admin = CompanyAdmin::create([ 'company_id' => $company->id, 'admin_id' => $new_admin->id ]); } // create branches and admins for company_id foreach ($request['company_branches'] as $key => $branch) { $new_branch = CompanyBranch::create([ 'name' => $branch['branch_name'], 'company_id' => $company->id, ]); foreach ($branch['branch_users'] as $key => $branch_user) { if (!empty($branch_user['photo'])) { if(empty($branch_user['photo_type'])){ return response()->json(['error' => 'photo_type is required .'], 400); } $photo = app('App\Http\Controllers\HelperController') ->upload_single_photo($branch_user['photo'], $branch_user['photo_type']); }else{ $photo = NULL; } $new_branch_user = User::create([ 'name' => $branch_user['name'], 'password' => Hash::make($branch_user['password']), 'email' => $branch_user['email'], 'photo' => $photo, 'type' => $branch_user['type'], 'position' => $branch_user['position'], 'phone' => $branch_user['phone'], 'hire_date' => $branch_user['hire_date'], 'is_active' => $branch_user['is_active'], ]); $company_branch_admin = CompanyBranchUser::create([ 'branch_id' => $new_branch->id, 'user_id' => $new_branch_user->id ]); } } return response()->json(compact('company'),201); } public function delete_current_companies (Request $request) { $validator = Validator::make($request->all(), [ "companies_id.*" => "required|integer" ]); if($validator->fails()){ $error = $validator->errors(); return response()->json(compact('error'),400); } foreach ($request['companies_id'] as $key => $id) { $company = Company::find($id)->delete(); } return response()->json(['status' => 'done'], 204); } public function handle_csv_file (Request $request) { $file = $request['csv_file']; $customerArr = app('App\Http\Controllers\HelperController')->csvToArray($file); $emails = array_column($customerArr['users'], 'email'); $duplicates = array_diff_key($emails, array_unique($emails)); if(!empty($duplicates)){ $error = []; foreach ($duplicates as $key => $duplicate) { $error[] = $duplicate ." has already duplicate in the file"; } return response()->json(compact('error'),400); } $validator = Validator::make($customerArr, [ 'users.*.email' => 'required|string|email|max:255|unique:users', ]); if($validator->fails()){ $error = $validator->errors(); return response()->json(compact('error'),400); } return $customerArr; } } //class