<?php

class Comercializacao_RelacionartaxamunicipioController extends Agro_Controller_TaxaAgrupamento {

	public function init() {
	    ini_set('memory_limit','1024M');
	    ini_set('max_input_vars','10000');

		if ($this->getRequest()->getParam('id')) {
			$Agrupamento = (new Comercializacao_Model_TaxasAgrupamentos())->find($this->getRequest()->getParam('id'))->current();
			$this->view->taxa = $Agrupamento['ds_nome_agrupamento_taxas'];
			$this->view->title = "Gerência de Taxas » Relacionar Municípios";
		}

		parent::init();
	}

	public function indexAction() {
		$session = new Zend_Session_Namespace('agrupamento');

		if ($this->getRequest()->isPost()) {
			$this->save($this->getRequest()->getParams());
		}

		$Estados = new Sistema_Model_Estados();
		$Model = new Comercializacao_Model_TaxasAgrupamentoMunicipios();
		$this->view->municipios = $Estados->getMenuEstadoAbas();

		$Rs = $Model->fetchAll("id_taxa_agrupamento = {$this->getRequest()->getParam('id')}")->toArray();
		$this->view->relacionados = array();
		if (is_array($Rs)) {
			foreach ($Rs as $relacionado) {
				$this->view->relacionados[$relacionado['id_municipio']] = $relacionado['vl_produtividade_estimada'];
			}
		}
	}

	public function importamunicipioAction(){
		$this->getHelper('layout')->disableLayout();
		$this->getHelper('ViewRenderer')->setNoRender();
		$result = $produtividade = 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'])){
			$message['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]);
					$produtividade[$dados[0]] = $dados[1];
				}
				array_shift($result);

				//elimando o primeiro elemento do array sem usar o 
				//array_shift pois este perde os valores das chaves
				reset($produtividade); 
				unset($produtividade[key($produtividade)]);
				fclose($arquivo);
				$dados['municipios'] = $result;
				$dados['produtividade_estimada'] = $produtividade;
				$dados['id'] = $this->getRequest()->getParam('id');
				$this->save($dados);
				$message['status'] = "Importação efetuada com sucesso!";
			} else {
				$message['status'] = "Somente são aceitos arquivos .csv!";
			}
		}

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

	public function save($post) {
		try {
			$Model = new Comercializacao_Model_TaxasAgrupamentoMunicipios();
			$Model->deleteMunicipios($post['id']);

			if (is_array($post['municipios'])) {
				foreach ($post['municipios'] as $municipio) {
					$data = array();
					$data['id_taxa_agrupamento'] = $post['id'];
					$data['id_municipio'] = $municipio;

					if (is_array($post['produtividade_estimada'])) {
						if (array_key_exists($municipio, $post['produtividade_estimada'])) {
							$data['vl_produtividade_estimada'] = $post['produtividade_estimada'][$municipio];
						}
					}

					$Model->save($data);
					$this->view->showMessage(MSG_SUCCESS, 'success');
				}
			}
		} catch (Exception $e) {
			$this->view->showMessage(MSG_ERROR, 'error');
		}
	}

	public function settaxaAction() {
		$session = new Zend_Session_Namespace('agrupamento');
		$session->id = $this->getRequest()->getParam('id');
		$this->_redirect('/comercializacao/relacionartaxamunicipio');
	}

	public function relacionarAction()
    {
        $this->isAjax();
        $parametros = $this->getRequest()->getParams();
        $adapter = Agro_Db_Table_Abstract::getDefaultAdapter();
        $retorno = ['erro' => false, 'mensagem' => 'Produtividade salva com sucesso.'];
		
        try {
            $adapter->beginTransaction();
            
			$modelTaxaAgrupamentoMunicipio = new Comercializacao_Model_TaxasAgrupamentoMunicipios();
            $modelTaxaAgrupamentoMunicipio->deleteMunicipios($parametros['id_taxa_agrupamento']);

            if (!empty($parametros['vl_produtividade_estimada'])) {
                $modelTaxaAgrupamentoMunicipio->save($parametros);
            }

			(new Seguro_Model_Propostas())
				->update(['fl_taxa_pe_por_item' => 0], "id = {$parametros['id_proposta']}");

            $adapter->commit();
        } catch (Exception $e) {
            $adapter->rollback();
            $retorno = ['erro' => true, 'mensagem' => 'Erro ao salvar a produtividade.'];
        }

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