<?
include("ApiGlobalFunctions.php");

/**
 * "Flag: 
0: Mvto de salida
1: Crea Equipo individual
2: Crea equipo SET (bolsita)
3: Agrega elementos al SET pre existente 
4: Mvto de traslado entre bodegas: debe validar que el NSerie enviado, es uno de los NSerie que pertenecen a la cajaID o os_on_ID. En caso afirmativo, simplemente debe actualizar la información de Bodega del Equipo, NO debe cambiar Stock del Producto, Ni debe crear nuevos equipos.

Resultado: 
Result 0: Error de creación de  movimiento: (No se prueba, seria como tal un error del WS)
Result 1: Exitoso
Result 2: La cantidad que va a salir es mayor a la que tiene el asset
--Result 3: El asset no se encuentra, o no esta en el estado “en bodega”, o no esta asociado al slot enviado
--Result 4: El Slot enviado no se encuentra
Result 5: Asset no existe(deleted=1) —>Solo para el caso que énvien Flag en 4
--Result 5: Reserva->Revisa que si el equipo tiene reserva, corresponda a la OS que viene en el servicio y la de la caja. Si no es la misma devuelve error 5. La base tiene que estar en bodega
 */

$usuario = isset($_GET['uid']) ? $_GET['uid'] : $_POST['uid'];
$password = isset($_GET['key']) ? $_GET['key'] : $_POST['key'];
$url = isset($_GET['url']) ? $_GET['url'] : $_POST['url'];
$slotID = isset($_GET['slotID']) ? $_GET['slotID'] : $_POST['slotID'];
$tipo = isset($_GET['tipo']) ? $_GET['tipo'] : $_POST['tipo'];
$producID = isset($_GET['productCode']) ? $_GET['productCode'] : $_POST['productCode'];
$cajaID = isset($_GET['cajaID']) ? $_GET['cajaID'] : $_POST['cajaID'];
$os_on_ID = isset($_GET['os_on_ID']) ? $_GET['os_on_ID'] : $_POST['os_on_ID'];
$qty = isset($_GET['qty']) ? $_GET['qty'] : $_POST['qty'];
$serieBI = isset($_GET['NSerie']) ? $_GET['NSerie'] : $_POST['NSerie'];
$reservados = isset($_GET['reservados']) ? $_GET['reservados'] : $_POST['reservados'];
$operacion = isset($_GET['Flag']) ? $_GET['Flag'] : $_POST['Flag'];
$estadoAsset = diccionario($url,'EstadoAsset');
$opId = isset($_GET['operation_id']) ? $_GET['operation_id'] : $_POST['operation_id'];

error_log("SLOTINOUTMulti Usuario: ".$usuario."Password: ".$password." URL: ".$url." operUUID: ".$opId." slotID.".print_r($slotID,true)." Tipo: ".$tipo." producto: ".print_r($producID,true)." Caja: ".$cajaID.
" OS: ".$os_on_ID." qty: ".print_r($qty,tru)." SerieBI: ".print_r($serieBI,true)." Operacion ".$operacion."-- ESTADO: ".$estadoAsset."-- RESERVA".print_r($reservados,true)."\n", 3, "phpMulti.log");

// ---- Validación ----
$required = [
    'usuario'   => $usuario,
    'password'  => $password,
    'url'       => $url,
    'slotID'    => $slotID,
    'tipo'      => $tipo,
    'producID'  => $producID,
    'cajaID'    => $cajaID,
    'os_on_ID'  => $os_on_ID,
    'qty'       => $qty
];

$missing = [];
foreach ($required as $key => $value) {
    if (empty($value)) {
        $missing[] = $key;
    }
}
$missing=implode(", ", $missing);

// Validación condicional: serieBI solo si tipo = "Entrada"
if ($tipo === "Salida" && empty($serieBI)) {
    $missing[] = 'serieBI';
}

if (!empty($missing)) {
    $docs[0]=array('Result'=>'0', 'id'=>$missing);
    echo json_encode(setDataJSON($docs,1));     
    exit;
}


$include=includec($url);
include ($include);

if(!empty($opId)){
    $dataPayload = array(
    "usuario" => $usuario,
    "password" => $password,
    "url" => $url,
    "slotID" => $slotID,
    "tipo" => $tipo,
    "productCode" => $producID,
    "cajaID" => $cajaID,
    "os_on_ID" => $os_on_ID,
    "qty" => $qty
    );


    $body_sin_opid = json_encode($dataPayload);
    $hash = hash('sha256',$body_sin_opid);

    //EMPIEZA VALIDACION
    $insertQuery =  "INSERT INTO idempotency_keys (operation_id, request_hash, api,  status) VALUES('$opId', '$hash', 'SlotINOUTMulti',  'LOCKED')";
    if (!mysqli_query($link, $insertQuery)) {
        if (mysqli_errno($link) == 1062) {
            $query_opid = mysqli_query($link, "SELECT request_hash, status FROM idempotency_keys WHERE operation_id='$opId'");
            $data_opid=mysqli_fetch_array($query_opid);  
            if($data_opid['request_hash'] === $hash){
                $docs[0]=array('Result'=>'0', 'id'=>'Duplicate Hash');
                $rep=json_encode(setDataJSON($docs,1));
                mysqli_query($link, "UPDATE idempotency_keys SET status='DUPLICATED', response_json='$rep' WHERE operation_id='$opId'");
                echo $rep;
                exit;
            }
            if($data_opid['status'] === 'DONE' || $data_opid['status'] === 'DUPLICATED') {
                $docs[0]=array('Result'=>'0', 'id'=>'Duplicate Key');
                $rep=json_encode(setDataJSON($docs,1));
                mysqli_query($link, "UPDATE idempotency_keys SET status='DUPLICATED', response_json='$rep' WHERE operation_id='$opId'");
                echo $rep;
                exit;
            }    
        }else{
            $docs[0]=array('Result'=>'0', 'id'=>'Error Database');
            echo json_encode(setDataJSON($docs,1));
            exit;
        }
    }else{
        //LOGICA ADICIONAL POR SI SE NECESITA   
    }             
           
}





