<?php
/**
 * @author Tonismar
 * @date 04/06/2018
 *
 */
class Regulacao_Lf033itemseguradoController extends Agro_Controller_Action {
    
    public function init() {
        $this->view->title = 'Sinistro » Processos » Laudo Final » Totalização de Perdas';
    }
    
    public function getModel() {
        return new Regulacao_Model_Lf033ItensSegurados();
    }
    
    public function getForm($dados = array()) {
        return new Regulacao_Form_Lf033ItemSegurado(array('dados'=>$dados), 3);
    }

    public function formAction() {
        $params = $this->getRequest()->getParams();
        
        $dadosForm = array();
        
        $arAmostras = array();
        
        $dadosForm['id_laudo_final']   = $params['id_laudo_final'];
        $dadosForm['id_item_segurado'] = $params['id_item_segurado'];
        $dadosForm['id_proposta']      = $params['id_proposta'];
        $dadosForm['id_vistoria']      = $params['id_vistoria'];
        $dadosForm['id_cobertura']     = $params['id_cobertura'];
        
        $ProcessosEmpresas = new Sinistro2_Model_ProcessosEmpresas();
        $dadosForm['id_empresa_vistoriadora'] = $ProcessosEmpresas->getEmpresaByProcesso($params['id_processo']);
        
        $this->view->jQuery()->addJavascriptFile('/resources/javascript/sinistro2/laudofinalitemsegurado.js?nocache='.rand(1,1000));
        $this->view->jQuery()->addStylesheet('/resources/css/sinistro2/laudo.css');
        
        $Cultura = new Produto_Model_Culturas();
        $dadosForm['id_cultura'] = $Cultura->getCulturaByProposta($params['id_proposta']);
        
        $this->view->id_cultura = $dadosForm['id_cultura'];
        $params['id_cultura'] = $dadosForm['id_cultura'];
        
        // Configura paramentro para campo 'Área Sinistrada' ser um campo bloqueado apenas exibindo a área da quadra
        $dadosForm['fl_area_sinistrada_readonly'] = true;
        
        $Model = $this->getModel();
        $Form = $this->getForm($dadosForm);
        
        if($params['fl_item_digitado']){
            $this->view->back = '/sinistro2/processo/view/id/'.$params["id_processo"].'#regulacao_laudos';
        } else {
            $this->view->back = '/'.$this->_request->module."/lf033/form/id_proposta/".$params["id_proposta"]."/id_processo/".$params["id_processo"]."/id_cobertura/".$params["id_cobertura"]."/id_vistoria/".$params["id_vistoria"]."/id_laudo_final/".$params["id_laudo_final"];
            //$this->view->back = '/'.$this->_request->module.'/lf033/form/id_laudo_final/'.$params['id_laudo_final'].'/id_processo/'.$params['id_processo'];
        }
        
        if($this->getRequest()->isPost()) {
            
            $Form->populate($params);
            
            $ValoresPerdas = $this->calculaPerdas($params);
            
            
            //VALIDACAO DE DADOS OBRIGATORIOS
            $dados = $Form->getValues();
            
            if($dados['fl_assinatura_segurado'] != '0' && $dados['fl_assinatura_segurado'] != '1'){
                $erros[] = "Informe a assinatura do segurado";
            }
            
            if(!$dados['fl_assinatura_regulador']){
                $erros[] = "Informe a assinatura do regulador";
            }
            
            if(!$dados['dt_vistoria_data']){
                $erros[] = "Informe a data da vistoria";
            }
            
            if(!$dados['vistoriadores']){
                $erros[] = "Informe o vistoriador";
            }
            
            foreach($dados['ItemSegurado'] as $item => $dadosItem){
                $nr_item_segurado = $dadosItem['nr_item_segurado_'.$item];
                
                if($dadosItem['fl_nao_vistoriada_'.$item] == 1 && !$dadosItem['id_motivo_quadra_nao_vistoriada_'.$item]){
                    $erros[] = "Informe o motivo da quadra não vistoridada. [Item: {$nr_item_segurado}]";
                }
                
                if($dadosItem['fl_nao_vistoriada_'.$item] == 0){
                    
                    if(!$dadosItem['fl_floracao_'.$item]){
                        $erros[] = "Informe as condições de floração. [Item: {$nr_item_segurado}]";
                    }
                    
                    if(!isset($dadosItem['fl_indenizacao_fitossanitaria_'.$item])){
                        $erros[] = "Informe sobre indenização fitossantiária. [Item: {$nr_item_segurado}]";
                    }
                    
                    if(!$dadosItem['vl_percent_colhido_'.$item]){
                        $erros[] = "Informe os percentuais colhidos. [Item: {$nr_item_segurado}]";
                    }
                    
                    if(!$dadosItem['ds_coordenadas_geograficas_'.$item]){
                        $erros[] = "Informe as coordenadas geográficas. [Item: {$nr_item_segurado}]";
                    }
                    
                    if(!$dadosItem['id_estadio_fenologico_'.$item]){
                        $erros[] = "Informe os estadios fenológicos. [Item: {$nr_item_segurado}]";
                    }
                }
            }
            
            //FIM VALIDACAO DE DADOS OBRIGATORIOS
            
            if(is_array($erros)){
                $this->view->showMessage($erros, 'error');
            } else {
                
                $isErro = false;
                $dados = $Form->getValues();
                
                if(is_array($this->getRequest()->getParam('avisos_relacionados'))){
                    $dados['avisos_relacionados'] = $this->getRequest()->getParam('avisos_relacionados');
                }
                
                $dados['dt_vistoria'] = Agro_Util::formatDate($dados['dt_vistoria_data'].' '.$dados['dt_vistoria_hora'].' '.$dados['dt_vistoria_minutos'], 'yyyy-MM-dd HH:mm:ss');
                
                if(!$ValoresPerdas['nr_total_cachos'] == 0) {
                    $erros[] = 'Não foram informados valores para as perdas';
                    $this->view->showMessage($erros, 'error');
                } else {
                    
                    $flUploadFile = true;
                    Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
                    
                    foreach($dados['ItemSegurado'] as $item => $dadosItem){
                        
                        $arrItem = array_merge($ValoresPerdas, $dadosItem);
                        
                        $params['id_laudo_final_item_segurado'] = $Model->save($dados, $item, $arrItem, $flUploadFile);
                        
                        if ($params['id_laudo_final_item_segurado'] == false) {
                            break;
                        }
                        
                        if($flUploadFile == true){
                            $dados['ds_nome_laudo_fisico'] = $Model->getNomeLaudoFisico($params['id_laudo_final_item_segurado']);
                        }
                        
                        $flUploadFile = false;
                    }
                    
                    if($params['id_laudo_final_item_segurado']) {
                        Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
                        $this->view->showMessage(MSG_SUCCESS,'success');
                    } else {
                        Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
                        $this->view->showMessage($Model->getMessages(), 'error');
                    }
                }
            }
        }
        
        $this->view->data = array();
        $this->view->data['id_laudo_final'] = $params['id_laudo_final'];
        
        if($params['id_laudo_final_item_segurado']) {
            $Model_Lf033ItensSegurados = $this->getModel();
            
            $dataLf033ItensSegurados = $Model_Lf033ItensSegurados->getDataLaudoFinalItemSegurado($params['id_laudo_final']);
            
            $count = 0;
            foreach($dataLf033ItensSegurados as $item){
                
                if($item['id_item_segurado'] > 0){
                    
                    $id_item = $item['id_item_segurado'];
                    
                    if($count == 0){
                        $arr['dt_vistoria'] = $item['dt_vistoria'];
                        $arr['fl_assinatura_regulador']= $item['fl_assinatura_regulador'];
                        $arr['fl_assinatura_segurado'] = $item['fl_assinatura_segurado'];
                        $arr['ds_observacao']= $item['ds_observacao'];
                        $arr['ds_aspectos_gerais_cultura'] = $item['ds_aspectos_gerais_cultura'];
                        $arr['vl_area_sinistrada'] = $item['vl_area_sinistrada'];
                        $arr['dt_vistoria_data'] = $item['dt_vistoria_data'];
                        $arr['dt_vistoria_hora'] = $item['dt_vistoria_hora'];
                        $arr['dt_vistoria_minutos'] = $item['dt_vistoria_minutos'];
                        $arr['vl_rendimento_final_lavoura'] = $item['vl_rendimento_final_lavoura'];
                        $arr['fl_avalia_danos_anteriores'] = $item['fl_avalia_danos_anteriores'];
                        $arr['ds_observacao_assinatura_regulador'] = $item['ds_observacao_assinatura_regulador'];
                        $arr['ds_observacao_assinatura_segurado'] = $item['ds_observacao_assinatura_segurado'];
                        $arr['vl_ha_area_afetada'] = $item['vl_ha_area_afetada'];
                        $arr['ds_nome_laudo_fisico'] = $item['ds_nome_laudo_fisico'];
                        $arr['vistoriadores'] = $item['vistoriadores'];
                        $arr['avisos_relacionados'] = $item['avisos_relacionados'];
                    }
                    
                    $arr['nr_amostras_' . $id_item]	= $item['nr_amostras'];
                    $arr['nr_cachos_percent_perda_0_' . $id_item]	= $item['nr_cachos_percent_perda_0'];
                    $arr['vl_percent_perda_0_' . $id_item]	= $item['vl_percent_perda_0'];
                    $arr['nr_cachos_percent_perda_5_' . $id_item]	= $item['nr_cachos_percent_perda_5'];
                    $arr['vl_percent_perda_5_' . $id_item]	= $item['vl_percent_perda_5'];
                    $arr['nr_cachos_percent_perda_10_' . $id_item]	= $item['nr_cachos_percent_perda_10'];
                    $arr['vl_percent_perda_10_' . $id_item]	= $item['vl_percent_perda_10'];
                    $arr['nr_cachos_percent_perda_20_' . $id_item]	= $item['nr_cachos_percent_perda_20'];
                    $arr['vl_percent_perda_20_' . $id_item]	= $item['vl_percent_perda_20'];
                    $arr['nr_cachos_percent_perda_30_' . $id_item]	= $item['nr_cachos_percent_perda_30'];
                    $arr['vl_percent_perda_30_' . $id_item]	= $item['vl_percent_perda_30'];
                    $arr['nr_cachos_percent_perda_40_' . $id_item]	= $item['nr_cachos_percent_perda_40'];
                    $arr['vl_percent_perda_40_' . $id_item]	= $item['vl_percent_perda_40'];
                    $arr['nr_cachos_percent_perda_50_' . $id_item]	= $item['nr_cachos_percent_perda_50'];
                    $arr['vl_percent_perda_50_' . $id_item]	= $item['vl_percent_perda_50'];
                    $arr['nr_cachos_percent_perda_60_' . $id_item]	= $item['nr_cachos_percent_perda_60'];
                    $arr['vl_percent_perda_60_' . $id_item]	= $item['vl_percent_perda_60'];
                    $arr['nr_cachos_percent_perda_70_' . $id_item]	= $item['nr_cachos_percent_perda_70'];
                    $arr['vl_percent_perda_70_' . $id_item]	= $item['vl_percent_perda_70'];
                    $arr['nr_cachos_percent_perda_80_' . $id_item]	= $item['nr_cachos_percent_perda_80'];
                    $arr['vl_percent_perda_80_' . $id_item]	= $item['vl_percent_perda_80'];
                    $arr['nr_cachos_percent_perda_90_' . $id_item]	= $item['nr_cachos_percent_perda_90'];
                    $arr['vl_percent_perda_90_' . $id_item]	= $item['vl_percent_perda_90'];
                    $arr['nr_cachos_percent_perda_100_' . $id_item]	= $item['nr_cachos_percent_perda_100'];
                    $arr['vl_percent_perda_100_' . $id_item]	= $item['vl_percent_perda_100'];
                    $arr['nr_total_cachos_' . $id_item]	= $item['nr_total_cachos'];
                    $arr['vl_percent_perda_soma_' . $id_item]	= $item['vl_percent_perda_soma'];
                    $arr['fl_indenizacao_fitossanitaria_' . $id_item]	= $item['fl_indenizacao_fitossanitaria'];
                    $arr['fl_floracao_' . $id_item]	= $item['fl_floracao'];
                    $arr['id_estadio_fenologico_' . $id_item]	= $item['id_estadio_fenologico'];
                    $arr['id_' . $id_item]	= $item['id'];
                    $arr['id_item_segurado_' . $id_item]	= $item['id_item_segurado'];
                    $arr['vl_percent_perdas_' . $id_item]	= $item['vl_percent_perdas'];
                    $arr['fl_nao_vistoriada_' . $id_item]	= $item['fl_nao_vistoriada'];
                    $arr['id_motivo_quadra_nao_vistoriada_' . $id_item]	= $item['id_motivo_quadra_nao_vistoriada'];
                    $arr['vl_area_sinistrada_' . $id_item]	= $item['vl_area_sinistrada'];
                    $arr['vl_percent_area_afetada_' . $id_item]	= $item['vl_percent_area_afetada'];
                    $arr['ds_coordenadas_geograficas_' . $id_item]  	= $item['ds_coordenadas_geograficas'];
                    $arr['vl_percent_colhido_' . $id_item] = $item['vl_percent_colhido'];
                    
                    $count++;
                }
            }
            
            if ($arr) {
                $params = array_merge($arr, $params);
            }
            
        }
        
        $Form->populate($params);
        
        $this->view->form = $Form;
        $this->view->data = $params;
    }
    
