<?php
include("ApiGlobalFunctions.php");


$usuario= isset($_POST['uid']) ? $_POST['uid'] : $_GET['uid'];
$password= isset($_POST['key']) ? $_POST['key'] : $_GET['key'];
$url= isset($_POST['url']) ? $_POST['url'] : $_GET['url'];
$tipo= isset($_POST['Tipo']) ? $_POST['Tipo'] : $_GET['Tipo'];
$OCOS= isset($_POST['OCid_OSid']) ? $_POST['OCid_OSid'] : $_GET['OCid_OSid'];
$cdate= isset($_POST['cDate']) ? $_POST['cDate'] : $_GET['cDate'];
$Nguia= isset($_POST['cNdeGuia']) ? $_POST['cNdeGuia'] : $_GET['cNdeGuia'];
$courier= isset($_POST['cCourier']) ? $_POST['cCourier'] : $_GET['cCourier'];
$detalles= isset($_POST['cDetalles']) ? $_POST['cDetalles'] : $_GET['cDetalles'];
$status= isset($_POST['cStatus']) ? $_POST['cStatus'] : $_GET['cStatus'];
$bodega= isset($_POST['cBodega']) ? $_POST['cBodega'] : $_GET['cBodega'];
$seccion= isset($_POST['cSeccion']) ? $_POST['cSeccion'] : $_GET['cSeccion'];
$slot= isset($_POST['cSlot"']) ? $_POST['cSlot'] : $_GET['cSlot'];
$vendor= isset($_POST['cVendor']) ? $_POST['cVendor'] : $_GET['cVendor'];
$opId = isset($_POST['operation_id']) ? $_POST['operation_id'] : $_GET['operation_id'];
error_log("usuarioa: ".$usuario." password: ".$password." URl: ".$url." operUUID: ".$opId." cDate: ".$_POST['cDate']."-- ".$cdate."tipo: ".$tipo." OCOS: ".$OCOS." Nguia: ".$Nguia." courier: ".$courier." detalles: ".$detalles." status: ".$status." bodega: ".$bodega." seccion: ".$seccion." slot: ".$slot." vendor: ".$vendor."\n", 3, "php.log");
//echo "usuario: ".$usuario." password: ".$password." URl: ".$url." cDate: ".$cdate."tipo: ".$tipo." OCOS: ".$OCOS." Nguia: ".$Nguia." courier: ".$courier." detalles: ".$detalles." status: ".$status." bodega: ".$bodega." seccion: ".$seccion." slot: ".$slot." vendor: ".$vendor;

$username=username($usuario,$url);
$idosoc=$OCOS;
$include=includec($url);
error_log("INCLUDE: ".$include."\n", 3, "php.log");
include ($include);


if(!empty($opId)){
    $dataPayload = array(
    "usuario" => $usuario,
    "password" => $password,
    "url" => $url,
    "OCOS" => $OCOS,
    "cdate" => $cdate,
    "status" => $status,
    "bodega" => $bodega
    );


    $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', 'CreateBox',  '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   
    }             
           
}








$query=mysqli_query($link,"SELECT * FROM vtiger_crmentity WHERE crmid='$OCOS'");
$data=mysqli_fetch_array($query);  
$type=$data['setype'];

if($type=="SalesOrder"){
    $OS="6x".$OCOS;
    $OC=NULL;
    $completadOS=diccionario($url,'completadoos');
    $queryComp=mysqli_query($link,"SELECT $completadOS as 'completado' FROM vtiger_salesordercf WHERE salesorderid='$idosoc'");
    $datac=mysqli_fetch_array($queryComp);  
    $completado=$datac['completado'];
}    
if($type=="PurchaseOrder"){
    $OC="5x".$OCOS;
    $OS=NULL;
    $completadoOC=diccionario($url,'completadooc');
    $queryComp=mysqli_query($link,"SELECT $completadoOC as 'completado' FROM vtiger_purchaseordercf WHERE purchaseorderid='$idosoc'");
    $datac=mysqli_fetch_array($queryComp);  
    $completado=$datac['completado'];
}
error_log("OSOC: ".$OS."--".$OC."\n", 3, "php.log");
$asignado="19x".$usuario;
$bodega=diccionario($url,'Bodegas').$bodega;
error_log("BODEGA: ".$bodega."\n", 3, "php.log");

