<?php

class Produto_Model_Ciclos extends Agro_Db_Table_Abstract {
	protected $_schema = 'produto';
	protected $_name = 'ciclos';
	protected $_primary = 'id';
	public $_order = 'ds_nome_ciclo';
	public $_columnExcel = array(
		'id' => 'Cód',
		'ds_nome_ciclo' => 'Ciclo',
		'cd_ciclo_seguradora' => 'Cód. Seguradora',
		'ds_chave_ciclo' => 'Chave'
	);
	
	public function save(array $values) {
		$Row = $this->getRow($values['id']);
		
		$Row->ds_nome_ciclo = $values['ds_nome_ciclo'];
		$Row->cd_ciclo_seguradora = ($values['cd_ciclo_seguradora'] ? $values['cd_ciclo_seguradora'] : null);
		$Row->ds_chave_ciclo = ($values['ds_chave_ciclo'] ? $values['ds_chave_ciclo'] : null);
		return $Row->save();
	}
	
	public function getCicloEstado($idProduto, $idVariedade, $idEstado) {
		if ($idProduto && $idVariedade && $idEstado) {
			$Select = $this->select()->setIntegrityCheck(false);
			$Select->from('produto.variedades_ciclos_estados', 'id_ciclo');
			$Select->where('id_produto = ?', $idProduto);
			$Select->where('id_variedade = ?', $idVariedade);
			$Select->where('id_estado = ?', $idEstado);

			$Row = $this->fetchRow($Select);
			
			return $Row->id_ciclo;
		} else {
			return false;
		}
	}
	
	public function getCicloRegiao($idProduto, $idVariedade, $idEstado, $idRegiao) {
		if ($idProduto && $idVariedade && $idEstado) {
			$Select = $this->select()->setIntegrityCheck(false);
			$Select->from('produto.variedades_ciclos_estados', 'id_ciclo');
			$Select->where('id_produto = ?', $idProduto);
			$Select->where('id_variedade = ?', $idVariedade);
			$Select->where('id_estado = ?', $idEstado);
			$Select->where('id_regiao = ?', $idRegiao);
			
			$Row = $this->fetchRow($Select);
			
			return $Row->id_ciclo;
		} else {
			return false;
		}
	}
	
// Na restrição de variedades transgênicas, o TRUE em produto.aceitacao_variedade_transgenica.fl_aceita_transgenica define
// que o estado aceita APENAS variedades transgênicas
	public function verificaProdutoUfTransgenico($idProduto, $idEstado) {
		if ($idProduto && $idEstado) {
			$Select = $this->select()->setIntegrityCheck(false);
			$Select->from('produto.aceitacao_variedade_transgenica', 'count(*)');
			$Select->where('id_produto = ?', $idProduto);
			$Select->where('id_estado = ?', $idEstado);
			$Select->where('fl_aceita_transgenica = TRUE');

			return $this->_db->fetchOne($Select);
		} else {
			return false;
		}
	}

    public function getCicloConsultaZoneamento(
      $idProduto,
      $idMunicipio,
      $idTipoSolo,
      $dataSemeadura
    ) {
        if (empty($idProduto) || empty($idMunicipio) || empty($idTipoSolo) || empty($dataSemeadura)) {
            return false;
        }

        $dataSemeadura =  date('Y-m-d', strtotime(str_replace('/', '-', $dataSemeadura)));

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['prod' => 'produto.produtos'], ['cic.id', 'cic.ds_nome_ciclo']);
        $select->join(['vzg' => 'produto.validacoes_zoneamento_graos'], 'vzg.id_produto = prod.id', []);
        $select->join(['cic' => 'produto.ciclos'], 'cic.id = vzg.id_ciclo', []);
        $select->joinLeft(['vce' => 'produto.variedades_ciclos_estados'],
          'vce.id_ciclo = cic.id AND vce.id_produto = prod.id', []);
        $select->join(['vzgm' => 'produto.validacoes_zoneamento_graos_municipios'],
          'vzgm.id_validacao_zoneamento_graos = vzg.id', []);
        $select->where('prod.id = ?', $idProduto);
        $select->where('vzgm.id_municipio = ?', $idMunicipio);
        $select->where('vzg.id_tipo_solo = ?', $idTipoSolo);
        $select->where('vzg.dt_inicial <= ?', $dataSemeadura);
        $select->where('vzg.dt_final >= ?', $dataSemeadura);
		$select->group(['cic.id', 'cic.ds_nome_ciclo']);

        return $this->fetchAll($select)->toArray();
    }
}
