			<?php
/**
 * Model
 * 
 * Laudo final Tipo LF022 / Safra16 - CAnola - Granizo
 * 
 * @author Samir Ortiz
 * @date 07/10/2013
 *
 */
class Safra16_Model_Lf022ItensSeguradosAmostras extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Safra16_Model_Row_Lf022ItemSeguradoAmostras';
	protected $_schema 	= 'safra16';
	protected $_name 	= 'lf022_itens_segurados_amostras';
	protected $_primary = 'id';
	public 	  $_order 	= 'nr_amostra';
		
	public function save($dados) {
		$ModelIS = new Safra16_Model_Lf022ItensSegurados();

		$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']) < 1){
			$messages[] = "Preencha ao menos uma amostra."; 
		}
		
		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){
		
		$amostras = 0;
		for ($i = 1; $i < 11; $i++) {

			if($dados['amostras'][$i]['vl_stand'] != null || $dados['amostras'][$i]['vl_percent_desfolhamento'] != null || $dados['amostras'][$i]['vl_ramos'] != null || $dados['amostras'][$i]['vl_siliquas'] != null){
				//redução de população
				//calcula e soma os danos por redução de stand
				$dados['amostras'][$i]['vl_percent_stand_dano'] = $this->calculaReducaoStand(($dados['amostras'][$i]['vl_stand_perda']/$dados['amostras'][$i]['vl_stand'])*100, $dados['amostras'][$i]['vl_stand']);

				//desfolhamento
				$dados['amostras'][$i]['vl_percent_desfolhamento_dano'] = $this->calculaDesfolhamento($dados['amostras'][$i]['vl_percent_desfolhamento'], $dados['id_estadio_fenologico']);
			
				//ramos
				$dados['amostras'][$i]['vl_percent_ramos_dano'] = $this->calculaPerdaRamos(($dados['amostras'][$i]['vl_ramos_perda']/$dados['amostras'][$i]['vl_ramos'])*100, $dados['id_estadio_fenologico']);				

				//siliquas
				$dados['amostras'][$i]['vl_percent_siliquas_dano'] = ($dados['amostras'][$i]['vl_siliquas_perda']/$dados['amostras'][$i]['vl_siliquas'])*100;

				//dano à cultura por amostra																						
				$dados['amostras'][$i]['vl_percent_amostra_dano_final'] = ((1 - ($dados['amostras'][$i]['vl_percent_stand_dano'] / 100)) - ((1 - ($dados['amostras'][$i]['vl_percent_stand_dano'] / 100)) * ($dados['amostras'][$i]['vl_percent_desfolhamento_dano'])/100) - ((1 - ($dados['amostras'][$i]['vl_percent_stand_dano'] / 100)) - ((1 - ($dados['amostras'][$i]['vl_percent_stand_dano'] / 100)) * ($dados['amostras'][$i]['vl_percent_desfolhamento_dano'] / 100))) * ($dados['amostras'][$i]['vl_percent_ramos_dano'] / 100)) * 100;

				
				if($dados['amostras'][$i]['vl_percent_amostra_dano_final'] == 100){
					
					$dados['amostras'][$i]['vl_percent_amostra_dano_final'] = $dados['amostras'][$i]['vl_percent_siliquas_dano'];

				}else{
					$dados['amostras'][$i]['vl_percent_amostra_dano_final'] = (($dados['amostras'][$i]['vl_percent_stand_dano'] / 100) + ((1 - ($dados['amostras'][$i]['vl_percent_stand_dano'] / 100)) * ($dados['amostras'][$i]['vl_percent_desfolhamento_dano'] / 100)) + ((1 - ($dados['amostras'][$i]['vl_percent_stand_dano'] / 100)) - ((1 - ($dados['amostras'][$i]['vl_percent_stand_dano'] / 100)) * ($dados['amostras'][$i]['vl_percent_desfolhamento_dano'] / 100))) * ($dados['amostras'][$i]['vl_percent_ramos_dano'] / 100)) * 100;
				}
				
				$somaDanoGranizo += $dados['amostras'][$i]['vl_percent_amostra_dano_final'];
				$amostras++;
			}
		}

		//dano final
		$dados['vl_percent_total_perda_final'] = $somaDanoGranizo/$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['id_estadio_fenologico'] 				= $dados['id_estadio_fenologico'];
		$return['vl_area'] 								= $dados['vl_area'];
		
		$return["amostras"] = array();

		for ($i = 1; $i < 11; $i++) {
			if($dados["vl_stand-".$i] != null || $dados["vl_percent_desfolhamento-".$i] != null || $dados["vl_ramos-".$i] != null || $dados["vl_siliquas-".$i] != 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_percent_desfolhamento"	=> ($dados["vl_percent_desfolhamento-".$i] ? $dados["vl_percent_desfolhamento-".$i] : null),
					"vl_ramos" 					=> ($dados["vl_ramos-".$i] ? $dados["vl_ramos-".$i] : null),
					"vl_ramos_perda"			=> ($dados["vl_ramos_perda-".$i] ? $dados["vl_ramos_perda-".$i] : null),
					"vl_siliquas" 	  			=> ($dados["vl_siliquas-".$i] ? $dados["vl_siliquas-".$i] : null),
					"vl_siliquas_perda" 	  	=> ($dados["vl_siliquas_perda-".$i] ? $dados["vl_siliquas_perda-".$i] : null)
				);
			}
		}

		return $return;
	}	

	
	public function calculaReducaoStand($percentDano, $plantas){

		if ($plantas <= 14){
			if ($percentDano > 95){
				$reducaoStand = 93;
			}elseif ($percentDano > 90){
				$reducaoStand = 88;
			}elseif ($percentDano > 85){		
				$reducaoStand = 85;
			}elseif ($percentDano > 80){			
				$reducaoStand = 83;
			}elseif ($percentDano > 75){
				$reducaoStand = 75;
			}elseif ($percentDano > 70){
				$reducaoStand = 66;
			}elseif ($percentDano > 65){
				$reducaoStand = 50;
			}elseif ($percentDano > 60){
				$reducaoStand = 40;
			}elseif ($percentDano > 55){
				$reducaoStand = 30;
			}elseif ($percentDano > 50){
				$reducaoStand = 24;			
			}elseif ($percentDano > 45){
				$reducaoStand = 15;				
			}elseif ($percentDano > 40){
				$reducaoStand = 13;
			}elseif ($percentDano > 35){
				$reducaoStand = 10;
			}elseif ($percentDano > 30){
				$reducaoStand = 8;
			}elseif ($percentDano > 25){
				$reducaoStand = 5;
			}elseif ($percentDano > 20){
				$reducaoStand = 4;
			}elseif ($percentDano > 15){
				$reducaoStand = 3;
			}elseif ($percentDano > 10){
				$reducaoStand = 2;
			}elseif ($percentDano > 5){		
				$reducaoStand = 1;
			}elseif ($percentDano > 0){		
				$reducaoStand = 1;
			}

		}else if($plantas > 14 && $plantas <= 40){
			
			$reducaoStand = $percentDano;
		}
		
		return $reducaoStand;
	}
	
	public function calculaDesfolhamento($percentDesfolhamento, $estadio){

		if ($estadio == 236 || $estadio == 237 || $estadio == 238){
			if ($percentDesfolhamento > 95){
				$desfolhamento = 30;
			}elseif ($percentDesfolhamento > 90){
				$desfolhamento = 28;
			}elseif ($percentDesfolhamento > 85){
				$desfolhamento = 25;
			}elseif ($percentDesfolhamento > 80){
				$desfolhamento = 24;
			}elseif ($percentDesfolhamento > 75){
				$desfolhamento = 22;
			}elseif ($percentDesfolhamento > 70){
				$desfolhamento = 21;
			}elseif ($percentDesfolhamento > 65){
				$desfolhamento = 20;
			}elseif ($percentDesfolhamento > 60){
				$desfolhamento = 19;
			}elseif ($percentDesfolhamento > 55){
				$desfolhamento = 18;
			}elseif ($percentDesfolhamento > 50){
				$desfolhamento = 17;
			}elseif ($percentDesfolhamento > 45){
				$desfolhamento = 15;
			}elseif ($percentDesfolhamento > 40){
				$desfolhamento = 14;
			}elseif ($percentDesfolhamento > 35){
				$desfolhamento = 13;
			}elseif ($percentDesfolhamento > 30){
				$desfolhamento = 10;
			}elseif ($percentDesfolhamento > 25){
				$desfolhamento = 8;
			}elseif ($percentDesfolhamento > 20){
				$desfolhamento = 7;
			}elseif ($percentDesfolhamento > 15){
				$desfolhamento = 5;
			}elseif ($percentDesfolhamento > 10){
				$desfolhamento = 4;
			}elseif ($percentDesfolhamento > 5){
				$desfolhamento = 3;
			}elseif ($percentDesfolhamento > 0){
				$desfolhamento = 2;
			}
	
		}else if($estadio == 239){

			if ($percentDesfolhamento > 95){
				$desfolhamento = 20;
			}elseif ($percentDesfolhamento > 90){
				$desfolhamento = 17;
			}elseif ($percentDesfolhamento > 85){
				$desfolhamento = 16;
			}elseif ($percentDesfolhamento > 80){
				$desfolhamento = 16;
			}elseif ($percentDesfolhamento > 75){
				$desfolhamento = 15;
			}elseif ($percentDesfolhamento > 70){
				$desfolhamento = 14;
			}elseif ($percentDesfolhamento > 65){
				$desfolhamento = 13;
			}elseif ($percentDesfolhamento > 60){
				$desfolhamento = 12;
			}elseif ($percentDesfolhamento > 55){
				$desfolhamento = 11;
			}elseif ($percentDesfolhamento > 50){
				$desfolhamento = 11;
			}elseif ($percentDesfolhamento > 45){
				$desfolhamento = 10;
			}elseif ($percentDesfolhamento > 40){
				$desfolhamento = 9;
			}elseif ($percentDesfolhamento > 35){
				$desfolhamento = 8;
			}elseif ($percentDesfolhamento > 30){
				$desfolhamento = 7;
			}elseif ($percentDesfolhamento > 25){
				$desfolhamento = 6;
			}elseif ($percentDesfolhamento > 20){
				$desfolhamento = 6;
			}elseif ($percentDesfolhamento > 15){
				$desfolhamento = 5;
			}elseif ($percentDesfolhamento > 10){
				$desfolhamento = 4;
			}elseif ($percentDesfolhamento > 5){
				$desfolhamento = 3;
			}elseif ($percentDesfolhamento > 0){
				$desfolhamento = 2;
			}			
			
		}elseif($estadio == 240){
			
			if ($percentDesfolhamento > 95){
				$desfolhamento = 10;
			}elseif ($percentDesfolhamento > 90){
				$desfolhamento = 9;
			}elseif ($percentDesfolhamento > 85){
				$desfolhamento = 9;
			}elseif ($percentDesfolhamento > 80){
				$desfolhamento = 8;
			}elseif ($percentDesfolhamento > 75){
				$desfolhamento = 8;
			}elseif ($percentDesfolhamento > 70){
				$desfolhamento = 7;
			}elseif ($percentDesfolhamento > 65){
				$desfolhamento = 7;
			}elseif ($percentDesfolhamento > 60){
				$desfolhamento = 6;
			}elseif ($percentDesfolhamento > 55){
				$desfolhamento = 6;
			}elseif ($percentDesfolhamento > 50){
				$desfolhamento = 5;
			}elseif ($percentDesfolhamento > 45){
				$desfolhamento = 5;
			}elseif ($percentDesfolhamento > 40){
				$desfolhamento = 4;
			}elseif ($percentDesfolhamento > 35){
				$desfolhamento = 4;
			}elseif ($percentDesfolhamento > 30){
				$desfolhamento = 3;
			}elseif ($percentDesfolhamento > 25){
				$desfolhamento = 3;
			}elseif ($percentDesfolhamento > 20){
				$desfolhamento = 2;
			}elseif ($percentDesfolhamento > 15){
				$desfolhamento = 2;
			}elseif ($percentDesfolhamento > 10){
				$desfolhamento = 1;
			}elseif ($percentDesfolhamento > 5){
				$desfolhamento = 1;
			}elseif ($percentDesfolhamento > 0){
				$desfolhamento = 0;
			}			
			
		}else{
			$desfolhamento = $percentDesfolhamento;
		}
		
		return $desfolhamento;
	}	
	

	public function calculaPerdaRamos($percentPerdaRamos, $estadio){
	
		if ($estadio == 238){
			if ($percentPerdaRamos > 95){
				$perdaRamos = 25;
			}elseif ($percentPerdaRamos > 90){
				$perdaRamos = 20;
			}elseif ($percentPerdaRamos > 85){
				$perdaRamos = 16;
			}elseif ($percentPerdaRamos > 80){
				$perdaRamos = 14;
			}elseif ($percentPerdaRamos > 75){
				$perdaRamos = 10;
			}elseif ($percentPerdaRamos > 70){
				$perdaRamos = 9;
			}elseif ($percentPerdaRamos > 65){
				$perdaRamos = 8;
			}elseif ($percentPerdaRamos > 60){
				$perdaRamos = 7;
			}elseif ($percentPerdaRamos > 55){
				$perdaRamos = 6;
			}elseif ($percentPerdaRamos > 50){
				$perdaRamos = 5;
			}elseif ($percentPerdaRamos > 45){
				$perdaRamos = 4;
			}elseif ($percentPerdaRamos > 40){
				$perdaRamos = 3;
			}elseif ($percentPerdaRamos > 35){
				$perdaRamos = 3;
			}elseif ($percentPerdaRamos > 30){
				$perdaRamos = 1;
			}elseif ($percentPerdaRamos > 25){
				$perdaRamos = 0;
			}elseif ($percentPerdaRamos > 20){
				$perdaRamos = 0;
			}elseif ($percentPerdaRamos > 15){
				$perdaRamos = 0;
			}elseif ($percentPerdaRamos > 10){
				$perdaRamos = 0;
			}elseif ($percentPerdaRamos > 5){
				$perdaRamos = 0;
			}elseif ($percentPerdaRamos > 0){
				$perdaRamos = 0;
			}
	
		}else if($estadio == 239){
	
			if ($percentPerdaRamos > 95){
				$perdaRamos = 56;
			}elseif ($percentPerdaRamos > 90){
				$perdaRamos = 51;
			}elseif ($percentPerdaRamos > 85){
				$perdaRamos = 45;
			}elseif ($percentPerdaRamos > 80){
				$perdaRamos = 40;
			}elseif ($percentPerdaRamos > 75){
				$perdaRamos = 35;
			}elseif ($percentPerdaRamos > 70){
				$perdaRamos = 31;
			}elseif ($percentPerdaRamos > 65){
				$perdaRamos = 27;
			}elseif ($percentPerdaRamos > 60){
				$perdaRamos = 24;
			}elseif ($percentPerdaRamos > 55){
				$perdaRamos = 23;
			}elseif ($percentPerdaRamos > 50){
				$perdaRamos = 22;
			}elseif ($percentPerdaRamos > 45){
				$perdaRamos = 21;
			}elseif ($percentPerdaRamos > 40){
				$perdaRamos = 20;
			}elseif ($percentPerdaRamos > 35){
				$perdaRamos = 19;
			}elseif ($percentPerdaRamos > 30){
				$perdaRamos = 18;
			}elseif ($percentPerdaRamos > 25){
				$perdaRamos = 17;
			}elseif ($percentPerdaRamos > 20){
				$perdaRamos = 16;
			}elseif ($percentPerdaRamos > 15){
				$perdaRamos = 15;
			}elseif ($percentPerdaRamos > 10){
				$perdaRamos = 14;
			}elseif ($percentPerdaRamos > 5){
				$perdaRamos = 10;
			}elseif ($percentPerdaRamos > 0){
				$perdaRamos = 5;
			}
				
		}elseif($estadio == 240){
				
			if ($percentPerdaRamos > 95){
				$perdaRamos = 85;
			}elseif ($percentPerdaRamos > 90){
				$perdaRamos = 80;
			}elseif ($percentPerdaRamos > 85){
				$perdaRamos = 72;
			}elseif ($percentPerdaRamos > 80){
				$perdaRamos = 65;
			}elseif ($percentPerdaRamos > 75){
				$perdaRamos = 60;
			}elseif ($percentPerdaRamos > 70){
				$perdaRamos = 55;
			}elseif ($percentPerdaRamos > 65){
				$perdaRamos = 50;
			}elseif ($percentPerdaRamos > 60){
				$perdaRamos = 46;
			}elseif ($percentPerdaRamos > 55){
				$perdaRamos = 42;
			}elseif ($percentPerdaRamos > 50){
				$perdaRamos = 40;
			}elseif ($percentPerdaRamos > 45){
				$perdaRamos = 36;
			}elseif ($percentPerdaRamos > 40){
				$perdaRamos = 34;
			}elseif ($percentPerdaRamos > 35){
				$perdaRamos = 32;
			}elseif ($percentPerdaRamos > 30){
				$perdaRamos = 30;
			}elseif ($percentPerdaRamos > 25){
				$perdaRamos = 29;
			}elseif ($percentPerdaRamos > 20){
				$perdaRamos = 25;
			}elseif ($percentPerdaRamos > 15){
				$perdaRamos = 20;
			}elseif ($percentPerdaRamos > 10){
				$perdaRamos = 15;
			}elseif ($percentPerdaRamos > 5){
				$perdaRamos = 10;
			}elseif ($percentPerdaRamos > 0){
				$perdaRamos = 5;
			}

		}else{
			$perdaRamos = 0;
		}
	
		return $perdaRamos;
	}	
	
	
	public function get($idLaudoFinalItemSegurado){
	 	$ModelLfIS = new Sinistro_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.lf022_itens_segurados") , array('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;
	}
	
	
}
