<?php

/**
 * Script criado para gerar endossos que desfazem a subvenção federal
 * Deve ser passado um arquivo .csv com as colunas:
 * Proposta | Parcelas | Valor Prêmio | Valor Subvenção Federal | Valor Parcela 1 | Data Vencimento 1 | Valor Parcela 2 | Data Vencimento 2 | ...
 */
$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');

$linhas = array();
$nro_de_endosso = 0;
$ambiente = 'docker';
$host = 'localhost';
$protocolo = 'http';
$cabecalho = true;

//criando arquivo de log vazio
$filename = '/tmp/tonismar.' . date('YmdGis') . '.log';
$whandle = @fopen($filename, 'a');
$caminhoLogFile = __DIR__ . '/application/upload_files/temp/log_robo_endosso_federal_' . date('Ymd') . '.txt';

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

preg_match("/^agrobr-app02\.*/", gethostname(), $matches);

if (count($matches) > 0) {
    $ambiente = 'production';
    $host = 'agronet.agrobrasilseguros.com.br';
    $protocolo = 'https';
}

$Curl = new Agro_Curl($host, $protocolo);

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

if ($handle) {
    $aumentoPercentualSubvencao = !empty($argv[2]);

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

        $dados = explode(';', $buffer);

        if (empty($dados[0])) {
            continue;
        }

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

        $result = $Curl->getResult();

        print_r($result->id);

        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 do subsídio federal em virtude da indisponibilidade de recursos públicos do benefício ao segurado.';

            if ($aumentoPercentualSubvencao) {
                $array_post['ds_observacao'] = 'Endosso de aumento do percentual da subvenção federal.';
            }

            $Curl->setUrl('/endosso/ajax/observacoeslote');
            $Curl->doRequest('POST', $array_post);

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

            print_r($result);

            $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 pois não há alteração no valor do prêmio
            $Curl->setUrl('/endosso/ajax/coberturaslote');
            $Curl->doRequest('POST', $array_post);

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

            print_r($result);
            */

            //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'] = 1;
                $array_post['cobrar_subvencao_estadual'] = 0;
                $array_post['parcelas_endosso'] = $dados[1];
                $array_post['id_motivo_cobrar_subvencao_federal'] = 4;
                $array_post['vl_subvencao_federal'] = $dados[3];
                $array_post['aumentoPercentualSubvencao'] = $aumentoPercentualSubvencao;

                $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();
                print_r($result); 
                $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

            print_r($result);

            //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();
            }

            print_r($result);

            //se foi transmitida gera o boleto

            if (!$aumentoPercentualSubvencao) {
                //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.';
                }

                $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] . '.';
}
?>
