<?php

class Safra13_LfalhocebolacuraController extends Agro_Controller_Action {
	private $_ModelSafras;
	private $_ModelLaudoFinal;
	private $_ModelLaudoFinalItemSegurado;
	private $_ModelLaudoCebola;
	private $_ModelLaudoCebolaItensSegurados;
	private $_ModelLaudoCebolaItensSeguradosAmostras;
	
	public function init(){
		$this->_ModelSafras = new Produto_Model_Safras();
		$this->_ModelLaudoFinal = new Sinistro_Model_LaudosFinais();
		$this->_ModelLaudoFinalItemSegurado = new Sinistro_Model_LaudosFinaisItensSegurados();
		
		$NomeMondel = $this->_ModelSafras->getSafraModel($this->getRequest()->getParam("id_proposta"),'LaudosFinaisAlhoCebolaCura');
		$this->_ModelLaudoCebola = new $NomeMondel();
		
		$NomeMondel = $this->_ModelSafras->getSafraModel($this->getRequest()->getParam("id_proposta"),'LaudosFinaisAlhoCebolaCuraItensSegurados');
		$this->_ModelLaudoCebolaItensSegurados = new $NomeMondel();

		$NomeMondel = $this->_ModelSafras->getSafraModel($this->getRequest()->getParam("id_proposta"),'LaudosFinaisAlhoCebolaCuraItensSeguradosAmostras');
		$this->_ModelLaudoCebolaItensSeguradosAmostras = new $NomeMondel();
	}
	
	public function extrafinalAction() {
		$this->getHelper('layout')->disableLayout();
	}
	
	public function salvarAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		print_r($this->getRequest()->getParams());
		
