<?php

class Seguro_Model_Renovacao extends Agro_Db_Table_Abstract {
	protected $_schema = 'seguro';
	protected $_name = 'propostas';
	protected $_primary = 'id';
	private $_idPropostaCopy;

	public function getData($where) {
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('p' => 'seguro.propostas'), array('id','id_produto', 'nr_digito_verificador', 'id_status'));
		$select->join(array('pp' => 'seguro.propostas_proponentes'), 'p.id = pp.id_proposta', 'ds_nome_proponente');
		$select->join(array('pc' => 'seguro.propostas_corretores'), 'p.id = pc.id_proposta', null);
		$select->join(array('prop' => 'seguro.propostas_propriedades'), 'p.id = prop.id_proposta', null);
		$select->join(array('pr' => 'produto.produtos'), 'p.id_produto = pr.id', array('id_seguradora', 'ds_nome_produto'));
		$select->join(array('pg' => 'produto.produtos_geral'), 'pr.id_produto_geral = pg.id', null);
		$select->join(array('r' => 'produto.ramos'), 'pg.id_ramo = r.id', 'id as id_ramo');
		$select->join(array('m' => 'sistema.municipios'), 'prop.id_municipio = m.id', 'ds_nome_municipio');
		$select->join(array('e' => 'sistema.estados'), 'm.id_estado = e.id', 'ds_sigla');
		$select->join(array('c' => 'sistema.corretores'), 'pc.id_usuario = c.id_usuario', 'ds_nome_corretor');

		if ($this->_order) {
			$select->order($this->_order);
		}

