<?php
namespace App\Controller;
use App\Entity\ZAPP\HistorialMensajesWhatsapp;
use App\Service\Utils;
use App\Service\UtilsGestion;
use App\Service\UtilsTools;
use App\Service\UtilsZAPP;
use Doctrine\Persistence\ManagerRegistry;
use stdClass;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class ChatController extends AbstractController
{
/**
* @Route("/chat/{afiliadoId}/{whabaId}", name="chat")
*/
public function chat(
Request $request,
ManagerRegistry $managerRegistry,
Utils $utils,
$afiliadoId = '',
$whabaId = ''
) {
$oEm = $managerRegistry->getManager();
$oCentro = $oEm->getRepository('App\Entity\ZAPP\Centros')
->findOneBy(['idAfiliado' => $afiliadoId]);
if ($afiliadoId == 620) {
dd();
}
$oConfiguracion = $oEm->getRepository('App\Entity\ZAPP\Configuracion')
->findOneBy([
'keyIdentificador' => 'whaba_id',
'centroId' => $oCentro->getIdCentro(),
'valor' => $whabaId
]);
$valorWhabaId = '';
if (!is_null($oConfiguracion)) {
$valorWhabaId = $oConfiguracion->getValor();
} else {
$valorWhabaId = $whabaId;
}
$oConversaciones = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->getConversationsByPhoneOrigen($valorWhabaId, $oCentro->getIdCentro(), 20);
$aConversaciones = [];
foreach ($oConversaciones as $conversacion) {
$numTelefono = ($conversacion['whabaDestinoId'] === $valorWhabaId) ? $conversacion['whabaOrigenId'] : $conversacion['whabaDestinoId'];
if ((strpos($numTelefono, "34") === 0)) {
$numTelefono = substr($numTelefono, 2);
}
if (strpos($numTelefono, "+34") === 0) {
$numTelefono = substr($numTelefono, 3);
}
if (strpos($numTelefono, "4") === 0) {
$numTelefono = substr($numTelefono, 1);
}
$aTotalNotificaciones = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->getTotalNotificaciones($numTelefono, $conversacion['centroId'], $valorWhabaId);
$oPacientesVC = [];
$pacienteVc = '';
$oTelefonosPacienteVC = $oEm->getRepository('App\Entity\ZAPP\TelefonosPacienteVc')->findBy(array('numeroTelefono' => $numTelefono));
foreach ($oTelefonosPacienteVC as $numTelefonoPacienteVc) {
$pacienteVc = $numTelefonoPacienteVc->getPacienteVc();
if ($pacienteVc->getCentroId() == $oCentro->getIdCentro()) {
array_push($oPacientesVC, $pacienteVc);
}
}
$aPacientesPorConversacion = [];
$imagen = '';
//Quitamos duplicados...
$oPacientesVC = array_map('serialize', $oPacientesVC);
$oPacientesVC = array_unique($oPacientesVC, SORT_REGULAR);
$oPacientesVC = array_map('unserialize', $oPacientesVC);
foreach ($oPacientesVC as $pacienteVc) {
if (!is_null($pacienteVc)) {
$imagen = $pacienteVc->getFoto();
if ((strpos($imagen, 'phpPerfil') === false) && (strpos($imagen, 'phppaciente') === false)) {
$imagen = '';
}
}
array_push(
$aPacientesPorConversacion,
[
'vcId' => $pacienteVc->getIdVc(), //Array de VCIDs
'nombre_familia' => ucwords(strtolower((!is_null($pacienteVc)) ? $pacienteVc->getApellidos() : $pacienteVc->getIdVc())),
'nombre_paciente' => ucwords(strtolower((!is_null($pacienteVc)) ? $pacienteVc->getNombre() : '')),
'imagen' => $imagen,
]
);
}
if (!isset($aConversaciones[$numTelefono]) || $conversacion['maxFechaCreacion'] > $aConversaciones[$numTelefono]['fecha_creacion']) {
$aConversaciones[$numTelefono] = [
'centroId' => $oCentro->getIdCentro(),
'pacientes' => $aPacientesPorConversacion,
'num_telefono' => $numTelefono,
'total_notificaciones' => $aTotalNotificaciones[0]['totalLeido'],
'fecha_creacion' => $conversacion['maxFechaCreacion']
];
}
}
//sort($aConversaciones);
$column = array_column($aConversaciones, 'total_notificaciones');
$columnFechaCreacion = array_column($aConversaciones, 'fecha_creacion');
array_multisort($column, SORT_DESC, $columnFechaCreacion, SORT_DESC, $aConversaciones);
//array_multisort($column, SORT_DESC, $aConversaciones);
$aConversaciones = array_slice($aConversaciones, 0, 20);
$data = [
'aConversaciones' => $aConversaciones,
'whabaOrigen' => $valorWhabaId,
'afiliadoId' => $afiliadoId,
'centroId' => $oCentro->getIdCentro()
];
return $this->render('chat/base_chat.html.twig', $data);
/* foreach ($aConversaciones as $keyNumTelefono => $valueNumTelfono) {
foreach ($valueNumTelfono as $keyVcId => $valueConversacion) {
$aConversacionesTemp[] = [
'centroId' => $valueConversacion['centroId'],
'vcId' => $valueConversacion['vcId'],
'num_telefono' => $valueConversacion['num_telefono'],
'nombre_familia' => $valueConversacion['nombre_familia'],
'nombre_paciente' => $valueConversacion['nombre_paciente'],
'imagen' => $valueConversacion['imagen'],
'total_notificaciones' => $valueConversacion['total_notificaciones'],
'fecha_creacion' => $valueConversacion['fecha_creacion']
];
}
} */
/* $oPacienteVC = $oEm->getRepository('App\Entity\ZAPP\PacienteVc')
->findOneBy(['idVc' => $conversacion['vcId'], 'centroId' => $conversacion['centroId']]); */
}
/**
* @Route("/consulta-consumos/{afiliadoId}/", name="consulta_consumos")
*/
public function consultaConsumos(
Request $request,
ManagerRegistry $managerRegistry,
UtilsTools $utilsTools,
Utils $utils,
$afiliadoId = ''
) {
$oEm = $managerRegistry->getManager();
$oCentro = $oEm->getRepository('App\Entity\ZAPP\Centros')
->findOneBy(['idAfiliado' => $afiliadoId]);
$dbItem = $utilsTools->getWhabaCentroId($oCentro->getIdCentro());
$whaba = $dbItem["whaba_id"];
$messageCounts = [];
// Get the current date
$currentDate = new \DateTime();
// Iterate over the last three months
for ($i = 0; $i < 3; $i++) {
// Clone the current date and subtract months
$date = clone $currentDate;
$date->modify("-$i months");
// Extract year and month
$year = $date->format('Y');
$month = $date->format('m');
// Call the function and store the result in the array
$messageCounts["$year-$month"] = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->countMessagesByWhabaIdAndMonth($whaba, $month, $year);
}
$messageCounts["centro"] = $oCentro->getNombreCentro();
dd($messageCounts);
}
/**
* @Route("/get-listado-conversaciones/{whabaOrigen}/{numTelefonoSelected}", name="get_listado_conversaciones")
*/
public function getListadoConversaciones(
Request $request,
ManagerRegistry $managerRegistry,
UtilsTools $utilsTools,
Utils $utils,
$whabaOrigen = '',
$numTelefonoSelected = ''
) {
$oEm = $managerRegistry->getManager();
$oConfiguracion = $oEm->getRepository('App\Entity\ZAPP\Configuracion')
->findOneBy(['valor' => $whabaOrigen]);
$centroId = '';
if (!is_null($oConfiguracion)) {
$centroId = $oConfiguracion->getCentroId();
} else {
$objConfUserWhaba = $utilsTools->getConfiguracionUserTelefonoByWhabaId($whabaOrigen);
$centroId = $objConfUserWhaba->centro_id;
}
$oCentro = $oEm->getRepository('App\Entity\ZAPP\Centros')
->findOneBy(['idCentro' => $centroId]);
$oConversaciones = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->getConversationsByPhoneOrigen($whabaOrigen, $centroId, 100);
$aConversaciones = [];
foreach ($oConversaciones as $conversacion) {
$numTelefono = ($conversacion['whabaDestinoId'] === $whabaOrigen) ? $conversacion['whabaOrigenId'] : $conversacion['whabaDestinoId'];
if ($numTelefono == "" || $numTelefono === null) {
continue;
}
if ((strpos($numTelefono, "34") === 0)) {
$numTelefono = substr($numTelefono, 2);
}
if (strpos($numTelefono, "+34") === 0) {
$numTelefono = substr($numTelefono, 3);
}
if (strpos($numTelefono, "4") === 0) {
$numTelefono = substr($numTelefono, 1);
}
$aTotalNotificaciones = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->getTotalNotificaciones($numTelefono, $conversacion['centroId'], $whabaOrigen);
$oPacientesVC = [];
$pacienteVc = '';
$oTelefonosPacienteVC = $oEm->getRepository('App\Entity\ZAPP\TelefonosPacienteVc')->findBy(array('numeroTelefono' => $numTelefono));
foreach ($oTelefonosPacienteVC as $numTelefonoPacienteVc) {
$pacienteVc = $numTelefonoPacienteVc->getPacienteVc();
if ($pacienteVc->getCentroId() == $oCentro->getIdCentro()) {
array_push($oPacientesVC, $pacienteVc);
}
}
$aPacientesPorConversacion = [];
$imagen = '';
//Quitamos duplicados...
$oPacientesVC = array_map('serialize', $oPacientesVC);
$oPacientesVC = array_unique($oPacientesVC, SORT_REGULAR);
$oPacientesVC = array_map('unserialize', $oPacientesVC);
foreach ($oPacientesVC as $pacienteVc) {
if (!is_null($pacienteVc)) {
$imagen = $pacienteVc->getFoto();
if ((strpos($imagen, 'phpPerfil') === false) && (strpos($imagen, 'phppaciente') === false)) {
$imagen = '';
}
}
array_push(
$aPacientesPorConversacion,
[
'vcId' => $pacienteVc->getIdVc(), //Array de VCIDs
'nombre_familia' => ucwords(strtolower((!is_null($pacienteVc)) ? $pacienteVc->getApellidos() : $pacienteVc->getIdVc())),
'nombre_paciente' => ucwords(strtolower((!is_null($pacienteVc)) ? $pacienteVc->getNombre() : '')),
'imagen' => $imagen,
]
);
}
if (!isset($aConversaciones[$numTelefono]) || $conversacion['maxFechaCreacion'] > $aConversaciones[$numTelefono]['fecha_creacion']) {
$aConversaciones[$numTelefono] = [
'centroId' => $oCentro->getIdCentro(),
'pacientes' => $aPacientesPorConversacion,
'num_telefono' => $numTelefono,
'total_notificaciones' => $aTotalNotificaciones[0]['totalLeido'],
'fecha_creacion' => $conversacion['maxFechaCreacion']
];
}
}
$column = array_column($aConversaciones, 'total_notificaciones');
$columnFechaCreacion = array_column($aConversaciones, 'fecha_creacion');
array_multisort($column, SORT_DESC, $columnFechaCreacion, SORT_DESC, $aConversaciones);
$datos = [
'aConversaciones' => $aConversaciones,
'numTelefonoSelected' => $numTelefonoSelected
];
return $this->render('chat/listado-chat.html.twig', $datos);
/* foreach ($oConversaciones as $conversacion) {
$oPacienteVC = $oEm->getRepository('App\Entity\ZAPP\PacienteVc')
->findOneBy(['idVc' => $conversacion['vcId'], 'centroId' => $conversacion['centroId']]);
$aTotalNotificaciones = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->getTotalNotificaciones($conversacion['vcId'], $conversacion['centroId']);
$numTelefono = ($conversacion['whabaDestinoId'] === $whabaOrigen) ? $conversacion['whabaOrigenId'] : $conversacion['whabaDestinoId'];
$imagen = '';
if (!is_null($oPacienteVC)) {
$imagen = $oPacienteVC->getFoto();
if ((strpos($imagen, 'phpPerfil') === false) && (strpos($imagen, 'phppaciente') === false)) {
$imagen = '';
}
}
if ((strpos($numTelefono, "34") !== false) || (strpos($numTelefono, "+34") !== false)) {
$numTelefono = substr($numTelefono, "2");
}
$aConversaciones[$numTelefono][$conversacion['vcId']] = [
'centroId' => $conversacion['centroId'],
'vcId' => $conversacion['vcId'],
'num_telefono' => $numTelefono,
'nombre_familia' => (!is_null($oPacienteVC)) ? $oPacienteVC->getApellidos() : $conversacion['vcId'],
'nombre_paciente' => (!is_null($oPacienteVC)) ? $oPacienteVC->getNombre() : '',
'imagen' => $imagen,
'total_notificaciones' => $aTotalNotificaciones[0]['totalLeido'],
'fecha_creacion' => $conversacion['fechaCreacion']
];
}
$aConversacionesTmp = [];
foreach ($aConversaciones as $keyNumTelefono => $valueNumTelfono) {
$aVCIDsNumTlf = [];
foreach ($valueNumTelfono as $keyVcId => $valueConversacion) {
array_push($aVCIDsNumTlf, [
'vcId_paciente' => $valueConversacion['vcId'],
'nombre_paciente' => ucwords(strtolower($valueConversacion['nombre_paciente'])),
'nombre_familia_paciente' => ucwords(strtolower($valueConversacion['nombre_familia']))
]);
}
$aConversacionesTmp[] = [
'centroId' => $valueConversacion['centroId'],
'pacientes' => $aVCIDsNumTlf,
'num_telefono' => $valueConversacion['num_telefono'],
'imagen' => $valueConversacion['imagen'],
'total_notificaciones' => $valueConversacion['total_notificaciones'],
'fecha_creacion' => $valueConversacion['fecha_creacion']
];
} */
/* foreach ($aConversaciones as $keyNumTelefono => $valueNumTelefono) {
foreach ($valueNumTelefono as $keyVcId => $value) {
$aConversacionesTmp[] = [
'centroId' => $value['centroId'],
'vcId' => $value['vcId'],
'num_telefono' => $value['num_telefono'],
'nombre_familia' => $value['nombre_familia'],
'nombre_paciente' => $value['nombre_paciente'],
'imagen' => $value['imagen'],
'total_notificaciones' => $value['total_notificaciones'],
'fecha_creacion' => $value['fecha_creacion']
];
}
} */
}
/**
* @Route("/get-conversacion/{whabaOrigenId}/{numTelefono}/{centroId}", name="get_conversacion")
*/
public function getConversacion(
Request $request,
ManagerRegistry $managerRegistry,
Utils $utils,
UtilsZAPP $utilsZAPP,
$whabaOrigenId = '',
$vcId = '',
$numTelefono = '',
$centroId = ''
) {
$oEm = $managerRegistry->getManager();
$aTelefonoPaciente = [];
$oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->getConversacionByPhone($numTelefono, $centroId, $whabaOrigenId);
$oTelefonosPacientes = $oEm->getRepository('App\Entity\ZAPP\TelefonosPacienteVc')
->findBy(['numeroTelefono' => $numTelefono]);
$oPacientesVC = [];
$aPacientesVCIDs = [];
$aTelefonoPaciente = [];
foreach ($oTelefonosPacientes as $telefonoPaciente) {
$pacienteVc = $telefonoPaciente->getPacienteVc();
if ($pacienteVc->getCentroId() == $centroId) {
array_push($oPacientesVC, $pacienteVc);
array_push($aPacientesVCIDs, $pacienteVc->getIdVc());
array_push($aTelefonoPaciente, $telefonoPaciente->getTipoTelefono());
}
}
//Quitamos duplicados...
$oPacientesVC = array_map('serialize', $oPacientesVC);
$oPacientesVC = array_unique($oPacientesVC, SORT_REGULAR);
$oPacientesVC = array_map('unserialize', $oPacientesVC);
if ($oPacientesVC === []) {
$array = array("numerotelefonodesconocido" => $numTelefono);
$oPacientesVC = array(json_decode(json_encode($array)));
}
//Pretendía dar la señal para crear el nuevo pacienteVC de filemaker pero no tengo su id...
/* if (is_null($aPacientesVCID)) {
foreach ($aPacientesVCID as $pacienteVC) {
$utilsZAPP->createUpdatePacienteMySQL($vcId, $centroId);
}
} */
//Aqui scaa el numero de telefono si no lo conoce. Pero doy por hecho que todo lo que salga en la lista de chats está OK
/* if (empty($oTelefonosPacientes)) {
$utilsZAPP->createTelefonoPacienteMySQL($oPacienteVc, $vcId, $centroId);
$oPacienteTelefonos = $oEm->getRepository('App\Entity\ZAPP\TelefonosPacienteVc')
->findBy(['pacienteVc' => $oPacienteVc]);
} */
/* dd($o)
foreach ($oTelefonosPacientes as $pacienteTelefono) {
} */
//Marcamos como leidas las notificaciones TODO- Ver si esto ya puede funcionar sin ID!!!
$oHistorialMensajesNotificaciones = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->getMessageIsOrNotRead($numTelefono, $centroId);
foreach ($oHistorialMensajesNotificaciones as $historialMensajesNotificacione) {
$historialMensajesNotificacione->setIsRead(true);
$historialMensajesNotificacione->setFechaRead(new \DateTime('now'));
$oEm->persist($historialMensajesNotificacione);
$oEm->flush();
}
//Comparamos si ha pasado mas de 48 horas, para cargar la plantilla generica
$oLastMessage = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->getLastMessage($numTelefono, $centroId, $whabaOrigenId);
$isTemplateSend = false;
if (!is_null($oLastMessage)) {
$fechaActual = new \DateTime('now');
$horaDiferencia = $fechaActual->diff($oLastMessage->getFechaCreacion());
if ($horaDiferencia->days >= 1) {
$isTemplateSend = true;
}
} else {
$isTemplateSend = true;
}
$datos = [
'oHistorialMensajes' => $oHistorialMensajes,
'oPacienteVc' => $oPacientesVC,
'whabaOrigenId' => $whabaOrigenId,
'vcId' => $aPacientesVCIDs,
'centroId' => $centroId,
'aTelefonosPaciente' => $aTelefonoPaciente,
'numTelefono' => $numTelefono
];
$viewCabecera = $this->renderView('chat/conversacion-header.html.twig', $datos);
$viewConversacion = $this->renderView('chat/conversacion.html.twig', $datos);
return new JsonResponse([
'viewCabecera' => $viewCabecera,
'viewConversacion' => $viewConversacion,
'isTemplateSend' => $isTemplateSend
]);
}
/**
* @Route("/force-database-update/{numTelefono}/{centroId}", name="force_database_update")
*/
public function forceDatabaseUpdate(
Request $request,
ManagerRegistry $managerRegistry,
Utils $utils,
UtilsZAPP $utilsZAPP,
$numTelefono = '',
$centroId = ''
) {
//Llamada a la api para que haga lo suyo
$EstadoActualizacion = new JsonResponse(json_decode($utils->connectToAPI('force-database-update/' . $numTelefono, 'GET', ['idCentroConnection' => $centroId])));
return $EstadoActualizacion;
}
/**
* @Route("/send-mensaje", name="send_mensaje")
*/
public function sendMessage(Request $request, ManagerRegistry $managerRegistry, Utils $utils)
{
$oEm = $managerRegistry->getManager();
$viewMessage = '';
try {
$whabaOrigen = $request->request->get('whabaOrigen');
/* $vcId = $request->request->get('vcId'); */
$centroId = $request->request->get('centroid');
$type = $request->request->get('typeSend');
$telefonoDestino = '';
if ($request->request->get('telefonoDestino')) {
$telefonoDestino = $request->request->get('telefonoDestino');
}
/* $oHistorialMensajesPreview = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $centroId, 'vcId' => $vcId]); */
$aContenido = [];
$oHistorialMensaje = new HistorialMensajesWhatsapp();
$oHistorialMensaje->setIsRead(1);
$oHistorialMensaje->setFechaRead(new \DateTime('now'));
$oHistorialMensaje->setFechaActualizacion(new \DateTime('now'));
$oHistorialMensaje->setFechaCreacion(new \DateTime('now'));
$oHistorialMensaje->setCentroId($centroId);
$oHistorialMensaje->setVcId(null);
$oHistorialMensaje->setWhabaOrigenId($whabaOrigen);
/*$oHistorialMensaje->setWhabaDestinoId(($telefonoDestino !== '') ? $telefonoDestino
: $oHistorialMensajesPreview->getWhabaDestinoId());*/
$oHistorialMensaje->setWhabaDestinoId($telefonoDestino);
$oHistorialMensaje->setTemplate('');
/* $aDatos['vcId'] = $vcId; */
$aDatos['centroId'] = $centroId;
if ($telefonoDestino !== '') {
$aDatos['telefonoDestino'] = $telefonoDestino;
}
$messsage = $request->request->get('texto');
$aDatos['message'] = $messsage;
if ($type === 'text') {
//$aContenido = $this->buildMessage($aDatos, $oEm);
$aContenido = $this->buildTemplateEstandard($aDatos, $oEm);
$oHistorialMensaje->setTemplate('plantilla_mensaje');
} else if ($type === 'template') {
$aContenido = $this->buildTemplateGenerico($aDatos, $oEm);
$oHistorialMensaje->setTemplate('mensaje_estandard');
} else {
$aDatos['message'] = $messsage;
if ($request->request->get('linkFile')) {
$aDatos['linkFile'] = $request->request->get('linkFile');
$aTipoArchivoImagen = ['jpg' => 'image/jpg', 'png' => 'image/png'];
$aTipoArchivoDoc = ['pdf' => 'application/pdf'];
$aTipoArchivoVideo = ['mp4' => 'video/mp4'];
$aTipoArchivoAudio = ['ogg' => 'audio/ogg; codecs=opus'];
$extension = pathinfo($request->request->get('linkFile'), PATHINFO_EXTENSION);
$oHistorialMensaje->setFileMedia($request->request->get('linkFile'));
if (isset($aTipoArchivoImagen[$extension]) && !empty($aTipoArchivoImagen[$extension])) {
$oHistorialMensaje->setFileType($aTipoArchivoImagen[$extension]);
}
if (isset($aTipoArchivoDoc[$extension]) && !empty($aTipoArchivoDoc[$extension])) {
$oHistorialMensaje->setFileType($aTipoArchivoDoc[$extension]);
}
if (isset($aTipoArchivoVideo[$extension]) && !empty($aTipoArchivoVideo[$extension])) {
$oHistorialMensaje->setFileType($aTipoArchivoVideo[$extension]);
}
if (isset($aTipoArchivoAudio[$extension]) && !empty($aTipoArchivoAudio[$extension])) {
$oHistorialMensaje->setFileType($aTipoArchivoAudio[$extension]);
}
$oHistorialMensaje->setDownloadFile($request->request->get('linkFile'));
$oHistorialMensaje->setDownloadDate(new \DateTime('now'));
}
$aContenido = $this->{$type}($aDatos, $oEm);
//si es una plantilla definida, entonces guardamos el contenido
$oHistorialMensaje->setTemplate($type);
$mensajeFinal = $this->getTemplatesDefinidos($type, $messsage);
if ($mensajeFinal !== '') {
$messsage = $mensajeFinal;
}
}
$oHistorialMensaje->setMensaje($messsage);
$aResultado = $utils->sendMessageWhatsapp($aContenido, $whabaOrigen);
//Guardamos en la db lo enviado
$oEm->persist($oHistorialMensaje);
$oEm->flush();
$viewMessage = $this->buildLastMessage($oEm, $oHistorialMensaje, $centroId, $whabaOrigen);
} catch (\Exception $exception) {
dump($exception->getMessage() . "-" . $exception->getLine());
exit;
}
return new JsonResponse(['view' => $viewMessage]);
}
/**
* @Route("/get-last-message-chat/{numTlf}/{centroId}", name="get_last_message_chat")
*/
public function getLastMessageChat(Request $request, ManagerRegistry $managerRegistry, $numTlf = '', $centroId = '')
{
$oEm = $managerRegistry->getManager();
$qb = $oEm->createQueryBuilder();
$whabaId = $request->request->get('whabaid');
/* $oHistorialMensaje = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $centroId, 'vcId' => $vcId, 'isRead' => 0], ['fechaCreacion' => 'ASC']); */
$oHistorialMensaje = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->createQueryBuilder('hmw')
->where('hmw.centroId = :centroId')
->andWhere('hmw.isRead = :isRead')
->andWhere(
$qb->expr()->orX(
'hmw.whabaDestinoId = :numTlf',
'hmw.whabaOrigenId = :numTlf'
)
)
->orderBy('hmw.fechaCreacion', 'ASC')
->setParameters([
'centroId' => $centroId,
'numTlf' => $numTlf,
'isRead' => 0
])
->getQuery()
->getOneOrNullResult();
/* $oPacienteVc = $oEm->getRepository('App\Entity\ZAPP\PacienteVc')
->findOneBy(['idVc' => $numTlf, 'centroId' => $centroId]); */
/* $oTotalHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findBy(['centroId' => $centroId, 'vcId' => $numTlf, 'isRead' => 0]); */
$oTotalHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->createQueryBuilder('hmw')
->where('hmw.centroId = :centroId')
->andWhere('hmw.isRead = :isRead')
->andWhere(
$qb->expr()->orX(
'hmw.whabaDestinoId = :numTlf',
'hmw.whabaOrigenId = :numTlf'
)
)
->setParameters([
'centroId' => $centroId,
'numTlf' => $numTlf,
'isRead' => 0
])
->getQuery()
->getResult();
$datos = [
'oMensaje' => $oHistorialMensaje,
/* 'oPacienteVc' => $oPacienteVc */
'whabaOrigenId' => $whabaId
];
$view = $this->renderView('chat/componentes/detalle-linea.html.twig', $datos);
//Marcamos el historial del mensaje a leido
if (!is_null($oHistorialMensaje)) {
$oHistorialMensaje->setIsRead(true);
$oHistorialMensaje->setFechaRead(new \DateTime('now'));
$oEm->persist($oHistorialMensaje);
$oEm->flush();
}
return new JsonResponse(['view' => $view, 'totalItems' => count($oTotalHistorialMensajes)]);
}
/**
* @Route("/get-datos-paciente/{centroId}/{idVc}", name="get_datos_paciente")
*/
public function getDatosPaciente(
Request $request,
ManagerRegistry $managerRegistry,
Utils $utils,
$centroId = '',
$idVc = ''
) {
$oEm = $managerRegistry->getManager();
$oPaciente = $oEm->getRepository('App\Entity\ZAPP\PacienteVc')
->findOneBy(['idVc' => $idVc, 'centroId' => $centroId]);
$oPacienteApiTel = json_decode($utils->connectToAPI('get-paciente-telefonos/' . $idVc, 'GET', ['idCentroConnection' => $centroId]));
$aTelefonos = [];
if (isset($oPacienteApiTel->telefonos) && !empty($oPacienteApiTel->telefonos)) {
$aTelefonos = $oPacienteApiTel->telefonos;
}
$datos = [
'oPaciente' => $oPaciente,
'oPacienteTelefono' => $aTelefonos
];
return $this->render('chat/componentes/detalle-paciente.html.twig', $datos);
}
/**
* @Route("/get-content-media/{conversacionId}", name="get_content_media")
*/
public function getContentMedia(
Request $request,
ManagerRegistry $managerRegistry,
Utils $utils,
$conversacionId = ''
) {
$oEm = $managerRegistry->getManager();
$urlMedia = '';
$oConversacion = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['id' => $conversacionId]);
if (!is_null($oConversacion->getFileMedia())) {
$urlMedia = $utils->getDownloadImage($utils->getImageWhatsapp($oConversacion->getFileMedia()), $conversacionId);
}
return new JsonResponse(['urlMedia' => $urlMedia]);
}
/**
* @Route("/get-search-pacientes", name="get_search_pacientes")
*/
public function getSearchPacientes(Request $request, ManagerRegistry $managerRegistry, Utils $utils)
{
$pacienteSearchNombre = $request->request->get('pacienteNombre');
$pacienteSearchApellido = $request->request->get('pacienteApellido');
$centroId = $request->request->get('centroId');
$aPacientes = [];
$objPacientes = json_decode($utils->connectToAPI(
'get-filtro-paciente/1',
'POST',
['name' => $pacienteSearchNombre, 'apellido' => $pacienteSearchApellido, 'idCentroConnection' => $centroId]
));
//dump($objPacientes->aPacientes);exit;
for ($i = 0; $i < count($objPacientes->aPacientes); $i++) {
$oPaciente = $objPacientes->aPacientes[$i];
for ($j = 0; $j < count($oPaciente); $j++) {
if (isset($oPaciente[$j]) && !empty($oPaciente[$j])) {
$aPacientes[] = [
'id' => $oPaciente[$j]->id,
'nombre' => $oPaciente[$j]->nombre,
'apellidos' => $oPaciente[$j]->apellidos,
'telefono' => $oPaciente[$j]->telefonos,
'categoryTelefono' => $oPaciente[$j]->categoryTelefono
];
}
}
}
// $aPacientes = $objPacientes['aPacientes'];
return new JsonResponse(['aPacientes' => $aPacientes]);
}
/**
* @Route("/upload-file-and-send", name="upload_file_and_send")
*/
public function uploadFileAndSend(
Request $request,
ManagerRegistry $managerRegistry,
Utils $utils
) {
$oEm = $managerRegistry->getManager();
$status = false;
$message = '';
$viewMessage = '';
try {
if (isset($_FILES['file']) && !empty($_FILES['file'])) {
$typeFile = $request->request->get('typeFile');
$fileExtensionType = $request->request->get('fileExtensionType');
$whabaDestino = $request->request->get('whabadestino');
/* $vcId = $request->request->get('vcId'); */
$centroId = $request->request->get('centroId');
$numTelefono = $request->request->get('numtelefono');
$result = $utils->uploadImageAWS($_FILES['file'], true);
if ($result) {
$directory = getcwd() . '/assets/chat/' . $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $directory);
//Guardamos el media descargado en la bd
$full_url = $result->get('ObjectURL');
$last_slash = strrpos($full_url, '/') + 1;
$url = substr($full_url, $last_slash);
$oHistorialMensaje = new HistorialMensajesWhatsapp();
$oHistorialMensaje->setWhabaOrigenId($whabaDestino);
$oHistorialMensaje->setWhabaDestinoId($numTelefono);
$oHistorialMensaje->setFechaCreacion(new \DateTime('now'));
$oHistorialMensaje->setFechaActualizacion(new \DateTime('now'));
$oHistorialMensaje->setMensaje('');
$oHistorialMensaje->setCentroId($centroId);
$oHistorialMensaje->setVcId(null);
$oHistorialMensaje->setIsRead(true);
$oHistorialMensaje->setTemplate('');
$oHistorialMensaje->setFechaRead(new \DateTime('now'));
$oHistorialMensaje->setFileMedia($url);
$oHistorialMensaje->setFileType($fileExtensionType);
$oHistorialMensaje->setDownloadFile($url);
$oHistorialMensaje->setDownloadDate(new \DateTime('now'));
$oEm->persist($oHistorialMensaje);
$oEm->flush();
/*$message = $utils->buildContentSendImageDocAndSend($aParams);*/
$aDatos = [
'centroId' => $centroId,
'nameFile' => $url,
'type' => $typeFile,
'linkFile' => 'https://comunicacionprueba.ziving.com/assets/chat/' . $_FILES['file']['name'],
'telefonoDestino' => $numTelefono,
'whabaOrigen' => $whabaDestino
];
$aContenido = [];
if ($typeFile === 'image') {
$aContenido = $this->estandard_imagen($aDatos, $oEm);
} else if ($typeFile === 'video') {
$aContenido = $this->estandard_video($aDatos, $oEm);
} else if ($typeFile === 'document') {
$aContenido = $this->estandard_documentos($aDatos, $oEm);
}
$aResultado = $utils->sendMessageWhatsapp($aContenido, $whabaDestino);
//unlink($directory);
$status = true;
$viewMessage = $this->buildLastMessage($oEm, $oHistorialMensaje, $centroId, $whabaDestino);
}
}
} catch (\Exception $exception) {
$status = false;
$message = $exception->getMessage();
}
return new JsonResponse(['status' => $status, 'message' => $message, 'view' => $viewMessage]);
}
/**
* @Route("/validar-waba-webhook", name="validar_waba_webhook")
*/
public function validarWabaWebhook(Utils $utils)
{
//Esta funcion sirve para suscribir al campo mensajes un id de waba concreto
$response = $utils->registerPhoneNumber();
dd($response);
}
/**
* @Route("/verificar-numeros-asociados", name="verificar_numeros_asociados")
*/
public function verificarNumerosAsociados(Utils $utils)
{
//Esta funcion sirve para cambiar el nombre de visualización de un telefono concreto
//Previa aprobación en la web de FB
$response = $utils->getPhonesAssociated();
dd($response);
}
/**
* @Route("/cambiar-nombre-waba", name="cambiar_nombre_waba")
*/
public function cambiarNombreWaba(Utils $utils)
{
//Esta funcion sirve para cambiar el nombre de visualización de un telefono concreto
//Previa aprobación en la web de FB
$response = $utils->changeWabaName();
dd($response);
}
/**
* @Route("/check-phone-status", name="check_phone_status")
*/
public function checkPhoneStatus(Utils $utils)
{
//Esta funcion sirve para cambiar el nombre de visualización de un telefono concreto
//Previa aprobación en la web de FB
$response = $utils->checkPhoneStatus();
dd($response);
}
private function buildLastMessage($oEm, $oHistorialMensaje, $centroId, $whabaOrigenId)
{
/* $oPacienteVc = $oEm->getRepository('App\Entity\ZAPP\PacienteVc')
->findOneBy(['idVc' => $vcId, 'centroId' => $centroId]); */
$datos = [
'oMensaje' => $oHistorialMensaje,
'whabaOrigenId' => $whabaOrigenId
];
return $this->renderView('chat/componentes/detalle-linea.html.twig', $datos);
}
private function buildMessage($aDatos, $oEm)
{
$oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $aDatos['centroId'], 'vcId' => $aDatos['vcId']]);
$whabaDestino = '';
if (isset($aDatos['telefonoDestino']) && !empty($aDatos['telefonoDestino'])) {
$whabaDestino = $aDatos['telefonoDestino'];
} else {
$whabaDestino = $oHistorialMensajes->getWhabaDestinoId();
}
$textoFinal = trim(preg_replace('/\t+/', ' ', $aDatos['message']));
$textoFinal = trim(preg_replace('/\n+/', ' ', $textoFinal));
$aMessage = [
'messaging_product' => 'whatsapp',
'preview_url' => false,
'recipient_type' => 'individual',
'to' => $whabaDestino,
//'to' => '+34670493258',
'type' => 'text',
'text' => [
'body' => $textoFinal
]
];
return $aMessage;
}
private function buildTemplateEstandard($aDatos, $oEm)
{
/* $oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $aDatos['centroId'], 'whaba_origen_id' => $aDatos['vcId']]); */
$whabaDestino = '';
if (isset($aDatos['telefonoDestino']) && !empty($aDatos['telefonoDestino'])) {
$whabaDestino = $aDatos['telefonoDestino'];
} else {
/* $whabaDestino = $oHistorialMensajes->getWhabaDestinoId(); */
}
$textoFinal = $aDatos['message'];
//$textoFinal = str_replace("Hola", "", $aDatos['message']);
$textoFinal = trim(preg_replace('/\t+/', ' ', $textoFinal));
$textoFinal = trim(preg_replace('/\n+/', ' ', $textoFinal));
$aParametersBody = [
'type' => 'text',
'text' => $textoFinal
];
$aContenido[] = [
'type' => 'body',
'parameters' => [
$aParametersBody
]
];
//$whabaDestino = 670493258;
$aWhatsAppContent = [
'messaging_product' => 'whatsapp',
'recipient_type' => 'individual',
'to' => $whabaDestino,
'type' => 'template',
'template' => [
'name' => 'plantilla_mensaje',
'language' => [
'code' => 'es'
],
'components' => $aContenido
]
];
return $aWhatsAppContent;
}
private function buildTemplateGenerico($aDatos, $oEm)
{
$oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $aDatos['centroId'], 'vcId' => $aDatos['vcId']]);
$whabaDestino = '';
if (isset($aDatos['telefonoDestino']) && !empty($aDatos['telefonoDestino'])) {
$whabaDestino = $aDatos['telefonoDestino'];
} else {
$whabaDestino = $oHistorialMensajes->getWhabaDestinoId();
}
$textoFinal = str_replace("Hola", "", $aDatos['message']);
$textoFinal = trim(preg_replace('/\t+/', ' ', $textoFinal));
$textoFinal = trim(preg_replace('/\n+/', ' ', $textoFinal));
$aParametersBody = [
'type' => 'text',
'text' => $textoFinal
];
$aContenido[] = [
'type' => 'body',
'parameters' => [
$aParametersBody
]
];
//$whabaDestino = 670493258;
$aWhatsAppContent = [
'messaging_product' => 'whatsapp',
'recipient_type' => 'individual',
'to' => $whabaDestino,
'type' => 'template',
'template' => [
'name' => 'mensaje_estandard',
'language' => [
'code' => 'es'
],
'components' => $aContenido
]
];
return $aWhatsAppContent;
}
private function estandard_imagen($aDatos, $oEm)
{
$aContenidoFinal = [];
/* $oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $aDatos['centroId'], 'vcId' => $aDatos['vcId']]); */
$whabaDestino = '';
if (isset($aDatos['telefonoDestino']) && !empty($aDatos['telefonoDestino'])) {
$whabaDestino = $aDatos['telefonoDestino'];
} else {
/* $whabaDestino = $oHistorialMensajes->getWhabaDestinoId(); */
}
$aParametersHeader = [
'type' => 'image',
'image' => [
'link' => $aDatos['linkFile']
]
];
$aContenidoHeader = [
'type' => 'header',
'parameters' => [
$aParametersHeader
]
];
$aContenidoFinal = [
$aContenidoHeader
];
// $whabaDestino = 670493258;
$aWhatsAppContent = [
'messaging_product' => 'whatsapp',
'recipient_type' => 'individual',
'to' => $whabaDestino,
'type' => 'template',
'template' => [
'name' => 'plantilla_imagen',
'language' => [
'code' => 'es'
],
'components' => $aContenidoFinal
]
];
return $aWhatsAppContent;
}
private function estandard_video($aDatos, $oEm)
{
$aContenidoFinal = [];
/* $oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $aDatos['centroId'], 'vcId' => $aDatos['vcId']]); */
$whabaDestino = '';
if (isset($aDatos['telefonoDestino']) && !empty($aDatos['telefonoDestino'])) {
$whabaDestino = $aDatos['telefonoDestino'];
} else {
/* $whabaDestino = $oHistorialMensajes->getWhabaDestinoId(); */
}
$aParametersHeader = [
'type' => 'video',
'video' => [
'link' => $aDatos['linkFile']
]
];
$aContenidoHeader = [
'type' => 'header',
'parameters' => [
$aParametersHeader
]
];
$aContenidoFinal = [
$aContenidoHeader
];
// $whabaDestino = 670493258;
$aWhatsAppContent = [
'messaging_product' => 'whatsapp',
'recipient_type' => 'individual',
'to' => $whabaDestino,
'type' => 'template',
'template' => [
'name' => 'plantilla_video',
'language' => [
'code' => 'es'
],
'components' => $aContenidoFinal
]
];
return $aWhatsAppContent;
}
private function estandard_documentos($aDatos, $oEm)
{
$aContenidoFinal = [];
/* $oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $aDatos['centroId'], 'vcId' => $aDatos['vcId']]); */
$whabaDestino = '';
if (isset($aDatos['telefonoDestino']) && !empty($aDatos['telefonoDestino'])) {
$whabaDestino = $aDatos['telefonoDestino'];
} else {
/* $whabaDestino = $oHistorialMensajes->getWhabaDestinoId(); */
}
$aParametersHeader = [
'type' => 'document',
'document' => [
'link' => $aDatos['linkFile'],
'filename' => $aDatos['nameFile']
]
];
$aContenidoHeader = [
'type' => 'header',
'parameters' => [
$aParametersHeader
]
];
$aContenidoFinal = [
$aContenidoHeader
];
// $whabaDestino = 670493258;
$aWhatsAppContent = [
'messaging_product' => 'whatsapp',
'recipient_type' => 'individual',
'to' => $whabaDestino,
'type' => 'template',
'template' => [
'name' => 'plantilla_documento',
'language' => [
'code' => 'es'
],
'components' => $aContenidoFinal
]
];
return $aWhatsAppContent;
}
private function estandard_archivos($aDatos, $oEm)
{
$aContenidoFinal = [];
/* $oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $aDatos['centroId'], 'vcId' => $aDatos['vcId']]); */
$whabaDestino = '';
if (isset($aDatos['telefonoDestino']) && !empty($aDatos['telefonoDestino'])) {
$whabaDestino = $aDatos['telefonoDestino'];
} else {
/* $whabaDestino = $oHistorialMensajes->getWhabaDestinoId(); */
}
$aParametersHeader = [
'type' => 'image',
'image' => [
'link' => $aDatos['linkFile']
]
];
$aContenidoHeader = [
'type' => 'header',
'parameters' => [
$aParametersHeader
]
];
$textoFinal = trim(preg_replace('/\t+/', '', $aDatos['message']));
$textoFinal = trim(preg_replace('/\n+/', ' ', $textoFinal));
$aParametersBody = [
'type' => 'text',
'text' => $textoFinal
];
$aContenido = [
'type' => 'body',
'parameters' => [
$aParametersBody
]
];
$aContenidoFinal = [
$aContenidoHeader,
$aContenido
];
// $whabaDestino = 670493258;
$aWhatsAppContent = [
'messaging_product' => 'whatsapp',
'recipient_type' => 'individual',
'to' => $whabaDestino,
'type' => 'template',
'template' => [
'name' => 'archivos_texto',
'language' => [
'code' => 'es'
],
'components' => $aContenidoFinal
]
];
return $aWhatsAppContent;
}
private function plantilla_invitaamigo($aDatos, $oEm)
{
/* $oHistorialMensajes = $oEm->getRepository('App\Entity\ZAPP\HistorialMensajesWhatsapp')
->findOneBy(['centroId' => $aDatos['centroId'], 'vcId' => $aDatos['vcId']]); */
$whabaDestino = '';
if (isset($aDatos['telefonoDestino']) && !empty($aDatos['telefonoDestino'])) {
$whabaDestino = $aDatos['telefonoDestino'];
} else {
/* $whabaDestino = $oHistorialMensajes->getWhabaDestinoId(); */
}
$textoFinal = $aDatos['message'];
//$textoFinal = str_replace("Hola", "", $aDatos['message']);
$textoFinal = trim(preg_replace('/\t+/', ' ', $textoFinal));
$textoFinal = trim(preg_replace('/\n+/', ' ', $textoFinal));
$aParametersBody = [
'type' => 'text',
'text' => $textoFinal
];
$aContenido[] = [
'type' => 'body',
'parameters' => [
$aParametersBody
]
];
//$whabaDestino = 670493258;
$aWhatsAppContent = [
'messaging_product' => 'whatsapp',
'recipient_type' => 'individual',
'to' => $whabaDestino,
'type' => 'template',
'template' => [
'name' => 'plantilla_invitaamigo',
'language' => [
'code' => 'es'
],
'components' => $aContenido
]
];
return $aWhatsAppContent;
}
private function getTemplatesDefinidos($template, $contenido)
{
$mensaje = '';
switch ($template) {
case 'plantilla_invitaamigo':
$mensaje = 'Esta es vuestra Tarjeta Invita amigos para que podáis invitar a familiares y amigos a conocernos 💚💚💚
Después también el link de google reviews para que me recomendéis.
Es muy importante para mí que estéis a gusto con nosotros y nos ayudéis a crecer 😍' . PHP_EOL . $contenido;
break;
}
return $mensaje;
}
}