<?php

class Endosso_Model_Proposta_Beneficiarios extends Agro_Db_Table_Propostas {
	protected $_name = 'propostas_beneficiarios';
	protected $_schema = 'seguro';
	protected $_primary = 'id';

	public function save($idProposta, $row) {

		$Row = $this->getRow($row['id']);

		$Row->id_proposta = $idProposta;
		$Row->ds_nome_beneficiarios = $row['ds_nome_beneficiarios'];
		$Row->ds_qualidade_beneficiario = $row['ds_qualidade_beneficiario'];
		$Row->vl_limite_beneficio = Agro_Util::formatCurrencyDb($row['vl_limite_beneficio']);
		$Row->nr_cpf_cnpj = $row['nr_cpf_cnpj'];
		$Row->id_banco = $row['id_banco'];
		$Row->ds_agencia = $row['ds_agencia'];
		$Row->ds_conta = $row['ds_conta'];
		$Row->ds_observacao = $row['ds_observacao'];
		$Row->ds_tipo_conta = $row['ds_tipo_conta'];
		$Row->fl_ativo = $row['fl_ativo'] ? 1 : 0;
		$Row->fl_del = $row['fl_del'] ? 1 : 0;
		$Row->dt_nascimento = $row['dt_nascimento_beneficiario'] ? Agro_Util::formatDate($row['dt_nascimento_beneficiario'], Zend_Date::W3C) : null;
		$Row->ds_email_beneficiario = ($row['ds_email_beneficiario'] ? $row['ds_email_beneficiario'] : '');
		$Row->ds_email_instituicao_financeira = ($row['ds_email_instituicao_financeira'] ? $row['ds_email_instituicao_financeira'] : '');
		$Row->tp_pessoa = $row['tp_pessoa'];
		$Row->id_tipo_beneficiario = !empty($row['id_tipo_beneficiario']) ? $row['id_tipo_beneficiario'] : (!empty($Row->id_tipo_beneficiario) ? $Row->id_tipo_beneficiario : null);
		$Row->fl_favorecido_autorizacao_credito = $row['fl_favorecido_autorizacao_credito'] ? 1 : 0;
		$Row->fl_nome_social = $row['fl_nome_social'] == 1 ? 1 : 0;
		$Row->ds_nome_social = $row['ds_nome_social'];

		return $Row->save();
	}

	public function add($idProposta, $row) {
		
		$emailBeneficiarios = '';
		$emailInstituicaoFinanceira = '';

		if (!empty($row['email_assinatura'])) {
			$emailBeneficiarios = $row['email_assinatura'];
		} else if ($row['ds_email_beneficiario']) {
			$emailBeneficiarios = $row['ds_email_beneficiario'];
		}

		if (!empty($row['email_instituicao_financeira_assinatura'])) {
			$emailInstituicaoFinanceira = $row['email_instituicao_financeira_assinatura'];
		} else if ($row['ds_email_instituicao_financeira']) {
			$emailInstituicaoFinanceira = $row['ds_email_instituicao_financeira'];
		}
		
		$Row = $this->createRow();

		$Row->id_proposta = $idProposta;
		$Row->ds_nome_beneficiarios = $row['ds_nome_beneficiarios'];
		$Row->ds_qualidade_beneficiario = $row['ds_qualidade_beneficiario'];
		$Row->vl_limite_beneficio = Agro_Util::formatCurrencyDb($row['vl_limite_beneficio']);
		$Row->nr_cpf_cnpj = $row['nr_cpf_cnpj'];
		$Row->id_banco = $row['id_banco'];
		$Row->ds_agencia = $row['ds_agencia'];
		$Row->ds_conta = $row['ds_conta'];
		$Row->ds_observacao = $row['ds_observacao'];
		$Row->ds_tipo_conta = $row['ds_tipo_conta'];
        $Row->tp_pessoa = $row['tp_pessoa'];
        $Row->id_tipo_beneficiario = $row['id_tipo_beneficiario'];
		$Row->fl_ativo = $row['fl_ativo'] ? 1 : 0;
		$Row->fl_del = $row['fl_del'] ? 1 : 0;
		$Row->dt_nascimento = $row['dt_nascimento'] ? Agro_Util::formatDate($row['dt_nascimento'], Zend_Date::W3C) : null;
		$Row->ds_email_beneficiario = $emailBeneficiarios;
		$Row->ds_email_instituicao_financeira = $emailInstituicaoFinanceira;
		$Row->fl_favorecido_autorizacao_credito = $row['fl_favorecido_autorizacao_credito'] ? 1 : 0;
		$Row->fl_nome_social = $row['fl_nome_social'] ? 1 : 0;
		$Row->ds_nome_social = $row['ds_nome_social'];
		return $Row->save();
	}

