|
|
@@ -41,11 +41,13 @@ class ExamesImportService
|
|
|
/*
|
|
|
* Estrutura esperada do Excel:
|
|
|
*
|
|
|
- * Coluna 0 = Nome do exame
|
|
|
- * Coluna 1 = Preço
|
|
|
+ * Coluna 0 = Código do exame
|
|
|
+ * Coluna 1 = Nome do exame
|
|
|
+ * Coluna 2 = Preço
|
|
|
*/
|
|
|
- $name = $cells->get(0, '');
|
|
|
- $price = $cells->get(1, '');
|
|
|
+ $codeExams = $cells->get(0, '');
|
|
|
+ $name = $cells->get(1, '');
|
|
|
+ $price = $cells->get(2, '');
|
|
|
|
|
|
/*
|
|
|
* Ignora linhas sem nome.
|
|
|
@@ -56,25 +58,21 @@ class ExamesImportService
|
|
|
|
|
|
/*
|
|
|
* Trata cabeçalhos do Excel.
|
|
|
- *
|
|
|
- * Exemplos:
|
|
|
- * EXAME | VALOR
|
|
|
- * NOME | PREÇO
|
|
|
- * NOME DO EXAME | PREÇO
|
|
|
*/
|
|
|
+ $codeHeader = mb_strtoupper($codeExams);
|
|
|
$nameHeader = mb_strtoupper($name);
|
|
|
$priceHeader = mb_strtoupper($price);
|
|
|
|
|
|
$isHeader =
|
|
|
+ str_contains($codeHeader, 'CÓDIGO') ||
|
|
|
+ str_contains($codeHeader, 'CODIGO') ||
|
|
|
$nameHeader === 'EXAME' ||
|
|
|
$nameHeader === 'NOME' ||
|
|
|
+ str_contains($nameHeader, 'EXAME') &&
|
|
|
(
|
|
|
- str_contains($nameHeader, 'EXAME') &&
|
|
|
- (
|
|
|
- str_contains($priceHeader, 'VALOR') ||
|
|
|
- str_contains($priceHeader, 'PREÇO') ||
|
|
|
- str_contains($priceHeader, 'PRECO')
|
|
|
- )
|
|
|
+ str_contains($priceHeader, 'VALOR') ||
|
|
|
+ str_contains($priceHeader, 'PREÇO') ||
|
|
|
+ str_contains($priceHeader, 'PRECO')
|
|
|
);
|
|
|
|
|
|
if ($isHeader) {
|
|
|
@@ -89,17 +87,31 @@ class ExamesImportService
|
|
|
/*
|
|
|
* Procura um exame já cadastrado para esse parceiro.
|
|
|
*
|
|
|
- * O nome é comparado ignorando:
|
|
|
- * - maiúsculas/minúsculas
|
|
|
- * - espaços no início/fim
|
|
|
+ * Primeiro tenta localizar pelo código quando
|
|
|
+ * o código foi informado.
|
|
|
+ */
|
|
|
+ $service = null;
|
|
|
+
|
|
|
+ if ($codeExams !== '') {
|
|
|
+ $service = PartnerAgreementService::withTrashed()
|
|
|
+ ->where('partner_agreement_id', $partnerAgreementId)
|
|
|
+ ->where('code_exams', $codeExams)
|
|
|
+ ->first();
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Caso não exista código ou não tenha encontrado pelo código,
|
|
|
+ * procura pelo nome.
|
|
|
*/
|
|
|
- $service = PartnerAgreementService::withTrashed()
|
|
|
- ->where('partner_agreement_id', $partnerAgreementId)
|
|
|
- ->whereRaw(
|
|
|
- 'LOWER(TRIM(name)) = LOWER(TRIM(?))',
|
|
|
- [$name]
|
|
|
- )
|
|
|
- ->first();
|
|
|
+ if (!$service) {
|
|
|
+ $service = PartnerAgreementService::withTrashed()
|
|
|
+ ->where('partner_agreement_id', $partnerAgreementId)
|
|
|
+ ->whereRaw(
|
|
|
+ 'LOWER(TRIM(name)) = LOWER(TRIM(?))',
|
|
|
+ [$name]
|
|
|
+ )
|
|
|
+ ->first();
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
|
* EXAME JÁ EXISTE
|
|
|
@@ -114,6 +126,17 @@ class ExamesImportService
|
|
|
|
|
|
$changed = false;
|
|
|
|
|
|
+ /*
|
|
|
+ * Atualiza o código quando informado.
|
|
|
+ */
|
|
|
+ if (
|
|
|
+ $codeExams !== '' &&
|
|
|
+ $service->code_exams !== $codeExams
|
|
|
+ ) {
|
|
|
+ $service->code_exams = $codeExams;
|
|
|
+ $changed = true;
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Atualiza o preço somente quando
|
|
|
* o Excel trouxe um preço válido.
|
|
|
@@ -162,6 +185,7 @@ class ExamesImportService
|
|
|
*/
|
|
|
PartnerAgreementService::create([
|
|
|
'partner_agreement_id' => $partnerAgreementId,
|
|
|
+ 'code_exams' => $codeExams !== '' ? $codeExams : null,
|
|
|
'name' => $name,
|
|
|
'associate_price' => $associatePrice,
|
|
|
'type' => PartnerAgreementServiceTypeEnum::EXAME,
|