<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace CmBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use CmBundle\Controller\ConsultasController;
use CmBundle\Entity\Reinscripciones;
use CmBundle\Entity\Pagos;

date_default_timezone_set('America/Mexico_City');

/**
 * Description of ControlEscolarController
 *
 * @author Omar
 */
class ControlEscolarController extends Controller {

    //put your code here
    public function consultaAlumnosAdeudosAction(Request $request) {
        $session = $request->getSession();
        if ($session->has("idEmpleado") && ($session->get("rol") == 2 || $session->get("rol") == 1 || $session->get("rol") == 3)) {
            $session->set("vista", "alumno");
            if ($request->getMethod() == "POST") {
                $idePla = $request->get('p');
                $ideLic = $request->get('l');
                $mes = $request->get('m');

                switch ($request->get('x')) {
                    case 1:
                        return $this->render('CmBundle:CE:uno.html.twig', array('datos' => $this->uno($idePla, $ideLic)));
                        break;
                    case 2:
                        //return $this->render('CmBundle:Consultas:uno.html.twig', array('datos' => $this->uno($idePla, $ideLic)));
                        break;
                    case 3:
                        return $this->render('CmBundle:CE:tres.html.twig', array('datos' => $this->tres($idePla, $ideLic)));
                        break;
                    case 4:
                        return $this->render('CmBundle:CE:cuatro.html.twig');
                        break;
                    case 5:
                        return $this->render('CmBundle:CE:cinco.html.twig', array('datos' => $this->cinco($idePla, $ideLic)));
                        break;
                    case 6:
                        return $this->render('CmBundle:CE:seis.html.twig', array('idePla' => $idePla, 'mes' => $mes));
                        break;
                    case 7:
                        return $this->render('CmBundle:Consultas:siete.html.twig');
                        break;
                    case 8:
                        return $this->render('CmBundle:CE:ocho.html.twig', array('datos' => $this->ocho($idePla, $ideLic, $mes), 'mes' => $mes));
                        break;
                    case 9:
                        // REINCRIPCIONES
                        return $this->render('CmBundle:CE:nueve.html.twig', array('datos' => $this->nueve($idePla, $ideLic, $mes), 'mes' => $mes));
                        break;
                    case 10:
                        // X QUE NO CIERRA EL MES
                        return $this->render('CmBundle:CE:diez.html.twig', array('datos' => $this->diez($idePla, $mes), 'mes' => $mes));
                        break;
                }
            } else { // NO FUE POST
                $em = $this->getDoctrine()->getManager();
                $planteles = $em->getRepository('CmBundle:Planteles')->findBy(array('cvePla' => $session->get('plantel')));
                $licenciaturas = $em->getRepository('CmBundle:Licenciaturas')->findBy(array(), array('cveNivAca' => 'ASC'));

                return $this->render('CmBundle:CE:vistaConsultas.html.twig', array(
                            'planteles' => $planteles,
                            'licenciaturas' => $licenciaturas
                ));
            }
        } else {
            return $this->render('CmBundle:Seguridad:login.html.twig');
        }
    }

