MINI Sh3ll
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Requests\SubmitEnquiryRequest;
use App\Http\Requests\EditEnquiryRequest;
use App\Solar\Repositories\Company\CompanyInterface;
use App\Solar\Repositories\Company\CompanyRepository;
use App\Solar\Repositories\Enquiry\EnquiryInterface;
use App\Solar\Repositories\Enquiry\EnquiryRepository;
use App\Solar\Repositories\Plant\PlantInterface;
use App\Solar\Repositories\Plant\PlantRepository;
use App\Solar\Repositories\User\UserInterface;
use App\Models\Plant;
use App\Models\Company;
use App\Models\Enquiry;
use App\Models\EnquiryAssigned;
use App\Models\EnquiryRemark;
use App\User;
use Auth;
class EnquiryController extends Controller {
private $enquiry;
private $company;
private $plant;
private $user;
public function __construct(EnquiryInterface $enquiry, CompanyInterface $company,PlantInterface $plant , UserInterface $user) {
$this->enquiry = $enquiry;
$this->company = $company;
$this->plant = $plant;
$this->user = $user;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index() {
$breadcrumb = breadCrumb('Enquiry', 'enquiry.index', '');
$companies_name = $this->user->getCompany();
$productTypes = config('constants.productType');
$issueTypes = config('constants.issueType');
$plants_name = $this->plant->getAllPlantNames();
$created_by_names = $this->enquiry->getAllEnquiryCreatedBy();
$plant_exist = $this->enquiry->getPlantsForUser();
return view('enquiries.index', compact('companies_name', 'plants_name', 'productTypes', 'issueTypes', 'created_by_names','breadcrumb', 'plant_exist'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create() {
$breadcrumb = breadCrumb('Enquiry', 'enquiry.index', 'Create');
$users = $this->enquiry->getAllCompanyUsers();
$companies = '';
if(Auth::user()->role_id != config('constants.role.superadmin.id')){
$user_id = Auth::user()->id;
$companies = $this->enquiry->getCompanies($user_id);
}
$countries = $this->enquiry->getCountries();
$productTypes = config('constants.productType');
$issueTypes = config('constants.issueType');
return view('enquiries.create', compact('countries', 'users','companies','productTypes','issueTypes','breadcrumb'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(SubmitEnquiryRequest $request) {
try {
$enquiry = $this->enquiry->store($request);
if($enquiry){
DB::commit();
return redirect()->route('enquiry.index')->with('success', 'Enquiry submitted successfully.');
}
return redirect()->back()->with('error','Error while processing the request');
} catch (\Exception $e) {
DB::rollBack();
logger($e->getMessage());
return redirect()->back()->with('error', $e->getMessage());
}
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id) {
$breadcrumb = breadCrumb('Enquiry', 'enquiry.index', 'Show');
$id = decrypt($id);
$enquiry = $this->enquiry->find($id);
//$comment = $this->enquiry->getComment($id);
$productTypes = config('constants.productType');
$issueTypes = config('constants.issueType');
$remarks = $this->enquiry->getComment($id);
return view('enquiries.show', compact('enquiry','productTypes','issueTypes', 'remarks','breadcrumb'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id) {
$breadcrumb = breadCrumb('Enquiry', 'enquiry.index', 'Edit');
$id = decrypt($id);
$user_id = Auth::user()->id;
$companies = $this->enquiry->getCompanies($user_id);
$countries = $this->enquiry->getCountries();
$enquiry = $this->enquiry->find($id);
$productTypes = config('constants.productType');
$issueTypes = config('constants.issueType');
$company_id = $enquiry->company_id;
$portalSupportUsers = $this->enquiry->getPortalSupports($company_id);
$remarks = '';
if($enquiry->status==2){
$remarks = $this->enquiry->getEnquiryClosedDetails($id);
}
//$enquiryAssignedTo = $this->enquiry->getEnquiryAssignedTo($id);
//$remarks = $this->enquiry->getRemark($id);
return view('enquiries.edit', compact('countries', 'companies', 'productTypes','issueTypes','enquiry', 'portalSupportUsers', 'remarks','breadcrumb'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(EditEnquiryRequest $request, $id) {
DB::beginTransaction();
try {
$this->enquiry->update($id, $request);
DB::commit();
return redirect()->route('enquiry.index')->with('success', 'Enquiry updated successfully.');
} catch (\Exception $e) {
DB::rollBack();
logger($e->getMessage());
return redirect()->back()->with('error', $e->getMessage());
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id) {
//
}
/*
* Get companies of related user
*/
public function getCompanies(Request $request)
{
$user_id = $request->user_id;
$companies = $this->enquiry->getCompanies($user_id);
return \Response::json($companies);
}
/*
* Get Plants of related company
*/
public function getPlants(Request $request)
{
$company_id = $request->company_id;
$user_id = $request->user_id?$request->user_id:\Auth::id();
$plants = $this->enquiry->getPlants($user_id, $company_id);
return \Response::json($plants);
}
/*
* Get User
*/
public function getUser(Request $request)
{
$user_id = $request->user_id;
$user = $this->enquiry->getUser($user_id);
return \Response::json($user);
}
/**
* Display a listing of the Enquiry in DataTable.
*
* @return \Illuminate\Http\Response
*/
public function getEnquiry(Request $request) {
$returnArray = array();
$arr = array();
$productTypes = config('constants.productType');
$issueTypes = config('constants.issueType');
$product_type = '';
$issue_type = '';
$from_date = $to_date = null;
try {
if($request->input('from_date') != null && $request->input('to_date') != null){
$from_date = date("Y-m-d", strtotime($request->input('from_date')));
$to_date = date("Y-m-d", strtotime($request->input('to_date')));
}
$company_id = (isset($request->id))?$request->id:' ';
$plant_id = (isset($request->plant_id))?$request->plant_id:' ';
$status = (isset($request->status))?$request->status:' ';
$product_type_id = (isset($request->product_type_id))?$request->product_type_id:' ';
$issue_type_id = (isset($request->issue_type_id))?$request->issue_type_id:' ';
$created_by = (isset($request->created_by))?$request->created_by:' ';
$enquiries = $this->enquiry->getEnquiry($from_date, $to_date, $company_id, $plant_id, $status, $product_type_id, $issue_type_id, $created_by, $flag=NULL);
$contact_name=$email=$mobile=$company=$product_type=$issue_type=$created_at=$status=$action='';
/*foreach ($enquiries as $enquiry) { dd($enquiry->company->enquiries);
$id = $enquiry->id;
$contact_name = ucfirst($enquiry->contact_name);
$email = $enquiry->email;
$mobile = $enquiry->mobile;
$company = ucfirst($enquiry->company->company_name);
$product_type_id = $enquiry->product_type;
$issue_type_id = $enquiry->issue_type;
foreach($productTypes as $productType){
if($product_type_id == $productType['id']){
$product_type = $productType['name'];
}
}
foreach($issueTypes as $issueType){
if($issue_type_id == $issueType['id']){
$issue_type = $issueType['name'];
}
}
$created_at = date('Y-m-d', strtotime($enquiry->created_at));
$status = ($enquiry->status == 0) ? '<span class="m-badge m-badge--danger m-badge--wide">Open</span>' : ($enquiry->status == 1) ? '<span class="m-badge m-badge--warning m-badge--wide">Pending</span>': '<span class="m-badge m-badge--success m-badge--wide">Closed</span>';
if($enquiry->status == 0){
$status = '<span class="m-badge m-badge--danger m-badge--wide">Open</span>';
}elseif($enquiry->status == 1){
$status ='<span class="m-badge m-badge--warning m-badge--wide">Pending </span>';
}else{
$status ='<span class="m-badge m-badge--success m-badge--wide">Closed</span>';
}
$action = '<div class="btn-group mr-2" role="group" aria-label="First group">';
if(Auth::user()->role_id != config('constants.role.user.id')){
$action .= '<a class="m-btn btn btn-secondary" href=' . route("enquiry.edit", encrypt($enquiry->id)) . '>
<i class="la la-edit"></i>
</a>
<a class="m-btn btn btn-secondary delete_enquiry" data-id=' . $id . ' href="javascript:void(0);">
<i class="la la-trash"></i>
</a>';
}
$action .= '<a class="m-btn btn btn-secondary" href='. route("enquiry.show", encrypt($enquiry->id)) . '>
<i class="la la-eye"></i>
</a>
</div>';
$returnArray[] = array($contact_name, $email, $mobile, $company, $product_type, $issue_type, $created_at, $status, $action);
}*/
//dd($enquiries);
foreach ($enquiries as $enquiry) {
if(isset($enquiry->company) && !empty($enquiry->company)){
$company = ucfirst($enquiry->company->company_name);
$plant = ucfirst($enquiry->plant->plant_name);
//dd($companies->company->enquiries);
// foreach ($companies->company->enquiries as $enquiry) {
$id = $enquiry->id;
$contact_name = $enquiry->contact_name;
$email = $enquiry->email;
$mobile = $enquiry->mobile;
$product_type_id = $enquiry->product_type;
$issue_type_id = $enquiry->issue_type;
foreach ($productTypes as $productType) {
if ($product_type_id == $productType['id']) {
$product_type = $productType['name'];
}
}
foreach ($issueTypes as $issueType) {
if ($issue_type_id == $issueType['id']) {
$issue_type = $issueType['name'];
}
}
$created_at = date('Y-m-d', strtotime($enquiry->created_at));
$status = ($enquiry->status == 0) ? '<span class="m-badge m-badge--danger m-badge--wide">Open</span>' : ($enquiry->status == 1) ? '<span class="m-badge m-badge--warning m-badge--wide">Pending</span>' : '<span class="m-badge m-badge--success m-badge--wide">Closed</span>';
if ($enquiry->status == 0) {
$status = '<span class="m-badge m-badge--danger m-badge--wide">Open</span>';
} elseif ($enquiry->status == 1) {
$status = '<span class="m-badge m-badge--warning m-badge--wide">Pending </span>';
} else {
$status = '<span class="m-badge m-badge--success m-badge--wide">Closed</span>';
}
$action = '<div class="btn-group mr-2" role="group" aria-label="First group">';
if(Auth::user()->role_id != config('constants.role.user.id') && $enquiry->status != 2){
$action .= '<a class="m-btn btn btn-secondary" href=' . route("enquiry.edit", encrypt($enquiry->id)) . '>
<i class="la la-edit"></i>
</a>
<a class="m-btn btn btn-secondary delete_enquiry" data-id=' . $id . ' href="javascript:void(0);">
<i class="la la-trash"></i>
</a>';
}
$action .= '<a class="m-btn btn btn-secondary" href='. route("enquiry.show", encrypt($enquiry->id)) . '>
<i class="la la-eye"></i>
</a>
</div>';
$arr[] = array($contact_name, $email, $mobile, $company,$plant, $product_type, $issue_type, $created_at, $status, $action);
}
//}
}
$returnArray = $arr;
} catch (Exception $ex) {
$returnArray[] = array();
}
return json_encode(['data' => $returnArray]);
}
public function assignedEnq() {
$breadcrumb = breadCrumb('Enquiry', 'assignedEnquiry', '');
return view('enquiries.assigned_enquiries', compact('breadcrumb'));
}
/*
* Get enquiries assigned
*/
public function getAssignedEnquiries(Request $request){
$returnArray = array();
$status = null;
$productTypes = config('constants.productType');
$issueTypes = config('constants.issueType');
$product_type = '';
$issue_type = '';
$from_date = $to_date = null;
try {
if($request->input('from_date') != null && $request->input('to_date') != null){
$from_date = date("Y-m-d", strtotime($request->input('from_date')));
$to_date = date("Y-m-d", strtotime($request->input('to_date')));
}
$company_id = $request->input('id');
$plant_id = $request->input('plant_id');
$status = $request->input('status');
$product_type_id = $request->input('product_type_id');
$issue_type_id = $request->input('issue_type_id');
$created_by = $request->input('created_by');
$enquiries = $this->enquiry->getEnquiry($from_date, $to_date, $company_id, $plant_id, $status, $product_type_id, $issue_type_id, $created_by, 'PS');
foreach ($enquiries as $enquiry) {
if(isset($enquiry->enquiry_assignes[0])){
$id = $enquiry->id;
$contact_name = ucfirst($enquiry->contact_name);
$email = $enquiry->email;
$mobile = $enquiry->mobile;
$company = ucfirst($enquiry->company->company_name);
$product_type_id = $enquiry->product_type;
$issue_type_id = $enquiry->issue_type;
foreach($productTypes as $productType){
if($product_type_id == $productType['id']){
$product_type = $productType['name'];
}
}
foreach($issueTypes as $issueType){
if($issue_type_id == $issueType['id']){
$issue_type = $issueType['name'];
}
}
if(isset($enquiry->enquiry_assignes[0])){
$assigned_by = $enquiry->enquiry_assignes[0]->assignedby->first_name.' '.$enquiry->enquiry_assignes[0]->assignedby->last_name;
$assigned_date = date('Y-m-d', strtotime($enquiry->enquiry_assignes[0]->created_at));
}
else{
$assigned_by = 'NA';
$assigned_date = 'NA';
}
$created_at = date('Y-m-d', strtotime($enquiry->created_at));
// $status = ($enquiry->status == 1) ? '<span class="m-badge m-badge--primary m-badge--wide">Closed</span>' : '<span class="m-badge m-badge--danger m-badge--wide">Pending</span>';
if($enquiry->status == 0){
$status = '<span class="m-badge m-badge--danger m-badge--wide">Open</span>';
}elseif($enquiry->status == 1){
$status ='<span class="m-badge m-badge--warning m-badge--wide">Pending</span>';
}else{
$status ='<span class="m-badge m-badge--success m-badge--wide">Closed</span>';
}
$action = '<div class="btn-group mr-2" role="group" aria-label="First group">
<a class="m-btn btn btn-secondary" href=' . route("enquiry.edit", encrypt($enquiry->id)) . '>
<i class="la la-edit"></i>
</a>
<a class="m-btn btn btn-secondary" href='. route("enquiry.show", encrypt($enquiry->id)) . '>
<i class="la la-eye"></i>
</a>
</div>';
$returnArray[] = array($contact_name, $email, $mobile, $company, $product_type, $issue_type,$created_at,$assigned_by,$assigned_date,$status, $action);
}
}
} catch (Exception $ex) {
$returnArray = array();
}
return json_encode(['data' => $returnArray]);
}
/*
* Delete enquiry resource
*/
public function deleteEnquiry(Request $request) {
DB::beginTransaction();
try {
$this->enquiry->delete($request['id']);
DB::commit();
return json_encode(['status' => 1, 'success' => 'Enquiry deleted successfully.']);
} catch (\Exception $exc) {
DB::rollBack();
logger($exc->getMessage());
return redirect()->back()->with('error', $exc->getMessage());
}
}
public function getEnqPlants(Request $request)
{
$company_id = $request->company_id;
$plants = $this->enquiry->getEnqPlants($company_id);
return \Response::json($plants);
}
}
OHA YOOOO