<?php
/**
 * Model
 * 
 * Laudo final Tipo LF018 - Amostras / Safra17 - Milho S2 - Geada
 * 
 * @author Samir Ortiz
 * @date 26/09/2012
 *
 */
class Regulacao_Model_Lf018ItensSeguradosAmostras extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Regulacao_Model_Row_Lf018ItemSeguradoAmostras';
	protected $_schema 	= 'regulacao';
	protected $_name 	= 'lf018_itens_segurados_amostras';
	protected $_primary = 'id';
	public 	  $_order 	= 'nr_amostra';
		
	public function save($dados) {
		$ModelIS = new Regulacao_Model_Lf018ItensSegurados();

		$dados = $this->prepararDados($dados);

		if ($this->validar($dados)){
		
			$dados = $this->calcular($dados);
			
			$dados["id_laudo_final_item_segurado"] = $ModelIS->save($dados);

			if ($dados["id_laudo_final_item_segurado"]){
				try {
					$this->delete($dados["id_laudo_final_item_segurado"], "id_laudo_final_item_segurado");
					
					foreach ($dados["amostras"] as $key => $amostra) {
						$amostra["nr_amostra"] = $key;
						$amostra["id_laudo_final_item_segurado"] = $dados["id_laudo_final_item_segurado"];

						$this->insert($amostra);
					}
	
					$this->setMessage("Laudo salvo com sucesso.");
					
					return $dados["id_laudo_final_item_segurado"];
					
				} catch (Exception $e) {
					$this->setMessage($e->getMessage());
					return false;
				}
			} else {
				$this->setMessage($ModelIS->getMessages());
				return false;
			}
		}
	}

	public function validar($dados){
		$messages = array();
		
		if(!count($dados['amostras'])){
			$messages[] = "Preencha ao menos uma amostra."; 
		}

		foreach($dados['amostras'] as $chave => $valor){
			if($valor['populacao_stand_inicial'] < $valor['populacao_plantas_destruidas']){
				$messages[] = "O valor de Plantas Destruídas não pode ser maior que o Stand Inicial - Amostra ".$chave;	
			}
		}
	
		
		if (count($messages)){
			$this->setMessage("Os itens citados abaixo são de preenchimento obrigatório:<ul><li>".implode("</li><li>", $messages)."</li></ul>");
			return false;

		} else {
			return true;
		}
	}	

	
	public function calcular($dados){

		$dados["nr_amostras"] = count($dados['amostras']);
		
		for ($i = 1; $i <= $dados["nr_amostras"]; $i++) {

			//stand
			if($dados['amostras'][$i]['vl_stand'] != null){
				$dados['amostras'][$i]['vl_stand'] 			= $dados['amostras'][$i]['vl_stand'];
				$dados['amostras'][$i]['vl_stand_perda'] 	= $dados['amostras'][$i]['vl_stand_perda'];
				$vl_stand += $dados['amostras'][$i]['vl_stand'];
				$vl_stand_perda += $dados['amostras'][$i]['vl_stand_perda'];
				$totalAmostrasStand = $i;
			}

			//espigas
			if($dados['amostras'][$i]['vl_espiga_perda_1'] != null){
				$contEspigas = 0;
				$danoEspigas = 0;
				for($j = 1; $j <= 10; $j++){
					if($dados['amostras'][$i]['vl_espiga_perda_'.$j] != null){
						$danoEspigas += $dados['amostras'][$i]['vl_espiga_perda_'.$j];
						$contEspigas++;
					}
				}

				//média amostra espiga
				$dados['amostras'][$i]['vl_espiga_perda_media'] = $danoEspigas/$contEspigas;
				$totalMediaEspiga += $dados['amostras'][$i]['vl_espiga_perda_media'];
				$totalAmostrasEspiga = $i;
			}
			
			//colmos
			if($dados['amostras'][$i]['vl_colmo_perda_1'] != null){
				$contColmos = 0;
				$danoColmos = 0;
				for($k = 1; $k <= 10; $k++){
					if($dados['amostras'][$i]['vl_colmo_perda_'.$k] != null){
						$danoColmos += $dados['amostras'][$i]['vl_colmo_perda_'.$k];
						$contColmos++;
					}
				}
			
				//média amostra colmo
				$dados['amostras'][$i]['vl_colmo_perda_media'] = $danoColmos/$contColmos;
				
				//limitado a 10%
				if($dados['amostras'][$i]['vl_colmo_perda_media'] > 10){
					$dados['amostras'][$i]['vl_colmo_perda_media'] = 10;
				}
				
				$totalMediaColmo += $dados['amostras'][$i]['vl_colmo_perda_media'];
				$totalAmostrasColmo = $i;
				//
			}
			
			//chochos
			if($dados['amostras'][$i]['vl_chocho_perda_1'] != null){
				$contChochos = 0;
				$danoChochos = 0;
				for($l = 1; $l <= 10; $l++){
					if($dados['amostras'][$i]['vl_chocho_perda_'.$l] != null){
						$danoChochos += $dados['amostras'][$i]['vl_chocho_perda_'.$l];
						$contChochos++;
					}
				}

				//media amostra chocho
				$dados['amostras'][$i]['vl_chocho_perda_media'] = $danoChochos/$contChochos;
				
				if($dados['amostras'][$i]['vl_chocho_perda_media'] < 25){
					$dados['amostras'][$i]['vl_chocho_perda_media'] = 0;
					
				}else if($dados['amostras'][$i]['vl_chocho_perda_media'] >= 25 && $dados['amostras'][$i]['vl_chocho_perda_media'] < 50){
					$dados['amostras'][$i]['vl_chocho_perda_media'] = 25;
					
				}else if($dados['amostras'][$i]['vl_chocho_perda_media'] >= 50 && $dados['amostras'][$i]['vl_chocho_perda_media'] < 75){
					$dados['amostras'][$i]['vl_chocho_perda_media'] = 40;
					
				}else if($dados['amostras'][$i]['vl_chocho_perda_media'] >= 75){
					$dados['amostras'][$i]['vl_chocho_perda_media'] = 60;

				}
				
				$totalMediaChocho += $dados['amostras'][$i]['vl_chocho_perda_media'];
				$totalAmotrasChocho = $i;
			}

			$percent_perda += ((1-($dados['amostras'][$i]['vl_espiga_perda_media']/100+(1-$dados['amostras'][$i]['vl_espiga_perda_media']/100)*$dados['amostras'][$i]['vl_colmo_perda_media']/100)))*$dados['amostras'][$i]['vl_chocho_perda_media']/100+(($dados['amostras'][$i]['vl_espiga_perda_media']/100+(1-$dados['amostras'][$i]['vl_espiga_perda_media']/100)*$dados['amostras'][$i]['vl_colmo_perda_media']/100));
			
		}

		//médias
		/*
		$dados['vl_media_stand_perda'] = $totalAmostrasStand ? (($vl_stand_perda/$vl_stand)*100) : 0;
		$dados['vl_media_espiga_perda'] = $totalMediaEspiga ? ($totalMediaEspiga/$totalAmostrasEspiga) : 0;
		$dados['vl_media_colmo_perda'] = $totalMediaColmo ? ($totalMediaColmo/$totalAmostrasColmo) : 0;
		$dados['vl_media_chocho_perda'] = $totalMediaChocho ? ($totalMediaChocho/$totalAmotrasChocho) : 0;
		*/
		
		
		$dados['vl_percent_total_perda_final'] = ($percent_perda * 100) / $dados['nr_amostras']; 
		
		return $dados;
	}
	
	public function prepararDados($dados){

		$return = array();
		
		$return["id_laudo_final"] 						= $dados["id_laudo_final"];
    	$return["id_vistoria"] 							= $dados["id_vistoria"];
    	$return["id_cobertura"] 						= $dados["id_cobertura"];
    	$return["fl_vistoria_preliminar"] 				= $dados["fl_vistoria_preliminar"];
	    $return["id_item_segurado"] 					= $dados["id_item_segurado"];
	    $return["id_proposta"] 							= $dados["id_proposta"];
	    $return["id_processo"]							= $dados["id_processo"];
	    $return["fl_nao_vistoriada"] 					= $dados["fl_nao_vistoriada"];
	    $return["id_motivo_quadra_nao_vistoriada"] 		= $dados["id_motivo_quadra_nao_vistoriada"];
	    $return["id_laudo_final_item_segurado"]	 		= $dados["id_laudo_final_item_segurado"]; 
	    $return["fl_avalia_danos_anteriores"] 			= $dados["fl_avalia_danos_anteriores"]; 
	    $return["vl_percent_colhido"] 					= $dados["vl_percent_colhido"];
	    $return["ds_coordenadas_geograficas"] 			= $dados["ds_coordenadas_geograficas"];
	    $return["fl_assinatura_segurado"] 				= $dados["fl_assinatura_segurado"];
	    $return["ds_observacao_assinatura_segurado"]	= $dados["ds_observacao_assinatura_segurado"]; 
    	$return["fl_assinatura_regulador"] 				= $dados["fl_assinatura_regulador"];
	    $return["ds_observacao_assinatura_regulador"]	= $dados["ds_observacao_assinatura_regulador"]; 
	    $return["ds_observacao"]						= $dados["ds_observacao"]; 
	    $return["dt_vistoria_data"] 					= $dados["dt_vistoria_data"];
	    $return["dt_vistoria_hora"] 					= $dados["dt_vistoria_hora"];
	    $return["dt_vistoria_minutos"] 					= $dados["dt_vistoria_minutos"];
	    $return["dt_vistoria"] 							= Agro_Util::joinDtVistoria($dados["dt_vistoria_data"], $dados["dt_vistoria_hora"], $dados["dt_vistoria_minutos"]);
		$return["vistoriadores"] 						= $dados["vistoriadores"];
		$return["auxiliares"]							= $dados["auxiliares"];
	    $return["id_estadio_fenologico"] 				= $dados["id_estadio_fenologico"];
	    
		$return["amostras"] = array();

		for ($i = 1; $i < 11; $i++) {
			if($dados["vl_stand-".$i] != null || $dados["vl_espiga_perda_".$i."-1"] || $dados["vl_colmo_perda_".$i."-1"] != null || $dados["vl_chocho_perda_".$i."-1"] != null){
				$return["amostras"][$i] = array(
					"vl_stand" 				=> ($dados["vl_stand-".$i] ? $dados["vl_stand-".$i] : null),
					"vl_stand_perda" 		=> ($dados["vl_stand_perda-".$i] ? $dados["vl_stand_perda-".$i] : null),
					"vl_colmo_perda_media" 	=> ($dados["vl_colmo_perda_media-".$i] ? $dados["vl_colmo_perda_media-".$i] : null),
					"vl_chocho_perda_media" => ($dados["vl_chocho_perda_media-".$i] ? $dados["vl_chocho_perda_media-".$i] : null),
					"vl_espiga_perda_media" => ($dados["vl_espiga_perda_media-".$i] ? $dados["vl_espiga_perda_media-".$i] : null)
					
				);
				
				for($j = 1; $j <= 10; $j++){
					if($dados["vl_espiga_perda_".$i."-".$j] != null){
						$espigas = array(
							"vl_espiga_perda_".$j => $dados["vl_espiga_perda_".$i."-".$j] 
						);
						
						$return["amostras"][$i] = array_merge($espigas,$return["amostras"][$i]);
					}

					if($dados["vl_colmo_perda_".$i."-".$j] != null){
						$colmos = array(
							"vl_colmo_perda_".$j => $dados["vl_colmo_perda_".$i."-".$j] 
						);
						
						$return["amostras"][$i] = array_merge($colmos,$return["amostras"][$i]);
					}					
					
					if($dados["vl_chocho_perda_".$i."-".$j] != null){
						$chochos = array(
							"vl_chocho_perda_".$j => $dados["vl_chocho_perda_".$i."-".$j] 
						);
						$return["amostras"][$i] = array_merge($chochos,$return["amostras"][$i]);
					}					
				}	
			}
		}

		$return["numero_amostras"]	= $dados["nr_amostras"];

		return $return;
	}
	
	public function get($idLaudoFinalItemSegurado){
	 	$ModelLfIS = new Sinistro2_Model_LaudosFinaisItensSegurados();
		$ModelIS = new Seguro_Model_ItensSegurados();
        
		/*
		 * Busca dados globais
		 */
		$dados = $ModelLfIS->getDataLaudoFinalItemSegurado($idLaudoFinalItemSegurado);
        
		/*
		 * Busca dados especialização
		 */			
		if (!$dados['fl_nao_vistoriada']) {
    		$select = $this->select()->setIntegrityCheck(false);
            $select->from(array("lfisX" => "$this->_schema.lf018_itens_segurados") , array("id_laudo_final_item_segurado", "nr_amostras", "vl_media_stand_perda", "vl_media_espiga_perda", "vl_media_colmo_perda", "vl_media_chocho_perda", "vl_percent_total_perda_final","id_estadio_fenologico"));
            $select->where('id_laudo_final_item_segurado = ?', $idLaudoFinalItemSegurado);
            
            $especializacao = $this->fetchRow($select);
            $especializacao = ($especializacao ? $especializacao->toArray() : array());
            
            $dados = array_merge($dados, $especializacao);
        }
        
        /*
         * Busca Amostras
         */
        $dados["amostras"] = array();

        if (!$dados['fl_nao_vistoriada']) {
            $amostras = $this->fetchAll("id_laudo_final_item_segurado = $idLaudoFinalItemSegurado");
            
            $amostras = ($amostras ? $amostras->toArray() : array());
            
            foreach ($amostras as $amostra){

            	$dados["amostras"][$amostra["nr_amostra"]] = $amostra;
            }
        }
        
        return $dados;
	}
}
