<?

class Produto_CondicaoPagamentoController extends Agro_Controller_Action{
	
	public function getModel() {
		return new Produto_Model_CondicoesPagamento();
	}
	
	public function listAction() {
		$this->getHelper('layout')->disableLayout();
		$this->view->params = $this->getRequest()->getParams();

		$Model = $this->getModel();
		$where = $this->getFilter();
		
		$this->_paginator = false;
		$Rs = $Model->fetchAllPaginator($where, $this->getRequest()->getParam('page'), 100, $this->_paginator);
		$this->view->paginator = $Rs;
	}	
	
	public function getFilter() {
		$where = array();
		
		$where[] = array(
			'field' => 'id_produto',
			'operator' => '=',
			'value' => $this->getRequest()->getParam('id')
		);

		return $where;
	}
	
	public function editAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		try {
			$Model = $this->getModel();
			$Json = new Zend_Json();
			
			$row = $Model->find($this->getRequest()->getParam('id'))->current()->toArray();
			
			$this->getResponse()->setBody($Json->encode($row));
		} catch (Exception $e) {
			print_r($e);
		}
	}

	public function loadpropostasAction(): void
	{
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$Model = $this->getModel();

		$condicaoPagamento = $Model->find($this->getRequest()->getParam('id'))->current();
		$idsProposta = (new Produto_Model_CondicaoPagamentoProposta())
			->getIdsPropostasVinculadas((int) $condicaoPagamento['id']);

		$json = Zend_Json::encode([
			'idProduto' => $condicaoPagamento['id_produto'],
			'idCondicaoPagamento' => $condicaoPagamento['id'],
			'idsProposta' => $idsProposta,
			'nomeCondicaoPagamento' => $condicaoPagamento['ds_nome_condicao']
		]);
		
		$this->getResponse()->setBody($json);
	}

	public function desvinculapropostaAction(): void
	{
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$return = [];
		
		try {
			$idProposta = $this->getRequest()->getParam('idProposta');

			if (filter_var($idProposta, FILTER_VALIDATE_INT) === false) {
				throw new Exception('ID proposta deve ser um inteiro');
			}

			(new Produto_Model_CondicaoPagamentoProposta())->delete($idProposta, 'id_proposta');

			$return['mensagem'] = "Proposta {$idProposta} desvinculada com sucesso.";
			$return['erro'] = false;
		} catch (Exception $e) {
			$return['mensagem'] = $e->getMessage();
			$return['erro'] = true;
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	public function relacionapropostaAction(): void
	{
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$return = [];
		$modelCondicaoPagamentoProposta = new Produto_Model_CondicaoPagamentoProposta();
		$mensagem = 'Propostas relacionadas com sucesso.';

		try {
			Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

			$idCondicaoPagamento = $this->getRequest()->getParam('idCondicaoPagamento');
			$idProposta = $this->getRequest()->getParam('idProposta');
			$idProduto = $this->getRequest()->getParam('idProduto');

			if (filter_var($idCondicaoPagamento, FILTER_VALIDATE_INT) === false) {
				throw new Exception('ID condição pagamento deve ser um inteiro');
			}

			if (filter_var($idProposta, FILTER_VALIDATE_INT) === false) {
				throw new Exception('ID proposta deve ser um inteiro');
			}

			if (filter_var($idProduto, FILTER_VALIDATE_INT) === false) {
				throw new Exception('ID Produto deve ser um inteiro.');
			}

			$proposta = (new Seguro_Model_Propostas())->find($idProposta)->current();

			if (empty($proposta)) {
				throw new Exception('Proposta informada não existe');
			}

			if ($proposta['id_produto'] != $idProduto) {
				throw new Exception('Produto vinculado a proposta informada difere do produto sendo configurado.');
			}
			
			$condicaoPagamentoProposta = $modelCondicaoPagamentoProposta->getCondicaoPagamentoByIdProposta($idProposta);

			if (!empty($condicaoPagamentoProposta)) {
				throw new Exception("Proposta já encontra-se vinculada a condição de pagamento '{$condicaoPagamentoProposta['ds_nome_condicao']}'.");
			}

			$modelCondicaoPagamentoProposta->save($idProposta, $idCondicaoPagamento);

			Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
			
			$return['mensagem'] = $mensagem;
			$return['erro'] = false;
		} catch (Exception $e) {
			Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();

			$return['mensagem'] = $e->getMessage();
			$return['erro'] = true;
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}
	
	public function listcondicoescomercialAction(){
		
        $Model = $this->getModel();
        $User = Zend_Auth::getInstance()->getIdentity();
		
		$where = '';
		if ($this->getRequest()->getParam('id')) {
			$where[] = array(
				'field' => 'id_produto',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id')
			);
		}
		
		if($User->id_departamento == 27) {
			$where[] = array(
				'field' => 'fl_condicao_padrao',
				'operator' => '<>',
				'value' => true
			);
		}

        $this->view->back = '/produto/produto';
		$this->view->title = 'Produto » Configurações » Produto » Condições de Pagamento';
		$this->view->paginator = $Model->getData($where, $this->getRequest()->getParam('page'));
	}
	
	public function condicaopagamentocomercialAction(){
	    $this->isAjax(true);
	    
	    if ($this->getRequest()->getParam('id_produto')) {
	        $this->view->id_produto = $this->getRequest()->getParam('id_produto');
	    }
	}
	
	public function saveAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
	
		$result['execute'] = "$.listCondicoesPagamento();";
		
		$params = $this->getRequest()->getParams();
		
		if ($this->getRequest()->getParam('id_condicao_pagamento')){
			$params['id'] = $this->getRequest()->getParam('id_condicao_pagamento');
			unset($params['id_condicao_pagamento']);

			if(!$params['fl_selecao_data']){
				$CondicaoPagamentoItens = new Produto_Model_CondicoesPagamentoItens();
				$data = array('nr_quantidade_dias' => 0);
				$CondicaoPagamentoItens->update($data, "id_condicao_pagamento = ".$params['id']);
			}
		}
		
		$CondicaoPagamento = new Produto_Model_CondicoesPagamento();


		return $CondicaoPagamento->save($params);
		
		
		if ($CondicaoPagamento->save($params)){
			$result['status'] = true;
		
		} else {
			$result['status'] = false;
		}
	
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function checaoutravalidacaoAction() {
		$this->isAjax();

		$id = $this->getRequest()->getParam('id');
		$tpGrupo = $this->getRequest()->getParam('tp_grupo');
		$result = array(
			'status' => true,
			'message' => ""
		);

		if ($id) {
			$condicaoPagamento = new Produto_Model_CondicoesPagamento();
			$condicao = $condicaoPagamento->getRow($id)->toArray();

			$validacoes = array();
			//caso NÃO troque o tipo do grupo, não previsa validar pois pode salvar
			if ($condicao['tp_grupo'] != $tpGrupo && !empty($tpGrupo)) {
				switch ($condicao['tp_grupo']) {
					case 'C':
						$condicaoProponente = new Produto_Model_Condicaopagamentoproponente;
						$validacoes = $condicaoProponente->getProponentesRelacionados($id)->toArray();
						break;
					case 'M':
						$condicaoMunicipio = new Produto_Model_CondicoesPagamentoMunicipios;
						$validacoes = $condicaoMunicipio->fetchAll("id_condicao_pagamento = $id")->toArray();
						break;
					case 'U':
						$condicaoUsuario = new Produto_Model_CondicoesPagamentoUsuarios;
						$validacoes = $condicaoUsuario->fetchAll("id_condicao_pagamento = $id")->toArray();
						break;
				}
			}

			if (!empty($validacoes)) {
				$result['status'] = false;
				$result['message'] = "ATENÇÃO! \n\n Esta condição de pagamento possui outra validação que não é a selecionada!\n Por favor, revise as validações!";
			}
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}
}