<?php

class Regulacao_Model_Lvp001 extends Agro_Db_Table_Abstract {
	protected $_schema = 'regulacao';
	protected $_name = 'lvp001';
	protected $_primary = 'id';
	public $_order = 'id';

	public function saveMobile($dados) {
		$ModelPrevia = new Seguro_Model_VistoriaPreviaEmpresa();
		$id_proposta_vistoria = $ModelPrevia->saveLaudo($dados);

		if ($id_proposta_vistoria) {
			try {

				$Row = $this->createRow();

				$Row->id_proposta_vistoria = $id_proposta_vistoria;
				$Row->ds_local = $dados['ds_local'];
				$Row->dt_laudo = Agro_Util::formatDate($dados['dt_laudo'], Zend_Date::W3C);
				$Row->hr_laudo = $dados['hr_laudo'];
				$Row->ds_observacao = $dados['ds_observacao'];
				$Row->ds_vistoriador = $dados['ds_vistoriador'];
				$Row->fl_reavaliacao = $dados['fl_reavaliacao'];
				$Row->dt_reavaliacao = $dados['dt_reavaliacao'] ? Agro_Util::formatDate($dados['dt_reavaliacao'], Zend_Date::W3C) : null;
				$Row->fl_acompanhante = $dados['fl_acompanhante'];
				$Row->ds_acompanhante = $dados['ds_acompanhante'] ? $dados['ds_acompanhante'] : null;
				$Row->cpf_acompanhante = $dados['cpf_acompanhante'] ? $dados['cpf_acompanhante'] : null;
				$Row->fl_transmitido = 't';
				$Row->dt_transmissao = Agro_Util::formatDate(date('d/m/Y'), Zend_Date::W3C);

				$id_laudo = $Row->save();

				$ModelLvpIS = new Regulacao_Model_Lvp001ItensSegurados();
				$array_itens['amostras'] = $dados['nr_quadra'];
				$array_itens['id_proposta'] = $dados['id_proposta'];
				$array_itens['id_laudo_previa'] = $id_laudo;

				$ModelLvpIS->saveMobile($array_itens);

				$data = array(
					'dt_laudo' => Agro_Util::formatDate($dados['dt_laudo'], Zend_Date::W3C),
					'id_status' => 71,
					'fl_transmitido' => 't'
				);

				if (!$ModelPrevia->update($data, 'id = '.$id_proposta_vistoria)) {
					return false;
				}

				return $id_laudo;

			} catch (Exception $e) {
				$this->setMessage($e->getMessage());
				return false;
			}
		} else {
			$this->setMessage($ModelPrevia->getMessages());
			return false;
		}
	}

    public function save(array $dados){

        $dados = $this->__prepararDados($dados);

        if ($this->validar($dados)){

            $ModelPrevia = new Seguro_Model_VistoriaPreviaEmpresa();
            $id_proposta_vistoria = $ModelPrevia->saveLaudo($dados);

            if ($id_proposta_vistoria){
                try {

                    $Row = $this->getRow($dados['id_laudo']);

                    $Row->id_proposta_vistoria = $id_proposta_vistoria;
                    $Row->ds_local = $dados['ds_local'];
                    $Row->dt_laudo = Agro_Util::formatDate($dados['dt_laudo'], Zend_Date::W3C);
                    $Row->hr_laudo = $dados['hr_laudo'];
                    $Row->ds_observacao = $dados['ds_observacao'];
                    $Row->ds_vistoriador = $dados['ds_vistoriador'];
                    $Row->fl_reavaliacao = $dados['fl_reavaliacao'];
                    $Row->dt_reavaliacao = $dados['dt_reavaliacao'] ? Agro_Util::formatDate($dados['dt_reavaliacao'], Zend_Date::W3C) : null;
                    $Row->fl_acompanhante = $dados['fl_acompanhante'];
                    $Row->ds_acompanhante = $dados['ds_acompanhante'] ? $dados['ds_acompanhante'] : null;
                    $Row->cpf_acompanhante = $dados['cpf_acompanhante'] ? $dados['cpf_acompanhante'] : null;

                    $id_laudo = $Row->save();

                    $ModelLvpIS = new Regulacao_Model_Lvp001ItensSegurados();
                    $dados['id_laudo_previa'] = $id_laudo;
                    $ModelLvpIS->save($dados);

                    $data = array(
                        'dt_laudo' => Agro_Util::formatDate($dados['dt_laudo'], Zend_Date::W3C)
                    );
                    $ModelPrevia->update($data, 'id = '.$id_proposta_vistoria);

                    $this->setMessage("Laudo Cadastrado com Sucesso!");

                    return $id_laudo;

                } catch (Exception $e) {
                    $this->setMessage($e->getMessage());
                    return false;
                }
            } else {
                $this->setMessage($ModelPrevia->getMessages());
                return false;
            }
        }
    }

