<?php
// app/api/orders/cancel

    header("Content-Type:application/json");
    include("../../../settings/dbconn.php");
    include("../../../settings/utils.php");
    
    // parametros obligatorios
    $parmsob = array("sessionid","id");
    if (!parametrosValidos($_GET, $parmsob)){
        badEnd("400", array("msg"=>"Parametros obligatorios " . implode(", ", $parmsob)));
    }
    
    //Declaracion de variables
    $out = new stdClass();
    $id = $_GET["id"];
    $sessionid = $_GET["sessionid"];
    
    //Validamos la session
    $idUserSession = isSessionValid($db, $sessionid);
    
    //Validamos el si el usuario puede hacer operaciones
    isLevelValid($db, $idUserSession);
    
    // Obtenemos el lenguaje del usuario
    $lang = updateLang($db,$sessionid);
    
    //Validamos que la orden exista
    $sql = "SELECT COUNT(id) AS qty FROM orders WHERE id = ".$id;
    if (!$rs=$db->query($sql))
        badEnd("500", array("msg"=>determinateDBError($db)));
        
    $row = $rs->fetch_assoc();
    
    if($row["qty"] == 0){
        badEnd('404',array('msg'=>determinateMsgFail(array(
            "esp"=>'Orden no encontrada',
            "eng"=>"Order not found"), $lang, 'Orden no encontrada')));
    }
    
    //Validamos que no haya sido ya cancelada
    $sql = "SELECT * FROM orders WHERE id = ".$id;
    if (!$rs=$db->query($sql))
        badEnd("500", array("msg"=>determinateDBError($db)));
        
    $row = $rs->fetch_assoc();
    
    //Si canceled no es null, no se puede colocar una fecha
    if($row['canceled'] != NULL){
        badEnd("402", array("msg"=>determinateMsgFail(array(
            "esp"=>'Orden ya esta cancelada',
            "eng"=>"Order is already canceled"), $lang, 'Orden ya esta cancelada')));
    }
    
    //Actualizamos el campo canceled
    $sql = "UPDATE orders SET ".
    "       canceled = NOW() ".
    "       WHERE id = ".$id.
    "       AND canceled IS NULL";
    if (!$db->query($sql))
        badEnd("500", array("msg"=>determinateDBError($db)));
    
    //Retornamos 304 si no se elimino ningun registro
    if ($db->affected_rows == 0){
        badEnd("403", array("msg"=>determinateMsgFail(array(
            "esp"=>"No se pudo modificar",
            "eng"=>"Cannot modify"), $lang, "No se pudo modificar")));
    }
    
    $out->id = (int)$id;
    
    //Auditoria
    setAudit($db, "ORDENES", $sessionid, "APP", "El usuario ".$idUserSession." canceló la orden ".$out->id);
    
    header("HTTP/1.1 200");
    echo (json_encode($out));
    die();
?>