<?php

class Solicitacao_Model_Departamentos extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Solicitacao_Model_Row_Departamento';
	protected $_schema = 'solicitacao';
	protected $_name = 'tarefa';
	protected $_primary = 'id';
	public $_order = 'dt_criacao desc';
	
	public function getCombo() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('f' => 'sistema.funcionarios'));
		$Select->where('f.id_departamento = ?', $this->_user->id_departamento);
		$Select->where('f.fl_ativo is true');
		$Select->where('f.fl_del is false');
		$Select->order('ds_nome_guerra');
		$Rs = $this->fetchAll($Select);
		
		$return = array();
		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$return[$Row->id_usuario] = $Row->ds_nome_guerra;
			}
		}
		
		return $return;
	}
	
	public function fetchTarefasDepartamento() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('d' => 'sistema.departamentos'));
		$Select->join(array('e' => 'sistema.empresas'), 'e.id = d.id_empresa', false);
		$Select->where('e.cpf_cnpj = ?', "03.486.745/0001-09");
		$Select->order('d.ds_nome_departamento');
		$Rs = $this->fetchAll($Select);
		$return = array();
		
		if ($Rs->count()) {
			$Tarefas = new Solicitacao_Model_Tarefa();
			foreach ($Rs as $Row) {
				$return[] = array(
					'nome' => $Row->ds_nome_departamento,
					'tasks' => $Tarefas->departamento($Row->id)
				);
			}
		}
		
		return $return;
	}	
	
	public function getData($where) {
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('t' => 'solicitacao.tarefa'), array('id','ds_titulo','id_departamento','dt_criacao'));
		$select->joinLeft(array('p' => 'solicitacao.tarefa_prioridade'), 't.id_prioridade = p.id', array('id as id_prioridade','ds_nome_prioridade'));
		$select->joinLeft(array('o' => 'solicitacao.tarefa_tipo'), 't.id_tarefa_tipo = o.id', array('id as id_tarefa_tipo','ds_nome_tipo'));
		$select->joinLeft(array('s' => 'sistema.status'), 's.id = t.id_status', array('id as id_status','ds_status'));
		$select->joinLeft(array('c' => 'sistema.usuarios'), 'c.id = t.id_usuario_criacao', false);
		$select->joinLeft(array('cf' => 'sistema.funcionarios'), 'c.id = cf.id_usuario', array('cf.id_usuario as id_solicitante','ds_nome_funcionario as solicitante'));
		$select->joinLeft(array('e' => 'sistema.usuarios'), 'e.id = t.id_executor', false);
		$select->joinLeft(array('ef' => 'sistema.funcionarios'), 'e.id = ef.id_usuario', 'ds_nome_funcionario as executor');
		$select->where('t.fl_del = ?', 'false');
		
		if (is_array($where)) {
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field = $clause['field'];
					$operator = $clause['operator'];
					$value = $clause['value'];
					
					if($field == 'id_executor'){
						$select->where("$field $operator $value");
					}else{
						$select->where("$field $operator ?", $value);
					}

				} else {
					$select->where($clause, '');
				}
			}
		} elseif ($where != '') {
			$select->where($where);
		}

		if ($this->_order) {
			$select->order($this->_order);
		}

		return $select;
	}
	
	public function getDepartamentoUsuarioLogado(){
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('f' => 'sistema.funcionarios'),false);
		$Select->join(array('u' => 'sistema.usuarios'), 'u.id = f.id_usuario', false);
		$Select->join(array('d' => 'sistema.departamentos'), 'd.id = f.id_departamento', 'ds_chave');
		$Select->where('u.id = ?', $this->_user->id);

		return $this->_db->fetchOne($Select);
	}
	
}