<?php
namespace App\Application\Internit\ApiBundle\Controller;
use App\Application\Internit\AndamentoSolicitacaoBundle\Entity\AndamentoSolicitacao;
use App\Application\Internit\ClienteBundle\Entity\Cliente;
use App\Application\Internit\DepartamentoBundle\Entity\Departamento;
use App\Application\Internit\OrdemServicoBundle\Entity\OrdemServico;
use App\Application\Internit\ProfissionalBundle\Entity\Profissional;
use App\Application\Internit\RespostaSolicitacaoBundle\Entity\RespostaSolicitacao;
use App\Application\Internit\SacBundle\Entity\Relatorio;
use App\Application\Internit\SolicitacaoBundle\Entity\Solicitacao;
use App\Application\Project\ContentBundle\Attributes\Acl as ACL;
use App\Application\Project\ContentBundle\Controller\Base\BaseApiController;
use Doctrine\Persistence\ObjectRepository;
use Dompdf\Dompdf;
use Fpdf\Fpdf;
use Mpdf\Mpdf;
use OpenApi\Attributes as OA;
use Spipu\Html2Pdf\Html2Pdf;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use function Symfony\Component\Translation\t;
#[Route('/api/ordemServico', name: 'api_ordemServico_')]
#[OA\Tag(name: 'Sac')]
#[ACL\Api(enable: true, title: 'Sac', description: 'Permissões do modulo Ordem de Serviço')]
class OrdemServicoApiController extends BaseApiController
{
public function getClass(): string
{
return OrdemServico::class;
}
public function getRepository(): ObjectRepository
{
return $this->doctrine->getManager()->getRepository($this->getClass());
}
#[Route('/sms', name: 'sms', methods: ['GET'])]
#[ACL\Api(enable: true, title: 'SMS', description: 'SMS')]
public function sendSMS(Request $request): Response
{
//$this->serviceComteleSMS->sendSMS("numeroaqui", 'Teste SMS' );
$this->serviceComteleSMS->sendSMS('5521997734518','teste');
//$this->serviceComteleSMS->consultarCreditos();
return new Response('ok');
}
#[Route('/profissional/{idProfissional}', name: 'listAction', methods: ['GET'])]
#[ACL\Api(enable: true, title: 'Listagem Ordem Serviço', description: 'Listagem Ordem de Serviço')]
public function listAction(Request $request, $idProfissional): Response
{
$em = $this->doctrine->getManager();
$ordemServicos = $em->getRepository(OrdemServico::class)->findBy(['profissional' => $idProfissional],['data' => 'DESC']);
$response = [];
/** @var OrdemServico $ordem */
foreach ($ordemServicos as $ordem) {
if(!$ordem->getAgendamento() )
continue;
if(!$ordem->getAgendamento()->getAndamento())
continue;
/** @var Solicitacao $solicitacao */
$solicitacao = $ordem->getAgendamento()->getAndamento()->getSolicitacao();
if(!$solicitacao)
continue;
$response[] = [
'id' => $ordem->getId(),
'codigo' => $ordem->getCodigo(),
'cliente' => ($solicitacao->getCliente())? $solicitacao->getCliente()->getNomeCompleto() : null,
'unidade' => (!$solicitacao->getUnidade())? null: [
'empreendimento' => $solicitacao->getUnidade()->getBloco()->getEmpreendimento()->getNome(),
'bloco' => $solicitacao->getUnidade()->getBloco()->getBloco(),
'unidade' => $solicitacao->getUnidade()->getUnidade(),
],
'dataAgendamento' => $this->formatDate($ordem->getData()),
'horaAgendamento' => $this->formatTime($ordem->getHora()),
'status' => $ordem->getStatus(),
];
}
return $this->json($response);
}
#[Route('/{idOrdem}', name: 'showAction', methods: ['GET'])]
#[ACL\Api(enable: true, title: 'Exibe Ordem Serviço', description: 'Exibe Ordem de Serviço')]
public function showAction(Request $request, $idOrdem): Response
{
$em = $this->doctrine->getManager();
$cliente = $this->getUser();
/** @var OrdemServico $ordemServico */
$ordemServico = $em->getRepository(OrdemServico::class)->findOneBy(['id' => $idOrdem]);
if(!$ordemServico)
return $this->json(['status' => false, 'message'=> 'Ordem de Serviço não encontrada!']);
/** @var Solicitacao $solicitacao */
$solicitacao = $ordemServico->getAgendamento()->getAndamento()->getSolicitacao();
$response = $this->osToJson($ordemServico, $solicitacao);
return $this->json($response);
}
public function osToJson(OrdemServico $ordemServico, Solicitacao $solicitacao)
{
$anexosSolicitacao = $this->mediaService->getGalleryJson($solicitacao->getAnexos()) ;
$anexosAgendamento = $this->mediaService->getGalleryJson($ordemServico->getAgendamento()->getAnexos()) ;
$anexos = array_merge($anexosSolicitacao, $anexosAgendamento);
return [
'id' => $ordemServico->getId(),
'codigo' => $ordemServico->getCodigo(),
'status' => $ordemServico->getStatus(),
'dataAgendamento' => $this->formatDate($ordemServico->getData()),
'horaAgendamento' => $this->formatTime($ordemServico->getHora()),
'mensagemDinamica' => $ordemServico->getAgendamento()->getObservacoes(),
'anexosSolicitacao' => $anexos,
'cliente' => (!$solicitacao->getCliente())? null: [
'id' => $solicitacao->getCliente()->getId(),
'nome' => $solicitacao->getCliente()->getNomeCompleto(),
'telefone' => $solicitacao->getCliente()->getCelular(),
'email' => $solicitacao->getCliente()->getEmail(),
],
'unidade' => (!$solicitacao->getUnidade())? null: [
'empreendimento' => $solicitacao->getUnidade()->getBloco()->getEmpreendimento()->getNome(),
'bloco' => $solicitacao->getUnidade()->getBloco()->getBloco(),
'unidade' => $solicitacao->getUnidade()->getUnidade(),
],
'agendamento' => (!$ordemServico->getAgendamento())? null: [
'id'=> $ordemServico->getAgendamento()->getId()
],
'profissional' => (!$ordemServico->getProfissional())? null: [
'id'=> $ordemServico->getProfissional()->getId(),
'nomeCompleto'=> $ordemServico->getProfissional()->getNomecompleto(),
'email'=> $ordemServico->getProfissional()->getEmail(),
],
'descricao' => $ordemServico->getDescricao(),
'anexosPreparacao' => $this->mediaService->getGalleryJson($ordemServico->getAnexosPreparacao()),
'anexosTrabalhoAndamento' => $this->mediaService->getGalleryJson($ordemServico->getAnexosTrabalhoAndamento()),
'anexosTrabalhoFinalizado' => $this->mediaService->getGalleryJson($ordemServico->getAnexosTrabalhoFinalizado()),
'assinaturaCliente' => $this->mediaService->getMediaJson($ordemServico->getAssinaturaCliente()),
'assinaturaProfissional' => $this->mediaService->getMediaJson($ordemServico->getAssinaturaProfissional()),
'aCaminho' => $this->formatDateTime($ordemServico->getDataACaminho()),
'inicioAtendimento' => $this->formatDateTime($ordemServico->getDataIniciarAtendimento()),
'finalAtendimento' => $this->formatDateTime($ordemServico->getDataFinalAtendimento()),
'criadoEm' => $this->formatDateTime($ordemServico->getCreatedAt()),
'atualizadoEm' => $this->formatDateTime($ordemServico->getUpdatedAt()),
];
}
#[Route('/{idOrdem}/aCaminho', name: 'aCaminhoAction', methods: ['GET'])]
#[ACL\Api(enable: true, title: 'Exibe Ordem Serviço', description: 'Exibe Ordem de Serviço')]
public function aCaminhoAction(Request $request, $idOrdem): Response
{
$em = $this->doctrine->getManager();
$cliente = $this->getUser();
/** @var OrdemServico $ordemServico */
$ordemServico = $em->getRepository(OrdemServico::class)->findOneBy(['id' => $idOrdem]);
if(!$ordemServico)
return $this->json(['status' => false, 'message'=> 'Ordem de Serviço não encontrada!']);
if($ordemServico->getDataFinalAtendimento())
return $this->json([
'status' => false,
'message' => 'Atendimento já foi Finalizado!'
], 400);
if($ordemServico->getDataACaminho())
return $this->json([
'status' => false,
'message' => 'Profissional já está a caminho!'
], 400);
$ordemServico->setDataACaminho(new \DateTime('now'));
$ordemServico->setStatus('A Caminho');
$this->notificarClienteProfissionalACaminho($ordemServico);
$this->notificarResponsavelAtendimento($ordemServico, 0);
$em->persist($ordemServico);
$em->flush();
return $this->json([
'status' => true,
'message' => 'Registro realizado!'
]);
}
#[Route('/{idOrdem}/iniciarAtendimento', name: 'iniciarAtendimento', methods: ['GET'])]
#[ACL\Api(enable: true, title: 'Iniciar Atendimento', description: 'Iniciar Atendimento')]
public function iniciarAtendimento(Request $request, $idOrdem): Response
{
$em = $this->doctrine->getManager();
$cliente = $this->getUser();
/** @var OrdemServico $ordemServico */
$ordemServico = $em->getRepository(OrdemServico::class)->findOneBy(['id' => $idOrdem]);
if(!$ordemServico)
return $this->json(['status' => false, 'message'=> 'Ordem de Serviço não encontrada!']);
if($ordemServico->getDataFinalAtendimento())
return $this->json([
'status' => false,
'message' => 'Atendimento já foi Finalizado!'
], 400);
if(!$ordemServico->getDataACaminho())
return $this->json([
'status' => false,
'message' => 'Inicie o trajeto até o cliente antes de iniciar o atendimento!'
], 400);
if($ordemServico->getDataIniciarAtendimento())
return $this->json([
'status' => false,
'message' => 'Atendimento já Iniciado!'
], 400);
$ordemServico->setDataIniciarAtendimento(new \DateTime('now'));
$ordemServico->setStatus('Atendimento Iniciado!');
$em->persist($ordemServico);
$em->flush();
return $this->json([
'status' => true,
'message' => 'Registro realizado!'
]);
}
#[Route('/{idOrdem}/salvar', name: 'salvar', methods: ['POST'])]
#[ACL\Api(enable: true, title: 'Savar Dados', description: 'Salvar Dados')]
public function salvar(Request $request, $idOrdem): Response
{
$em = $this->doctrine->getManager();
//$cliente = $this->getUser();
/** @var OrdemServico $ordemServico */
$ordemServico = $em->getRepository(OrdemServico::class)->findOneBy(['id' => $idOrdem]);
if(!$ordemServico)
return $this->json(['status' => false, 'message'=> 'Ordem de Serviço não encontrada!']);
if(!$ordemServico->getDataIniciarAtendimento())
return $this->json([
'status' => false,
'message' => 'Inicie o atendimento antes de salvar as informações!'
], 400);
if($ordemServico->getDataFinalAtendimento())
return $this->json([
'status' => false,
'message' => 'Atendimento já foi Finalizado!'
], 400);
$this->atualizarOrdemServico($ordemServico, $request);
return $this->json([
'status' => true,
'message' => 'Registro Realizado!'
]);
}
#[Route('/{idOrdem}/finalizarAtendimento', name: 'finalizarAtendimento', methods: ['POST'])]
#[ACL\Api(enable: true, title: 'Finalizar Atendimento', description: 'Finalizar Atendimento')]
public function finalizarAtendimento(Request $request, $idOrdem): Response
{
$em = $this->doctrine->getManager();
$cliente = $this->getUser();
/** @var OrdemServico $ordemServico */
$ordemServico = $em->getRepository(OrdemServico::class)->findOneBy(['id' => $idOrdem]);
if(!$ordemServico)
return $this->json(['status' => false, 'message'=> 'Ordem de Serviço não encontrada!']);
if(!$ordemServico->getDataIniciarAtendimento())
return $this->json([
'status' => false,
'message' => 'Inicie o atendimento antes de finalizar o mesmo!'
], 400);
if($ordemServico->getDataFinalAtendimento())
return $this->json([
'status' => false,
'message' => 'Atendimento já foi Finalizado!'
], 400);
$this->atualizarOrdemServico($ordemServico, $request);
if(!$this->checkOrdemServico($ordemServico))
return $this->json([
'status' => false,
'message' => 'Para finalizar o atendimento, todos os dados devem ser preenchidos!'
], 400);
$ordemServico->setDataFinalAtendimento(new \DateTime('now'));
$ordemServico->setStatus('Finalizado!');
$em->persist($ordemServico);
$em->flush();
$this->notificarResponsavelAtendimento($ordemServico, 1);
return $this->json([
'status' => true,
'message' => 'Registro realizado!'
]);
}
#[Route('/{idOrdem}/retornoAtendimento', name: 'retornoAtendimento', methods: ['POST'])]
#[ACL\Api(enable: true, title: 'Retorno Atendimento', description: 'Retorno Atendimento')]
public function retornoAtendimento(Request $request, $idOrdem): Response
{
$em = $this->doctrine->getManager();
$cliente = $this->getUser();
$data = ($request->request->get('data'))? new \DateTime($request->request->get('data')) : null;
$hora = ($request->request->get('hora'))? new \DateTime($request->request->get('hora')) : null;
if(!$data)
return $this->json(['status' => false, 'message'=> 'Data Não informada!'], 400);
if(!$hora)
return $this->json(['status' => false, 'message'=> 'Hora Não informada!'], 400);
$dataHora = new \DateTime($request->request->get('data') . $request->request->get('hora'));
/** @var OrdemServico $ordemServico */
$ordemServico = $em->getRepository(OrdemServico::class)->findOneBy(['id' => $idOrdem]);
if(!$ordemServico)
return $this->json(['status' => false, 'message'=> 'Ordem de Serviço não encontrada!'], 400);
if(!$ordemServico->getDataIniciarAtendimento())
return $this->json([
'status' => false,
'message' => 'Inicie o atendimento antes de finalizar o mesmo!'
], 400);
if($ordemServico->getDataFinalAtendimento())
return $this->json([
'status' => false,
'message' => 'Atendimento já foi Finalizado!'
], 400);
$this->atualizarOrdemServico($ordemServico, $request);
if(!$this->checkOrdemServico($ordemServico))
return $this->json([
'status' => false,
'message' => 'Para finalizar o atendimento, todos os dados devem ser preenchidos!'
], 400);
$ordemServico->setDataFinalAtendimento(new \DateTime('now'));
$ordemServico->setDataRetorno($dataHora);
$ordemServico->setStatus('Finalizado!');
$em->persist($ordemServico);
$em->flush();
/** Ordem de Serviço - Retorno */
$os = new OrdemServico();
$codigo = explode('-', $ordemServico->getCodigo());
$os->setAgendamento($ordemServico->getAgendamento());
$os->setProfissional($ordemServico->getProfissional());
$os->setCodigo($codigo[0] . '-' . intval($codigo[1]) + 1 );
$os->setStatus('Agendado');
$os->setData($data);
$os->setHora($hora);
$em->persist($os);
$em->flush();
$empresa = $this->serviceEmail->getEmpresa();
/** @var $profissional Profissional */
$profissional = $os->getProfissional();
$urlProfissional = ( (substr($empresa->getUrlCliente(), -1) == '/')? $empresa->getUrlCliente(): $empresa->getUrlCliente().'/')
.'os/'.$profissional->getId().'/'.str_replace(' ', '-', $profissional->getNomecompleto());
/** START Fluxo SMS */
$phone = ($profissional->getTelefone1())?: $profissional->getTelefone2();
$nomeProfissional = explode(' ', $profissional->getNomecompleto());
$message = "Olá ". $nomeProfissional[0] .", a OS ". $os->getCodigo() .
" está disponível para a execução, acesse: ".
$urlProfissional . " Att, " . $empresa->getNome();
if($phone)
$this->serviceComteleSMS->sendSMS($phone,$message);
/** END Fluxo SMS */
/** @var $andamento AndamentoSolicitacao */
$andamento = $os->getAgendamento()->getAndamento();
$solicitacao = $andamento->getSolicitacao();
/** START Fluxo Email */
$mail = $this->serviceEmail->getEmail();
$mail->addAddress($profissional->getEmail());
if($solicitacao->getResponsavelAtendimento())
$mail->addReplyTo($solicitacao->getResponsavelAtendimento()->getEmail());
$mail->Subject = 'Nova Ordem de Serviço';
$mail->Body = $this->renderTemplateEmail('emails/solicitacao/agendamento/notificacao_profissional_os_criada.html.twig', [
'profissional' => $profissional,
'os' => $os,
'urlProfissional' => $urlProfissional,
]);
$mail->send();
/** END Fluxo Email */
$this->notificarResponsavelAtendimento($os, 2);
return $this->json([
'status' => true,
'message' => 'Registro realizado!'
]);
}
#[Route('/{idOrdem}/relatorio', name: 'relatorioAction', methods: ['GET'])]
#[ACL\Api(enable: true, title: 'Exibe Relatorio Ordem Serviço', description: 'Exibe Relatorio Ordem de Serviço')]
public function relatorioAction(Request $request, $idOrdem): Response
{
$em = $this->doctrine->getManager();
/** @var OrdemServico $ordemServico */
$ordemServico = $em->getRepository(OrdemServico::class)->findOneBy(['id' => $idOrdem]);
if(!$ordemServico)
return new Response();
/** @var Solicitacao $solicitacao */
if(!$ordemServico->getAgendamento()->getAndamento())
return new Response();
$solicitacao = $ordemServico->getAgendamento()->getAndamento()->getSolicitacao();
$osJson = $this->osToJson($ordemServico, $solicitacao);
$html = $this->renderView('ordemServico/relatorio_pdf.html.twig', [
'objOS' => $ordemServico,
'jsonOS' => $osJson,
'solicitacao' => $solicitacao,
]);
$dompdf = new Dompdf(["enable_remote" => true]);
$dompdf->loadHtml($html);
$dompdf->render();
return new Response (
$dompdf->stream('Relatório_OS_' . $ordemServico->getCodigo(), ["Attachment" => false]),
Response::HTTP_OK,
['Content-Type' => 'application/pdf']
);
// return $this->json('ok');
}
public function checkOrdemServico(OrdemServico $ordemServico): bool
{
if(!$this->mediaService->countGallery($ordemServico->getAnexosPreparacao()))
return false;
if(!$this->mediaService->countGallery($ordemServico->getAnexosTrabalhoAndamento()))
return false;
if(!$this->mediaService->countGallery($ordemServico->getAnexosTrabalhoFinalizado()))
return false;
if(!$ordemServico->getAssinaturaProfissional())
return false;
if(!$ordemServico->getAssinaturaCliente())
return false;
if(!$ordemServico->getDescricao())
return false;
return true;
}
public function atualizarOrdemServico(OrdemServico $ordemServico, Request $request)
{
$em = $this->doctrine->getManager();
$descricao = $request->request->get('descricao');
$anexosPreparacao = $request->files->get('anexosPreparacao');
$anexosTrabalhoAndamento = $request->files->get('anexosTrabalhoAndamento');
$anexosTrabalhoFinalizado = $request->files->get('anexosTrabalhoFinalizado');
$assinaturaCliente = $request->request->get('assinaturaCliente');
$assinaturaProfissional = $request->request->get('assinaturaProfissional');
if($descricao && $descricao !== "")
$ordemServico->setDescricao($descricao);
if($anexosPreparacao){
if(!$ordemServico->getAnexosPreparacao())
$ordemServico->setAnexosPreparacao( $this->mediaService->createGallery() );
$this->mediaService->deleteAllMediaGallery($ordemServico->getAnexosPreparacao());
$medias = $this->mediaService->createMultipleMedia($anexosPreparacao);
$this->mediaService->addMediaInGallery($medias, $ordemServico->getAnexosPreparacao());
}
if($anexosTrabalhoAndamento){
if(!$ordemServico->getAnexosTrabalhoAndamento())
$ordemServico->setAnexosTrabalhoAndamento( $this->mediaService->createGallery() );
$this->mediaService->deleteAllMediaGallery($ordemServico->getAnexosTrabalhoAndamento());
$medias = $this->mediaService->createMultipleMedia($anexosTrabalhoAndamento);
$this->mediaService->addMediaInGallery($medias, $ordemServico->getAnexosTrabalhoAndamento());
}
if($anexosTrabalhoFinalizado){
if(!$ordemServico->getAnexosTrabalhoFinalizado())
$ordemServico->setAnexosTrabalhoFinalizado( $this->mediaService->createGallery() );
$this->mediaService->deleteAllMediaGallery($ordemServico->getAnexosTrabalhoFinalizado());
$medias = $this->mediaService->createMultipleMedia($anexosTrabalhoFinalizado);
$this->mediaService->addMediaInGallery($medias, $ordemServico->getAnexosTrabalhoFinalizado());
}
if($assinaturaCliente){
//var_dump($assinaturaCliente);
// if($ordemServico->getAssinaturaCliente()){
// $em->remove($ordemServico->getAssinaturaCliente());
// $em->flush();
// }
$ordemServico->setAssinaturaCliente( $this->mediaService->createMediaBase64($assinaturaCliente, 'assinaturaCliente') );
}
if($assinaturaProfissional){
// if($ordemServico->getAssinaturaProfissional()){
// $em->remove($ordemServico->getAssinaturaProfissional());
// $em->flush();
// }
$ordemServico->setAssinaturaProfissional( $this->mediaService->createMediaBase64($assinaturaProfissional, 'assinaturaProfissional') );
}
$em->persist($ordemServico);
$em->flush();
}
// #[Route('', name: 'edit', methods: ['POST'])]
// #[ACL\Api(enable: true, title: 'Criar', description: 'Iniciar Ordem Servico')]
// public function editAction(Request $request): Response
// {
// $this->validateAccess("createAction");
// $em = $this->doctrine->getManager();
//
// $departamento = $request->request->get('departamento');
// $assunto = $request->request->get('assunto');
// $mensagem = $request->request->get('mensagem');
// $anexos = $request->files->get('anexos');
// //$unidade = $request->request->get('unidade');
//
// $departamento = $this->doctrine->getRepository(Departamento::class)->findOneBy(['id' => $departamento]);
// if(!$departamento)
// return new JsonResponse(['status' => false, 'message' => 'Informe um departamento!'], 400);
//
// if(!$assunto)
// return new JsonResponse(['status' => false, 'message' => 'Informe um Assunto!'], 400);
//
// if(!$mensagem)
// return new JsonResponse(['status' => false, 'message' => 'Informe a Mensagem!'], 400);
//
// $sac = new Sac();
//
// $sac->setAssunto($assunto);
// $sac->setMensagem($mensagem);
// $sac->setDepartamento($departamento);
// $sac->setCliente($this->getUser());
//
// if($anexos){
// /** Cria Galeria caso não exista */
// $sac->setAnexo($this->mediaService->createGallery());
// /** Cria as Medias e retorna array */
// $medias = $this->mediaService->createMultipleMedia($anexos);
// /** Adicionar medias em galeria */
// $this->mediaService->addMediaInGallery($medias, $sac->getAnexo());
// /** Atualiza a galeria de Media conforme a request*/
// //$this->mediaService->mediaUpdateRequest($sac->getAnexo(), $request);
// }
//
//
// $em->persist($sac);
// $em->flush();
//
// $emailsNotificacao = explode(',', $departamento->getEmail());
// foreach ($emailsNotificacao as $email){
// $mail = $this->serviceEmail->getEmail();
// $mail->addAddress($email);
// $mail->Subject = 'Notificação - Contato Realizado';
// $mail->Body = $this->renderTemplateEmail('emails/sac/sac.html.twig', [
// 'sac' => $sac,
// ]);
// $mail->send();
// }
//
// return $this->json([
// 'status' => true,
// 'message' => 'Contato realizado com sucesso!',
// ], 200);
//
// }
public function notificarClienteProfissionalACaminho(OrdemServico $ordemServico): void
{
$em = $this->doctrine->getManager();
/** @var Solicitacao $solicitacao */
$solicitacao = $ordemServico->getAgendamento()->getAndamento()->getSolicitacao();
$empresa = $this->serviceEmail->getEmpresa();
$mensagem = new RespostaSolicitacao();
$mensagem->setAndamentoSolicitacao($solicitacao->getAndamentoSolicitacao()->last());
$mensagem->setRespondidoPor('atendimento');
$mensagem->setMensagem('O profissional está a caminho e chegará até o horário agendado.');
$em->persist($mensagem);
$em->flush();
$phone = ($solicitacao->getCliente()->getCelular())? $solicitacao->getCliente()->getCelular() : $solicitacao->getCliente()->getTelefone();
$message = "Olá ". explode($solicitacao->getCliente()->getNomeCompleto()," ")[0] .", o profissional ". $ordemServico->getProfissional()->getNomecompleto() .
" está a caminho para atender a solicitação {". $solicitacao->getCodigo() ."}. Att. ". $empresa->getNome() . ".";
if($phone)
$this->serviceComteleSMS->sendSMS($phone,$message);
$mail = $this->serviceEmail->getEmail();
$mail->addAddress($solicitacao->getCliente()->getEmail());
$mail->Subject = 'Profissional a Caminho';
$mail->Body = $this->renderTemplateEmail('emails/solicitacao/agendamento/notificacao_cliente_profissional_a_caminho.html.twig', [
'cliente' => $solicitacao->getCliente(),
'solicitacao' => $solicitacao,
'ordemServico' => $ordemServico,
]);
$mail->send();
}
public function notificarResponsavelAtendimento(OrdemServico $ordemServico, int $notification): void
{
$tiposNotificacao = [
0 => 'Profissional a Caminho',
1 => 'Atendimento Finalizado',
2 => 'Atendimento Reagendado',
];
if(!isset($tiposNotificacao[$notification]))
return;
$em = $this->doctrine->getManager();
/** @var Solicitacao $solicitacao */
$solicitacao = $ordemServico->getAgendamento()->getAndamento()->getSolicitacao();
$empresa = $this->serviceEmail->getEmpresa();
if(!$solicitacao->getResponsavelAtendimento())
return;
$mail = $this->serviceEmail->getEmail();
$mail->addAddress($solicitacao->getResponsavelAtendimento()->getEmail());
$mail->Subject = 'Atualização OS - '.$tiposNotificacao[$notification];
$mail->Body = $this->renderTemplateEmail('emails/solicitacao/agendamento/notificacao_atualizacao_os_responsavel_atendimento.html.twig', [
'cliente' => $solicitacao->getCliente(),
'solicitacao' => $solicitacao,
'ordemServico' => $ordemServico,
'tipoNotificao' => $tiposNotificacao[$notification],
]);
$mail->send();
}
}