Viewing file: ContactsImport.php (7.3 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Imports;
use App\Models\Contact; use App\Models\ContactGroup; use App\Models\Group; use App\Models\Label; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; use Maatwebsite\Excel\Concerns\Importable; use Maatwebsite\Excel\Concerns\SkipsErrors; use Maatwebsite\Excel\Concerns\SkipsOnError; use Maatwebsite\Excel\Concerns\ToCollection; use Maatwebsite\Excel\Concerns\WithChunkReading; use Maatwebsite\Excel\Concerns\WithEvents; use Maatwebsite\Excel\Concerns\WithHeadingRow; use Maatwebsite\Excel\Events\AfterImport; use Maatwebsite\Excel\Events\BeforeImport; use Maatwebsite\Excel\Events\ImportFailed;
class ContactsImport implements ToCollection, WithHeadingRow, SkipsOnError, WithChunkReading, ShouldQueue, WithEvents { use SkipsErrors, Importable;
public $group_id = ''; public $this_group_contacts; public $custom_request_data;
public function __construct($group_id, $auth_user,$this_group_contacts=null,$customRequestData=null) { $this->auth_user = $auth_user; $this->group_id = $group_id; $this->this_group_contacts = $this_group_contacts; $this->custom_request_data = $customRequestData; }
/** * @param Collection $rows * @throws \Throwable */ public function collection(Collection $rows) {
$errorMsg = ""; DB::beginTransaction(); $label= $this->auth_user->labels()->where('title', 'new')->first(); if (!$label) { $label = new Label(); $label->title = 'new'; $label->status = 'active'; $label->customer_id = $this->auth_user->id; $label->color = 'red'; $label->save(); }
$current_plan = $this->auth_user->plan; $pre_contacts=$this->auth_user->contacts()->count();
$available_limit=$current_plan->max_contact - $pre_contacts; $custom_request_data=$this->custom_request_data;
$this_group_contacts=$this->this_group_contacts; $this_group_contacts=collect($this_group_contacts);
$i = 0; $contactGroup = []; $data = [];
$unique_random_number=Str::random(16);
foreach ($rows as $key => $row) { if($current_plan->unlimited_contact=='no' && $available_limit =='0') { Log::info('Contact Limit Extend'); throw new \Exception('Contact Limit Extend'); }else {
if (isset($row['number']) && isset($row['country_code']) && $row['number'] && $row['country_code']) {
$cCode="+".str_replace('+','',$row[isset($custom_request_data['country_code'])?$custom_request_data['country_code']:'country_code'] ?? ''); $rowNumberOnly=$row[isset($custom_request_data['number'])?$custom_request_data['number']:'number'];
if(isset($custom_request_data['add_default_country_code']) && $custom_request_data['add_default_country_code']=='on') { $fullNumber = "+1" . str_replace('+1', '', $rowNumberOnly); }else { $fullNumber = "+" . str_replace('+', '', $cCode.$row[isset($custom_request_data['number'])?$custom_request_data['number']:'number']); }
$data[$i]['contact_dial_code'] = $cCode ?? ''; $data[$i]['number'] = str_replace('+','',getPhoneNumberWithoutDialCode($fullNumber)); $data[$i]['first_name'] = $row[isset($custom_request_data['first_name'])?$custom_request_data['first_name']:'first_name']; $data[$i]['last_name'] = $row[isset($custom_request_data['last_name'])?$custom_request_data['last_name']:'last_name']; $data[$i]['email'] = $row[isset($custom_request_data['email'])?$custom_request_data['email']:'email']; $data[$i]['company'] = $row[isset($custom_request_data['company'])?$custom_request_data['company']:'company']; $data[$i]['address'] = $row[isset($custom_request_data['address'])?$custom_request_data['address']:'address']; $data[$i]['city'] = $row[isset($custom_request_data['city'])?$custom_request_data['city']:'city'] ?? ''; $data[$i]['state'] = $row[isset($custom_request_data['state'])?$custom_request_data['state']:'state']; $data[$i]['zip_code'] = $row[isset($custom_request_data['zip_code'])?$custom_request_data['zip_code']:'zip_code']; $data[$i]['note'] = $row[isset($custom_request_data['note'])?$custom_request_data['note']:'note']; $data[$i]['label_id'] = $label ? $label->id : ''; $data[$i]['customer_id'] = $this->auth_user->id; $data[$i]['unique_random_number'] = $unique_random_number; $i++;
//TODO::Checking previous inserted number // if(!$this_group_contacts->contains($fullNumber)) { // $contact = $this->auth_user->contacts()->create($data); // $contactGroup[] = [ // 'customer_id' => $this->auth_user->id, // 'group_id' => $this->group_id, // 'contact_id' => $contact->id, // 'created_at' => now(), // 'updated_at' => now() // ]; // // if (!$contact) { // $errorMsg = "Error while inserting"; // break; // } // $i++; // } } }
}
if($data){ foreach (array_chunk($data, 1000) as $contactChunk) { Contact::insert($contactChunk); } }
$contactIds=Contact::where('unique_random_number',$unique_random_number)->pluck('id'); foreach ($contactIds as $contact_id) { $contactGroup[]=[ 'customer_id'=>$this->auth_user->id, 'contact_id'=>$contact_id, 'group_id'=>$this->group_id, 'created_at'=>now(), ]; }
foreach (array_chunk($contactGroup, 1000) as $contactGroupChunk) { ContactGroup::insert($contactGroupChunk); }
if (!empty($errorMsg)) { // Rollback in case there is error DB::rollBack();
} else { // Commit to database DB::commit(); } }
public function chunkSize(): int { return 2000; }
public function registerEvents(): array { return [ ImportFailed::class => function (ImportFailed $event) { Group::where('id', $this->group_id)->update(['import_status' => 'failed', 'import_fail_message' => substr($event->getException(), 0, 191)]); }, BeforeImport::class => function (BeforeImport $event) { Group::where('id', $this->group_id)->update(['import_status' => 'running']); }, AfterImport::class => function (AfterImport $event) { Group::where('id', $this->group_id)->update(['import_status' => 'completed']); } ]; }
}
|