    public function findByIdPropostaVistoria(int $idPropostaVistoria)
    {
        $select = $this
            ->select()
            ->setIntegrityCheck(false)
            ->where('id_proposta_vistoria = ?', $idPropostaVistoria);

        return $this->getAdapter()->fetchRow($select);
    }

    /**
     * Método para salvar as informações de acordo com o formulário novo
     * 
     * @param array $dados 
     * @return bool
     */
	public function saveNovo(array $dados){ 

		$dados = $this->__prepararDadosNovo($dados);

		if ($this->validarNovo($dados)){

			$ModelPrevia = new Seguro_Model_VistoriaPreviaEmpresa();
			$id_proposta_vistoria = $ModelPrevia->saveLaudo($dados);

			if ($id_proposta_vistoria){
				try {

					$Row = $this->getRow($dados['id_laudo']);

	    		    $Row->id_proposta_vistoria = $id_proposta_vistoria;
	    		    $Row->ds_local = $dados['ds_local'];
	    		    $Row->dt_laudo = Agro_Util::formatDate($dados['dt_laudo'], Zend_Date::W3C);
	    		    $Row->hr_laudo = $dados['hr_laudo'];
	    		    $Row->ds_observacao = $dados['ds_observacao'];
	    		    // $Row->ds_vistoriador = $dados['ds_vistoriador'];
	    		    // $Row->fl_reavaliacao = $dados['fl_reavaliacao'];
	    		    // $Row->dt_reavaliacao = $dados['dt_reavaliacao'] ? Agro_Util::formatDate($dados['dt_reavaliacao'], Zend_Date::W3C) : null;
	    		    $Row->fl_acompanhante = $dados['fl_acompanhante'];
	    		    $Row->ds_acompanhante = $dados['ds_acompanhante'];
	    		    
                    //para relatórios que já usavam estes campos
                    $Row->dt_reavaliacao = $dados['dt_agendada_vistoria'];
                    $Row->fl_reavaliacao = $dados['fl_necessario_vistoria'];

                    /***************campos novos*************/
                    $Row->fl_necessario_vistoria = $dados['fl_necessario_vistoria'];
                    $Row->dt_agendada_vistoria = $dados['dt_agendada_vistoria'];
                    $Row->chk_acompanhante = $dados['chk_acompanhante'];
                    $Row->ds_nivel_tecnologico = $dados['ds_nivel_tecnologico'];
                    $Row->troca_estado_municipio = $dados['troca_estado_municipio'];
                    $Row->cpf_acompanhante = $dados['cpf_acompanhante'];
                    $Row->id_vistoriador = $dados['id_vistoriador'];
                    $Row->prioridade_conferencia = $this->getPrioridadeConferencia($dados);
                    if ($dados['ds_email']) {
                        $Row->ds_email = $dados['ds_email'];
                    }
                    if ($dados['id_municipio_propriedade']) {
                        $Row->id_municipio = $dados['id_municipio_propriedade'];
                    }

	    		    $id_laudo = $Row->save();

					$ModelLvpIS = new Regulacao_Model_Lvp001ItensSegurados();
					$dados['id_laudo_previa'] = $id_laudo;
					$ModelLvpIS->save($dados);

					$data = array(
						'dt_laudo' => Agro_Util::formatDate($dados['dt_laudo'], Zend_Date::W3C)
					);
					$ModelPrevia->update($data, 'id = '.$id_proposta_vistoria);

					$this->setMessage("Laudo Cadastrado com Sucesso!");

					return $id_laudo;

				} catch (Exception $e) {
					$this->setMessage($e->getMessage());
					return false;
				}
			} else {
				$this->setMessage($ModelPrevia->getMessages());
				return false;
			}
		}
	}

