<?php
function FX_ZIP_EXTRAER($ORI,$DES){
	$zip = new ZipArchive;
	if ($zip->open($ORI) === TRUE) {
		$zip->extractTo($DES);
		$zip->close();
		return true;
	}else{
		return false;
	}
}
//
function FX_GET_FILE_NAME($FULL_NOM){
	// Separador /
	if(strpos($FULL_NOM,"/")===false){
		return $FULL_NOM;
	}else{
		return substr(strrchr($FULL_NOM, '/'), 1);
	}
}
//
function FX_READ_FILE($FILE){
	$DATA = file_get_contents($FILE);
	return $DATA;
}
//
function FX_COM_CDR_OK($CDR_FILE,$r){
	$DAT_XML=strtoupper(FX_READ_FILE($XML_FILE));
	//$r=gr("vis_fes_ventas","ID=".$VEN_KOD);
	$TIP_COM=$r['ID_COM'];//3=FACT. ELEC. 4=BOL. ELEC.
	$SER=$r['ISER'];
	$NUM=$r['INUM'];
	if($TIP_COM==4){
		$SER="B".vbr("0000".$SER,3);
	}else{
		$SER="F".vbr("0000".$SER,3);
	}
	$NUM=vbr("000000000".$NUM,8);
	$FEC=$r['FEC'];
	$EMP_RUC=$r['EMP_RUC'];
	if($TIP_COM==4){
		$CLI_DNI=$r['CLI_DNI'];	
	}else{
		$CLI_DNI=$r['CLI_RUC'];
	}
	//
	$DAT_SER_NUM=$SER."-".$NUM;
	$DAT_FEC=$FEC;
	$DAT_EMP_RUC=$EMP_RUC;
	$DAT_CLI_DNI=$CLI_DNI;
	//
	if(strpos($DAT_XML,$DAT_SER_NUM)===false){
		return "CDR - SERIE Y NUMERO NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_FEC)===false){
		return "CDR - FECHA NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_EMP_RUC)===false){
		return "CDR - RUC EMISOR NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_CLI_DNI)===false){
		return "CDR - NUMERO DE DOCUMENTO DE IDENTIDAD DEL CLIENTE NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_CLI_DNI)===false){
		return "CDR - NUMERO DE DOCUMENTO DE IDENTIDAD DEL CLIENTE NO CORRESPONDE";
	}
	$ACEPTADA=strtoupper("ha sido aceptada");
	if(strpos($DAT_XML,$ACEPTADA)===false){
		return "CDR - NO SE PUEDE DETERMINAR LA VALIDACION DEL COMPROBANTE";
	}
}
//
function FX_COM_XML_OK($XML_FILE,$r){
	$DAT_XML=strtoupper(FX_READ_FILE($XML_FILE));
	//$r=gr("vis_fes_ventas","ID=".$VEN_KOD);
	$TIP_COM=$r['ID_COM'];//3=FACT. ELEC. 4=BOL. ELEC.
	$SER=$r['ISER'];
	$NUM=$r['INUM'];
	if($TIP_COM==4){
		$SER="B".vbr("0000".$SER,3);
	}else{
		$SER="F".vbr("0000".$SER,3);
	}
	$NUM=vbr("000000000".$NUM,8);
	$FEC=$r['FEC'];
	$EMP_RUC=$r['EMP_RUC'];
	if($TIP_COM==4){
		$CLI_DNI=$r['CLI_DNI'];
	}else{
		$CLI_DNI=$r['CLI_RUC'];
	}
	$VEN_IGV=$r['IGV'];
	$VEN_STO=$r['SUB'];
	$VEN_TOT=$r['TOT'];
	$VEN_TOT_R1=round($r['TOT'],1);
	//
	$DAT_SER_NUM=$SER."-".$NUM;
	$DAT_FEC=$FEC;
	$DAT_EMP_RUC=$EMP_RUC;
	$DAT_CLI_DNI=$CLI_DNI;
	$DAT_IGV=$VEN_IGV;
	$DAT_STO=$VEN_STO;
	$DAT_TOT=$VEN_TOT;
	$DAT_TOT_R1=$VEN_TOT_R1;
	//
	if(strpos($DAT_XML,$DAT_SER_NUM)===false){
		return "SERIE Y NUMERO NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_FEC)===false){
		return "FECHA NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_EMP_RUC)===false){
		return "RUC EMISOR NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_CLI_DNI)===false){
		return "NUMERO DE DOCUMENTO DE IDENTIDAD DEL CLIENTE NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_IGV)===false){
		return "MONTO DE IGV NO CORRESPONDE";
	}
	if(strpos($DAT_XML,$DAT_STO)===false){
		return "MONTO DE SUB TOTAL NO CORRESPONDE";
	}
	$VER=0;
	if(strpos($DAT_XML,$DAT_TOT)===false){
		$VER=$VER+1;
	}
	if(strpos($DAT_XML,$DAT_TOT_R1)===false){
		$VER=$VER+1;
	}
	if($VER==0){
		return "MONTO TOTAL NO CORRESPONDE";
	}
	return "OK";
}
//
function FX_FE_BOL_VALIDAR_XML($ID_VEN,$ZIP_XML="",$ZIP_CDR=""){
	//
	$CX=gn("count(*)","ventas","id_venta=$ID_VEN");
	if($CX==0){
		return "Venta no registrada";
	}
	$r=gr("ventas","id_venta=$ID_VEN");
	if($r['anu']!="N"){
		return "La venta se encuentra anulada";
	}
	if($r['ven_fe_ge']=="S"){
		return "La venta ya ha sido generada";
	}
	if($r['id_com']!=4){
		return "Funcion valida solo para boletas electronicas";
	}
	$ALM_KOD=$r['id_alm'];
	$EMP_KOD=gn("alm_id_empresa","almacenes","id_almacen=".$ALM_KOD);
	$EMP_FE_ELE=gs("emp_fe_ele","empresas","id_emp=$EMP_KOD");
	$EMP_RUC=gs("emp_fe_ruc","empresas","id_emp=$EMP_KOD");
	if($EMP_FE_ELE!="SI"){
		return "Empresa ($EMP_RUC) no puede emitir comprobantes electronicos";
	}
	$EMP_FE_PRO=gs("emp_fe_proveedor","empresas","id_emp=$EMP_KOD");
	if($EMP_FE_PRO!="SUNAT"){
		return "Proveedor de facturacion no corresponde";
	}
    //
	$CAN_ITEMS=gn("count(*)","vis_fes_ventas_det","ID_VEN=$ID_VEN");
	if($CAN_ITEMS==0){
		return "Cero items relacionados a la venta";
	}
	//
	$DES_XML="tmp_zip/tmp_xml/";
	$DES_CDR="tmp_zip/tmp_cdr/";
	$XML_NOM=str_replace(".zip",".xml",FX_GET_FILE_NAME($ZIP_XML));
	$CDR_NOM="R-".str_replace(".zip",".xml",FX_GET_FILE_NAME($ZIP_XML));
	//
	if(strlen($ZIP_XML)>0){
		if(file_exists($ZIP_XML)){
			FX_ZIP_EXTRAER($ZIP_XML,$DES_XML);
			FX_READ_FILE($DES_XML.$XML_NOM);
		}
	}
	//
	if(strlen($ZIP_CDR)>0){
		if(file_exists($ZIP_CDR)){
			FX_ZIP_EXTRAER($ZIP_XML,$DES_CDR);
		}
	}
	//**
	$REF=gr("vis_fes_ventas","ID=".$VEN_KOD);
	//**
	$RET=FX_COM_XML_OK($DES_XML.$XML_NOM,$REF);
	if(strcmp($RET,"OK")!=0){
		return $RET;
	}
	$RET=FX_COM_CDR_OK($DES_XML.$CDR_NOM,$REF);
	if(strcmp($RET,"OK")!=0){
		return $RET;
	}
	return "OK";
}
?>