<?php

class Produto_ValidacoescapacidadeController extends Agro_Controller_Action {

	public function init() {
		$this->id_validacao = $this->getRequest()->getParam('id_validacao');
		$this->view->id_validacao = $this->getRequest()->getParam('id_validacao');

		$this->view->title = "Produto » Validações » Capacidade";
		$this->view->back = "/produto/validacoescapacidade";
	}

	public function listAction()
    {
        $parametros = $this->getRequest()->getParams();
        $this->view->filtroId = !empty($parametros['id']) ? $parametros['id'] : null;
        $this->view->filtroNomeSubGrupo = !empty($parametros['ds_nome_subgrupo']) ? $parametros['ds_nome_subgrupo'] : null;
        $this->view->filtroNomeUsuario = !empty($parametros['ds_nome_usuario']) ? $parametros['ds_nome_usuario'] : null;

		parent::listAction();
	}

	public function getForm()
    {
        if ($this->getRequest()->getParam('id')) {
            $id = !Agro_Util::filterVariable($this->getRequest()->getParam('id'))
                ? 0
                : (int)$this->getRequest()->getParam('id');

            $this->view->produtos = $this->getModel()->getProdutosRelacionados($id);
        }

        $this->view->id_validacao = $this->getRequest()->getParam('id_validacao');

        return new Produto_Form_Validacoescapacidade();
    }

	public function getModel() {
		return new Produto_Model_Validacoescapacidade();
	}

	public function formAction(){
		parent::formAction();

		$this->view->title = "Produto » Validações » Capacidade » ";
		$this->view->title .= ($this->getRequest()->getParam('id') ? "Editar Validação" : "Adicionar Validação");

		$this->view->back = "/produto/validacoescapacidade";
	}

	public function estadosAction() {
		$this->getHelper('layout')->disableLayout();

		$this->view->id = $this->getRequest()->getParam('id');

		$Estados = new Sistema_Model_Estados();
		$this->view->estados = $Estados->fetchAll('fl_ativo = true', 'ds_nome_estado');

		$Limites = new Produto_Model_Validacoescapacidadelimiteestado();
		$this->view->relacionados = $Limites->getRelacionados($this->getRequest()->getParam('id'));
		$this->view->back = "/produto/validacoescapacidade";
	}