		$this->getResponse()->setBody("alert('Não Implementado');");
	}
	
	public function formAction() {
		$this->view->back = "/sinistro/processo/view/id/{$this->getRequest()->getParam('id_processo')}";
		$this->view->title = 'Sinistro » Laudo Final » Alho/Cebola » Cura » Formulário';
		
		$this->view->jQuery()->addJavascriptFile('/resources/javascript/sinistro/sinistro_lf.js');
		$this->view->jQuery()->addJavascriptFile('/resources/javascript/safra13/lfalhocebolacura/form.js');
		
		$params = $this->getRequest()->getParams();
		
		if ($params['id_laudo_final']){
			$this->view->id_laudo_final = $params['id_laudo_final'];
		
		} else {		
			$this->view->id_laudo_final = $this->saveLaudoFinal($params);
			$this->_redirect($this->getRequest()->getRequestUri()."/id_laudo_final/".$this->view->id_laudo_final);
		}
		
        $this->view->id_revistoria 	= $params['id_revistoria'];
		$this->view->id_cobertura 	= $params['id_cobertura'];
        $this->view->id_vistoria  	= $params['id_vistoria'];
		$this->view->id_proposta  	= $params['id_proposta'];
		$this->view->id_processo  	= $params['id_processo'];
		
		if ($this->getRequest()->isPost()){
			$message = array();
			
			if (!array_key_exists("fl_evento_nao_constatado", $params)){
				
				if(empty($params["dt_inicio_colheita"])){
					$message[]="- Data início de colheita";
				}
				
				if(empty($params["dt_recolhimento_producao"])){
					$message[]="- Data recolhimento da produção";
				}
						
				if(empty($params["ds_coordenadas_geograficas"])){
					$message[]="- Coordenadas geográficas da sede.";
				}
				
				if(empty($params["fl_area_atingida"])){
					$message[]="- Área atingida";
				}
			} 
			
			if ($message){
				$this->view->showMessage("Os seguintes campos são de preenchimento obrigatório: <br>".implode("<br>", $message), 'alert');	
			
			} else {
				
				if($this->save($params)){
					$this->view->showMessage(MSG_SUCCESS, 'success');
				
				} else {
					$this->view->showMessage(MSG_ERROR, 'error');
				}
			}
		
		} else {
			$Laudo = $this->_ModelLaudoFinal->find($this->view->id_laudo_final)->current();
			$LaudoCebola = $this->_ModelLaudoCebola->fetchRow("id_laudo_final = {$this->view->id_laudo_final}");
			
			if ($Laudo){
				$params = array_merge($params, $Laudo->toArray());
			}
			
			if ($LaudoCebola){
				$params = array_merge($params, $LaudoCebola->toArray());
			}
		
		}
		
		$this->view->fl_evento_nao_constatado 		= $params['fl_evento_nao_constatado'];
		$this->view->ds_observacao 					= $params['ds_observacao'];
		$this->view->ds_coordenadas_geograficas 	= $params['ds_coordenadas_geograficas'];
		
		$this->view->dt_inicio_colheita 			= Agro_Util::formatDate($params['dt_inicio_colheita'], "dd/MM/yyyy");
		$this->view->dt_recolhimento_producao 		= Agro_Util::formatDate($params['dt_recolhimento_producao'], "dd/MM/yyyy");
		$this->view->vl_perc_sem_cortes 			= $params['vl_perc_sem_cortes'];
		$this->view->vl_perc_cortes_batidas_tunica 	= $params['vl_perc_cortes_batidas_tunica'];
		$this->view->vl_perc_cortes_1_capa 			= $params['vl_perc_cortes_1_capa'];
		$this->view->vl_perc_cortes_2_capa 			= $params['vl_perc_cortes_2_capa'];
		$this->view->vl_perc_cortes_3_capa 			= $params['vl_perc_cortes_3_capa'];
					
	}
	
	public function save(array $post){
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		
		$LaudosFinais 		= new Sinistro_Model_LaudosFinais();
		$LaudosCebolaCura 	= new Safra13_Model_LaudosFinaisAlhoCebolaCura();
		
		try {
			// Atualiza Laudo Final			
			$laudo = array();
			$laudo['id'] 						= $post['id_laudo_final'];
			$laudo['id_processo'] 				= $post['id_processo'];
			$laudo['id_cobertura'] 				= $post['id_cobertura'];
			$laudo['fl_evento_nao_constatado'] 	= $post['fl_evento_nao_constatado'];
			$laudo['ds_observacao'] 			= $post['ds_observacao'];
			
			$LaudosFinais->save($laudo);
			
  			// Atualiza ou insere Laudo de Cebola
			$laudoCebola = array();
			$laudoCebola['id_laudo_final'] 					= $post['id_laudo_final'];
			$laudoCebola['dt_inicio_colheita'] 				= $post['dt_inicio_colheita'];
			$laudoCebola['dt_recolhimento_producao']		= $post['dt_recolhimento_producao'];
			$laudoCebola['ds_coordenadas_geograficas']		= $post['ds_coordenadas_geograficas'];
			$laudoCebola['vl_perc_sem_cortes']	 			= $post['vl_perc_sem_cortes'];
			$laudoCebola['vl_perc_cortes_batidas_tunica'] 	= $post['vl_perc_cortes_batidas_tunica'];
			$laudoCebola['vl_perc_cortes_1_capa'] 			= $post['vl_perc_cortes_1_capa'];
			$laudoCebola['vl_perc_cortes_2_capa'] 			= $post['vl_perc_cortes_2_capa'];
			$laudoCebola['vl_perc_cortes_3_capa'] 			= $post['vl_perc_cortes_3_capa'];
		
			$LaudosCebolaCura->save($laudoCebola);
			
			$Db->Commit();
			
			return true;
			
		} catch (Exception $e) {
			print_r($e->getMessage());
			$Db->Rollback();
			return false;
		}	
	}
	
	public function saveLaudoFinal(array $post) {
		
		try {
			$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
			$Db->beginTransaction();

			/****************************************************/
			// Tabela sinistro.laudos_finais
			/***************************************************/
			$LaudosFinais = new Sinistro_Model_LaudosFinais();
			$LaudoFinal = $LaudosFinais->createRow();
			
			$LaudoFinal->id_processo = $post['id_processo'];
			$LaudoFinal->id_cobertura = $post['id_cobertura'];
  			$LaudoFinal->fl_evento_nao_constatado = 0;
  			$LaudoFinal->ds_observacao = '';
			$LaudoFinal->save();
				
			/****************************************************/
			// Tabela sistema.vistorias_laudos_finais
			/***************************************************/
			$VistoriasLaudosFinais = new Sistema_Model_VistoriasLaudosFinais();
			$Row = $VistoriasLaudosFinais->createRow();
			$Row->id_vistoria = $post['id_vistoria'];
			$Row->id_laudo_final = $LaudoFinal->id;
			$Row->save();

			$Db->commit();
			
			return $LaudoFinal->id;

		} catch (Exception $e) {
			$Db->rollBack();
			echo $e->getMessage();
		}
	}
	
	public function itenspropostaAction() {
		$this->getHelper('layout')->disableLayout();
		$this->view->id_laudo_final = $this->getRequest()->getParam('id_laudo_final');
		
		$LaudosFinais = new Sinistro_Model_LaudosFinais();
		$Laudo = $LaudosFinais->find($this->view->id_laudo_final)->current();
	
		$this->view->processo = $Laudo->processo();
		$this->view->proposta = $this->view->processo->proposta();
	}
	
	public function saveitensseguradosAction(){
		$this->getHelper('layout')->disableLayout();
		$this->getHelper('ViewRenderer')->setNoRender();
		
		$LFItemSegurado = new Sinistro_Model_LaudosFinaisItensSegurados(); 
		
		$id_item_segurado = $this->getRequest()->getParam("id_itens_segurados");
		$id_laudo_final = $this->getRequest()->getParam("id_laudo_final");
		$id_proposta = $this->getRequest()->getParam("id_proposta");
		
		if (!$id_item_segurado){
			
			$id_item_segurado = array();
			
			$ItensProposta = $this->_ModelLaudoFinal->getItensDisponiveisLaudoFinal($id_proposta);
			
			foreach ($ItensProposta as $item){
				$id_item_segurado[]=$item['id'];
			}
		} 
		
		$LFItemSegurado->delete($id_laudo_final);
		
		foreach ($id_item_segurado as $item){
			$LFItemSegurado->save(
				array(
					"id_laudo_final"=>$id_laudo_final,
					"id_item_segurado"=>$item
				)
			);
		}
	}
	
	public function itensseguradosAction(){
		$this->getHelper('layout')->disableLayout();	
		$this->view->itens_segurados = $this->_ModelLaudoFinal->getItensLaudoFinal($this->getRequest()->getParam("id_laudo_final")); 
		
	}

	public function getareaatingidaAction(){
		$this->getHelper('layout')->disableLayout();
		$this->getHelper('ViewRenderer')->setNoRender();
		
		$Model = new Sinistro_Model_LaudosFinais();
		$ModelProposta = new Seguro_Model_Propostas();
		
		$LaudoFinal = $Model->find($this->getRequest()->getParam("id_laudo_final"))->current();
		$Processo = $LaudoFinal->processo();
		$Proposta = $ModelProposta->find($Processo->id_proposta)->current();
		
		$result = array();
		$result['area'] = $Model->getAreaItensSelecionados($this->getRequest()->getParam("id_laudo_final"));
		
		if ($result['area'] == $Proposta->area()){
			$result['flag'] = "T";
			
		} else {
			$result['flag'] = "P";
			
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}
	
	public function setmotivonaovistoriadaAction(){
		$this->getHelper('layout')->disableLayout();
		$this->getHelper('ViewRenderer')->setNoRender();
		
		$Model = new Sinistro_Model_LaudosFinaisItensSegurados();

		$id_laudo_final_item_segurado = $this->getRequest()->getParam("id_laudo_final_item_segurado");
		
		if ($this->getRequest()->getParam("id_motivo_quadra_nao_vistoriada")){
			$id_motivo_quadra_nao_vistoriada = $this->getRequest()->getParam("id_motivo_quadra_nao_vistoriada"); 
		} else {
			$id_motivo_quadra_nao_vistoriada = null;
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($Model->setMotivoNaoVistoriado($id_laudo_final_item_segurado, $id_motivo_quadra_nao_vistoriada)));		
	}
	
	public function formitemseguradoAction(){		
		$this->getHelper('layout')->disableLayout();
		
		$params = $this->getRequest()->getParams();
		
		$ItemSeguradoFuncionario = new Sinistro_Model_LaudosFinaisItensSeguradosFuncionarios();
		
		$LFItemsegurado = $this->_ModelLaudoFinalItemSegurado->find($params["id_laudo_final"], $params["id_item_segurado"]);
		$LFCebolaItemSegurado = $this->_ModelLaudoCebolaItensSegurados->fetchRow("id_laudo_final_item_segurado={$params["id_laudo_final_item_segurado"]}");

		$params = array_merge($params, $this->limpaArray($this->_ModelLaudoFinal->getItemLaudoFinal($params["id_laudo_final_item_segurado"])));
		$params = array_merge($params, $this->limpaArray($LFItemsegurado));
		$params = array_merge($params, $this->limpaArray(($LFCebolaItemSegurado ? $LFCebolaItemSegurado->toArray() : array())));
		
		foreach ($params as $key => $value){
			$this->view->$key = $value;
		}
		
		$this->view->formDadosVistoriaLF = new Sistema_Form_DadosVistoriaLaudoFinal();
		$this->view->formAssinatura = new Sinistro_Form_AssinaturaLaudoPreliminar();				
		$this->view->vistoriadores = $ItemSeguradoFuncionario->getVistoriadoresByItemSegurado($params["id_laudo_final_item_segurado"]);
		
		$this->view->amostras = $this->_ModelLaudoCebolaItensSeguradosAmostras->buscaAmostras($params["id_laudo_final_item_segurado"]);
		$this->view->totais = $this->_ModelLaudoCebolaItensSegurados->buscaTotais($params["id_laudo_final_item_segurado"]);
		
		if ($params["dt_vistoria"]){
				
			$dt_vistoria = explode(' ', $params["dt_vistoria"]);
			
			$this->view->formDadosVistoriaLF->populate(
				array(
					"dt_vistoria"  => Agro_Util::formatDate($dt_vistoria[0], 'dd/MM/yyyy'),
					"hr_vistoria"  => substr($dt_vistoria[1], 0, 2),
					"min_vistoria" => substr($dt_vistoria[1], 3, 2)		
				)
			);
			
			$this->view->formAssinatura->populate(
				array(
					"fl_assinatura_regulador" => $params["fl_assinatura_regulador"],
					"fl_assinatura_segurado" => $params["fl_assinatura_segurado"]
				)
			);
		}
	}
	
	public function limpaArray(array $array){
		$arrayDispensaveis = array("id_usuario_criacao", "id_usuario_alteracao", "dt_criacao", "dt_alteracao", "fl_ativo", "fl_del", "id");
		
		$result = $array;
		
		foreach ($array as $key=>$value){
			if (in_array($key, $arrayDispensaveis)){
				unset($result[$key]);
			}
		}
		
		return $result;
	
	}
	
	public function savevistoriaAction(){
		$this->getHelper('layout')->disableLayout();
		$this->getHelper('ViewRenderer')->setNoRender();
	
		$result = array("status" => true, "message" => "Vistoria salva com sucesso.");
		
		$params = $this->getRequest()->getParams();
		
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		
		try {
			// Ajusta a data da vistoria e elimina campos que não serão usados.
			$params["dt_vistoria"] = Agro_Util::formatDate($params["dt_vistoria"] .' '. $params["hr_vistoria"] .' '. $params["min_vistoria"], 'yyyy/MM/dd HH:mm:ss');
			unset($params["hr_vistoria"]);
			unset($params["min_vistoria"]);
			
			//Save Item segurado
			//Maldito seja o infeliz que reescreveu o find!!!!!!!!!!			
			$this->_ModelLaudoFinalItemSegurado->update(array("dt_vistoria"=>$params["dt_vistoria"]),  "id={$params["id_laudo_final_item_segurado"]}"); 
						
			//Save especialização item segurado
			$RowLaudoCebolaItemSegurado = $this->_ModelLaudoCebolaItensSegurados->save(
				array(
					"id_laudo_final_item_segurado" => $params["id_laudo_final_item_segurado"]
				)
			);
			
			//Salva funcionarios da vistoria
			$ItensSeguradosFuncionario = new Sinistro_Model_LaudosFinaisItensSeguradosFuncionarios();
			$ItensSeguradosFuncionario->delete($params["id_laudo_final_item_segurado"]);

			foreach ($params["id_vistoriador"] as $id_vistoriador) {
			   	$ItensSeguradosFuncionario->insert(
			   		array(
			   			"id_laudo_final_item_segurado" => $params["id_laudo_final_item_segurado"],
			   			"id_funcionario" => $id_vistoriador
			   		)
			   	);
			}
			
			$Db->commit();
			
		} catch (Exception $e) {
			$Db->rollBack();
			$result["status"] = false;
			$result["message"] = "Não foi possível salvar a vistoria.\n\nErro: {$e}";
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}
	
	public function savelaudoAction(){
		$this->getHelper('layout')->disableLayout();
		$this->getHelper('ViewRenderer')->setNoRender();
		
		$result = array("status"=>true, "message"=>"Laudo salvo com sucesso");
		
		$params = $this->getRequest()->getParams();
		
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		
		try {
			//Salva dados Item segurado
			$this->_ModelLaudoFinalItemSegurado->update(
				array(
					"fl_assinatura_regulador" 	=> $params["fl_assinatura_regulador"],
					"fl_assinatura_segurado" 	=> $params["fl_assinatura_segurado"],
					"vl_area_sinistrada" 		=> $params["vl_area_sinistrada"],
					"vl_percent_area_afetada" 	=> $params["vl_percent_area_afetada"],
					"vl_percent_colhido" 		=> $params["vl_percent_colhido"],
					"vl_percent_perdas" 		=> $params["vl_percent_perdas"],
					"ds_observacao" 			=> $params["ds_observacao"],
				
				), 
				
				"id={$params["id_laudo_final_item_segurado"]}"
			);
			
			//Salva dados Item segurado Expecialização
			$this->_ModelLaudoCebolaItensSegurados->update(
				array(
					"ds_coordenadas_geograficas" 		=> $params["ds_coordenadas_geograficas"],
					"vl_percent_producao_recolhida"					=> ($params["vl_percent_producao_recolhida"] ? $params["vl_percent_producao_recolhida"] : $params["vl_percent_producao_recolhida"]),
					"nr_soma_sem_dano"					=> $this->somaAmostra("nr_sem_dano", $params),
					"nr_soma_cortes_batidas_tunica"		=> $this->somaAmostra("nr_cortes_batidas_tunica", $params),
					"nr_soma_cortes_1_capa"				=> $this->somaAmostra("nr_cortes_1_capa", $params),
					"nr_soma_cortes_2_capa"				=> $this->somaAmostra("nr_cortes_2_capa", $params),
					"nr_soma_cortes_3_capa"				=> $this->somaAmostra("nr_cortes_3_capa", $params),
					"vl_total_sem_dano"					=> $this->somaValorTotal("nr_sem_dano", "vl_perc_sem_cortes", $params),
					"vl_total_cortes_batidas_tunica"	=> $this->somaValorTotal("nr_cortes_batidas_tunica", "vl_perc_cortes_batidas_tunica", $params),
					"vl_total_cortes_1_capa"			=> $this->somaValorTotal("nr_cortes_1_capa", "vl_perc_cortes_1_capa", $params),
					"vl_total_cortes_2_capa"			=> $this->somaValorTotal("nr_cortes_2_capa", "vl_perc_cortes_2_capa", $params),
					"vl_total_cortes_3_capa"			=> $this->somaValorTotal("nr_cortes_3_capa", "vl_perc_cortes_3_capa", $params)
				),
				
				"id_laudo_final_item_segurado={$params["id_laudo_final_item_segurado"]}"
			);
			
			//Salva amostras
			$this->_ModelLaudoCebolaItensSeguradosAmostras->delete($params["id_laudo_final_item_segurado"]);
			
			for ($i = 1; $i <= 10; $i++) {
				
				$this->_ModelLaudoCebolaItensSeguradosAmostras->save(
					array(
						"id_laudo_final_item_segurado" 	=> $params["id_laudo_final_item_segurado"],
						"nr_amostra" 					=> $i,
						"nr_sem_dano" 					=> ($params["nr_sem_dano_$i"] ? $params["nr_sem_dano_$i"] : 0),
						"nr_cortes_batidas_tunica" 		=> ($params["nr_cortes_batidas_tunica_$i"] ? $params["nr_cortes_batidas_tunica_$i"] : 0),
						"nr_cortes_1_capa" 				=> ($params["nr_cortes_1_capa_$i"] ? $params["nr_cortes_1_capa_$i"] : 0),
						"nr_cortes_2_capa" 				=> ($params["nr_cortes_2_capa_$i"] ? $params["nr_cortes_2_capa_$i"] : 0),
						"nr_cortes_3_capa" 				=> ($params["nr_cortes_3_capa_$i"] ? $params["nr_cortes_3_capa_$i"] : 0),
					
					)
				);
			
			}
			
			//Salva percentual de perdas
			$this->_ModelLaudoFinalItemSegurado->update(
				array(
					"vl_percent_perdas" => $this->calculaPercentualPerda($params["id_laudo_final_item_segurado"])
				),
				
				"id = {$params["id_laudo_final_item_segurado"]}"
			);
			
			$Db->commit();
		} catch (Exception $e) {
			$Db->rollBack();
			$result["status"] = false;
			$result["message"] = "Não foi possível salvar o laudo. \nErro: {$e->getMessage()}";
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	
	}
	
	public function calculaPercentualPerda($id_laudo_final_item_segurado){
		$somatorios = $this->_ModelLaudoCebolaItensSegurados->buscaTotais($id_laudo_final_item_segurado);
	
		if ( $somatorios["total"] ){
			$result = round( ( ( ( $somatorios['total'] / 100) / $somatorios['soma'] ) * 100), 2);
			 
		} else {
			$result = null;
		}
		
		return $result;
	} 
	
	public function somaAmostra($amostra, $params){
		$soma = 0;
		
		for ($i = 1; $i <= 10; $i++) {
			$soma += ($params[$amostra."_".$i] ? $params[$amostra."_".$i] : 0);			
		}
		
		return $soma;
	}
	
	public function somaValorTotal($amostra, $percentual, $params){
		$soma = $this->somaAmostra($amostra, $params);
		
		return ($soma * $params[$percentual]);
	} 
}







