<?php

class Sistema_AssessoriaCorretorController extends Agro_Controller_Action {
	protected $_paginator = false;

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

	public function getForm() {
		return new Sistema_Form_AssessoriaCorretor();
	}

	public function salvarcorretorAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		$retorno = new stdClass();
		$retorno->mensagem = '';
		$retorno->erro = false;
		
		try {
			Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
			$parametros = $this->getRequest()->getParams();

			if (empty($parametros['corretores']) && empty($parametros['prepostos'])) {
				throw new Exception("Ao menos um corretor/sublogin deve ser informado.");
			}

			if (empty($parametros['vl_percentual'])) {
				throw new Exception("Valor percentual da comissão deve ser informado.");
			}

			$Model = $this->getModel();
			foreach ($parametros['corretores'] as $corretor) {
				$parametros['id_corretor'] = $corretor;
			 	if (!$Model->save($parametros)) {
			 		throw new Exception("Erro ao salvar corretores.");
			 	}
			}

			$AssessoriaPreposto = new Sistema_Model_AssessoriasPrepostos();
			foreach ($parametros['prepostos'] as $preposto) {
				$parametros['id_preposto'] = $preposto;
			 	if (!$AssessoriaPreposto->save($parametros)) {
			 		throw new Exception("Erro ao salvar prepostos.");
			 	}
			}

			$return = array('status' => true, 'message' => 'Corretor/Sublogin salvo com sucesso.');
			Agro_Db_Table_Abstract::getDefaultAdapter()->commit();

		} catch(Exception $e) {
			Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
			$return = array('status' => false, 'message' => $e->getMessage());
		}

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

	public function getFilter() {
		$where[] = array(
			'field' => 'id_assessoria',
			'operator' => '=',
			'value' => $this->getRequest()->getParam('id')
		);

		return $where;
	}

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

		if ($this->getRequest()->getParam('tipo') == 'P') {
			$Model = new Sistema_Model_AssessoriasPrepostos();
			$campo = 'id_preposto';
		} else {
			$Model = $this->getModel();
			$campo = 'id_corretor';
		}

		if($Model->delete($this->getRequest()->getParam('identificador'), $campo)) {
			$return['message'] = 'Corretor/Sublogin excluído com sucesso!';
			$return['status'] = true;
			$return['execute'] = "$.listTreeViewCorretor();";
		} else {
			$return['message'] = 'Erro ao excluir vínculo do Corretor/Sublogin!';
			$return['status'] = false;
		}

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

	public function getassessoriacorretorAction()
    {
        $this->isAjax();
        $retorno = ['assessoria' => null];

        $row = $this->getModel()->getAssessoriaByCorretor($this->getRequest()->getParam('id_corretor'));

        if ($row) {
            $retorno['assessoria'] = $row->toArray();
        }

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

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

		$disabled = array();
		$where = array();
		$idUsuario = $this->getRequest()->getParam('id_usuario');

	    $AssessoriaCorretor = new Sistema_Model_AssessoriasCorretores();
	    $corretores = $AssessoriaCorretor->getComboAssessoria();
	    foreach ($corretores as $corretor) {

	    	if (!empty($idUsuario)) {
		    	if ($corretor['id_usuario'] == $idUsuario) {
	      			continue;
	      		}
		    	$disabled[] = $corretor['id_usuario'];

	    	} else {

	        	if ($corretor['vl_percentual']) {
	        		$disabled[] = $corretor['id_usuario'];
	        	}
	    	}
	    }

      	$AssessoriaPreposto = new Sistema_Model_AssessoriasPrepostos();
      	$prepostos = $AssessoriaPreposto->getComboAssessoria();
      	foreach ($prepostos as $preposto) {
      		
      		if (!empty($idUsuario)) {
	      		if ($preposto['id_usuario'] == $idUsuario) {
	      			continue;
	      		}
	      		$disabled[] = $preposto['id_usuario'];
	      	} else {
	        	if ($preposto['vl_percentual']) {
        			$disabled[] = $preposto['id_usuario'];
        		}
	      	}
      	}

      	if (!empty($idUsuario)) {
	      	$where = ["(corretores.id_usuario = {$idUsuario} or corretores.id = (select prepostos.id_corretor FROM sistema.prepostos where prepostos.id_usuario = {$idUsuario}))"];
      	}

      	Agro_View_Helper_TreeViewCorretor::treeViewCorretor(array($idUsuario), $where, $disabled);
	}

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

		$where = $this->getFilter();
		$AssessoriaPreposto = new Sistema_Model_AssessoriasPrepostos();
		$Rs = $AssessoriaPreposto->fetchAllPaginator($where, null, 20, false);
		$this->view->paginator = $Rs;

		$rowAssessorias = (new Sistema_Model_Assessorias())->find($this->getRequest()->getParam('id'))->current();

        $this->view->tituloColunaComissao = 'Comissão Fixa (%)';

        if ($rowAssessorias['tp_comissao'] === Sistema_Model_Assessorias::TP_COMISSAO_PROPORCIONAL) {
            $this->view->tituloColunaComissao = 'Comissão Proporcional (%)';
        }
	}
}