<?php

class Endosso_Model_Consulta extends Agro_Db_Table_Propostas {
    //protected $_rowClass = 'Seguro_Model_Row_Proposta';
    protected $_name = 'propostas_endosso_solicitacao';
    protected $_schema = 'seguro';
    protected $_primary = 'id';

    public function save(array $data) {
        try {
            $Adapter = new Zend_File_Transfer_Adapter_Http();
            $Adapter->setDestination(APPLICATION_PATH.'/upload_files/solicitacoes/');
            $file = $Adapter->getFileInfo();

            $Row = $this->getRow($data['id']);
            $Row->id_status = Agro_Db_Table_Abstract::getIdStatus('SOLICITACAO_NAO_FINALIZADA');
            $Row->id_tipo_solicitacao = $data['id_tipo_solicitacao'];
            $Row->id_proposta = $data['id_proposta'];

            if ($file['ds_arquivo']['name']) {
                $newFile = $this->geraNomeArquivo($Row, $file['ds_arquivo']['name']);
                $Adapter->addFilter('Rename', array('target' => APPLICATION_PATH.'/upload_files/solicitacoes/' . $newFile, 'overwrite' => true));

                if ($Adapter->receive($file['ds_arquivo']['name'])) {
                    $Row->ds_arquivo = $newFile;
                }

                $data['ds_observacao'] = 'Arquivo '. $newFile . ' adicionado.';
            }

            if ( $data['ds_descricao'] != '£££') {
                $Row->ds_descricao = $data['ds_descricao'];
            } else {
                $descricao = 'opc_banco_excluir:' . $data['opc_banco_excluir'] . ';' .
                             'ds_banco_excluir:' . ($data['opc_banco_excluir'] == 'S' ? $data['ds_banco_excluir'] : '') . ';' .
                             'ds_a_favor_excluir:' . ($data['opc_banco_excluir'] == 'N' ? $data['ds_a_favor_excluir'] : '') . ';' .
                             'ds_agencia_excluir:' . ($data['opc_banco_excluir'] == 'S' ? $data['ds_agencia_excluir'] : '') . ';' .
                             'ds_na_qualidade_excluir:' . $data['ds_na_qualidade_excluir'] . ';' .
                             'vl_ate_excluir:' . $data['vl_ate_excluir'] . ';' .
                             'cpf_cnpj_excluir:' . $data['cpf_cnpj_excluir'] . ';' .
                             'data_nasc_excluir:' . $data['data_nasc_excluir'] . ';' .
                             'opc_banco_incluir:' . $data['opc_banco_incluir'] . ';' .
                             'ds_banco_incluir:' . ($data['opc_banco_incluir'] == 'S' ? $data['ds_banco_incluir'] : '') . ';' .
                             'ds_a_favor_incluir:' . ($data['opc_banco_incluir'] == 'N' ? $data['ds_a_favor_incluir'] : '') . ';' .
                             'ds_agencia_incluir:' . ($data['opc_banco_incluir'] == 'S' ? $data['ds_agencia_incluir'] : '') . ';' .
                             'ds_na_qualidade_incluir:' . $data['ds_na_qualidade_incluir'] . ';' .
                             'vl_ate_incluir:' . $data['vl_ate_incluir']. ';' .
                             'cpf_cnpj_incluir:' . $data['cpf_cnpj_incluir']. ';' .
                             'data_nasc_incluir:' . $data['data_nasc_incluir'];

                $Row->ds_descricao = $descricao;
            }
            $Row->id_status = $data['id_status'] ? $data['id_status'] : $Row->id_status;
            $Row->save();

         	$this->getAdapter()->query('update seguro.propostas_endosso_solicitacao_status set fl_ativo = false where id_solicitacao = '.$Row->id);

            $dataStatus = array('id_solicitacao' => $Row->id,
                                'id_status' => $data['id_status'] ? $data['id_status'] : $Row->id_status,
                                'ds_observacao' =>  $data['ds_observacao'] ? $data['ds_observacao'] : ''
                            );
            $ModelStatus = new Endosso_Model_SolicitacaoStatus();
            $ModelStatus->save($dataStatus);


            return true;
        } catch (Exception $e) {
            $this->setMessage($e->getMessage());
            return false;
        }
    }

