<?php

class Agro_Controller_Comercializacao extends Agro_Controller_Action {
	//public $_paginator = false;
	
	public function getForm(){
		return new Comercializacao_Form_Comercializacao();
	}
	
	public function getModel(){
		$Model = new Comercializacao_Model_Comercializacoes();
		$Model->tp_comercializacao = $this->tipo;
		
		return $Model;
	}
	
	
	public function getFilter() {
		$where = array();
		$where[] = array(
			'field' => 'tp_comercializacao',
			'operator' => '=',
			'value' => $this->tipo
		);
		
		$where[] = array(
			'field' => 'ds_nome_comercializacao',
			'operator' => 'ilike',
			'value' => '%'.$this->getRequest()->getParam('ds_nome_comercializacao').'%'
		);
		
		if($this->getRequest()->getParam('id_safra')){
			$where[] = array(
				'field' => 'id_safra',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_safra')
			);
		}
		
		if($this->getRequest()->getParam('id_produto')){
			$where[] = array(
				'field' => 'id_produto',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_produto')
			);
		}
		
		if($this->getRequest()->getParam('fl_ativo')){
			$where[] = array(
				'field' => 'c.fl_ativo',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('fl_ativo')
			);
		}
		
		if ($this->getRequest()->getParam('id_estado')) {
			$where[] = array(
				'field' => 'm.id_estado',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_estado')
			);
		}
		
		return $where;
	}
	
	public function formAction() {
		if ($this->getRequest()->getParam('id')) {
			$row = $this->getRow();
			
			$this->view->edit = true;
			$this->view->safra = $row['ds_nome_safra'];
			$this->view->produto = $row['ds_nome_produto'];
			$this->view->idSafra = $row['id_safra'];
			$this->view->idProduto = $row['id_produto'];
		}
		
		parent::formAction();
	}
	
	public function save(array $post) {
		try {
			$Model = $this->getModel();
			if(!$post['id_produto']) {
				$this->view->showMessage("O campo produto é obrigatório", 'error');
				return false;
			}
			if ($this->valida($post)) {
				$data = array();
				$data['id_produto'] = $post['id_produto'];
	  			$data['ds_nome_comercializacao'] = $post['ds_nome_comercializacao'];
				$data['dt_comercializacao_inicio'] = Agro_Util::formatDate($post['dt_comercializacao_inicio'], Zend_Date::W3C);
				$data['dt_comercializacao_fim'] = Agro_Util::formatDate($post['dt_comercializacao_fim'], Zend_Date::W3C);
				$data['dt_cobertura_inicio'] = Agro_Util::formatDate($post['dt_cobertura_inicio'], Zend_Date::W3C);
				$data['dt_cobertura_fim'] = Agro_Util::formatDate($post['dt_cobertura_fim'], Zend_Date::W3C);
				$data['tp_comercializacao'] = $this->tipo;
				
				if ($post['id']) {
					$Model->update($data, "id = {$post['id']}");
				} else {
					$Model->insert($data);
				}
				
				$this->_redirect('/comercializacao/' . $this->getNomeTipo());
			} else {
				$this->view->form->populate($post);
				return false;
			}
		} catch (Exception $e) {
			$this->view->showMessage(MSG_ERROR, 'error');
		}
	}
	
	public function valida($post) {
		$iComercializacao = strtotime(Agro_Util::formatDate($post['dt_comercializacao_inicio'], Zend_Date::W3C));
		$fComercializacao = strtotime(Agro_Util::formatDate($post['dt_comercializacao_fim'], Zend_Date::W3C));
		$iCobertura = strtotime(Agro_Util::formatDate($post['dt_cobertura_inicio'], Zend_Date::W3C));
		$fCobertura = strtotime(Agro_Util::formatDate($post['dt_cobertura_fim'], Zend_Date::W3C));
		
		if ($fComercializacao < $iComercializacao) {
			$this->view->showMessage('Data final de Comercialização não pode ser menor que a Data inicial de Comercialização.', 'alert');
			return false;
		}
		
		if ($fCobertura < $iCobertura) {
			$this->view->showMessage('Data final de Cobertura não pode ser menor que a Data inicial de Cobertura.', 'alert');
			return false;
		}
		
		if ($fCobertura < $fComercializacao) {
			$this->view->showMessage('Data final de Cobertura não pode ser menor que a Data final de Comercialização.', 'alert');
			return false;
		}
		
		if ($iCobertura < $iComercializacao) {
			$this->view->showMessage('Data inicial de Cobertura não pode ser menor que a Data inicial de Comercialização.', 'alert');
			return false;
		}
		
		return true;
	}
	
	/**
	 * Retorna o nome do tipo da comercialização
	 *
	 * @return string
	 */
	public function getNomeTipo(){
		switch ($this->tipo){
			case 'M': $tipo = 'municipio'; break;
			case 'E': $tipo = 'estado'; break;
			case 'U': $tipo = 'usuario'; break;
		}
		return $tipo;
	}
}