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

    const ELETRONICA_EMAIL = 1;
    const ELETRONICA_PRESENCIAL = 2;
    const MANUAL = 3;
    const NAO_INFORMADA = 4;
    const ELETRONICA_SMS = 5;

    public $_columnExcel = array(
        'id' => 'Proposta',
        'ds_status' => 'Status',
        'ds_nome_proponente' => 'Segurado',
        'tipo_assinatura' => 'Tipo de Assinatura',
        'ds_email_proponente' => 'E-mail do Segurado',
        'ds_celular_segurado' => 'Celular do Segurado',
        'status_assinatura_traduzido' => 'Status do Envelope',
        'id_envelope' => 'ID Envelope',
        'ds_mensagem' => 'Observação',
    );

    /**
     * Busca os tipos de assinatura dos documentos pela proposta
     * @param int $idProposta
     * @param bool $somenteAtivo
     * @return Zend_Db_Table_Row
     */
    public function getByProposta($idProposta, $somenteAtivo = true)
    {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('p' => 'seguro.propostas_tipo_assinatura_documento'), '*');
        $select->join(array('u' => 'sistema.usuarios'), 'p.id_usuario_criacao = u.id', 'ds_nome_usuario');
        $select->where("id_proposta={$idProposta}");

        if ($somenteAtivo) {
            $select->where("p.fl_ativo is true");
        }
        
        $select->order('p.id DESC');
        
        return $this->fetchAll($select)->toArray();
    }

    public function save($data)
    {
        if (empty($data['id_proposta'])) {
            return null;
        }

        $this->update(array('fl_ativo' => 0), "id_proposta = " . $data['id_proposta']);

        $Row = $this->getRow();
        $Row->id_proposta = $data['id_proposta'];
        $Row->tipo_assinatura = $data['tipo_assinatura'];
        $Row->save();

        return $Row->id;
    }

    public function deleteByProposta($idProposta)
    {
        parent::delete($idProposta, 'id_proposta');
    }

    public function getData($where = [])
    {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['spe' => 'seguro.propostas_endosso'], 'spe.fl_proposta_vigente');
        $select->join(['spr' => 'seguro.propostas'], 'spr.id = spe.id_proposta', ['id', 'id_usuario_criacao', 'dt_transmissao', 'id_status', 'id_produto', 'id_proposta_mae', 'seguro.nr_endosso(spr.id, spr.id_endosso) as nr_endosso']);
        $select->join(['mae' => 'seguro.propostas'], 'mae.id = spr.id_proposta_mae', false);
        $select->join(['spt' => 'seguro.propostas_proponentes'], 'spr.id = spt.id_proposta', ['ds_nome_proponente', 'cpf_cnpj', 'ds_email_proponente', 'ds_tel_residencia', 'ds_tel_celular']);
        $select->join(['spc' => 'seguro.propostas_corretores'], 'spr.id = spc.id_proposta', false);
        $select->join(['ppr' => 'produto.produtos'], 'ppr.id = spr.id_produto', ['ds_nome_abreviado', 'ds_nome_produto']);
        $select->join(['spd' => 'seguro.propostas_propriedades'], 'spr.id = spd.id_proposta', ['id_municipio']);
        $select->join(['smu' => 'sistema.municipios'], 'smu.id = spd.id_municipio', 'ds_nome_municipio');
        $select->join(['suf' => 'sistema.estados'], 'suf.id = smu.id_estado', 'ds_sigla');
        $select->join(['scr' => 'sistema.corretores'], 'spc.id_usuario = scr.id_usuario', ['ds_nome_fantasia', 'ds_email as ds_email_corretor', 'ds_email_2 as ds_email_corretor2', 'ds_email_responsavel', 'ds_email_contato_outros', 'ds_email_contato_outros_2']);
        $select->join(['sst' => 'sistema.status'], 'sst.id = spr.id_status', ['ds_cor', 'ds_chave', 'ds_status', 'cd_status']);
        $select->joinLeft(['sptad' => 'seguro.propostas_tipo_assinatura_documento'], "sptad.id_proposta = spr.id", ['tipo_assinatura']);
        $select->joinLeft(['spead' => 'seguro.propostas_email_assinatura_documento'], "spead.id_proposta = spr.id AND spead.fl_ativo is true", ['ds_email_segurado', 'ds_celular_segurado']);
        $select->joinLeft(['spdoc' => 'seguro.propostas_docusign'], "spdoc.id_proposta = spr.id AND spdoc.fl_ativo is true", ['ds_status as status_assinatura', 'st_tipo_envio', 'id_envelope', "REGEXP_REPLACE(ds_mensagem, '[;\\n\\r\\t]', '', 'g') as ds_mensagem"]);
        $select->joinLeft(['st_envelope' => 'sistema.status'], "st_envelope.ds_chave = spdoc.ds_status AND st_envelope.id_tipo_status = " . Sistema_Model_Tipostatus::ASSINATURA_ELETRONICA, 'ds_status as status_assinatura_traduzido');
        $select->joinLeft(['psdg' => 'seguro.propostas_status_documento_digitalizado'], "psdg.id_proposta = spr.id AND psdg.fl_ativo is true", ['id_status AS id_status_documento_digitalizado']);
        $select->where('sst.ds_chave <> ?', 'PROPOSTA_INCOMPLETA');
        $select->where('sst.ds_chave <> ?', 'ENDOSSO_INCOMPLETO');
        $select->where('sst.ds_chave <> ?', Seguro_Model_Propostas::DS_CHAVE_SOLICITACAO_CANCELADA);

        if (Zend_Auth::getInstance()->getIdentity()->ds_chave == 'SEGURADORA_ESSOR') {
            $select->where('ppr.id_safra >= 16');
        }
        if (Zend_Auth::getInstance()->getIdentity()->ds_chave == 'SEGURADORA') {
            $select->where('ppr.id_safra < 16');
        }

        $this->getWhere($select, $where);

        if ($this->_order) {
            $select->order($this->_order);
        } else {
            $select->order('spr.id_proposta_mae DESC, spr.id');
        }

        return $select;
    }

    public static function getDescricaoByTipo($tipoAssinatura)
    {
        switch ($tipoAssinatura) {
            case '1':
                $descricao = 'ASSINATURA ELETRÔNICA: POR E-MAIL';
            break;
            //case '2':
            //    $descricao = 'ASSINATURA ELETRÔNICA: PRESENCIAL';
            //break;
            case '3':
                $descricao = 'ASSINATURA MANUAL';
            break;
            case '5':
                $descricao = 'ASSINATURA ELETRÔNICA: POR SMS';
            break;
            default:
            $descricao = "NÃO INFORMADA";
            break;
        }
    
        return $descricao;
    }

    public function add($idProposta, $row) {
        $data = [
            'id_proposta' => $idProposta,
            'tipo_assinatura' => $row['tipo_assinatura'],
        ];

		return $this->save($data);
	}
}
