<?
/**
 * Controller
 *
 * Laudo final Tipo LF005 / Safra17
 *
 * @author Fernando Nunes
 * @date 21/07/2011
 *
 */
class Safra17_Lf005itemseguradoController extends Agro_Controller_Action {

	public function init() {
		$this->view->title = 'Sinistro » Processos » Laudo Final » Totalização de Perdas';
	}

	public function getModel() {
	    return new Safra17_Model_Lf005ItensSegurados();
	}

	public function getForm($dados = array()) {
        return new Safra17_Form_Lf005ItemSegurado(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');
        $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);

        $this->view->back = '/'.$this->_request->module.'/lf005/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 {

	            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
	
	            $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;
	               foreach($dados['ItemSegurado'] as $item => $dadosItem){
	                 	$arrItem = array_merge($ValoresPerdas, $dadosItem);
	                   	$params['id_laudo_final_item_segurado'] = $Model->save($dados, $item, $arrItem, $flUploadFile);
	                   	
	                   	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_Lf005ItensSegurados = $this->getModel();

            $dataLf005ItensSegurados = $Model_Lf005ItensSegurados->getDataLaudoFinalItemSegurado($params['id_laudo_final']);

            $count = 0;
            foreach($dataLf005ItensSegurados 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;

	        // 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] * $count;
	
	                $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;
	            }
	        }
	
	        // 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;
    }
}