//$parameters = ['uid','key','url','slotID','tipo','productCode','cajaID','os_on_ID','qty','NSerie','Flag'];
//slotInOut($usuario,$password,$url,$slotID,$tipo,$producID,$cajaID,$os_on_ID,$qty,$serieBI,$operacion,$estadoAsset);
$test=movimientos($usuario,$password,$url,$slotID,$tipo,$producID,$cajaID,$os_on_ID,$qty,$serieBI,$operacion,$estadoAsset, $reservados);
//'http://wshub.globalb.co/SlotINOUT.php?uid=18&key=RsFWUWIJfXhi6XRm&url=https://hoserdev.globalb.co&slotID=1A@@@1B&tipo=Salida&productCode=RE03I04RE0003NA@@@EQ01I01VO0035NA&cajaID=310654&os_on_ID=310652&qty=1@@@1&NSerie=test-wms-123@@@VP6001254&Flag=0'
/**
 * funcion pra hacer todos los llamados a slotInOut
 * @param slotID . cadena de slots concatenados por @@@
 * @param serieBI . cadena de series concatenadas por @@@
 * @param qty . cadena de cantidades concatenadas por @@@
 * @param productcode . cadena de productos concatenadas por @@@
 * @param reservados, cadena de assetsid concatenados por @@@
 */

function movimientos($usuario,$password,$url,$slotID,$tipo,$producID,$cajaID,$os_on_ID,$qty,$serieBI,$operacion,$estadoAsset, $reservados)
{
//    echo "DATA: ".$usuario." -- ".$password." -- ".$url." -- ".$slotID." -- ".$tipo." -- ".$producID." -- ".$cajaID." -- ".$os_on_ID." -- ".$qty." -- ".$serieBI." -- ".$operacion." -- ".$estadoAsset." -- ".$reservados."<br><br>";//ROMERO
    $slots = explode("@@@",$slotID); //obtener todos los slots de los equipos.
    $cantidades = explode("@@@",$qty); //obtener todos los cantidades de los equipos.
    $series = explode("@@@",$serieBI); //obtener todos los series de los equipos. //las series deben ser unicas... 
    $productos = explode("@@@",$producID); //obtener todos los productos de los equipos. 
    $productos = explode("@@@",$producID); //obtener todos los productos de los equipos. 
    $reservados = explode("@@@",$reservados);
    $responses = array();
    /*foreach ($reservados as $value) { //iterar sobre los reservados
        error_log("***INICIA CICLO RESERVAS****".$value."\n", 3, "phpMulti.log");
        if($value==""){  
             $flagreserva=0;
             continue; 
        }else{
            //cambiarReservas($value,$os_on_ID, $url); //cambiar el reservado con alguno ya existente.
            $flagreserva=1;
        }
        error_log("SLOTINOUTMulti FLAG: ".$value."--".$flagreserva."\n", 3, "phpMulti.log");
    }*/
    if(count($slots) == count($cantidades) && count($cantidades) == count($series)){ //todas las cantidades deben ser iguales.
        error_log("***INICIA CICLO****".print_r($productos,true)."--".print_r($reservados,true)."\n", 3, "phpMulti.log");
        $auxProducts=array();
        foreach($productos as $key => $value){
            $auxProducts[$key]["codigo"]=$value;
            $auxProducts[$key]["estado"]=0;
        }
        for ($i=0,$c = count($slots)-1; $i < $c; $i++) {
            $pos = array_search($productos[$i], array_column($auxProducts, 'codigo'));
            error_log("***INICIA FOR****".$productos[$i]."--".$cantidades[$i]."--".$reservados[$i]."\n", 3, "phpMulti.log");
            if($auxProducts[$pos]['estado']==0 && $cantidades[$i]>0){
                $flagreserva=CheckReserva($series[$i],$url);
                error_log("***CheckReserva****".$series[$i]."--".$flagreserva."\n", 3, "phpMulti.log");
                /*if(!empty($reservados[$i])){
                    $flagreserva=1;
                }else{
                    $flagreserva=0;
                }*/
                error_log("SLOTINOUTMulti To MOV: ".$usuario." -- ".$password." -- ".$url." -- ".$slots[$i]." -- ".$tipo." -- ".$productos[$i]." -- ".$cajaID." -- ".$os_on_ID." -- ".$cantidades[$i]." -- ".$series[$i]." -- ".$operacion." -- ".$estadoAsset." -- ".$flagreserva."\n", 3, "phpMulti.log");
                $responses[$i]=slotInOut($usuario,$password,$url,$slots[$i],$tipo,$productos[$i],$cajaID,$os_on_ID,$cantidades[$i],$series[$i],$operacion,$estadoAsset,$flagreserva);
            }
        }
    }
    echo json_encode(["response"=>$responses,'count'=>count($cantidades)-1]);
    error_log("***TERMINA CICLO"."\n"."\n", 3, "phpMulti.log");
}

