<?php
class Seguro_Model_PropostaStatusDocumentoDigitalizado extends Agro_Db_Table_Abstract {
	protected $_log = true;
	protected $_schema = 'seguro';
	protected $_name = 'propostas_status_documento_digitalizado';
	protected $_primary = 'id';

	const STATUS = array(
		'DOC_PENDENTE_ENVIO' => 1,
		'DOC_ANEXADO' => 2,
		'DOC_DISPENSADO' => 3,
		'DOC_BAIXADO' => 4,
		'DOC_BAIXADO_CHAMADO' => 5, 
		'DOC_PENDENCIA' => 6
	);

	/**
	 * Inclui/Altera um status e retorna o ID do mesmo
	 * @param array $data
	 * @return int id
	 */
	public function save(array $data)
    {
        $row = $this->getRow($data['id']);

		$row->id_status = $data['id_status'];
		$row->id_proposta = $data['id_proposta'];
		$row->ds_observacao = $data['ds_observacao'];
	
        return $row->save();
    }

	/**
	 * Altera o status do documento digitalizado da proposta
	 * @param int $idProposta
	 * @param int $cdStatus
	 * @param string|null $observacao
	 * @return int id
	 */
	public function atualizarStatus($idProposta, $cdStatus, $observacao = '') {
		try {
			$chaveStatus = array_search($cdStatus, self::STATUS);
			if ($chaveStatus === false) {
				throw new Exception("Status informado não encontrado.");
			}

			$idStatus = $this->getIdStatus($chaveStatus, 'DOCUMENTO_DIGITALIZADO');

			$this->_db->update(
				'seguro.propostas_status_documento_digitalizado', 
				array('fl_ativo' => 0, 'id_usuario_alteracao' => $this->_user->id),
				"id_proposta = {$idProposta}"
			);
			return $this->save([
					'id_status' => $idStatus, 
					'id_proposta' => $idProposta, 
					'ds_observacao' => $observacao
			]);
			
		} catch (Exception $e) {
			throw new Exception($e->getMessage());
		}
	}

	/**
	 * Busca os status da proposta
	 * @param int $idProposta
	 * @param bool $flVigente
	 */
	public function getStatus($idProposta, $flVigente=true) {

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'seguro.propostas_status_documento_digitalizado'), array('id_status', 'ds_observacao'));
		$select->join(array('st' => 'sistema.status'), 'st.id = p.id_status', array('ds_status', 'cd_status'));
		$select->where("p.id_proposta = $idProposta");
		if($flVigente == true){
			$select->where("p.fl_ativo = true");
		}
		
		$Rs = $this->_db->fetchAll($select);
		return $Rs;
	}

	/**
	 * Retorna o histórico de status com suas pendências
	 * @param int $idProposta
	 */
	public function getHistoricoStatus($idProposta) 
	{
		$sql = "SELECT
					ps.*, s.ds_status, u.ds_nome_usuario, s.cd_status
				FROM
					seguro.propostas_status_documento_digitalizado AS ps 
					INNER JOIN sistema.status AS s ON  ps.id_status = s.id
					INNER JOIN sistema.usuarios AS u ON  ps.id_usuario_criacao = u.id
				WHERE
					(ps.id_proposta = $idProposta) 
					".$where."
				ORDER BY 
					ps.dt_criacao desc, ps.id asc";

		$rsStatus = $this->_db->fetchAll($sql);

		$historico = array();
		$i = 0;
		foreach($rsStatus as $status) {
			$historico[$i]['id_status'] = $status['id_status'];
			$historico[$i]['cd_status'] = $status['cd_status'];
			$historico[$i]['dt_criacao'] = $status['dt_criacao'];
			$historico[$i]['ds_status'] = $status['ds_status'];
			$historico[$i]['ds_observacao'] = $status['ds_observacao'];
			$historico[$i]['ds_nome_usuario'] = $status['ds_nome_usuario'];
	
			$sql = "SELECT
						p.*, a.ds_nome_pendencia
					FROM
						seguro.propostas_pendencias_documento_digitalizado AS p 
						INNER JOIN atendimento.pendencias AS a ON p.id_pendencia = a.id
					WHERE
						p.id_proposta_status_documento_digitalizado = {$status['id']}";
			$rsPendencias = $this->_db->fetchAll($sql);
			$pendencias = array();
			foreach($rsPendencias as $pendencia) {
				$pendencias[] = $pendencia['ds_nome_pendencia'];
			}
			$historico[$i]['pendencias'] = $pendencias;
			
			$i++;
		}

		return $historico;
	}
}
