<?php

class Produto_Model_Culturas extends Agro_Db_Table_Abstract {
    const ID_MACA = 53;
    const PASTAGEM = 102;
	const MAP_IDS_UVA = [
		80 => 'Uva de Vinho',
		81 => 'Uva de Mesa',
		105 => 'Uva de Mesa S2'
	];

	protected $_schema = 'produto';
	protected $_name = 'culturas';
	protected $_primary = 'id';
	public $_order = 'ds_nome_cultura';
	public $_columnExcel = array(
		'id' => 'Id',
		'ds_nome_cultura' => 'Nome',
		'cd_cultura_seguradora_2' => 'Id Seguradora',
		'cd_bacen' => 'Bacen'
	);

	public function save($values) {
		if ($this->__beforeSave($values)) {
			$Row = $this->getRow($values['id']);

			$Row->id_nomenclatura = $values['id_nomenclatura'];
			$Row->ds_nome_cultura = $values['ds_nome_cultura'];
			$Row->nr_ibge = ($values['nr_ibge'] ? $values['nr_ibge'] : null);
			$Row->cd_bacen = ($values['cd_bacen'] ? $values['cd_bacen'] : null);
			$Row->cd_cultura_seguradora_2 = ($values['cd_cultura_seguradora_2'] ? $values['cd_cultura_seguradora_2'] : null);
			$Row->id_grupo_estadio_fenologico = $values['id_grupo_estadio_fenologico'];
			$Row->vl_produtividade_minima = ($values['vl_produtividade_minima'] ? $values['vl_produtividade_minima'] : null);
			$Row->vl_produtividade_maxima = ($values['vl_produtividade_maxima'] ? $values['vl_produtividade_maxima'] : null);

			return $Row->save();
		} else {
			return false;
		}
	}

	public function getVariedades($id) {
		if ($id) {
			$variedades = array();

			$select = $this->_db->select();
			$select->from('produto.culturas_variedades');
			$select->where("id_cultura=$id");

			$Rs = $this->_db->fetchAll($select);

			if ($Rs) {
				foreach ($Rs as $item) {
					$variedades[] = $item['id_variedade'];
				}
			}

			return $variedades;
		}
	}

	public function removeVariedades($id) {
		$this->_db->query("delete from produto.culturas_variedades where id_cultura = $id");
	}

	public function setVariedades($variedades, $id) {
		if ($id) {
			$this->removeVariedades($id);

			if (is_array($variedades)) {
				foreach ($variedades as $variedade) {
					$ins = array(
						'id_cultura' => $id,
						'id_variedade' => $variedade
					);

					$CulturaVariedade = new Produto_Model_CulturasVariedades();
					$CulturaVariedade->insert($ins);
				}
			}
		}
	}

	public function getDadosXls() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('c'=>'produto.culturas'));

		$Rs = $this->fetchAll($Select);
		if ($Rs->count()) {
			return $Rs->toArray();
		} else {
			return array();
		}
	}

	public function getCombo($flVazio=true) {
		$Select = $this->select();
		$Select->Where('fl_ativo=true');
		$Select->order('ds_nome_cultura ASC');

		$Rs = $this->fetchAll($Select);

		$options = array();
		if ($Rs->count()) {
		    if($flVazio){
			    $options[''] = '';
		    }
			foreach ($Rs as $row) {
				$options[$row['id']] = $row['ds_nome_cultura'];
			}

			return $options;
		} else {
			return false;
		}
	}

	public function getCheckCulturas() {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('c'=>'produto.culturas'),array('id','ds_nome_cultura'));
		$select->where('c.fl_ativo = true');
		$select->order('c.ds_nome_cultura');
		$culturas = $this->fetchAll($select);

		// Insere corretores no array
		$arCulturas = array();
		foreach($culturas as $cultura){
			$arCulturas[$cultura['id']]['ds_nome_cultura'] = $cultura['ds_nome_cultura'];
			$arCulturas[$cultura['id']]['id']              = $cultura['id'];
		}

		return $arCulturas;
	}

	public function getCulturaByProposta($idProposta){

		$select = $this->select()->setIntegrityCheck(false);
        $select->from(array('cul'=>'produto.culturas'), 'id');
		$select->join(array('pg'=>'produto.produtos_geral'), 'pg.id_cultura = cul.id', null);
        $select->join(array('prod'=>'produto.produtos'), 'prod.id_produto_geral = pg.id', null);
		$select->join(array('prop'=>'seguro.propostas'), 'prop.id_produto = prod.id', null);

        $select->where('prop.id = ?', $idProposta);

        return $this->_db->fetchOne($select);
	}

    public function getEstadiosByCultura($idCultura, $somenteAtivos = false) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('c'=>'produto.culturas'), null);
        $select->join(array('gef'=>'produto.grupos_estadios_fenologicos'), 'gef.id = c.id_grupo_estadio_fenologico', null);
        $select->join(array('ef'=>'produto.estadios_fenologicos'), 'ef.id_grupo_estadio_fenologico = gef.id', array('id as id_estadio_fenologico','cd_estadio_fenologico','ds_nome_estadio_fenologico','ds_descricao','ds_chave'));
        $select->where('c.id = ?', $idCultura);
        
		if ($somenteAtivos) {
			$select->where('ef.fl_ativo = ?', true);
		}
		
		$select->order('ef.cd_estadio_fenologico');
        return $this->fetchAll($select);
    }

	public function getComboEstadios($idCultura, $somenteAtivos = false) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('c'=>'produto.culturas'), null);
        $select->join(array('gef'=>'produto.grupos_estadios_fenologicos'), 'gef.id = c.id_grupo_estadio_fenologico', null);
        $select->join(array('ef'=>'produto.estadios_fenologicos'), 'ef.id_grupo_estadio_fenologico = gef.id', array('id as id_estadio_fenologico','cd_estadio_fenologico','ds_nome_estadio_fenologico','ds_descricao','ds_chave'));
        $select->where('c.id = ?', $idCultura);

		if ($somenteAtivos) {
			$select->where('ef.fl_ativo = ?', true);
		}

        $select->order('ef.cd_estadio_fenologico');

		$Rs = $this->fetchAll($select);

		$options = array();
		if ($Rs->count()) {
			foreach ($Rs as $row) {
				$options[$row['id_estadio_fenologico']] = $row['ds_nome_estadio_fenologico'];
			}

			return $options;
		} else {
			return false;
		}
	}

	public function __beforeSave($values) {
		$min = $values['vl_produtividade_minima'];
		$max = $values['vl_produtividade_maxima'];

		if (((($min >= 0) && (is_numeric($min))) && ($max > 0)) && ($min < $max)) {
			return true;
		} else if (($min == '') && ($max == '')) {
			return true;
		} else {
			return false;
		}
	}

}