function CheckReserva($assets, $url){
    $flag=0;
    $cf_reserva = diccionario($url, 'AssetResv');
    $include=includec($url);
    include ($include);
    $query=mysqli_query($link,"SELECT ".$cf_reserva." as 'reserva FROM vtiger_assetscf WHERE assetsid='$assets'");
    $data=mysqli_fetch_array($query);
    $reserva = $data['reserva'];
    if($reserva>0){
        $flag=1;
    }else{
        $flag=0;
    }
    return $flag;
}    






/**
*recibe un string de assetsid, el assetid q se eligio como sustituo reservado
* osid recibe el id de la OS
*/
function cambiarReservas($assets, $osNew, $url)
{
    $cf_reserva = diccionario($url, 'AssetResv');
    $estadoAsset = diccionario($url, 'EstadoAsset');
    $include=includec($url);
    include ($include);
    $query=mysqli_query($link,"SELECT * 
    FROM vtiger_assetscf 
    INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_assetscf.assetsid
    INNER JOIN vtiger_assets ON vtiger_assets.assetsid=vtiger_assetscf.assetsid
    WHERE deleted='0' AND assetstatus='$estadoAsset' AND $cf_reserva = '$osNew' AND $cf_reserva<>'' LIMIT 1");

    $num=mysqli_num_rows($query); //si hay para modificar
    if($num>0){
        $data=mysqli_fetch_array($query);
        $assetsid = $data['assetsid'];
        $query=mysqli_query($link,"UPDATE vtiger_assetscf SET $cf_reserva = '' WHERE assetsid = '$assetsid'");
    }
    $query=mysqli_query($link,"UPDATE vtiger_assetscf SET $cf_reserva = '$osNew' WHERE assetsid = '$assets'");
}


function slotInOut($usuario,$password,$url,$slotID,$tipo,$producID,$cajaID,$os_on_ID,$qty,$serieBI,$operacion,$estadoAsset,$reservado=0)
{

$caso4='1';

$username=username($usuario,$url);

$include=includec($url);
include ($include);
$lote=diccionario($url,'LoteB');
$cantasset=diccionario($url,'QtyAsset');
$fingreso=diccionario($url,'FIngresoB');
$BodAsset=diccionario($url,'BodAsset');
$SlotAsset=diccionario($url,'SlotAsset');
$SeccAsset=diccionario($url,'SeccAsset');
$RackAsset=diccionario($url,'RackAsset');
$MovAsset=diccionario($url,'MovAsset');

//ROMERO
//echo $slotID." -- ".$tipo." -- ".$producID." -- ".$cajaID." -- ".$os_on_ID." -- ".$qty." -- ".$serieBI." -- ".$operacion." -- ".$estadoAsset."<br>";
error_log("Usuario: ".$usuario."Password: ".$password." URL: ".$url." slotID: ".$slotID." Tipo: ".$tipo." producto: ".$producID." Caja: ".$cajaID." OS: ".$os_on_ID." qty: ".$qty." SerieBI: ".$serieBI." Operacion ".$operacion."-- ESTADO: ".$estadoAsset."\n", 3, "phpMulti.log");
$query=mysqli_query($link,"SELECT  * 
FROM vtiger_slots 
INNER JOIN vtiger_slotscf ON vtiger_slots.slotsid=vtiger_slotscf.slotsid 
INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_slots.slotsid
WHERE deleted='0' AND slots_tks_codigo='$slotID'");
$num=mysqli_num_rows($query);
//ROMERO
//echo "SLOTNUM. ".$num."<br>";
if($num<=0){
    $docs[0]=array('Result'=>'4', 'id'=>$slotID);
    $rep=json_encode(setDataJSON($docs,1));
    UpdateUUID($url, $opId, "ERROR", $rep);
    //echo json_encode(setDataJSON($docs,1));
    return setDataJSON($docs,1);
}else{
    $asignado="19x".$usuario;
    $query=mysqli_query($link,"SELECT slotsid,slots_tks_codigo, bodegas_tks_nombre, seccionesid, secciones_tks_seccion, racks_tks_rack
    FROM vtiger_slots 
    INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_slots.slotsid  
    INNER JOIN vtiger_bodegas ON vtiger_bodegas.bodegasid=vtiger_slots.slots_tks_bodega
    INNER JOIN vtiger_racks ON vtiger_racks.racksid=vtiger_slots.slots_tks_rack
    INNER JOIN vtiger_secciones ON vtiger_secciones.seccionesid=vtiger_slots.slots_tks_seccion
    WHERE deleted='0' AND slots_tks_codigo='$slotID'");
    $data=mysqli_fetch_array($query);
    $idslot=$data['slotsid'];
    error_log("DATA SLOT: ".$slotID."--".$idslot."\n", 3, "phpMulti.log");
    $bodega=$data['bodegas_tks_nombre'];
    $rack=$data['racks_tks_rack'];
    $seccion=$data['seccionesid'];
    $nomseccion=$data['secciones_tks_seccion'];
    $slotcodigo=$data['slots_tks_codigo'];
    $slotID=diccionario($url,"Slots").$data['slotsid'];
    $idcaja=$cajaID;
    $cajaID=diccionario($url,"Paquetes").$cajaID;
    $query=mysqli_query($link,"SELECT * FROM vtiger_crmentity WHERE crmid='$os_on_ID'");
    $data=mysqli_fetch_array($query);  
    $type=$data['setype'];
    if($type=="SalesOrder"){
        $OS="6x".$os_on_ID;
        $OC=NULL;
    }    
    if($type=="PurchaseOrder"){
        $OC="5x".$os_on_ID;
        $OS=NULL;
    }
	$AssetOc=diccionario($url,'AssetOc');
    $campo=diccionario($url,'codproduct');
    //ROMERO
    //echo "ENTRA A IF<br>";
    //echo $asignado." -- ".$idslot." -- ".$bodega." -- ".$rack." -- ".$seccion." -- ".$nomseccion." -- ".$slotcodigo." -- ".$slotID." -- ".$type." -- ".$OC." -- ".$OS."<br>";
    $query=mysqli_query($link,"SELECT vtiger_products.productid, productname, ".$campo." as codprod,productcategory
    FROM vtiger_products 
    INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_products.productid 
    INNER JOIN vtiger_productcf ON vtiger_products.productid=vtiger_productcf.productid 
    WHERE deleted='0' AND ".$campo."='$producID'");
    $data=mysqli_fetch_array($query);      
    $idproducto=$data['productid']; 
    $productid="14x".$data['productid'];   
    $productname=$data['productname'];
    $productcategory=$data['productcategory'];
    $codprod=$data['codprod'];

    $includenat=includenative($usuario,$password,$url);    
    chdir($includenat);   
    include_once 'vtwsclib/Vtiger/WSClient.php';
    $userws=diccionario($url,'userws');
    $passws=diccionario($url,'keyws');
    $user = $userws;
    $key  = $passws;
    $url  = $url;    
    $client = new Vtiger_WSClient($url);
    $login = $client->doLogin($user, $key);
    if(!$login) {
        //echo json_encode(setDataJSON('Fallo',1));
        return setDataJSON('Fallo',1);
    }else {    

        if($tipo=="Entrada"){

            $query=mysqli_query($link,"SELECT slots_tks_producto,slots_tks_cantidad
            FROM vtiger_slots 
            INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_slots.slotsid  
            WHERE deleted='0' AND slotsid='$idslot'");   
            $data=mysqli_fetch_array($query);
            $producto=$data['slots_tks_producto'];
            $cantidad=$data['slots_tks_cantidad'];
			if (strpos($url, 'hoser') !== false) {
                $DestinadoA=diccionario($url,'DestinadoA');
                $AtendidoPor=diccionario($url,'AtendidoPor');
                $query = mysqli_query($link, "SELECT * FROM vtiger_purchaseordercf p WHERE p.purchaseorderid = '$os_on_ID' ");
                $data=mysqli_fetch_array($query);
                $DestinadoA = $data[$DestinadoA];
                $AtendidoPor = $data[$AtendidoPor];
            }
            $ingreso=date('Y-m-d');
            if ($operacion==1){
                if(empty($serieBI)){
                   $serieBI="X";                             }
                        if (strpos($url, 'hoser') !== false) {
                    //$record=$client->doCreate('Assets',array('assetname'=>$productname,'serialnumber'=>$serieBI,'assetstatus'=>$estadoAsset,'product'=>$productid,'assigned_user_id'=>$asignado,$lote=>'Individual',$cantasset=>'0',$fingreso=>$ingreso,$BodAsset=>$bodega,$SlotAsset=>$slotcodigo,$SeccAsset=>$nomseccion,$RackAsset=>$rack,'account'=>'11x354'));                                                $record=$client->doCreate('Assets',array('assetname'=>$productname,'serialnumber'=>$serieBI,'assetstatus'=>$estadoAsset,'product'=>$productid,'assigned_user_id'=>$asignado,$lote=>'Individual',$cantasset=>'0',$fingreso=>$ingreso,$BodAsset=>$bodega,$SlotAsset=>$slotcodigo,$SeccAsset=>$nomseccion,$RackAsset=>$rack,'account'=>'11x354','cf_1935'=>'1',$AssetOc=>$OC,'cf_1943'=>$producID));                                            }
                if ( (strpos($url, 'siromax') !== false) || (strpos($url, 'solucorp') !== false)) {                                 $record=$client->doCreate('Assets',array('assetname'=>$productname,'serialnumber'=>$serieBI,'assetstatus'=>$estadoAsset,'product'=>$productid,'assigned_user_id'=>$asignado,$lote=>'Individual',$cantasset=>'0',$fingreso=>$ingreso,$BodAsset=>$bodega,$SlotAsset=>$slotcodigo,$SeccAsset=>$nomseccion,$RackAsset=>$rack,'account'=>'11x292','contact'=>'12x113248','cf_864'=>$productcategory,'cf_870'=>'3 Meses','cf_2070'=>'1',$AssetOc=>$OC,'cf_2074'=>$producID));
                }                                        if ($record){                                 $assetid = $client->getRecordId($record['id']);
                    if($serieBI=="X"){
                        $serieBI='E'.$assetid;
                        mysqli_query($link,"UPDATE vtiger_assets SET serialnumber='$serieBI' WHERE assetsid='$assetid'");                               }
                }else{
                    $recordid=$client->lastError();
                    $recordid=$recordid['code'].$recordid['message'];                           echo $recordid;                          }
                                     } 
            error_log("SERIE: ".$serieBI." -- RECORD: ".$assetid."-- ERROR: ".$recordid."\n", 3, "phpMulti.log");
            if ($operacion==2){
                         if(empty($serieBI)){
                     $serieBI="X";
                }
                $productname="SET ".$productname;

                if (strpos($url, 'hoser') !== false) {
                    $record=$client->doCreate('Assets',array('assetname'=>$productname,'serialnumber'=>$serieBI,'assetstatus'=>$estadoAsset,'product'=>$productid,'assigned_user_id'=>$asignado,$lote=>'Set',$fingreso=>$ingreso,$BodAsset=>$bodega,$SlotAsset=>$slotcodigo,$SeccAsset=>$nomseccion, $RackAsset=>$rack,'account'=>'11x354','cf_1935'=>'1',$AssetOc=>$OC,'cf_1943'=>$producID,'cf_2274'=>'SOC.DE INGENIERIA HOGG Y SERRANO LTDA'));
                }
                if ( (strpos($url, 'siromax') !== false) || (strpos($url, 'solucorp') !== false)) {
                    $record=$client->doCreate('Assets',array('assetname'=>$productname,'serialnumber'=>$serieBI,'assetstatus'=>$estadoAsset,'product'=>$productid,'assigned_user_id'=>$asignado,$lote=>'Set',$fingreso=>$ingreso,$BodAsset=>$bodega,$SlotAsset=>$slotcodigo,$SeccAsset=>$nomseccion, $RackAsset=>$rack,"account"=>"11x292","contact"=>"12x113248","cf_864"=>$productcategory,"cf_870"=>"3 Meses",'cf_2070'=>'1',$AssetOc=>$OC,'cf_2074'=>$producID));
                }     
                         //$record=$client->doCreate('Assets',$resultadoArray);                 if ($record) {
                    $assetid = $client->getRecordId($record['id']);                                   if($serieBI=="X"){
                        $serieBI='E'.$assetid;
                        mysqli_query($link,"UPDATE vtiger_assets SET serialnumber='$serieBI' WHERE assetsid='$assetid'");                               }  
                }else{
                    $recordid=$client->lastError();
                    $recordid=$recordid['code'].$recordid['message'];                           echo $recordid;
                }
            }
                 if($operacion==3){
                //echo "PRUEBA".$serieBI;
                $sqla=mysqli_query($link,"SELECT vtiger_assets.assetsid
                    FROM vtiger_assets                              INNER JOIN vtiger_assetscf ON vtiger_assetscf.assetsid=vtiger_assets.assetsid
                INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_assets.assetsid
                WHERE serialnumber='$serieBI' AND deleted='0'");
                $data=mysqli_fetch_array($sqla); 
                //print_r($data);
                //$qtya=$data['cf_1892'];
                $assetid=$data['assetsid'];                 //$qtyn=$qtya+$qty;                   //$qtyn=$qtya;
                //echo $assetid."--".$qtya."--".$qtyn."--".$ingreso."--".$bodega."--".$slotcodigo;                               mysqli_query($link,"UPDATE vtiger_assetscf SET /*cf_1892='$qtyn',*/ ".$fingreso."='$ingreso', ".$lote."='Set', ".$BodAsset."='$bodega', ".$SlotAsset."='$slotcodigo',".$SeccAsset."='$nomseccion',".$RackAsset."='$rack' WHERE assetsid='$assetid'");
                mysqli_query($link,"UPDATE vtiger_assets SET assetstatus='".$estadoAsset."' WHERE assetsid='$assetid'");
                     }

            //error_log("Operacion: ".$operacion."\n", 3, "php.log");
            if($operacion==4){
                //$caso4=0;
            //error_log("Operacion: ".$operacion."\n", 3, "php.log");
                $query1=mysqli_query($link,"SELECT *
                        FROM vtiger_paquetes
                        INNER JOIN vtiger_paquetescf ON vtiger_paquetes.paquetesid=vtiger_paquetescf.paquetesid
                        INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_paquetes.paquetesid
                        WHERE deleted='0' AND vtiger_paquetes.paquetesid='$idcaja'");
                $data1=mysqli_fetch_array($query1);
                $OScaja1=$data1['paquetes_tks_ordendesalida'];

                $query4=mysqli_query($link,"SELECT assetsid
                        FROM vtiger_paquetes
                        INNER JOIN vtiger_paquetescf ON vtiger_paquetes.paquetesid=vtiger_paquetescf.paquetesid
                        INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_paquetes.paquetesid
                        INNER JOIN vtiger_movimientos ON vtiger_movimientos.movimientos_tks_caja=vtiger_paquetes.paquetesid
                        INNER JOIN vtiger_assets ON vtiger_assets.assetsid=vtiger_movimientos.".$MovAsset."
                        WHERE deleted='0' AND vtiger_paquetes.paquetes_tks_ordendesalida='$OScaja1' AND serialnumber='$serieBI'");
                $num4=mysqli_num_rows($query4);
                if($num4>=1){
                    $data4=mysqli_fetch_array($query4);                                  $assetid=$data4['assetsid'];  
                    $caso4='4';                    
                    mysqli_query($link,"UPDATE vtiger_assetscf SET ".$fingreso."='$ingreso', ".$BodAsset."='$bodega', ".$SlotAsset."='$slotcodigo',".$SeccAsset."='$nomseccion',".$RackAsset."='$rack' WHERE assetsid='$assetid'");
                    mysqli_query($link,"UPDATE vtiger_assets SET assetstatus='".$estadoAsset."' WHERE assetsid='$assetid'");
                }else{
                    $caso4='0';
                    
                }
                error_log("Operacion: ".$operacion." OSCAJA: ".$OScaja1." Validacion: ".$num4." Asset: ".$assetsid." CASO: ".$caso4."\n", 3, "phpMulti.log");
            }

            if($caso4>='1'){

                $sqla=mysqli_query($link,"SELECT vtiger_assets.assetsid
                    FROM vtiger_assets                     
                INNER JOIN vtiger_assetscf ON vtiger_assetscf.assetsid=vtiger_assets.assetsid
                INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_assets.assetsid
                WHERE serialnumber='$serieBI' AND deleted='0'");
                $data=mysqli_fetch_array($sqla); 
                $assetid=$data['assetsid'];        
                $equipoid=$assetid;
                $assetid="28x".$assetid;

                error_log("Operacion: ".$operacion." -- ASSET: ".$assetid."\n", 3, "phpMulti.log");
                $record=$client->doCreate('Movimientos',array('movimientos_tks_tipo'=>$tipo,'movimientos_tks_cantidad'=>$qty,'movimientos_tks_slot'=>$slotID,'movimientos_tks_producto'=>$producID,'movimientos_tks_ordendecompra'=>$OC,'movimientos_tks_ordendesalida'=>$OS,'movimientos_tks_caja'=>$cajaID,'assigned_user_id'=>$asignado,$MovAsset=>$assetid));	            
                if ($record) {
                    $recordid = $client->getRecordId($record['id']);        
                    $docs[0]=array('Result'=>'1', 'id'=>$recordid);
					 $rep=json_encode(setDataJSON($docs,1));
                    UpdateUUID($url, $opId, "DONE", $rep);
                    //error_log("url: ".$url." Caja: ".$idcaja." Product: ".$productid." Cantidad: ".$qty."\n", 3, "php.log");
                    
                    $query=mysqli_query($link,"SELECT ".$cantasset." As cantasset
                    FROM vtiger_assets                     
                    INNER JOIN vtiger_assetscf ON vtiger_assetscf.assetsid=vtiger_assets.assetsid
                    WHERE vtiger_assets.assetsid='$equipoid'");                    
                    $data= mysqli_fetch_array($query);   
                    $qtyslot=$data['cantasset'];           
                    $qtyasset=$qtyslot+$qty;
                    mysqli_query($link,"UPDATE vtiger_assetscf SET ".$cantasset."='$qtyasset' WHERE assetsid='$equipoid'");
					
					if($operacion==1 || $operacion==2){
                        //enviaremailasset($usuario,$url,$equipoid);
                    }

                    mysqli_query($link,"INSERT INTO vtiger_crmentityrel VALUES('$idslot','Slots','$equipoid','Assets')");
                    mysqli_query($link,"INSERT INTO vtiger_crmentityrel VALUES('$recordid','Movimientos','$equipoid','Assets')");
                    //CheckProductRel($idproducto,$slotID,$url);
                    cajarecibeproductos($url,$usuario,$idcaja,$idproducto,$qty,$equipoid);
                    contabilizastock($recordid,$reservado,$url);
                    entradadevolucion($recordid,$url,$equipoid);
                    if (strpos($url, 'hoser') !== false) { //estos updates son solo para hoser.
                        mysqli_query($link,"UPDATE vtiger_assetscf SET cf_1931='".$DestinadoA."', cf_1367 = '".$AtendidoPor."' WHERE assetsid='$equipoid'");
                    }
                    //echo json_encode(setDataJSON($docs,1));        
                    return setDataJSON($docs,1);
                }else{
                    $recordid=$client->lastError();
                    $docs[0]=array('Result'=>'0', 'id'=>$recordid);
					$rep=json_encode(setDataJSON($docs,1));
                    UpdateUUID($url, $opId, "ERROR", $rep);
                    //echo json_encode(setDataJSON($docs,1));
                    return setDataJSON($docs,1);
                }
            }else{
                $docs[0]=array('Result'=>'5', 'id'=>'NSerie no pertenece a cajaID o os_on_ID');
				$rep=json_encode(setDataJSON($docs,1));
                UpdateUUID($url, $opId, "ERROR", $rep);
                //echo json_encode(setDataJSON($docs,1));
                return setDataJSON($docs,1);
            } 
        }
        if($tipo=="Salida"){
           // echo "SALIDA".$idslot."--".$productid."--".$serieBI;
            $producto=explode("x",$productid);
            $producto=$producto[1];
            $EstadoAsset=diccionario($url,'EstadoAsset');
            $query=mysqli_query($link,"SELECT * FROM vtiger_assets WHERE product='$producto' AND serialnumber='$serieBI' AND assetstatus='$EstadoAsset'");
            $num=mysqli_num_rows($query);
            //ROMERO
            //echo "ENTRA A IF DE SALIDA<br>";
           // echo $producto." -- ".$num;
            if($num==0){
                $docs[0]=array('Result'=>'3', 'id'=>'ProductError');
				$rep=json_encode(setDataJSON($docs,1));
                UpdateUUID($url, $opId, "ERROR", $rep);
                echo json_encode(setDataJSON($docs,1));     
                die;
            }elseif($num>=1){
    			$bandera=0;
    			$AssetResv=diccionario($url,'AssetResv');
    			$EstadoAsset=diccionario($url,'EstadoAsset');
			$osbi=diccionario($url,'OsBi');
    			$OS2=explode("x",$OS);

            if (strpos($url, 'hoser') !== false) { //estos updates son solo para Hoser.
                $queryOS=mysqli_query($link,"SELECT cf_1660 as 'tipoOS' FROM vtiger_salesordercf s INNER JOIN vtiger_crmentity c on c.crmid = s.salesorderid WHERE s.salesorderid='$os_on_ID'");
                $dataOS=mysqli_fetch_array($queryOS);
                $tipoOS=$dataOS['tipoOS'];
                error_log("salidas - OS info -  ".json_encode($tipoOS)."\n", 3, "phpMulti.log");
	        }
			/*$queryresv=mysqli_query($link,"SELECT ".$AssetResv." as 'reserva'
                    FROM vtiger_assets 
                    INNER JOIN vtiger_assetscf ON vtiger_assetscf.assetsid=vtiger_assets.assetsid 
                    INNER JOIN vtiger_crmentity CRM1 ON CRM1.crmid=vtiger_assets.assetsid
                    INNER JOIN vtiger_salesorder ON vtiger_salesorder.salesorderid=vtiger_assetscf.$AssetResv
                    INNER JOIN vtiger_crmentity CRM2 ON CRM2.crmid=vtiger_salesorder.salesorderid
                    WHERE CRM1.deleted='0' AND product='$producto' AND serialnumber='$serieBI' AND CRM2.deleted='0'");
                    $numresv=mysqli_num_rows($queryresv);
                    $data=mysqli_fetch_array($queryresv);
                    $osreserveada=$data['reserva'];
		error_log("CHECK RESERVAS - NUM: ".$numresv."-- OSRESEV: ".$osreserveada."-- OSCAJA: ".$OS2[1]."-- BANDERA: ".$bandera."\n", 3, "php.log");
		   if($osreserveada>1){
			    if($osreserveada==$OS2[1]){
            $numresv2=1;
			      $reservado=1;
          }else{
            $numresv2=0;
          }
		   }else{
			    $querySoAsset=mysqli_query($link,"SELECT *
    			FROM vtiger_assets 
	                INNER JOIN vtiger_assetscf ON vtiger_assetscf.assetsid=vtiger_assets.assetsid 
        	        INNER JOIN vtiger_crmentity CRM1 ON CRM1.crmid=vtiger_assets.assetsid
                	WHERE CRM1.deleted='0' AND ".$AssetResv."='$OS2[1]' AND assetstatus='$EstadoAsset'");	
			    $numsoAsset=mysqli_num_rows($querySoAsset);
    			if($numsoAsset>=1){
		    	  	$numresv2=0;
    			}else{
		      		$numresv2=1;
    			}
		   }
		   error_log("CHECK RESERVAS - CONTADOR: ".$numresv2."\n", 3, "php.log");
       if($numresv2==0){
          $docs[0]=array('Result'=>'5', 'id'=>'ReservaError');
          //echo json_encode(setDataJSON($docs,1));      
          return setDataJSON($docs,1);
    			$bandera=1; 
        }else{
           $bandera=0;
    			//$reservado=1;
	      }
        */
                $bandera=0;
    		    error_log("CHECK RESERVAS - CONTADOR2: ".$bandera."\n", 3, "phpMulti.log");
            //echo "BANDERA: ".$bandera."<br>";
				if($bandera==0){
                  error_log("QUery DATA: ".$idslot."--".$serieBI."--".$estadoAsset."\n", 3, "phpMulti.log");
                	$query=mysqli_query($link,"SELECT vtiger_assets.assetsid,".$cantasset." as cantasset
                	FROM vtiger_slots 
                	INNER JOIN vtiger_slotscf ON vtiger_slotscf.slotsid=vtiger_slots.slotsid
                	INNER JOIN vtiger_crmentityrel ON vtiger_crmentityrel.crmid=vtiger_slots.slotsid
                	INNER JOIN vtiger_assets ON vtiger_assets.assetsid=vtiger_crmentityrel.relcrmid
                	INNER JOIN vtiger_assetscf ON vtiger_assetscf.assetsid=vtiger_assets.assetsid
                	WHERE vtiger_slots.slotsid='$idslot' AND serialnumber='$serieBI' AND assetstatus='$estadoAsset'");
                    error_log("Query cantasset ".$cantasset."\n", 3, "phpMulti.log");
                	$num=mysqli_num_rows($query);
                    error_log("Query num ".$num."\n", 3, "phpMulti.log");
                  //ROMERO
                  //echo "NUM VAL SLOTPROD: ".$num."<br>";
                	$data= mysqli_fetch_array($query);              
                	if($num>0){
                    	$qtyslot=$data['cantasset'];
                      //ROMERO
                      //echo "CANTIDADES: ".$qtyslot." -- ".$qty."<br>";
                    	if($qty>$qtyslot){
                           $docs[0]=array('Result'=>'2', 'id'=>'ProductError');
							$rep=json_encode(setDataJSON($docs,1));
                           UpdateUUID($url, $opId, "ERROR", $rep);
                        	//echo json_encode(setDataJSON($docs,1));       
                            return setDataJSON($docs,1);
                    	}else{
                          //ROMERO
                          //echo "PASA VALIDACION DE CANTIDAD<br>";
                        	$assetid="28x".$data['assetsid'];
                        	$IDAsset=$data['assetsid'];
                        	$record=$client->doCreate('Movimientos',array('movimientos_tks_tipo'=>$tipo,'movimientos_tks_cantidad'=>$qty,'movimientos_tks_slot'=>$slotID,'movimientos_tks_producto'=>$producID,'movimientos_tks_ordendecompra'=>$OC,'movimientos_tks_ordendesalida'=>$OS,'movimientos_tks_caja'=>$cajaID,'assigned_user_id'=>$asignado,$MovAsset=>$assetid));
                        	if ($record) {
                            	$recordid = $client->getRecordId($record['id']);        
                        	mysqli_query($link,"DELETE FROM  vtiger_crmentityrel WHERE crmid='$idslot' AND relcrmid='$IDAsset'");
                            	$product=$idproducto;
                            	mysqli_query($link,"INSERT INTO vtiger_crmentityrel VALUES('$recordid','Movimientos','$IDAsset','Assets')");
                            	$qtyasset=$qtyslot-$qty;                        
                            	mysqli_query($link,"UPDATE vtiger_assetscf SET ".$cantasset."='$qtyasset' WHERE assetsid='$IDAsset'");
                            	mysqli_query($link,"UPDATE vtiger_assets SET assetstatus='In Service' WHERE assetsid='$IDAsset'");
				if(!empty($osbi)){
					mysqli_query($link,"UPDATE vtiger_assetscf SET ".$osbi."='$OS2[1]' WHERE assetsid='$IDAsset'");
				}
                            	$docs[0]=array('Result'=>'1', 'id'=>$recordid);
								$rep=json_encode(setDataJSON($docs,1));
                                UpdateUUID($url, $opId, "ERROR", $rep);
                           		error_log("url: ".$url." Caja: ".$idcaja." Product: ".$productid." Cantidad: ".$qty."\n", 3, "phpMulti.log");
                            	cajarecibeproductos($url,$usuario,$idcaja,$product,$qty,$IDAsset);
                            	contabilizastock($recordid,$reservado,$url,$OS);
                            	salidaconsignacion($recordid,$url);
                            	error_log("PRODUCTO: ".$idproducto." -- ASSET: ".$IDAsset." -- CAJA:".$idcaja."\n", 3, "phpMulti.log");
                                if (strpos($url, 'hoser') !== false) { //estos updates son solo para Hoser.
                                    $Propiedad =  in_array(strtoupper($tipoOS), ['ARRIENDO','PRESTAMO','DEMO'])!==false ? 'SOC.DE INGENIERIA HOGG Y SERRANO LTDA':'Vendido';
                                    mysqli_query($link,"UPDATE vtiger_assetscf SET cf_2272='".$tipoOS."', cf_2274='".$Propiedad."' WHERE assetsid='$IDAsset'");
                                    //cf_2272 Modalidad de Entrega <;;;;-;;;;-;;;;> cf_1931 => //Destinado a <;;;;-;;;;-;;;;>  //cf_2274 => //Propiedad
                                }
                                return setDataJSON($docs,1);                        	
                            }else{
                            	$recordid=$client->lastError();
                            	$docs[0]=array('Result'=>'0', 'id'=>$recordid);
								$rep=json_encode(setDataJSON($docs,1));
                                UpdateUUID($url, $opId, "ERROR", $rep);
                            	//echo json_encode(setDataJSON($docs,1));

                                return setDataJSON($docs,1);
                        	}
                    	}
                	}else{
                    	$docs[0]=array('Result'=>'3', 'id'=>'ProductError1','serial'=>$serieBI);
						$rep=json_encode(setDataJSON($docs,1));
                        UpdateUUID($url, $opId, "ERROR", $rep);
                        error_log("reult 3 ".json_encode($docs[0])."\n", 3, "phpMulti.log");
                    	//echo json_encode(setDataJSON($docs,1));   
                        return setDataJSON($docs,1);
                	}
                } 
            }else{
                $docs[0]=array('Result'=>'3', 'id'=>'ProductError2','serial'=>$serieBI);
				$rep=json_encode(setDataJSON($docs,1));
                UpdateUUID($url, $opId, "ERROR", $rep);
                error_log("reult 3.2 ".json_encode($docs[0])."\n", 3, "phpMulti.log");
                //echo json_encode(setDataJSON($docs,1));
                return setDataJSON($docs,1);
            }    
        }
    }
}
} //fin funcion.


//funcion para actualizar el estado de la transaccion
function UpdateUUID($url, $oper, $status, $rep){
    $include=includec($url);
    include ($include);
    mysqli_query($link, "UPDATE idempotency_keys SET status='$status', response_json='$rep' WHERE operation_id='$oper'");
}

?>
