<?php

require_once 'sistema/controllers/StatusController.php';
require_once 'sistema/controllers/TipostatusController.php';
require_once 'sistema/controllers/UsuarioController.php';

class Sistema_Form_Corretor extends Agro_Form
{
    private $usuarioAgro = true;
    private $modelUsuarios;
    private $tipoUsuario = null;
    private $usuarioPermissaoEdicao = true;

	public function init() {
		$Role = new Sistema_Model_Roles();
		$modelCorretores = new Sistema_Model_Corretores();
        $this->modelUsuarios = new Sistema_Model_Usuarios();
        $usuarioLogado = Zend_Auth::getInstance()->getIdentity();
        $this->tipoUsuario = $usuarioLogado->tp_usuario;

        if (!$this->modelUsuarios->isFuncionarioAgro($usuarioLogado->id)) {
            $this->usuarioAgro = $this->usuarioPermissaoEdicao = false;
        }

		$camposRequired = true;
		if ($this->usuarioAgro && (!$this->_request['id'])) {
			$camposRequired = false;
		}

		$idStatus = '';
		if (!empty($this->_request['id'])) {
			$corretor = $modelCorretores->find($this->_request['id'])->current();
			if (!empty($corretor)) {
				$idStatus = $corretor['id_status'];
			}
		}

		if ($this->usuarioAgro && $idStatus == $this->getStatusCadastroInicial()) {
			$camposRequired = false;
		}

		$this->addElement('hidden', 'id', array('decorators' => $this->buttonDecorator));
		$this->addElement('hidden', 'id_usuario', array('decorators' => $this->buttonDecorator));
		$this->addElement('hidden', 'tp_usuario', array('value'=>'C','decorators' => $this->buttonDecorator));
		$this->addElement('hidden', 'id_role', array('decorators' => $this->buttonDecorator, 'value' => $Role->getIdChave("CORRETOR")));

		$this->addElement('text', 'nr_susep', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Nº SUSEP',
			'class' => 'integer',
			'maxlength' => 17,
			'size' => 20
		));

		$this->addElement('select', 'tp_pessoa', array(
			'MultiOptions' => array('F'=>'FÍSICA','J'=>'JURÍDICA'),
			'decorators' => $this->elementDecorator,
			'label' => 'Tipo Pessoa',
			'required' => true
		));

		$this->addElement('text', 'cpf_cnpj', array(
			'decorators' => $this->elementDecorator,
			'label' => 'CPF/CNPJ',
			'maxlength' => 20,
			'class' => 'cpf_cnpj',
			'size' => 20,
			'required' => true
		));

		$this->addElement('text', 'ds_nome_corretor', array(
			'decorators' => $this->elementDecorator,
			'maxlength' => 100,
			'class' => 'upper',
			'label' => 'Nome/Razão Social',
			'size' => 40,
			'required' => true
		));

