<?php

class Produto_ValidacoessubvencaogruposController extends Agro_Controller_Action {

	public function init() {
		$this->view->id_validacao = $this->getRequest()->getParam('id_validacao');
		$this->id_validacao = $this->getRequest()->getParam('id_validacao');

		$ModelValidacao = new Produto_Model_Validacoes();
		$Validacao = $ModelValidacao->find($this->id_validacao)->current();
		$this->view->title = "Produto » Cadastro » Validações » Configurar » $Validacao->ds_nome_validacao";
		$this->view->back = "/produto/validacoes";
	}

	public function getModel() {
		return new Produto_Model_ValidacoesSubvencaoGrupos();
	}

	public function getForm()
    {
        $user = Zend_Auth::getInstance()->getIdentity();
        $form = new Produto_Form_ValidacoesSubvencaoGrupos();
        $form->populate($this->getRequest()->getParams());

        $this->view->culturas = (new Produto_Model_Culturas())->getCombo(false);

        $corretor = new Sistema_Model_Corretores();
        if ($user->id_departamento == 27) {
            $this->view->corretores = $corretor->getComboUsuarioComercialVinculado(false, $user->id);
        } else {
            $this->view->corretores = $corretor->getComboUsuario(false);
        }

        $id = !Agro_Util::filterVariable($this->getRequest()->getParam('id'))
            ? 0
            : (int)$this->getRequest()->getParam('id');

        if ($id) {
            $subvencaoGruposCulturas = new Produto_Model_ValidacoesSubvencaoGruposCulturas();
            $this->view->culturas_relacionadas = $subvencaoGruposCulturas->getCulturasRelacionados($id);

            $subvencaoGruposUsuarios = new Produto_Model_ValidacoesSubvencaoGruposUsuarios();
            $this->view->corretores_relacionados = $subvencaoGruposUsuarios->getUsuariosRelacionados($id);
        }

        return $form;
    }

	public function indexAction() {
		$this->view->id_validacao = $this->getRequest()->getParam('id_validacao');
		parent::indexAction();
	}

	public function getFilter() {
	    $User = Zend_Auth::getInstance()->getIdentity();
		$where = array();

		if ($this->getRequest()->getParam('id_cultura_search')) {
			$where[] = array(
				'field' => 'vls.id',
				'operator' => 'in',
				'value' => '(select id_validacao_subvencao_grupo from produto.validacoes_limites_subvencao_grupos_culturas where id_cultura = '.$this->getRequest()->getParam('id_cultura_search').')'
			);
		}
		
		if ($this->getRequest()->getParam('id_corretor')) {
			$where[] = array(
				'field' => 'vls.id',
				'operator' => 'in',
				'value' => '(select id_validacao_subvencao_grupo from produto.validacoes_limites_subvencao_grupos_usuarios where id_usuario = '.$this->getRequest()->getParam('id_corretor').')'
			);
		}
		
		if($User->id_departamento == 27){
			$where[] = array (
				'field' => 'vls.id_usuario',
				'operator' => '=',
				'value' => $User->id
			);
		} else {
		    if ($this->getRequest()->getParam('id_usuario')) {
    			$where[] = array (
    				'field' => 'vls.id_usuario',
    				'operator' => '=',
    				'value' => $this->getRequest()->getParam('id_usuario')
    			);
		    }
		}

        if ($this->getRequest()->getParam('ds_ano')) {
            $where[] = array (
              'field' => 'vls.ds_ano',
              'operator' => '=',
              'value' => "'{$this->getRequest()->getParam('ds_ano')}'"
            );
        }

		if ($this->getRequest()->getParam('fl_ativo')) {
			$where[] = array (
				'field' => 'vls.fl_ativo',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('fl_ativo')
			);
		}
		
		return $where;
	}

