Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Forest\Jobs\Imports;
- use Forest\Jobs\Job;
- use Illuminate\Bus\Queueable;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Forest\Mail\SendEmailImport;
- use Forest\Repositories\Imports\ImportationsRepository;
- use Forest\Repositories\Configurations\SegmentsRepository;
- use Forest\Repositories\Actors\ActorsRepository;
- use Forest\Repositories\AddressesRepository;
- use Forest\Repositories\Configurations\FlagsRepository;
- use Forest\Repositories\Configurations\BrandsRepository;
- use Forest\Repositories\Configurations\PartnersRepository;
- use Forest\Repositories\CustomersRepository;
- use Forest\Repositories\TimelinesRepository;
- use Forest\Helpers\Common as Common;
- use Illuminate\Contracts\Filesystem\Factory;
- use Illuminate\Support\Str;
- use Illuminate\Support\Facades\Log;
- use DB, Request, Validator, Input, Redirect, Session, Paginator, Response, Queue, Bus, Mail, Carbon, Config, Storage, File, Excel;
- class Customers implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- protected $file;
- protected $map;
- protected $actor_id;
- protected $tree_id;
- protected $user;
- protected $importationsRepository;
- protected $segmentsRepository;
- protected $actorsRepository;
- protected $addressRepository;
- protected $flagsRepository;
- protected $brandsRepository;
- protected $partnersRepository;
- protected $customersRepository;
- protected $timelinesRepository;
- /**
- * Create a new command instance.
- *
- * @return void
- */
- public function __construct($file, $map, $actor_id, $tree_id, $user)
- {
- $this->file = $file;
- $this->map = $map;
- $this->actor_id = $actor_id;
- $this->tree_id = $tree_id;
- $this->user = $user;
- $this->importationsRepository = new ImportationsRepository;
- $this->segmentsRepository = new SegmentsRepository;
- $this->actorsRepository = new ActorsRepository;
- $this->addressRepository = new AddressesRepository;
- $this->flagsRepository = new FlagsRepository;
- $this->brandsRepository = new BrandsRepository;
- $this->partnersRepository = new PartnersRepository;
- $this->customersRepository = new CustomersRepository;
- $this->timelinesRepository = new TimelinesRepository;
- }
- /**
- * Execute the command.
- *
- * @return void
- */
- public function handle()
- {
- $file_rows = Excel::load(storage_path('app/' . $this->file['file_name']), function($reader)
- {
- $reader->toObject();
- })->get();
- $data = [];
- $data_errors = [];
- foreach ($file_rows as $key => $file_row)
- {
- foreach ($this->map as $column_database => $column_file)
- {
- if($column_file != "")
- {
- $validate = true;
- /*
- * Verifica se o campo é CNPJ
- */
- if($column_database == 'cnpj')
- {
- $column_line = "A";
- /*
- * Se existir um CNPJ
- */
- if(isset($file_row[$column_file]))
- {
- if($file_row[$column_file])
- {
- $data[$key][$column_database] = $file_row[$column_file];
- /*
- * Veririca se este CNPJ é valido
- */
- if(!Common::verifyCNPJ($file_row[$column_file]))
- {
- $data_errors[$key]['cnpj'] = ['key' => $key, 'value' => 'cnpj', 'error' => 'CNPJ inválido.', 'column_line' => $column_line];
- }
- else
- {
- /*
- * Verifica se existe um cliente com este CNPJ
- */
- $customer = $this->customersRepository->getCustomerByCnpj(Common::verifyCNPJ($file_row[$column_file]));
- /*
- * Se não existir um cliente com esse CNPJ
- */
- if($customer)
- {
- $data_errors[$key]['cnpj'] = ['key' => $key, 'value' => 'cnpj', 'error' => 'CNPJ existente no sistema.', 'column_line' => $column_line];
- }
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['cnpj'] = ['key' => $key, 'value' => 'cnpj', 'error' => 'CNPJ é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- /*
- * Se não existir
- */
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['cnpj'] = ['key' => $key, 'value' => 'cnpj', 'error' => 'CNPJ é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- /*
- * SE a coluna for razão social
- */
- else if($column_database == 'social_name')
- {
- $column_line = "B";
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- if(!$file_row[$column_file])
- {
- $data_errors[$key]['social_name'] = ['key' => $key, 'value' => 'social_name', 'error' => 'Razão Social é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['social_name'] = ['key' => $key, 'value' => 'social_name', 'error' => 'Razão Social é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else if($column_database == 'fantasy_name')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- else if($column_database == 'zip')
- {
- $column_line = "D";
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- if(!$file_row[$column_file])
- {
- $data_errors[$key]['CEP'] = ['key' => $key, 'value' => 'CEP', 'error' => 'CEP é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['CEP'] = ['key' => $key, 'value' => 'CEP', 'error' => 'CEP é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else if($column_database == 'city')
- {
- $column_line = "E";
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- if(!$file_row[$column_file])
- {
- $data_errors[$key]['Cidade'] = ['key' => $key, 'value' => 'Cidade', 'error' => 'Cidade é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['Cidade'] = ['key' => $key, 'value' => 'Cidade', 'error' => 'Cidade é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else if($column_database == 'state')
- {
- $column_line = "F";
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- if(!$file_row[$column_file])
- {
- $data_errors[$key]['UF'] = ['key' => $key, 'value' => 'UF', 'error' => 'UF é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['UF'] = ['key' => $key, 'value' => 'UF', 'error' => 'UF é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else if($column_database == 'address')
- {
- $column_line = "G";
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- if(!$file_row[$column_file])
- {
- $data_errors[$key]['Endereço'] = ['key' => $key, 'value' => 'Endereço', 'error' => 'Endereço é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['Endereço'] = ['key' => $key, 'value' => 'Endereço', 'error' => 'Endereço é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else if($column_database == 'number')
- {
- $column_line = "H";
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- if(!$file_row[$column_file])
- {
- $data_errors[$key]['Número'] =['key' => $key, 'value' => 'Número', 'error' => 'Número é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['Número'] =['key' => $key, 'value' => 'Número', 'error' => 'Número é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else if($column_database == 'neighborhood')
- {
- $column_line = "I";
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- if(!$file_row[$column_file])
- {
- $data_errors[$key]['Bairro'] =['key' => $key, 'value' => 'Bairro', 'error' => 'Bairro é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['Bairro'] =['key' => $key, 'value' => 'Bairro', 'error' => 'Bairro é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else if($column_database == 'complement')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- else if($column_database == 'contact_name')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- $validate = false;
- }
- }
- else if($column_database == 'email')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- else if($column_database == 'phone')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- else if($column_database == 'ie')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- else if($column_database == 'im')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- else if($column_database == 'segment')
- {
- $column_line = "P";
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- $segment = $this->segmentsRepository->getSegmentByName($file_row[$column_file]);
- if(!$segment)
- {
- $data_errors[$key]['Bairro'] =['key' => $key, 'value' => 'Segmento', 'error' => 'Este Segmento não é válido, infome algum dos seguinte Segmentos: Agro, Auto Peças, Auto Serviços, Centros Automotivos, Concessionárias, Distribuiores, Montadoras, Postos, Calçados', 'column_line' => $column_line];
- }
- }
- else
- {
- $data[$key][$column_database] = null;
- $data_errors[$key]['Segmento'] =['key' => $key, 'value' => 'Segmento', 'error' => 'Segmento é um campo obrigatório.', 'column_line' => $column_line];
- }
- }
- else if($column_database == 'flag')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- else if($column_database == 'partner')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- else if($column_database == 'brand')
- {
- if(isset($file_row[$column_file]))
- {
- $data[$key][$column_database] = $file_row[$column_file];
- }
- else
- {
- $data[$key][$column_database] = null;
- }
- }
- }
- }
- }
- $file_error = $this->generateExcelErrors($data_errors, $data);
- $data = $this->validateImportNotErrors($data_errors, $data);
- try {
- foreach ($data as $customer)
- {
- $address = $this->addressRepository->store($customer);
- $customer['address_id'] = $address->id;
- $customer['email'] = Common::validateEmail($customer['email']);
- $customer['phone'] = Common::validatePhone($customer['phone']);
- $customer['cnpj'] = Common::verifyCNPJ($customer['cnpj']);
- $customer['segment_id'] = null;
- $customer['flag_id'] = null;
- $customer['partner_id'] = null;
- $customer['brand_id'] = null;
- $customer['validated'] = 1;
- $customer['customer_matrix_id'] = null;
- $customer['actors'][] = $this->actor_id;
- $segment = $this->segmentsRepository->getSegmentByName($customer['segment']);
- if($segment)
- {
- $customer['segment_id'] = $segment->id;
- }
- $flag = $this->flagsRepository->getFlagByName($customer['flag']);
- if($flag)
- {
- $customer['flag_id'] = $flag->id;
- }
- $partner = $this->partnersRepository->getPartnerByName($customer['partner']);
- if($partner)
- {
- $customer['partner_id'] = $partner->id;
- }
- $brand = $this->brandsRepository->getBrandByName($customer['brand']);
- if($brand)
- {
- $customer['brand_id'] = $brand->id;
- }
- $new_customer = $this->customersRepository->store($customer);
- if(!$new_customer->contact_name)
- {
- $new_customer->validated = 0;
- $new_customer->save();
- }
- $new_customer->actors()->attach($this->actor_id, ['tree_id' => $this->tree_id]);
- /*
- * Enviar para a timeline
- */
- $this->timelinesRepository->store([
- 'user_id' => $this->user->id,
- 'customer_id' => $new_customer->id,
- 'event_name' => 'CUSTOMER_IMPORT',
- 'description' => 'Importado pelo usuário ' . $this->user->name
- ]);
- }
- $actor = $this->actorsRepository->getById($this->actor_id);
- /*
- * Enviar para a timeline
- */
- if(count($data) > 1)
- {
- $description = 'Importou ' . count($data) . ' clientes para o ator '. $actor->name;
- }
- else
- {
- $description = 'Importou ' . count($data) . ' cliente'. $actor->name;
- }
- if(count($data) > 0)
- {
- $this->timelinesRepository->store([
- 'user_id' => $this->user->id,
- 'actor_id' => $actor->id,
- 'event_name' => 'USER_IMPORT_CUSTOMERS',
- 'description' => $description
- ]);
- }
- $importation = $this->importationsRepository->getImportation([
- 'status' => 'Processing',
- 'type' => 'Customers'
- ]);
- if($importation)
- {
- $importation = $this->importationsRepository->update([
- 'id' => $importation->id,
- 'status' => 'Completed'
- ]);
- Storage::disk('local')->delete($importation->file_name);
- Mail::to($importation->user['email'])->send(new SendEmailImport($importation->user, $file_error, 'customers'));
- }
- } catch (\Exception $e) {
- Log::info($e);
- }
- /**
- * Remove da fila
- */
- $this->delete();
- }
- public function generateExcelErrors($data_errors, $data)
- {
- $excel_data = [];
- foreach ($data_errors as $data_error)
- {
- foreach ($data_error as $error)
- {
- if(isset($excel_data[$error['key']]))
- {
- $excel_data[$error['key']]['errors'] = $excel_data[$error['key']]['errors'] . ' - ' . $error['error'];
- }
- else
- {
- $excel_data[$error['key']] = $data[$error['key']];
- $excel_data[$error['key']]['errors'] = $error['error'];
- }
- }
- }
- if(count($excel_data) > 0)
- {
- $data_errors = collect($data_errors)->values();
- $name = 'clientes_com_errors'.date('Ymdhis');
- Excel::create($name, function($excel) use($excel_data, $data_errors)
- {
- $excel->setTitle('Clientes com erros');
- $excel->sheet('Sheet', function($sheet) use ($excel_data, $data_errors) {
- $sheet->appendRow([
- 'CNPJ', 'Razão Social', 'Nome Fantasia', 'CEP', 'Cidade', 'UF', 'Endereço', 'Número', 'Bairro', 'Complemento', 'Nome de Contato', 'E-mail', 'Telefone', 'IE', 'IM', 'Segmento', 'Bandeira', 'Parceiro', 'Rede', 'Erros'
- ]);
- $sheet->rows($excel_data);
- foreach ($data_errors as $key => $data_error)
- {
- foreach ($data_error as $error)
- {
- $column_line = $key+2;
- $column_line = $error['column_line'].$column_line;
- $sheet->cell($column_line, function($cell) {
- $cell->setBackground('#ffc000');
- $cell->setBorder('thin','thin','thin','thin');
- });
- $column_line = $key+2;
- $column_line = 'T'.$column_line;
- $sheet->cell($column_line, function($cell) {
- $cell->setBackground('#ffc000');
- $cell->setBorder('thin','thin','thin','thin');
- });
- }
- }
- });
- })->store('xlsx', storage_path('importation/erros'));
- return $name;
- }
- else
- {
- return null;
- }
- }
- public function validateImportNotErrors($data_errors, $data)
- {
- foreach ($data_errors as $data_error)
- {
- foreach ($data_error as $error)
- {
- if(isset($data[$error['key']]))
- {
- unset($data[$error['key']]);
- }
- }
- }
- return $data;
- }
- }
Add Comment
Please, Sign In to add comment