    function uno($idePla, $ideLic) {
        $em = $this->getDoctrine()->getEntityManager();
        $alumnos = 0;
        if ($ideLic != "default") {
            $alumnos = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array(
                        'cvePla' => $idePla,
                        'cveLic' => $ideLic,
                        'estatus' => 1,
                        'tipoAlumno' => array(1, 3, 4, 5)
                    ), array(
                'tipoAlumno' => 'DESC',
                'cveLic' => 'DESC',
                'numero' => 'DESC',
                'apePat' => 'ASC',
                'apeMat' => 'ASC',
                'nomAlu' => 'ASC'
                    )
            );
        } else {
            $alumnos = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array(
                        'cvePla' => $idePla,
                        'estatus' => 1,
                        'tipoAlumno' => array(1, 3, 4, 5)
                    ), array(
                'tipoAlumno' => 'DESC',
                'cveLic' => 'DESC',
                'numero' => 'DESC',
                'apePat' => 'ASC',
                'apeMat' => 'ASC',
                'nomAlu' => 'ASC')
            );
        }

        $hoy = new \DateTime(date('Y-m-d'));
        $hoy = $hoy->modify('first day of this month');

        $listaAlumnosConAdeudos = [];
        $listaAlumnosSinAdeudos = [];
        foreach ($alumnos as $key => $value) {
            if ($value->getPaga() != 0) { // QUITAMOS TODOS LOS QUE NO PAGAN
                $dql = "SELECT p "
                        . "FROM CmBundle:Pagos p "
                        . "WHERE p.fecIni <= :hoy "
                        . "AND p.staPag = 1 "
                        . "AND p.cveAlu = :alu";
                $query = $em->createQuery($dql);
                $query->setParameter('hoy', $hoy);
                $query->setParameter('alu', $value->getIdeAlu());
                $pagos = $query->getResult();

                if (count($pagos) > 0) {
                    $listaAlumnosConAdeudos[] = array($value, $pagos);
                } else {
                    $listaAlumnosSinAdeudos[] = array($value, 1);
                }
            } else {
                $listaAlumnosSinAdeudos[] = array($value, 0);
            }
        }
        return array($listaAlumnosConAdeudos, $listaAlumnosSinAdeudos);
    }

    function dos($idePla, $ideLic) {
        $em = $this->getDoctrine()->getEntityManager();
        $alumnos = 0;
        if ($ideLic != "default") {
            $alumnos = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'cveLic' => $ideLic, 'estatus' => 1, 'tipoAlumno' => array(1, 3, 4, 5)), array('numero' => 'DESC', 'apePat' => 'ASC')
            );
        } else {
            $alumnos = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'estatus' => 1, 'tipoAlumno' => array(1, 3, 4, 5)), array('numero' => 'DESC', 'apePat' => 'ASC')
            );
        }


        $hoy = new \DateTime(date('Y-m-d'));
        $hoy = $hoy->modify('last day of this month');

        $listaAlumnosConAdeudos = [];
        foreach ($alumnos as $key => $value) {

            $dql = "SELECT p "
                    . "FROM CmBundle:Pagos p "
                    . "WHERE p.fecIni <= :hoy "
                    . "AND p.staPag = 1 "
                    . "AND p.cveAlu = :alu";
            $query = $em->createQuery($dql);
            $query->setParameter('hoy', $hoy);
            $query->setParameter('alu', $value->getIdeAlu());
            $pagos = $query->getResult();

            if (count($pagos) > 0) {
                $listaAlumnosConAdeudos[] = array($value, $pagos);
            }
        }
        return $listaAlumnosConAdeudos;
    }

    function tres($idePla, $ideLic) {
        $em = $this->getDoctrine()->getEntityManager();
        $alumnos = 0;
        if ($ideLic != "default") {
            $alumnos = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'cveLic' => $ideLic, 'estatus' => 1, 'credencial' => 1), array('numero' => 'DESC', 'apePat' => 'ASC')
            );
        } else {
            $alumnos = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'estatus' => 1, 'credencial' => 1), array('numero' => 'DESC', 'apePat' => 'ASC')
            );
        }
        return $alumnos;
    }

    function cinco($idePla, $ideLic) {
        $em = $this->getDoctrine()->getEntityManager();
        $alumnos = 0;
        if ($ideLic != "default") {
            $alumnos = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'cveLic' => $ideLic, 'estatus' => 1, 'tipoAlumno' => array(1, 3, 4, 5)), array('tipoAlumno' => 'DESC', 'numero' => 'DESC', 'cveLic' => 'DESC', 'apePat' => 'ASC', 'apeMat' => 'ASC', 'nomAlu' => 'ASC')
            );
            $alumnosOtroEstatus = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'cveLic' => $ideLic, 'estatus' => array(6, 9, 10, 11), 'tipoAlumno' => array(1, 3, 4, 5)), array('tipoAlumno' => 'DESC', 'numero' => 'DESC', 'cveLic' => 'DESC', 'apePat' => 'ASC', 'apeMat' => 'ASC', 'nomAlu' => 'ASC')
            );
            $alumnosEgresados = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'cveLic' => $ideLic, 'estatus' => array(12), 'tipoAlumno' => array(1, 3, 4, 5)), array('tipoAlumno' => 'DESC', 'numero' => 'DESC', 'cveLic' => 'DESC', 'apePat' => 'ASC', 'apeMat' => 'ASC', 'nomAlu' => 'ASC')
            );
        } else {
            $alumnos = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'estatus' => 1, 'tipoAlumno' => array(1, 3, 4, 5)), array('tipoAlumno' => 'DESC', 'numero' => 'DESC', 'cveLic' => 'DESC', 'apePat' => 'ASC', 'apeMat' => 'ASC', 'nomAlu' => 'ASC')
            );
            $alumnosOtroEstatus = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'estatus' => array(6, 9, 10, 11), 'tipoAlumno' => array(1, 3, 4, 5)), array('tipoAlumno' => 'DESC', 'numero' => 'DESC', 'cveLic' => 'DESC', 'apePat' => 'ASC', 'apeMat' => 'ASC', 'nomAlu' => 'ASC')
            );
            $alumnosEgresados = $em->getRepository('CmBundle:Alumnos')
                    ->findBy
                    (
                    array('cvePla' => $idePla, 'estatus' => array(12), 'tipoAlumno' => array(1, 3, 4, 5)), array('tipoAlumno' => 'DESC', 'numero' => 'DESC', 'cveLic' => 'DESC', 'apePat' => 'ASC', 'apeMat' => 'ASC', 'nomAlu' => 'ASC')
            );
        }
        return array($alumnos, $alumnosOtroEstatus, $alumnosEgresados);
    }

    function ocho($idePla, $ideLic, $mes) {
        $em = $this->getDoctrine()->getEntityManager();
        $alumnos = 0;
        $auxMes = substr($mes, 5, 6);
        if ($ideLic != "default") {
            $dql = "SELECT a "
                    . "FROM CmBundle:Alumnos a "
                    . "WHERE a.cvePla = {$idePla} "
                    . "AND a.cveLic = {$ideLic} "
                    . "AND DATE_FORMAT(a.fecNac,'%m') = '{$auxMes}'";
            $query = $em->createQuery($dql);
            $alumnos = $query->getResult();
        } else {

            $dql = "SELECT a "
                    . "FROM CmBundle:Alumnos a "
                    . "WHERE a.cvePla = {$idePla} "
                    . "AND DATE_FORMAT(a.fecNac,'%m') = '{$auxMes}'";
            $query = $em->createQuery($dql);
            $alumnos = $query->getResult();
        }
        return $alumnos;
    }

    function nueve($idePla, $ideLic, $mes) {
        $em = $this->getDoctrine()->getEntityManager();
        $alumnos = 0;
        //$auxMes = substr($mes, 5, 6);
        $auxMes = $mes;
        if ($ideLic != "default") {
            $dql = "SELECT p "
                    . "FROM CmBundle:Pagos p, CmBundle:Alumnos a "
                    . "WHERE "
                    . "p.cveAlu = a.ideAlu "
                    . "AND "
                    . "p.numero = 1 "
                    . "AND "
                    . "DATE_FORMAT(p.fecIni,'%Y-%m') = '{$auxMes}' "
                    . "AND "
                    . "a.cvePla = {$idePla} "
                    . "AND "
                    . "a.tipoAlumno <> 2 "
                    . "AND "
                    . "a.estatus = 1 "
                    . "AND "
                    . "a.cveLic = {$ideLic} "
                    . "AND (p.staPag = 2 OR p.staPag = 69 OR p.staPag = 1) "
                    . "ORDER BY a.tipoAlumno,a.cveLic,a.numero,a.apePat,a.apeMat,a.nomAlu DESC";
            $query = $em->createQuery($dql);
            $alumnos = $query->getResult();
        } else {

            $dql = "SELECT p "
                    . "FROM CmBundle:Pagos p, CmBundle:Alumnos a "
                    . "WHERE "
                    . "p.cveAlu = a.ideAlu "
                    . "AND "
                    . "p.numero = 1 "
                    . "AND "
                    . "DATE_FORMAT(p.fecIni,'%Y-%m') = '{$auxMes}' "
                    . "AND "
                    . "a.cvePla = {$idePla} "
                    . "AND "
                    . "a.tipoAlumno <> 2 "
                    . "AND "
                    . "a.estatus = 1 "
                    . "AND (p.staPag = 2 OR p.staPag = 69 OR p.staPag = 1) "
                    . "ORDER BY a.tipoAlumno,a.cveLic,a.numero,a.apePat,a.apeMat,a.nomAlu DESC";
            $query = $em->createQuery($dql);
            $alumnos = $query->getResult();
        }
        $todosPagos = [];
        foreach ($alumnos as $key => $value) {
            $pagos = $em->getRepository('CmBundle:Pagos')->findBy(array('cveAlu' => $value->getCveAlu()));
            $todosPagos[] = array($value, $pagos);
        }
        $reinscripciones = [];
        foreach ($todosPagos as $key => $value) {
            $auxPago = $value[0];
            $auxPagos = $value[1];
            //print_r($key + 1);
            foreach ($auxPagos as $kk => $vv) {
                if ($auxPago == $vv) {
                    //print_r("MENSUALIDAD: " . $kk);
                    //print_r("REINSCRIPCIÓN: " . ($kk - 1));
                    //print_r("<br>");
                    $reinscripciones[] = array($value[0], $value[1][$kk - 1], $value[1][$kk]);
                }
            }
        }

//        foreach ($reinscripciones as $key => $value) {
//            print_r(($key + 1) . " ");
//            print_r("<br>Elementos:".count($value)."<br>");
//            print_r($value[0]->getCveAlu()->getNomAlu() . " : " . $value[1]->getIdePag() . " : " . $value[2]->getIdePag());
//            print_r("<br>");
//
//            
//        }
//
//        print_r("PAGOS: " . count($todosPagos));
//        print_r("ALUMNOS: " . count($alumnos));
        //return $alumnos;
        return $reinscripciones;
    }

    function diez($idePla, $mes) {
        $em = $this->getDoctrine()->getEntityManager();
        $alumnos = 0;
        $auxMes = substr($mes, 5, 6);

        $fecha = new \DateTime($mes);

        $fecFin = $fecha->modify('last day of this month');

        $fecIni = $mes . "-01";

        $dql = "SELECT p "
                . "FROM CmBundle:Pagos p "
                . "WHERE p.cveAlu IN(SELECT a.ideAlu FROM CmBundle:Alumnos a WHERE a.cvePla = {$idePla} AND a.tipoAlumno IN(1,3,4,5)) "
                . "AND (p.fecIni BETWEEN '{$fecIni}' AND '{$fecFin->format('Y-m-d')}' ) "
                . "AND (p.staPag = 1) AND p.numero > 0";

        $query = $em->createQuery($dql);
        $alumnos = $query->getResult();
        return $alumnos;
    }

    public function reinscripcionAction(Request $request) {
        $session = $request->getSession();
        if ($session->has("idEmpleado") && ($session->get("rol") == 2 || $session->get("rol") == 3 || $session->get("rol") == 4 || $session->get("rol") == 99 || $session->get("rol") == 101)) {
            $session->set("vista", "caja");
            if ($request->getMethod() == "POST") {

                $em = $this->getDoctrine()->getManager();

                $ideAlu = $request->get('ideAlu');
                $numero = $request->get('numeroR');
                $fechaR = $request->get('fechaR');
                $periodoR = $request->get('periodoR');


                $alumno = $em->getRepository('CmBundle:Alumnos')
                        ->findOneBy(array('ideAlu' => $ideAlu));

                /**
                 * VALIDAR QUE EL ALUMNO NO ESTÉ REINSCRITO EN EL PERIODO INDICADO
                 */
                $validarR = $em->getRepository('CmBundle:Reinscripciones')
                        ->findOneBy(array('cveAlu' => $ideAlu, 'periodo' => $periodoR));

                $banderaR = 0;

                if ($validarR == null) {
                    /**
                     * CREAR EL REGISTRO DE LA REINSCRIPCION
                     */
                    $reinscripcion = new Reinscripciones();
                    $reinscripcion->setCveAlu($alumno);
                    $reinscripcion->setCvePla($alumno->getCvePla());
                    $reinscripcion->setCveRei($periodoR);
                    $reinscripcion->setEstatus(1);
                    $reinscripcion->setPeriodo($periodoR);
                    $reinscripcion->setFecMov(new \DateTime(date('Y-m-d')));
                    $reinscripcion->setHorMov(new \DateTime(date('H:i:s')));
                    $reinscripcion->setNumero($numero);

                    $em->persist($reinscripcion);
                    $em->flush();


                    /**
                     * CREAR TODOS LOS PAGOS NECESARIOS
                     */
                    $banderaR = 0;

                    $alumno->setNumero($numero);
                    $alumno->setFecIns(new \DateTime(date($fechaR)));
                    $alumno->setReinscripcion(1);

                    $em->persist($alumno);
                    $em->flush();

                    $auxPago = $em->getRepository('CmBundle:Pagos')->findBy(array('cveAlu' => $alumno->getIdeAlu()), array('idePag' => 'DESC'), 1);

                    $fecIni = $auxPago[0]->getFecIni();
                    $fecIni->modify('Last day of this month');
                    //print_r($fecIni->format('Y-m-d'));
                    /* CREAR PAGO DE REINSCRIPCION DEL ALUMNO */
                    $pago = new Pagos();
                    $pago->setCveAlu($alumno);
                    $pago->setSemestre($alumno->getNumero());
                    $pago->setNumero(0);
                    $pago->setReferencia("");
                    $pago->setFecIni(new \DateTime(date($fechaR)));
                    $pago->setFecTer(new \DateTime(date($fechaR)));
                    $pago->setTipPag("");
                    $pago->setStaPag(1);
                    $pago->setFecMov(new \DateTime(date('Y-m-d')));
                    $pago->setCveUsu($session->get('identificador'));

                    $em->persist($pago);
                    $em->flush();

                    /* CREAR LOS PAGOS DEL ALUMNO */
                    $fin = 0;
                    if ($alumno->getModalidad() == "SEMESTRAL") {
                        $fin = 6;
                    } elseif ($alumno->getModalidad() == "CUATRIMESTRAL") {
                        $fin = 4;
                    }

                    $fecIni = $fecIni->modify('+1 day')->format('Y-m-d');

                    for ($i = 1; $i <= $fin; $i++) {

                        $fecTer = strtotime('+1 month -1 day', strtotime($fecIni));
                        $auxAnio = date('Y', strtotime($fecIni));
                        $fecTer = date('Y-m-d', $fecTer);

                        $auxFecha = date('m', strtotime($fecIni));
                        $meses = array("ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE");
                        $nomMes = $meses[$auxFecha - 1];

                        $pago = new Pagos();
                        $pago->setCveAlu($alumno);
                        $pago->setSemestre($alumno->getNumero());
                        $pago->setNumero($i);
                        $pago->setReferencia("");
                        $pago->setFecIni(new \DateTime($fecIni));
                        $pago->setFecTer(new \DateTime($fecTer));
                        $pago->setNomMes($nomMes);
                        $pago->setTipPag("");
                        $pago->setStaPag(1);
                        $pago->setFecMov(new \DateTime(date('Y-m-d')));
                        $pago->setCveUsu($session->get('identificador'));

                        $em->persist($pago);
                        $em->flush();

                        $fecTer = strtotime('+1 month', strtotime($fecIni));
                        $fecTer = date('Y-m-d', $fecTer);
                        $fecIni = $fecTer;
                    }

                    return $this->render('CmBundle:CE:correctoMensualidad.html.twig', array('banderaR' => $banderaR));
                } else {
                    $banderaR = 1;
                    return $this->render('CmBundle:CE:correctoMensualidad.html.twig', array('banderaR' => $banderaR));
                }
            } else { // NO FUE POST
                $em = $this->getDoctrine()->getManager();

                $ideAlu = $request->get('ideAlu');

                $alumno = $em->getRepository('CmBundle:Alumnos')->findOneBy(array('ideAlu' => $ideAlu));

                //PRIMERO SE REVISA QUE NO TENGA NINGÚN ADEUDO
                $adeudo = 0;

                $hoy = new \DateTime(date('Y-m-d'));
                $hoy = $hoy->modify('first day of this month');

                if ($alumno->getPaga() != 0) { // QUITAMOS TODOS LOS QUE NO PAGAN
                    $dql = "SELECT p "
                            . "FROM CmBundle:Pagos p "
                            . "WHERE p.fecIni <= :hoy "
                            . "AND p.staPag = 1 "
                            . "AND p.cveAlu = :alu";
                    $query = $em->createQuery($dql);
                    $query->setParameter('hoy', $hoy);
                    $query->setParameter('alu', $alumno->getIdeAlu());
                    $pagos = $query->getResult();

                    if (count($pagos) > 0) {
                        $adeudo = 1; // CON ADEUDO
                    } else {
                        $adeudo = 0; // SIN ADEUDO
                    }
                } else {
                    $adeudo = -1; // NO PAGA NADA
                }

                //SEGUNDO: REVISAMOS LA DOCUMENTACIÓN QUE DEBE DE TENER EL ALUMNO
                //ACTA DE NACIMIENTO

                return $this->render('CmBundle:CE:validarInscripcionVista.html.twig', array(
                            'alumno' => $alumno, 'adeudo' => $adeudo
                ));
            }
        } else {
            return $this->render('CmBundle:Seguridad:login.html.twig');
        }
    }

    public function cambiarCuatriAction(Request $request) {
        $session = $request->getSession();
        if ($session->has("idEmpleado")) {
            if ($request->getMethod() == "POST") {

                $ideAlu = $request->get('ideAlu');
                $numCua = $request->get('numCua');

                $em = $this->getDoctrine()->getManager();

                $alumno = $em->getRepository('CmBundle:Alumnos')->findOneBy(array('ideAlu' => $ideAlu));
                if ($alumno != null) {
                    $alumno->setNumero($numCua);
                    $em->persist($alumno);
                    $em->flush();

                    return $this->render('CmBundle:SE:correcto-num-cuatri.html.twig');
                } else {
                    return $this->render('CmBundle:SE:incorrecto-num-cuatri.html.twig');
                }
            } else { // NO FUE POST
            }
        } else {
            return $this->render('CmBundle:Seguridad:login.html.twig');
        }
    }

}
