<?php
namespace App\Controller;
use App\Entity\Contratos;
use App\Entity\Estatuscontratos;
use App\Entity\Clientes;
use App\Entity\Tiporiesgo;
use App\Entity\Movimientosrecibos;
use App\Entity\Insumosservicios;
use App\Entity\Afiliados;
use App\Entity\Descuentos;
use App\Entity\Planseleccionado;
use App\Entity\Estatusrecibos;
use App\Entity\Movimientosporfacturar;
use App\Entity\Planeserviciostarifas;
use App\Entity\Planes;
use App\Entity\Cotizaciones;
use App\Entity\Planesservicios;
use App\Entity\Planesserviciostarifas;
use App\Entity\Usuarios;
use App\Entity\Recibos;
use App\Model\Cliente;
use App\Model\Afiliado;
use App\Model\Descuento;
use App\Model\Recibo;
use App\Model\Riesgocubierto;
use App\Model\Certificado;
use App\Model\Contrato;
use App\Entity\Certificados;
use App\Form\ContratosType;
use App\Form\LoadFileTxt;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Dompdf\Dompdf;
use Dompdf\Options;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class ContratosController extends AbstractController
{
/**
* @Route("/", name="contratos_index", methods={"GET"})
*/
public function index(EntityManagerInterface $entityManager,Request $request): Response
{
$tipoid=trim($request->request->get('tipoid'));
$cedula=trim($request->request->get('cedula'));
$ncontrato=trim($request->request->get('ncontrato'));
$arreglo = array();
$where="";
$querybase="select CO.id,CO.fecharegistro,CO.fechaestatus,TC.descripcion tipocontrato,
TF.descripcion tipofacturacion, CL.nombresrazonsocial clientes,
CL.tipoid tipoid,CL.numid numid,EC.descripcion estatuscontratos ,CO.vip
FROM App\Entity\Contratos CO
JOIN App\Entity\Clientes CL WITH CL.id = CO.clientes
JOIN App\Entity\Tipocontrato TC WITH TC.id = CO.tipocontrato
JOIN App\Entity\Tipofacturacion TF WITH TF.id = CO.tipofacturacion
JOIN App\Entity\Estatuscontratos EC WITH EC.id = CO.estatuscontratos";
$arreglo = array();
$where="";
if ($request->getMethod()=="POST")
{
if($tipoid!="-")
{
$arreglo = array_merge($arreglo, array('tipoid' => $tipoid));
if($where=="")
$where=" where CL.tipoid=:tipoid";
else
$where=$where.=" and CL.tipoid=:tipoid";
}
if($cedula!="")
{
$arreglo = array_merge($arreglo, array('numid' => $cedula));
if($where=="")
$where=" where CL.numid=:numid";
else
$where=$where.=" and CL.numid=:numid";
}
if($ncontrato!="")
{
$arreglo = array_merge($arreglo, array('ncontrato' => $ncontrato));
if($where=="")
$where=" where CO.id=:ncontrato";
else
$where=$where.=" and CO.id=:ncontrato";
}
}
$where=$where.=" order by CO.fecharegistro DESC";
$query = $entityManager->createQuery($querybase.=$where)
->setParameters($arreglo);
$contratos=$query->execute();
return $this->render('contratos/index.html.twig', [
'contratos' => $contratos,
'tipoid' => $tipoid,
'cedula' => $cedula,
'ncontrato' => $ncontrato,
]);
}
public function indicadores(Contratos $contrato,EntityManagerInterface $entityManager,Request $request): Response
{
$tipoid=trim($request->request->get('tipoid'));
$cedula=trim($request->request->get('cedula'));
$ncontrato=$contrato->getId();
$querybase="select CO.id,CO.fecharegistro,CO.fechaestatus,TC.descripcion tipocontrato,
TF.descripcion tipofacturacion, CL.nombresrazonsocial clientes,
CL.tipoid tipoid,CL.numid numid,EC.descripcion estatuscontratos ,CO.vip
FROM App\Entity\Contratos CO
JOIN App\Entity\Certificados CER WITH CER.contratos = CO.id
JOIN App\Entity\Clientes CL WITH CO.clientes = CL.id
JOIN App\Entity\Tipocontrato TC WITH TC.id = CO.tipocontrato
JOIN App\Entity\Tipofacturacion TF WITH TF.id = CO.tipofacturacion
JOIN App\Entity\Estatuscontratos EC WITH EC.id = CO.estatuscontratos
where CER.ncertificado=0
and CO.id=".$contrato->getId();
$querybaseresumen="select EST.descripcion as estatus ,count(O.id) as cantidad,ROUND(SUM(O.montoautorizado/O.tasacambio),2) as totaldolar
FROM App\Entity\Ordenes O
JOIN App\Entity\Estatusordenes EST WITH O.estatusordenes = EST.id
where EST.id in (1,2,3)
and O.contratos=".$contrato->getId().
" GROUP BY O.estatusordenes";
$query = $entityManager->createQuery($querybase);
$contratos=$query->execute();
$query2 = $entityManager->createQuery($querybaseresumen);
$resumen=$query2->execute();
$querybasetipoorden="select O.tipo as tipoorden ,count(O.id) as cantidad,ROUND(SUM(O.montoautorizado/O.tasacambio),2) as totaldolar
FROM App\Entity\Ordenes O
where O.estatusordenes in (1,2,3)
and O.contratos=".$contrato->getId().
" GROUP BY O.tipo";
$query3 = $entityManager->createQuery($querybasetipoorden);
$resumentipoordenes=$query3->execute();
$querybasetiposervicios="select TS.descripcion as tiposervicio ,count(O.id) as cantidad,ROUND(SUM(O.montoautorizado/O.tasacambio),2) as totaldolar
FROM App\Entity\Ordenes O
JOIN App\Entity\Tiposervicios TS WITH O.tiposervicios = TS.id
where O.estatusordenes in (1,2,3)
and O.contratos=".$contrato->getId().
" GROUP BY O.tiposervicios";
$query4 = $entityManager->createQuery($querybasetiposervicios);
$resumentiposervicios=$query4->execute();
return $this->render('contratos/indicadores.html.twig', [
'contratos' => $contratos,
'tipoid' => $tipoid,
'cedula' => $cedula,
'ncontrato' => $ncontrato,
'resumenordenes' => $resumen,
'resumentipoordenes' => $resumentipoordenes,
'resumentiposervicios' => $resumentiposervicios,
]);
}
public function serviciosporordenesexcel(Contratos $contrato,Request $request,EntityManagerInterface $entityManager)
{
$session=$request->getSession();
$spreadsheet = new Spreadsheet();
/* @var $sheet \PhpOffice\PhpSpreadsheet\Writer\Xlsx\Worksheet */
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Cod Proveedor');
$sheet->setCellValue('B1', 'Proveedor');
$sheet->setCellValue('C1', 'Afiliado');
$sheet->setCellValue('D1', 'Tipo Id');
$sheet->setCellValue('E1', 'Numid');
$sheet->setCellValue('F1', 'Sexo');
$sheet->setCellValue('G1', 'N° Orden');
$sheet->setCellValue('H1', 'Monto Autorizado Bs');
$sheet->setCellValue('I1', 'Tasa');
$sheet->setCellValue('J1', 'Fecha Orden');
$sheet->setCellValue('K1', 'Monto Autorizado $');
$sheet->setCellValue('L1', 'Tipo Orden');
$sheet->setCellValue('m1', 'Cod servicio');
$sheet->setCellValue('n1', 'Servicio');
$sheet->setCellValue('o1', 'Cod Diagnóstico');
$sheet->setCellValue('p1', 'Diagnóstico');
$sheet->setCellValue('q1', 'Cod Unidad');
$sheet->setCellValue('r1', 'Unidad');
$sheet->setCellValue('s1', 'Cod Motivo');
$sheet->setCellValue('t1', 'Motivo');
$sheet->setCellValue('u1', 'Servicio Bs');
$sheet->setCellValue('v1', 'Servicio $');
$sheet->setCellValue('w1', 'Estatus');
$spreadsheet->getActiveSheet()->getStyle('A1:W1')->getFont()->setBold(true)->setSize(12);
$spreadsheet->setActiveSheetIndex(0)
->getStyle('A1')
->getFill()
->getStartColor()
->setRGB('808080');
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('H')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('I')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('J')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('K')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('L')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('M')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('N')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('O')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('P')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('Q')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('R')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('S')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('T')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('U')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('V')->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension('W')->setAutoSize(true);
$sheet->setTitle("Resumen de Órdenes de Servicio");
$querybase="select PR.id as codproveedor,
PR.nombresrazonsocial as proveedor,
C.nombresrazonsocial as cliente,
C.tipoid,C.numid,C.sexo,O.id as norden,
ROUND(O.montoautorizado,2) as montoautorizadoordenbs,
ROUND(O.tasacambio ,2) as tasacambio,
DATE_FORMAT(O.fechaservicio,'%d-%m-%Y') as fechaorden,
ROUND((O.montoautorizado/O.tasacambio),2) as montoautorizadoordendolares ,
O.tipo as tipoorden,
OS.codservicio,
BC.descripcion as descservicio,
PA.id as coddiagnostico,
PA.descripcion as descdiagnostico,
UN.id as codunidad,
UN.descripcion as descunidad,
MC.id as codmotivoconsulta,
MC.descripcion as descmotivoconsulta,
ROUND((OS.monto),2) as montoserviciobolivares,
ROUND((OS.monto/O.tasacambio),2) as montoserviciodolares,
EO.descripcion as estatusorden
,EO.id, CO.id as ncontrato
FROM App\Entity\Ordenes O
JOIN App\Entity\Contratos CO WITH O.contratos = CO.id
JOIN App\Entity\Ordenservicios OS WITH OS.ordenes = O.id
JOIN App\Entity\Baremocatalogoaps BC WITH OS.codservicio = BC.id
JOIN App\Entity\Clientes C WITH O.clientes = C.id
JOIN App\Entity\Estatusordenes EO WITH EO.id = O.estatusordenes
JOIN App\Entity\Patologias PA WITH PA.id = O.patologias
JOIN App\Entity\Unidades UN WITH UN.id = O.unidades
JOIN App\Entity\Proveedores PR WITH PR.id = O.proveedores
JOIN App\Entity\Motivosconsulta MC WITH MC.id = O.motivoscosulta
where O.contratos=".$contrato->getId();
$query3 = $entityManager->createQuery($querybase);
$afiliados = $query3->getResult();
$index=2;
foreach ($afiliados as $afiliado)
{
$sheet->setCellValue('A'.$index, $afiliado['codproveedor']);
$sheet->setCellValue('B'.$index, $afiliado['proveedor']);
$sheet->setCellValue('C'.$index, $afiliado['cliente']);
$sheet->setCellValue('D'.$index, $afiliado['tipoid']);
$sheet->setCellValue('E'.$index, $afiliado['numid']);
$sheet->setCellValue('F'.$index, $afiliado['sexo']);
$sheet->setCellValue('G'.$index, $afiliado['norden']);
$sheet->setCellValue('H'.$index, $afiliado['montoautorizadoordenbs']);
$sheet->setCellValue('I'.$index, $afiliado['tasacambio']);
$sheet->setCellValue('J'.$index, $afiliado['fechaorden']);
$sheet->setCellValue('K'.$index, $afiliado['montoautorizadoordendolares']);
$sheet->setCellValue('L'.$index, $afiliado['tipoorden']);
$sheet->setCellValue('M'.$index, $afiliado['codservicio']);
$sheet->setCellValue('N'.$index, $afiliado['descservicio']);
$sheet->setCellValue('O'.$index, $afiliado['coddiagnostico']);
$sheet->setCellValue('P'.$index, $afiliado['descdiagnostico']);
$sheet->setCellValue('Q'.$index, $afiliado['codunidad']);
$sheet->setCellValue('R'.$index, $afiliado['descunidad']);
$sheet->setCellValue('S'.$index, $afiliado['codmotivoconsulta']);
$sheet->setCellValue('T'.$index, $afiliado['descmotivoconsulta']);
$sheet->setCellValue('U'.$index, $afiliado['montoserviciobolivares']);
$sheet->setCellValue('V'.$index, $afiliado['montoserviciodolares']);
$sheet->setCellValue('W'.$index, $afiliado['estatusorden']);
$index++;
}
// Crear tu archivo Office 2007 Excel (XLSX Formato)
$writer = new Xlsx($spreadsheet);
// Crear archivo temporal en el sistema
$fileName = 'resumen_ordenes_de_servicios_'.date('d-m-Y H:i:s').'.xlsx';
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
// Guardar el archivo de excel en el directorio temporal del sistema
$writer->save($temp_file);
// Retornar excel como descarga
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}
/**
* @Route("/new", name="contratos_new", methods={"GET", "POST"})
*/
public function new(Request $request, EntityManagerInterface $entityManager): Response
{
$contrato = new Contratos();
$session=$request->getSession();
$form = $this->createForm(ContratosType::class, $contrato);
$form->handleRequest($request);
$estatuscontratos = $entityManager->getRepository(Estatuscontratos::class)->find(1);
$riesgo = $entityManager->getRepository(Tiporiesgo::class)->find(1);
$contrato->setFecharegistro(new \DateTime(date("Y-m-d H:i:s")));
$contrato->setFechaestatus(new \DateTime(date("Y-m-d H:i:s")));
$contrato->setEstatuscontratos($estatuscontratos);
$contrato->setTiporiesgo($riesgo);
$contrato->setVip(0);
$session = $request->getSession();
$usuarioconectado = $session->get('userid');
$usuario = $entityManager->getRepository(Usuarios::class)->find($usuarioconectado);
$contrato->setUsuarios($usuario);
$tipoid=trim($request->request->get('tipoid'));
$cedula=trim($request->request->get('numid'));
$plan=trim($request->request->get('valorseleccionado'));
$planes = $entityManager
->getRepository(Planes::class)
->findBy(array('estatus'=>'1'));
$planesservicios = $entityManager
->getRepository(Planesservicios::class)
->findBy(array('estatus'=>'1'));
if ($form->isSubmitted() && $form->isValid())
{
$cliente = $entityManager->getRepository(Clientes::class)
->findOneBy(array('tipoid'=>$tipoid,'numid'=>$cedula));
if(!$cliente)
{
$session->getFlashBag()->add('warning','No existe el cliente. Debe crear el cliente y luego el contrato !.');
return $this->renderForm('contratos/new.html.twig', [
'contrato' => $contrato,
'form' => $form,
'planesservicios' => $planesservicios,
'planes' => $planes,
]);
}
$contrato->setClientes($cliente);
$entityManager->persist($contrato);
$entityManager->flush();
Certificado::CrearCertificadoCero($contrato, $entityManager);
if($plan)
{
$plan = $entityManager->getRepository(Planes::class)->find($plan);
$planesservicios = $entityManager->getRepository(Planesservicios::class)
->findBY(array('planes'=>$plan->getId()));
foreach ($planesservicios as $planserv)
{
$planseleccionado= new Planseleccionado();
$planseleccionado->setPlanesservicios($planserv);
$planseleccionado->setContratos($contrato);
$planseleccionado->setUsuarios($usuario);
$planseleccionado->setMontoprima(1);
$entityManager->persist($planseleccionado);
$entityManager->flush();
}
}
else
{
$session->getFlashBag()->add('warning','Debe seleccionar un Plan !.');
return $this->renderForm('contratos/new.html.twig', [
'contrato' => $contrato,
'form' => $form,
'planesservicios' => $planesservicios,
'planes' => $planes,
]);
}
return $this->redirectToRoute('contratos_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('contratos/new.html.twig', [
'contrato' => $contrato,
'form' => $form,
'planesservicios' => $planesservicios,
'planes' => $planes,
]);
}
public function cargamasiva(Contratos $contrato, Request $request, EntityManagerInterface $entityManager): Response
{
$entityManager = $this->getDoctrine()->getManager();
$form = $this->createForm(LoadFileTxt::class, null, array('csrf_protection' => true,
'action' => $this->generateUrl('contratos_loadfiletxt', array('id' => $contrato->getId())),
'method' => 'POST'));
$recibos = $entityManager
->getRepository(Recibos::class)->findBy(array('contratos' => $contrato));
$certificados = $entityManager
->getRepository(Certificados::class)->findBy(array('contratos' => $contrato));
$afiliados = $entityManager
->getRepository(Afiliados::class)->findBy(array('contratos' => $contrato));
$query = "select sum(PLS.montoprima) prima,PL.id planid
FROM App\Entity\Planseleccionado PLS
JOIN App\Entity\Planesservicios PS WITH PS.id = PLS.planesservicios
JOIN App\Entity\Planes PL WITH PL.id = PS.planes
where PLS.contratos=?1
group by PL.id";
$query3 = $entityManager->createQuery($query);
$query3->setParameter(1, $contrato);
$plansuma = $query3->getResult();
$planseleccionado = $plansuma[0]['planid'];
if ($planseleccionado!="")
{
$planseleccionado = $planseleccionado;
$plan = $entityManager
->getRepository(Planes::class)
->find($planseleccionado);
$planesservicios = $entityManager
->getRepository(Planesservicios::class)
->findBy(array('planes' => $plan));
}
return $this->render('contratos/cargamasiva.html.twig', [
'contrato' => $contrato,
'afiliados' => $afiliados,
'form' => $form->createView(),
]);
}
public function exclusiones(Contratos $contrato, Request $request, EntityManagerInterface $entityManager): Response
{
$entityManager = $this->getDoctrine()->getManager();
$afiliados = $entityManager
->getRepository(Afiliados::class)->findBy(array('contratos' => $contrato));
$certificados = $entityManager
->getRepository(Certificados::class)->findBy(array('contratos' => $contrato));
return $this->render('contratos/exclusiones.html.twig', [
'contrato' => $contrato,
'afiliados' => $afiliados,
'certificados' => $certificados,
]);
}
/**
* @Route("/{id}", name="contratos_show", methods={"GET"})
*/
public function show(Contratos $contrato): Response
{
$entityManager = $this->getDoctrine()->getManager();
$afiliados = null;
$certificados = null;
$plan = null;
$planesservicios = null;
$plansuma = null;
$insumosservicios = null;
$movimientosporfacturar = null;
$descuentos = null;
$recibos = $entityManager
->getRepository(Recibos::class)->findBy(array('contratos' => $contrato));
if ($contrato->getTipocontrato()->getId()!="3")
{
$certificados = $entityManager
->getRepository(Certificados::class)->findBy(array('contratos' => $contrato));
$afiliados = $entityManager
->getRepository(Afiliados::class)->findBy(array('contratos' => $contrato));
$query = "select sum(PLS.montoprima) prima,PL.id planid,PL.descripcion nombreplan
FROM App\Entity\Planseleccionado PLS
JOIN App\Entity\Planesservicios PS WITH PS.id = PLS.planesservicios
JOIN App\Entity\Planes PL WITH PL.id = PS.planes
where PLS.contratos=?1
group by PL.id";
$query3 = $entityManager->createQuery($query);
$query3->setParameter(1, $contrato);
$plansuma = $query3->getResult();
$plansuma = $plansuma[0];
$planseleccionado = $plansuma['planid'];
$descripcionplan = $plansuma['nombreplan'];
if ($planseleccionado!="")
{
$planseleccionado = $planseleccionado;
$plan = $entityManager
->getRepository(Planes::class)
->find($planseleccionado);
$planesservicios = $entityManager
->getRepository(Planesservicios::class)
->findBy(array('planes' => $plan));
$movimientosporfacturar = $entityManager
->getRepository(Movimientosporfacturar::class)
->findBy(array('contratos' => $contrato));
$descuentos = $entityManager
->getRepository(Descuentos::class)
->findBy(array('contratos' => $contrato));
}
}
else
{
$insumosservicios = $entityManager
->getRepository(Insumosservicios::class)
->findBy(array('contratos' => $contrato));
$query = "select TB.id,TB.descripcion,INS.cantidad as cantidad ,SUM(INS.preciounitario) as precio,(SUM(INS.preciounitario)*INS.cantidad)total
FROM App\Entity\Insumosservicios INS
JOIN App\Entity\Tipobaremos TB WITH TB.id = INS.tipobaremos
where TB.estatus=1
and INS.contratos=?1
group by TB.id,TB.descripcion,INS.cantidad";
$query3 = $entityManager->createQuery($query);
$query3->setParameter(1, $contrato);
$insumosservicios = $query3->getResult();
}
return $this->render('contratos/show.html.twig', [
'contrato' => $contrato,
'recibos' => $recibos,
'afiliados' => $afiliados,
'certificados' => $certificados,
'plan' => $plan,
'planesservicios' => $planesservicios,
'plansuma' => $plansuma,
'insumosservicios' => $insumosservicios,
'movimientosporfacturar' => $movimientosporfacturar,
'descuentos' => $descuentos,
]);
}
public function printpdf(Contratos $contrato, Request $request): Response
{
$pdfOptions = new Options();
$pdfOptions->setIsRemoteEnabled(true);
$pdfOptions->set('defaultFont', 'Arial');
$entityManager = $this->getDoctrine()->getManager();
$afiliados = null;
$certificados = null;
$plan = null;
$planesservicios = null;
$plansuma = null;
$insumosservicios = null;
// Crea una instancia de Dompdf con nuestras opciones
$dompdf = new Dompdf($pdfOptions);
$session = $request->getSession();
$recibos = $entityManager
->getRepository(Recibos::class)->findBy(array('contratos' => $contrato));
if ($contrato->getTipocontrato()->getId()!="3")
{
$certificados = $entityManager
->getRepository(Certificados::class)->findBy(array('contratos' => $contrato));
$afiliados = $entityManager
->getRepository(Afiliados::class)->findBy(array('contratos' => $contrato));
$query = "select sum(PLS.montoprima) prima,PL.id planid
FROM App\Entity\Planseleccionado PLS
JOIN App\Entity\Planesservicios PS WITH PS.id = PLS.planesservicios
JOIN App\Entity\Planes PL WITH PL.id = PS.planes
where PLS.contratos=?1
group by PL.id";
$query3 = $entityManager->createQuery($query);
$query3->setParameter(1, $contrato);
$plansuma = $query3->getResult();
$plansuma = $plansuma[0];
$planseleccionado = $plansuma['planid'];
if ($planseleccionado!="")
{
$planseleccionado = $planseleccionado;
$plan = $entityManager
->getRepository(Planes::class)
->find($planseleccionado);
$planesservicios = $entityManager
->getRepository(Planesservicios::class)
->findBy(array('planes' => $plan));
}
}
else
{
$insumosservicios = $entityManager
->getRepository(Insumosservicios::class)
->findBy(array('contratos' => $contrato));
$query = "select TB.id,TB.descripcion,INS.cantidad as cantidad ,SUM(INS.preciounitario) as precio,(SUM(INS.preciounitario)*INS.cantidad)total
FROM App\Entity\Insumosservicios INS
JOIN App\Entity\Tipobaremos TB WITH TB.id = INS.tipobaremos
where TB.estatus=1
and INS.contratos=?1
group by TB.id,TB.descripcion,INS.cantidad";
$query3 = $entityManager->createQuery($query);
$query3->setParameter(1, $contrato);
$insumosservicios = $query3->getResult();
}
$html = $this->renderView('contratos/printcontrato.html.twig', [
'contrato' => $contrato,
'recibos' => $recibos,
'afiliados' => $afiliados,
'certificados' => $certificados,
'plan' => $plan,
'planesservicios' => $planesservicios,
'plansuma' => $plansuma,
'insumosservicios' => $insumosservicios,
]);
// Cargar HTML en Dompdf
$dompdf->loadHtml($html);
// $dompdf->getOptions()->setChroot($this->projectDir . DIRECTORY_SEPARATOR . 'www');
// (Opcional) Configure el tamaño del papel y la orientación 'vertical' o 'vertical'
$dompdf->setPaper('A4', 'portrait');
// Renderiza el HTML como PDF
$dompdf->render();
// Envíe el PDF generado al navegador (descarga forzada)
$dompdf->stream("contrato_".$contrato->getId().".pdf", [
"Attachment" => false
]);
}
public function loadfile(Contratos $contrato, Request $request): Response
{
$fechaefectiva = new \DateTime(date("Y-m-d"));
$form = $this->createForm(LoadFileTxt::class, null, array('csrf_protection' => true));
$session = $request->getSession();
$form->handleRequest($request);
if ($form->isSubmitted()) {
// var_dump($form);
if ($form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$cot = $entityManager
->getRepository(Cotizaciones::class)->find(53);
$fileData = $form->getData()['upload_file'];
if ($fileData) {
$file = file_get_contents($fileData->getPathname());
$rows = explode("\n", $file);
array_shift($rows);
$certificadocero= $entityManager
->getRepository(Certificados::class)
->findOneby(array('contratos' => $contrato));
foreach($rows as $row => $data)
{
$row_data = explode(';', $data);
if (count($row_data)==16)
{
echo $row_data[0]."-".$row_data[1]." Nombres: ".$row_data[2]." ".$row_data[3]."<br>";
$existecliente = Cliente::existe($row_data[0], $row_data[1], $entityManager);
$ncertificado = $row_data[14];
$indtitular = $row_data[15];
$fechaingreso =$row_data[5];
if(!$existecliente)
{
$nombres = utf8_encode($row_data[2]) ;
$apellidos =utf8_encode($row_data[3]) ;
$fechanacimiento =$row_data[4] ;
$date = \DateTime::createFromFormat('d/m/Y', $fechanacimiento);
$fechanacimiento=$date;
$direccion =utf8_encode($row_data[13]);
$email=utf8_encode($row_data[8]);
$cliente = Cliente::CrearClienteDetalle($row_data[0], $row_data[1], $nombres, $apellidos,$fechanacimiento, $row_data[9], $row_data[10], $row_data[11], $row_data[12], $email, $direccion, $row_data[7], $row_data[6], $entityManager);
}
else
{
$cliente = $existecliente;
}
if ($cliente)
{
if ($indtitular==1)
{
$existe = Certificado::existe($contrato, $cliente->getTipoid(), $cliente->getNumid(), $entityManager);
if (!$existe)
$certificado = Certificado::CrearCertificado($contrato, $cliente->getTipoid(), $cliente->getNumid(),$certificadocero, $entityManager);
else
$certificado = $existe;
$ncertificado = $certificado->getNcertificado();
}
$existeafiliado = Afiliado::existe($contrato, $cliente, $ncertificado, $entityManager);
if (!$existeafiliado)
{
$afiliado = new Afiliados();
$afiliado->setContratos($contrato);
$afiliado->setClientes($cliente);
$afiliado->setPatologia("N/A");
$afiliado->setFecharegistro(new \DateTime(date("Y-m-d H:i:s")));
$afiliado->setNcertificado($ncertificado);
$afiliado->setIndtitular($indtitular==1 ? $indtitular : null);
$afiliado->setEstatus("1");
$afiliado->setCotizaciones($cot);
$afiliado->setSessionid($session->getId());
$date = \DateTime::createFromFormat('d/m/Y', $fechaingreso);
$fechaingreso=$date;
$afiliado->setFechaingreso($fechaingreso);
$entityManager->persist($afiliado);
$entityManager->flush();
}
$planseleccionado = $entityManager
->getRepository(Planseleccionado::class)
->findBy(array('contratos' => $contrato));
if (isset($planseleccionado))
{
foreach ($planseleccionado as $planselecc)
{
$existeriesgo = Riesgocubierto::existe($contrato, $cliente, $ncertificado, $planselecc->getPlanesservicios()->getTiposervicios(), $entityManager);
if (!$existeriesgo)
$riesgo = Riesgocubierto::CrearRiesgo($cliente, $contrato, $certificado, $planselecc, $fechaefectiva, $entityManager);
}
}
}
}
}
$this->generarmovimientosporfacturar($contrato, $session->get("userid"),$request);
} else {
return new Response("filedata is null", 400);
}
} else {
//return new Response("No valid ".$form->getErrors(), 400);
$session->getFlashBag()->add(
'warning',
'El formato del archivo no es válido. Debe cargar un archivo en formato (.CSV) delimitado por (;).');
return $this->redirect($this->generateUrl('contratos_cargamasiva', array('id' => $contrato->getId())));
}
} else {
return new Response("not submitted", 400);
}
// return new Response("OK", 200);
return $this->redirect($this->generateUrl('contratos_show', array('id' => $contrato->getId())));
}
private function generarmovimientosporfacturar(Contratos $contrato, $usuarioconectado,$request)
{
$session = $request->getSession();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->getConnection()->beginTransaction();
try {
$planesserviciosselecionados = $entityManager
->getRepository(Planseleccionado::class)
->findby(array('contratos' => $contrato));
$afiliados = $entityManager
->getRepository(Afiliados::class)
->findby(array('contratos' => $contrato));
$cantidadafiliados = count($afiliados);
$usuario = $entityManager->getRepository(Usuarios::class)->find($usuarioconectado);
if ($contrato->getTipofacturacion()->getId()=="1") $divisorprima = 1;
elseif ($contrato->getTipofacturacion()->getId()=="2") $divisorprima = 2;
else $divisorprima = 12;
$porcentajedescuento = 0;
$descuento = Descuento::BuscarDescuentos($contrato->getTipocontrato(), $cantidadafiliados, $entityManager);
if ($descuento) $porcentajedescuento = $descuento[0]["descuento"];
$montoprimasindescuentos = 0;
$montoprimacondescuento = 0;
foreach ($planesserviciosselecionados as $planesserviciosselecionado)
{
$movimientosporfacturar = new Movimientosporfacturar();
$movimientosporfacturar->setContratos($contrato);
$movimientosporfacturar->setPlanesservicios($planesserviciosselecionado->getPlanesservicios());
$movimientosporfacturar->setFecharegistro(new \DateTime(date("Y-m-d H:i:s")));
$planesserviciostarifa = $entityManager
->getRepository(Planesserviciostarifas::class)
->findOneBy(array('planesservicios' => $planesserviciosselecionado->getPlanesservicios()));
if($planesserviciostarifa)
{
$movimientosporfacturar->setMontoprima($planesserviciostarifa->getMontoprima());
$movimientosporfacturar->setCantidadafiliados($cantidadafiliados);
$movimientosporfacturar->setUsuarios($usuario);
$montoprima = $planesserviciostarifa->getMontoprima()/$divisorprima;
$montoprimatotal = $montoprima*$cantidadafiliados;
$montoprimasindescuentos = $montoprimasindescuentos+$montoprimatotal;
if ($porcentajedescuento!=0)
{
$montoprimatotal = $montoprimatotal-(($montoprimatotal*$porcentajedescuento)/100);
$montoprimacondescuento = $montoprimacondescuento+$montoprimatotal;
}
$movimientosporfacturar->setMontoprimatotal($montoprimatotal);
$entityManager->persist($movimientosporfacturar);
$entityManager->flush();
}
else
{
$entityManager->getConnection()->rollback();
// Añadir mensajes flash
$session->getFlashBag()->add(
'warning',
'No se encontro la tarifa para el servicio: '.$planesserviciosselecionado->getPlanesservicios()->getTiposervicios());
return $this->redirect($this->generateUrl('contratos_show', array('id' => $contrato->getId())));
}
}
if ($descuento)
{
$movdescuento = new Descuentos();
$movdescuento->setContratos($contrato);
$movdescuento->setPorcentajeaplicado($porcentajedescuento);
$movdescuento->setMontooriginal($montoprimasindescuentos);
$movdescuento->setMontofinal($montoprimacondescuento);
$movdescuento->setCantidadafiliados($cantidadafiliados);
$movdescuento->setFecharegistro(new \DateTime(date("Y-m-d H:i:s")));
$entityManager->persist($movdescuento);
$entityManager->flush();
}
$entityManager->getConnection()->commit();
} catch (Exception $e)
{
$entityManager->getConnection()->rollback();
}
return $this->redirect($this->generateUrl('contratos_show', array('id' => $contrato->getId())));
}
public function facturarpoliza(Contratos $contrato, Request $request, EntityManagerInterface $entityManager): Response
{
$session = $request->getSession();
$movimientosporfacturar = $entityManager
->getRepository(Movimientosporfacturar::class)
->findby(array('contratos' => $contrato));
if ($movimientosporfacturar)
{
$session->getFlashBag()->add(
'warning',
'El contrato tiene movimientos pendientes por facturar, debe generar el recibo !');
return $this->redirect($this->generateUrl('contratos_show', array('id' => $contrato->getId())));
}
$this->generarmovimientosporfacturar($contrato, $session->get("userid"),$request);
return $this->redirect($this->generateUrl('contratos_show', array('id' => $contrato->getId())));
}
public function excluircertificado(Request $request, EntityManagerInterface $entityManager): Response
{
$session = $request->getSession();
$clienteid = $request->query->get("clienteid");
$contratoid = $request->query->get("contratoid");
$ncertificado = $request->query->get("ncertificado");
// var_dump($request->query);
// exit();
$contrato = $entityManager->getRepository(Contratos::class)->find($contratoid);
$cliente = $entityManager->getRepository(Clientes::class)->find($clienteid);
$certificado = $entityManager
->getRepository(Certificados::class)
->findOneBy(array('contratos' => $contrato, 'ncertificado' => $ncertificado, 'numid' => $ncertificado));
if ($certificado)
{
$certificado->setEstatus("2");
$certificado->setFechaanulacion(new \DateTime(date("Y-m-d H:i:s")));
$certificado->setFechaestatus(new \DateTime(date("Y-m-d H:i:s")));
$certificado->setCausaanulacion("01");
$entityManager->persist($certificado);
$entityManager->flush();
$afiliados = $entityManager
->getRepository(Afiliados::class)
->findBy(array('contratos' => $contrato, 'ncertificado' => $ncertificado));
if ($afiliados)
{
foreach ($afiliados as $afiliado)
{
$afiliado->setEstatus("2");
$afiliado->setFechaexclusion(new \DateTime(date("Y-m-d H:i:s")));
$entityManager->persist($afiliado);
$entityManager->flush();
}
}
}
$session->getFlashBag()->add(
'success',
'Se realizó la exclusión del Certificado y su grupo Afiliado de forma correcta !'
);
return $this->redirect($this->generateUrl('contratos_exclusiones', array('id' => $contrato->getId())));
}
public function excluirafiliado(Request $request, EntityManagerInterface $entityManager): Response
{
$session = $request->getSession();
$clienteid = $request->query->get("clienteid");
$contratoid = $request->query->get("contratoid");
$ncertificado = $request->query->get("ncertificado");
$nafiliado = $request->query->get("nafiliado");
$contrato = $entityManager->getRepository(Contratos::class)->find($contratoid);
$cliente = $entityManager->getRepository(Clientes::class)->find($clienteid);
$certificado = $entityManager
->getRepository(Certificados::class)
->findOneBy(array('contratos' => $contrato, 'ncertificado' => $ncertificado, 'numid' => $ncertificado));
if ($certificado)
{
$afiliados = $entityManager
->getRepository(Afiliados::class)
->findBy(array('contratos' => $contrato, 'ncertificado' => $ncertificado,'clientes'=>$cliente,'id'=>$nafiliado));
if ($afiliados)
{
foreach ($afiliados as $afiliado)
{
$afiliado->setEstatus("2");
$afiliado->setFechaexclusion(new \DateTime(date("Y-m-d H:i:s")));
$entityManager->persist($afiliado);
$entityManager->flush();
}
}
}
$session->getFlashBag()->add(
'success',
'Se realizó la exclusión del Afiliado de forma correcta !'
);
return $this->redirect($this->generateUrl('contratos_exclusiones', array('id' => $contrato->getId())));
}
public function generarrecibo(Contratos $contrato, Request $request): Response
{
$indrenovarcontrato = 0;
$entityManager = $this->getDoctrine()->getManager();
$session = $request->getSession();
$entityManager->getConnection()->beginTransaction();
try {
$movimientosporfacturar = $entityManager
->getRepository(Movimientosporfacturar::class)
->findby(array('contratos' => $contrato));
$usuarioconectado = $session->get('userid');
$usuario = $entityManager->getRepository(Usuarios::class)->find($usuarioconectado);
$primarecibo = 0;
foreach ($movimientosporfacturar as $movimientoporfacturar)
{
$movimientosrecibos = new Movimientosrecibos();
$movimientosrecibos->setContratos($contrato);
$movimientosrecibos->setPlanesservicios($movimientoporfacturar->getPlanesservicios());
$movimientosrecibos->setFecharegistro(new \DateTime(date("Y-m-d H:i:s")));
$movimientosrecibos->setMontoprima($movimientoporfacturar->getMontoprima());
$movimientosrecibos->setCantidadafiliados($movimientoporfacturar->getCantidadafiliados());
$movimientosrecibos->setUsuarios($usuario);
$movimientosrecibos->setMontoprimatotal($movimientoporfacturar->getMontoprimatotal());
$entityManager->persist($movimientosrecibos);
$entityManager->flush();
$primarecibo = $primarecibo+$movimientoporfacturar->getMontoprimatotal();
}
$moneda = $contrato->getMonedas();
$estatusrrecibos = $entityManager->getRepository(Estatusrecibos::class)->find(1);
$fechadefacturacion = $entityManager
->getRepository(Certificados::class)
->findOneby(array('contratos' => $contrato,
'estatus' => '1'),
array('fechahasta' => 'DESC'));
if ($fechadefacturacion)
{
$fechadesde = $fechadefacturacion->getFechaproximafacturacion();
//Si la fecha hasta es igual a la fecha de la proxima facturacion se debe renovar el contrat0
if($fechadefacturacion->getFechahasta()->format('d-m-Y')==$fechadefacturacion->getFechaproximafacturacion()->format('d-m-Y'))
{
$indrenovarcontrato = 1;
if ($contrato->getTipovigencias()->getId()=="1")
$nuevafechahastacertificados = date('Y-m-d', strtotime($fechadefacturacion->getFechahasta()->format('Y-m-d') .'+ 1 year'));
elseif($contrato->getTipovigencias()->getId()=="2")
$nuevafechahastacertificados = date('Y-m-d', strtotime($fechadefacturacion->getFechahasta()->format('Y-m-d') .'+ 6 months'));
else
$nuevafechahastacertificados = date('Y-m-d', strtotime($fechadefacturacion->getFechahasta()->format('Y-m-d') .'+ 1 months'));
}
}
else
$fechadesde = new \DateTime(date("Y-m-d H:i:s"));
$recibo = Recibo::CrearRecibo($contrato, $moneda, $fechadesde, $primarecibo, $estatusrrecibos, $entityManager);
$movimientosrecibos = $entityManager
->getRepository(Movimientosrecibos::class)
->findby(array('contratos' => $contrato, 'recibos' => null));
foreach ($movimientosrecibos as $movimientorecibo)
{
$movimientorecibo->setRecibos($recibo);
$entityManager->persist($movimientorecibo);
$entityManager->flush();
}
foreach ($movimientosporfacturar as $movimientoporfacturar)
{
$entityManager->remove($movimientoporfacturar);
$entityManager->flush();
}
$certificadosactivos = $entityManager
->getRepository(Certificados::class)
->findBy(array('contratos' => $contrato, 'estatus' => '1'));
foreach ($certificadosactivos as $certificado)
{
if ($indrenovarcontrato==1)
{
$certificado->setFechadesde($fechadesde);
$certificado->setFechahasta(new \DateTime($nuevafechahastacertificados));
}
$certificado->setFechaproximafacturacion($recibo->getFechahasta());
$entityManager->persist($certificado);
$entityManager->flush();
}
$entityManager->getConnection()->commit();
} catch (Exception $e)
{
$entityManager->getConnection()->rollback();
}
return $this->redirect($this->generateUrl('contratos_show', array('id' => $contrato->getId())));
}
/**
* @Route("/{id}/edit", name="contratos_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, Contratos $contrato, EntityManagerInterface $entityManager): Response
{
$form = $this->createForm(ContratosType::class, $contrato);
$form->remove("clientes");
$form->handleRequest($request);
$planes = $entityManager
->getRepository(Planes::class)
->findBy(array('estatus'=>'1'));
$planesservicios = $entityManager
->getRepository(Planesservicios::class)
->findBy(array('estatus'=>'1'));
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->flush();
return $this->redirectToRoute('contratos_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('contratos/edit.html.twig', [
'contrato' => $contrato,
'form' => $form,
'planesservicios' => $planesservicios,
'planes' => $planes,
]);
}
/**
* @Route("/{id}", name="contratos_delete", methods={"POST"})
*/
public function delete(Request $request, Contratos $contrato, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('delete'.$contrato->getId(), $request->request->get('_token'))) {
$entityManager->remove($contrato);
$entityManager->flush();
}
return $this->redirectToRoute('contratos_index', [], Response::HTTP_SEE_OTHER);
}
}