middleware('auth:web'); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function details(Request $request, $id, $not_id = null) { $id=base64_decode($id); $notifications_update = Auth::user()->unreadNotifications()->where('workflow_document_id', $id)->update(['read_at'=>now()->format('Y-m-d H:i:s')]); if($notifications_update){ if(Session::has('unread_notification_number')){ $notification_number = Session::get('unread_notification_number'); $request->session()->put('unread_notification_number', $notification_number-1); } } $workflow_document = WorkflowDocument::where('id', $id)->first(); $setting = Setting::first(); $workflow_types = WorkflowType::orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::orderBy('id', 'asc')->get(); $senders = Contact::where('status', 1)->where('is_approved', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User::getUserRole()->get(); $documents = WorkflowDocument::orderBy('id', 'desc')->get(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); if($workflow_document){ $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } return view('document-workflows.details', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'senders', 'departments', 'users', 'documents', 'workflow_document', 'document_user')); }else{ Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->back(); } } public function delegate(Request $request, $id) { $type='Incoming'; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $input = $request->all(); if(isset($input['related_documents'])) { $input['related_documents'] = json_encode($input['related_documents']); } $input['registration_number'] = $workflow_document->registration_number; $input['registration_date'] = $workflow_document->registration_date; $input['workflow_type_id'] = $workflow_document->workflow_type_id; $input['workflow_type_name'] = $workflow_document->workflow_type_name; $input['delivery_type_id'] = $workflow_document->delivery_type_id; $input['delivery_type_name'] = $workflow_document->delivery_type_name; $input['topic'] = $workflow_document->topic; $input['additional_notes'] = $workflow_document->additional_notes; $input['priority_id'] = $workflow_document->priority_id; $input['priority_name'] = $workflow_document->priority_name; $input['max_completion_days'] = $workflow_document->max_completion_days; $input['document_type_id'] = $workflow_document->document_type_id; $input['document_type_name'] = $workflow_document->document_type_name; $input['status']='Delegate'; $parent_process_comment = $input['comment']; $input['comment'] = $workflow_document->comment; $saved_data=$workflow_document->fill($input)->save(); if($saved_data) { $parent_process = WorkflowDocumentProcess::where('user_id', Auth::user()->id)->where('workflow_document_id', $workflow_document->id)->orderBy('id', 'desc')->first(); $process_input['parent_id']=$parent_process->id; $process_input['workflow_document_id']=$workflow_document->id; $process_input['start_date']=date('Y-m-d'); if(isset($input['reviewers']) && $input['reviewers']!=''){ $reviewers=explode('-',$input['reviewers']); if($reviewers[0] == 'uid') { $document_user_for_work = User::getUserDocument()->where('users.id', '=', $reviewers[1])->first(); } elseif($reviewers[0] == 'did') { if($workflow_document->workflow_type_id !=2) { $department = Department::where('id',$reviewers[1])->first(); $document_user_for_work = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->where('role_user.role_id', '>', $document_user->role_id) ->orderBy('role_user.role_id', 'asc') ->first(); } else { $department = Department::where('id',$reviewers[1])->first(); $document_user_for_work = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->where('role_user.role_id', '<', $document_user->role_id) ->orderBy('role_user.role_id', 'desc') ->first(); } } } $process_input['status']='P'; $process_input['user_id']=$document_user_for_work->id; $process_input['user_name']=$document_user_for_work->first_name.' '.$document_user_for_work->last_name; $process_input['user_email']=$document_user_for_work->email; $process_input['user_role']=$document_user_for_work->role_name; $document_user_for_work_department = Department::where('id',$document_user_for_work->department_id)->first(); if($document_user_for_work_department) { $process_input['user_department']=$document_user_for_work_department->name; } $process_input['assign_by']=Auth::user()->id; $process_input['assigner_name']=$document_user->first_name.' '.$document_user->last_name; $process_input['assigner_email']=$document_user->email; $process_input['assign_date']=date('Y-m-d H:i:s'); $process_input['assigner_role']=$document_user->role_name; $document_user_department = Department::where('id',$document_user->department_id)->first(); if($document_user_department) { $process_input['assigner_department'] = $document_user_department->name; } $process_save=WorkflowDocumentProcess::create($process_input); if($process_save){ if(isset($parent_process)){ $update_parent_process = WorkflowDocumentProcess::where('id', $parent_process->id)->update(['end_date' => date('Y-m-d'), 'status'=>'D', 'comment' =>$parent_process_comment]); } } $reviewer_input['_token']=$input['_token']; $reviewer_input['workflow_document_id']=$workflow_document->id; $reviewer_input['user_id']=$document_user_for_work->id; $reviewer_input['user_type']='R'; $reviewer_input['user_name']=$document_user_for_work->first_name.' '.$document_user_for_work->last_name; $reviewer_input['user_email']=$document_user_for_work->email; $reviewer_input['user_role']=$document_user_for_work->role_name; $reviewer_input['added_by']=Auth::user()->id; $reviewer_department = Department::where('id',$document_user_for_work->department_id)->first(); if($reviewer_department) { $reviewer_input['user_department']=$reviewer_department->name; } $reviewer_save=WorkflowDocumentUser::create($reviewer_input); if($reviewer_save){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($reviewer_save->user_id), new DocumentNotification($workflow_document->id, "reveiwer", "delegated", $link)); } $prev_supporters = WorkflowDocumentUser::where('workflow_document_id', $workflow_document->id)->where('user_type', 'S')->update(['status'=>'N']); if(isset($input['supporters']) && is_array($input['supporters'])){ foreach($input['supporters'] as $supporter){ $supp_array=explode('-',$supporter); if($supp_array[0] == 'uid') { $supporter_user = User::getUserDocument()->where('users.id', '=', $supp_array[1])->first(); } elseif($supp_array[0] == 'did') { $department = Department::where('id',$supp_array[1])->first(); $supporter_user = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->orderBy('role_user.role_id', 'asc') ->first(); } if(isset($supporter_user)){ $is_exist=WorkflowDocumentUser::where('workflow_document_id', $workflow_document->id)->where('user_id', $supporter_user->id)->first(); if(!isset($is_exist) || empty($is_exist)) { $supporter_input['_token']=$input['_token']; $supporter_input['workflow_document_id']=$workflow_document->id; $supporter_input['user_id']=$supporter_user->id; $supporter_input['process_id']=$process_save->id; $supporter_input['user_type']='S'; $supporter_input['user_name']=$supporter_user->first_name.' '.$supporter_user->last_name; $supporter_input['user_email']=$supporter_user->email; $supporter_input['user_role']=$supporter_user->role_name; $supporter_input['added_by']=Auth::user()->id; $supporter_department = Department::where('id',$supporter_user->department_id)->first(); if($supporter_department) { $supporter_input['user_department']=$supporter_department->name; } $supporter_save=WorkflowDocumentUser::create($supporter_input); if($supporter_save) { $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($supporter_save->user_id), new DocumentNotification($workflow_document->id, "supporter", "delegated", $link)); } }else{ $exist_supporters = WorkflowDocumentUser::where('workflow_document_id', $workflow_document->id)->where('user_type', 'S')->where('user_id', $supporter_user->id)->update(['status'=>'Y']); } } } } Session::flash('success_message', __('Document workflow has been updated successfully')); return redirect()->back(); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->back(); } } public function getDelegateDocument($id) { $type='Incoming'; $id=base64_decode($id); $workflowDocumentProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->orderBy('id', 'asc')->get(); $workflow_document = WorkflowDocument::where('id', $id)->first(); if($workflow_document){ $type_names=json_decode($workflow_document->workflow_type_name, true); if(isset($type_names['en'])) $type=$type_names['en']; $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $setting = Setting::first(); $users = User::getUserRole()->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); return view('document-workflows.delegate_document', compact('workflow_document', 'type', 'users', 'departments', 'document_user', 'setting')); }else{ Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->back(); } } public function search(Request $request, $type) { $input = $request->all(); $search_val['search']=$input['search']; $search_val['reg_date']=$input['reg_date']; $search_val['creator']=$input['creator']; $search_val['status']=$input['status'] ?? '0'; $request->session()->put('search_val', $search_val); return redirect()->route('documents', $type); } private function my_search($search_val, $wtype=1) { $a = WorkflowDocument::where('is_deleted', 0); $between_date = null; $contact_ids = null; if(isset($search_val['reg_date'])) { $between_date = array_map('trim', preg_split('/\s*:\s*/', $search_val['reg_date'])); $between_date[0] = \Carbon\Carbon::createFromFormat('d-m-Y', $between_date[0])->format('Y-m-d'); $between_date[1] = \Carbon\Carbon::createFromFormat('d-m-Y', $between_date[1])->format('Y-m-d'); $a = $a->whereBetween('registration_date', [$between_date[0], $between_date[1]]); } if(isset($search_val['search']) && strlen($search_val['search'])>0) { $document_ids = WorkflowDocumentSender::where('contact_organization_name', 'REGEXP', $search_val['search'])->get(['workflow_document_id'])->pluck('workflow_document_id')->toArray(); $a = $a->where(function($query) use($search_val, $document_ids){ $query->where('registration_number', 'REGEXP', $search_val['search']) ->orWhere('sender_letter_number', 'REGEXP', $search_val['search']) ->orWhere('topic', 'REGEXP', $search_val['search']) ->orWhereIn('id', $document_ids); }); } if(isset($search_val['status']) && in_array($search_val['status'], [1, 2])) { $st = 'Approved'; $st = ($wtype == 1) ? 'Complete' : $st; $not = ($search_val['status'] == 1) ? '=' : '!='; $a = $a->where('status', $not, $st); } if(isset($search_val['creator']) && ($search_val['creator'] > 0)) { $a = $a->where('creator_id', $search_val['creator']); } return $a; } public function index(Request $request, $type) { $setting = Setting::first(); $workflow_type = WorkflowType::where('name', 'like', '%'.$type.'%')->first(); $users = User::getUserRole()->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $limit_val = (isset($setting->data_limit_per_page) && $setting->data_limit_per_page > 0) ? $setting->data_limit_per_page : 10; $search_val = null; if($request->session()->has('search_val')){ $search_val = $request->session()->get('search_val'); // $request->session()->forget('search_val'); } if(check_permissions(1) === true) { $workflow_documents = $this->my_search($search_val, $workflow_type->id)->where('workflow_type_id', '=', $workflow_type->id)->orderByDesc('updated_at', 'created_at'); $workflow_documents = $workflow_documents->paginate($limit_val)->appends([ 'search' => $search_val['search'] ?? '', 'reg_date' => $search_val['reg_date'] ?? '', 'creattor' => $search_val['creator'] ?? '', 'status' => $search_val['status'] ?? '0', ]); } else { $creator = Auth::user()->id; $document_ids = WorkflowDocumentUser::where('user_id', $creator)->where('status', 'Y')->get(['workflow_document_id'])->pluck('workflow_document_id')->toArray(); $workflow_documents = $this->my_search($search_val, $workflow_type->id) ->where('workflow_type_id', '=', $workflow_type->id) ->where(function($query) use($creator, $document_ids){ $query->orWhere('creator_id', $creator) ->orWhereIn('id', $document_ids); }) ->orderByDesc('updated_at', 'created_at'); $workflow_documents = $workflow_documents->paginate($limit_val)->appends([ 'search' => $search_val['search'] ?? '', 'reg_date' => $search_val['reg_date'] ?? '', 'creattor' => $search_val['creator'] ?? '', 'status' => $search_val['status'] ?? '0', ]); } // dd($search_val); $document_user = User::getUserRole()->where('users.id', '=', Auth::user()->id)->first(); if($type=='Outgoing') return view('document-workflows.outgoing-list', compact('workflow_documents', 'type', 'document_user', 'setting', 'search_val', 'users', 'departments')); elseif($type=='Internal') return view('document-workflows.internal-list', compact('workflow_documents', 'type', 'document_user', 'setting', 'search_val', 'users', 'departments')); else return view('document-workflows.index', compact('workflow_documents', 'type', 'document_user', 'setting', 'search_val', 'users', 'departments')); } public function relatedDocuments($id) { $type='Incoming'; $id=base64_decode($id); $workflowDocumentProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->orderBy('id', 'asc')->get(); $workflow_document = WorkflowDocument::where('id', $id)->first(); if($workflow_document){ $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } $type_names=json_decode($workflow_document->workflow_type_name, true); if(isset($type_names['en'])) $type=$type_names['en']; $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $setting = Setting::first(); return view('document-workflows.related_documents', compact('workflow_document', 'type', 'document_user', 'setting')); }else{ Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->back(); } } public function getRelatedDocuments(Request $request) { $setting = Setting::first(); $limit_val = (isset($setting->data_limit_per_page) && $setting->data_limit_per_page > 0) ? $setting->data_limit_per_page : 10; if($request->ajax()) { $search = $request->search ?? ''; $documents = WorkflowDocument::where('is_deleted', 0) ->where(function($query) use($search){ $query->orWhere('registration_number', 'REGEXP', $search) ->orWhere('topic', 'REGEXP', $search); }) ->paginate($limit_val, ['id', 'registration_number', 'topic'])->appends([ 'search' => $search ]); return response()->json($documents); } } public function workflow($id) { $replyWorkflowDocumentProcess=[]; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); if(isset($workflow_document)){ if($workflow_document->is_workflow_free ==1){ Session::flash('error_message', __('Workflow is not available for this document.')); return redirect()->back(); } if($workflow_document->workflow_type_id == 2 && $workflow_document->reply_for > 0){ $reply_workflow_document = $workflow_document; $workflow_document = WorkflowDocument::where('id', $reply_workflow_document->reply_for)->first(); $workflowDocumentProcess=WorkflowDocumentProcess::where('workflow_document_id', $workflow_document->id)->orderBy('id', 'asc')->get(); if(isset($reply_workflow_document)) { $replyWorkflowDocumentProcess=WorkflowDocumentProcess::where('workflow_document_id', $reply_workflow_document->id)->orderBy('id', 'asc')->get(); } $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } }else{ $workflowDocumentProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->orderBy('id', 'asc')->get(); $reply_workflow_document = WorkflowDocument::where('reply_for', $id)->first(); if(isset($reply_workflow_document)) { $replyWorkflowDocumentProcess=WorkflowDocumentProcess::where('workflow_document_id', $reply_workflow_document->id)->orderBy('id', 'asc')->get(); } $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } } $comments = Comment::where('workflow_document_id', $id)->orderBy('id', 'desc')->get(); return view('document-workflows.workflow', compact('workflowDocumentProcess', 'workflow_document', 'replyWorkflowDocumentProcess', 'comments')); }else{ Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->back(); } } public function getNextRegNumber($type) { return response()->json(RegNumber::getNextRegNumber(auth()->user()->id, $type)); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $data = request()->all(); if(isset($data['registration_date'])) $data['registration_date'] = \Carbon\Carbon::createFromFormat('Y-m-d', $data['registration_date'])->format('d-m-Y'); if(isset($data['contact_id'])) $data['contact_id'] = Contact::findOrFail($data['contact_id'])->organization_name; if(check_permissions(1) !== true) { $type='Incoming'; Session::flash('error_message', __('You are not authorized to create a document workflow!')); return redirect()->route('documents',$type); } $setting = Setting::first(); $workflow_types = WorkflowType::where('status', 1)->orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::where('status', 1)->where('incoming', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User::getUserRole()->get(); return view('document-workflows.create', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'departments', 'users', 'data')); } public function createOutgoing() { $setting = Setting::first(); $workflow_types = WorkflowType::orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::where('status', 1)->where('outgoing', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User:: getUserRole()->get(); return view('document-workflows.create_outging', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'departments','users')); } public function createInternal() { $setting = Setting::first(); $workflow_types = WorkflowType::orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::where('status', 1)->where('internal', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User::getUserRole()->get(); return view('document-workflows.create_internal', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'departments','users')); } public function createWorkflowfreeOutgoing(Request $request) { $registration_number =''; $reset_flag=false; $setting = Setting::first(); $workflow_types = WorkflowType::orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::where('status', 1)->where('outgoing', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User::getUserRole()->get(); return view('document-workflows.create_workflow_free_outgoing', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'departments','users')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function ddFilesStore(Request $request) { $input=$request->all(); if(isset($input['files']) && !empty($input['files'])) { if($request->session()->has('documents')){ $documents = $request->session()->get('documents'); $documents->push($input['files']); print_r($documents); } else{ $documents = collect([$input['files']]); $request->session()->put('documents', $documents); } } print_r($request->session()->get('documents')); exit; } public function store(Request $request) { $type='Incoming'; $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $input = $request->all(); if(isset($input['is_workflow_free']) && $input['is_workflow_free']==1) { $type = "Outgoing"; $input['registration_number'] =(isset($input['registration_number']) && strlen($input['registration_number'])>4) ? $input['registration_number'] : RegNumber::getNextRegNumber(auth()->user()->id, RegNumber::OUT); } elseif(isset($input['workflow_type_id']) && $input['workflow_type_id']== '2') { $type = "Outgoing"; $input['temporary_registration_number'] =(isset($input['registration_number']) && strlen($input['registration_number'])>4) ? $input['registration_number'] : RegNumber::getNextRegNumber(auth()->user()->id, RegNumber::TMP); } elseif(isset($input['workflow_type_id']) && $input['workflow_type_id']== '3') { $type = "Internal"; $input['registration_number']=(isset($input['registration_number']) && strlen($input['registration_number'])>4) ? $input['registration_number'] : RegNumber::getNextRegNumber(auth()->user()->id, RegNumber::ITR); } else { $input['registration_number']= (isset($input['registration_number']) && strlen($input['registration_number'])>4) ? $input['registration_number'] : RegNumber::getNextRegNumber(auth()->user()->id, RegNumber::INC); } $place_of_the_documents='documents/'.date('Y').'/'.Auth::user()->id; (isset($input['is_workflow_free']) && $input['is_workflow_free']==1) ? $input['status']='Approved' : $input['status']='Pending'; $input['place_of_the_documents']=$place_of_the_documents; $input['registration_date']=date('Y-m-d'); $input['creator_id']=Auth::user()->id; $input['creator_name']=$document_user->first_name.' '.$document_user->last_name; if(isset($input['related_documents'])) { $input['related_documents'] = json_encode($input['related_documents']); } if(isset($input['workflow_type_id']) && $input['workflow_type_id'] > 0){ $workflow_type = WorkflowType::where('id', $input['workflow_type_id'])->first(); $input['workflow_type_name'] = $workflow_type->name; $type_names=json_decode($workflow_type->name, true); if(isset($type_names['en'])) $type = $type_names['en']; } if(isset($input['priority_id']) && $input['priority_id'] > 0){ $priority = Priority::where('id', $input['priority_id'])->first(); $input['priority_name'] = $priority->name; $input['max_completion_days'] = $priority->completion_day; } if(isset($input['delivery_type_id']) && $input['delivery_type_id'] > 0){ $delivery_type = DeliveryType::where('id', $input['delivery_type_id'])->first(); $input['delivery_type_name'] = $delivery_type->name; } if(isset($input['document_type_id']) && $input['document_type_id'] > 0){ $document_type = DocumentType::where('id', $input['document_type_id'])->first(); $input['document_type_name'] = $document_type->name; } if(isset($input['due_date']) && $input['due_date'] != "") $input['due_date'] = Carbon\Carbon::createFromFormat('d-m-Y', $input['due_date'])->format('Y-m-d'); if(isset($input['sender_letter_date']) && $input['sender_letter_date'] != "") $input['sender_letter_date'] = Carbon\Carbon::createFromFormat('d-m-Y', $input['sender_letter_date'])->format('Y-m-d'); $saved_data=WorkflowDocument::create($input); if($saved_data) { RegNumber::updateRegNumber($input['registration_number'] ?? $input['temporary_registration_number']); $process_input['_token']=$input['_token']; $process_input['workflow_document_id']=$saved_data->id; $process_input['start_date']=date('Y-m-d'); if(isset($input['reviewers']) && $input['reviewers']!=''){ $reviewers=explode('-',$input['reviewers']); if($reviewers[0] == 'uid') { $document_user_for_work = User::getUserDocument()->where('users.id', '=', $reviewers[1])->first(); } elseif($reviewers[0] == 'did') { $department = Department::where('id',$reviewers[1])->first(); $document_user_for_work = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->orderBy('role_user.role_id', 'asc') ->first(); } } if(!isset($document_user_for_work) || empty($document_user_for_work)) { $document_user_for_work = User::getUserDocument()->where('roles.id', '=', 1)->first(); } $condition = []; if($document_user_for_work->id != ""): array_push($condition, ['absents.user_id', '=', $document_user_for_work->id]); $absent_date = date('Y-m-d'); array_push($condition, ['absents.start_date', '<=', $absent_date]); array_push($condition, ['absents.end_date', '>=', $absent_date]); $assign_absences = DB::table('absents') ->join('assign_absences', 'absents.id', '=', 'assign_absences.absent_id') ->select('assign_absences.*') ->where($condition) ->first(); if($assign_absences): if(isset($document_user_for_work)){ $is_exist=WorkflowDocumentUser::where('workflow_document_id', $saved_data->id)->where('user_id', $document_user_for_work->id)->first(); if(!isset($is_exist) || empty($is_exist)) { $supporter_input['_token']=$input['_token']; $supporter_input['workflow_document_id']=$saved_data->id; $supporter_input['user_id']=$document_user_for_work->id; $supporter_input['process_id']=0; $supporter_input['user_type']='S'; $supporter_input['user_name']=$document_user_for_work->first_name.' '.$document_user_for_work->last_name; $supporter_input['user_email']=$document_user_for_work->email; $supporter_input['user_role']=$document_user_for_work->role_name; $supporter_input['added_by']=Auth::user()->id; $supporter_department = Department::where('id',$document_user_for_work->department_id)->first(); if($supporter_department) { $supporter_input['user_department']=$supporter_department->name; } $supporter_save=WorkflowDocumentUser::create($supporter_input); if($supporter_save) { $link = route('details', base64_encode($saved_data->id)); Notification::send(User::findOrFail($supporter_save->user_id), new DocumentNotification($saved_data->id, "supporter", "created", $link)); } } } $document_user_for_work = User::join('role_user', 'users.id', '=', 'role_user.user_id') ->join('roles', 'role_user.role_id', '=', 'roles.id') ->where('users.id', '=', $assign_absences->user_id) ->select('users.*', 'roles.name as role_name', 'roles.id as role_id', 'users.id as id') ->first(); endif; endif; if(isset($input['is_workflow_free']) && $input['is_workflow_free']==1){ $process_input['status']='A'; }else{ $process_input['status']='P'; } $process_input['user_id']=$document_user_for_work->id; $process_input['user_name']=$document_user_for_work->first_name.' '.$document_user_for_work->last_name; $process_input['user_email']=$document_user_for_work->email; $process_input['user_role']=$document_user_for_work->role_name; $document_user_for_work_department = Department::where('id',$document_user_for_work->department_id)->first(); if($document_user_for_work_department) { $process_input['user_department']=$document_user_for_work_department->name; } $process_input['assign_by']=Auth::user()->id; $process_input['assigner_name']=$document_user->first_name.' '.$document_user->last_name; $process_input['assigner_email']=$document_user->email; $process_input['assign_date']=$input['registration_date'] . ' ' . date('H:i:s'); $process_input['assigner_role']=$document_user->role_name; $document_user_department = Department::where('id',$document_user->department_id)->first(); if($document_user_department) { $process_input['assigner_department']=$document_user_department->name; } $process_save=WorkflowDocumentProcess::create($process_input); if($assign_absences): $supporter_update = WorkflowDocumentUser::where('workflow_document_id', $saved_data->id)->where('user_type','S')->where('process_id', 0)->update(['process_id' => $process_save->id]); endif; $reviewer_input['_token']=$input['_token']; $reviewer_input['workflow_document_id']=$saved_data->id; $reviewer_input['user_id']=$document_user_for_work->id; $reviewer_input['process_id']=$process_save->id; $reviewer_input['user_type']='R'; $reviewer_input['user_name']=$document_user_for_work->first_name.' '.$document_user_for_work->last_name; $reviewer_input['user_email']=$document_user_for_work->email; $reviewer_input['user_role']=$document_user_for_work->role_name; $reviewer_input['added_by']=Auth::user()->id; $reviewer_department = Department::where('id',$document_user_for_work->department_id)->first(); if($reviewer_department) { $reviewer_input['user_department']=$reviewer_department->name; } $reviewer_save=WorkflowDocumentUser::create($reviewer_input); if($reviewer_save) { $link = route('details', base64_encode($saved_data->id)); Notification::send(User::findOrFail($reviewer_save->user_id), new DocumentNotification($saved_data->id, "reveiwer", "created", $link)); } if(isset($input['supporters']) && is_array($input['supporters'])){ foreach($input['supporters'] as $supporter){ $supp_array=explode('-',$supporter); if($supp_array[0] == 'uid') { $supporter_user = User::getUserDocument()->where('users.id', '=', $supp_array[1])->first(); } elseif($supp_array[0] == 'did') { $department = Department::where('id',$supp_array[1])->first(); $supporter_user = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->orderBy('role_user.role_id', 'asc') ->first(); } if(isset($supporter_user)){ $is_exist=WorkflowDocumentUser::where('workflow_document_id', $saved_data->id)->where('user_id', $supporter_user->id)->first(); if(!isset($is_exist) || empty($is_exist)) { $supporter_input['_token']=$input['_token']; $supporter_input['workflow_document_id']=$saved_data->id; $supporter_input['user_id']=$supporter_user->id; $supporter_input['process_id']=$process_save->id; $supporter_input['user_type']='S'; $supporter_input['user_name']=$supporter_user->first_name.' '.$supporter_user->last_name; $supporter_input['user_email']=$supporter_user->email; $supporter_input['user_role']=$supporter_user->role_name; $supporter_input['added_by']=Auth::user()->id; $supporter_department = Department::where('id',$supporter_user->department_id)->first(); if($supporter_department) { $supporter_input['user_department']=$supporter_department->name; } $supporter_save=WorkflowDocumentUser::create($supporter_input); if($supporter_save) { $link = route('details', base64_encode($saved_data->id)); Notification::send(User::findOrFail($supporter_save->user_id), new DocumentNotification($saved_data->id, "supporter", "created", $link)); } }else{ $exist_supporters = WorkflowDocumentUser::where('workflow_document_id', $saved_data->id)->where('user_type', 'S')->where('user_id', $supporter_user->id)->update(['status'=>'Y']); } } } } if(isset($input['contact_id']) && is_array($input['contact_id'])){ foreach($input['contact_id'] as $contact){ $contact_user = Contact::where('id', '=', $contact)->first(); if(isset($contact_user)){ $contact_input['_token']=$input['_token']; $contact_input['workflow_document_id']=$saved_data->id; $contact_input['contact_id']=$contact_user->id; $contact_input['contact_organization_name']=$contact_user->organization_name; $contact_input['contact_alternative_name']=$contact_user->alternative_name; $contact_input['contact_address']=$contact_user->address; $contact_input['contact_telephone_number']=$contact_user->telephone_number; $contact_save=WorkflowDocumentSender::create($contact_input); } } } if(isset($input['file_ids']) && $input['file_ids']!='') { $file_ids_array = explode(';',$input['file_ids']); if(is_array($file_ids_array) && !empty($file_ids_array)){ foreach($file_ids_array as $key => $file_id){ $file = WorkflowDocumentFile::where('id',$file_id)->first(); if(isset($file)) { $update_data = WorkflowDocumentFile::where('id',$file_id)->update([ 'is_temp'=>0, 'is_signed'=>(isset($input['is_workflow_free']) && $input['is_workflow_free']==1 ? 1 : 0), 'process_id'=>$process_save->id, 'workflow_document_id'=>$saved_data->id ]); } } } } Session::flash('success_message', __('Document has been added successfully')); return redirect()->route('documents',$type); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('create_document_workflow'); } } public function view($id) { $id=base64_decode($id); $workflow_document = WorkflowDocument::where('id', $id)->first(); $setting = Setting::first(); $workflow_types = WorkflowType::orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::orderBy('id', 'asc')->get(); $senders = Contact::where('status', 1)->where('is_approved', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User::getUserRole()->get(); if($workflow_document){ $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } return view('document-workflows.view', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'senders', 'departments', 'users', 'workflow_document')); }else{ Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->back(); } } public function reject($id) { $id=base64_decode($id); $workflow_document = WorkflowDocument::where('id', $id)->update(['is_rejected'=>1]); if($workflow_document) { $outgoing_workflow_process = WorkflowDocumentProcess::where('workflow_document_id', '=', $id)->where('user_id', '=', Auth::user()->id)->orderBy('id', 'desc')->update(['end_date' => date('Y-m-d'), 'status' => 'RE']); $users = WorkflowDocumentUser::where('workflow_document_id', '=', $id) ->where('status', 'Y') ->get(); $link = route('details', base64_encode($id)); if(!empty($users)) { foreach($users as $user){ Notification::send(User::findOrFail($user->user_id), new DocumentNotification($workflow_document->id, "all", "rejected", $link)); } } Notification::send(User::findOrFail($workflow_document->creator_id), new DocumentNotification($workflow_document->id, "creator", "rejected", $link)); Session::flash('success_message', __('Document workflow has been updated successfully')); return redirect()->back(); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->back(); } } public function documentReply($id) { $id=base64_decode($id); $workflow_document = WorkflowDocument::where('id', $id)->first(); $setting = Setting::first(); $priorities = Priority::orderBy('id', 'asc')->get(); $document_types = DocumentType::orderBy('id', 'asc')->get(); $workflow_process = WorkflowDocumentProcess::where('workflow_document_id', '=', $workflow_document->id)->where('user_id', '=', Auth::user()->id)->orderBy('id', 'desc')->first(); $approver = User::getUserDocument() ->where('users.id', '=', $workflow_process->assign_by) ->first(); $users = User::getUserRole()->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $approver_department = Department::where('id',$approver->department_id)->first(); return view('document-workflows.reply', compact('setting', 'priorities', 'document_types', 'workflow_document', 'approver', 'users', 'departments')); } public function approval($id) { $id=base64_decode($id); $workflow_document = WorkflowDocument::where('id', $id)->first(); $setting = Setting::first(); $priorities = Priority::orderBy('id', 'asc')->get(); $document_types = DocumentType::orderBy('id', 'asc')->get(); $senders = Contact::where('status', 1)->where('is_approved', 1)->orderBy('id', 'asc')->get(); $workflow_process = WorkflowDocumentProcess::where('workflow_document_id', '=', $workflow_document->id)->where('user_id', '=', Auth::user()->id)->orderBy('id', 'desc')->first(); $approver = User::getUserDocument()->where('users.id', '=', $workflow_process->assign_by)->first(); $users = User::getUserRoles()->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $approver_department = Department::where('id',$approver->department_id)->first(); $documents = WorkflowDocument::orderBy('id', 'desc')->get(); return view('document-workflows.approval', compact('setting', 'priorities', 'document_types', 'senders', 'documents', 'workflow_document', 'approver', 'users', 'departments')); } public function storeReply(Request $request, $id) { $type='Outgoing'; $id=base64_decode($id); $related_document = WorkflowDocument::findOrFail($id); $data=false; $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $input = $request->all(); $place_of_the_documents='documents/'.date('Y').'/'.Auth::user()->id; $workflow_process = WorkflowDocumentProcess::where('workflow_document_id', '=', $related_document->id)->where('user_id', '=', Auth::user()->id)->orderBy('id', 'desc')->first(); $update_process = WorkflowDocumentProcess::where('id', $workflow_process->id)->update(['end_date' => date('Y-m-d'), 'status' => 'SA']); $approver = User::getUserDocument()->where('users.id', '=', $workflow_process->assign_by)->first(); $approver_department = Department::where('id',$approver->department_id)->first(); $temporary_registration_number = RegNumber::getNextRegNumber(auth()->user()->id, RegNumber::TMP); $input['status']='Pending'; $input['place_of_the_documents']=$place_of_the_documents; $input['temporary_registration_number']=$temporary_registration_number; $input['registration_date']=date('Y-m-d'); $input['creator_id']=Auth::user()->id; $input['creator_name']=$document_user->first_name.' '.$document_user->last_name; if(isset($input['related_documents'])) { $input['related_documents'] = json_encode($input['related_documents']); } $input['reply_for'] = $related_document->id; if(isset($input['workflow_type_id']) && $input['workflow_type_id'] > 0){ $workflow_type = WorkflowType::where('id', $input['workflow_type_id'])->first(); $input['workflow_type_name'] = $workflow_type->name; $type_names=json_decode($workflow_type->name, true); if(isset($type_names['en'])) $type = $type_names['en']; } if(isset($input['priority_id']) && $input['priority_id'] > 0){ $priority = Priority::where('id', $input['priority_id'])->first(); $input['priority_name'] = $priority->name; $input['max_completion_days'] = $priority->completion_day; } if(isset($input['document_type_id']) && $input['document_type_id'] > 0){ $document_type = DocumentType::where('id', $input['document_type_id'])->first(); $input['document_type_name'] = $document_type->name; } if(isset($input['due_date']) && $input['due_date'] != "") $input['due_date'] = Carbon\Carbon::createFromFormat('d-m-Y', $input['due_date'])->format('Y-m-d'); $saved_data=WorkflowDocument::create($input); if($saved_data) { RegNumber::updateRegNumber($input['registration_number'] ?? $input['temporary_registration_number']); $update_process = WorkflowDocumentProcess::where('id', $workflow_process->id)->update(['end_date' => date('Y-m-d'), 'comment' =>$input['comment'], 'status' => 'SA']); $process_input['_token']=$input['_token']; $process_input['workflow_document_id']=$saved_data->id; $process_input['start_date']=date('Y-m-d'); $process_input['status']='P'; $process_input['user_id']=$approver->id; $process_input['user_name']=$approver->first_name.' '.$approver->last_name; $process_input['user_email']=$approver->email; $process_input['user_role']=$approver->role_name; if($approver_department) { $process_input['user_department']=$approver_department->name; } $process_input['assign_by']=Auth::user()->id; $process_input['assigner_name']=$document_user->first_name.' '.$document_user->last_name; $process_input['assigner_email']=$document_user->email; $process_input['assign_date']=$input['registration_date'] . ' ' . date('H:i:s'); $process_input['assigner_role']=$document_user->role_name; $document_user_department = Department::where('id',$document_user->department_id)->first(); if($document_user_department) { $process_input['assigner_department']=$document_user_department->name; } $process_save=WorkflowDocumentProcess::create($process_input); $reviewer_input['_token']=$input['_token']; $reviewer_input['workflow_document_id']=$saved_data->id; $reviewer_input['user_id']=$approver->id; $reviewer_input['process_id']=$process_save->id; $reviewer_input['user_type']='R'; $reviewer_input['user_name']=$approver->first_name.' '.$approver->last_name; $reviewer_input['user_email']=$approver->email; $reviewer_input['user_role']=$approver->role_name; $reviewer_input['added_by']=Auth::user()->id; if($approver_department) { $reviewer_input['user_department']=$approver_department->name; } $reviewer_save=WorkflowDocumentUser::create($reviewer_input); if($reviewer_save) { $link = route('details', base64_encode($saved_data->id)); Notification::send(User::findOrFail($reviewer_save->user_id), new DocumentNotification($saved_data->id, "reveiwer", "created", $link)); } if(isset($input['contact_id']) && is_array($input['contact_id'])){ foreach($input['contact_id'] as $contact){ $contact_user = Contact::where('id', '=', $contact)->first(); if(isset($contact_user)){ $contact_input['_token']=$input['_token']; $contact_input['workflow_document_id']=$saved_data->id; $contact_input['contact_id']=$contact_user->id; $contact_input['contact_organization_name']=$contact_user->organization_name; $contact_input['contact_alternative_name']=$contact_user->alternative_name; $contact_input['contact_address']=$contact_user->address; $contact_input['contact_telephone_number']=$contact_user->telephone_number; $contact_save=WorkflowDocumentSender::create($contact_input); } } } if(isset($input['supporters']) && is_array($input['supporters'])){ foreach($input['supporters'] as $supporter){ $supp_array=explode('-',$supporter); if($supp_array[0] == 'uid') { $supporter_user = User::getUserDocument()->where('users.id', '=', $supp_array[1])->first(); } elseif($supp_array[0] == 'did') { $department = Department::where('id',$supp_array[1])->first(); $supporter_user = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->orderBy('role_user.role_id', 'asc') ->first(); } if(isset($supporter_user)){ $is_exist=WorkflowDocumentUser::where('workflow_document_id', $saved_data->id)->where('user_id', $supporter_user->id)->first(); if(!isset($is_exist) || empty($is_exist)) { $supporter_input['_token']=$input['_token']; $supporter_input['workflow_document_id']=$saved_data->id; $supporter_input['user_id']=$supporter_user->id; $supporter_input['process_id']=$process_save->id; $supporter_input['user_type']='S'; $supporter_input['user_name']=$supporter_user->first_name.' '.$supporter_user->last_name; $supporter_input['user_email']=$supporter_user->email; $supporter_input['user_role']=$supporter_user->role_name; $supporter_input['added_by']=Auth::user()->id; $supporter_department = Department::where('id',$supporter_user->department_id)->first(); if($supporter_department) { $supporter_input['user_department']=$supporter_department->name; } $supporter_save=WorkflowDocumentUser::create($supporter_input); if($supporter_save) { $link = route('details', base64_encode($saved_data->id)); Notification::send(User::findOrFail($supporter_save->user_id), new DocumentNotification($saved_data->id, "supporter", "created", $link)); } } } } } if(isset($input['file_ids']) && $input['file_ids']!='') { $file_ids_array = explode(';',$input['file_ids']); if(is_array($file_ids_array) && !empty($file_ids_array)){ foreach($file_ids_array as $key => $file_id){ $file = WorkflowDocumentFile::where('id',$file_id)->first(); if(isset($file)) { $update_data = WorkflowDocumentFile::where('id',$file_id)->update([ 'is_temp'=>0, 'is_signed'=>(isset($input['is_workflow_free']) && $input['is_workflow_free']==1 ? 1 : 0), 'process_id'=>$process_save->id, 'workflow_document_id'=>$saved_data->id ]); } } } } Session::flash('success_message', __('Document has been updated successfully')); return redirect()->route('documents',$type); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('create_document_workflow'); } } public function storeApproval(Request $request, $id) { $type='Outgoing'; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); $type = ($workflow_document->workflow_type_id == 3) ? 'Internal' : $type; $place_of_the_documents='documents/'.date('Y').'/'.Auth::user()->id; $data=false; $new_version = 1; $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $related_documents = json_decode($workflow_document->related_documents, true); if (!empty($related_documents)){ foreach($related_documents as $key=> $related_document_id){ $related_document = WorkflowDocument::where('id', $related_document_id)->first(); break; } } $outgoing_workflow_process = WorkflowDocumentProcess::where('workflow_document_id', '=', $workflow_document->id)->where('user_id', '=', Auth::user()->id)->orderBy('id', 'desc')->first(); $userAsSupporter = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id)->where('user_type','=','S')->where('status', '=', 'Y')->where('user_id', '=', Auth::user()->id)->first(); $input = $request->all(); if($userAsSupporter !== null) { if(isset($input['is_approved']) && $input['is_approved'] == 1) { $supporter_action='A'; $is_approved='Y'; } else { $supporter_action='N'; $is_approved='N'; } $update_process_user = WorkflowDocumentUser::where('id', $userAsSupporter->id)->update(['is_approved' => $is_approved]); $process_input['_token']=$input['_token']; $process_input['workflow_document_id']=$workflow_document->id; $process_input['start_date']=date('Y-m-d'); $process_input['user_id']=$userAsSupporter->user_id; $process_input['user_type']='S'; $process_input['supporter_action']= $supporter_action; $process_input['user_name']=$userAsSupporter->user_name; $process_input['user_email']=$userAsSupporter->user_email; $process_input['user_role']=$userAsSupporter->user_role; $process_input['user_department']=$userAsSupporter->user_department; $process_input['comment']=$input['comment']; $process_input['assign_date']=date('Y-m-d H:i:s'); $process_save=WorkflowDocumentProcess::create($process_input); $data=true; } elseif($workflow_document->creator_id == Auth::user()->id) { $lastProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->where('user_id', Auth::user()->id)->where('status', 'P')->orderBy('id', 'desc')->first(); if(empty($lastProcess)){ $lastProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->where('user_id', Auth::user()->id)->orderBy('id', 'desc')->first(); } $update_process = WorkflowDocumentProcess::where('id', $outgoing_workflow_process->id)->update(['end_date' => date('Y-m-d'), 'status'=>'SA', 'comment' =>$input['comment']]); $process_input['_token']=$input['_token']; $process_input['parent_id']=$outgoing_workflow_process->id; $process_input['workflow_document_id']=$workflow_document->id; $process_input['start_date']=date('Y-m-d'); $process_input['user_id']=$lastProcess->assign_by; $process_input['user_name']=$lastProcess->assigner_name; $process_input['user_email']=$lastProcess->assigner_email; $process_input['user_role']=$lastProcess->assigner_role; $process_input['user_department']=$lastProcess->assigner_department; $process_input['assign_by']=$lastProcess->user_id; $process_input['assigner_name']=$lastProcess->user_name; $process_input['assigner_email']=$lastProcess->user_email; $process_input['assign_date']=date('Y-m-d H:i:s'); $process_input['assigner_role']=$lastProcess->user_role; $process_input['assigner_department'] = $lastProcess->user_department; $process_save=WorkflowDocumentProcess::create($process_input); $reviewer_input['_token']=$input['_token']; $reviewer_input['workflow_document_id']=$workflow_document->id; $reviewer_input['user_id']=$lastProcess->assign_by; $reviewer_input['process_id']=$process_save->id; $reviewer_input['user_type']='R'; $reviewer_input['user_name']=$lastProcess->assigner_name; $reviewer_input['user_email']=$lastProcess->assigner_email; $reviewer_input['user_role']=$lastProcess->assigner_role; $reviewer_input['user_department']=$lastProcess->assigner_department; $reviewer_input['added_by']=Auth::user()->id; $reviewer_save=WorkflowDocumentUser::create($reviewer_input); $last_scanned_document_version=WorkflowDocumentFile::where('workflow_document_id','=',$workflow_document->id)->orderBy('id', 'desc')->first(); if(isset($last_scanned_document_version) && $last_scanned_document_version->version > 0) { $update_last_scanned_document_version = WorkflowDocumentFile::where('workflow_document_id','=',$workflow_document->id)->update(['status' => 'N']); $new_version = ($last_scanned_document_version->version + 1); } $data=true; } elseif(isset($input['is_approved']) && $input['is_approved'] == 1) { if($document_user->role_id ==1 || (isset($input['finalize']) && $input['finalize']==1)) { $update_process = WorkflowDocumentProcess::where('id', $outgoing_workflow_process->id)->update(['end_date' => date('Y-m-d'), 'is_approved'=>'1', 'status'=>'A', 'comment' =>$input['comment']]); if(isset($workflow_document->reply_for) && $workflow_document->reply_for > 0){ $update_reply_for = WorkflowDocument::where('id', $workflow_document->reply_for)->update(['status'=>'Complete']); } if($workflow_document->workflow_type_id == 2) { $registration_number = RegNumber::getNextRegNumber(auth()->user()->id, RegNumber::OUT); $documentUpdate = WorkflowDocument::where('id', $workflow_document->id)->update(['registration_number' => $registration_number, 'status'=>'Approved']); RegNumber::updateRegNumber($registration_number); } if($workflow_document->workflow_type_id == 3) { $documentUpdate = WorkflowDocument::where('id', $workflow_document->id)->update(['status'=>'Approved']); RegNumber::updateRegNumber($workflow_document->registration_number); } $last_scanned_document_version=WorkflowDocumentFile::where('workflow_document_id','=',$workflow_document->id)->orderBy('id', 'desc')->first(); if(isset($last_scanned_document_version) && $last_scanned_document_version->version > 0) { $update_last_scanned_document_version = WorkflowDocumentFile::where('workflow_document_id','=',$workflow_document->id)->update(['status' => 'N']); $new_version = ($last_scanned_document_version->version + 1); } if($workflow_document){ $link = route('details', base64_encode($id)); Notification::send(User::findOrFail($workflow_document->creator_id), new DocumentNotification($workflow_document->id, "creator", "approved", $link)); $users = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('status', 'Y') ->get(); if(!empty($users)){ foreach($users as $user){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($user->user_id), new DocumentNotification($workflow_document->id, "reveiwer", "approved", $link)); } } } } else { if(isset($workflow_document->reply_for) && $workflow_document->reply_for > 0) { // $related_document_workflow_process = WorkflowDocumentProcess::where('workflow_document_id', '=', $workflow_document->reply_for)->where('user_id', '=', Auth::user()->id)->orderBy('id', 'desc')->first(); $related_document_workflow_process = WorkflowDocumentProcess::where('workflow_document_id', '=', $workflow_document->reply_for)->orderBy('id', 'desc')->first(); $approver_id = $related_document_workflow_process->assign_by; $approver = User::getUserDocument()->where('users.id', '=', $approver_id)->first(); } else { if(isset($input['approver_id']) && $input['approver_id']!=''){ $reviewers=explode('-',$input['approver_id']); if($reviewers[0] == 'uid') { $approver = User::getUserDocument()->where('users.id', '=', $reviewers[1])->first(); } elseif($reviewers[0] == 'did') { $department = Department::where('id',$reviewers[1])->first(); $approver = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->orderBy('role_user.role_id', 'asc') ->first(); } } } $approver_department = Department::where('id',$approver->department_id)->first(); $update_process = WorkflowDocumentProcess::where('id', $outgoing_workflow_process->id)->update(['end_date' => date('Y-m-d'), 'is_approved'=>'1', 'comment' =>$input['comment'], 'status' => 'SA']); $process_input['_token']=$input['_token']; $process_input['workflow_document_id']=$workflow_document->id; $process_input['start_date']=date('Y-m-d'); $process_input['status']='P'; $process_input['user_id']=$approver->id; $process_input['user_name']=$approver->first_name.' '.$approver->last_name; $process_input['user_email']=$approver->email; $process_input['user_role']=$approver->role_name; if($approver_department) { $process_input['user_department']=$approver_department->name; } $process_input['assign_by']=Auth::user()->id; $process_input['assigner_name']=$document_user->first_name.' '.$document_user->last_name; $process_input['assigner_email']=$document_user->email; $process_input['assign_date']=date('Y-m-d H:i:s'); $process_input['assigner_role']=$document_user->role_name; $document_user_department = Department::where('id',$document_user->department_id)->first(); if($document_user_department) { $process_input['assigner_department']=$document_user_department->name; } $process_save=WorkflowDocumentProcess::create($process_input); $reviewer_input['_token']=$input['_token']; $reviewer_input['workflow_document_id']=$workflow_document->id; $reviewer_input['user_id']=$approver->id; $reviewer_input['process_id']=$process_save->id; $reviewer_input['user_type']='R'; $reviewer_input['user_name']=$approver->first_name.' '.$approver->last_name; $reviewer_input['user_email']=$approver->email; $reviewer_input['user_role']=$approver->role_name; $reviewer_input['added_by']=Auth::user()->id; if($approver_department) { $reviewer_input['user_department']=$approver_department->name; } $reviewer_save=WorkflowDocumentUser::create($reviewer_input); $last_scanned_document_version=WorkflowDocumentFile::where('workflow_document_id','=',$workflow_document->id)->orderBy('id', 'desc')->first(); if(isset($last_scanned_document_version) && $last_scanned_document_version->version > 0) { $update_last_scanned_document_version = WorkflowDocumentFile::where('workflow_document_id','=',$workflow_document->id)->update(['status' => 'N']); $new_version = ($last_scanned_document_version->version + 1); } if($reviewer_save){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($reviewer_save->user_id), new DocumentNotification($workflow_document->id, "reveiwer", "approved", $link)); } } $data=true; } else { $lastProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->where('user_id', Auth::user()->id)->where('status', 'P')->orderBy('id', 'desc')->first(); if(empty($lastProcess)){ $lastProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->where('user_id', Auth::user()->id)->orderBy('id', 'desc')->first(); } $update_process = WorkflowDocumentProcess::where('id', $outgoing_workflow_process->id)->update(['end_date' => date('Y-m-d'), 'status'=>'R', 'comment' =>$input['comment']]); $process_input['_token']=$input['_token']; $process_input['parent_id']=$outgoing_workflow_process->id; $process_input['workflow_document_id']=$workflow_document->id; $process_input['start_date']=date('Y-m-d'); $process_input['user_id']=$lastProcess->assign_by; $process_input['user_name']=$lastProcess->assigner_name; $process_input['user_email']=$lastProcess->assigner_email; $process_input['user_role']=$lastProcess->assigner_role; $process_input['user_department']=$lastProcess->assigner_department; $process_input['assign_by']=$lastProcess->user_id; $process_input['assigner_name']=$lastProcess->user_name; $process_input['assigner_email']=$lastProcess->user_email; $process_input['assign_date']=date('Y-m-d H:i:s'); $process_input['assigner_role']=$lastProcess->user_role; $process_input['assigner_department'] = $lastProcess->user_department; $process_save=WorkflowDocumentProcess::create($process_input); if($lastProcess){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($lastProcess->assign_by), new DocumentNotification($workflow_document->id, "reveiwer", "approved", $link)); } $last_scanned_document_version=WorkflowDocumentFile::where('workflow_document_id','=',$workflow_document->id)->orderBy('id', 'desc')->first(); if(isset($last_scanned_document_version) && $last_scanned_document_version->version > 0) { $update_last_scanned_document_version = WorkflowDocumentFile::where('workflow_document_id','=',$workflow_document->id)->update(['status' => 'N']); $new_version = ($last_scanned_document_version->version + 1); } $data=true; } if(isset($input['file_ids']) && $input['file_ids']!='') { $file_ids_array = explode(';',$input['file_ids']); if(is_array($file_ids_array) && !empty($file_ids_array)){ foreach($file_ids_array as $key => $file_id){ $file = WorkflowDocumentFile::where('id',$file_id)->first(); if(isset($file)) { $update_data = WorkflowDocumentFile::where('id',$file_id)->update([ 'is_temp'=>0, 'version'=>$new_version, 'process_id'=>$outgoing_workflow_process->id, 'workflow_document_id'=>$workflow_document->id ]); } } } } if($data==true) { Session::flash('success_message', __('Document has been updated successfully')); return redirect()->route('documents',$type); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->back(); } } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $type='Incoming'; $id=base64_decode($id); $workflow_document = WorkflowDocument::where('id', $id)->first(); $setting = Setting::first(); $workflow_types = WorkflowType::orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::orderBy('id', 'asc')->get(); $senders = Contact::where('status', 1)->where('is_approved', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User::getUserRole()->get(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); if($workflow_document){ $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } return view('document-workflows.edit', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'senders', 'departments', 'users', 'workflow_document', 'document_user')); }else{ Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('documents',$type); } } public function editAsSupporter($id) { $type='Incoming'; $id=base64_decode($id); $workflow_document = WorkflowDocument::where('id', $id)->first(); $setting = Setting::first(); $workflow_types = WorkflowType::orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::orderBy('id', 'asc')->get(); $senders = Contact::where('status', 1)->where('is_approved', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User::getUserRole()->get(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); if($workflow_document){ $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } return view('document-workflows.edit_as_supporter', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'senders', 'departments', 'users', 'workflow_document', 'document_user')); }else{ Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('documents',$type); } } public function editAsRegistry($id) { $type='Incoming'; $id=base64_decode($id); $workflow_document = WorkflowDocument::where('id', $id)->first(); $setting = Setting::first(); $workflow_types = WorkflowType::orderBy('id', 'asc')->get(); $priorities = Priority::orderBy('id', 'asc')->get(); $delivery_types = DeliveryType::orderBy('id', 'asc')->get(); $document_types = DocumentType::orderBy('id', 'asc')->get(); $senders = Contact::where('status', 1)->where('is_approved', 1)->orderBy('id', 'asc')->get(); $departments = Department::where('status', 1)->orderBy('id', 'asc')->get(); $users = User::getUserRole()->get(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); if($workflow_document){ $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } return view('document-workflows.edit_as_register', compact('setting', 'workflow_types', 'priorities', 'delivery_types', 'document_types', 'senders', 'departments', 'users', 'workflow_document', 'document_user')); }else{ Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('documents',$type); } } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $type='Incoming'; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $required = ''; if($request->status =='Delegate') { $required = 'required'; } $validatedData = $this->validate($request, [ 'reviewers' => $required, 'comment' => 'max:'.$setting->comment_text_limit, ]); $input = $request->all(); if(isset($input['related_documents'])) { $input['related_documents'] = json_encode($input['related_documents']); } $input['registration_number'] = $workflow_document->registration_number; $input['registration_date'] = $workflow_document->registration_date; $input['workflow_type_id'] = $workflow_document->workflow_type_id; $input['workflow_type_name'] = $workflow_document->workflow_type_name; $input['delivery_type_id'] = $workflow_document->delivery_type_id; $input['delivery_type_name'] = $workflow_document->delivery_type_name; $input['topic'] = $workflow_document->topic; $input['additional_notes'] = $workflow_document->additional_notes; if($input['priority_id'] && $input['priority_id'] > 0){ $priority = Priority::where('id', $input['priority_id'])->first(); $input['priority_name'] = $priority->name; $input['max_completion_days'] = $priority->completion_day; } if($input['document_type_id'] && $input['document_type_id'] > 0){ $document_type = DocumentType::where('id', $input['document_type_id'])->first(); $input['document_type_name'] = $document_type->name; } if(isset($input['due_date']) && $input['due_date'] != "") $input['due_date'] = Carbon\Carbon::createFromFormat('d-m-Y', $input['due_date'])->format('Y-m-d'); $parent_process_comment = $input['comment']; $input['comment'] = $workflow_document->comment; $saved_data=$workflow_document->fill($input)->save(); if($saved_data) { if($input['status']=='Delegate') { $parent_process = WorkflowDocumentProcess::where('user_id', Auth::user()->id)->where('workflow_document_id', $workflow_document->id)->orderBy('id', 'desc')->first(); $process_input['parent_id']= isset($parent_process->id) ? $parent_process->id : 0; $process_input['workflow_document_id']=$workflow_document->id; $process_input['start_date']=date('Y-m-d'); if(isset($input['reviewers']) && $input['reviewers']!=''){ $reviewers=explode('-',$input['reviewers']); if($reviewers[0] == 'uid') { $document_user_for_work = User::getUserDocument()->where('users.id', '=', $reviewers[1])->first(); } elseif($reviewers[0] == 'did') { if($workflow_document->workflow_type_id !=2) { $department = Department::where('id',$reviewers[1])->first(); $document_user_for_work = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->where('role_user.role_id', '>', $document_user->role_id) ->orderBy('role_user.role_id', 'asc') ->first(); } else { $department = Department::where('id',$reviewers[1])->first(); $document_user_for_work = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->where('role_user.role_id', '<', $document_user->role_id) ->orderBy('role_user.role_id', 'desc') ->first(); } } } $condition = []; if($document_user_for_work->id != ""): array_push($condition, ['absents.user_id', '=', $document_user_for_work->id]); $absent_date = date('Y-m-d'); array_push($condition, ['absents.start_date', '<=', $absent_date]); array_push($condition, ['absents.end_date', '>=', $absent_date]); $assign_absences = DB::table('absents') ->join('assign_absences', 'absents.id', '=', 'assign_absences.absent_id') ->select('assign_absences.*') ->where($condition) ->first(); if($assign_absences): if(isset($document_user_for_work)){ $is_exist=WorkflowDocumentUser::where('workflow_document_id', $workflow_document->id)->where('user_id', $document_user_for_work->id)->first(); if(!isset($is_exist) || empty($is_exist)) { $supporter_input['_token']=$input['_token']; $supporter_input['workflow_document_id']=$workflow_document->id; $supporter_input['user_id']=$document_user_for_work->id; $supporter_input['process_id']=0; $supporter_input['user_type']='S'; $supporter_input['user_name']=$document_user_for_work->first_name.' '.$document_user_for_work->last_name; $supporter_input['user_email']=$document_user_for_work->email; $supporter_input['user_role']=$document_user_for_work->role_name; $supporter_input['added_by']=Auth::user()->id; $supporter_department = Department::where('id',$document_user_for_work->department_id)->first(); if($supporter_department) { $supporter_input['user_department']=$supporter_department->name; } $supporter_save=WorkflowDocumentUser::create($supporter_input); if($supporter_save) { $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($supporter_save->user_id), new DocumentNotification($workflow_document->id, "supporter", "updated", $link)); } } } $document_user_for_work = User::getUserDocument()->where('users.id', '=', $assign_absences->user_id)->first(); endif; endif; $process_input['status']='P'; $process_input['user_id']=$document_user_for_work->id; $process_input['user_name']=$document_user_for_work->first_name.' '.$document_user_for_work->last_name; $process_input['user_email']=$document_user_for_work->email; $process_input['user_role']=$document_user_for_work->role_name; $document_user_for_work_department = Department::where('id',$document_user_for_work->department_id)->first(); if($document_user_for_work_department) { $process_input['user_department']=$document_user_for_work_department->name; } $process_input['assign_by']=Auth::user()->id; $process_input['assigner_name']=$document_user->first_name.' '.$document_user->last_name; $process_input['assigner_email']=$document_user->email; $process_input['assign_date']=date('Y-m-d H:i:s'); $process_input['assigner_role']=$document_user->role_name; $document_user_department = Department::where('id',$document_user->department_id)->first(); if($document_user_department) { $process_input['assigner_department'] = $document_user_department->name; } $process_save=WorkflowDocumentProcess::create($process_input); if($process_save){ if(isset($parent_process)){ $update_parent_process = WorkflowDocumentProcess::where('id', $parent_process->id)->update(['end_date' => date('Y-m-d'), 'status'=>'D', 'comment' =>$parent_process_comment]); } if($assign_absences): $supporter_update = WorkflowDocumentUser::where('workflow_document_id', $saved_data->id)->where('user_type','S')->where('process_id', 0)->update(['process_id' => $process_save->id]); endif; } $reviewer_input['workflow_document_id']=$workflow_document->id; $reviewer_input['user_id']=$document_user_for_work->id; $reviewer_input['process_id']=$process_save->id; $reviewer_input['user_type']='R'; $reviewer_input['user_name']=$document_user_for_work->first_name.' '.$document_user_for_work->last_name; $reviewer_input['user_email']=$document_user_for_work->email; $reviewer_input['user_role']=$document_user_for_work->role_name; $reviewer_input['added_by']=Auth::user()->id; $supporter_department = Department::where('id',$document_user_for_work->department_id)->first(); if($supporter_department) { $reviewer_input['user_department']=$supporter_department->name; } $reviewer_save=WorkflowDocumentUser::create($reviewer_input); if($reviewer_save){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($reviewer_save->user_id), new DocumentNotification($workflow_document->id, "reveiwer", "updated", $link)); } } $prev_supporters = WorkflowDocumentUser::where('workflow_document_id', $workflow_document->id)->where('user_type', 'S')->update(['status'=>'N']); if(isset($input['supporters']) && is_array($input['supporters'])){ foreach($input['supporters'] as $supporter){ $supp_array=explode('-',$supporter); if($supp_array[0] == 'uid') { $supporter_user = User::getUserDocument()->where('users.id', '=', $supp_array[1])->first(); } elseif($supp_array[0] == 'did') { $department = Department::where('id',$supp_array[1])->first(); $supporter_user = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->orderBy('role_user.role_id', 'asc') ->first(); } if(isset($supporter_user)){ $prev_support = WorkflowDocumentUser::where('user_id', $supporter_user->id)->where('workflow_document_id', $workflow_document->id)->first(); if($prev_support) { $update_supporter = WorkflowDocumentUser::where('user_id', $supporter_user->id)->where('workflow_document_id', $workflow_document->id)->update(['status'=>'Y']); } else { $supporter_input['_token']=$input['_token']; $supporter_input['workflow_document_id']=$workflow_document->id; $supporter_input['user_id']=$supporter_user->id; $supporter_input['process_id']=$process_save->id; $supporter_input['user_type']='S'; $supporter_input['user_name']=$supporter_user->first_name.' '.$supporter_user->last_name; $supporter_input['user_email']=$supporter_user->email; $supporter_input['user_role']=$supporter_user->role_name; $supporter_input['added_by']=Auth::user()->id; $supporter_department = Department::where('id',$supporter_user->department_id)->first(); if($supporter_department) { $supporter_input['user_department']=$supporter_department->name; } $supporter_save=WorkflowDocumentUser::create($supporter_input); if($supporter_save){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($supporter_save->user_id), new DocumentNotification($workflow_document->id, "supporter", "updated", $link)); } } } } } Session::flash('success_message', __('Document workflow has been updated successfully')); return redirect()->route('documents',$type); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('document_workflow'); } } public function updateAsSupporter(Request $request, $id) { $type='Incoming'; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $required = ''; $input = $request->all(); if(isset($input['related_documents'])) { $input['related_documents'] = json_encode($input['related_documents']); } $process_input = $input; $saved_data=$workflow_document->fill($input)->save(); if($saved_data) { if(isset($input['supporters']) && is_array($input['supporters'])){ foreach($input['supporters'] as $supporter){ $supp_array=explode('-',$supporter); if($supp_array[0] == 'uid') { $supporter_user = User::getUserDocument()->where('users.id', '=', $supp_array[1])->first(); } elseif($supp_array[0] == 'did') { $department = Department::where('id',$supp_array[1])->first(); $supporter_user = User::getUserDocument() ->where('users.department_id', '=', $department->id) ->orderBy('role_user.role_id', 'asc') ->first(); } if(isset($supporter_user)){ $prev_support = WorkflowDocumentUser::where('user_id', $supporter_user->id)->where('workflow_document_id', $workflow_document->id)->first(); if($prev_support) { $update_supporter = WorkflowDocumentUser::where('user_id', $supporter_user->id)->where('workflow_document_id', $workflow_document->id)->update(['status'=>'Y']); } else { $supporter_input['_token']=$input['_token']; $supporter_input['workflow_document_id']=$workflow_document->id; $supporter_input['user_id']=$supporter_user->id; $supporter_input['user_type']='S'; $supporter_input['user_name']=$supporter_user->first_name.' '.$supporter_user->last_name; $supporter_input['user_email']=$supporter_user->email; $supporter_input['user_role']=$supporter_user->role_name; $supporter_input['added_by']=Auth::user()->id; $supporter_department = Department::where('id',$supporter_user->department_id)->first(); if($supporter_department) { $supporter_input['user_department']=$supporter_department->name; } $supporter_save=WorkflowDocumentUser::create($supporter_input); if($supporter_save){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($supporter_save->user_id), new DocumentNotification($workflow_document->id, "supporter", "updated", $link)); } } } } } Session::flash('success_message', __('Document workflow has been updated successfully')); return redirect()->route('documents',$type); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('document_workflow'); } } public function updateAsRegistry(Request $request, $id) { $type='Incoming'; $data=false; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $input = $request->all(); $place_of_the_documents=$workflow_document->place_of_the_documents; $workflow_process = WorkflowDocumentProcess::where('workflow_document_id', '=', $workflow_document->id)->orderBy('id', 'asc')->first(); if(isset($input['file_ids']) && $input['file_ids']!='') { $file_ids_array = explode(';',$input['file_ids']); if(is_array($file_ids_array) && !empty($file_ids_array)){ foreach($file_ids_array as $key => $file_id){ $file = WorkflowDocumentFile::where('id',$file_id)->first(); if(isset($file)) { $update_data = WorkflowDocumentFile::where('id',$file_id)->update([ 'is_temp'=>0, 'process_id'=>$workflow_process->id, 'workflow_document_id'=>$workflow_document->id ]); } } } } Session::flash('success_message', __('Document workflow has been updated successfully')); return redirect()->route('documents',$type); } public function signedDocumentsStore(Request $request, $id) { $data=false; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $input = $request->all(); $place_of_the_documents=$workflow_document->place_of_the_documents; $workflow_process = WorkflowDocumentProcess::where('workflow_document_id', $workflow_document->id)->orderBy('id', 'desc')->first(); if(isset($input['file_ids']) && $input['file_ids']!='') { $version = WorkflowDocumentFile::where('workflow_document_id', $workflow_document->id)->max('version'); $file_ids_array = explode(';',$input['file_ids']); if(is_array($file_ids_array) && !empty($file_ids_array)){ foreach($file_ids_array as $key => $file_id){ $file = WorkflowDocumentFile::where('id',$file_id)->first(); if(isset($file)) { $update_data = WorkflowDocumentFile::where('id',$file_id)->update([ 'is_temp'=>0, 'is_signed'=>1, 'version'=>$version, 'process_id'=>$workflow_process->id, 'workflow_document_id'=>$workflow_document->id ]); } } } } Session::flash('success_message', __('Document workflow has been updated successfully')); return redirect()->back(); } public function storeReturn(Request $request, $id) { $type='Incoming'; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $lastProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->where('user_id', Auth::user()->id)->where('status', 'D')->orderBy('id', 'desc')->first(); if(empty($lastProcess)){ $lastProcess=WorkflowDocumentProcess::where('workflow_document_id', $id)->where('user_id', Auth::user()->id)->orderBy('id', 'desc')->first(); } $process_input = $request->all(); $parent_process = WorkflowDocumentProcess::where('user_id', Auth::user()->id)->where('workflow_document_id', $workflow_document->id)->orderBy('id', 'desc')->first(); $process_input['parent_id']=$parent_process->id; $process_input['workflow_document_id']=$workflow_document->id; $process_input['start_date']=date('Y-m-d'); $process_input['status']='P'; $parent_process_comment = $process_input['comment']; $process_input['comment']=''; $process_input['user_id']=$lastProcess->assign_by; $process_input['user_name']=$lastProcess->assigner_name; $process_input['user_email']=$lastProcess->assigner_email; $process_input['user_role']=$lastProcess->assigner_role; $process_input['user_department']=$lastProcess->assigner_department; $process_input['assign_by']=$lastProcess->user_id; $process_input['assigner_name']=$lastProcess->user_name; $process_input['assigner_email']=$lastProcess->user_email; $process_input['assign_date']=date('Y-m-d H:i:s'); $process_input['assigner_role']=$lastProcess->user_role; $process_input['assigner_department'] = $lastProcess->user_department; $process_save=WorkflowDocumentProcess::create($process_input); if($process_save){ $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1]); } if(isset($parent_process)){ $update_parent_process = WorkflowDocumentProcess::where('id', $parent_process->id)->update(['end_date' => date('Y-m-d'), 'status'=>'R', 'comment' =>$parent_process_comment]); } if($lastProcess){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($lastProcess->assign_by), new DocumentNotification($workflow_document->id, "all", "returned", $link)); } Session::flash('success_message', __('Document workflow has been Returned successfully')); return redirect()->route('documents',$type); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('document_workflow'); } } public function storeComplete(Request $request, $id) { $type='Incoming'; $id=base64_decode($id); $workflow_document = WorkflowDocument::findOrFail($id); $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $input = $request->all(); $process_input = $input; $input['status']='Complete'; $parent_process_comment = $input['comment']; $input['comment'] = $workflow_document->comment; $saved_data=$workflow_document->fill($input)->save(); if($saved_data) { $unread_user = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('user_id', Auth::user()->id) ->where('is_read', '0') ->where('status', 'Y') ->first(); if($unread_user){ $unreadUpdate = WorkflowDocumentUser::where('id', '=', $unread_user->id)->update(['is_read'=>1, 'status'=>'N']); } $process = WorkflowDocumentProcess::where('user_id', Auth::user()->id)->where('workflow_document_id', $workflow_document->id)->orderBy('id', 'desc')->first(); if(isset($process)){ $update_process = WorkflowDocumentProcess::where('id', $process->id)->update(['end_date' => date('Y-m-d'), 'status'=>'CO', 'comment' =>$parent_process_comment]); } if($workflow_document){ $link = route('details', base64_encode($workflow_document->id)); Notification::send(User::findOrFail($workflow_document->creator_id), new DocumentNotification($workflow_document->id, "creator", "completed", $link)); $users = WorkflowDocumentUser::where('workflow_document_id', '=', $workflow_document->id) ->where('status', 'Y') ->get(); if(!empty($users)){ foreach($users as $user){ Notification::send(User::findOrFail($user->user_id), new DocumentNotification($workflow_document->id, "all", "completed", $link)); } } } Session::flash('success_message', __('Document workflow has been Completed successfully')); return redirect()->route('documents',$type); } else { Session::flash('error_message', __('We are having some problem. Please try later.')); return redirect()->route('document_workflow'); } } public function storeFiles(Request $request) { $input = $request->all(); // return response()->json(['data'=>$input['files']]); if(isset($input['file_api'])) { $filex = new UploadedFile( public_path() . '/' . $input['file_api'], pathinfo($input['file_api'])['basename'], mime_content_type(public_path().'/'.$input['file_api']), null, false ); $input['files'] = $filex; // return response()->json(['data'=>$filex->getClientOriginalExtension()]); } $setting = Setting::first(); $document_user = User::getUserDocument()->where('users.id', '=', Auth::user()->id)->first(); $place_of_the_documents='documents/'.date('Y').'/'.Auth::user()->id; $input['place_of_the_documents']= $place_of_the_documents; $input['user_id']=Auth::user()->id; if(isset($input['files']) && is_array($input['files']) && !empty($input['files'])) { foreach($input['files'] as $key => $file) { if(isset($file) && $file->getError() == 0 && $file->getClientOriginalName() != "") { $document_number=1; $last_scanned_document=WorkflowDocumentFile::where('uploaded_by','=',Auth::user()->id)->orderBy('id', 'desc')->first(); if(isset($last_scanned_document) && $last_scanned_document->document_name != '') { $doc_name = explode('.',$last_scanned_document->document_name); $base_name_array = explode('-',$doc_name[0]); $base_name = end($base_name_array); $document_number = ($base_name + 1); } $document_name = ($setting->document_name_prefix && $setting->document_name_prefix !="" ? $setting->document_name_prefix."-" : "" ).time().'-'.$document_number.'.'.$file->getClientOriginalExtension(); $input['document_name']=$document_name; $input['place_of_the_documents']=$place_of_the_documents; $input['document_type']='S'; $input['uploaded_by']=Auth::user()->id; $input['uploader_name']=$document_user->first_name.' '.$document_user->last_name; $document_save=WorkflowDocumentFile::create($input); if($document_save){ $file->move(public_path($place_of_the_documents), $document_name); $files_val[$key]['data']= $document_save; $files_val[$key]['type']= 'success'; $files_val[$key]['message']= __('File uploaded successfully'); if(!in_array($file->getClientOriginalExtension(), ['pdf', 'zip', 'tar', 'rar', 'exe', 'gz'])) { shell_exec('export HOME=/tmp && /usr/bin/libreoffice --headless --convert-to pdf ' . public_path($place_of_the_documents) . '/' . $document_name . ' --outdir ' . public_path($place_of_the_documents)); } } } } } else { $file = $input['files']; $key = 0; if(isset($file) && $file->getError() == 0 && $file->getClientOriginalName() != "") { $document_number=1; $last_scanned_document=WorkflowDocumentFile::where('uploaded_by','=',Auth::user()->id)->orderBy('id', 'desc')->first(); if(isset($last_scanned_document) && $last_scanned_document->document_name != '') { $doc_name = explode('.',$last_scanned_document->document_name); $base_name_array = explode('-',$doc_name[0]); $base_name = end($base_name_array); $document_number = ($base_name + 1); } $document_name = ($setting->document_name_prefix && $setting->document_name_prefix !="" ? $setting->document_name_prefix."-" : "" ).time().'-'.$document_number.'.'.$file->getClientOriginalExtension(); $input['document_name']=$document_name; $input['place_of_the_documents']=$place_of_the_documents; $input['document_type']='S'; $input['uploaded_by']=Auth::user()->id; $input['uploader_name']=$document_user->first_name.' '.$document_user->last_name; $document_save=WorkflowDocumentFile::create($input); if($document_save){ if(isset($input['file_api'])) \File::copy(public_path($input['file_api']), public_path($place_of_the_documents).'/'.$document_name); else $file->move(public_path($place_of_the_documents), $document_name); $files_val[$key]['data']= $document_save; $files_val[$key]['type']= 'success'; $files_val[$key]['message']= __('File uploaded successfully'); if(!in_array($file->getClientOriginalExtension(), ['pdf', 'zip', 'tar', 'rar', 'exe', 'gz'])) { shell_exec('export HOME=/tmp && /usr/bin/libreoffice --headless --convert-to pdf ' . public_path($place_of_the_documents) . '/' . $document_name . ' --outdir ' . public_path($place_of_the_documents)); } } } } return response()->json($files_val); } public function deleteFiles(Request $request) { $input = $request->all(); $file = WorkflowDocumentFile::findOrFail($input['id']); $delete_file = $file->delete(); if($delete_file): unlink(public_path($file->place_of_the_documents.'/'.$file->document_name)); endif; echo __('Deleted File ').$file->document_name; } }