//VALIDACION PARA EVITAR CREAR CAJAS A OS/OC que ya tienen cajas//
$queryc=mysqli_query($link,"SELECT * 
        FROM vtiger_paquetes 
        INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_paquetes.paquetesid 
        WHERE deleted='0' AND (paquetes_tks_ordendecompra='$idosoc' OR paquetes_tks_ordendesalida='$idosoc') AND paquetes_tks_estado='Nueva'");
$numc=mysqli_num_rows($queryc);

if($numc>=1 || $completado==1){
    $docs[0]=array('Result'=>'0', 'id'=>"NULL");    
    echo json_encode(setDataJSON($docs,1));
    error_log("ERROR: "."CAJA NO SE PUEDE CREAR POR VALIDACIONES DE DUPLICIDAD "."ya tiene cajas:".$numc."Ya esta en completado".$completado."\n", 3, "php.log");

}else{

	if(strpos($url, 'solucorp') !== false && $tipo=="Salida"){
        $query=mysqli_query($link,"SELECT osid FROM so_queue_wms WHERE userid='$usuario' ORDER BY position DESC Limit 1");
        $data=mysqli_fetch_array($query);
        $os=$data['osid'];
        if($os!=$idosoc){
            $docs[0]=array('Result'=>'3', 'id'=>"NULL");    
            echo json_encode(setDataJSON($docs,1));
            exit;
        }
    }


    $includenat=includenative($usuario,$password,$url);
    chdir($includenat);   
    error_log("RUTA: ".$includenat."\n", 3, "php.log");
    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 'Fallo';
        error_log("Login: "."FALLIDO"."\n", 3, "php.log");
    }else {    
        error_log("Login: "."EXITOSO"."\n", 3, "php.log");
        $campos=$client->doDescribe('Paquetes');    
        if($vendor>1) {
            $vendor="2x".$vendor;
            $record=$client->doCreate('Paquetes',array('paquetes_tks_noguiaodespacho'=>$Nguia,'paquetes_tks_estado'=>$status,'paquetes_tks_tipo'=>$tipo,'assigned_user_id'=>$asignado,'paquetes_tks_ordendecompra'=>$OC,'paquetes_tks_ordendesalida'=>$OS,'paquetes_tks_fechadellegadaosa'=>$cdate,'paquetes_tks_centrodecosto'=>$courier,'paquetes_tks_bodega'=>$bodega,'paquetes_tks_seccion'=>$seccion,'paquetes_tks_detalles'=>$detalles,'paquetes_tks_proveedor'=>$vendor));
        }else{
            $record=$client->doCreate('Paquetes',array('paquetes_tks_noguiaodespacho'=>$Nguia,'paquetes_tks_estado'=>$status,'paquetes_tks_tipo'=>$tipo,'assigned_user_id'=>$asignado,'paquetes_tks_ordendecompra'=>$OC,'paquetes_tks_ordendesalida'=>$OS,'paquetes_tks_fechadellegadaosa'=>$cdate,'paquetes_tks_centrodecosto'=>$courier,'paquetes_tks_bodega'=>$bodega,'paquetes_tks_seccion'=>$seccion,'paquetes_tks_detalles'=>$detalles));
        }   
        if ($record) {
            $recordid = $client->getRecordId($record['id']);        
            $docs[0]=array('Result'=>'1', 'id'=>$recordid);
       
            if(strpos($url, 'hoser') !== false){
                error_log("url dentro del if: ".$url."\n", 3, "php.log");
                updatefechasHoser($url,$recordid);
            }
            
            if(strpos($url, 'solucorp') !== false){
                UpdateEstadoWMS($usuario, $password, $url,$idosoc, 'En Preparacion', $tipo);
                if($tipo=="Entrada"){
                    //UpdateAsignadoWMS($usuario, $password, $url,$OCOS);
                } 
            }
            
            echo json_encode(setDataJSON($docs,1));

            if(!empty($OC)){
            //  @mysqli_query($link,"UPDATE vtiger_paquetes SET paquetes_tks_ordendecompra='$OC' WHERE paquetesid='$recordid'");
            }
            if(!empty($OS)){
            //  @mysqli_query($link,"UPDATE vtiger_paquetes SET paquetes_tks_ordendesalida='$OS' WHERE paquetesid='$recordid'");
            }
            $test=caja_productos($recordid,$url);
            //echo $test;
            caja_direccion_od($recordid,$url);
            $campo=diccionario($url,'traslados');
                $query=mysqli_query($link,"SELECT * FROM vtiger_salesordercf WHERE $campo='1' AND salesorderid='$OCOS'");
            $numd=mysqli_num_rows($query);              
            if ($numd>0) {
                caja_bodegas($recordid,$OS,$url);
            }
        	if(strpos($url, 'solucorp') !== false){
                    GestionColas($usuario, $password, $url, $OCOS);
            }

        }else{
            $recordid=$client->lastError();
            $docs[0]=array('Result'=>'0', 'id'=>$recordid);    
            echo json_encode(setDataJSON($docs,1));
            error_log("ERROR: ".$recordid."\n", 3, "php.log");
        }
    }
}    