		if (is_array($where)) {
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field = $clause['field'];
					$operator = $clause['operator'];
					$value = $clause['value'];

					$select->where("$field $operator ?", $value);
				} else {
					$select->where($clause, '');
				}
			}
		} elseif ($where != '') {
			$select->where($where);
		}

		return $select;
	}

	public function copy($params, $flRenovacao=true) {
		try {
			$this->getAdapter()->beginTransaction();

			//quanto é chamado via lote para ter troca de usuário
			if ($params['id_usuario']) {
				$idUsuario = $params['id_usuario'];
			}

			$this->copyProposta($params['id_proposta'], $params['id_produto'], $flRenovacao, $idUsuario);
			$this->copyPropostaCorretores($params['id_proposta'], $idUsuario);
			$this->copyPropostaProponentes($params['id_proposta']);
			$this->copyPropostaPropriedades($params['id_proposta']);
			$this->copyPessoaAutorizadaVistoria($params['id_proposta']);
			$this->copyPropostaItensSegurados($params['id_proposta'], $flRenovacao);
			$this->copyPropostaArquivos($params['id_proposta']);
			$this->copyPropostaObservacoes($params['id_proposta']);
			$this->copyPropostaCroquisGeorreferenciado($params['id_proposta']);

			if(!$flRenovacao){
			    $this->copyPropostaQuestionarios($params['id_proposta']);
			    $this->copyPropostaBeneficiarios($params['id_proposta']);
			    $this->copyPropostaParcelas($params['id_proposta']);
			    $this->copyPropostaCoberturas($params['id_proposta']);
			}

			$this->getAdapter()->commit();
			return $this->_idPropostaCopy;
		} catch (Exception $e) {
			$this->getAdapter()->rollBack();
			$this->setMessage($e->getMessage());
			return false;
		}
	}

	public function copyProposta($idOriginal, $idProduto, $flRenovacao, $idUsuario=null) {
	    $User = Zend_Auth::getInstance()->getIdentity();

		$Status = new Sistema_Model_Status();
		$Row = $this->find($idOriginal)->current();
		$New = $this->createRow();

		if(!$idProduto){
		    $idProduto = $Row->id_produto;
		}
		$New->id_produto = $idProduto;
		$New->nr_digito_verificador = Agro_Util::getCheckNumber($New->id);

		if($flRenovacao){
		    $New->id_proposta_renovada = $Row->id;
		    $New->dt_vigencia_inicio = date('Y-m-d');
		} else {
			$New->id_proposta_renovada = $Row->id_proposta_renovada;
		    $New->dt_vigencia_inicio = $Row->dt_vigencia_inicio;
		}
		$New->dt_vigencia_fim = $Row->dt_vigencia_fim;

		if($flRenovacao){
		    $New->id_status = $Status->getId("PROPOSTA_INCOMPLETA");
		} elseif($Status->getChave($Row->id_status) == 'PROPOSTA_CANCELADA'){
		    $New->id_status = $Status->getId("NAO_ENVIADA");
		} else {
		    $New->id_status = $Row->id_status;
		}

		$New->vl_comissao = $Row->vl_comissao;
		$New->vl_custo_apolice = $Row->vl_custo_apolice;

		//Verifica se foi passado o idUsuario (robo de renovação)
		if (!$idUsuario) {

			//Verifica se a proposta não foi encaminhada para ser renovada por outro corretor
			$ModelRenovacao = new Seguro_Model_PropostasCorretoresRenovacao();
			$RsRenovacao = $ModelRenovacao->fetchRow("id_proposta = $idOriginal");
			if($RsRenovacao){
				$New->id_usuario_criacao = $RsRenovacao->id_usuario;
			} else {
				$User = Zend_Auth::getInstance()->getIdentity();
				if ($User->tp_usuario == 'F') {
				    $Model = new Seguro_Model_PropostasCorretores();
				    $Rs = $Model->fetchRow("id_proposta = $idOriginal");
	       	        $New->id_usuario_criacao = $Row->id_usuario_criacao;
	            }
			}

			$idUsuario = $this->_user->id;

		} else {
			$New->id_usuario_criacao = $idUsuario;
			$New->id_status = $Status->getId("NAO_ENVIADA");
		}

		$this->_idPropostaCopy = $New->save();

		if ($this->_idPropostaCopy) {

			$id_endosso = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchOne("select nextval('seguro.endosso_id');");

			Agro_Db_Table_Abstract::getDefaultAdapter()->query("update seguro.propostas set id_endosso = ".$id_endosso.", id_usuario_alteracao = ".$this->_user->id.", id_proposta_mae = ".$this->_idPropostaCopy." where id= ".$this->_idPropostaCopy);

			// Copia informações para tabela Proposta_Endosso
			Agro_Db_Table_Abstract::getDefaultAdapter()->insert('seguro.propostas_endosso', array(
					'id_proposta' => $this->_idPropostaCopy,
					'id_endosso'  => $id_endosso,
					'id_usuario_criacao' => $idUsuario
			));

			Agro_Db_Table_Abstract::getDefaultAdapter()->insert('sumario.itens_segurados', array(
			'id_proposta' => $this->_idPropostaCopy,
			'id_usuario_criacao' => $idUsuario,
			'vl_area'  => 0,
			'vl_lmga'  => 0
			));

		    if ($flRenovacao) {
		    	$this->getAdapter()->query("update seguro.propostas_endosso set fl_proposta_vigente = true where id_proposta = ".$this->_idPropostaCopy);
		    }
			return true;
		}

		return false;
	}

	public function copyPropostaCorretores($idOriginal, $idUsuario=null) {
	    $User = Zend_Auth::getInstance()->getIdentity();

	    //para renovações feita por lote e troca de digitador/corretor
	    if ($idUsuario) {
	    	$ModelUsuarios = new Sistema_Model_Usuarios();
	    	$usr = $ModelUsuarios->getUser($idUsuario);
	    	$User->tp_usuario = $usr->tp_usuario;
	    	$id_usuario_renovacao = $idUsuario;
	    }

		$Model = new Seguro_Model_PropostasCorretores();
		$Rs = $Model->fetchRow("id_proposta = $idOriginal");

        
        //Verifica se a proposta não foi encaminhada para ser renovada por outro corretor
        //Não precisa dessa verificação caso venha de chamada via lote
        if (!$idUsuario) {
			$ModelRenovacao = new Seguro_Model_PropostasCorretoresRenovacao();
			$RsRenovacao = $ModelRenovacao->fetchRow("id_proposta = $idOriginal");
			if($RsRenovacao){
		        $id_usuario_renovacao = $RsRenovacao->id_usuario;
			} else {
			    $id_usuario_renovacao = $Rs->id_usuario;
			}
		}

		$ModelPreposto = new Sistema_Model_Prepostos();
		if($User->tp_usuario == 'F'){
		    $Corretor = $ModelPreposto->getCorretorByUsuario($id_usuario_renovacao);
		    if($Corretor->id_usuario){
		        $id_usuario_renovacao = $Corretor->id_usuario;
		    }
		}

		if($User->tp_usuario == 'P'){ 
		    $Corretor = $ModelPreposto->getCorretorByUsuario(($idUsuario ? $idUsuario : $User->id));
		    $id_usuario_renovacao = $Corretor->id_usuario;
		}

		if ($Rs) {
			$New = $Model->createRow();
			$New->id_proposta = $this->_idPropostaCopy;
			$New->vl_comissao = $Rs->vl_comissao;

			$New->id_usuario = ($id_usuario_renovacao ? $id_usuario_renovacao : $Rs->id_usuario);

            try{
                $New->save();
            } catch (Exception $e) {
            	$this->getAdapter()->rollBack();
            	$this->setMessage($e->getMessage());
            	return false;
            }
		}
	}

	public function copyPropostaProponentes($idOriginal) {
		$Model = new Seguro_Model_PropostasProponentes();
		$Row = $Model->fetchRow("id_proposta = $idOriginal");

		if ($Row) {
			$New = $Model->createRow();

			if (mb_check_encoding($Row->ds_nome_proponente, 'UTF-8')) {
			    $ds_nome_proponente = $Row->ds_nome_proponente;
			} else {
			    $ds_nome_proponente = utf8_encode($Row->ds_nome_proponente);
			}

			$New->id_proposta = $this->_idPropostaCopy;
			$New->cpf_cnpj = $Row->cpf_cnpj;
			$New->tp_pessoa = $Row->tp_pessoa;
			$New->ds_nome_proponente = $ds_nome_proponente;
			$New->ds_email_proponente = $Row->ds_email_proponente;
			$New->ds_sexo = $Row->ds_sexo;
			$New->dt_nascimento = $Row->dt_nascimento;
			$New->id_estado_civil = $Row->id_estado_civil;
			$New->ds_documento_natureza = $Row->ds_documento_natureza;
			$New->ds_documento_numero = $Row->ds_documento_numero;
			$New->id_orgao_expedidor = $Row->id_orgao_expedidor;
			$New->dt_documento_exp = $Row->dt_documento_exp;
			$New->ds_endereco_rua = $Row->ds_endereco_rua;
			$New->ds_endereco_nro = $Row->ds_endereco_nro;
			$New->ds_endereco_complem = $Row->ds_endereco_complem;
			$New->ds_endereco_bairro = $Row->ds_endereco_bairro;
			$New->ds_endereco_cep = $Row->ds_endereco_cep;
			$New->id_municipio = $Row->id_municipio;
			$New->ds_tel_residencia = $Row->ds_tel_residencia;
			$New->ds_tel_propriedade = $Row->ds_tel_propriedade;
			$New->ds_tel_celular = $Row->ds_tel_celular;
			$New->tp_segurado = $Row->tp_segurado;
			$New->id_proponente_original = $Row->id_proponente_original;
			$New->id_atividade_economica = $Row->id_atividade_economica;
			$New->id_renda = $Row->id_renda;
			$New->id_renda_bruta= $Row->id_renda_bruta;
			$New->id_patrimonio= $Row->id_patrimonio;
			$New->vl_faturamento_anual = $Row->vl_faturamento_anual;
			$New->vl_patrimonio = $Row->vl_patrimonio;
			$New->ds_profissao = $Row->ds_profissao;
			$New->ds_grau_parentesco_politicamente_exposto = $Row->ds_grau_parentesco_politicamente_exposto;
			$New->ds_cpf_parentesco_politicamente_exposto = $Row->ds_cpf_parentesco_politicamente_exposto;
			$New->fl_parentesco_politicamente_exposto = ($Row->fl_parentesco_politicamente_exposto) ? $Row->fl_parentesco_politicamente_exposto : '1';
			$New->fl_optante_nao_informar_patrimonio = ($Row->fl_optante_nao_informar_patrimonio) ? $Row->fl_optante_nao_informar_patrimonio : '1';
			$New->fl_politicamente_exposto = ($Row->fl_politicamente_exposto) ? $Row->fl_politicamente_exposto : '1';

			$New->save();
		}
	}

	public function copyPropostaPropriedades($idOriginal) {
		$Model = new Seguro_Model_PropostasPropriedades();
		$Row = $Model->fetchRow("id_proposta = $idOriginal");

		if ($Row) {
			$New = $Model->createRow();

			$New->id_proposta = $this->_idPropostaCopy;
			$New->ds_nome_propriedade = $Row->ds_nome_propriedade;
			$New->ds_endereco = $Row->ds_endereco;
			$New->ds_endereco_cep = $Row->ds_endereco_cep;
			$New->ds_endereco_nro = $Row->ds_endereco_nro;
			$New->id_municipio = $Row->id_municipio;
			$New->ds_endereco_bairro = $Row->ds_endereco_bairro;
			$New->ds_coordenadas = $Row->ds_coordenadas;
			$New->ds_referencia_localizacao = $Row->ds_referencia_localizacao;
			$New->ds_pessoa_autorizada = $Row->ds_pessoa_autorizada;
			$New->ds_nome_outra_pessoa = $Row->ds_nome_outra_pessoa;
			$New->ds_cpf_outra_pessoa = $Row->ds_cpf_outra_pessoa;
			$New->ds_telefone_outra_pessoa = $Row->ds_telefone_outra_pessoa;

			$New->save();
		}
	}

	public function copyPessoaAutorizadaVistoria($idOriginal) {
		$Model = new Seguro_Model_PessoaAutorizada();
		$Rs = $Model->fetchAll("id_proposta = $idOriginal");

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();

				$New->id_proposta = $this->_idPropostaCopy;
				$New->ds_pessoa_autorizada = $Row->ds_pessoa_autorizada;
				$New->cpf_cnpj = $Row->cpf_cnpj;
				$New->ds_telefone = $Row->ds_telefone;
				$New->ds_grau_parentesco = $Row->ds_grau_parentesco;

				$New->save();
			}
		}
	}

	public function copyPropostaQuestionarios($idOriginal) {
		$Model = new Seguro_Model_PropostasQuestionarios();
		$Rs = $Model->fetchAll("id_proposta = $idOriginal and id_atributo_rn <> 154"); 
		//154 id do atributo que confirma a subvencao estadual

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();

				$New->id_proposta = $this->_idPropostaCopy;
				$New->id_atributo_rn = $Row->id_atributo_rn;
				$New->ds_resposta = $Row->ds_resposta;

				$New->save();
			}
		}
	}

	public function copyPropostaItensSegurados($idOriginal,$flRenovacao=true) {
		$Model = new Seguro_Model_ItensSegurados();
		$Rs = $Model->fetchAll("id_proposta = $idOriginal");

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();

				$New->id_proposta = $this->_idPropostaCopy;
				$New->vl_area = $Row->vl_area;
				$New->nr_item_segurado = $Row->nr_item_segurado;
				$New->ds_item_segurado = $Row->ds_item_segurado;
			    $New->vl_idade = ($flRenovacao) ? $Row->vl_idade + 1 : $Row->vl_idade;
				$New->ds_espacamento = $Row->ds_espacamento;
				$New->nr_plantas = $Row->nr_plantas;
				$New->vl_producao_planta = $Row->vl_producao_planta;
				$New->vl_valor_tonelada = $Row->vl_valor_tonelada;
				$New->vl_rendimento_tonelada = $Row->vl_rendimento_tonelada;
				$New->vl_lmga = $Row->vl_lmga;
				$New->id_variedade = $Row->id_variedade;

				if ($New->save()) {
					$Model2 = new Seguro_Model_ItensSeguradosComplementos();
					$Rs2 = $Model2->fetchAll("id_item_segurado = {$Row->id}");

					if ($Rs2->count()) {
						foreach ($Rs2 as $Row2) {
							$New2 = $Model2->createRow();

							$New2->id_item_segurado = $New->id;
							$New2->id_portaenxerto = $Row2->id_portaenxerto;
							$New2->id_ciclo = $Row2->id_ciclo;
							$New2->ds_tipo_conducao = $Row2->ds_tipo_conducao;
							$New2->dt_plantio = $Row2->dt_plantio;
							$New2->dt_semeadura = $Row2->dt_semeadura;
							$New2->dt_poda = $Row2->dt_poda;
							$New2->nr_plantas_metro_linear = $Row2->nr_plantas_metro_linear;
							$New2->vl_producao_minima = $Row2->vl_producao_minima;
							$New2->vl_lmi_pos_granizo = $Row2->vl_lmi_pos_granizo;
							$New2->vl_producao_garantida = $Row2->vl_producao_garantida;
							$New2->vl_idade_tela = $Row2->vl_idade_tela;
							$New2->ds_local = $Row2->ds_local;
							$New2->ds_coordenadas_geograficas = $Row2->ds_coordenadas_geograficas;
							$New2->vl_lmi = $Row2->vl_lmi;
							$New2->vl_altitude = $Row2->vl_altitude;
							$New2->id_sistema_plantio = $Row2->id_sistema_plantio;
							$New2->ds_primeiro_ano_plantio = $Row2->ds_primeiro_ano_plantio;
							$New2->id_tipo_solo = $Row2->id_tipo_solo;
							$New2->dt_inicio_colheita = $Row2->dt_inicio_colheita;
							$New2->dt_final_colheita = $Row2->dt_final_colheita;

							$New2->save();
						}
					}
				}
			}
		}
	}

	public function copyPropostaArquivos($idOriginal) {
		$Model = new Seguro_Model_PropostasArquivos();
		$Rs = $Model->fetchAll("id_proposta = $idOriginal");
		$dir = PATH_CROQUI.'/';

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();

				$New->id_proposta = $this->_idPropostaCopy;
				$New->id_tipo_arquivo = $Row->id_tipo_arquivo;
				$New->ds_nome_arquivo = $Row->ds_nome_arquivo;

				$New->save();
			}
		}
	}

	public function copyPropostaCroquisGeorreferenciado($idOriginal) {
		$Model = new Seguro_Model_PropostasCroquis();
	
		$Rs = $Model->fetchAll("id_proposta = $idOriginal");

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();
				
				$New->id_proposta = $this->_idPropostaCopy;
				$New->ds_nome_arquivo = $Row->ds_nome_arquivo;
				$New->fl_vigente = $Row->fl_vigente ? 't' : 'f';
				
				if ($New->save()) {
					$modelItensSegurados = new Seguro_Model_ItensSegurados();
				    $Talhoes = new Seguro_Model_PropostasCroquisTalhoes();
				    $Ts = $Talhoes->fetchAll("id_croqui = $Row->id");
				    if ($Ts->count()) {
				        foreach ($Ts as $Trupla) {

							$idsItensSeguradosOriginais = !empty($Trupla->ds_item_segurado) ? explode(',', $Trupla->ds_item_segurado) : [];
							$idsItensSeguradosRenovados = [];
							
							foreach ($idsItensSeguradosOriginais as $idItemSeguradoOriginal) {
								$itemSeguradoOriginal = $modelItensSegurados->find(trim($idItemSeguradoOriginal))->current();
								if (!empty($itemSeguradoOriginal)) {
									$where = "id_proposta = {$this->_idPropostaCopy}";
									$where .= " AND nr_item_segurado = {$itemSeguradoOriginal['nr_item_segurado']}";
									$idItemSeguradoRenovado = $modelItensSegurados->fetchRow($where);

									if (!empty($idItemSeguradoRenovado)) {
										$idsItensSeguradosRenovados[] = $idItemSeguradoRenovado['id'];
									}
								}
							}

							$TNew = $Talhoes->createRow();
							$TNew->id_croqui = $New->id;
							$TNew->ds_nome = $Trupla->ds_nome;
							$TNew->fl_area = $Trupla->fl_area;
							$TNew->ds_coordenadas = $Trupla->ds_coordenadas;
							$TNew->ds_item_segurado = implode(',', $idsItensSeguradosRenovados);
							$TNew->ds_coordenadas_centroide = $Trupla->ds_coordenadas_centroide;
							$TNew->save();

							if (!empty($idsItensSeguradosOriginais) && !empty($TNew->ds_coordenadas_centroide)) {

								$centroide = explode(',', $TNew->ds_coordenadas_centroide);
								$modelItensSeguradosCAR = new Seguro_Model_ItensSeguradosCAR();
								$resultadoFind = (new Seguro_Model_CAR())->find(trim($centroide[0]), trim($centroide[1]));
								if (!empty($resultadoFind['resultado'])) {

									foreach ($idsItensSeguradosRenovados as $idItemSegurado) {
										if (empty($idItemSegurado)) {
											throw new Exception('Erro ao salvar croqui. Um dos talhões não foi vinculado a um item.');
										}

										$modelItensSeguradosCAR->deleteByItemSegurado($idItemSegurado);

										foreach ($resultadoFind['resultado'] as $resultado) {
											$dadosItensSeguradosCAR = [
												'id_item_segurado' => $idItemSegurado,
												'id_car' => $resultado['id'],
												'ds_car' => $resultado['cod_imovel'],
												'ds_status_imovel' => $resultado['status_imovel'],
												'vl_area' => $resultado['area'],
												'ds_condicao' => $resultado['condicao'],
												'ds_uf' => $resultado['uf'],
												'ds_municipio' => $resultado['municipio'],
												'ds_tipo_imovel' => $resultado['tipo_imovel'],
											];
											
											$idItenSeguradoCAR = $modelItensSeguradosCAR->save($dadosItensSeguradosCAR);
											if (!$idItenSeguradoCAR) {
												throw new Exception("Erro ao salvar os dados do CAR do item {$TNew->ds_nome}");
											}
										}
									}
								}
							}
						}
				    }
				}
			}
		}
	}

	public function copyPropostaBeneficiarios($idOriginal) {
		$Model = new Seguro_Model_PropostasBeneficiarios();
		$Rs = $Model->fetchAll("id_proposta = $idOriginal");

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();

				$New->id_proposta = $this->_idPropostaCopy;
				$New->ds_nome_beneficiarios = $Row->ds_nome_beneficiarios;
				$New->ds_qualidade_beneficiario = $Row->ds_qualidade_beneficiario;
				$New->vl_limite_beneficio = $Row->vl_limite_beneficio;
				$New->nr_cpf_cnpj = $Row->nr_cpf_cnpj;
				$New->id_banco = $Row->id_banco;
				$New->ds_agencia = $Row->ds_agencia;
				$New->ds_conta = $Row->ds_conta;
				$New->ds_observacao = $Row->ds_observacao;
				$New->ds_tipo_conta = $Row->ds_tipo_conta;

				$New->save();
			}
		}
	}

	public function copyPropostaParcelas($idOriginal) {
		$Model = new Seguro_Model_PropostasParcelas();
		$Rs = $Model->fetchAll("id_proposta = $idOriginal");

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();

				$New->id_proposta = $this->_idPropostaCopy;
				$New->nr_parcela = $Row->nr_parcela;
				$New->vl_total = $Row->vl_total;
				$New->vl_segurado = $Row->vl_segurado;
				$New->vl_subvencao_federal = $Row->vl_subvencao_federal;
				$New->vl_subvencao_estadual = $Row->vl_subvencao_estadual;
				$New->dt_vencimento = $Row->dt_vencimento;

				$New->save();
			}
		}
	}

	public function copyPropostaCoberturas($idOriginal) {
		$Model = new Seguro_Model_PropostasCoberturas();
		$Rs = $Model->fetchAll("id_proposta = $idOriginal");

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();

				$New->id_proposta = $this->_idPropostaCopy;
				$New->id_cobertura = $Row->id_cobertura;
				$New->fl_principal = ($Row->fl_principal ? 1 : 0);
				$New->vl_franquia = $Row->vl_franquia;
				$New->vl_taxa = $Row->vl_taxa;
				$New->vl_premio = $Row->vl_premio;
				$New->vl_lmi = $Row->vl_lmi;

				$New->save();
			}
		}
	}

	public function copyPropostaObservacoes($idOriginal) {
		$ModelProposta = new Seguro_Model_Propostas();
		$Proposta = $ModelProposta->find($idOriginal)->current();

		$Model = new Seguro_Model_PropostasObservacoes();

		if(!$Proposta->versao_endosso(false) > 0){
			$Rs = $Model->fetchAll("id_proposta = $idOriginal and fl_principal = true");
			if ($Rs->count()) {
				foreach ($Rs as $Row) {
					$New = $Model->createRow();
					$New->id_proposta = $this->_idPropostaCopy;
					$New->ds_observacao = $Row->ds_observacao;
					$New->fl_principal = true;
					$New->save();
				}
			}
		} else {
			$New = $Model->createRow();
			$New->id_proposta = $this->_idPropostaCopy;
			$New->ds_observacao = '';
			$New->fl_principal = true;
			$New->save();
		}
	}

	/**
	 * usado via Curl pelo script arquivoorcamentolote
	 * gera novos orcamentos baseado em uma lista (CSV) pre-definida
	 */
	public function copyNovoOrcamento($params, $flRenovacao=false) {
		try {
			$this->getAdapter()->beginTransaction();

			//quanto é chamado via lote para ter troca de usuário
			if ($params['id_usuario']) {
				$idUsuario = $params['id_usuario'];
			}

			$this->copyProposta($params['id_proposta'], $params['id_produto'], $flRenovacao, $idUsuario);
			$this->copyPropostaCorretores($params['id_proposta'], $idUsuario);
			$this->copyPropostaNovoProponentes($params['id_proposta'], $params['id_proponente'], $params['id_municipio']);
			$this->copyPropostaNovoPropriedades($params['id_proposta'], $params['id_municipio']);
			$this->copyPessoaAutorizadaVistoria($params['id_proposta']);
			$this->copyPropostaNovoItensSegurados($params['id_proposta'], $flRenovacao);
			$this->copyPropostaArquivos($params['id_proposta']);
			$this->copyPropostaObservacoes($params['id_proposta']);

		    $this->copyPropostaQuestionarios($params['id_proposta']);
		    $this->copyPropostaBeneficiarios($params['id_proposta']);
		    $this->copyPropostaParcelas($params['id_proposta']);
		    $this->copyPropostaCoberturas($params['id_proposta']);

			$this->getAdapter()->commit();

	    	$this->getAdapter()->query("update seguro.propostas_endosso set fl_proposta_vigente = true where id_proposta = ".$this->_idPropostaCopy);

			return $this->_idPropostaCopy;
		} catch (Exception $e) {
			$this->getAdapter()->rollBack();
			$this->setMessage($e->getMessage());
			return false;
		}
	}

	/**
	 * Altera o proponente da proposta template
	 */
	public function copyPropostaNovoProponentes($idOriginal, $idProponente) {
		$Model = new Seguro_Model_PropostasProponentes();
		$Row = $Model->fetchRow("id_proposta = $idOriginal");

		$ModelProponente = new Seguro_Model_Proponentes();
		$Proponente = $ModelProponente->fetchRow("id = $idProponente");

		if ($Row) {
			$New = $Model->createRow();

			if (mb_check_encoding($Proponente->ds_nome_proponente, 'UTF-8')) {
			    $ds_nome_proponente = $Proponente->ds_nome_proponente;
			} else {
			    $ds_nome_proponente = utf8_encode($Proponente->ds_nome_proponente);
			}

			$New->id_proposta = $this->_idPropostaCopy;
			$New->cpf_cnpj = $Proponente->cpf_cnpj;
			$New->tp_pessoa = $Proponente->tp_pessoa;
			$New->ds_nome_proponente = $ds_nome_proponente;
			$New->ds_email_proponente = $Proponente->ds_email_proponente;
			$New->ds_sexo = $Proponente->ds_sexo;
			$New->dt_nascimento = $Proponente->dt_nascimento;
			$New->id_estado_civil = $Proponente->id_estado_civil;
			$New->ds_documento_natureza = $Proponente->ds_documento_natureza;
			$New->ds_documento_numero = $Proponente->ds_documento_numero;
			$New->id_orgao_expedidor = $Proponente->id_orgao_expedidor;
			$New->dt_documento_exp = $Proponente->dt_documento_exp;
			$New->ds_endereco_rua = $Proponente->ds_endereco_rua;
			$New->ds_endereco_nro = $Proponente->ds_endereco_nro;
			$New->ds_endereco_complem = $Proponente->ds_endereco_complem;
			$New->ds_endereco_bairro = $Proponente->ds_endereco_bairro;
			$New->ds_endereco_cep = $Proponente->ds_endereco_cep;
			$New->id_municipio = $Proponente->id_municipio;
			$New->ds_tel_residencia = $Proponente->ds_tel_residencia;
			$New->ds_tel_propriedade = $Proponente->ds_tel_propriedade;
			$New->ds_tel_celular = $Proponente->ds_tel_celular;
			$New->tp_segurado = $Row->tp_segurado;
			$New->id_proponente_original = $Row->id_proponente_original;
			$New->id_atividade_economica = $Row->id_atividade_economica;
			$New->id_renda = $Row->id_renda;
			$New->vl_faturamento_anual = $Row->vl_faturamento_anual;
			$New->vl_patrimonio = $Row->vl_patrimonio;
			$New->ds_grau_parentesco_politicamente_exposto = $Row->ds_grau_parentesco_politicamente_exposto;
			$New->ds_cpf_parentesco_politicamente_exposto = $Row->ds_cpf_parentesco_politicamente_exposto;
			$New->fl_parentesco_politicamente_exposto = ($Row->fl_parentesco_politicamente_exposto) ? $Row->fl_parentesco_politicamente_exposto : '1';
			$New->fl_optante_nao_informar_patrimonio = ($Row->fl_optante_nao_informar_patrimonio) ? $Row->fl_optante_nao_informar_patrimonio : '1';
			$New->fl_politicamente_exposto = ($Row->fl_politicamente_exposto) ? $Row->fl_politicamente_exposto : '1';

			$New->save();
		}
	}

	/**
	 * Altera o municipio da propriedade template
	 */
	public function copyPropostaNovoPropriedades($idOriginal, $idMunicipio) {
		$Model = new Seguro_Model_PropostasPropriedades();
		$Row = $Model->fetchRow("id_proposta = $idOriginal");

		if ($Row) {
			$New = $Model->createRow();

			$New->id_proposta = $this->_idPropostaCopy;
			$New->ds_nome_propriedade = $Row->ds_nome_propriedade;
			$New->ds_endereco = $Row->ds_endereco;
			$New->ds_endereco_cep = $Row->ds_endereco_cep;
			$New->ds_endereco_nro = $Row->ds_endereco_nro;
			$New->id_municipio = $idMunicipio;
			$New->ds_endereco_bairro = $Row->ds_endereco_bairro;
			$New->ds_coordenadas = $Row->ds_coordenadas;
			$New->ds_referencia_localizacao = $Row->ds_referencia_localizacao;
			$New->ds_pessoa_autorizada = $Row->ds_pessoa_autorizada;
			$New->ds_nome_outra_pessoa = $Row->ds_nome_outra_pessoa;
			$New->ds_cpf_outra_pessoa = $Row->ds_cpf_outra_pessoa;
			$New->ds_telefone_outra_pessoa = $Row->ds_telefone_outra_pessoa;

			$New->save();
		}
	}

	/**
	 * Altera a área para gerar novos orçamentos
	 */
	public function copyPropostaNovoItensSegurados($idOriginal,$flRenovacao=true) {
		$Model = new Seguro_Model_ItensSegurados();
		$Rs = $Model->fetchAll("id_proposta = $idOriginal");

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$New = $Model->createRow();

				$New->id_proposta = $this->_idPropostaCopy;
				$New->vl_area = $Row->vl_area;
				$New->nr_item_segurado = $Row->nr_item_segurado;
				$New->ds_item_segurado = $Row->ds_item_segurado;
			    $New->vl_idade = ($flRenovacao) ? $Row->vl_idade + 1 : $Row->vl_idade;
				$New->ds_espacamento = $Row->ds_espacamento;
				$New->nr_plantas = $Row->nr_plantas;
				$New->vl_producao_planta = $Row->vl_producao_planta;
				$New->vl_valor_tonelada = $Row->vl_valor_tonelada;
				$New->vl_rendimento_tonelada = $Row->vl_rendimento_tonelada;
				$New->vl_lmga = $Row->vl_lmga;
				$New->id_variedade = $Row->id_variedade;

				if ($New->save()) {
					$Model2 = new Seguro_Model_ItensSeguradosComplementos();
					$Rs2 = $Model2->fetchAll("id_item_segurado = {$Row->id}");

					if ($Rs2->count()) {
						foreach ($Rs2 as $Row2) {
							$New2 = $Model2->createRow();

							$New2->id_item_segurado = $New->id;
							$New2->id_portaenxerto = $Row2->id_portaenxerto;
							$New2->id_ciclo = $Row2->id_ciclo;
							$New2->ds_tipo_conducao = $Row2->ds_tipo_conducao;
							$New2->dt_plantio = $Row2->dt_plantio;
							$New2->dt_semeadura = $Row2->dt_semeadura;
							$New2->dt_poda = $Row2->dt_poda;
							$New2->nr_plantas_metro_linear = $Row2->nr_plantas_metro_linear;
							$New2->vl_producao_minima = $Row2->vl_producao_minima;
							$New2->vl_lmi_pos_granizo = $Row2->vl_lmi_pos_granizo;
							$New2->vl_producao_garantida = $Row2->vl_producao_garantida;
							$New2->vl_idade_tela = $Row2->vl_idade_tela;
							$New2->ds_local = $Row2->ds_local;
							$New2->ds_coordenadas_geograficas = $Row2->ds_coordenadas_geograficas;
							$New2->vl_lmi = $Row2->vl_lmi;

							$New2->save();
						}
					}
				}
			}
		}
	}
}