	public function formAction()
    {
        $this->view->form = $this->getForm();
        $this->view->title .= ' » Formulário';
        $this->view->back = "/produto/validacoessubvencaogrupos/index";
        $this->view->back .= "/id_validacao/{$this->getRequest()->getParam("id_validacao")}";

        $model = $this->getModel();

        $this->view->form->populate($this->getRequest()->getParams());

        if ($this->getRequest()->isPost()) {
            if ($this->view->form->isValid($this->getRequest()->getPost())) {

                if (method_exists($model, 'save')) {
                    $model->getDefaultAdapter()->beginTransaction();

                    $ano = $this->getRequest()->getParam('ds_ano');

                    if (!empty($ano)) {
                        $ano = !Agro_Util::filterVariable($this->getRequest()->getParam('ds_ano'))
                            ? 0
                            : (int)$this->getRequest()->getParam('ds_ano');
                    }

                    $idUsuario = !Agro_Util::filterVariable($this->getRequest()->getParam('id_usuario'))
                        ? 0
                        : (int)$this->getRequest()->getParam('id_usuario');

                    $modelComercial = new Produto_Model_ValidacoesSubvencaoComercial();
                    $vl_liberado = $modelComercial->limite_subvencao_liberado_ano($idUsuario, $ano);
                    $vl_cadastrado = $modelComercial->limite_subvencao_cadastrado(
                        $idUsuario,
                        $ano,
                        $this->getRequest()->getParam('id')
                    );

                    if ($this->getRequest()->getParam('id')) {
                        $rsValidacao = $model->getData('vls.id = ' . $this->getRequest()->getParam('id'));
                    }

                    if ($vl_cadastrado + Agro_Util::formatCurrencyDb($this->getRequest()->getParam('vl_limite_subvencao')) > $vl_liberado) {
                        $mensagem = 'O valor cadastrado excede o limite cadastrado para este Comercial (R$ ';
                        $mensagem .= Agro_Util::formatDbCurrency($vl_liberado) . ').';

                        $this->view->showMessage($mensagem, 'error');
                    } elseif (Agro_Util::formatCurrencyDb($this->getRequest()->getParam('vl_limite_subvencao')) < $rsValidacao[0]['vl_subvencao_utilizada']) {
                        $this->view->showMessage('O valor cadastrado não pode ser menor que o valor utilizado.', 'error');
                    } else {
                        $idValidacao = $model->save($this->getRequest()->getParams());

                        //Verifica se a combinação Cultura/Usuario já não existe para outra Validação do mesmo Comercial
                        unset($idGrupoLimiteSubvencao);
                        foreach ($this->getRequest()->getParam('id_cultura') as $idCultura) {
                            $idCultura = !Agro_Util::filterVariable($idCultura) ? 0 : (int)$idCultura;

                            foreach ($this->getRequest()->getParam('id_corretor') as $idUser) {
                                $idUser = !Agro_Util::filterVariable($idUser) ? 0 : (int)$idUser;
                                $idGrupoLimiteSubvencao = $model->getGrupoLimiteSubvencao(
                                    $idUsuario,
                                    $idCultura,
                                    $idUser,
                                    $ano
                                );
                                if ($idGrupoLimiteSubvencao['id'] == $idValidacao) {
                                    unset($idGrupoLimiteSubvencao);
                                }
                            }
                        }

                        if ($idGrupoLimiteSubvencao) {
                            $model->getDefaultAdapter()->rollBack();

                            $mensagem = ' Já existe uma validação (Id = ' . $idGrupoLimiteSubvencao['id'] . ') com';
                            $mensagem .= ' o(s) Corretor(es)/Cultura(s) selecionado(s).';

                            $this->view->showMessage($mensagem, 'error');
                        } else {
                            if ($idValidacao) {
                                if (is_array($this->getRequest()->getParam('id_cultura'))) {
                                    $subvencaoGruposCulturas = new Produto_Model_ValidacoesSubvencaoGruposCulturas();
                                    $subvencaoGruposCulturas->clearCulturas($idValidacao);
                                    foreach ($this->getRequest()->getParam('id_cultura') as $idCultura) {
                                        $subvencaoGruposCulturas->save($idValidacao, $idCultura);
                                    }
                                }

                                if (is_array($this->getRequest()->getParam('id_corretor'))) {
                                    $subvencaoGruposUsuarios = new Produto_Model_ValidacoesSubvencaoGruposUsuarios();
                                    $subvencaoGruposUsuarios->clearUsuarios($idValidacao);

                                    foreach ($this->getRequest()->getParam('id_corretor') as $idUser) {
                                        $subvencaoGruposUsuarios->save($idValidacao, $idUser);
                                    }
                                }
                                $model->getDefaultAdapter()->commit();
                                $this->view->showMessage(MSG_SUCCESS, 'success');
                                $this->_forward(
                                    'index',
                                    'validacoessubvencaogrupos',
                                    'produto',
                                    array('id_validacao' => $this->getRequest()->getParam("id_validacao"))
                                );
                            } else {
                                $model->getDefaultAdapter()->rollBack();
                                $this->view->showMessage(MSG_ERROR, 'error');
                            }
                        }
                    }
                } else {
                    $this->save($this->getRequest()->getParams());
                }
            } else {
                $this->view->showMessage($this->getHtmlFormError($this->view->form->getMessages()), 'error');
            }
        } elseif ($this->getRequest()->getParam('id')) {
            $row = $model->getData('vls.id = ' . $this->getRequest()->getParam('id'));
            $this->view->form->populate($row[0]);
        }
    }
	
	public function relacionausuarioAction()
    {
        $this->getHelper('layout')->disableLayout();

        $id = !Agro_Util::filterVariable($this->getRequest()->getParam('id'))
            ? 0
            : (int)$this->getRequest()->getParam('id');

        $this->view->relacionados = (new Produto_Model_ValidacoesSubvencaoGruposUsuarios())->getUsuariosRelacionados(
            $id
        );
        $this->view->usuarios = (new Sistema_Model_Corretores())->getCheckCorretores();
        $this->view->id = $id;
    }

	public function relacionaculturasAction()
    {
        $this->getHelper('layout')->disableLayout();

        $id = !Agro_Util::filterVariable($this->getRequest()->getParam('id'))
            ? 0
            : (int)$this->getRequest()->getParam('id');

        $this->view->relacionados = (new Produto_Model_ValidacoesSubvencaoGruposCulturas())->getCulturasRelacionados(
            $id
        );
        $this->view->culturas = (new Produto_Model_Culturas())->getCheckCulturas();
        $this->view->id = $id;
    }

}