/home/techb158/ileadtechnology.com/SSM/app/Repositories/communication
Edit: /home/techb158/ileadtechnology.com/SSM/app/Repositories/communication/SMSRepository.php (9901B)
employee_category = $employee_category;
$this->department = $department;
$this->course_group = $course_group;
$this->student_record = $student_record;
$this->employee = $employee;
$this->communication = $communication;
}
/**
* Send SMS
*
* @param array $params
* @return null
*/
public function submit($params = array())
{
$sms = gv($params, 'sms');
$includes = gv($params, 'includes');
$excludes = gv($params, 'excludes');
$includes = explode("\n", $includes);
$includes = array_filter($includes, 'trim');
$excludes = explode("\n", $excludes);
$excludes = array_filter($excludes, 'trim');
$numbers = $this->getAudienceNumber($params);
foreach ($includes as $include) {
$numbers[] = $include;
}
$numbers = array_filter($numbers);
$numbers = array_diff($numbers, $excludes);
if (! $numbers) {
throw ValidationException::withMessages(['message' => trans('communication.could_not_find_any_audience')]);
}
$params['recipient_numbers'] = $numbers;
$params['included_numbers'] = $includes;
$params['excluded_numbers'] = $excludes;
$options['individual_students'] = array_unique(gv($params, 'individual_students', []));
$options['individual_employees'] = array_unique(gv($params, 'individual_employees', []));
$communication = $this->communication->create($params);
$communication->options = $options;
$communication->save();
$numbers = collect($numbers);
foreach ($numbers->chunk(config('config.max_sms_per_chunk')) as $chunk) {
SendSMS::dispatch($chunk, $sms);
}
return count($numbers);
}
/**
* Send SMS
*
* @param array $params
* @return array
*/
public function getAudienceNumber($params = array())
{
$audience = gv($params, 'audience');
$student_numbers = array();
if (in_array($audience, ['everyone','selected_course','selected_batch']) || gv($params, 'individual_students', [])) {
$student_numbers = $this->getStudentNumber($params);
}
$employee_numbers = array();
if (in_array($audience, ['everyone','selected_department','selected_employee_category']) || gv($params, 'individual_employees', [])) {
$employee_numbers = $this->getEmployeeNumber($params);
}
$numbers = array_merge($student_numbers, $employee_numbers);
$numbers = array_unique($numbers);
return $numbers;
}
public function getStudentNumber($params = array())
{
$course_id = gv($params, 'course_id');
$batch_id = gv($params, 'batch_id');
$course_id = is_array($course_id) ? $course_id : ($course_id ? explode(',', $course_id) : []);
$batch_id = is_array($batch_id) ? $batch_id : ($batch_id ? explode(',', $batch_id) : []);
$individual_students = array_unique(gv($params, 'individual_students', []));
$include_alternate_number = gbv($params, 'include_alternate_number');
$selected_student_record_ids = array();
if (in_array(gv($params, 'audience'), ['selected_course', 'selected_batch'])) {
$query = $this->student_record->filterBySession()->whereNull('date_of_exit');
if (gv($params, 'audience') == 'selected_course') {
$query->whereHas('batch', function($q) use($course_id) {
$q->whereIn('course_id', $course_id);
});
}
if (gv($params, 'audience') == 'selected_batch') {
$query->whereIn('batch_id', $batch_id);
}
$selected_student_record_ids = $query->get()->pluck('id')->all();
}
$individual_student_record_ids = $this->student_record->whereIn('id', $individual_students)->get()->pluck('id')->all();
$total_student_record_ids = array_merge($selected_student_record_ids, $individual_student_record_ids);
$student_records = $this->student_record->select(['id','student_id'])->with(['student:id,student_parent_id,contact_number,emergency_contact_number','student.parent:id,first_guardian_contact_number_1,first_guardian_contact_number_2,second_guardian_contact_number_1,second_guardian_contact_number_2'])->whereIn('id', $total_student_record_ids)->get();
$numbers = array();
foreach ($student_records as $student_record) {
$numbers[] = $student_record->student->contact_number;
if ($include_alternate_number) {
$numbers[] = $student_record->student->emergency_contact_number;
$numbers[] = $student_record->student->parent->first_guardian_contact_number_1;
$numbers[] = $student_record->student->parent->first_guardian_contact_number_2;
$numbers[] = $student_record->student->parent->second_guardian_contact_number_1;
$numbers[] = $student_record->student->parent->second_guardian_contact_number_2;
}
}
$numbers = array_unique($numbers);
return $numbers;
}
public function getEmployeeNumber($params = array())
{
$employee_category_id = gv($params, 'employee_category_id');
$department_id = gv($params, 'department_id');
$employee_category_id = is_array($employee_category_id) ? $employee_category_id : ($employee_category_id ? explode(',', $employee_category_id) : []);
$department_id = is_array($department_id) ? $department_id : ($department_id ? explode(',', $department_id) : []);
$individual_employees = array_unique(gv($params, 'individual_employees', []));
$include_alternate_number = gbv($params, 'include_alternate_number');
$selected_employee_ids = array();
if (in_array(gv($params, 'audience'), ['selected_employee_category', 'selected_department'])) {
$query = $this->employee->whereHas('employeeTerms', function ($q) {
$q->where(function ($q1) {
$q1->whereNull('date_of_leaving')->where('date_of_joining', '<=', date('Y-m-d'));
})->orWhere(function ($q2) {
$q2->whereNotNull('date_of_leaving')->where('date_of_joining', '<=', date('Y-m-d'))->where('date_of_leaving', '>=', date('Y-m-d'));
});
});
if (gv($params, 'audience') == 'selected_employee_category') {
$query->whereHas('employeeDesignations', function ($q) use ($employee_category_id) {
$q->where('date_effective', '<=', date('Y-m-d'))->where(function ($q1) {
$q1->where('date_end', '=', null)->orWhere(function ($q2) {
$q2->where('date_end', '!=', null)->where('date_end', '>=', date('Y-m-d'));
});
})->whereHas('designation', function($q) use ($employee_category_id) {
$q->whereHas('employeeCategory',function($q1) use ($employee_category_id) {
$q1->whereIn('employee_category_id', $employee_category_id);
});
});
});
}
if (gv($params, 'audience') == 'selected_department') {
$query->whereHas('employeeDesignations', function ($q) use ($department_id) {
$q->where('date_effective', '<=', date('Y-m-d'))->where(function ($q1) {
$q1->where('date_end', '=', null)->orWhere(function ($q2) {
$q2->where('date_end', '!=', null)->where('date_end', '>=', date('Y-m-d'));
});
})->whereIn('department_id', $department_id);
});
}
$selected_employee_ids = $query->get()->pluck('id')->all();
}
$individual_employee_ids = $this->employee->whereIn('id', $individual_employees)->get()->pluck('id')->all();
$total_employee_ids = array_merge($selected_employee_ids, $individual_employee_ids);
$employees = $this->employee->whereIn('id', $total_employee_ids)->select(['id','contact_number','alternate_contact_number','emergency_contact_number'])->get();
$numbers = array();
foreach ($employees as $employee) {
$numbers[] = $employee->contact_number;
if ($include_alternate_number) {
$numbers[] = $employee->alternate_contact_number;
$numbers[] = $employee->emergency_contact_number;
}
}
$numbers = array_unique($numbers);
return $numbers;
}
}