    protected function geraNomeArquivo($Row, $nome_original) {
        $id = $this->_db->fetchOne("select last_value+1 from seguro.propostas_endosso_solicitacao_id_seq");
        return 'Solicitacao_Endosso_'. $id . '_' . $Row->id_proposta . '.' . Agro_Util::getExtension($nome_original);
    }


	public function getData($where=false)
    {
        $camposEndossoTipoSolicitacao = [
            'ds_tipo_endosso',
            'ds_orientacao',
            'ds_chave as ds_chave_tipo_solicitacao',
            "CASE
               WHEN spes.id_tipo_solicitacao in(" . Endosso_Model_TiposSolicitacao::ID_COM_MOVIMENTO_PREMIO . ", " . Endosso_Model_TiposSolicitacao::ID_SEM_MOVIMENTO_PREMIO . ")
                 THEN 'Alteração de Apólice'
                 ELSE sets.ds_tipo_endosso
              END AS ds_tipo_endosso_tratado",
        ];

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('spes' => 'seguro.propostas_endosso_solicitacao'), array('id', 'ds_arquivo', 'id_tipo_solicitacao', 'id_proposta', 'id_status', 'id_tipo_solicitacao'));
        $select->join(array('sets' => 'seguro.endosso_tipo_solicitacao'), 'sets.id = spes.id_tipo_solicitacao', $camposEndossoTipoSolicitacao);
        $select->join(array('sp' => 'seguro.propostas'), 'sp.id = spes.id_proposta', array('seguro.nr_endosso(sp.id, sp.id_endosso) as nr_endosso', 'id_proposta_mae'));
        $select->join(array('pp' => 'produto.produtos'), 'pp.id = sp.id_produto', 'ds_nome_abreviado');
        $select->join(array('ss' => 'sistema.status'), 'ss.id = spes.id_status', ['ds_status', 'ds_chave as ds_chave_status']);
        $select->join(array('spp' => 'seguro.propostas_propriedades'), 'spp.id_proposta = sp.id', '');
        $select->join(array('sm' => 'sistema.municipios'), 'sm.id = spp.id_municipio', 'ds_nome_municipio');
        $select->join(array('se' => 'sistema.estados'), 'se.id = sm.id_estado', 'ds_sigla');
        $select->join(array('spr' => 'seguro.propostas_endosso_solicitacao_status'), 'spr.id_solicitacao = spes.id', 'ds_observacao');
        $select->join(array('us' => 'sistema.usuarios'), 'spes.id_usuario_criacao = us.id', 'ds_nome_usuario');
        $select->join(array('pc' => 'seguro.propostas_corretores'), 'sp.id = pc.id_proposta', null);
        $select->join(array('st' => 'sistema.status'), 'st.id = sp.id_status', 'cd_status as status_proposta');
        $select->join(array('sproposta_mae' => 'seguro.propostas'), 'sproposta_mae.id = sp.id_proposta_mae', null);
        $select->join(array('ss_proposta_mae' => 'sistema.status'), 'ss_proposta_mae.id = sproposta_mae.id_status', "ss_proposta_mae.cd_status || ' - ' || ss_proposta_mae.ds_status as status_proposta_mae");
        $select->joinLeft(array('spesa' => 'seguro.propostas_endosso_solicitacao_arquivos'), 'spesa.id_solicitacao = spes.id and spesa.fl_ativo = true and spesa.fl_assinatura = true', 'ds_nome_arquivo');
        $select->joinLeft(array('resp' => 'sistema.usuarios'), 'resp.id = spes.id_usuario_responsavel', 'ds_nome_usuario AS ds_nome_responsavel');

        $select->where('spr.fl_ativo = true');

        if (is_array($where)) {
            foreach ($where as $clause) {
                if (is_array($clause)) {
                    $field = $clause['field'];
                    $operator = $clause['operator'];
                    $value = $clause['value'];

                    $select->where("$field $operator $value");
                } else {
                    $select->where($clause, '');
                }
            }
        }

        if ($this->_order) {
            $select->order($this->_order);
        } else {
            $select->order('spes.id');
        }

        return $select;
    }
}
