<?php

/**
 * Script criado para gerar endossos que desfazem a subvenção federal
 * Deve ser passado um arquivo .csv com as colunas:
 * proposta, observacao, premio, valor de subvencao e nro de parcelas
 */
$tempo_inicio = date('H:i:s'); //hora que termina de endossar todas propostas passada pelo arquivo.
$mail_content = "Tempo de inicio do script: " . $tempo_inicio . ".<br><br>";

require_once('Agro_Curl.php');
$Curl = new Agro_Curl('localhost','http');
$linhas = array();
$nro_de_endosso = 0;

//criando arquivo de log vazio
$filename = '/tmp/tonismar.' . date('YmdGis') . '.log';
$whandle = @fopen($filename, 'a');

//lendo arquivo com propostas e nro de parcelas
//padrao do arquivo .csv proposta;nr_de_parcelas
$handle = @fopen("$argv[1]", 'r');

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$config = new Zend_Config_Ini('../application/config/application.ini', 'docker');
$Adapter = Zend_Db::factory('PDO_PGSQL', $config->resources->db->params);
Zend_Db_Table_Abstract::setDefaultAdapter($Adapter);
$db = Zend_Db_Table::getDefaultAdapter();

if ($handle) {

    //faz até final de arquivo de entrada acabar
    while (($buffer = fgets($handle, 4096)) !== false) {

        $dados = explode(';', $buffer);
        $Curl->setUrl('/endosso/proposta/duplicarlote/id/' . $dados[0] . '/nr_parcelas/' . $dados[1] .'/is_lote/true');
        $Curl->doRequest();

        $result = $Curl->getResult();

        if ($result->id) {
            $id_proposta_endossada = $result->id;

            //INICIO OBSERVACAO
            $array_post['id_proposta'] = $id_proposta_endossada;
            $array_post['ds_observacao'] = 'Endosso de cobrança da subvenção estadual em virtude da indisponibilidade de recursos públicos.';
            $Curl->setUrl('/endosso/ajax/observacoeslote');
            $Curl->doRequest('POST', $array_post);

            $result = $Curl->getResult();
            //FIM OBSERVACAO

            $array_post = array();
            $sum_vl_premio = 0;
            $lmga_total = 0;

	        $sql_lmga = $db->select()
	    	    ->from(array('iseg' => 'seguro.itens_segurados'), 'sum(vl_lmga) as vl_lmga_total')
	    	    ->where('iseg.id_proposta = ?', $id_proposta_endossada);
	        $lmga_total = $db->fetchAll($sql_lmga);

            //INICIO RESUMOS E COBERTURAS
            $resumo = $db->select();
            $resumo->from(array('p' => 'seguro.propostas_coberturas'), array('fl_principal', 'vl_franquia', 'vl_taxa', 'vl_premio', 'vl_lmi', 'id_cobertura'));
            $resumo->join(array('c' => 'produto.coberturas'), 'c.id = p.id_cobertura', array('ds_chave_cobertura'));
            $resumo->join(array('pr' => 'seguro.propostas'), 'p.id_proposta = pr.id');
            $resumo->join(array('pc' => 'produto.produtos_coberturas'), 'pc.id_produto = pr.id_produto and pc.id_cobertura = p.id_cobertura', array('fl_contratacao_automatica', 'cd_cobertura_seguradora'));
            $resumo->where('id_proposta = ?', $id_proposta_endossada);
            $resumo->where('fl_contratacao_automatica = false');
            $resumo->order('fl_principal desc');
            $resumo_coberturas = $db->fetchAll($resumo);

            foreach ($resumo_coberturas as $cobertura) {
                $cob[$cobertura['id_cobertura']]['fl_principal'] = $cobertura['fl_principal'];
                $cob[$cobertura['id_cobertura']]['id_cobertura'] = $cobertura['id_cobertura'];
                $cob[$cobertura['id_cobertura']]['vl_franquia'] = $cobertura['vl_franquia'];
                $cob[$cobertura['id_cobertura']]['vl_lmi'] = $cobertura['vl_lmi'];
                if ($cobertura['fl_principal'] == false) {
                    $cob[$cobertura['id_cobertura']]['vl_premio'] = $cobertura['vl_premio'];
                    $cob[$cobertura['id_cobertura']]['vl_taxa'] = $cobertura['vl_taxa'];
                } else {
		            $cob[$cobertura['id_cobertura']]['vl_premio'] = $dados[2];
   		            $cob[$cobertura['id_cobertura']]['vl_taxa'] = number_format(($dados[2] / $lmga_total[0]['vl_lmga_total']) * 100, 5, '.', '');
                }

                $sum_vl_premio += $cobertura['vl_premio'];
            }

            $array_post['coberturas'] = $cob;
            $array_post['vl_premio_liquido'] = $sum_vl_premio;
            $array_post['vl_premio_pagar'] = $sum_vl_premio;
            $array_post['vl_custo_apolice'] = 0;
            $array_post['id_proposta'] = $id_proposta_endossada;
	    //COMENTADO AS CHAMADAS POIS NAO TEM ALTERACAO DE PREMIO
	    //$Curl->setUrl('/endosso/ajax/coberturaslote');
            //$Curl->doRequest('POST', $array_post);

            //$result = $Curl->getResult();
            //FIM RESUMOS E COBERTURAS

            //INICIO COBRA SUBVENCAO SEGURADO / PARCELAMENTO
            $array_post = array();
            $cob = array();
            
            if ($result->status == true) {
                $array_post['id_proposta'] = $id_proposta_endossada;
                $array_post['cobrar_subvencao_federal'] = 0;
                $array_post['cobrar_subvencao_estadual'] = 1;
                $array_post['parcelas_endosso'] = $dados[1];
                $array_post['id_motivo_cobrar_subvencao_estadual'] = 4;
                $array_post['vl_subvencao_estadual'] = $dados[3];

                $parcelas = array();
                for ($i=0; $i<$dados[1]; $i++) {
                    $parcelas[] = array('valor' => $dados[4+($i * 2)], 'vencimento' => $dados[5+($i * 2)]);
                } 

                $array_post['parcelas'] = $parcelas;
                $Curl->setUrl('/endosso/ajax/cobrasubvencaoseguradolote');
                $Curl->doRequest('POST', $array_post);
                $result = $Curl->getResult();
               
                $cob[$cobertura['id_cobertura']]['vl_taxa'] = $cobertura['vl_taxa'];
                $decoded_result = json_decode(json_encode($result), true);
                $i=0;
                if (is_array($decoded_result['message'])) {
                    $parcela = array();
                    foreach( $decoded_result['message'] as $parc) {
                        $i++;
                        $parcela[$i]['liquido'] = $parc['vl_total'];
                        $parcela[$i]['federal'] = $parc['vl_subvencao_federal'];
                        $parcela[$i]['estadual'] = $parc['vl_subvencao_estadual'];
                        $parcela[$i]['segurado'] = $parc['vl_segurado'];
                        $parcela[$i]['vencimento'] = $parc['dt_vencimento'];
                    }

                    $array_post['parcela'] = $parcela;

                    $Curl->setUrl('/endosso/ajax/parcelamentolote');
                    $Curl->doRequest('POST', $array_post);
                    $result = $Curl->getResult();
                }
            } else {
                $Curl->sendMail('Problema na proposta ('.$dados[0].')');
                die('Ocorreu erro proposta: '.$dados[0]);
            }
            //FIM COBRA SUBVENCAO SEGURADO / PARCELAMENTO

            //se o endosso foi gerado com sucesso, pega o id_proposta de endosso
            if ($id_proposta_endossada) {
                $Curl->setUrl('/endosso/ajax/finaliza/id_proposta/' . $id_proposta_endossada . '/status/AGUARDANDO_ENVIO_SEG/tp_endosso/1/fl_lote/true');
                $Curl->doRequest();

                $result = $Curl->getResult();
            }

            //se foi transmitida gera o boleto

            // Comentado em Dez/2019 para agilizar a emissão vários endossos.
            if (trim($result->message) == trim('Endosso transmitido e emitido com sucesso.')) {
                $message = $result->message;
                $Curl->setUrl('/default/gerarboleto/gerarboleto/id_proposta/' . $id_proposta_endossada);
                $Curl->doRequest();

                $result = $Curl->getResult();
            }

           // se boleto foi gerado com sucesso
            if ($result->status == true) {
                $boleto = 'Boleto gerado com sucesso.';
            } else {
                $boleto = 'Erro ao gerar boleto.';
            } 

	    // até aqui
	    
            $lin = $dados[0] . ';' . $id_proposta_endossada . ';' . $message . ';' . $boleto . ';' . $dados[2] . "\n";

            fputs($whandle, $lin);
            $mail_content .= $lin . '<br>';

            unset($lin);
        } else {
            $Curl->sendMail('Erro ao gerar endosso da proposta ('.$dados[0].').');
        }

        $nro_de_endosso++;

        if (($nro_de_endosso % 20) == 0) {
            sleep(120);
        }
    }

    if (!feof($handle)) {
        echo "Error: inesperado\n";
    }

    $tempo_fim = date('H:i:s'); //hora que termina de endossar todas propostas passada pelo arquivo.
    $mail_content .= "<br><br>Tempo de término do script: " . $tempo_fim . ".";

    //$Curl->sendMail($mail_content);

    fclose($handle);
    fclose($whandle);
} else {
    echo 'Erro ao abrir arquivo ' . $argv[1] . '.';
}
?>
