<?php
/**   --------------------------------------------------------------------------------------------
		SETEA LAS CANTIDADES NULAS DE LAS LINEAS DE UN PEDIDO CON LAS QUE APARECEN EN EL FRASCAB
	  --------------------------------------------------------------------------------------------
*/ 
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('memory_limit', '512M');
date_default_timezone_set('Europe/Madrid');
$code=null;
function convertToFloat($string) {
    // Elimina los espacios al principio y al final de la cadena
    $trimmedString = trim($string);

    // Verifica si la cadena es un número de punto flotante válido
    if (filter_var($trimmedString, FILTER_VALIDATE_FLOAT) !== false) {
        // Convierte la cadena a float
        return floatval($trimmedString);
    } else {
        // Maneja el caso donde la cadena no es un número de punto flotante válido
        echo json_encode(["result"=>-1 , "text"=>"La cantidad no tiene el formato correcto"]);
        die;
    }
}

if(isset($_REQUEST["code"])) {
	$code=$_REQUEST["code"]; 
	if($code==""){
		echo json_encode(["result"=>-1 , "text"=>"Debe proporcionar un código de pedido"]);
		die;
	}	
}else{
	echo json_encode(["result"=>-1 , "text"=>"Debe proporcionar un código de pedido"]);
	 die;
}
if (strtoupper($code[0]) === 'N') {
	// Elimina la primera letra
	$code = substr($code, 1);
}

$serverName = "localhost";
$connectionInfo = array( "Database"=>"ICF", "UID"=>"VAIO", "PWD"=>"VAIO");

$connNavision=false;
$retries=0;
while(!$connNavision && $retries<3){
	$connNavision = sqlsrv_connect( $serverName, $connectionInfo);
	$retries++;
}
if(!$connNavision ){
	 echo json_encode(["result"=>-2 , "text"=>"No se pudo conectar con Navision"]);
	 die;
}

$sql = 'SELECT Cod_FrasCab, NoAlbaran, CodFacturaReg FROM [dbo].[Ind. Campollano Ferretería S.L$ICF_FrasCab] WHERE [CodFacturaTemp]=\''.$code.'\'';

$smtpFrasCab=sqlsrv_query( $connNavision, $sql );
if(sqlsrv_errors(SQLSRV_ERR_ERRORS)!==NULL){
	echo json_encode(["result"=>-3, "text"=>"Ocurrio un error en la consulta SQL de Navision: ICF_FrasCab"]);
	die;
}
$errors=[];
if($rowFrascab = sqlsrv_fetch_array( $smtpFrasCab, SQLSRV_FETCH_ASSOC)){
	//Si ya hay albarán asignado o factura abortamos
	if(trim($rowFrascab["CodFacturaReg"])!="" && trim($rowFrascab["CodFacturaReg"])!="0"){
		echo json_encode(["result"=>-1, "text"=>"El pedido ya esta facturado en Navision, no se puede reparar"]);
		die;
	}
	if(trim($rowFrascab["NoAlbaran"])!="" && trim($rowFrascab["NoAlbaran"])!="0"){
		echo json_encode(["result"=>-1, "text"=>"El pedido ya esta albaranado en Navision, no se puede reparar"]);
		die;
	}		

	//Cogemos las lineas del FrasCab
	$sql = 'SELECT * FROM [dbo].[Ind. Campollano Ferretería S.L$ICF_FrasLinea] WHERE [Cod_FrasCab]=\''.$rowFrascab["Cod_FrasCab"].'\'';
	$smtpFrasCabLine=sqlsrv_query( $connNavision, $sql );
	if(sqlsrv_errors(SQLSRV_ERR_ERRORS)!==NULL){
		echo json_encode(["result"=>-5, "text"=>"Ocurrio un error en la consulta SQL de Navision: ICF_FrasLineas"]);
		die;
	}
	//Actualizamos las lineas con el valor del FrasLinea
	while($rowLine = sqlsrv_fetch_array( $smtpFrasCabLine, SQLSRV_FETCH_ASSOC)){			
		$sql = 'UPDATE [dbo].[Ind. Campollano Ferretería S.L$Sales Line] SET [Quantity]='.floatval($rowLine["Cantidad"]).', [Outstanding Quantity]='.floatval($rowLine["Cantidad"]).', [Quantity (Base)]='.floatval($rowLine["Cantidad"]).', [Outstanding Qty. (Base)]='.floatval($rowLine["Cantidad"]).' WHERE [Document No.]=\''.$code.'\' AND [Line No.]='.intval($rowLine["NlineaPedido"]);
		$smtpUpdateLine=sqlsrv_query( $connNavision, $sql );
		if(sqlsrv_errors(SQLSRV_ERR_ERRORS)!==NULL){
			$errors[]=["result"=>-6, "text"=>"Ocurrio un error en la consulta SQL de Navision: Sales Line ".$rowLine["NlineaPedido"]];
		}
		//echo utf8_encode($sql)."</br>";
	}

	//Actualizamos las cabecera del FrasCab para borrar errores y resetear el procesado
	$sql = 'UPDATE [dbo].[Ind. Campollano Ferretería S.L$ICF_FrasCab] SET [Error]=\'\', [Texto Error]=\'\', [ProcesarAlbaran]=0, [ProcesarFactura]=0 WHERE [Cod_FrasCab]=\''.$rowFrascab["Cod_FrasCab"].'\'';
	if(sqlsrv_errors(SQLSRV_ERR_ERRORS)!==NULL){
		$errors[]=["result"=>-8, "text"=>"Ocurrio un error en la consulta SQL de Navision: Update FrasCab ".$rowFrascab["Cod_FrasCab"]];
	}
	$smtpUpdateFrasCab=sqlsrv_query( $connNavision, $sql );
	//echo utf8_encode($sql)."</br>";
	//Actualizamos las lineas para borrar los procesados
	$sql = 'UPDATE [dbo].[Ind. Campollano Ferretería S.L$ICF_FrasLinea] SET [CantidadAProcesar]=0, [CantidadAFacturar]=0, [ProcesaAlbaran]=0, [ProcesarFactura]=0 WHERE [Cod_FrasCab]=\''.$rowFrascab["Cod_FrasCab"].'\'';
	if(sqlsrv_errors(SQLSRV_ERR_ERRORS)!==NULL){
		$errors[]=["result"=>-9, "text"=>"Ocurrio un error en la consulta SQL de Navision: Update FrasLinea "];
	}
	$smtpUpdateFrasCab=sqlsrv_query( $connNavision, $sql );
	//echo utf8_encode($sql)."</br>";

}else{
	echo json_encode(["result"=>-4, "text"=>"Ocurrio un error en la consulta SQL de Navision: ICF_FrasCab"]);
	die;
}
if(count($errors)) echo json_encode(["result"=>-10, "text"=>"Ocurrieron errores", "errors"=>$errors]);
	else echo json_encode(["result"=>1]);
die;

?>
