<?php
session_start();
include("cls_conexion.php");
$CNN=new ClsMySQL();
include("conexion23.php");
include("fe_funcionez.php");
//+++
if(strlen($_SESSION['SYS_USER_ID'])==0){JsDir("login.php");	return;}
//+++
$COD=vbval(V($_GET['COD']));
$ACC=V($_GET['ACC']);
//
function ejt_ex($ss){
	//$rs = grs($ss);
	//return mysqli_affected_rows();
	return ejt($ss);
}
//
function VENTAS_ADD($CX,$HWD){
	
}
//
function CLIENTE_GET_ID($TIP,$DNI){
	
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function VENTAS_LOTES_GEN_NUM($ALM_ID,$COM_ID,$STR_SER){
	$STR_SER=vbval($STR_SER);
	$IdVen=gn("count(*)","ventas","id_alm=$ALM_ID AND id_com=$COM_ID AND iser=$STR_SER");
	if($IdVen==0){
		$STR_NUM="000001";
	}else{
		$MAX_N=gn("max(inum)","ventas","id_alm=$ALM_ID AND id_com=$COM_ID AND iser=$STR_SER");
		$MAX_N=$MAX_N + 1;
		$STR_NUM=vbr("000000".$MAX_N,6);		
	}
	return $STR_NUM;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function VENTAS_DET_PARSE_EX($CAB_ID,$CAB_TI){
	$NRO=0;	
	$z="SELECT PRO_ID FROM vis_ventas_det_productos WHERE PRE>0 ORDER BY RAND() LIMIT 0,$CAB_TI";
	$rz=grs($z);
	while($z=$rz->fetch_assoc()){
		$PRO_KOD=$z['PRO_ID'];
		$PRO_PRE=round(gn("MAX(pr)","ventas_det","id_producto=$PRO_KOD"),4);		
		$NRO=$NRO+1;
		$DET_TOT=gn("cb_tot","ventas_lotes_cab_det","cd_id_cab=$CAB_ID AND cb_pro_nro=$NRO");
		if($PRO_PRE >=$DET_TOT){
			$GEN_PRE=$DET_TOT;
			$GEN_CAN=1;
			$GEN_PIE=1;
		}else{
			$PRO_PIE=rand(1,51);//gn("MIN(can_uni)","ventas_det","id_producto=$PRO_KOD");
			if($PRO_PIE<5){
				$R=rand(1,4);
				if($R==1)$PRO_PIE=1;
				if($R==2)$PRO_PIE=2;
				if($R==3)$PRO_PIE=4;
				if($R==4)$PRO_PIE=5;
			}else{
				if($PRO_PIE>=5 && $PRO_PIE<=10){
					$PRO_PIE=5;
				}else{
					if($PRO_PIE>=11 && $PRO_PIE<=50){
						//10-20/40/50
						$R=rand(1,4);
						if($R==1)$PRO_PIE=10;
						if($R==2)$PRO_PIE=20;
						if($R==3)$PRO_PIE=40;
						if($R==4)$PRO_PIE=50;
					}else{
						$PRO_PIE=100;							
					}
				}
			}
			$GEN_PRE=round($DET_TOT / $PRO_PIE,4);
			$GEN_PIE=$PRO_PIE;
			if($GEN_PIE==100){
				$R=rand(1,3);
				if($R==1){
					$GEN_PIE=50;
					$GEN_CAN=2;
				}else{
					if($R==2){
						$GEN_PIE=25;
						$GEN_CAN=4;
					}else{
						$GEN_PIE=20;
						$GEN_CAN=5;
					}
				}					
			}else{
				$GEN_CAN=1;
			}
		}	
		//
		$DET_TOT_PARSE=	round($GEN_PRE * $GEN_CAN * $GEN_PIE,2);
		//
		$s="UPDATE ventas_lotes_cab_det 
			SET cb_pro_id=$PRO_KOD,cb_pro_pre=$GEN_PRE,cb_pro_pie=$GEN_PIE,cb_pro_can=$GEN_CAN,cb_pro_tot=$DET_TOT_PARSE 
			WHERE cd_id_cab=$CAB_ID AND cb_pro_nro=$NRO";
		ejt($s);
	}
	$SUM_DET=gn("SUM(cb_pro_tot)","ventas_lotes_cab_det","cd_id_cab=$CAB_ID");
	$s="UPDATE ventas_lotes_cab SET tot_det=$SUM_DET WHERE id_cab=$CAB_ID";
	ejt($s);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function VENTAS_GENERAR_CAB($VL_COD){
	$VL=gr("ventas_lotes","id_vl=$VL_COD");
	$TOT_=$VL['vl_tot_a_gen'];
	$MIN_=$VL['vl_min'];
	$MAX_=$VL['vl_max'];
	//
	$s="UPDATE ventas_lotes SET vl_run_ini=".time()." WHERE id_vl=".$VL_COD;
	ejt($s);
	//
	ejt("DELETE FROM ventas_lotes_cab WHERE id_vl=$VL_COD");
	ejt("DELETE FROM ventas_lotes_cab_det WHERE cb_id_vl=$VL_COD");
	//
	$RND_TOT=0;
	for($i=1;$i<1000;$i++){
		$RND=rand($MIN_,$MAX_);		
		if( $RND_TOT +  $RND > $TOT_){
			break;
		}
		$CX=GenId("id_cab","ventas_lotes_cab");
		$s="INSERT INTO ventas_lotes_cab VALUES ($CX,$VL_COD,$RND,0,0,'N',0)";
		ejt($s);
		$RND_TOT=$RND_TOT + $RND;
	}
	if($TOT_ > $RND_TOT){
		$RND=round($TOT_ - $RND_TOT,1);
		$CX=GenId("id_cab","ventas_lotes_cab");
		$s="INSERT INTO ventas_lotes_cab VALUES ($CX,$VL_COD,$RND,0,0,'N',0)";
		ejt($s);
	}	
	//
	$s="SELECT * FROM ventas_lotes_cab WHERE id_vl=$VL_COD ORDER BY id_cab";
	$rs=grs($s);
	while($r=$rs->fetch_assoc()){
		$VEN_KOD=$r['id_cab'];
		$VEN_TOT=$r['tot'];
		//
		$NRO=0;
		$DET_TOT=0;
		$DET_ITE_CAN=rand(3,5);
		$DET_ITE_PRM=floor($VEN_TOT/$DET_ITE_CAN);
		for($j=1;$j<=10000;$j++){
			$DET_ITE_RND=rand(ceil($DET_ITE_PRM/2),$DET_ITE_PRM);
			if($DET_TOT+$DET_ITE_RND > $VEN_TOT){
				break;
			}
			$NRO=$NRO+1;
			$CX=GenId("id_cd","ventas_lotes_cab_det");
			$s="INSERT INTO ventas_lotes_cab_det VALUES ($CX,$VEN_KOD,$VL_COD,$DET_ITE_RND,0,0,0,0,0,$NRO)";
			ejt($s);
			$DET_TOT=$DET_TOT + $DET_ITE_RND;					
		}
		if( $VEN_TOT > $DET_TOT){
			$DET_ITE_RND=round($VEN_TOT - $DET_TOT,1);
			$NRO=$NRO+1;
			$CX=GenId("id_cd","ventas_lotes_cab_det");
			$s="INSERT INTO ventas_lotes_cab_det VALUES ($CX,$VEN_KOD,$VL_COD,$DET_ITE_RND,0,0,0,0,0,$NRO)";
			ejt($s);
		}
		$s="UPDATE ventas_lotes_cab SET ti=$NRO WHERE id_cab=".$VEN_KOD;
		ejt($s);
	}
	//
	$s="SELECT * FROM ventas_lotes_cab WHERE id_vl=$VL_COD ORDER BY id_cab";
	$rs=grs($s);
	while($r=$rs->fetch_assoc()){
		$CAB_ID=$r['id_cab'];
		$CAB_TI=$r['ti'];
		VENTAS_DET_PARSE_EX($CAB_ID,$CAB_TI);
		$CAB_TOT_GEN=gn("tot_det","ventas_lotes_cab","id_cab=$CAB_ID");
		$s="UPDATE ventas_lotes SET vl_tot_gen=vl_tot_gen + $CAB_TOT_GEN,vl_tig=vl_tig+1 WHERE id_vl=$VL_COD";	
		ejt($s);
	}
	//
	$s="UPDATE ventas_lotes SET vl_run_fin=".time()." WHERE id_vl=".$VL_COD;
	ejt($s);
}
//$StrEma = shengxiangling@outlook.com
function CLIENTES_PRE_SECCIONADOS_GET_ID($BoF){
	$CLI_ID=0;
	$CLI_EMA="shengxiangling@outlook.com";
	if($BoF=="B"){
		$s="SELECT id_cliente,TRIM(cli_email) as EMA FROM clientes WHERE cli_rnd='SI' AND LENGTH(TRIM(cli_dni))=8 ORDER BY RAND()";
	}else{
		$s="SELECT id_cliente,TRIM(cli_email) as EMA FROM clientes WHERE cli_rnd='SI' AND LENGTH(TRIM(cli_ruc))=11 ORDER BY RAND()";
	}
	$rs=grs($s);
	while($r=$rs->fetch_assoc()){
		$CLI_ID=$r['id_cliente'];
		if(strlen($r['EMA'])==0){
			$s="UPDATE clientes SET cli_email='$CLI_EMA' WHERE id_cliente=$CLI_ID";
			ejt($s);
		}
		break;
	}
	return $CLI_ID;
}
//
function CLIENTES_AL_AZAR_GET_ID($BoF){
	$CLI_ID=0;
	$CLI_EMA="shengxiangling@outlook.com";
	if($BoF=="B"){
		$s="SELECT id_cliente,TRIM(cli_email) as EMA FROM clientes WHERE LENGTH(TRIM(cli_dni))=8 ORDER BY RAND()";
	}else{
		$s="SELECT id_cliente,TRIM(cli_email) as EMA FROM clientes WHERE LENGTH(TRIM(cli_ruc))=11 ORDER BY RAND()";
	}
	$rs=grs($s);
	while($r=$rs->fetch_assoc()){
		$CLI_ID=$r['id_cliente'];
		if(strlen($r['EMA'])==0){
			$s="UPDATE clientes SET cli_email='$CLI_EMA' WHERE id_cliente=$CLI_ID";
			ejt($s);
		}
		break;
	}
	return $CLI_ID;
}
//
function CLIENTES_GET_ID_EX($TDC,$_VEN_COM,$NDI){
	$CLI_EMA="shengxiangling@outlook.com";
	if($TDC=="ESPECIFICO"){
		if($_VEN_COM==4){
			$_VEN_CLI_COD=gn("id_cliente","clientes","cli_dni='$NDI'");				
		}
		if($_VEN_COM==3){
			$_VEN_CLI_COD=gn("id_cliente","clientes","cli_ruc='$NDI'");				
		}
	}else{
		if($TDC=="PRE-SELECCIONADOS"){
			if($_VEN_COM==4){
				$_VEN_CLI_COD=CLIENTES_PRE_SECCIONADOS_GET_ID("B");		
			}
			if($_VEN_COM==3){
				$_VEN_CLI_COD=CLIENTES_PRE_SECCIONADOS_GET_ID("F");				
			}
		}else{
			if($_VEN_COM==4){
				$_VEN_CLI_COD=CLIENTES_AL_AZAR_GET_ID("B");		
			}
			if($_VEN_COM==3){
				$_VEN_CLI_COD=CLIENTES_AL_AZAR_GET_ID("F");				
			}
		}
	}
	return $_VEN_CLI_COD;
}
//
function VENTAS_CAL_IGV($TOT,&$STO,&$IGV){
	$UNO=$TOT /118;
	$IGV=round($UNO * 18 ,2);
	$STO=round($TOT - $IGV,2);
}
//
function VENTAS_LOTES_GEN_VENTAS($ID_VL){
	$r=gr("ventas_lotes","id_vl=$ID_VL");
	$TIE=$r['vl_tie_id'];
	$COM=$r['vl_com'];//3=F/4=B
	$SER=$r['vl_iser'];
	$FEC=$r['vl_fec'];
	$TDC=$r['vl_tip_cli'];
	$NDI=$r['vl_ruc_dni'];
	//
	$SER=vbr("0000".$SER,4);
	$_VEN_TCA=gs("valor","valores","dato='T_CAMBIO'");
	//
	$SYS_FEC=date("Y-m-d");
	$SYS_HOR=GetHoraAP();
	$SYS_TIM=time();
	//
	$s="SELECT * FROM ventas_lotes_cab WHERE id_vl=$ID_VL AND gen_ven_id=0 ORDER BY id_cab";
	$rs=grs($s);
	//echo $s."<br>";
	while($r=$rs->fetch_assoc()){
		$_CAB_COD=$r['id_cab'];
		$_VEN_COD=GenId("id_venta","ventas");
		$_VEN_ALM_COD=$TIE;
		$_VEN_FEC=$FEC;
		if($COM=="FACT. ELEC.")$_VEN_COM=3;
		if($COM=="BOL. ELEC.")$_VEN_COM=4;
		$_VEN_SER=$SER;
		$_VEN_NUM=VENTAS_LOTES_GEN_NUM($_VEN_ALM_COD,$_VEN_COM,$_VEN_SER);
		$_VEN_CLI_COD=CLIENTES_GET_ID_EX($TDC,$_VEN_COM,$NDI);
		$_VEN_TDP="CO";
		$_VEN_TCA=$_VEN_TCA;
		$_VEN_INC_IGV="S";
		$_VEN_STO=0;
		$_VEN_IGV=0;
		$_VEN_TOT=$r['tot'];
		VENTAS_CAL_IGV($_VEN_TOT,$_VEN_STO,$_VEN_IGV);
		$_VEN_ISER=vbval($_VEN_SER);
		$_VEN_INUM=vbval($_VEN_NUM);
		$_VEN_USU=0;
		$_VEN_MON="S";
		$_VEN_ANU="N";
		$_VEN_GI=GenGI();
		$_VEN_TAR=0;
		$_VEN_BAN=0;
		$_VEN_ADE=0;
		$_VEN_ACU=$_VEN_TOT;
		$_VEN_PAG_CON=0;
		$_VEN_PAG_VUE=0;
		$_VEN_REF_COM_ID=0;
		$_VEN_REF_ID=0;
		$_VEN_PRIN=1;
		$_VEN_DESC=0;
		$_VEN_DESC_ALM=0;
		$_VEN_P_DES=0;
		$_VEN_MODALIDAD="EFECTIVO";
		$_VEN_COB=0;
		$_VEN_GIA="";
		$_VEN_REF_SER="";
		$_VEN_REF_NUM="";
		$_VEN_FE_GEN="N";
		$_VEN_FE_ND=0;
		$_VEN_FEC_VEN="";
		$_VEN_UBI_PAI="PERU";
		$_VEN_UBI_DEP="LIMA";
		$_VEN_UBI_PRO="LIMA";
		$_VEN_UBI_DIS="LIMA";
		$_VEN_UBI_COD="150101";
		$_VEN_HASH="";
		$_VEN_AUTO="S";
		$_VEN_AUTO_FEC=$SYS_FEC;
		$_VEN_AUTO_HOR=$SYS_HOR;
		$_VEN_AUTO_TIM=$SYS_TIM;
		//
		$SQL="INSERT INTO ventas 
			  VALUES ($_VEN_COD,$_VEN_ALM_COD,'$_VEN_FEC',
			  $_VEN_COM,'$_VEN_SER','$_VEN_NUM',$_VEN_CLI_COD,
			  '$_VEN_TDP',$_VEN_TCA,'$_VEN_INC_IGV',
			  $_VEN_STO,$_VEN_IGV,$_VEN_TOT,
			  $_VEN_ISER,$_VEN_INUM,$_VEN_USU,'$_VEN_MON','$_VEN_ANU',
			  $_VEN_GI,$_VEN_TAR,$_VEN_BAN,
			  $_VEN_ADE,$_VEN_ACU,$_VEN_PAG_CON,
			  $_VEN_PAG_VUE,$_VEN_REF_COM_ID,
			  $_VEN_REF_ID,$_VEN_PRIN,$_VEN_DESC,
			  $_VEN_DESC_ALM,$_VEN_P_DES,'$_VEN_MODALIDAD',
			  $_VEN_COB,'$_VEN_GIA','$_VEN_REF_SER',
			  '$_VEN_REF_NUM','$_VEN_FE_GEN',
			  $_VEN_FE_ND,'$_VEN_FEC_VEN','$_VEN_UBI_PAI',
			  '$_VEN_UBI_DEP','$_VEN_UBI_PRO','$_VEN_UBI_DIS',
			  '$_VEN_UBI_COD','$_VEN_HASH','$_VEN_AUTO','$_VEN_AUTO_FEC','$_VEN_AUTO_HOR',$_VEN_AUTO_TIM,$ID_VL)";
		//echo $SQL."<br>";
		if(ejt_ex($SQL)>0){
			$s="UPDATE ventas_lotes_cab 
				SET gen='S',gen_ven_id=$_VEN_COD WHERE id_cab=$_CAB_COD";
			ejt($s);
			//
			ejt("DELETE FROM ventas_det WHERE id_venta=$_VEN_COD");
			//
			$z="SELECT * FROM vis_ventas_lotes_cab_det WHERE cd_id_cab=$_CAB_COD ORDER BY cb_pro_nro";
			$rz=grs($z);
			while($z=$rz->fetch_assoc()){
				$_VD_VEN_COD=$_VEN_COD;
				$_VD_VEN_CXX=$z['cb_pro_nro'];
				$_VD_VEN_PRO_KOD=$z['cb_pro_id'];
				$_VD_VEN_CAN=$z['cb_pro_can'];
				//
				$_VD_VEN_PRE=$z['cb_pro_pre'];
				$_VD_VEN_IMP=$z['cb_pro_tot'];
				$_VD_VEN_PRO_PRE_COM=$z['pro_pc_sol'];
				//
				$_VD_VEN_PRO_COD=$z['pro_codigo'];
				$_VD_VEN_PRO_DES=$z['pro_des'];
				$_VD_VEN_PRO_PIE=$z['cb_pro_pie'];
				$_VD_VEN_PRO_CA=$_VD_VEN_CAN;
				$_VD_VEN_PRO_DV=0;
				$_VD_VEN_PRO_DJ=0;
				$d="INSERT INTO ventas_det 
					VALUES ($_VD_VEN_COD,$_VD_VEN_CXX,$_VD_VEN_PRO_KOD,$_VD_VEN_CAN,
					$_VD_VEN_PRE,$_VD_VEN_IMP,$_VD_VEN_PRO_PRE_COM,
					'$_VD_VEN_PRO_COD','$_VD_VEN_PRO_DES',$_VD_VEN_PRO_PIE,
					$_VD_VEN_PRO_CA,$_VD_VEN_PRO_DV,$_VD_VEN_PRO_DJ)";
				ejt($d);			
			}
			//GENERAR
			//GEN_FE($_VD_VEN_COD);
			//GENERAR			
		}
	}	
}
//+++++++++++++++++++++++
//+++++++++++++++++++++++
function VALIDAR_CLIENTES($VL_ID){
	$r=gr("ventas_lotes","id_vl=$VL_ID");
	$_VEN_COM=gn("id_comprobante","comprobantes","com_nombre='".$r['vl_com']."'");
	$TDC=$r['vl_tip_cli'];
	if($TDC=="ESPECIFICO"){
		if($_VEN_COM==4){
			$_VEN_CLI_COD=gn("id_cliente","clientes","cli_dni='$NDI'");				
		}
		if($_VEN_COM==3){
			$_VEN_CLI_COD=gn("id_cliente","clientes","cli_ruc='$NDI'");				
		}
		if($_VEN_CLI_COD==0){
			return "Para el tipo de cliente 'ESPECIFICO' el numero de documento $NDI no esta registrado";
		}else{
			return "OK";
		}
	}else{
		if($TDC=="PRE-SELECCIONADOS"){
			$CX=0;
			if($_VEN_COM==4){
				$CX=gn("count(*)","clientes","cli_rnd='SI' AND LENGTH(TRIM(cli_dni))=8");
			}
			if($_VEN_COM==3){
				$CX=gn("count(*)","clientes","cli_rnd='SI' AND LENGTH(TRIM(cli_ruc))=11");
			}
			if($CX==0){
				return "Para el tipo de cliente 'PRE-SELECCIONADOS' no se encontro registros, verifique el estado random del cliente";
			}else{
				return "OK";
			}
		}else{
			$CX=0;
			if($_VEN_COM==4){
				$CX=gn("count(*)","clientes","LENGTH(TRIM(cli_dni))=8");
			}
			if($_VEN_COM==3){
				$CX=gn("count(*)","clientes","LENGTH(TRIM(cli_ruc))=11");
			}
			if($CX==0){
				return "Para el tipo de cliente '$TDC' no se encontro registros que tengan el numero de documento (dni/ruc) segun el comprobante";
			}else{
				return "OK";
			}

		}
	}
	
}
//+++++++++++++++++++++++
//+++++++++++++++++++++++
if($ACC=="PASO_01"){	
	$MSG=VALIDAR_CLIENTES($COD);
	if($MSG=="OK"){
		echo "Procesando .. Espere un momento<br>";
		VENTAS_GENERAR_CAB($COD);
		echo "Proceso finalizado";
	}else{
		echo $MSG;
	}	
}
//+++++++++++++++++++++++
//+++++++++++++++++++++++
if($ACC=="PASO_02"){
	echo "Procesando .. Espere un momento<br>";
	VENTAS_LOTES_GEN_VENTAS($COD);
	echo "Proceso finalizado";
}
//+++++++++++++++++++++++
//+++++++++++++++++++++++
if($ACC=="PASO_03"){
	echo "Procesando .. Espere un momento<br>";
	$s="SELECT * FROM ventas WHERE ven_id_vl=$COD AND ven_fe_ge='N' ORDER BY id_venta";
	$rs=grs($s);
	while($r=$rs->fetch_assoc()){
		GEN_FE($r['id_venta']);
		echo $r['ser']."-".$r['num']."<br>";
		sleep(1);
	}
	echo "Proceso finalizado";
}
?>