dbfdg can('manage lead')) { if(\Auth::user()->default_pipeline) { $pipeline = Pipeline::where('created_by', '=', \Auth::user()->creatorId())->where('id', '=', \Auth::user()->default_pipeline)->first(); if(!$pipeline) { $pipeline = Pipeline::where('created_by', '=', \Auth::user()->creatorId())->first(); } } else { $pipeline = Pipeline::where('created_by', '=', \Auth::user()->creatorId())->first(); } $pipelines = Pipeline::where('created_by', '=', \Auth::user()->creatorId())->get()->pluck('name', 'id'); return view('leads.index', compact('pipelines', 'pipeline')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function lead_list() { $usr = \Auth::user(); if($usr->can('manage lead')) { if($usr->default_pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->creatorId())->where('id', '=', $usr->default_pipeline)->first(); if(!$pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->creatorId())->first(); } } else { $pipeline = Pipeline::where('created_by', '=', $usr->creatorId())->first(); } $pipelines = Pipeline::where('created_by', '=', $usr->creatorId())->get()->pluck('name', 'id'); $leads = Lead::select('leads.*')->join('user_leads', 'user_leads.lead_id', '=', 'leads.id')->where('user_leads.user_id', '=', $usr->id)->where('leads.pipeline_id', '=', $pipeline->id)->orderBy('leads.order')->get(); return view('leads.list', compact('pipelines', 'pipeline', 'leads')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { if(\Auth::user()->can('create lead')) { $users = User::where('created_by', '=', \Auth::user()->creatorId())->where('type', '!=', 'client')->where('type', '!=', 'company')->where('id', '!=', \Auth::user()->id)->get()->pluck('name', 'id'); $users->prepend(__('Select User'), ''); return view('leads.create', compact('users')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * * @return \Illuminate\Http\Response */ public function store(Request $request) { $usr = \Auth::user(); if($usr->can('create lead')) { $validator = \Validator::make( $request->all(), [ 'subject' => 'required', 'name' => 'required', 'email' => 'required|email', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } // Default Field Value if($usr->default_pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->creatorId())->where('id', '=', $usr->default_pipeline)->first(); if(!$pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->creatorId())->first(); } } else { $pipeline = Pipeline::where('created_by', '=', $usr->creatorId())->first(); } $stage = LeadStage::where('pipeline_id', '=', $pipeline->id)->first(); // End Default Field Value if(empty($stage)) { return redirect()->back()->with('error', __('Please Create Stage for This Pipeline.')); } else { $lead = new Lead(); $lead->name = $request->name; $lead->email = $request->email; $lead->phone = $request->phone; $lead->subject = $request->subject; $lead->user_id = $request->user_id; $lead->pipeline_id = $pipeline->id; $lead->stage_id = $stage->id; $lead->created_by = $usr->creatorId(); $lead->date = date('Y-m-d'); $lead->save(); if($request->user_id!=\Auth::user()->id){ $usrLeads = [ $usr->id, $request->user_id, ]; }else{ $usrLeads = [ $request->user_id, ]; } foreach($usrLeads as $usrLead) { UserLead::create( [ 'user_id' => $usrLead, 'lead_id' => $lead->id, ] ); } $leadArr = [ 'lead_id' => $lead->id, 'name' => $lead->name, 'updated_by' => $usr->id, ]; $lArr = [ 'lead_name' => $lead->name, 'lead_email' => $lead->email, 'lead_pipeline' => $pipeline->name, 'lead_stage' => $stage->name, ]; $usrEmail = User::find($request->user_id); $lArr = [ 'lead_name' => $lead->name, 'lead_email' => $lead->email, 'lead_pipeline' => $pipeline->name, 'lead_stage' => $stage->name, ]; // Send Email $setings = Utility::settings(); if($setings['lead_assigned'] == 1) { $usrEmail = User::find($request->user_id); $leadAssignArr = [ 'lead_name' => $lead->name, 'lead_email' => $lead->email, 'lead_subject' => $lead->subject, 'lead_pipeline' => $pipeline->name, 'lead_stage' => $stage->name, ]; $resp = Utility::sendEmailTemplate('lead_assigned', [$usrEmail->id => $usrEmail->email], $leadAssignArr); } //For Notification $setting = Utility::settings(\Auth::user()->creatorId()); $leadArr = [ 'user_name' => \Auth::user()->name, 'lead_name' => $lead->name, 'lead_email' => $lead->email, ]; //Slack Notification if(isset($setting['lead_notification']) && $setting['lead_notification'] ==1) { Utility::send_slack_msg('new_lead', $leadArr); } //Telegram Notification if(isset($setting['telegram_lead_notification']) && $setting['telegram_lead_notification'] ==1) { Utility::send_telegram_msg('new_lead', $leadArr); } //webhook $module ='New Lead'; $webhook= Utility::webhookSetting($module); if($webhook) { $parameter = json_encode($lead); // 1 parameter is URL , 2 parameter is data , 3 parameter is method $status = Utility::WebhookCall($webhook['url'],$parameter,$webhook['method']); if($status == true) { return redirect()->back()->with('success', __('Lead successfully created!') .((!empty ($resp) && $resp['is_success'] == false && !empty($resp['error'])) ? '
' . $resp['error'] . '' : '')); } else { return redirect()->back()->with('error', __('Webhook call failed.')); } } return redirect()->back()->with('success', __('Lead successfully created!') .((!empty ($resp) && $resp['is_success'] == false && !empty($resp['error'])) ? '
' . $resp['error'] . '' : '')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } /** * Display the specified resource. * * @param \App\Lead $lead * * @return \Illuminate\Http\Response */ public function show(Lead $lead) { if($lead->is_active) { $calenderTasks = []; $deal = Deal::where('id', '=', $lead->is_converted)->first(); $stageCnt = LeadStage::where('pipeline_id', '=', $lead->pipeline_id)->where('created_by', '=', $lead->created_by)->get(); $i = 0; foreach($stageCnt as $stage) { $i++; if($stage->id == $lead->stage_id) { break; } } $precentage = number_format(($i * 100) / count($stageCnt)); return view('leads.show', compact('lead', 'calenderTasks', 'deal', 'precentage')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } /** * Show the form for editing the specified resource. * * @param \App\Lead $lead * * @return \Illuminate\Http\Response */ public function edit(Lead $lead) { if(\Auth::user()->can('edit lead')) { if($lead->created_by == \Auth::user()->creatorId()) { $pipelines = Pipeline::where('created_by', '=', \Auth::user()->creatorId())->get()->pluck('name', 'id'); $pipelines->prepend(__('Select Pipeline'), ''); $sources = Source::where('created_by', '=', \Auth::user()->creatorId())->get()->pluck('name', 'id'); $products = ProductService::where('created_by', '=', \Auth::user()->creatorId())->get()->pluck('name', 'id'); $users = User::where('created_by', '=', \Auth::user()->creatorId())->where('type', '!=', 'client')->where('type', '!=', 'company')->where('id', '!=', \Auth::user()->id)->get()->pluck('name', 'id'); $lead->sources = explode(',', $lead->sources); $lead->products = explode(',', $lead->products); return view('leads.edit', compact('lead', 'pipelines', 'sources', 'products', 'users')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Lead $lead * * @return \Illuminate\Http\Response */ public function update(Request $request, Lead $lead) { if(\Auth::user()->can('edit lead')) { if($lead->created_by == \Auth::user()->creatorId()) { $validator = \Validator::make( $request->all(), [ 'subject' => 'required', 'name' => 'required', 'email' => 'required|email', 'pipeline_id' => 'required', 'user_id' => 'required', 'stage_id' => 'required', 'sources' => 'required', 'products' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $lead->name = $request->name; $lead->email = $request->email; $lead->phone = $request->phone; $lead->subject = $request->subject; $lead->user_id = $request->user_id; $lead->pipeline_id = $request->pipeline_id; $lead->stage_id = $request->stage_id; $lead->sources = implode(",", array_filter($request->sources)); $lead->products = implode(",", array_filter($request->products)); $lead->notes = $request->notes; $lead->save(); return redirect()->back()->with('success', __('Lead successfully updated!')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } /** * Remove the specified resource from storage. * * @param \App\Lead $lead * * @return \Illuminate\Http\Response */ public function destroy(Lead $lead) { if(\Auth::user()->can('delete lead')) { if($lead->created_by == \Auth::user()->creatorId()) { LeadDiscussion::where('lead_id', '=', $lead->id)->delete(); LeadFile::where('lead_id', '=', $lead->id)->delete(); UserLead::where('lead_id', '=', $lead->id)->delete(); LeadActivityLog::where('lead_id', '=', $lead->id)->delete(); $lead->delete(); return redirect()->back()->with('success', __('Lead successfully deleted!')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function json(Request $request) { $lead_stages = new LeadStage(); if($request->pipeline_id && !empty($request->pipeline_id)) { $lead_stages = $lead_stages->where('pipeline_id', '=', $request->pipeline_id); $lead_stages = $lead_stages->get()->pluck('name', 'id'); } else { $lead_stages = []; } return response()->json($lead_stages); } public function fileUpload($id, Request $request) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { //storage limit $image_size = $request->file('file')->getSize(); $result = Utility::updateStorageLimit(\Auth::user()->creatorId(), $image_size); $file_name = $request->file->getClientOriginalName(); $file_path = $request->lead_id . "_" . md5(time()) . "_" . $request->file->getClientOriginalName(); $file = LeadFile::create( [ 'lead_id' => $request->lead_id, 'file_name' => $file_name, 'file_path' => $file_path, ] ); if($result==1) { $request->file->storeAs('lead_files', $file_path); $return = []; $return['is_success'] = true; $return['download'] = route( 'leads.file.download', [ $lead->id, $file->id, ] ); $return['delete'] = route( 'leads.file.delete', [ $lead->id, $file->id, ] ); }else{ $return = []; $return['is_success'] = true; $return['status'] =1; $return['success_msg'] = ((isset($result) && $result!=1) ? '
' . $result . '' : ''); } LeadActivityLog::create( [ 'user_id' => \Auth::user()->id, 'lead_id' => $lead->id, 'log_type' => 'Upload File', 'remark' => json_encode(['file_name' => $file_name]), ] ); return response()->json($return); } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function fileDownload($id, $file_id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $file = LeadFile::find($file_id); if($file) { $file_path = storage_path('lead_files/' . $file->file_path); $filename = $file->file_name; return \Response::download( $file_path, $filename, [ 'Content-Length: ' . filesize($file_path), ] ); } else { return redirect()->back()->with('error', __('File is not exist.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function fileDelete($id, $file_id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $file = LeadFile::find($file_id); if($file) { //storage limit $file_path = 'lead_files/'.$file->file_path; $result = Utility::changeStorageLimit(\Auth::user()->creatorId(), $file_path); $path = storage_path('lead_files/' . $file->file_path); if(file_exists($path)) { \File::delete($path); } $file->delete(); return response()->json(['is_success' => true], 200); } else { return response()->json( [ 'is_success' => false, 'error' => __('File is not exist.'), ], 200 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function noteStore($id, Request $request) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $lead->notes = $request->notes; $lead->save(); return response()->json( [ 'is_success' => true, 'success' => __('Note successfully saved!'), ], 200 ); } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function labels($id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $labels = Label::where('pipeline_id', '=', $lead->pipeline_id)->where('created_by', \Auth::user()->creatorId())->get(); $selected = $lead->labels(); if($selected) { $selected = $selected->pluck('name', 'id')->toArray(); } else { $selected = []; } return view('leads.labels', compact('lead', 'labels', 'selected')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function labelStore($id, Request $request) { if(\Auth::user()->can('edit lead')) { $leads = Lead::find($id); if($leads->created_by == \Auth::user()->creatorId()) { if($request->labels) { $leads->labels = implode(',', $request->labels); } else { $leads->labels = $request->labels; } $leads->save(); return redirect()->back()->with('success', __('Labels successfully updated!')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function userEdit($id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $users = User::where('created_by', '=', \Auth::user()->creatorId())->where('type', '!=', 'client')->where('type', '!=', 'company')->whereNOTIn( 'id', function ($q) use ($lead){ $q->select('user_id')->from('user_leads')->where('lead_id', '=', $lead->id); } )->get(); $users = $users->pluck('name', 'id'); return view('leads.users', compact('lead', 'users')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function userUpdate($id, Request $request) { if(\Auth::user()->can('edit lead')) { $usr = \Auth::user(); $lead = Lead::find($id); if($lead->created_by == $usr->creatorId()) { if(!empty($request->users)) { $users = array_filter($request->users); $leadArr = [ 'lead_id' => $lead->id, 'name' => $lead->name, 'updated_by' => $usr->id, ]; foreach($users as $user) { UserLead::create( [ 'lead_id' => $lead->id, 'user_id' => $user, ] ); } } if(!empty($users) && !empty($request->users)) { return redirect()->back()->with('success', __('Users successfully updated!')); } else { return redirect()->back()->with('error', __('Please Select Valid User!')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function userDestroy($id, $user_id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { UserLead::where('lead_id', '=', $lead->id)->where('user_id', '=', $user_id)->delete(); return redirect()->back()->with('success', __('User successfully deleted!')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function productEdit($id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $products = ProductService::where('created_by', '=', \Auth::user()->creatorId())->whereNOTIn('id', explode(',', $lead->products))->get()->pluck('name', 'id'); return view('leads.products', compact('lead', 'products')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function productUpdate($id, Request $request) { if(\Auth::user()->can('edit lead')) { $usr = \Auth::user(); $lead = Lead::find($id); $lead_users = $lead->users->pluck('id')->toArray(); if($lead->created_by == \Auth::user()->creatorId()) { if(!empty($request->products)) { $products = array_filter($request->products); $old_products = explode(',', $lead->products); $lead->products = implode(',', array_merge($old_products, $products)); $lead->save(); $objProduct = ProductService::whereIN('id', $products)->get()->pluck('name', 'id')->toArray(); LeadActivityLog::create( [ 'user_id' => $usr->id, 'lead_id' => $lead->id, 'log_type' => 'Add Product', 'remark' => json_encode(['title' => implode(",", $objProduct)]), ] ); $productArr = [ 'lead_id' => $lead->id, 'name' => $lead->name, 'updated_by' => $usr->id, ]; } if(!empty($products) && !empty($request->products)) { return redirect()->back()->with('success', __('Products successfully updated!'))->with('status', 'products'); } else { return redirect()->back()->with('error', __('Please Select Valid Product!'))->with('status', 'general'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'products'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'products'); } } public function productDestroy($id, $product_id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $products = explode(',', $lead->products); foreach($products as $key => $product) { if($product_id == $product) { unset($products[$key]); } } $lead->products = implode(',', $products); $lead->save(); return redirect()->back()->with('success', __('Products successfully deleted!'))->with('status', 'products'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'products'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'products'); } } public function sourceEdit($id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $sources = Source::where('created_by', '=', \Auth::user()->creatorId())->get(); $selected = $lead->sources(); if($selected) { $selected = $selected->pluck('name', 'id')->toArray(); } return view('leads.sources', compact('lead', 'sources', 'selected')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function sourceUpdate($id, Request $request) { if(\Auth::user()->can('edit lead')) { $usr = \Auth::user(); $lead = Lead::find($id); $lead_users = $lead->users->pluck('id')->toArray(); if($lead->created_by == \Auth::user()->creatorId()) { if(!empty($request->sources) && count($request->sources) > 0) { $lead->sources = implode(',', $request->sources); } else { $lead->sources = ""; } $lead->save(); LeadActivityLog::create( [ 'user_id' => $usr->id, 'lead_id' => $lead->id, 'log_type' => 'Update Sources', 'remark' => json_encode(['title' => 'Update Sources']), ] ); $leadArr = [ 'lead_id' => $lead->id, 'name' => $lead->name, 'updated_by' => $usr->id, ]; return redirect()->back()->with('success', __('Sources successfully updated!'))->with('status', 'sources'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'sources'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'sources'); } } public function sourceDestroy($id, $source_id) { if(\Auth::user()->can('edit lead')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $sources = explode(',', $lead->sources); foreach($sources as $key => $source) { if($source_id == $source) { unset($sources[$key]); } } $lead->sources = implode(',', $sources); $lead->save(); return redirect()->back()->with('success', __('Sources successfully deleted!'))->with('status', 'sources'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'sources'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'sources'); } } public function discussionCreate($id) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { return view('leads.discussions', compact('lead')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function discussionStore($id, Request $request) { $usr = \Auth::user(); $lead = Lead::find($id); $lead_users = $lead->users->pluck('id')->toArray(); if($lead->created_by == $usr->creatorId()) { $discussion = new LeadDiscussion(); $discussion->comment = $request->comment; $discussion->lead_id = $lead->id; $discussion->created_by = $usr->id; $discussion->save(); $leadArr = [ 'lead_id' => $lead->id, 'name' => $lead->name, 'updated_by' => $usr->id, ]; return redirect()->back()->with('success', __('Message successfully added!'))->with('status', 'discussion'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'discussion'); } } public function order(Request $request) { if(\Auth::user()->can('move lead')) { $usr = \Auth::user(); $post = $request->all(); $lead = $this->lead($post['lead_id']); $lead_users = $lead->users->pluck('email', 'id')->toArray(); if($lead->stage_id != $post['stage_id']) { $newStage = LeadStage::find($post['stage_id']); LeadActivityLog::create( [ 'user_id' => \Auth::user()->id, 'lead_id' => $lead->id, 'log_type' => 'Move', 'remark' => json_encode( [ 'title' => $lead->name, 'old_status' => $lead->stage->name, 'new_status' => $newStage->name, ] ), ] ); $leadArr = [ 'lead_id' => $lead->id, 'name' => $lead->name, 'updated_by' => $usr->id, 'old_status' => $lead->stage->name, 'new_status' => $newStage->name, ]; $lArr = [ 'lead_name' => $lead->name, 'lead_email' => $lead->email, 'lead_pipeline' => $lead->pipeline->name, 'lead_stage' => $lead->stage->name, 'lead_old_stage' => $lead->stage->name, 'lead_new_stage' => $newStage->name, ]; // Send Email Utility::sendEmailTemplate('Move Lead', $lead_users, $lArr); } foreach($post['order'] as $key => $item) { $lead = $this->lead($item); $lead->order = $key; $lead->stage_id = $post['stage_id']; $lead->save(); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } private static $leadData = NULL; public function lead($item) { if(self::$leadData == null) { $lead = Lead::find($item); self::$leadData = $lead; } return self::$leadData; } public function showConvertToDeal($id) { $lead = Lead::findOrFail($id); $exist_client = User::where('type', '=', 'client')->where('email', '=', $lead->email)->where('created_by', '=', \Auth::user()->creatorId())->first(); $clients = User::where('type', '=', 'client')->where('created_by', '=', \Auth::user()->creatorId())->get(); return view('leads.convert', compact('lead', 'exist_client', 'clients')); } public function convertToDeal($id, Request $request) { $lead = Lead::findOrFail($id); $usr = \Auth::user(); if($request->client_check == 'exist') { $validator = \Validator::make( $request->all(), [ 'clients' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $client = User::where('type', '=', 'client')->where('email', '=', $request->clients)->where('created_by', '=', $usr->creatorId())->first(); if(empty($client)) { return redirect()->back()->with('error', 'Client is not available now.'); } } else { $validator = \Validator::make( $request->all(), [ 'client_name' => 'required', 'client_email' => 'required|email|unique:users,email', 'client_password' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $role = Role::findByName('client'); $client = User::create( [ 'name' => $request->client_name, 'email' => $request->client_email, 'password' => \Hash::make($request->client_password), 'type' => 'client', 'lang' => 'en', 'created_by' => $usr->creatorId(), ] ); $client->assignRole($role); $cArr = [ 'email' => $request->client_email, 'password' => $request->client_password, ]; // Send Email to client if they are new created. Utility::sendEmailTemplate('New User', [$client->id => $client->email], $cArr); } // Create Deal $stage = Stage::where('pipeline_id', '=', $lead->pipeline_id)->first(); if(empty($stage)) { return redirect()->back()->with('error', __('Please Create Stage for This Pipeline.')); } $deal = new Deal(); $deal->name = $request->name; $deal->price = empty($request->price) ? 0 : $request->price; $deal->pipeline_id = $lead->pipeline_id; $deal->stage_id = $stage->id; if (!empty($request->is_transfer)) { $deal->sources = in_array('sources', $request->is_transfer) ? $lead->sources : ''; $deal->products = in_array('products', $request->is_transfer) ? $lead->products : ''; $deal->notes = in_array('notes', $request->is_transfer) ? $lead->notes : ''; } else { $deal->sources = ''; $deal->products = ''; $deal->notes = ''; } $deal->labels = $lead->labels; $deal->status = 'Active'; $deal->created_by = $lead->created_by; $deal->save(); // end create deal // Make entry in ClientDeal Table ClientDeal::create( [ 'deal_id' => $deal->id, 'client_id' => $client->id, ] ); // end $dealArr = [ 'deal_id' => $deal->id, 'name' => $deal->name, 'updated_by' => $usr->id, ]; // Send Notification // Send Mail $pipeline = Pipeline::find($lead->pipeline_id); $dArr = [ 'deal_name' => $deal->name, 'deal_pipeline' => $pipeline->name, 'deal_stage' => $stage->name, 'deal_status' => $deal->status, 'deal_price' => $usr->priceFormat($deal->price), ]; Utility::sendEmailTemplate('Assign Deal', [$client->id => $client->email], $dArr); // Make Entry in UserDeal Table $leadUsers = UserLead::where('lead_id', '=', $lead->id)->get(); foreach($leadUsers as $leadUser) { UserDeal::create( [ 'user_id' => $leadUser->user_id, 'deal_id' => $deal->id, ] ); } // end //Transfer Lead Discussion to Deal if (!empty($request->is_transfer)) { if(in_array('discussion', $request->is_transfer)) { $discussions = LeadDiscussion::where('lead_id', '=', $lead->id)->where('created_by', '=', $usr->creatorId())->get(); if(!empty($discussions)) { foreach($discussions as $discussion) { DealDiscussion::create( [ 'deal_id' => $deal->id, 'comment' => $discussion->comment, 'created_by' => $discussion->created_by, ] ); } } } // end Transfer Discussion // Transfer Lead Files to Deal if(in_array('files', $request->is_transfer)) { $files = LeadFile::where('lead_id', '=', $lead->id)->get(); if(!empty($files)) { foreach($files as $file) { $location = base_path() . '/storage/lead_files/' . $file->file_path; $new_location = base_path() . '/storage/deal_files/' . $file->file_path; $copied = copy($location, $new_location); if($copied) { DealFile::create( [ 'deal_id' => $deal->id, 'file_name' => $file->file_name, 'file_path' => $file->file_path, ] ); } } } } // end Transfer Files // Transfer Lead Calls to Deal if(in_array('calls', $request->is_transfer)) { $calls = LeadCall::where('lead_id', '=', $lead->id)->get(); if(!empty($calls)) { foreach($calls as $call) { DealCall::create( [ 'deal_id' => $deal->id, 'subject' => $call->subject, 'call_type' => $call->call_type, 'duration' => $call->duration, 'user_id' => $call->user_id, 'description' => $call->description, 'call_result' => $call->call_result, ] ); } } } //end // Transfer Lead Emails to Deal if(in_array('emails', $request->is_transfer)) { $emails = LeadEmail::where('lead_id', '=', $lead->id)->get(); if(!empty($emails)) { foreach($emails as $email) { DealEmail::create( [ 'deal_id' => $deal->id, 'to' => $email->to, 'subject' => $email->subject, 'description' => $email->description, ] ); } } } } // Update is_converted field as deal_id $lead->is_converted = $deal->id; $lead->save(); //For Notification $setting = Utility::settings(\Auth::user()->creatorId()); $leadUsers = Lead::where('id', '=', $lead->id)->first(); $leadUserArr = [ 'lead_user_name' => $leadUsers->name, 'lead_name' => $lead->name, 'lead_email' => $lead->email, ]; //Slack Notification if(isset($setting['leadtodeal_notification']) && $setting['leadtodeal_notification'] ==1) { Utility::send_slack_msg('lead_to_deal_conversion', $leadUserArr); } //Telegram Notification if(isset($setting['telegram_leadtodeal_notification']) && $setting['telegram_leadtodeal_notification'] ==1) { Utility::send_telegram_msg('lead_to_deal_conversion', $leadUserArr); } //webhook $module ='Lead to Deal Conversion'; $webhook= Utility::webhookSetting($module); if($webhook) { $parameter = json_encode($lead); // 1 parameter is URL , 2 parameter is data , 3 parameter is method $status = Utility::WebhookCall($webhook['url'],$parameter,$webhook['method']); if($status == true) { return redirect()->back()->with('success', __('Lead successfully converted!')); } else { return redirect()->back()->with('error', __('Webhook call failed.')); } } return redirect()->back()->with('success', __('Lead successfully converted')); } // Lead Calls public function callCreate($id) { if(\Auth::user()->can('create lead call')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $users = UserLead::where('lead_id', '=', $lead->id)->get(); return view('leads.calls', compact('lead', 'users')); } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function callStore($id, Request $request) { if(\Auth::user()->can('create lead call')) { $usr = \Auth::user(); $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $validator = \Validator::make( $request->all(), [ 'subject' => 'required', 'call_type' => 'required', 'user_id' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $leadCall = LeadCall::create( [ 'lead_id' => $lead->id, 'subject' => $request->subject, 'call_type' => $request->call_type, 'duration' => $request->duration, 'user_id' => $request->user_id, 'description' => $request->description, 'call_result' => $request->call_result, ] ); LeadActivityLog::create( [ 'user_id' => $usr->id, 'lead_id' => $lead->id, 'log_type' => 'create lead call', 'remark' => json_encode(['title' => 'Create new Lead Call']), ] ); $leadArr = [ 'lead_id' => $lead->id, 'name' => $lead->name, 'updated_by' => $usr->id, ]; return redirect()->back()->with('success', __('Call successfully created!'))->with('status', 'calls'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'calls'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'calls'); } } public function callEdit($id, $call_id) { if(\Auth::user()->can('edit lead call')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $call = LeadCall::find($call_id); $users = UserLead::where('lead_id', '=', $lead->id)->get(); return view('leads.calls', compact('call', 'lead', 'users')); } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function callUpdate($id, $call_id, Request $request) { if(\Auth::user()->can('edit lead call')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $validator = \Validator::make( $request->all(), [ 'subject' => 'required', 'call_type' => 'required', 'user_id' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $call = LeadCall::find($call_id); $call->update( [ 'subject' => $request->subject, 'call_type' => $request->call_type, 'duration' => $request->duration, 'user_id' => $request->user_id, 'description' => $request->description, 'call_result' => $request->call_result, ] ); return redirect()->back()->with('success', __('Call successfully updated!'))->with('status', 'calls'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'calls'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'tasks'); } } public function callDestroy($id, $call_id) { if(\Auth::user()->can('delete lead call')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $task = LeadCall::find($call_id); $task->delete(); return redirect()->back()->with('success', __('Call successfully deleted!'))->with('status', 'calls'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'calls'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'calls'); } } // Lead email public function emailCreate($id) { if(\Auth::user()->can('create lead email')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { return view('leads.emails', compact('lead')); } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function emailStore($id, Request $request) { if(\Auth::user()->can('create lead email')) { $lead = Lead::find($id); if($lead->created_by == \Auth::user()->creatorId()) { $settings = Utility::settings(); $validator = \Validator::make( $request->all(), [ 'to' => 'required|email', 'subject' => 'required', 'description' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $leadEmail = LeadEmail::create( [ 'lead_id' => $lead->id, 'to' => $request->to, 'subject' => $request->subject, 'description' => $request->description, ] ); $leadEmail = [ 'lead_name' => $lead->name, 'to' => $request->to, 'subject' => $request->subject, 'description' => $request->description, ]; try { Mail::to($request->to)->send(new SendLeadEmail($leadEmail, $settings)); } catch(\Exception $e) { $smtp_error = __('E-Mail has been not sent due to SMTP configuration'); } // LeadActivityLog::create( [ 'user_id' => \Auth::user()->id, 'lead_id' => $lead->id, 'log_type' => 'create lead email', 'remark' => json_encode(['title' => 'Create new Deal Email']), ] ); return redirect()->back()->with('success', __('Email successfully created!') . ((isset($smtp_error)) ? '
' . $smtp_error . '' : ''))->with('status', 'emails'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'emails'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'emails'); } } public function export() { $name = 'Lead_' . date('Y-m-d i:h:s'); $data = Excel::download(new LeadExport(), $name . '.xlsx'); ob_end_clean(); return $data; } public function importFile() { return view('leads.import'); } public function import(Request $request) { $rules = [ 'file' => 'required|mimes:csv,txt', ]; $validator = \Validator::make($request->all(), $rules); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $leads = (new LeadImport())->toArray(request()->file('file'))[0]; $totalLead = count($leads) - 1; $errorArray = []; for($i = 1; $i <= count($leads) - 1; $i++) { $lead = $leads[$i]; $leadByEmail = Lead::where('email', $lead[1])->first(); if(!empty($leadByEmail)) { $leadData = $leadByEmail; } else { $leadData = new Lead(); } $user = User::where('name', $lead[4])->where('created_by',\Auth::user()->creatorId())->first(); $pipeline = PipeLine::where('name', $lead[5])->where('created_by',\Auth::user()->creatorId())->first(); $stage = LeadStage::where('name', $lead[6])->where('created_by',\Auth::user()->creatorId())->first(); $leadData->name = $lead[0]; $leadData->email = $lead[1]; $leadData->phone = $lead[2]; $leadData->subject = $lead[3]; $leadData->user_id = !empty($user) ? $user->id : 3; $leadData->pipeline_id = !empty($pipeline) ? $pipeline->id : 1; $leadData->stage_id = !empty($stage) ? $stage->id: 1; $leadData->created_by = \Auth::user()->creatorId(); if(empty($leadData)) { $errorArray[] = $leadData; } else { $leadData->save(); $userData = new UserLead(); $userData->user_id = \Auth::user()->creatorId(); $userData->lead_id = $leadData->id; $userData->save(); } } $errorRecord = []; if(empty($errorArray)) { $data['status'] = 'success'; $data['msg'] = __('Record successfully imported'); } else { $data['status'] = 'error'; $data['msg'] = count($errorArray) . ' ' . __('Record imported fail out of' . ' ' . $totalLead . ' ' . 'record'); foreach($errorArray as $errorData) { $errorRecord[] = implode(',', $errorData); } \Session::put('errorArray', $errorRecord); } return redirect()->back()->with($data['status'], $data['msg']); } }