	public function relacionarestadosAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		try {
			$Estados = new Produto_Model_Validacoescapacidadelimiteestado();
			if ($this->getRequest()->getParam('id')) {
				$Estados->clear($this->getRequest()->getParam('id'));

				if (is_array($this->getRequest()->getParam('estados'))) {
					foreach ($this->getRequest()->getParam('estados') as $estado) {
						$Estados->save($this->getRequest()->getParam('id'), $estado);
					}
				}

                $rowsValidacoes = (new Produto_Model_Validacoescapacidade())->fetchAll("id_parent = {$this->getRequest()->getParam('id')}")->toArray();

                foreach ($rowsValidacoes as $row) {
                    $Estados->clear($row['id']);

                    foreach ($this->getRequest()->getParam('estados') as $estado) {
                        $Estados->save($row['id'], $estado);
                    }
                }
			}

			$result['message'] = 'Estados relacionados com sucesso.';
		} catch (Exception $e) {
			$result['message'] = 'Não foi possível relacionar os estados.';
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function coberturasAction() {
		$this->getHelper('layout')->disableLayout();

		$this->view->id = $this->getRequest()->getParam('id');

		$Coberturas = new Produto_Model_Coberturas();
		$this->view->coberturas = $Coberturas->fetchAll('fl_ativo = true', 'ds_nome_cobertura');

		$Limites = new Produto_Model_Validacoescapacidadelimitecobertura();
		$this->view->relacionados = $Limites->getRelacionados($this->getRequest()->getParam('id'));
	}

	public function relacionarcoberturasAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		try {
			$Coberturas = new Produto_Model_Validacoescapacidadelimitecobertura();
			if ($this->getRequest()->getParam('id')) {
				$Coberturas->clear($this->getRequest()->getParam('id'));

				if (is_array($this->getRequest()->getParam('coberturas'))) {
					foreach ($this->getRequest()->getParam('coberturas') as $cobertura) {
						$Coberturas->save($this->getRequest()->getParam('id'), $cobertura);
					}
                }

                $rowsValidacoes = (new Produto_Model_Validacoescapacidade())->fetchAll("id_parent = {$this->getRequest()->getParam('id')}")->toArray();

                foreach ($rowsValidacoes as $row) {
                    $Coberturas->clear($row['id']);

                    foreach ($this->getRequest()->getParam('coberturas') as $cobertura) {
                        $Coberturas->save($row['id'], $cobertura);
                    }
                }
            }

			$result['message'] = 'Coberturas relacionadas com sucesso.';
		} catch (Exception $e) {
			$result['message'] = 'Não foi possível relacionar as coberturas.';
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function municipiosAction() {
		$this->view->title .= "VALIDAÇÃO DE LIMITES DE CAPACIDADE » Relacionar Municípios";
		$Municipios = new Produto_Model_Validacoescapacidadelimitemunicipio();
		$Estados = new Produto_Model_Estados();

		if ($this->getRequest()->isPost()) {
			if ($Municipios->save($this->getRequest()->getParam('id'), $this->getRequest()->getParam('municipios'))) {
				$this->view->showMessage(MSG_SUCCESS, 'success');
				$this->_redirect('/produto/validacoescapacidade');
			} else {
				$this->view->showMessage(MSG_ERROR, 'error');
			}
		}

		$this->view->estados = $Estados->fetchAll("ds_nome_estado != 'NULO'", 'ds_nome_estado');
		$this->view->checked = $Municipios->relacionados($this->getRequest()->getParam('id'));
		$this->view->back = "/produto/validacoescapacidade";
	}

	public function importamunicipiosAction() {
		$this->getHelper('layout')->disableLayout();
		$this->getHelper('ViewRenderer')->setNoRender();
		$Estados = new Produto_Model_Estados();
		$Municipios = new Produto_Model_Validacoescapacidadelimitemunicipio();

		$result = array();
		$Adapter = new Zend_File_Transfer_Adapter_Http();
		$Adapter->setDestination(APPLICATION_PATH.'/upload_files/temp/');
		$file = $Adapter->getFileInfo();

		if(!$Adapter->receive($file['municipios_csv']['name'])) {
			$result['status'] = 'Erro ao importar municípios';
		} else {
			$extensao = explode('.',$file['municipios_csv']['name']);
			if($extensao['1'] == 'csv'){
				$arquivo = fopen(APPLICATION_PATH.'/upload_files/temp/' . $file['municipios_csv']['name'], 'r');
				while(($dados = fgetcsv($arquivo, 0, ';')) != false){
					array_push($result,$dados[0]);
				}
				array_shift($result);
				fclose($arquivo);

				if($Municipios->save($this->getRequest()->getParam('id'),$result)){
					$message['status'] = "Importação efetuada com sucesso!";
				} else {
					$message['status'] = "Somente são aceitos arquivos .csv!";
				}

			} else {
				$message['status'] = "Somente são aceitos arquivos .csv!";
			}
		}

		$this->getResponse()->setBody(Zend_Json::encode($message));
	}

	public function getFilter() {
		$where = array();

        if ($this->getRequest()->getParam('action') === 'listsubgrupo'){
            $where['listsubgrupo'] = true;
        }

		if ($this->getRequest()->getParam('id_parent')){
			$where['id_parent'] = array(
					'field' => 'vlc.id_parent',
					'operator' => '=',
					'value' => $this->getRequest()->getParam('id_parent')
			);
		} else {
			$where['id_parent'] = 'vlc.id_parent is null';
		}

        if ($this->getRequest()->getParam('id')){
            $where['id'] = array(
                'field' => 'vlc.id',
                'operator' => '=',
                'value' => $this->getRequest()->getParam('id')
            );
        }

		if ($this->getRequest()->getParam('ds_nome_grupo')) {
			$where[] = array (
				'field' => 'ds_nome_grupo',
				'operator' => ' ilike ',
				'value' => "%".$this->getRequest()->getParam('ds_nome_grupo')."%"
			);
		}

        if ($this->getRequest()->getParam('ds_nome_subgrupo')) {
            $nomeSubgrupo = trim($this->getRequest()->getParam('ds_nome_subgrupo'));

            if (array_key_exists('listsubgrupo', $where)) {
                $nomeSubgrupo = rawurldecode($nomeSubgrupo);
            }

            $where['ds_nome_subgrupo'] = array (
                'field' => 'ds_nome_grupo',
                'operator' => ' ilike ',
                'value' => "%{$nomeSubgrupo}%"
            );
        }

        if ($this->getRequest()->getParam('ds_nome_usuario')) {
            $where['ds_nome_usuario'] = array (
                'field' => 'ds_nome_usuario',
                'operator' => ' ilike ',
                'value' => "%" . trim($this->getRequest()->getParam('ds_nome_usuario')) . "%"
            );
        }

		if ($this->getRequest()->getParam('id_safra_search')) {
			$where[] = array(
					'field' => 'vlc.id_safra',
					'operator' => '=',
					'value' => $this->getRequest()->getParam('id_safra_search')
			);
		}

		if ($this->getRequest()->getParam('id_cultura')) {
			$where[] = "vlc.id in (
						select 
							id_grupo_limite_capacidade 
						from 
							produto.validacoes_limites_capacidade_produtos
							JOIN produto.produtos ON produtos.id = validacoes_limites_capacidade_produtos.id_produto
                			JOIN produto.produtos_geral ON produtos_geral.id = produtos.id_produto_geral					
						where 
							produtos_geral.id_cultura=".$this->getRequest()->getParam('id_cultura').")";
		}

		return $where;
	}

	public function relacionausuarioAction() {
		$this->getHelper('layout')->disableLayout();
		$Capacidade = $this->getModel();
		$capacidade = $Capacidade->find($this->getRequest()->getParam('id'))->current();

		$Limite = new Produto_Model_ValidacoesCapacidadeUsuarios();

		$this->view->id = $this->getRequest()->getParam('id');
		$this->view->relacionados = $Limite->getUsuariosRelacionados($this->getRequest()->getParam('id'));
		$this->view->tipo_corretor_vinculo = $capacidade->tipo_corretor_vinculo;
	}


	public function relacionausuariocomercialAction() {
		$this->getHelper('layout')->disableLayout();
		
		$Capacidade = $this->getModel();
		$capacidade = $Capacidade->find($this->getRequest()->getParam('id'))->current();

		$Limite = new Produto_Model_ValidacoesCapacidadeUsuarios();
	
		//se a Role do usuario for Comercial ou Sinistro/Comercial, filtra os Corretores/Prepostos ao qual o Comercial eh responsavel
		$User = Zend_Auth::getInstance()->getIdentity();
		if($User->id_role == 19 || $User->id_role == 26){
        	$this->view->id_comercial = $User->id;
        	$this->view->id_parent = $capacidade['id_parent'];
		}
		
		$this->view->id = $this->getRequest()->getParam('id');
		$this->view->relacionados = $Limite->getUsuariosRelacionados($this->getRequest()->getParam('id'));
		$this->view->tipo_corretor_vinculo = $capacidade->tipo_corretor_vinculo;
	}
	
	/**
	 * Form para adicionar subgrupo de validacao de capacidade
	 *
	 * @author Marcelo Paulino
	 * @date 15/03/2017
	 */
	public function adiconasubgrupoAction() {
		$this->getHelper('layout')->disableLayout();
	
		$this->view->date = new Zend_Date();
		$this->view->dateFormat = 'dd/MM/Y HH:mm:ss';
	
		if($this->getRequest()->getParam('id')){
			$Model = new Produto_Model_Validacoescapacidade();
			$Row = $Model->find($this->getRequest()->getParam('id'))->current();
			
			$this->view->id = $this->getRequest()->getParam('id');
			$this->view->ds_nome_subgrupo = $Row->ds_nome_grupo;
			$this->view->id_validacao_parent = $Row->id_parent;
			$this->view->vl_limite_capacidade = $Row->vl_limite_capacidade;
			$this->view->fl_ativo = ($Row->fl_ativo == true ? '1' : '0');
		} else {
			$this->view->id_validacao_parent = $this->getRequest()->getParam('id_parent');
		}
		
	}
	
	/**
	 * Salva subgrupo de capacidade
	 *
	 * @author Marcelo Paulino
	 * @date 15/03/2017
	 */
	public function salvarsubgrupoAction()
    {
        $this->getHelper('ViewRenderer')->setNoRender();

        $this->isAjax();

        $model = $this->getModel();

        if ($this->getRequest()->getParam('ds_nome_subgrupo')) {
            $id = !Agro_Util::filterVariable($this->getRequest()->getParam('id'))
                ? 0
                : (int)$this->getRequest()->getParam('id');

            $idParent = !Agro_Util::filterVariable($this->getRequest()->getParam('id_parent'))
                ? 0
                : (int)$this->getRequest()->getParam('id_parent');

            $validacaoParent = $model->getRow($idParent);

            /* Verifica se a soma do novo subgrupo com os demais subgrupos,
             * nao eh maior que o valor total do grupo principal
             */
            $somaSubgrupos = $model->getSomaSubgrupos($idParent, $id);

            if ($somaSubgrupos + Agro_Util::formatCurrencyDb($this->getRequest()->getParam('vl_limite_capacidade')) > $validacaoParent['vl_limite_capacidade']) {
                $return = array(
                    'status' => false,
                    'message' => 'A soma dos Subgrupos nao pode ser maior que a capacidade do Grupo principal.'
                );
            } else {
                $arr['id'] = $id;
                $arr['ds_nome_grupo'] = $this->getRequest()->getParam('ds_nome_subgrupo');
                $arr['vl_limite_capacidade'] = $this->getRequest()->getParam('vl_limite_capacidade');
                $arr['fl_agrupar_municipios'] = $validacaoParent['fl_agrupar_municipios']
                    ? $validacaoParent['fl_agrupar_municipios']
                    : 'f';
                $arr['fl_limite_corretor'] = $validacaoParent['fl_limite_corretor']
                    ? $validacaoParent['fl_limite_corretor']
                    : 'f';

                if (empty($arr['id'])) {
                    $arr['tipo_corretor_vinculo'] = $validacaoParent['tipo_corretor_vinculo'];
                }

                $arr['id_parent'] = $idParent;
                $arr['fl_ativo'] = $this->getRequest()->getParam('fl_ativo') ? $this->getRequest()->getParam('fl_ativo') : '0';

                $return = array('status' => false, 'message' => MSG_ERROR);

                if ($model->save($arr, true)) {
                    $return = array('status' => true, 'message' => MSG_SUCCESS);
                }
            }
        } else {
            $return = array('status' => false, 'message' => 'Informe o nome do subgrupo');
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }
	
	public function listsubgrupoAction(){
		$this->isAjax(true);
		$this->_paginator = false;
		parent::listAction();
	}

    public function calcularvalorutilizadoAction()
    {
        $this->isAjax();

        $row = $this->getModel()->getValorUsadoLimiteCapacidade($this->getRequest()->getParam('idValidacao'));
        $valorUsado = $row['vl_utilizado'];
        $valorLimite = $this->getRequest()->getParam('valorLimite');
        $valorDisponivel = $valorLimite - $valorUsado;

        $this->getResponse()->setBody(Zend_Json::encode([
            'valorLimite' => Agro_Util::formatDbCurrency($valorLimite),
            'valorUsado' => Agro_Util::formatDbCurrency(!empty($valorUsado) ? $valorUsado : 0),
            'valorDisponivel' => Agro_Util::formatDbCurrency($valorDisponivel),
        ]));
    }
}
