<?php

class Produto_VariedadeController extends Agro_Controller_Action {

	public function init() {
		$this->view->title = 'Produto » Cadastro » Variedades';
	}

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

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

	public function getFilter() {
		$where = array();

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

		if ($this->getRequest()->getParam('ds_nome_variedade')) {
			$where[] = array(
				'field' => 'ds_nome_variedade',
				'operator' => 'ilike',
				'value' => '%'.$this->getRequest()->getParam('ds_nome_variedade').'%'
			);
		}

		return $where;
	}

	public function variedadesAction() {
		$result = array();
		$result['variedades'] = null;
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$Variedades = $this->getModel();
		$variedades = $Variedades->getVariedadesMobile();

		if (count($variedades) > 0) {
			$result['variedades'] = $variedades;
		}

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

	public function save(array $post) {
		try {
			$data = array();
			$data['ds_nome_variedade'] = $post['ds_nome_variedade'];
			$data['cd_variedade_seguradora'] = ($post['cd_variedade_seguradora'] ? $post['cd_variedade_seguradora'] : 0);
			$data['fl_transgenico'] = ($post['fl_transgenico'] ? '1' : '0');
			
			$Model = $this->getModel();
			if ($post['id']) {
				$Model->update($data, "id = {$post['id']}");
			} else {
				$Model->insert($data);
			}

			$this->_redirect('/produto/variedade');
		} catch (Exception $e) {
			$this->view->showMessage(MSG_ERROR.$e, 'error');
		}
	}

	public function viewAction() {
		$this->getHelper('layout')->setLayout('popup');
		$this->view->popoup = 1;
		$Model = new Produto_Model_ProdutosVariedades();
		$this->view->produtos = $Model->getProdutosVariedades($this->getRequest()->getParam('id'));
	}


	public function geraxlsAction() {

		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		$Model = $this->getModel();

		$ret = $Model->getDadosXls();
		require_once(APPLICATION_PATH . "/../library/Agro/xls/PhpSimpleXlsGen.php");

		$myxls = new PhpSimpleXlsGen();

		$myxls->totalcol = 4;
		//ID | NOME | COD_SEGURADORA | ATIVO
		$myxls->InsertText(utf8_decode('Código'));
		$myxls->InsertText('Nome');
		$myxls->InsertText(utf8_decode('Código Seguradora'));
		$myxls->InsertText('Ativo');

		foreach($ret as $linha) {
			$myxls->InsertText( utf8_decode($linha['id']) . ' ');
			$myxls->InsertText( utf8_decode($linha['ds_nome_variedade']) . ' ');
			$myxls->InsertText( utf8_decode($linha['cd_variedade_seguradora']) . ' ');

			$myxls->InsertText( $linha['fl_ativo'] ? 'Ativo' : 'Inativo' );
		}
		$myxls->SendFile();
	}

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

        $retorno = ['erro' => false, 'mensagem' => 'Importação realizada com sucesso.'];
        $registros = [];

        $Adapter = new Zend_File_Transfer_Adapter_Http();
        $Adapter->setDestination(APPLICATION_PATH . '/upload_files/temp/');
        $Adapter->addValidator('Extension', false, ['csv', 'xlsx']);

        $file = $Adapter->getFileInfo();
        $nomeArquivo = $file['variedades']['name'];

        if (!$Adapter->isValid()) {
            $retorno = [
              'erro'     => true,
              'mensagem' => 'Formato de arquivo inválido (formatos aceitos: .csv e .xlxs).'
            ];

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

            return false;
        }

        if (!$Adapter->receive($nomeArquivo)) {
            $retorno = ['erro' => true, 'mensagem' => 'Erro ao receber o arquivo de importação as variedades.'];

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

            return false;
        }

        $arquivo = fopen(APPLICATION_PATH . '/upload_files/temp/' . $nomeArquivo, 'r');

        while (($dados = fgetcsv($arquivo, 0, ';')) != false) {
            if (count($dados) !== 4) {
                $mensagem = "Importação inválida. O arquivo deve conter 4 colunas com os cabeçalhos/dados na seguinte ordem:";
                $mensagem .= "\n1ª - Nome da Variedade (dados obrigatórios)";
                $mensagem .= "\n2ª - ID_Agro (dados não obrigatórios)";
                $mensagem .= "\n3ª - ID_Essor (dados não obrigatórios)";
                $mensagem .= "\n4ª - Transgênicas (dados não obrigatórios)";

                $retorno = ['erro' => true, 'mensagem' => $mensagem];

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

                return false;
            }

            $dados[0] = utf8_encode($dados[0]);

            $variedade = ['ds_nome_variedade' => $dados[0], 'fl_transgenico' => isset($dados[3]) && $dados[3] === 'Sim' ? '1' : '0'];

            if (!empty($dados[1])) {
                $variedade['id'] = $dados[1];
            }

            if (!empty($dados[2])) {
                $variedade['cd_variedade_seguradora'] = $dados[2];
            }

            array_push($registros, $variedade);
        }

        fclose($arquivo);

        Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
        try {
            array_shift($registros);

            foreach ($registros as $registro) {
                $modelVariedades = $this->getModel();

                if (!empty($registro['id'])) {
                    $modelVariedades->update($registro, "id = {$registro['id']}");
                } else {
                    $variedadeExistente = !empty($modelVariedades->getVariedadeByDescricao($registro['ds_nome_variedade']));

                    if ($variedadeExistente) {
                        $mensagem = 'Importação concluída com sucesso. Algumas variedades não foram cadastradas por';
                        $mensagem .= ' já existirem.';

                        $retorno = ['erro' => false, 'mensagem' => $mensagem];
                    } else {
                        $modelVariedades->insert($registro);
                    }
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $erro) {



            $retorno = ['erro' => true, 'mensagem' => 'Erro ao importar as variedades.'];

            Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
        }

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

        return true;
    }
}