    public function calculaPerdas($params) {
        
        $data = array();
        
        foreach($params['ItemSegurado'] as $item => $amostra) {
            $count = 0;
            $multi_factor = 0;
            
            // Nº total de cachos: soma das quantidades informados em todas as faixas de valores
            $data['nr_total_cachos_'.$item] = 0;
            
            // Soma de todas as multiplicações das quantidades informadas pelo percentual correpondente
            $data['vl_percent_perda_soma_'.$item] = 0;
            
            // Percorre as faixas de valores, multiplicando o quantidade informada pelo percentual correpondente
            while ($count <= 100) {
                if ($amostra['nr_cachos_percent_perda_'.$count.'_' . $item]) {
                    $data['nr_cachos_percent_perda_'.$count.'_' . $item] = $amostra['nr_cachos_percent_perda_'.$count.'_' . $item];
                    $data['vl_percent_perda_'.$count.'_' . $item]        = $amostra['nr_cachos_percent_perda_'.$count.'_' . $item] * $multi_factor;
                    
                    $data['nr_total_cachos_'.$item] += $amostra['nr_cachos_percent_perda_'.$count.'_' . $item];
                    $data['vl_percent_perda_soma_'.$item] += $data['vl_percent_perda_'.$count.'_' . $item];
                }
                
                if ($count < 10) {
                    $count += 5;
                } else {
                    $count += 10;
                }
            
                if ($amostra['fl_floracao_'.$item] == 'pos') {
                    if ($count >= 50) $multi_factor = 100; else $multi_factor = $count * 2;
                    switch ($count) {
                        case 30: $multi_factor = 42; break;
                        case 40: $multi_factor = 62; break; 
                        case 50: $multi_factor = 78; break;
                        case 60: $multi_factor = 90; break;
                        case 70:
                        case 80:
                        case 90: $multi_factor = 100; break;
                        default: $multi_factor = $count; break;
                    }
                } else {
                    $multi_factor = $count;
                }
            }
            
            // Cálculo o percentual de perdas final
            if ($data['nr_total_cachos_'.$item] > 0) {
                $data['vl_percent_perdas_'.$item] = round($data['vl_percent_perda_soma_'.$item] / $data['nr_total_cachos_'.$item], 2);
            }
        }
        
        return $data;
    }    
}