<?php
class Sinistro2_Model_ProcessosNotasFiscais extends Agro_Db_Table_Abstract {
    protected $_schema = 'sinistro';
    protected $_name = 'processos_notas_fiscais';
    protected $_primary = 'id';

    public function save($dados) {
        $Row = $this->createRow();
        $Row->id_processo = $dados['id_processo'];
        $Row->id_status_arquivo = $dados['id_status_arquivo'];
        $Row->id_status = ($dados['id_status']?$dados['id_status']:null);

        return $Row->save();
    }

    public function getNotasFiscaisArquivoByIdProcesso(int $idProcesso): array {
        $query = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('pnf' => $this->_schema.'.'.$this->_name), array('id', 'id_status_arquivo'))
            ->join(array('nfa' => 'sinistro.notas_fiscais_arquivos'), 'pnf.id = nfa.id_processos_notas_fiscais', array('id as id_nota',"to_char(nfa.dt_criacao,'DD/MM/YYYY') as dt_criacao",'ds_nome_arquivo'))
            ->join(array('ss' => 'sistema.status'), 'pnf.id_status_arquivo = ss.id', array('ds_status', 'ds_chave'))
            ->where('pnf.id_processo = ?', $idProcesso);

        return $this->fetchAll($query)->toArray();
    }

    public function getNotasFiscaisByIdProcesso(int $idProcesso): array {
        $query = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('pnf' => $this->_schema.'.'.$this->_name), array('id', 'id_status'))
            ->join(
                array(
                    'nfa' => 'sinistro.notas_fiscais_arquivos'),
                    'nfa.id_processos_notas_fiscais = pnf.id',
                    array('id as id_notas_fiscais_arquivos, ds_nome_arquivo'
                )
            )
            ->joinLeft(
                array('nf' => 'sinistro.notas_fiscais'),
                'pnf.id = nf.id_processos_notas_fiscais and nf.id_notas_fiscais_arquivos = nfa.id',
                array(
                    'to_char(nf.dt_criacao, \'DD/MM/YYYY HH24:MI:SS\') as dt_criacao',
                    'to_char(nf.dt_alteracao, \'DD/MM/YYYY HH24:MI:SS\') as dt_alteracao',
                    'id as id_nota_fiscal',
                    'ds_nro_nota_fiscal',
                    'vl_peso',
                    'vl_percent_germinacao',
                    'vl_percent_desvalorizacao'
                )
            )
            ->joinLeft(array('ss' => 'sistema.status'), 'pnf.id_status = ss.id', array('ds_status', 'ds_chave'))
            ->joinLeft(array('coop' => 'sistema.cooperativas'), 'nf.id_cooperativa = coop.id', array('id as id_cooperativa', 'cnpj', 'ds_nome_cooperativa'))
            ->joinLeft(array('usc' => 'sistema.usuarios'), 'usc.id = nf.id_usuario_criacao', 'usc.ds_nome_usuario as ds_nome_usuario_criacao')
            ->joinLeft(array('usa' => 'sistema.usuarios'), 'usa.id = nf.id_usuario_alteracao', 'usa.ds_nome_usuario as ds_nome_usuario_alteracao')
            ->where('pnf.id_processo = ?', $idProcesso);
        
        return $this->fetchAll($query)->toArray();
    }

    public function getStatusByIdProcesso(int $idProcesso): array {
        $query = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('pnf' => $this->_schema.'.'.$this->_name))
            ->join(array('st' => 'sistema.status'), 'st.id = pnf.id_status_arquivo', array('id', 'ds_status', 'ds_chave'))
            ->where('pnf.id_processo = ?', $idProcesso);

        $result = $this->fetchAll($query)->toArray()[0];

        if (is_array($result)) {
            return $result;
        } else {
            $Status = new Sistema_Model_Status();
            $id = $Status->getIdByChaveTipoChave('NAO_ENVIADA','NOTAS_FISCAIS');
            return array (
                'id' => $id,
                'ds_status' => $Status->getNameById($id),
                'ds_chave' => $Status->getChave($id)
            );
        }
    }

    public function updateStatus(int $idProcesso, int $idStatus) {
        $Row = $this->fetchRow('id_processo = ' . $idProcesso);
        $Row->id_status_arquivo = $idStatus;
        if ($Row->save()) {
            return (new Sinistro2_Model_HistoricoProcessosNotasFiscais())->save(
                $Row->id,
                'Notas alteradas para o stauts ' . (new Sistema_Model_Status())->getNameById($Row->id_status_arquivo)
            );
        }
    }

    public function updateStatusDigitado(int $idProcesso, int $idStatus) {
        $Row = $this->fetchRow('id_processo = ' . $idProcesso);
        $Row->id_status = $idStatus;

        return $Row->save();
    }
}