<?php

use Stel\Repository\PermisoRepository;
use Stel\Repository\UsuarioRepository;
use Stel\Repository\TareaRepository;
use Stel\Model\Permiso;
function byUserName($a, $b)
{
    return strcmp(strtolower($a->getUsuario()->getUsuario()), strtolower($b->getUsuario()->getUsuario()));
}
$repo = new PermisoRepository();
$repoUsuarios = new UsuarioRepository();
$repoTareas = new TareaRepository();
$entities = $repo->getAll();
foreach ($entities as $entity) {
    $usuario = $repoUsuarios->getOne($entity->getIdUsuario());
    $entity->setUsuario($usuario);
    $tarea = $repoTareas->getOne($entity->getIdTarea());
    $entity->setTarea($tarea);
}
usort($entities, "byUserName");
Controller::render("permisos.php", array("entities" => $entities));
    $data = json_decode($_POST["object"]);
    $repo = new PermisoRepository();
    $repoUsuarios = new UsuarioRepository();
    $repoTareas = new TareaRepository();
    switch ($action) {
        case "new":
            //para no duplicar registros
            $exists = $repo->exists($data->idUsuario, $data->idTarea);
            if ($exists) {
                Controller::renderJson("ERROR", $exists, "Permiso existente");
            } else {
                $permiso = new Permiso();
                $permiso->setIdTarea($data->idTarea);
                $permiso->setIdUsuario($data->idUsuario);
                $permiso->setIdPermiso($repo->insert($permiso));
                $usuario = $repoUsuarios->getOne($data->idUsuario);
                $permiso->setUsuario($usuario);
                $tarea = $repoTareas->getOne($data->idTarea);
                $permiso->setTarea($tarea);
                Controller::renderJson("OK", $permiso);
            }
            break;
        case "edit":
            Controller::renderJson("ERROR", null, "No implementado");
            break;
        case "delete":
            $repo->delete($data->idPermiso);
            Controller::renderJson("OK", $data->idPermiso);
            break;
    }
} catch (Exception $e) {
use Stel\Repository\TramiteInstanciaTareaRepository;
use Stel\Repository\UsuarioRepository;
use Stel\Model\Usuario;
use Stel\Model\Estado;
$tramite = isset($_GET["tramite"]) ? $_GET["tramite"] : null;
$tipo = isset($_GET["tipo"]) ? $_GET["tipo"] : null;
$instancia = isset($_GET["instancia"]) ? $_GET["instancia"] : null;
$tareas = array();
$user = Usuario::getSessionUser();
if (!$user) {
    Controller::renderJson("ERROR", null, "relogin");
} else {
    $repo = new TramiteInstanciaTareaRepository();
    $tareas = $repo->getForMisTareas($user["id"], $tipo, $instancia, $tramite);
    //var_dump($tareas);die;
    $repoUser = new UsuarioRepository();
    foreach ($tareas as $tarea) {
        $usuario = $repoUser->getOne($tarea->idUsuario);
        //en el estado concateno el nombre de usuario que tomo la tarea
        if ($usuario) {
            $tarea->nombreEstado .= " - " . $usuario->getUsuario();
        }
        // para que una tarea sea editable o finalizable tiene que estar Abierta
        // o EnCurso pero por el mismo usuario
        if ($tarea->idEstado == Estado::$TareaAbierta || $tarea->idEstado == Estado::$TareaEncurso && $tarea->idUsuario == $user["id"]) {
            $tarea->editable = true;
        }
    }
}
Controller::renderJson("OK", $tareas);
 switch ($action) {
     case "new":
         $usuario = new Usuario();
         $usuario->setUsuario($data->usuario);
         $usuario->setPassword(Usuario::encode($data->password));
         $usuario->setTelefono($data->telefono);
         $usuario->setEmail($data->email);
         $usuario->setActivo($data->activo);
         $usuario->setIdDireccion($data->idDireccion);
         $usuario->setIdUsuario($repo->insert($usuario));
         //antes de devolver el usuario vacio la password
         $usuario->setPassword(null);
         Controller::renderJson("OK", $usuario);
         break;
     case "edit":
         $usuario = $repo->getOne($data->idUsuario);
         //si no se especifica un password no se pisa el viejo
         if ($data->password && $data->password != "") {
             $usuario->setPassword(Usuario::encode($data->password));
         }
         $usuario->setTelefono($data->telefono);
         $usuario->setEmail($data->email);
         $usuario->setActivo($data->activo);
         $usuario->setIdDireccion($data->idDireccion);
         $repo->update($usuario);
         //antes de devolver el usuario vacio la password
         $usuario->setPassword(null);
         Controller::renderJson("OK", $usuario);
         break;
     case "delete":
         Controller::renderJson("ERROR", "", "No implementado");