<?php

class Produto_Model_Row_Produto extends Agro_Db_Table_Row_Abstract {
	
	/**
	 * Busca a seguradora do produto
	 * 
	 * @author Renato - 04/08/2010
	 */
	public function seguradora($chave=null) {
		$Model = new Sistema_Model_Empresas();
		$Row = $Model->getRow($this->id_seguradora);
		
		if ($chave) {
			return $Row->{$chave};
		}
		
		return $Row;
	}
	
	/**
	 * Busca a cultura do produto
	 * 
	 * @author Renato - 05/08/2010
	 */
	public function cultura() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('p' => 'produto.produtos'), false);
		$Select->join(array('pg' => 'produto.produtos_geral'),'p.id_produto_geral = pg.id', false);
		$Select->join(array('c' => 'produto.culturas'),'pg.id_cultura = c.id', '*');
		$Select->where('p.id = ?', $this->id);
		
		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($Select);
	}
	
	/**
	 * Busca as configuracoes dos atributos do produto
	 * 
	 * @param string $modulo Chave do Modulo de Atributos.
	 * @param integer $parent Id do atributo pai (Default NULL)
	 * @author Renato - 04/08/2010
	 */
	public function atributos($modulo, $parent=null, $fl_atendimento=null) {
		$Select = $this->select()->setIntegrityCheck(false)->distinct(true);
		$Select->from(array('g' => 'produto.produtos_grupos_atributos_rn'), false);
		$Select->join(array('p' => 'produto.produtos_atributos_rn'), 'g.id = p.id_grupo_atributo_rn', 'ds_valor');
		$Select->join(array('a' => 'produto.atributos_rn'), 'a.id = p.id_atributo_rn');
		$Select->join(array('t' => 'produto.tipo_atributo'), 't.id = a.id_tipo_atributo', array('ds_chave_tipo_atributo'));
		$Select->join(array('m' => 'produto.atributos_modulos'), 'm.id = a.id_atributo_modulo', false);
		$parent ? $Select->where('a.id_parent = ?', $parent) : $Select->where('a.id_parent = 0');
		$Select->where('m.ds_chave_atributo_modulo = ?', $modulo);
		
		if($fl_atendimento == true){
			$Select->where('a.fl_atendimento = true');
		} else {
			$Select->where('a.fl_atendimento = false');
		}
		
		$Select->where('g.id_produto = ?', $this->id);
		$Select->order('a.ds_ordem');
		
		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($Select);
	}
	
	/**
	 * Busca as configuracoes dos questionarios do produto
	 * 
	 * @param integer $parent Id do questionario pai (Default NULL)
	 * @author Renato - 04/08/2010
	 */
	public function questionarios($parent=null, $fl_atendimento=false) {
		$Rs = $this->atributos('QUESTIONARIO', $parent, $fl_atendimento);
		$questionarios = array();

		if ($Rs) {
			foreach ($Rs as $Row) {
				$questionarios[$Row['ds_chave_rn']]['ds_descricao_atributo'] = $Row['ds_descricao_atributo'];
				$questionarios[$Row['ds_chave_rn']]['ds_chave_rn'] = $Row['ds_chave_rn'];
				$questionarios[$Row['ds_chave_rn']]['fl_permite_exclusao'] = $Row['fl_permite_exclusao']; 
				$questionarios[$Row['ds_chave_rn']]['ds_valores_opcoes'] = $Row['ds_valores_opcoes'];
				$questionarios[$Row['ds_chave_rn']]['ds_parent_value'] = $Row['ds_parent_value']; 
				$questionarios[$Row['ds_chave_rn']]['ds_schema'] = $Row['ds_schema']; 
				$questionarios[$Row['ds_chave_rn']]['ds_table'] = $Row['ds_table']; 
				$questionarios[$Row['ds_chave_rn']]['ds_option_value'] = $Row['ds_option_value']; 
				$questionarios[$Row['ds_chave_rn']]['ds_option_text'] = $Row['ds_option_text']; 
				$questionarios[$Row['ds_chave_rn']]['ds_option_filter'] = $Row['ds_option_filter']; 
				$questionarios[$Row['ds_chave_rn']]['fl_required'] = $Row['fl_required'];
				$questionarios[$Row['ds_chave_rn']]['ds_validar_campo'] = $Row['ds_validar_campo'];
				$questionarios[$Row['ds_chave_rn']]['ds_validar_campo_valor'] = $Row['ds_validar_campo_valor'];
				$questionarios[$Row['ds_chave_rn']]['ds_chave_tipo_atributo'] = $Row['ds_chave_tipo_atributo'];
				$questionarios[$Row['ds_chave_rn']]['chields'] = $this->questionarios($Row['id']);
			}
		}
		
		return $questionarios;
	}
	
	/**
	 * Busca as configuracoes das propriedades do produto
	 * 
	 * @author Renato - 04/08/2010
	 */
	public function propriedades() {
		$Rs = $this->atributos('PROPRIEDADE');
		if ($Rs) {
			foreach ($Rs as $Row) {
				$propriedades[$Row['ds_chave_rn']] = $Row['ds_valor'];
			}
		}
		
		return $propriedades;
	}
	
	/**
	 * Busca as configuracoes de unidades do produto
	 * 
	 * @author Renato - 04/08/2010
	 */
	public function unidades() {
		$Rs = $this->atributos('UNIDADE_SEGURADA');
		$unidades = array();
		
		if ($Rs) {
			foreach ($Rs as $Row) {
				$unidades[$Row['ds_chave_rn']]['ds_descricao_atributo'] = $Row['ds_descricao_atributo'];
				$unidades[$Row['ds_chave_rn']]['fl_permite_exclusao'] = $Row['fl_permite_exclusao']; 
				$unidades[$Row['ds_chave_rn']]['ds_valores_opcoes'] = $Row['ds_valores_opcoes'];
				$unidades[$Row['ds_chave_rn']]['ds_parent_value'] = $Row['ds_parent_value']; 
				$unidades[$Row['ds_chave_rn']]['ds_schema'] = $Row['ds_schema']; 
				$unidades[$Row['ds_chave_rn']]['ds_table'] = $Row['ds_table']; 
				$unidades[$Row['ds_chave_rn']]['ds_option_value'] = $Row['ds_option_value']; 
				$unidades[$Row['ds_chave_rn']]['ds_option_text'] = $Row['ds_option_text']; 
				$unidades[$Row['ds_chave_rn']]['ds_option_filter'] = $Row['ds_option_filter']; 
				$unidades[$Row['ds_chave_rn']]['fl_required'] = $Row['fl_required'];
				$unidades[$Row['ds_chave_rn']]['ds_validar_campo'] = $Row['ds_validar_campo'];
				$unidades[$Row['ds_chave_rn']]['ds_validar_campo_valor'] = $Row['ds_validar_campo_valor'];
				$unidades[$Row['ds_chave_rn']]['ds_chave_tipo_atributo'] = $Row['ds_chave_tipo_atributo'];
				$unidades[$Row['ds_chave_rn']]['chields'] = $this->questionarios($Row['id']);
			}
		}
		
		return $unidades;
	}
	
	/**
	 * Busca as configuracoes de vistorias previas do produto
	 * 
	 * @todo Fazer o array conforme a necessidade, apenas estou retornando o Record Set
	 * @author Renato - 04/08/2010
	 */
	public function vistoria_previa() {
		return $this->atributos('VISTORIA_PREVIA');
	}
	
	/**
	 * Busca as coberturas do produto
	 * 
	 * @author Renato - 04/08/2010
	 */
	public function coberturas($flAtivas=true) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('c'=>'produto.coberturas'), array('ds_nome_cobertura', 'ds_descricao_cobertura'));
		$Select->join(array('pc'=>'produto.produtos_coberturas'), 'c.id = pc.id_cobertura', array('id_cobertura','fl_cobertura_principal','fl_taxa_relacionada','fl_somente_renovacoes','fl_vistoria_previa','vl_lmi','id_condicao_especial','fl_vistoria_preliminar','fl_cobertura_dependente','id_cobertura_dependencia','fl_exibir_franquia','fl_ativo','fl_contratacao_automatica'));
		$Select->where('id_produto = ?', $this->id);
		if($flAtivas){ $Select->where('pc.fl_ativo = true'); }
		$Select->order('fl_cobertura_principal DESC');
		
		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($Select);
	}
	
	/**
	 * Busca as variedades do produto
	 * 
	 * @author Renato - 04/08/2010
	 */
	public function variedades() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('v'=>'produto.variedades'), array('id', 'ds_nome_variedade', 'cd_variedade_seguradora'));
		$Select->join(array('pv'=>'produto.produtos_variedades'), 'v.id = pv.id_variedade', array('vl_importancia_segurada_minima','vl_importancia_segurada_maxima'));
		$Select->where('id_produto = ?', $this->id);
		$Select->order('ds_nome_variedade');
		$Rs = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($Select);
		$variedades = array();
		
		if ($Rs) {
			foreach ($Rs as $Row) {
				$variedades[$Row['id']] = array(
					'ds_nome_variedade' => $Row['ds_nome_variedade'],
					'cd_variedade_seguradora' => $Row['cd_variedade_seguradora'],
					'vl_importancia_segurada_minima' => $Row['vl_importancia_segurada_minima'],
					'vl_importancia_segurada_maxima' => $Row['vl_importancia_segurada_maxima']
				);
			}
		}
		
		return $variedades;
	}
	
	/**
	 * Busca as validacoes do produto
	 * 
	 * @author Renato - 04/08/2010
	 */
	public function validacoes() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('v' => 'produto.validacoes'), array('id', 'ds_nome_validacao', 'ds_chave', 'ds_descricao_validacao', 'ds_acao'));
		$Select->join(array('p' => 'produto.produtos_validacoes'), "p.id_validacao = v.id", false);
		$Select->where("id_produto = ?", $this->id);
		$Rs = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($Select);
		$validacoes = array();
		
		if ($Rs) {
			foreach ($Rs as $Row) {
				$validacoes[$Row['id']] = array(
					'ds_nome_validacao' => $Row['ds_nome_validacao'],
					'ds_chave' => $Row['ds_chave'],
					'ds_descricao_validacao' => $Row['ds_descricao_validacao'],
					'ds_acao' => $Row['ds_acao']
				);
			}
		}
		
		return $validacoes;
	}
	
	/**
	 * Busca uma validacao pela chave
	 * 
	 * @param string $chave 
	 * @author Renato - 05/08/2010
	 */
	public function validacao($chave) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('pv'=>'produto.produtos_validacoes'));
		$Select->join(array('v'=>'produto.validacoes'), "pv.id_validacao = v.id", false);
		$Select->where("id_produto = ?", $this->id);
		$Select->where("ds_chave = ?", $chave);
		
		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($Select);
	}
	
	/**
	 * Busca as validacoes do produto
	 * 
	 * @author Renato - 04/08/2010
	 */
	public function condicoes() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('v' => 'produto.validacoes'), array('id', 'ds_nome_validacao', 'ds_chave', 'ds_descricao_validacao', 'ds_acao'));
		$Select->join(array('p' => 'produto.produtos_validacoes'), "p.id_validacao = v.id", false);
		$Select->where("id_produto = ?", $this->id);
		$Rs = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($Select);
		$validacoes = array();
		
		if ($Rs) {
			foreach ($Rs as $Row) {
				$validacoes[$Row['id']] = array(
					'ds_descricao_validacao' => $Row['ds_descricao_validacao'],	
					'ds_nome_validacao' => $Row['ds_nome_validacao'],
					'ds_chave' => $Row['ds_chave'],
					'ds_acao' => $Row['ds_acao']
				);
			}
		}
		
		return $validacoes;
	}
	
	/**
	 * Busca a safra do produto
	 * 
	 * @author Renato - 05/08/2010
	 */
	public function safra() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('s' => 'produto.safras'));
		$Select->where("id = ?", $this->id_safra);
		
		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($Select);
	}
	
	/**
	 * Busca o produto geral
	 * 
	 * @author Renato - 05/08/2010
	 */
	public function produto_geral() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('p' => 'produto.produtos_geral'));
		$Select->where("id = ?", $this->id_produto_geral);
		
		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($Select);
	}

	/**
	 * Busca o código da variedade na seguradora
	 *
	 * @author Marcelo - 19/12/2012
	 */	
	public function produto_variedade_seguradora($id_variedade) {
	    $Select = $this->select()->setIntegrityCheck(false);
	    $Select->from(array('p' => 'produto.variedades'), array('cd_variedade_seguradora'));
	    //$Select->where("id_produto = ?", $this->id);
	    $Select->where("id = ?", $id_variedade);

	    return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchOne($Select);
	}	
}