function updatefechasHoser($url,$recordid){
    $include=includec($url);
    include ($include);
    $codCcosto=diccionario($url,'CodCCosto');
    $fechaSoftOc=diccionario($url,'fechaSoftOc');
    $fechaSoft=mysqli_query($link,"SELECT $fechaSoftOc,createdtime,paquetes_tks_tipo,paquetes_tks_ordendecompra,paquetes_tks_fechadellegadaosa,$codCcosto
    FROM vtiger_paquetes
    INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_paquetes.paquetesid
    INNER JOIN vtiger_paquetescf ON vtiger_paquetescf.paquetesid=vtiger_paquetes.paquetesid
    LEFT JOIN vtiger_purchaseorder ON vtiger_purchaseorder.purchaseorderid=vtiger_paquetes.paquetes_tks_ordendecompra
    LEFT JOIN vtiger_purchaseordercf ON vtiger_purchaseordercf.purchaseorderid=vtiger_purchaseorder.purchaseorderid
    WHERE vtiger_paquetes.paquetesid='$recordid' AND deleted='0'");
    $datas=mysqli_fetch_array($fechaSoft);  
    if($datas['paquetes_tks_tipo']=='Entrada' && $datas['paquetes_tks_ordendecompra']!=''){
        $fechasoftUpdate=$datas[$fechaSoftOc];
        $fechaCreacion=$datas['createdtime'];
        $ccosto=$datas[$codCcosto];
        
        // error_log("fechaCreacion antes: ".$fechaCreacion."\n", 3, "php.log");
        $fechaCreacion = date("Y-m-d", strtotime($fechaCreacion));
        error_log("fechasoftUpdate: ".$fechasoftUpdate."\n", 3, "php.log");
        error_log("fechaCreacion: ".$fechaCreacion."\n", 3, "php.log");

        $fechaIngresoFabrica=diccionario($url,'fechaIngresoFabrica');
        $fechaIngresoBodega=diccionario($url,'fechaIngresoBodega');
        $fechaIngresoBodega=diccionario($url,'fechaIngresoBodega');
        $codCcostoCajas=diccionario($url,'CodCCostoCajas');
        $updateCaja=mysqli_query($link,"UPDATE vtiger_paquetescf
        SET $fechaIngresoFabrica = '$fechasoftUpdate', $fechaIngresoBodega = '$fechaCreacion' , $codCcostoCajas= '$ccosto'
        WHERE paquetesid='$recordid'");
        error_log("update caja: ".$updateCaja."\n", 3, "php.log");
    }elseif($datas['paquetes_tks_tipo']=='Salida'){
        $fechaSalidaBodega=diccionario($url,'fechaSalidaBodega');
        $codCcostoCajas=diccionario($url,'CodCCostoCajas');
        $fechaSalida=$datas['paquetes_tks_fechadellegadaosa'];
        $updateCaja=mysqli_query($link,"UPDATE vtiger_paquetescf
        SET $fechaSalidaBodega = '$fechaSalida', $codCcostoCajas= '$ccosto'
        WHERE paquetesid='$recordid'");
        error_log("update caja: ".$updateCaja."\n", 3, "php.log");
    }
}


?>