    private function getPrioridadeConferencia($dados) { 
/*
        SOLICITADO REMOÇÃO NA TAREFA 03948
        $modelSinistroAviso = new Sinistro2_Model_AvisosSinistro;
        $avisos = $modelSinistroAviso->getAvisosByProposta($dados['id_proposta']);
        //se existe algum aviso(independente do status) retorna 1
        if (count($avisos) > 0) {
            //Sinistro
            return 1;
        }
 */
        //se a vistoria ficou sem assinatura de quem acompanhou retorna 2
        if ($dados['chk_acompanhante'] == 'sem_assinatura') {
            //Vistoria sem Assinatura
            return 1;
        }

        //se o somatório da área assegurável for zero retorna 3
        $sumAreaAsseguravel = 0;
        foreach ($dados['amostras'] as $amostra) {
            $sumAreaAsseguravel = bcadd($sumAreaAsseguravel, $amostra['vl_area_asseguravel'], 2);
        }
        if ($sumAreaAsseguravel == 0) {
            //Cancelamento
            return 2;
        }

        //validação para ver se o zoneamento está de acorto
        $modelProposta   = new Seguro_Model_Propostas;
        $modelValidacoes = new Produto_Model_Validacoes;
        $modelCiclos     = new Produto_Model_Ciclos();
        $proposta = $modelProposta->getRow($dados['id_proposta']);
        $flZoneamentoRegiao  = $proposta->atributo_rn('PROPRIEDADE', 'PROD_ZONEAMENTO_REGIAO');
        $Propriedade = $proposta->propriedade();
        //caso tenha sido informado que houve troca de município, informa o novo municipio para o zoneamento
        $idMunicipio = $dados['troca_estado_municipio'] ? $dados['id_municipio_propriedade'] : $Propriedade['id_municipio'];
        foreach ($dados['amostras'] as $amostra) {

            if ($amostra['id_variedade']
                && $amostra['tipo_solo']
                && $amostra['vl_altitude']
                && $amostra['tipo_semeadura']
                && $amostra['dt_inicio_semeadura']
                && $amostra['dt_final_semeadura']
            ) {
                // verifica se está configurado para zonemanto por região para buscar o ciclo
                if(!$flZoneamentoRegiao){
                    $idCiclo = $modelCiclos->getCicloEstado($proposta->id_produto, $amostra['id_variedade'], $Propriedade['id_estado']);
                } else {
                    if(!$Propriedade['id_regiao']){
                        continue;
                    }
                    $idCiclo = $modelCiclos->getCicloRegiao($proposta->id_produto, $amostra['id_variedade'], $Propriedade['id_estado'], $Propriedade['id_regiao']);
                }

                //validação necessária para as duas datas da semeadura, inicio e fim
                $resultado  = $modelValidacoes->verificaZoneamento(
                    $amostra['tipo_solo'],
                    $proposta->id_produto,
                    $idCiclo,
                    $idMunicipio,
                    $amostra['dt_inicio_semeadura'],
                    $amostra['vl_altitude'],
                    $amostra['tipo_semeadura']
                );
                if (!$resultado['status']) {
                    //Se pelo menos um dos itens possuir zoneamento incorreto, retorna 4
                    return 3;
                }
                $resultado  = $modelValidacoes->verificaZoneamento(
                    $amostra['tipo_solo'],
                    $proposta->id_produto,
                    $idCiclo,
                    $idMunicipio,
                    $amostra['dt_final_semeadura'],
                    $amostra['vl_altitude'],
                    $amostra['tipo_semeadura']
                );
                //repetido para não precisar abrir conexão a banco desnecessáriamente
                if (!$resultado['status']) {
                    //Se pelo menos um dos itens possuir zoneamento incorreto, retorna 4
                    return 3;
                }
            }
        }

        //se houve redução ou aumento da área assegurada em relação à proposta retorna 5
        $modelItensSegurados = new Seguro_Model_ItensSegurados;
        $itens = $modelItensSegurados->getAllByProposta($dados['id_proposta']);
        $sumVlAreaItens = 0;
        foreach ($itens as $item) {
            $sumVlAreaItens = bcadd($sumVlAreaItens, $item['vl_area'], 2);
        }
        if ((trim($sumAreaAsseguravel) > trim($sumVlAreaItens)) && ($sumVlAreaItens > 0) && ($sumAreaAsseguravel > 0)) {
            //Se houve aumento da área assegurada
            return 4;
        }

        if ((trim($sumAreaAsseguravel) < trim($sumVlAreaItens)) && ($sumVlAreaItens > 0) && ($sumAreaAsseguravel > 0)) {
            //Se houve redução da área assegurada
            return 5;
        }

        //redução de rendimento
        foreach ($dados['amostras'] as $amostra) {
            //se uma quadra possui rendimento inferior
            if ($amostra['fl_rendimento_inferior']) {
                return 6;
            }
        }

        // se a quantidade de quadras difere da quantidade de quadras da proposta retorna 7
        if (count($dados['amostras']) != count($itens)) {
            //Unificação/Distribuição
            return 7;
        }
         
        // se uma das quadras possuir distância maior que 3 KM na amostra comparado com o item da proposta, retorna prioridade 7
        foreach ($dados['amostras'] as $amostra) {
            foreach ($itens as $item) {
                if ($amostra['id_item_segurado'] == $item['id']) {
                    $coordenadaAmostra = Agro_Util::coordenadas($amostra['ds_coordenadas']);
                    $coordenadaItem = Agro_Util::coordenadas($item['ds_coordenadas_geograficas']);

                    $distancia = Agro_Util::distancia($coordenadaAmostra['lat'], $coordenadaAmostra['lon'], $coordenadaItem['lat'], $coordenadaItem['lon']);

                    if ($distancia > 3) {
                        //alteração de coordenadas
                        return 8;
                    }
                }
            }
        }

        //caso não entre em nenhuma das condições anteriores
        return 9;
    }

