ultimatepos/Modules/Crm/Http/Controllers/CrmMarketplaceController.php

203 lines
6.7 KiB
PHP

<?php
namespace Modules\Crm\Http\Controllers;
use App\Category;
use App\User;
use App\Utils\Util;
use DB;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Modules\Crm\Entities\CrmContact;
use Modules\Crm\Entities\CrmMarketplace;
use Modules\Crm\Entities\Schedule;
use Modules\Crm\Utils\CrmUtil;
class CrmMarketplaceController extends Controller
{
/**
* All Utils instance.
*/
protected $commonUtil;
public function __construct(Util $commonUtil, CrmUtil $crmUtil)
{
$this->commonUtil = $commonUtil;
$this->crmUtil = $crmUtil;
$this->enable_b2b_marketplace = config('constants.enable_b2b_marketplace');
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$business_id = request()->session()->get('user.business_id');
$is_admin = $this->commonUtil->is_admin(auth()->user());
if (! $is_admin || ! $this->enable_b2b_marketplace) {
abort(403, 'Unauthorized action.');
}
$marketplace = CrmMarketplace::first();
$sources = Category::forDropdown($business_id, 'source');
$users = User::forDropdown($business_id, false);
return view('crm::marketplace.index')->with(compact('marketplace', 'users', 'sources'));
}
/**
* Saves marketplace details
*
* @return Response
*/
public function save(Request $request)
{
$is_admin = $this->commonUtil->is_admin(auth()->user());
if (! $is_admin || ! $this->enable_b2b_marketplace) {
abort(403, 'Unauthorized action.');
}
$business_id = request()->session()->get('user.business_id');
CrmMarketplace::updateOrCreate(
[
'business_id' => $business_id,
'marketplace' => $request->input('marketplace'),
],
[
'site_key' => $request->input('site_key'),
'site_id' => $request->input('site_id'),
'assigned_users' => $request->input('assigned_users'),
'crm_source_id' => $request->input('crm_source_id'),
]
);
return redirect()->back();
}
/**
* Fetches leads from api and creates leads and followups
*
* @param Request $request
* @return Response
*/
public function importLeads(Request $request)
{
$is_admin = $this->commonUtil->is_admin(auth()->user());
if (! $is_admin || ! $this->enable_b2b_marketplace) {
abort(403, 'Unauthorized action.');
}
try {
$business_id = request()->session()->get('user.business_id');
$marketplace = CrmMarketplace::first();
$url = 'https://my.exportersindia.com/api-inquiry-detail.php?k='.$marketplace->site_key.'&email='.$marketplace->site_id;
$response = file_get_contents($url);
$data = json_decode($response, true);
DB::beginTransaction();
foreach ($data as $user_data) {
if (empty($user_data['email'])) {
continue;
}
//check if email exists
$lead = CrmContact::where('email', $user_data['email'])
->first();
//if lead don't exist create one
if (empty($lead)) {
$name = $user_data['name'];
$name_array = explode(' ', $name, 2);
$lead_data = [
'type' => 'lead',
'business_id' => $business_id,
'name' => $name,
'first_name' => $name_array[0] ?? '',
'last_name' => $name_array[1] ?? '',
'email' => $user_data['email'],
'supplier_business_name' => $user_data['company'] ?? '',
'city' => $user_data['city'] ?? '',
'country' => $user_data['country'] ?? '',
'state' => $user_data['state'] ?? '',
'mobile' => $user_data['mobile'] ?? '',
'created_by' => auth()->user()->id,
'crm_source' => $marketplace->crm_source_id,
];
$lead = CrmContact::createNewLead($lead_data, $marketplace->assigned_users);
}
//check if same follow up exists, if not create new
$inq_id = $user_data['inq_id'] ?? '';
if (! empty($user_data['inq_id'])) {
$schedule = Schedule::where('business_id', $business_id)
->where('contact_id', $lead->id)
->where('title', 'like', "%{$inq_id}%")
->first();
if (! empty($schedule)) {
continue;
}
}
$subject = $user_data['subject'] ?? '';
$product = $user_data['product'] ?? '';
$detail_req = $user_data['detail_req'] ?? '';
$title = 'ExportersIndia - '.$subject.' - '.$lead->name." (Inquiry id: {$inq_id})";
$description = 'Subject: '.$subject;
$description .= '<br>';
$description .= 'Product: '.$product;
$description .= '<br>';
$description .= $detail_req;
$follow_up_data = [
'business_id' => $business_id,
'contact_id' => $lead->id,
'title' => $title,
'status' => 'open',
'start_datetime' => \Carbon::now()->toDateTimeString(),
'end_datetime' => \Carbon::now()->addHours(1)->toDateTimeString(),
'schedule_type' => 'call',
'description' => $description,
'user_id' => $marketplace->assigned_users,
];
$this->crmUtil->addFollowUp($follow_up_data, auth()->user());
}
DB::commit();
$output = [
'success' => true,
'msg' => __('lang_v1.success'),
];
} catch (\Exception $e) {
DB::rollBack();
\Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage());
$output = [
'success' => false,
'msg' => 'File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage(),
];
}
return redirect()->back()->with(['status' => $output]);
}
}