dbfdg can('manage deal')) { if($usr->default_pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->ownerId())->where('id', '=', $usr->default_pipeline)->first(); if(!$pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->ownerId())->first(); } } else { $pipeline = Pipeline::where('created_by', '=', $usr->ownerId())->first(); } $pipelines = Pipeline::where('created_by', '=', $usr->ownerId())->get()->pluck('name', 'id'); if($usr->type == 'client') { $id_deals = $usr->clientDeals->pluck('id'); } else { $id_deals = $usr->deals->pluck('id'); } $deals = Deal::whereIn('id', $id_deals)->where('pipeline_id', '=', $pipeline->id)->get(); $curr_month = Deal::whereIn('id', $id_deals)->where('pipeline_id', '=', $pipeline->id)->whereMonth('created_at', '=', date('m'))->get(); $curr_week = Deal::whereIn('id', $id_deals)->where('pipeline_id', '=', $pipeline->id)->whereBetween( 'created_at', [ \Carbon\Carbon::now()->startOfWeek(), \Carbon\Carbon::now()->endOfWeek(), ] )->get(); $last_30days = Deal::whereIn('id', $id_deals)->where('pipeline_id', '=', $pipeline->id)->whereDate('created_at', '>', \Carbon\Carbon::now()->subDays(30))->get(); // Deal Summary $cnt_deal = []; $cnt_deal['total'] = Deal::getDealSummary($deals); $cnt_deal['this_month'] = Deal::getDealSummary($curr_month); $cnt_deal['this_week'] = Deal::getDealSummary($curr_week); $cnt_deal['last_30days'] = Deal::getDealSummary($last_30days); return view('deals.index', compact('pipelines', 'pipeline', 'cnt_deal')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function deal_list() { $usr = \Auth::user(); if($usr->can('manage deal')) { if($usr->default_pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->ownerId())->where('id', '=', $usr->default_pipeline)->first(); if(!$pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->ownerId())->first(); } } else { $pipeline = Pipeline::where('created_by', '=', $usr->ownerId())->first(); } $pipelines = Pipeline::where('created_by', '=', $usr->ownerId())->get()->pluck('name', 'id'); if($usr->type == 'client') { $id_deals = $usr->clientDeals->pluck('id'); } else { $id_deals = $usr->deals->pluck('id'); } $deals = Deal::whereIn('id', $id_deals)->where('pipeline_id', '=', $pipeline->id)->get(); $curr_month = Deal::whereIn('id', $id_deals)->where('pipeline_id', '=', $pipeline->id)->whereMonth('created_at', '=', date('m'))->get(); $curr_week = Deal::whereIn('id', $id_deals)->where('pipeline_id', '=', $pipeline->id)->whereBetween( 'created_at', [ \Carbon\Carbon::now()->startOfWeek(), \Carbon\Carbon::now()->endOfWeek(), ] )->get(); $last_30days = Deal::whereIn('id', $id_deals)->where('pipeline_id', '=', $pipeline->id)->whereDate('created_at', '>', \Carbon\Carbon::now()->subDays(30))->get(); // Deal Summary $cnt_deal = []; $cnt_deal['total'] = Deal::getDealSummary($deals); $cnt_deal['this_month'] = Deal::getDealSummary($curr_month); $cnt_deal['this_week'] = Deal::getDealSummary($curr_week); $cnt_deal['last_30days'] = Deal::getDealSummary($last_30days); // Deals if($usr->type == 'client') { $deals = Deal::select('deals.*')->join('client_deals', 'client_deals.deal_id', '=', 'deals.id')->where('client_deals.client_id', '=', $usr->id)->where('deals.pipeline_id', '=', $pipeline->id)->orderBy('deals.order')->get(); } else { $deals = Deal::select('deals.*')->join('user_deals', 'user_deals.deal_id', '=', 'deals.id')->where('user_deals.user_id', '=', $usr->id)->where('deals.pipeline_id', '=', $pipeline->id)->orderBy('deals.order')->get(); } return view('deals.list', compact('pipelines', 'pipeline', 'deals', 'cnt_deal')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } /** * Show the form for creating a new redeal. * * @return \Illuminate\Http\Response */ public function create() { if(\Auth::user()->can('create deal')) { $clients = User::where('created_by', '=', \Auth::user()->ownerId())->where('type', 'client')->get()->pluck('name', 'id'); $customFields = CustomField::where('module', '=', 'deal')->get(); return view('deals.create', compact('clients', 'customFields')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } /** * Store a newly created redeal in storage. * * @param \Illuminate\Http\Request $request * * @return \Illuminate\Http\Response */ public function store(Request $request) { $usr = \Auth::user(); if($usr->can('create deal')) { $countDeal = Deal::where('created_by', '=', $usr->ownerId())->count(); $validator = \Validator::make( $request->all(), [ 'name' => 'required', ] ); 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->ownerId())->where('id', '=', $usr->default_pipeline)->first(); if(!$pipeline) { $pipeline = Pipeline::where('created_by', '=', $usr->ownerId())->first(); } } else { $pipeline = Pipeline::where('created_by', '=', $usr->ownerId())->first(); } $stage = Stage::where('pipeline_id', '=', $pipeline->id)->first(); // End Default Field Value // Check if stage are available or not in pipeline. if(empty($stage)) { return redirect()->back()->with('error', __('Please Create Stage for This Pipeline.')); } else { $deal = new Deal(); $deal->name = $request->name; $deal->phone = $request->phone; if(empty($request->price)) { $deal->price = 0; } else { $deal->price = $request->price; } $deal->pipeline_id = $pipeline->id; $deal->stage_id = $stage->id; $deal->status = 'Active'; $deal->created_by = $usr->ownerId(); $deal->save(); //send email $clients = User::whereIN('id', array_filter($request->clients))->get()->pluck('email', 'id')->toArray(); $dealArr = [ 'deal_id' => $deal->id, 'name' => $deal->name, 'updated_by' => $usr->id, ]; $dArr = [ 'deal_name' => $deal->name, 'deal_pipeline' => $pipeline->name, 'deal_stage' => $stage->name, 'deal_status' => $deal->status, 'deal_price' => $usr->priceFormat($deal->price), ]; foreach(array_keys($clients) as $client) { ClientDeal::create( [ 'deal_id' => $deal->id, 'client_id' => $client, ] ); } if($usr->type=='company'){ $usrDeals = [ $usr->id, ]; }else{ $usrDeals = [ $usr->id, $usr->ownerId() ]; } foreach($usrDeals as $usrDeal) { UserDeal::create( [ 'user_id' => $usrDeal, 'deal_id' => $deal->id, ] ); } CustomField::saveData($deal, $request->customField); // Send Email $setings = Utility::settings(); if($setings['deal_assigned'] == 1) { $clients = User::whereIN('id', array_filter($request->clients))->get()->pluck('email', 'id')->toArray(); $dealAssignArr = [ 'deal_name' => $deal->name, 'deal_pipeline' => $pipeline->name, 'deal_stage' => $stage->name, 'deal_status' => $deal->status, 'deal_price' => $usr->priceFormat($deal->price), ]; $resp = Utility::sendEmailTemplate('deal_assigned', $clients, $dealAssignArr); // return redirect()->back()->with('success', __('Deal successfully created!') .(($resp['is_success'] == false && !empty($resp['error'])) ? '
' . $resp['error'] . '' : '')); } //For Notification $setting = Utility::settings(\Auth::user()->creatorId()); $dealNotificationArr = [ 'user_name' => \Auth::user()->name, 'deal_name' => $deal->name, ]; //Slack Notification if(isset($setting['deal_notification']) && $setting['deal_notification'] ==1) { Utility::send_slack_msg('new_deal', $dealNotificationArr); } //Telegram Notification if(isset($setting['telegram_deal_notification']) && $setting['telegram_deal_notification'] ==1) { Utility::send_telegram_msg('new_deal', $dealNotificationArr); } //webhook $module ='New Deal'; $webhook= Utility::webhookSetting($module); if($webhook) { $parameter = json_encode($deal); $status = Utility::WebhookCall($webhook['url'],$parameter,$webhook['method']); if($status == true) { return redirect()->back()->with('success', __('Deal 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', __('Deal successfully created!') .((!empty ($resp) && $resp['is_success'] == false && !empty($resp['error'])) ? '
' . $resp['error'] . '' : '')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } /** * Display the specified redeal. * * @param \App\Deal $deal * * @return \Illuminate\Http\Response */ public function show(Deal $deal) { if($deal->is_active) { $calenderTasks = []; if(\Auth::user()->can('view task')) { foreach($deal->tasks as $task) { $calenderTasks[] = [ 'title' => $task->name, 'start' => $task->date, 'url' => route( 'deals.tasks.show', [ $deal->id, $task->id, ] ), 'className' => ($task->status) ? 'bg-primary border-primary' : 'bg-warning border-warning', ]; } } $permission = []; $customFields = CustomField::where('module', '=', 'deal')->get(); $deal->customField = CustomField::getData($deal, 'deal')->toArray(); return view('deals.show', compact('deal', 'customFields', 'calenderTasks', 'permission')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } /** * Show the form for editing the specified redeal. * * @param \App\Deal $deal * * @return \Illuminate\Http\Response */ public function edit(Deal $deal) { if(\Auth::user()->can('edit deal')) { if($deal->created_by == \Auth::user()->ownerId()) { $pipelines = Pipeline::where('created_by', '=', \Auth::user()->ownerId())->get()->pluck('name', 'id'); $sources = Source::where('created_by', '=', \Auth::user()->ownerId())->get()->pluck('name', 'id'); $products = ProductService::where('created_by', '=', \Auth::user()->ownerId())->get()->pluck('name', 'id'); $deal->customField = CustomField::getData($deal, 'deal'); $customFields = CustomField::where('module', '=', 'deal')->get(); $deal->sources = explode(',', $deal->sources); $deal->products = explode(',', $deal->products); return view('deals.edit', compact('deal', 'pipelines', 'sources', 'products', 'customFields')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } /** * Update the specified redeal in storage. * * @param \Illuminate\Http\Request $request * @param \App\Deal $deal * * @return \Illuminate\Http\Response */ public function update(Request $request, Deal $deal) { if(\Auth::user()->can('edit deal')) { if($deal->created_by == \Auth::user()->ownerId()) { $validator = \Validator::make( $request->all(), [ 'name' => 'required|max:20', 'pipeline_id' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $deal->name = $request->name; $deal->phone = $request->phone; if(empty($request->price)) { $deal->price = 0; } else { $deal->price = $request->price; } $deal->pipeline_id = $request->pipeline_id; $deal->stage_id = $request->stage_id; $deal->sources = implode(",", array_filter($request->sources)); $deal->products = implode(",", array_filter($request->products)); $deal->notes = $request->notes; $deal->save(); CustomField::saveData($deal, $request->customField); return redirect()->back()->with('success', __('Deal successfully updated!')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } /** * Remove the specified redeal from storage. * * @param \App\Deal $deal * * @return \Illuminate\Http\Response */ public function destroy(Deal $deal) { if(\Auth::user()->can('delete deal')) { if($deal->created_by == \Auth::user()->ownerId()) { DealDiscussion::where('deal_id', '=', $deal->id)->delete(); DealFile::where('deal_id', '=', $deal->id)->delete(); ClientDeal::where('deal_id', '=', $deal->id)->delete(); UserDeal::where('deal_id', '=', $deal->id)->delete(); DealTask::where('deal_id', '=', $deal->id)->delete(); ActivityLog::where('deal_id', '=', $deal->id)->delete(); // ClientPermission::where('deal_id', '=', $deal->id)->delete(); $deal->delete(); return redirect()->route('deals.index')->with('success', __('Deal successfully deleted!')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function order(Request $request) { $usr = \Auth::user(); if($usr->can('move deal')) { $post = $request->all(); $deal = $this->deal($post['deal_id']); $clients = ClientDeal::select('client_id')->where('deal_id', '=', $deal->id)->get()->pluck('client_id')->toArray(); $deal_users = $deal->users->pluck('id')->toArray(); $usrs = User::whereIN('id', array_merge($deal_users, $clients))->get()->pluck('email', 'id')->toArray(); if($deal->stage_id != $post['stage_id']) { $newStage = Stage::find($post['stage_id']); ActivityLog::create( [ 'user_id' => $usr->id, 'deal_id' => $deal->id, 'log_type' => 'Move', 'remark' => json_encode( [ 'title' => $deal->name, 'old_status' => $deal->stage->name, 'new_status' => $newStage->name, ] ), ] ); $dealArr = [ 'deal_id' => $deal->id, 'name' => $deal->name, 'updated_by' => $usr->id, 'old_status' => $deal->stage->name, 'new_status' => $newStage->name, ]; $dArr = [ 'deal_name' => $deal->name, 'deal_pipeline' => $deal->email, 'deal_stage' => $deal->stage->name, 'deal_status' => $deal->status, 'deal_price' => $usr->priceFormat($deal->price), 'deal_old_stage' => $deal->stage->name, 'deal_new_stage' => $newStage->name, ]; // Send Email Utility::sendEmailTemplate('Move Deal', $usrs, $dArr); } foreach($post['order'] as $key => $item) { $deal = $this->deal($item); $deal->order = $key; $deal->stage_id = $post['stage_id']; $deal->save(); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } private static $dealData = NUll; public function deal($item) { if(self::$dealData == null) { $deal = Deal::find($item); self::$dealData = $deal; } return self::$dealData; } public function labels($id) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $labels = Label::where('pipeline_id', '=', $deal->pipeline_id)->where('created_by', \Auth::user()->creatorId())->get(); $selected = $deal->labels(); if($selected) { $selected = $selected->pluck('name', 'id')->toArray(); } else { $selected = []; } return view('deals.labels', compact('deal', '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 deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { if($request->labels) { $deal->labels = implode(',', $request->labels); } else { $deal->labels = $request->labels; } $deal->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 deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $users = User::where('created_by', '=', \Auth::user()->ownerId())->where('type','!=','client')->whereNOTIn( 'id', function ($q) use ($deal){ $q->select('user_id')->from('user_deals')->where('deal_id', '=', $deal->id); } )->get(); foreach($users as $key => $user) { if(!$user->can('manage deal')) { $users->forget($key); } } $users = $users->pluck('name', 'id'); $users->prepend(__('Select Users'), ''); return view('deals.users', compact('deal', 'users')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function userUpdate($id, Request $request) { $usr = \Auth::user(); if($usr->can('edit deal')) { $deal = Deal::find($id); $resp = ''; if($deal->created_by == $usr->ownerId()) { if(!empty($request->users)) { $users = User::whereIN('id', array_filter($request->users))->get()->pluck('email', 'id')->toArray(); $dealArr = [ 'deal_id' => $deal->id, 'name' => $deal->name, 'updated_by' => $usr->id, ]; $dArr = [ 'deal_name' => $deal->name, 'deal_pipeline' => $deal->pipeline->name, 'deal_stage' => $deal->stage->name, 'deal_status' => $deal->status, 'deal_price' => $usr->priceFormat($deal->price), ]; foreach(array_keys($users) as $user) { UserDeal::create( [ 'deal_id' => $deal->id, 'user_id' => $user, ] ); } // Send Email $resp = Utility::sendEmailTemplate('Assign Deal', $users, $dArr); } if(!empty($users) && !empty($request->users)) { return redirect()->back()->with('success', __('Users successfully updated!') . ((!empty($resp) && $resp['is_success'] == false && !empty($resp['error'])) ? '
' . $resp['error'] . '' : '')); } 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 deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { UserDeal::where('deal_id', '=', $deal->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 clientEdit($id) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $clients = User::where('created_by', '=', \Auth::user()->ownerId())->where('type', 'client')->whereNOTIn( 'id', function ($q) use ($deal){ $q->select('client_id')->from('client_deals')->where('deal_id', '=', $deal->id); } )->get()->pluck('name', 'id'); return view('deals.clients', compact('deal', 'clients')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function clientUpdate($id, Request $request) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { if(!empty($request->clients)) { $clients = array_filter($request->clients); foreach($clients as $client) { ClientDeal::create( [ 'deal_id' => $deal->id, 'client_id' => $client, ] ); } } if(!empty($clients) && !empty($request->clients)) { return redirect()->back()->with('success', __('Clients successfully updated!'))->with('status', 'clients'); } else { return redirect()->back()->with('error', __('Please Select Valid Clients!'))->with('status', 'clients'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'clients'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'clients'); } } public function clientDestroy($id, $client_id) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { ClientDeal::where('deal_id', '=', $deal->id)->where('client_id', '=', $client_id)->delete(); return redirect()->back()->with('success', __('Client successfully deleted!'))->with('status', 'clients'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'clients'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'clients'); } } public function productEdit($id) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $products = ProductService::where('created_by', '=', \Auth::user()->ownerId())->whereNOTIn('id', explode(',', $deal->products))->get()->pluck('name', 'id'); return view('deals.products', compact('deal', 'products')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function productUpdate($id, Request $request) { $usr = \Auth::user(); if($usr->can('edit deal')) { $deal = Deal::find($id); $clients = ClientDeal::select('client_id')->where('deal_id', '=', $id)->get()->pluck('client_id')->toArray(); $deal_users = $deal->users->pluck('id')->toArray(); if($deal->created_by == $usr->ownerId()) { if(!empty($request->products)) { $products = array_filter($request->products); $old_products = explode(',', $deal->products); $deal->products = implode(',', array_merge($old_products, $products)); $deal->save(); $objProduct = ProductService::whereIN('id', $products)->get()->pluck('name', 'id')->toArray(); ActivityLog::create( [ 'user_id' => $usr->id, 'deal_id' => $deal->id, 'log_type' => 'Add Product', 'remark' => json_encode(['title' => implode(",", $objProduct)]), ] ); $productArr = [ 'deal_id' => $deal->id, 'name' => $deal->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 deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $products = explode(',', $deal->products); foreach($products as $key => $product) { if($product_id == $product) { unset($products[$key]); } } $deal->products = implode(',', $products); $deal->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 fileUpload($id, Request $request) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $request->validate(['file' => 'required']); //storage limit $image_size = $request->file('file')->getSize(); $result = Utility::updateStorageLimit(\Auth::user()->creatorId(), $image_size); $file_name = $request->file->getClientOriginalName(); $file_path = $request->deal_id . "_" . md5(time()) . "_" . $request->file->getClientOriginalName(); $file = DealFile::create( [ 'deal_id' => $request->deal_id, 'file_name' => $file_name, 'file_path' => $file_path, ] ); if($result==1) { $request->file->storeAs('deal_files', $file_path); $return = []; $return['is_success'] = true; $return['download'] = route( 'deals.file.download', [ $deal->id, $file->id, ] ); $return['delete'] = route( 'deals.file.delete', [ $deal->id, $file->id, ] ); }else{ $return = []; $return['is_success'] = true; $return['status'] =1; $return['success_msg'] = ((isset($result) && $result!=1) ? '
' . $result . '' : ''); } ActivityLog::create( [ 'user_id' => \Auth::user()->id, 'deal_id' => $deal->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 deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $file = DealFile::find($file_id); if($file) { $file_path = storage_path('deal_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 deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $file = DealFile::find($file_id); if($file) { //storage limit $file_path = 'deal_files/'.$file->file_path; $result = Utility::changeStorageLimit(\Auth::user()->creatorId(), $file_path); $path = storage_path('deal_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 deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $deal->notes = $request->notes; $deal->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 taskCreate($id) { if(\Auth::user()->can('create task')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $priorities = DealTask::$priorities; $status = DealTask::$status; return view('deals.tasks', compact('deal', 'priorities', 'status')); } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function taskStore($id, Request $request) { $usr = \Auth::user(); if($usr->can('create task')) { $deal = Deal::find($id); $clients = ClientDeal::select('client_id')->where('deal_id', '=', $id)->get()->pluck('client_id')->toArray(); $deal_users = $deal->users->pluck('id')->toArray(); $usrs = User::whereIN('id', array_merge($deal_users, $clients))->get()->pluck('email', 'id')->toArray(); if($deal->created_by == $usr->ownerId()) { $validator = \Validator::make( $request->all(), [ 'name' => 'required', 'date' => 'required', 'time' => 'required', 'priority' => 'required', 'status' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $dealTask = DealTask::create( [ 'deal_id' => $deal->id, 'name' => $request->name, 'date' => $request->date, 'time' => date('H:i:s', strtotime($request->date . ' ' . $request->time)), 'priority' => $request->priority, 'status' => $request->status, ] ); ActivityLog::create( [ 'user_id' => $usr->id, 'deal_id' => $deal->id, 'log_type' => 'Create Task', 'remark' => json_encode(['title' => $dealTask->name]), ] ); $taskArr = [ 'deal_id' => $deal->id, 'name' => $deal->name, 'updated_by' => $usr->id, ]; $tArr = [ 'deal_name' => $deal->name, 'deal_pipeline' => $deal->pipeline->name, 'deal_stage' => $deal->stage->name, 'deal_status' => $deal->status, 'deal_price' => $usr->priceFormat($deal->price), 'task_name' => $dealTask->name, 'task_priority' => DealTask::$priorities[$dealTask->priority], 'task_status' => DealTask::$status[$dealTask->status], ]; // Send Email Utility::sendEmailTemplate('Create Task', $usrs, $tArr); return redirect()->back()->with('success', __('Task successfully created!'))->with('status', 'tasks'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'tasks'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'tasks'); } } public function taskShow($id, $task_id) { if(\Auth::user()->can('view task')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $task = DealTask::find($task_id); return view('deals.tasksShow', compact('task', 'deal')); } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function taskEdit($id, $task_id) { if(\Auth::user()->can('edit task')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $priorities = DealTask::$priorities; $status = DealTask::$status; $task = DealTask::find($task_id); return view('deals.tasks', compact('task', 'deal', 'priorities', 'status')); } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } else { return response()->json( [ 'is_success' => false, 'error' => __('Permission Denied.'), ], 401 ); } } public function taskUpdate($id, $task_id, Request $request) { if(\Auth::user()->can('edit task')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $validator = \Validator::make( $request->all(), [ 'name' => 'required', 'date' => 'required', 'time' => 'required', 'priority' => 'required', 'status' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return redirect()->back()->with('error', $messages->first()); } $task = DealTask::find($task_id); $task->update( [ 'name' => $request->name, 'date' => $request->date, 'time' => date('H:i:s', strtotime($request->date . ' ' . $request->time)), 'priority' => $request->priority, 'status' => $request->status, ] ); return redirect()->back()->with('success', __('Task successfully updated!'))->with('status', 'tasks'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'tasks'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'tasks'); } } public function taskUpdateStatus($id, $task_id, Request $request) { if(\Auth::user()->can('edit task')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $validator = \Validator::make( $request->all(), [ 'status' => 'required', ] ); if($validator->fails()) { $messages = $validator->getMessageBag(); return response()->json( [ 'is_success' => false, 'error' => $messages->first(), ], 401 ); } $task = DealTask::find($task_id); if($request->status) { $task->status = 0; } else { $task->status = 1; } $task->save(); return response()->json( [ 'is_success' => true, 'success' => __('Task successfully updated!'), 'status' => $task->status, 'status_label' => __(DealTask::$status[$task->status]), ], 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 taskDestroy($id, $task_id) { if(\Auth::user()->can('delete task')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $task = DealTask::find($task_id); $task->delete(); return redirect()->back()->with('success', __('Task successfully deleted!'))->with('status', 'tasks'); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'tasks'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'tasks'); } } public function sourceEdit($id) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $sources = Source::where('created_by', '=', \Auth::user()->ownerId())->get(); $selected = $deal->sources(); if($selected) { $selected = $selected->pluck('name', 'id')->toArray(); } return view('deals.sources', compact('deal', 'sources', 'selected')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function sourceUpdate($id, Request $request) { $usr = \Auth::user(); if($usr->can('edit deal')) { $deal = Deal::find($id); $clients = ClientDeal::select('client_id')->where('deal_id', '=', $id)->get()->pluck('client_id')->toArray(); $deal_users = $deal->users->pluck('id')->toArray(); if($deal->created_by == $usr->ownerId()) { if(!empty($request->sources) && count($request->sources) > 0) { $deal->sources = implode(',', $request->sources); } else { $deal->sources = ""; } $deal->save(); ActivityLog::create( [ 'user_id' => $usr->id, 'deal_id' => $deal->id, 'log_type' => 'Update Sources', 'remark' => json_encode(['title' => 'Update Sources']), ] ); $dealArr = [ 'deal_id' => $deal->id, 'name' => $deal->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 deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $sources = explode(',', $deal->sources); foreach($sources as $key => $source) { if($source_id == $source) { unset($sources[$key]); } } $deal->sources = implode(',', $sources); $deal->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 permission($id, $clientId) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); $client = User::find($clientId); $selected = $client->clientPermission($deal->id); if($selected) { $selected = explode(',', $selected->permissions); } else { $selected = []; } $permissions = Deal::$permissions; return view('deals.permissions', compact('deal', 'client', 'selected', 'permissions')); } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'clients'); } } public function permissionStore($id, $clientId, Request $request) { if(\Auth::user()->can('edit deal')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $client = User::find($clientId); $permissions = $client->clientPermission($deal->id); if($permissions) { if(!empty($request->permissions) && count($request->permissions) > 0) { $permissions->permissions = implode(',', $request->permissions); } else { $permissions->permissions = ""; } $permissions->save(); return redirect()->back()->with('success', __('Permissions successfully updated!'))->with('status', 'clients'); } elseif(!empty($request->permissions) && count($request->permissions) > 0) { ClientPermission::create( [ 'client_id' => $clientId, 'deal_id' => $deal->id, 'permissions' => implode(',', $request->permissions), ] ); return redirect()->back()->with('success', __('Permissions successfully updated!'))->with('status', 'clients'); } else { return redirect()->back()->with('error', __('Invalid Permission.'))->with('status', 'clients'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'clients'); } } else { return redirect()->back()->with('error', __('Permission Denied.'))->with('status', 'clients'); } } public function jsonUser(Request $request) { $users = []; if(!empty($request->deal_id)) { $deal = Deal::find($request->deal_id); $users = $deal->users->pluck('name', 'id'); } return response()->json($users, 200); } public function changePipeline(Request $request) { $user = \Auth::user(); $user->default_pipeline = $request->default_pipeline_id; $user->save(); return redirect()->back(); } public function discussionCreate($id) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { return view('deals.discussions', compact('deal')); } else { return response()->json(['error' => __('Permission Denied.')], 401); } } public function discussionStore($id, Request $request) { $usr = \Auth::user(); $deal = Deal::find($id); $clients = ClientDeal::select('client_id')->where('deal_id', '=', $id)->get()->pluck('client_id')->toArray(); $deal_users = $deal->users->pluck('id')->toArray(); if($deal->created_by == \Auth::user()->ownerId()) { $discussion = new DealDiscussion(); $discussion->comment = $request->comment; $discussion->deal_id = $deal->id; $discussion->created_by = \Auth::user()->id; $discussion->save(); $dealArr = [ 'deal_id' => $deal->id, 'name' => $deal->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 changeStatus(Request $request, $id) { $deal = Deal::where('id', '=', $id)->first(); $deal->status = $request->deal_status; $deal->save(); return redirect()->back(); } // Deal Calls public function callCreate($id) { if(\Auth::user()->can('create deal call')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $users = UserDeal::where('deal_id', '=', $deal->id)->get(); return view('deals.calls', compact('deal', '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) { $usr = \Auth::user(); if($usr->can('create deal call')) { $deal = Deal::find($id); if($deal->created_by == $usr->ownerId()) { $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()); } DealCall::create( [ 'deal_id' => $deal->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, ] ); ActivityLog::create( [ 'user_id' => $usr->id, 'deal_id' => $deal->id, 'log_type' => 'Create Deal Call', 'remark' => json_encode(['title' => 'Create new Deal Call']), ] ); $dealArr = [ 'deal_id' => $deal->id, 'name' => $deal->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 deal call')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $call = DealCall::find($call_id); $users = UserDeal::where('deal_id', '=', $deal->id)->get(); return view('deals.calls', compact('call', 'deal', '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 deal call')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $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 = DealCall::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 deal call')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $task = DealCall::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'); } } // Deal email public function emailCreate($id) { if(\Auth::user()->can('create deal email')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { return view('deals.emails', compact('deal')); } 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 deal email')) { $deal = Deal::find($id); if($deal->created_by == \Auth::user()->ownerId()) { $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()); } DealEmail::create( [ 'deal_id' => $deal->id, 'to' => $request->to, 'subject' => $request->subject, 'description' => $request->description, ] ); $dealEmail = [ 'deal_name' => $deal->name, 'to' => $request->to, 'subject' => $request->subject, 'description' => $request->description, ]; // dd($deal->name); try { Mail::to($request->to)->send(new SendDealEmail($dealEmail, $settings)); } catch(\Exception $e) { // dd($e); $smtp_error = __('E-Mail has been not sent due to SMTP configuration'); } ActivityLog::create( [ 'user_id' => \Auth::user()->id, 'deal_id' => $deal->id, 'log_type' => 'Create Deal 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 = 'Deal_' . date('Y-m-d i:h:s'); $data = Excel::download(new DealExport(), $name . '.xlsx'); ob_end_clean(); return $data; } public function importFile() { return view('deals.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()); } $deals = (new DealImport())->toArray(request()->file('file'))[0]; $totalDeal = count($deals) - 1; $errorArray = []; for($i = 1; $i <= count($deals) - 1; $i++) { $deal = $deals[$i]; $dealData = new Deal(); $user = User::where('name', $deal[5])->where('type','client')->where('created_by', \Auth::user()->creatorId())->first(); $pipeline = PipeLine::where('name', $deal[3])->where('created_by', \Auth::user()->creatorId())->first(); $stage = Stage::where('name', $deal[4])->where('created_by', \Auth::user()->creatorId())->first(); $dealData->name = $deal[0]; $dealData->phone = $deal[1]; $dealData->price = $deal[2]; // $dealData->user_id = !empty($user) ? $user->id : 3; $dealData->pipeline_id = !empty($pipeline) ? $pipeline->id : 1; $dealData->stage_id = !empty($stage) ? $stage->id: 1; $dealData->created_by = \Auth::user()->creatorId(); $dealData->status = 'Active'; if(empty($dealData)) { $errorArray[] = $dealData; } else { $dealData->save(); $clientData = new ClientDeal(); $clientData->client_id = $user->id; $clientData->deal_id = $dealData->id; $clientData->save(); $userData = new UserDeal(); $userData->user_id = \Auth::user()->creatorId(); $userData->deal_id = $dealData->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' . ' ' . $totalDeal . ' ' . 'record'); foreach($errorArray as $errorData) { $errorRecord[] = implode(',', $errorData); } \Session::put('errorArray', $errorRecord); } return redirect()->back()->with($data['status'], $data['msg']); } }