<?php
/**
 * Model
 *
 * Laudo final Tipo LF026 / Safra17 - PG Soja/PG Ttrigo - Replantio
 *
 * @author Samir Ortiz
 * @date 13/12/2012
 *
 */
class Regulacao_Model_Lf026ItensSegurados extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Regulacao_Model_Row_Lf026ItemSegurado';
	protected $_schema 	= 'regulacao';
	protected $_name 	= 'lf026_itens_segurados';
	protected $_primary = 'id_laudo_final_item_segurado';
	public 	  $_order 	= 'id_laudo_final_item_segurado';

	public function save($dados) {

		$ModelIS = new Regulacao_Model_Lf026ItensSegurados();

		$dados = $this->prepararDados($dados);

		if ($this->validar($dados)){

		    $Model_LaudosFinaisItensSegurados = new Sinistro2_Model_LaudosFinaisItensSegurados();

		    $idLaudoFinalItemSegurado = $Model_LaudosFinaisItensSegurados->save($dados);

		    if($idLaudoFinalItemSegurado) {
	    		try {

	    		    $Row = $this->getRow($idLaudoFinalItemSegurado);

	    		    $Row->id_laudo_final_item_segurado = $idLaudoFinalItemSegurado;
	    		    $Row->vl_ha_area_replantada = $dados['vl_ha_area_replantada'];
                    $Row->dt_replantio = Agro_Util::formatDate($dados['dt_replantio'], Zend_Date::W3C);
                    $Row->fl_replantio_dentro_zoneamento = $dados['fl_replantio_dentro_zoneamento'];

	    			$Row->save();

	    			$this->setMessage("Laudo salvo com sucesso.");

	    			return $idLaudoFinalItemSegurado;

	    		} catch (Exception $e) {
	    		    $this->setMessage($e->getMessage());
	    		    return false;
	    		}
		    } else {
		    	$this->setMessage($Model_LaudosFinaisItensSegurados->getMessages());
		        return false;
		    }
		}
	}

    public function getDataLaudoFinalItemSegurado($idLaudoFinalItemSegurado) {

        $Model_LaudosFinaisItensSegurados = new Sinistro2_Model_LaudosFinaisItensSegurados();
		$Model_ItensSegurados = new Seguro_Model_ItensSegurados();
        $DataGeneralizacao = $Model_LaudosFinaisItensSegurados->getDataLaudoFinalItemSegurado($idLaudoFinalItemSegurado);

        if (!$DataGeneralizacao['fl_nao_vistoriada']) {
            $select = $this->select()->setIntegrityCheck(false);
            $select->from(array('lfis026'=>$this->_schema.'.'.$this->_name), array('vl_ha_area_replantada','dt_replantio','fl_replantio_dentro_zoneamento'));
            $select->join(array('lfis'=>'sinistro.laudos_finais_itens_segurados'), 'lfis.id = lfis026.id_laudo_final_item_segurado', false);
            $select->join(array('sis'=>'seguro.itens_segurados'), 'lfis.id_item_segurado = sis.id', 'vl_lmga');
            $select->where('id_laudo_final_item_segurado = ?', $idLaudoFinalItemSegurado);
        }

        $DataEspecializacao = $this->fetchRow($select)->toArray();

		// Nesse laudo o valor do campo vl_area_sinistrada deve ser igual a área total da quadra
		$DataGeneralizacao['vl_area_sinistrada'] = $Model_ItensSegurados->getArea($DataGeneralizacao['id_item_segurado']);

		$data = array_merge($DataGeneralizacao, $DataEspecializacao);

		return $data;

    }

    /*
     * Busca dados da regulação pelo id do laudo item segurado
     */
    public function getDadaByIdItemLaudo($idLaudoFinalItemSegurado) {
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('lfis026' => 'regulacao.lf026_itens_segurados'), array('vl_ha_area_replantada', 'dt_replantio', 'fl_replantio_dentro_zoneamento'));
		$select->join(array('lfis' => 'sinistro.laudos_finais_itens_segurados'), 'lfis.id = lfis026.id_laudo_final_item_segurado', false);
		$select->where('lfis.id_item_segurado = ?', $idLaudoFinalItemSegurado);

		$laudo = $this->fetchRow($select);
		
		return $laudo ? $laudo->toArray() : null;
	}
    
	public function delete($id_laudo_final){
		parent::delete($id_laudo_final, "id_laudo_final");
	}


	public function validar($dados){
		$messages = array();

		if($dados['vl_area'] < $dados['vl_ha_area_replantada']){
			$messages[] = "Tamanho da área replantada não pode ultrapassar a área total.";
		}

		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 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['vl_ha_area_replantada'] 				= $dados['vl_ha_area_replantada'];
		$return['vl_area'] 								= $dados['vl_area'];
        $return['dt_replantio']                         = $dados['dt_replantio'];
        $return['fl_replantio_dentro_zoneamento']       = $dados['fl_replantio_dentro_zoneamento'];

		$return["amostras"] = array();

		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.lf026_itens_segurados") ,
                array('id', 'id_laudo_final_item_segurado', 'vl_ha_area_replantada', "to_char(dt_replantio, 'dd/mm/yyyy') as dt_replantio", 'fl_replantio_dentro_zoneamento'));
            $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;
	}

}