		$this->addElement('text', 'ds_nome_fantasia', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Nome Fantasia',
			'maxlength' => 100,
			'class' => 'upper',
			'size' => 40
		));

		$this->addElement('text', 'ds_nome_abreviado', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Nome Abreviado',
			'maxlength' => 100,
			'class' => 'upper',
			'size' => 40
		));

		$this->addElement('text', 'ds_razao_social', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Razão Social',
			'maxlength' => 100,
			'class' => 'upper',
			'size' => 40
		));

		$this->addElement('text', 'ds_nome_responsavel', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Nome do Responsável Técnico',
			'maxlength' => 100,
			'size' => 40,
            'class' => 'upper validarNome',
			'required' => $camposRequired
		));

		$this->addElement('text', 'cpf_responsavel', array(
			'decorators' => $this->elementDecorator,
			'label' => 'CPF Responsável Técnico',
			'maxlength' => 14,
			'size' => 22,
			'required' => $camposRequired
		));

		$this->addElement('text', 'cd_corretor_seguradora', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Cód. Seguradora',
			'class' => 'integer',
			'maxlength' => 10,
			'size' => 10
		));

		$this->addElement('text', 'ds_email', array(
			'decorators' => $this->elementDecorator,
			'label' => 'E-mail Principal',
			'maxlength' => 100,
			'size' => 40,
			'required' => true,
			'class' => 'validarEmail'
		));

		$this->addElement('text', 'ds_email_2', array(
			'decorators' => $this->elementDecorator,
			'label' => 'E-mail 2',
			'maxlength' => 100,
			'size' => 40
		));

		$this->addElement('text', 'ds_homepage', array(
			'validators' => array(array('validator'=> new Zend_Validate_Hostname())),
			'decorators' => $this->elementDecorator,
			'label' => 'Site',
			'maxlength' => 100,
			'size' => 40
		));

		$this->addElement('text', 'ds_usuario_msn', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Usuário MSN',
			'maxlength' => 100,
			'size' => 40
		));

		$this->addElement('text', 'ds_usuario_skype', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Usuário Skype',
			'maxlength' => 100,
			'size' => 40
		));
		$this->addElement('text', 'ds_nome_contato', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Pessoa Contato',
			'maxlength' => 50,
			'size' => 40
		));

		$this->addElement('textarea', 'ds_observacao', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Observações',
			'cols' => 50,
			'rows' => 5
		));

		$Empresa = new Sistema_Model_Empresas();
		$this->addElement('select', 'id_comercial', array(
			'decorators' => $this->elementDecorator,
			'MultiOptions' => $Empresa->getComercial(true,false),
			'label' => 'Principal',
			'required' => true
		));

        $Empresa = new Sistema_Model_Empresas();
        $this->addElement('select', 'id_comercial_adicional', array(
          'decorators' => $this->elementDecorator,
          'MultiOptions' => $Empresa->getComercial(true,false),
          'label' => 'Adicional',
          'required' => true
        ));

		$this->addElement('text', 'ds_usuario_msn', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'Usuário MSN',
		        'maxlength' => 100,
		        'size' => 40
		));

		$this->addElement('text', 'ds_email_responsavel', array(
			'decorators' => $this->elementDecorator,
			'label' => 'E-mail do Responsável Técnico',
			'maxlength' => 100,
			'size' => 40,
			'required' => $camposRequired,
			'class' => "validarEmail"
		));

		$this->addElement('text', 'ds_telefone_responsavel', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'Telefone do Responsável Técnico',
    			'class' => 'telefone',
    			'maxlength' => 13,
    			'size' => 14
		 ));

		$this->addElement('text', 'ds_contato_seguro_agricola', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'Contato Seguro Agrícola',
		        'maxlength' => 50,
		        'size' => 40,
				'required' => true,
                'class' => 'upper validarNome',
		));

		$this->addElement('text', 'ds_telefone_contato_seguro_agricola', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'Telefone',
		        'class' => 'telefone',
		        'maxlength' => 13,
		        'size' => 14
		));

		$this->addElement('text', 'cpf_contato_seguro_agricola', array(
			'decorators' => $this->elementDecorator,
			'label' => 'CPF',
			'maxlength' => 14,
			'size' => 22,
			'required' => $camposRequired
		));

		$this->addElement('text', 'ds_contato_outros', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'Outros 1',
		        'maxlength' => 50,
		        'size' => 40
		));

		$this->addElement('text', 'ds_email_contato_outros', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'E-mail',
		        'maxlength' => 100,
		        'size' => 40
		));

		$this->addElement('text', 'ds_telefone_contato_outros', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'Telefone',
		        'class' => 'telefone',
		        'maxlength' => 13,
		        'size' => 14
		));

		$this->addElement('text', 'ds_contato_outros_2', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'Outros 2',
		        'maxlength' => 50,
		        'size' => 40
		));

		$this->addElement('text', 'ds_email_contato_outros_2', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'E-mail',
		        'maxlength' => 100,
		        'size' => 40
		));

		$this->addElement('text', 'ds_telefone_contato_outros_2', array(
		        'decorators' => $this->elementDecorator,
		        'label' => 'Telefone',
		        'class' => 'telefone',
		        'maxlength' => 13,
		        'size' => 14
		));

		$this->addElement('text', 'ds_nome_usuario', array(
				'decorators' => $this->elementDecorator,
				'label' => 'Usuário',
				'maxlength' => 40,
				'class' => 'lower',
				'size' => 30,
				'required' => true
		));

		$this->addElement('text', 'ds_senha', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Senha',
			'size' => 30
		));


		$this->addElement('text', 'ds_senha2', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Confirmar Senha',
			'size' => 30
		));

		$TipoArquivoCorretor = new Sistema_Model_TipoArquivoCorretor();
		$this->addElement('select', 'id_tipo_arquivo', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Tipo de Arquivo',
			'MultiOptions' => $TipoArquivoCorretor->getCombo(false)
		));

		$this->addElement('text', 'ds_nome_usuario_alteracao', array(
				'decorators' => $this->elementDecorator,
				'label' => 'Usuário da Alteração',
				'readonly' => true,
				'size' => 25
		));

		$this->addElement('text', 'ds_nome_usuario_criacao', array(
				'decorators' => $this->elementDecorator,
				'label' => 'Usuário da Criação',
				'readonly' => true,
				'size' => 25
		));

		$this->addElement('text', 'dt_alteracao', array(
				'decorators' => $this->elementDecorator,
				'label' => 'Data de Alteração',
				'readonly' => true,
				'size' => 25
		));

		$this->addElement('text', 'dt_criacao', array(
				'decorators' => $this->elementDecorator,
				'label' => 'Data de Criação',
				'readonly' => true,
				'size' => 25
		));

        $this->addElement('hidden', 'id_status', array(
          'decorators' => $this->elementDecorator,
        ));

        $this->addElement('hidden', 'ds_observacao_status', array(
          'decorators' => $this->elementDecorator,
        ));

        $this->addElement('hidden', 'fl_treinado', array(
          'decorators' => $this->elementDecorator,
        ));

        $this->addElement('hidden', 'usuario_agro', array(
          'decorators' => $this->elementDecorator,
          'value' => $this->usuarioAgro,
        ));

        $this->addElement('hidden', 'permissao_edicao', array(
          'decorators' => $this->elementDecorator,
          'value' => $this->usuarioPermissaoEdicao,
        ));

        $this->addElement('checkbox', 'fl_cadastro_inalterado', array(
          'decorators' => $this->elementDecorator,
          'label' => 'Declaro que nenhum dado foi alterado'
        ));

        $this->addElement('hidden', 'periodo_cadastro_anual', array(
          'decorators' => $this->elementDecorator,
          'value' => false,
        ));

        $this->addElement('hidden', 'data_cadastro_anual', array(
          'decorators' => $this->elementDecorator,
          'value' => false,
        ));

        $this->addElement('hidden', 'download_documento', array(
          'decorators' => $this->elementDecorator,
          'value' => false,
        ));

		$this->addElement('checkbox', 'fl_permite_reduzir_comissao', array(
			'decorators' => $this->elementDecorator,
			'label' => 'Autorizado reduzir comissão?'
		));

        $this->addElement('checkbox', 'fl_permite_alterar_comissao', array(
          'decorators' => $this->elementDecorator,
          'label' => 'Login Autorizado a Alterar/Visualizar Comissão'
        ));
	
		
		$modelStatus = new Sistema_Model_Status();
		$comboStatusArquivos = $modelStatus->getComboStatusArquivos(Sistema_Model_Tipostatus::CORRETOR);
		$opcoesStatusArquivo = ["Todos"];
		foreach ($comboStatusArquivos as $statusArquivo) {
			$opcoesStatusArquivo[$statusArquivo['id_status']] = $statusArquivo['ds_status'];
		}

		$this->addElement('select', 'id_status_cadastro', array(
			'decorators' => $this->elementDecorator,
			'MultiOptions' => $opcoesStatusArquivo,
			'label' => 'Status de cadastro',
			'required' => false
		));
	}

    public function isValid($params) {
        $params['id_comercial'] = $params['id_comercial'] === '0' ? '' : $params['id_comercial'];
        return parent::isValid($params);
    }

	public function populate(array $values){

		// Preenche os campos do usuario
        $values['usuario_agro'] = $this->usuarioAgro;
        $values['permissao_edicao'] = $this->usuarioPermissaoEdicao;
        $values['periodo_cadastro_anual'] = false;
        $values['fl_cadastro_inalterado'] = false;

		if($values['id_usuario']) {
			$Usuario = $this->modelUsuarios->find($values['id_usuario'])->current();

			$values['ds_nome_usuario'] = $Usuario->ds_nome_usuario;
			$values['tp_usuario'] = $Usuario->tp_usuario;
			$values['ds_senha2'] = $Usuario->ds_senha;
			$values['ds_senha'] = $Usuario->ds_senha;
			$values['id_role'] = $Usuario->id_role;
		}

		if($values['id']) {
			$Model = new Sistema_Model_Corretores();
            $UsuarioCriacao = $this->modelUsuarios->find($values['id_usuario_criacao'])->current();
            $UsuarioAlteracao = $this->modelUsuarios->find($values['id_usuario_alteracao'])->current();

			$this->id_comercial->setValue($Model->getComerciais($values['id']));

			$values['dt_criacao'] = Agro_Util::formatDate($values['dt_criacao'], Zend_Date::DATETIME);
			$values['dt_alteracao'] = Agro_Util::formatDate($values['dt_alteracao'], Zend_Date::DATETIME);
			$values['ds_nome_usuario_criacao'] = $UsuarioCriacao->ds_nome_usuario;
			$values['ds_nome_usuario_alteracao'] = $UsuarioAlteracao->ds_nome_usuario;

			if ($this->usuarioAgro || $this->tipoUsuario === Sistema_Model_Usuarios::TIPO_USUARIO_CORRETOR) {
			    $corretorCadastroAnual = $this->verificarPeriodoCadastroAnual($values['id']);

			    if (!empty($corretorCadastroAnual)) {
                    $this->usuarioPermissaoEdicao = $values['permissao_edicao'] = $values['periodo_cadastro_anual'] = true;
                    $values['fl_cadastro_inalterado'] = $corretorCadastroAnual[0]['fl_cadastro_inalterado'];

                    $dataInicio = Agro_Util::formatDate($corretorCadastroAnual[0]['dt_inicio']);
                    $dataFim = Agro_Util::formatDate($corretorCadastroAnual[0]['dt_fim']);

                    $values['data_cadastro_anual'] = "Período: {$dataInicio} a {$dataFim}";

                    if ($values['id_status'] !== $this->getStatusAtualizacaoCadastro()) {
                        $values['download_documento'] = true;
                    }
                }
            }
		}

		$values['ds_senha2'] = '';
		$values['ds_senha'] = '';

		parent::populate($values);
	}

	private function verificarPeriodoCadastroAnual(int $idCorretor)
    {
        $modelCorretorPeriodoCadastro = new Sistema_Model_CorretoresPeriodoCadastroAnual();
        return $modelCorretorPeriodoCadastro->getByCorretor($idCorretor, date('Y-m-d'))->toArray();
    }

    private function getStatusAtualizacaoCadastro() : int
    {
        $modelStatus = new Sistema_Model_Status();
        return $modelStatus->getIdStatus(
          Sistema_Model_Status::CORRETOR_ATUALIZACAO_CADASTRO, Sistema_Model_Tipostatus::CORRETOR
        );
    }

	private function getStatusCadastroInicial() : int
    {
        $modelStatus = new Sistema_Model_Status();
        return $modelStatus->getIdStatus(
          Sistema_Model_Status::CORRETOR_CADASTRO_INICIAL, Sistema_Model_Tipostatus::CORRETOR
        );
    }
}