    public function validar($dados){

        $messages = array();

        if(!count($dados['amostras'])){
            $messages[] = "Preencha ao menos uma quadra.";
        }

        if(!$dados['ds_vistoriador']){
            $messages[] = "Informe o vistoriador do laudo.";
        }

        if(!$dados['ds_local']){
            $messages[] = "Preencha o local do laudo.";
        }

        if(!$dados['dt_laudo']){
            $messages[] = "Preencha a data do laudo.";
        }

        if(!$dados['hr_laudo']){
            $messages[] = "Preencha a hora do laudo.";
        }

        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;
        }
    }

    /**
     * Método criar para validar os dados de acordo com o formulário novo
     * @param array $dados 
     * @return array
     */
	public function validarNovo($dados){

		$messages = array();

		if(!count($dados['amostras'])){
			// $messages[] = "Preencha ao menos uma quadra.";
		} else {
            // $this->validarAmostrar($dados, &$messages);
        }

		if(!$dados['ds_local']){
			$messages[] = "Preencha o local do laudo.";
		}

		if(!$dados['dt_laudo']){
			$messages[] = "Preencha a data do laudo.";
		}

		if(!$dados['hr_laudo']){
			$messages[] = "Preencha a hora do laudo.";
		}

		if(!$dados['ds_nivel_tecnologico']){
			$messages[] = "Selecione o Nível Tecnológico.";
		}

        if($dados['fl_necessario_vistoria'] && !$dados['dt_agendada_vistoria']){
            $messages[] = "Preencha uma data de agendamento para a vistoria.";
        }

        if ($dados['chk_acompanhante'] == 'outro' || $dados['chk_acompanhante'] == 'autorizado') {
            if(!$dados['ds_acompanhante']){
                $messages[] = "Acompanhante inválido!";
            }

            if(!$dados['cpf_acompanhante']){
                $messages[] = "CPF do acompanhante inválido!";
            }
        }

		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();
        for($i = 0; $i < $dados['totalItens']; $i++){
            if($dados["nr_quadra"][$i]){
                $return["amostras"][$i] = array(
                    "fl_area_plantada"                  => $dados["area_plantada_".$i],
                    "id"                                => $dados["id"][$i],
                    "nr_quadra"                         => $dados["nr_quadra"][$i],
                    "id_variedade"                      => $dados["id_variedade_".$i],
                    "ds_coordenadas"                    => $dados["ds_coordenadas"][$i],
                    "tipo_solo"                         => $dados["tipo_solo_".$i],
                    "vl_altitude"                       => $dados["vl_altitude"][$i],
                    "dt_inicio_semeadura"               => ($dados["dt_inicio_semeadura"][$i] ? $dados["dt_inicio_semeadura"][$i] : 0),
                    "dt_final_semeadura"                => ($dados["dt_final_semeadura"] ? $dados["dt_final_semeadura"][$i] : 0),
                    "vl_area_declarada"                 => ($dados["vl_area_declarada"][$i] ? $dados["vl_area_declarada"][$i] : 0),
                    "vl_area_vistoriada"                => ($dados["vl_area_vistoriada"][$i] ? $dados["vl_area_vistoriada"][$i] : 0),
                    "vl_area_asseguravel"               => ($dados["vl_area_asseguravel"][$i] ? $dados["vl_area_asseguravel"][$i] : 0),
                    "vl_area_excluida"                  => ($dados["vl_area_excluida"][$i] ? $dados["vl_area_excluida"][$i] : 0),
                    "vl_rendimento_proposta"            => ($dados["vl_rendimento_proposta"][$i] ? $dados["vl_rendimento_proposta"][$i] : 0),
                    "vl_rendimento_estimado"            => ($dados["vl_rendimento_estimado"][$i] ? $dados["vl_rendimento_estimado"][$i] : 0),
                    "tipo_semeadura"                    => $dados["tipo_semeadura_".$i],
                    "nro_item"                          => ($i + 1)
                );
            }
        }

        $return['novo']                         = $dados['novo'];
        $return['id_laudo']                     = $dados['id_laudo'];
        $return['id_proposta_vistoria']         = $dados['id_proposta_vistoria'];
        $return['id_proposta']                  = $dados['id_proposta'];
        $return['ds_local']                     = $dados['ds_local'];
        $return['dt_laudo']                     = $dados['dt_laudo'];
        $return['hr_laudo']                     = $dados['hr_laudo'];
        $return['ds_observacao']                = $dados['ds_observacao'];
        $return['fl_reavaliacao']               = $dados['fl_reavaliacao'];
        $return['dt_reavaliacao']               = $dados['dt_reavaliacao'];
        $return['fl_acompanhante']              = $dados['fl_acompanhante'];
        $return['ds_acompanhante']              = $dados['ds_acompanhante'];
        $return['cpf_acompanhante']             = $dados['cpf_acompanhante'];
        $return['ds_vistoriador']               = $dados['ds_vistoriador'];

        return $return;
    }

    /**
     * Método criado para preparar os dados de acordo com o formulário novo
     * 
     * @param array $dados 
     * @return array
     */
	public function __prepararDadosNovo($dados){
		$return = array();
		foreach ($dados["amostras"] as $amostra) {
            $cultivoAnterior = $amostra['cultivo_anterior'];
            if (!$amostra['negar_ciclo_anterior']) {
                $cultivoAnterior = null;
            }

            $nroSafra = $amostra['nro_safra'];
            if (!$amostra['negar_nro_safra']) {
                $nroSafra = null;
            }
            $rendimentoEstimado = $amostra["vl_rendimento_estimado"];
            if (!$amostra["fl_rendimento_inferior"]) {
                $rendimentoEstimado = null;
            }
            $unidMedidaStandPlantas = $amostra["espacamento_linhas"];
            if ($amostra["unid_medida_stand_plantas"] != 'linear') {
                $unidMedidaStandPlantas = null;
            }

            //regra para a negação da quadra
            $motivosNegacao = array();
            if ($amostra['fl_area_segurado'] && $amostra['fl_area_plantada']) {
                $vlAreaDeclarada = ($amostra["vl_area_declarada"] ? $amostra["vl_area_declarada"] : 0);
                $vlAreaVistoriada = ($amostra["vl_area_vistoriada"] ? $amostra["vl_area_vistoriada"] : 0);
                $vlAreaAsseguravel = ($amostra["vl_area_asseguravel"] ? $amostra["vl_area_asseguravel"] : 0);
                $vlAreaExcluida = ($amostra["vl_area_excluida"] ? $amostra["vl_area_excluida"] : 0);
            } else {
                if (!$amostra['fl_area_segurado']) {
                    $motivosNegacao[] = 'Área não é do Segurado!';
                }
                if (!$amostra['fl_area_plantada']) {
                    $motivosNegacao[] = 'Área não foi plantada!';
                }
                $vlAreaDeclarada = ($amostra["vl_area_declarada_negada"] ? $amostra["vl_area_declarada_negada"] : 0);
                $vlAreaVistoriada = ($amostra["vl_area_vistoriada_negada"] ? $amostra["vl_area_vistoriada_negada"] : 0);
                $vlAreaAsseguravel = ($amostra["vl_area_asseguravel_negada"] ? $amostra["vl_area_asseguravel_negada"] : 0);
                $vlAreaExcluida = ($amostra["vl_area_excluida_negada"] ? $amostra["vl_area_excluida_negada"] : 0);
            }

			$return["amostras"][] = array(
				"fl_area_plantada"                  => $amostra["fl_area_plantada"],
				"id"								=> $amostra["id"],
				"nr_quadra" 						=> $amostra["nr_quadra"],
                "nro_item"                          => $amostra["nro_item"],
				"id_variedade" 						=> $amostra["id_variedade"],
				"ds_coordenadas" 					=> $amostra["ds_coordenadas"],
				"tipo_solo" 						=> $amostra["tipo_solo"],
				"vl_altitude" 						=> $amostra["vl_altitude"],
				"dt_inicio_semeadura"               => ($amostra["dt_inicio_semeadura"] ? $amostra['dt_inicio_semeadura'] : null),
                "dt_final_semeadura"                => ($amostra["dt_final_semeadura"] ? $amostra['dt_final_semeadura'] : null),
				"vl_area_declarada" 				=> $vlAreaDeclarada,
				"vl_area_vistoriada" 				=> $vlAreaVistoriada,
				"vl_area_asseguravel" 				=> $vlAreaAsseguravel,
				"vl_area_excluida" 					=> $vlAreaExcluida,
				"vl_rendimento_proposta" 			=> ($amostra["vl_rendimento_proposta"] ? $amostra["vl_rendimento_proposta"] : 0),
                "fl_rendimento_inferior"            => $amostra["fl_rendimento_inferior"],
				"vl_rendimento_estimado" 			=> $rendimentoEstimado,
				"tipo_semeadura"                    => $amostra["tipo_semeadura"],
                "id_item_segurado"                  => isset($amostra["id_item_segurado"]) && !empty($amostra["id_item_segurado"]) ? $amostra["id_item_segurado"] : $amostra["id_item"],
                "fl_area_segurado"                  => $amostra["fl_area_segurado"],
                "id_laudo_previa"                   => $amostra["id_laudo"],
                "nro_item"                          => $amostra["nro_item_label"],
                "negar_ciclo_anterior"              => $amostra["negar_ciclo_anterior"],
                "cultivo_anterior"                  => $cultivoAnterior,
                "negar_nro_safra"                   => $amostra["negar_nro_safra"],
                "nro_safra"                         => $nroSafra,
                "tamanho_planta"                    => $amostra["tamanho_planta"],
                "estadio_fenologico"                => $amostra["estadio_fenologico"],
                "unid_medida_stand_plantas"         => $amostra["unid_medida_stand_plantas"],
                "espacamento_linhas"                => $unidMedidaStandPlantas,
                "amostra_1"                         => $amostra["amostra_1"],
                "amostra_2"                         => $amostra["amostra_2"],
                "amostra_3"                         => $amostra["amostra_3"],
                "amostra_4"                         => $amostra["amostra_4"],
                "media_amostras"                    => $amostra["media_amostras"],
                "populacao_ha"                      => $amostra["populacao_ha"],
                "baixo_stand"                       => (isset($amostra["baixo_stand"]) ? true : null),
                "incidencia_doencas"                => (isset($amostra["incidencia_doencas"]) ? true : null),
                "incidencia_pragas"                 => (isset($amostra["incidencia_pragas"]) ? true : null),
                "incidencia_invasores"              => (isset($amostra["incidencia_invasores"]) ? true : null),
                "desuniformidade_plantio"           => (isset($amostra["desuniformidade_plantio"]) ? true : null),
                "inundacao"                         => (isset($amostra["inundacao"]) ? true : null),
                "geada"                             => (isset($amostra["geada"]) ? true : null),
                "erosao"                            => (isset($amostra["erosao"]) ? true : null),
                "toxidez"                           => (isset($amostra["toxidez"]) ? true : null),
                "outros"                            => (isset($amostra["outros"]) ? true : null),
                "fl_habilitar_nova_vistoria"        => $amostra["fl_habilitar_nova_vistoria"],
                'motivos_negacao'                   => '{"'.implode('", "', $motivosNegacao).'"}',
                'fl_plantio_futuro'                 => $amostra['fl_plantio_futuro'],
            );
		}

        $return['novo']                         = $dados['novo'];
		$return['id_proposta'] 					= $dados['id_proposta'];
		$return['ds_local'] 	 				= $dados['ds_local'];
        $return['ds_email']                     = $dados['ds_email'];
		$return['dt_laudo'] 	 				= $dados['dt_laudo'] ? Agro_Util::formatDate($dados['dt_laudo'], Zend_Date::W3C) : null;
		$return['hr_laudo'] 	 				= $dados['hr_laudo'];
        $return['id_proposta_vistoria']         = $dados['id_proposta_vistoria'];
        $return['id_laudo']                     = $dados['id_laudo'];
		$return['ds_observacao'] 				= $dados['ds_observacao'];
        $return['chk_acompanhante']             = $dados['chk_acompanhante'];
		$return['ds_vistoriador']				= $dados['ds_vistoriador'];
		$return['fl_necessario_vistoria']       = $dados['fl_necessario_vistoria'];
		$return['ds_nivel_tecnologico']         = $dados['ds_nivel_tecnologico'];

        $User = Zend_Auth::getInstance()->getIdentity();
        $funcionarioModel = new Sistema_Model_Funcionarios;
        $funcionario = $funcionarioModel->getFuncionarioByIdUsuario($User->id);
        $return['id_vistoriador']               = $funcionario->id;

        $return['troca_estado_municipio']       = $dados['troca_estado_municipio'];
        if ($dados['troca_estado_municipio']) {
            $return['ds_sigla_estado']              = $dados['ds_sigla_estado'];
            $return['id_municipio_propriedade']     = $dados['id_municipio_propriedade'];
        }

        if ($dados['fl_necessario_vistoria']) {
            $return['dt_agendada_vistoria'] = $dados['dt_agendada_vistoria'] ? Agro_Util::formatDate($dados['dt_agendada_vistoria'], Zend_Date::W3C) : null;
        } else {
            $return['dt_agendada_vistoria'] = null;
        }

        switch ($dados['chk_acompanhante']) {
            case 'outro':
                $return['fl_acompanhante'] = 1;
                $return['ds_acompanhante'] = $dados['ds_acompanhante'] ? $dados['ds_acompanhante'] : null;
                $return['cpf_acompanhante'] = $dados['cpf_acompanhante'] ? $dados['cpf_acompanhante'] : null;
                break;
            case 'autorizado':
                $ModelPessoaAutorizada = new Seguro_Model_PessoaAutorizada;
                $pessoa = $ModelPessoaAutorizada->find($dados['pessoa_autorizada'])->current();
                $return['fl_acompanhante'] = 1;
                $return['ds_acompanhante'] = $pessoa['ds_pessoa_autorizada'];
                $return['cpf_acompanhante'] = $pessoa['cpf_cnpj'];
                break;
            case 'segurado':
                $return['fl_acompanhante'] = 0;
                $return['ds_acompanhante'] = null;
                $return['cpf_acompanhante'] = null;
                break;
            case 'sem_assinatura':
                $return['fl_acompanhante'] = 0;
                $return['ds_acompanhante'] = null;
                $return['cpf_acompanhante'] = null;
                break;
        }

		return $return;
	}

	public function getLaudo($id_proposta_vistoria){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("lp" => "seguro.propostas_vistorias_previas"),array('id', 'id_vistoria', 'id_status', 'id_status_analise', 'dt_alteracao as data_alteracao', 'id_vistoria_mae'));
		$select->join(array("lvp" => $this->_schema.".".$this->_name),'lp.id = lvp.id_proposta_vistoria','*');
        $select->joinLeft(array('m' => 'sistema.municipios'),'lvp.id_municipio = m.id', array('m.id as id_municipio', 'm.ds_nome_municipio'));
        $select->joinLeft(array('e' => 'sistema.estados'),'m.id_estado = e.id', array('e.ds_sigla', 'e.id as id_estado'));
        $select->joinLeft(array("func" => "sistema.funcionarios"), "lvp.id_vistoriador = func.id", array("ds_nome_funcionario as ds_nome_vistoriador", "ds_crea as ds_crea_vistoriador"));

		$select->where('lp.id = ?', $id_proposta_vistoria);

		$Rs = $this->getAdapter()->fetchRow($select);

		return $Rs;
    }

    /**
     * Busca o histórico cancelada de uma vistoria
     */
    public function getCanceladaHistorico($idPropostaVistoria) {
        $select = $this->select()->setIntegrityCheck(false);
		$select->from(array("vp" => "seguro.propostas_vistorias_previas"),null);
        $select->join(array("vph" => "seguro.propostas_vistorias_previas_historico"),'vph.id_proposta_vistoria = vp.id','*');
        $select->join(array("st" => "sistema.status"),"st.id = vph.id_status");
        $select->join(array("tst" => "sistema.tipo_status"),"tst.id = st.id_tipo_status");
        $select->where('vp.id = ?', $idPropostaVistoria);
        $select->where('st.ds_chave = ?', 'CANCELADA');
        $select->where('tst.ds_chave = ?', 'VP');

        return $this->getAdapter()->fetchRow($select);
    }

	public function getDadosLaudo($id_proposta_vistoria){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("vp" => "seguro.propostas_vistorias_previas"),array('id as id_laudo_previa_proposta_vistoria','id_vistoria'));
		$select->joinLeft(array("ve" => "sistema.vistorias_empresas"),'ve.id_vistoria = vp.id_vistoria','id_empresa');
		$select->joinLeft(array("lvp001" => $this->_schema.".".$this->_name),'vp.id = lvp001.id_proposta_vistoria',array('ds_local','dt_laudo','hr_laudo','ds_observacao','ds_vistoriador','id as id_laudo','fl_reavaliacao','dt_reavaliacao','fl_acompanhante','ds_acompanhante','cpf_acompanhante', 'svg_assinatura_perito', 'svg_assinatura_segurado', 'fl_necessario_vistoria', 'dt_agendada_vistoria'));
		$select->where('lvp001.id_proposta_vistoria = ?', $id_proposta_vistoria);

		$Rs = $this->getAdapter()->fetchRow($select);
		return $Rs;
	}

	public function existeLaudo($id_proposta){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("lp" => "seguro.propostas_vistorias_previas"));
		$select->join(array("lvp" => $this->_schema.".".$this->_name),'lp.id = lvp.id_proposta_vistoria');
		$select->where('lp.id_proposta = ?', $id_proposta);

		$Rs = $this->_db->fetchAll($select);

		if(count($Rs)){
			return true;
		}

		return false;
	}

	public function getIdLaudo($id_proposta_vistoria){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("lvp001" => $this->_schema.".".$this->_name),'id');
		$select->where('lvp001.id_proposta_vistoria = ?', $id_proposta_vistoria);

		$id_laudo = $this->getAdapter()->fetchOne($select);

		return $id_laudo;
	}

    /**
     * Retorna um array com todas a prioridades de conferências
     * @return array
     */
    public function getComboPrioridadeConferencia(): array
    {
        $select = $this->select()->distinct(true)->setIntegrityCheck(false);
        $select->from(["lvp001" => $this->_schema.".".$this->_name], 'prioridade_conferencia');
        $select->where("lvp001.prioridade_conferencia is not null");
        $select->order("prioridade_conferencia");
        $rs = $this->fetchAll($select);
        
        $prioridades = [''];
        foreach ($rs as $row) {
            $prioridades[] = $row['prioridade_conferencia'];
        }

        return $prioridades;
    }

}