	public function persistir($row) {
		$this->getDefaultAdapter()->beginTransaction();

		try {
			$this->update(array('id_usuario_alteracao' => Zend_Auth::getInstance()->getIdentity()->id, 'dt_alteracao' => 'now()', 'fl_del' => 1), "id_proposta = {$row['id_proposta']}");
            $modelSeguroInformacoesBancariasBeneficiarios = new Seguro_Model_InformacoesBancarias();
            $modelInformacoesBancariasBeneficiarios = new Seguro_Model_InformacoesBancariasBeneficiarios();
            $modelSistemaInformacoesBancarias = new Sistema_Model_InformacoesBancarias();
            $Beneficiarios = new Seguro_Model_Beneficiarios();

			if (is_array($row['beneficiario']) && count($row['beneficiario'])) {
				$emailInstituicaoFinanceira = '';
				$emailBeneficiarios = [];

                $modelSeguroInformacoesBancariasBeneficiarios->delete('id_proposta', $row['id_proposta']);
                (new Seguro_Model_PropostasBeneficiarios())->deleteProposta($row['id_proposta']);

				foreach ($row['beneficiario'] as $item) {
					if ($item['change']) {
						if ($item['ds_tipo_conta'] == 'n') {
							
							$item['id_banco'] = null;
							$item['ds_agencia'] = null;
							$item['ds_conta'] = null;
							
							if (!$item['ds_nome_beneficiarios']) {
								$this->setMessage('É necessário informar o nome do beneficiário para realizar o cadastro.');
								$this->getDefaultAdapter()->rollBack();
								return false;
							}

							if ((!$item['dt_nascimento_beneficiario']) && ($item['tp_pessoa'] == 'F')) {
								$this->setMessage('É necessário informar a data de nascimento para realizar o cadastro.');
								$this->getDefaultAdapter()->rollBack();
								return false;
							}

                            if (!$item['id_tipo_beneficiario']) {
                                $this->setMessage('É necessário informar o tipo de beneficiário para realizar o cadastro.');
                                $this->getDefaultAdapter()->rollBack();
                                return false;
                            }
						} else if ($item['ds_tipo_conta'] == 's') {
							$item['ds_nome_beneficiarios'] = '';
							$item['dt_nascimento'] = null;
							
							if (!$item['id_banco']) {
								$this->setMessage('É necessário informar o banco para realizar o cadastro.');
								$this->getDefaultAdapter()->rollBack();
								return false;
							}

							if (!$item['ds_qualidade_beneficiario']) {
								$this->setMessage('É necessário informar a qualidade para realizar o cadastro.');
								$this->getDefaultAdapter()->rollBack();
								return false;
							}

							$banco = (new Sistema_Model_Bancos())->find($item['id_banco'])->current();
                            $item['ds_nome_beneficiarios'] = $banco['ds_nome_banco'];
						}

						if (!trim($item['nr_cpf_cnpj'])) {
							$this->setMessage('É necessário informar o CPF/CNPJ para realizar o cadastro.');
							$this->getDefaultAdapter()->rollBack();
							return false;
						}

						if (!$item['vl_limite_beneficio']) {
							$this->setMessage('É necessário informar o valor do beneficio para realizar o cadastro.');
							$this->getDefaultAdapter()->rollBack();
							return false;
						}

						$Propostas = new Seguro_Model_Propostas();
						$Proposta = $Propostas->find($row['id_proposta'])->current();
						$corretor = $Proposta->corretor();
						
						if (!empty($item['ds_email_beneficiario'])) {
							if ($corretor['ds_email'] == $item['ds_email_beneficiario'] ||
								$corretor['ds_email_2'] == $item['ds_email_beneficiario'] ||
								$corretor['ds_email_responsavel'] == $item['ds_email_beneficiario'] || 
								$corretor['ds_email_contato_outros'] == $item['ds_email_beneficiario'] ||
								$corretor['ds_email_contato_outros_2'] == $item['ds_email_beneficiario']) 
							{
								$this->setMessage('Informar e-mail do Beneficiário, pois este e-mail está cadastrado para o Corretor.');
								$this->getDefaultAdapter()->rollBack();
								return false;
							}
						}
						
						if (!empty($item['ds_email_instituicao_financeira'])) {
							if ($corretor['ds_email'] == $item['ds_email_instituicao_financeira'] ||
								$corretor['ds_email_2'] == $item['ds_email_instituicao_financeira'] ||
								$corretor['ds_email_responsavel'] == $item['ds_email_instituicao_financeira'] || 
								$corretor['ds_email_contato_outros'] == $item['ds_email_instituicao_financeira'] ||
								$corretor['ds_email_contato_outros_2'] == $item['ds_email_instituicao_financeira']) 
							{
								$this->setMessage('Informar e-mail do responsável vinculado ao financiamento, pois este e-mail está cadastrado para o Corretor.');
								$this->getDefaultAdapter()->rollBack();
								return false;
							}
						}

						$idPropostaBeneficiario = $item['id'];
						if ($this->_limiteLmga($row['id_proposta'], Agro_Util::formatCurrencyDb($item['vl_limite_beneficio']))) {
							if (Agro_Util::formatCurrencyDb($item['vl_limite_beneficio']) > 0) {
                                $item['fl_ativo'] = true;
								$idPropostaBeneficiario = $this->save($row['id_proposta'], $item);
								if (!$idPropostaBeneficiario) {
									$this->getDefaultAdapter()->rollBack();
									return false;
								} else if ($item['ds_tipo_conta'] === 'n') {

									$rowBeneficiario = $Beneficiarios->fetchRow("cpf_cnpj = '".$data['cpf_cnpj']."'");
									
									if (!empty($rowBeneficiario['id'])) {
										$rowInformacoesBancariasBeneficiarios = $modelInformacoesBancariasBeneficiarios->fetchAll(["id_beneficiario = {$rowBeneficiario['id']}"])->current();

										if (!empty($rowInformacoesBancariasBeneficiarios)) {
											$rowSistemaInformacoesBancarias = $modelSistemaInformacoesBancarias->fetchAll(["id = {$rowInformacoesBancariasBeneficiarios['id_informacoes_bancarias']}"])->current();
	
											if (!empty($rowSistemaInformacoesBancarias)) {
												$modelSeguroInformacoesBancariasBeneficiarios->save([
												  'cpf_cnpj' => $item['nr_cpf_cnpj'],
												  'id_proposta' => $row['id_proposta'],
												  'id_banco' => $rowSistemaInformacoesBancarias['id_banco'],
												  'nu_conta_corrente' => $rowSistemaInformacoesBancarias['ds_conta'],
												  'nu_digito_conta_corrente' => $rowSistemaInformacoesBancarias['nu_digito_conta'],
												  'nu_agencia' => $rowSistemaInformacoesBancarias['ds_agencia'],
												  'nu_digito_agencia' => $rowSistemaInformacoesBancarias['nu_digito_agencia'],
												  'id_forma_pagamento' => $rowInformacoesBancariasBeneficiarios['id_forma_pagamento'],
												]);
											}
										}
									}
								}
							}
						} else {
							$this->setMessage('Não é possível salvar o beneficiário, pois a quantia ultrapassa o valor da LMGA.');
							$this->getDefaultAdapter()->rollBack();
							return false;
						}

						$stdBeneficiarioEmail = new stdClass;
						$stdBeneficiarioEmail->id = $idPropostaBeneficiario;
						$stdBeneficiarioEmail->email = $item['ds_email_beneficiario'];
						$stdBeneficiarioEmail->email_instituicao_financeira = $item['ds_email_instituicao_financeira'];
						$emailBeneficiarios[] = $stdBeneficiarioEmail;
					}
				}

				//Adiciona na tabela de e-mails para assinatura de documentos
				$PropostasEmailAssinaturaDocumento = new Seguro_Model_PropostasEmailAssinaturaDocumento();
				$retorno = $PropostasEmailAssinaturaDocumento->save([
					'id_proposta' => $row['id_proposta'],
					'ds_email_beneficiarios' => Zend_Json::encode($emailBeneficiarios)
				]);

				if (!$retorno) {
					$this->setMessage('Não foi possível salvar os e-mails de assinatura de documentos.');
					$this->getDefaultAdapter()->rollBack();
					return false;
				}
			}

			$this->getDefaultAdapter()->commit();
			return true;
		} catch (Exception $e) {
			$this->getDefaultAdapter()->rollBack();
			die($e);
		}
	}
}
