<?php
include_once('../../../php/sessionStart.php');
include_once('../../../php/db/dbExec.php');
include_once('../../../php/functions.php');
include_once('../../../php/timezone.php');
include_once('../../../php/privileges.php');
include_once('../../../php/maxExecTime.php');

$bitForm = "cnt3030";
$bitMod = "cnt";
$empCod = $_SESSION['empCod'];
$usuCod = utf8_decode($_SESSION['usuCod']);
$usuNom = utf8_decode($_SESSION['usuNom']);

switch ($_POST['action']) {
	case 'consultar':
		echo consultar();
		break;

	case 'guardar':
		echo guardar();
		break;
}

function consultar() {
	global $empCod;

	$priv = new privileges();
	if (!$priv->consult($_SESSION['usuPriv'])) {
		return json_encode($priv->rErrorConsult());
	}

	$func = new functions();
}


function guardar() {
	global $empCod, $usuNom, $bitMod, $bitForm;

	$priv = new privileges();
	if (!$priv->modify($_SESSION['usuPriv'])) {
		return json_encode($priv->rErrorModify());
	}

	$func = new functions();

	$dtFinie=$_POST['dtFinie'];
	$dtFciee=$_POST['dtFciee'];
	$FecPoli=$dtFinie;
	$AnoTi=date("Y", strtotime($_POST['dtFinie']));
	$MesTi=date("m", strtotime($_POST['dtFinie']));
	$txtStat="C";
	$AnoT=date("Y", strtotime($_SESSION['empFciee']));
	$MesT=date("m", strtotime($_SESSION['empFciee']));
	$BanCod=0;
	$TipoP="099";
	$TipoPi="001";
	$numPoli=1;

	$dtGrabado=date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa')));
	
	# QUERYS
	$sPolifin = "SELECT *,
            TRIM(pf.polf_cta) AS polf_cta,
            TRIM(pf.polf_ctan) AS polf_ctan,
            TRIM(pf.polf_con) AS polf_con,
            trim(tp.tp_nom) AS tp_nom 
            FROM polifin pf LEFT JOIN tipopol tp ON pf.polf_tipo=tp.tp_cod WHERE polf_emp='$empCod' AND polf_ano='$AnoT'";

	$sPoliini = "SELECT * FROM poliini WHERE poli_emp='$empCod' AND poli_ano='$AnoTi'";

	$sPolizasIni = "SELECT * FROM polizas WHERE pol_emp='$empCod' AND YEAR(pol_fec)=$AnoTi AND pol_tipo='$TipoPi'";

	$sCiemes = "SELECT * FROM ciemes WHERE ciem_emp='$empCod' AND ciem_mes='$MesT' AND ciem_ano='$AnoT'";

	$uCiemes = "UPDATE ciemes SET ciem_stat='$txtStat' WHERE ciem_emp='$empCod' AND ciem_mes='$MesT' AND ciem_ano='$AnoT'";

	$iCiemes = "INSERT INTO ciemes(ciem_emp, ciem_ano, ciem_mes, ciem_stat) VALUES ('$empCod','$AnoT','$MesT','$txtStat')";

	function sPolizas($BanCod,$FecPol,$TipoP,$numPol) { 
		global $empCod;
		return "SELECT * FROM polizas WHERE pol_emp='$empCod' AND pol_fec='$FecPol' AND pol_ban='$BanCod' AND pol_tipo='$TipoP' AND pol_num='$numPol'";
	}	

	$uPoliFin = "UPDATE polifin SET polf_stat='C' WHERE polf_emp='$empCod' AND polf_ano='$AnoT'";

	$uEmpresas = "UPDATE empresas SET emp_finie='$dtFinie',emp_fciee='$dtFciee',emp_ftrab='$dtFinie' WHERE emp_cod='$empCod'";

	function sCuentas($ctac) { 
		global $empCod;
		return "SELECT * FROM cuentas WHERE cta_emp='$empCod' AND cta='$ctac'";
	}

	function sCierres($ctac, $AnoT, $MesT) { 
		global $empCod;
		return "SELECT * FROM cierres WHERE cie_emp='$empCod' AND cie_ano=$AnoT AND cie_mes=$MesT AND cie_cta='$ctac'";
	}

	function uCierres($ctac, $AnoT, $MesT, $mdebe, $mhaber) { 
		global $empCod, $usuNom;
		return "UPDATE cierres SET cie_mdebe=$mdebe, cie_mhaber=$mhaber, cie_ulcam='$usuNom' WHERE cie_emp='$empCod' AND cie_ano=$AnoT AND cie_mes=$MesT AND cie_cta='$ctac'";
	}

	function iCierres($ctac, $AnoT, $MesT, $mdebe, $mhaber) { 
		global $empCod, $usuNom;
		return "INSERT INTO cierres(cie_emp, cie_ano, cie_mes, cie_cta, cie_mdebe, cie_mhaber, cie_ulcam) VALUES('$empCod',$AnoT,$MesT,'$ctac',$mdebe,$mhaber,'$usuNom')";	    
	}

	function iPolizas($BanCod,$FecPol,$TipoP,$numPol,$Concep,$dtGrabado) {
		global $empCod, $usuNom;
		return "INSERT INTO polizas (pol_emp, pol_fec, pol_ban, pol_tipo, pol_num, pol_con,pol_ulcam,pol_tipoi,pol_nit,pol_grabado) VALUES ('$empCod','$FecPol','$BanCod','$TipoP','$numPol','$Concep','$usuNom','','','$dtGrabado')"; 
		}

	function iPoliDet($BanCod,$FecPol,$TipoP,$numPol,$Cta,$Ctan,$valDebe,$valHaber) {
		global $empCod;
		return "INSERT INTO poli_det (pold_emp, pold_fec, pold_ban, pold_tipo, pold_num, pold_cta, pold_ctan, pold_debe, pold_haber, pold_tipoi, pold_nit) VALUES ('$empCod','$FecPol','$BanCod','$TipoP','$numPol','$Cta','$Ctan','$valDebe','$valHaber','','')"; 
		}
	
	function iPoliini($BanCod,$FecPoli,$TipoPi,$numPoli,$AnoTi,$Concep,$Cta,$Ctan,$valDebei,$valHaberi) {
		global $empCod;
		return "INSERT INTO poliini(poli_emp, poli_ano, poli_fec, poli_ban, poli_tipo, poli_num, poli_con,poli_cta,poli_ctan,poli_debe,poli_haber) VALUES ('$empCod','$AnoTi','$FecPoli','$BanCod','$TipoPi','$numPoli','$Concep','$Cta','$Ctan','$valDebei','$valHaberi')"; 
		}

	$dPoliini = "DELETE FROM poliini WHERE poli_emp='$empCod' AND poli_ano='$AnoTi'";

	# EJECUCION DE QUERYS 
	$db = new dbExec();

	$totDebe=0;
	$totHaber=0;
	$salIni=0;
	$camNum=1;
	$salAct=0;
    $yagen=false;
    $yaimp=true;
    $yapolii=false;

	$select["polizasIni"] = $db->query($sPolizasIni);
	if ($db->numRows($select["polizasIni"]) > 0) {
		$yapolii = true;
	}

	if (!$yapolii) {
		$db->dEx($dPoliini);
		$select["polifin"]=$db->query($sPolifin);
		while ($recpf = $db->fetchAssoc($select['polifin'])) {
	   		if ($recpf["polf_stat"] == "C") {
	       		$yagen=true;
	       		break;
	   		}
	   		if ($recpf["polf_stat"]!="I" && $recpf["polf_stat"]!="C") {
	       		$yaimp=false;
	       		break;
	   		}

			$numPol=$recpf["polf_num"];
			$FecPol=$recpf["polf_fec"];
	   		$Concep=$recpf["polf_con"];
	   		$Cta=$recpf["polf_cta"];
	   		$Ctan=$recpf["polf_ctan"];
			$valDebe=$recpf["polf_debe"];
			$valHaber=$recpf["polf_haber"];
			$valDebei=$valHaber;
			$valHaberi=$valDebe;
	   		$ctac=$recpf["polf_cta"];

			// PARA APLICAR LOS CIERRES
			while (!empty($ctac)) {
				$select["cuentas"] = $db->query(sCuentas($ctac));
				$select["cierres"] = $db->query(sCierres($ctac, $AnoT, $MesT));

				$fetchAssoc["cuentas"] = $db->fetchAssoc($select["cuentas"]);
				$ctaActa = trim($fetchAssoc["cuentas"]["cta_acta"]);

				if ($db->numRows($select["cierres"]) > 0) {
					$fetchAssoc["cierres"] = $db->fetchAssoc($select["cierres"]);
					$mdebe=$fetchAssoc["cierres"]["cie_mdebe"]+$valDebe;
					$mhaber=$fetchAssoc["cierres"]["cie_mhaber"]+$valHaber;

					$db->query(uCierres($ctac, $AnoT, $MesT, $mdebe, $mhaber));
				} else {
					$mdebe=$valDebe;
					$mhaber=$valHaber;

					$db->query(iCierres($ctac, $AnoT, $MesT, $mdebe, $mhaber));
				}
				$ctac = $ctaActa;
			}

			$select["polizas"] = $db->query(sPolizas($BanCod,$FecPol,$TipoP,$numPol));
			if ($db->numRows($select["polizas"]) == 0) {
				$db->query(iPolizas($BanCod,$FecPol,$TipoP,$numPol,$Concep,$dtGrabado));
			}

			$db->query(iPolidet($BanCod,$FecPol,$TipoP,$numPol,$Cta,$Ctan,$valDebe,$valHaber));

			if (substr($Cta, 0, 1) < "4") {
				$Concep="POLIZA DE APERTURA CORRESPONDIENTE A ".(string)($AnoTi);
				$db->query(iPoliini($BanCod,$FecPoli,$TipoPi,$numPoli,$AnoTi,$Concep,$Cta,$Ctan,$valDebei,$valHaberi));
			} 
			
		}
	}


    # Para poner avisos, si la variable error es verdadero lo mostrara.
	$resp['msgWarning'] = array(
		'error'=>false,
	);

	if (!$yagen  && $yaimp == true && !$yapolii) {
		$db->uEx($uPoliFin);
		$db->uEx($uEmpresas);
    	// Aqui sirve para verificar si el cierre es nuevo o ya hay algun registro
		$select["ciemes"] = $db->query($sCiemes);
		if ($db->numRows($select["ciemes"]) == 0) {
			$resp = $db->iEx($iCiemes);
		} else {
			$resp = $db->uEx($uCiemes);
		}  
		$db->iEx($func->iBitacora(utf8_decode("Se Cerro el periodo correspondiente a $AnoT Usuario: ").$usuNom, $bitMod, $bitForm));
  		$_SESSION['empFtrab'] = $dtFinie;
  		$_SESSION['empFinie'] = $dtFinie;
  		$_SESSION['empFciee'] = $dtFciee;

		$resp['msgWarning'] = array(
			'error'=>false,
			'msg'=>array(
				'type'=>'success',
				'title'=>'PERIODO CERRADO CORRECTAMENTE',
				'text'=>'Se cerro correctamente el periodo, puede continuar',
				'showConfirmButton'=>'Aceptar'
			),
		); 
	}

	if ($yagen) {
		$resp['msgWarning'] = array(
			'error'=>true,
			'msg'=>array(
				'title'=>'PERIODO PREVIAMENTE CERRADO',
				'text'=>'Lo siento, este periodo ya fue cerrado previamente, no se puede hacer el proceso, sin que antes borre la poliza de cierre que genero y vuelva a generar una nueva'
			),
		);
    }
	if (!$yaimp) {
		$resp['msgWarning'] = array(
			'error'=>true,
			'msg'=>array(
				'title'=>'FALTA IMPRIMIR POLIZA DE CIERRE',
				'text'=>'Antes de realizar este proceso, debe imprimir la poliza de cierre, hagalo y vuelva a intentarlo'
			),
		);
    }
	if ($yapolii) {
		$resp['msgWarning'] = array(
			'error'=>true,
			'msg'=>array(
				'title'=>'YA EXISTE POLIZA DE APERTURA',
				'text'=>'Lo siento, el proceso no se puede realizar, porque ya hay una poliza de apertura generada para el nuevo periodo, borrela y vuelva a intentarlo'
			),
		);
    }


	
	$db->close();

	//$resp["prueba"] = $AnoT;
	//$resp["prueba2"] = $valHaberi;

	return json_encode($resp);
}

?>