<?php

class Atendimento_Model_Contato extends Agro_Db_Table_Abstract {
	protected $_schema = 'atendimento';
	protected $_name = 'contatos';
	protected $_primary = 'id';
	protected $order = 'ds_nome_contato';
	
	/**
	 * Salva um funcionario no banco
	 *
	 * @param array $data
	 * @return boolean
	 */
	public function save(array $data) {
		try {
			$Row = $this->getRow($data['id']);
			$Row->ds_razao_social = ($data['ds_razao_social'] ? $data['ds_razao_social'] : null);
			$Row->ds_nome_contato = ($data['ds_nome_contato'] ? $data['ds_nome_contato'] : null);
			$Row->ds_nome_fantasia = ($data['ds_nome_fantasia'] ? $data['ds_nome_fantasia'] : null);
			$Row->id_contatos_categorias = ($data['id_contatos_categorias'] ? $data['id_contatos_categorias'] : null);
			$Row->ds_cargo = ($data['ds_cargo'] ? $data['ds_cargo'] : null);
			$Row->ds_assistente = ($data['ds_assistente'] ? $data['ds_assistente'] : null);
			$Row->ds_profissao = ($data['ds_profissao'] ? $data['ds_profissao'] : null);
			$Row->ds_apelido = ($data['ds_apelido'] ? $data['ds_apelido'] : null);
			$Row->id_estado_civil = ($data['id_estado_civil'] ? $data['id_estado_civil'] : null);
			$Row->ds_email_pessoal = ($data['ds_email_pessoal'] ? $data['ds_email_pessoal'] : null);
			$Row->ds_email_comercial = ($data['ds_email_comercial'] ? $data['ds_email_comercial'] : null);
			$Row->ds_site_comercial = ($data['ds_site_comercial'] ? $data['ds_site_comercial'] : null);
			$Row->ds_site_pessoal = ($data['ds_site_pessoal'] ? $data['ds_site_pessoal'] : null);
			
			
			$Row->dt_nascimento = ($data['dt_nascimento'] ? Agro_Util::formatDate($data['dt_nascimento'], Zend_Date::W3C) : null);
			$Row->ds_conjuge = ($data['ds_conjuge'] ? $data['ds_conjuge'] : null);
			$Row->ds_numero_filhos = ($data['ds_numero_filhos'] ? $data['ds_numero_filhos'] : null);
			$Row->dt_ultima_visita = ($data['dt_ultima_visita'] ? Agro_Util::formatDate($data['dt_ultima_visita'], Zend_Date::W3C) : null);
		
			$Row->save();
			return $Row->id;
		} catch (Exception $e) {
			$this->setMessage($e->getMessage());
			return false;
		}
	}
	
	/**
	 * 
	 */
	public function beforeDelete($id) {
		$Endereco = new Atendimento_Model_ContatoEnderecos();
		$Endereco->delete($id, 'id_contato');
		
		
		$Obs = new Atendimento_Model_ContatoObservacoes();
		$Obs->delete($id, 'id_contato');
		
		$Telefone = new Atendimento_Model_ContatoTelefones();
		$Telefone->delete($id, 'id_contato');
		
	}

	/**
	 * Busca os telefones de um corretor
	 *
	 * @param int $corretor
	 * @return object
	 */
	public function getTelefones($corretor) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('t' => 'sistema.telefone'), array('id', 'ds_numero', 'ds_ramal'));
		$select->join(array('tt' => 'sistema.tipo_telefone'), 't.id_tipo_telefone = tt.id and t.fl_ativo = true', 'tp_telefone');
		$select->where("t.id_usuario = $corretor and tt.fl_ativo = true");
		
		return $this->fetchAll($select);
	}
	
	public function getData($where)
    {
        $select = $this->select()->distinct(true);
        $select->setIntegrityCheck(false);
        $select->from(array('c' => 'atendimento.contatos'));
        $select->joinLeft(
            array('cc' => 'atendimento.contatos_categorias'),
            'c.id_contatos_categorias = cc.id',
            'ds_nome_categoria'
        );
        $select->joinLeft(array('ec' => 'sistema.estado_civil'), 'c.id_estado_civil = ec.id', 'ds_nome_estado_civil');
        $select->joinLeft(array('ce' => 'atendimento.contatos_enderecos'), 'c.id = ce.id_contato', false);
        $select->joinLeft(array('m' => 'sistema.municipios'), 'ce.id_municipio = m.id', 'ds_nome_municipio');
        $select->joinLeft(array('e' => 'sistema.estados'), 'm.id_estado = e.id', 'ds_nome_estado');

        //baca pra pesquisar nos estados
        if ($where['id_estado'] != '') {
            $where['id_estado'] = (int)$where['id_estado'];
            $select->where(
                "c.id in (select ce.id_contato
						    from atendimento.contatos_enderecos ce
						         inner join sistema.municipios m on ce.id_municipio = m.id
						   where m.id_estado = {$where['id_estado']})"
            );
            unset($where['id_estado']);
        }

        //baca pra pesquisar nos municipios
        if ($where['id_municipio'] != '') {
            $where['id_municipio'] = (int)$where['id_municipio'];
            $select->where(
                "c.id in (select ce.id_contato
						    from atendimento.contatos_enderecos ce
						   where ce.id_municipio = {$where['id_municipio']})"
            );
            unset($where['id_municipio']);
        }

        foreach ($where as $clause) {
            if (is_array($clause)) {
                $field = $clause['field'];
                $operator = $clause['operator'];
                $value = pg_escape_string($clause['value']);

                //se o campo for ds_nome, pesquisa nos 3 campos de nome
                if ($field == 'ds_nome_contato') {
                    $where = "( $field $operator '$value' ";
                    $where .= "or ds_nome_fantasia $operator '$value' ";
                    $where .= "or ds_razao_social $operator '$value') ";

                    $select->where($where);
                } else {
                    if ($operator == 'in') {
                        $select->where("$field $operator $value");
                    } else {
                        $select->where("$field $operator ?", $value);
                    }
                }
            }
        }
        if ($this->_order) {
            $select->order($this->_order);
        }

        return $select;
    }
	
	public function getDadosXls() {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('c'=>'sistema.corretores'), '*');
		$select->joinLeft(array('ce'=>'sistema.corretores_enderecos'), 'c.id = ce.id_corretor and ce.fl_principal = true', false);
		$select->joinLeft(array('u'=>'sistema.usuarios'), 'c.id_usuario = u.id', 'ds_nome_usuario');
		$select->joinLeft(array('m'=>'sistema.municipios'), 'ce.id_municipio = m.id', 'ds_nome_municipio');
		$select->joinLeft(array('e'=>'sistema.estados'), 'm.id_estado = e.id', 'ds_sigla');
		
		$select->order('ds_nome_corretor');
		return $this->fetchAll($select);
	}
	
	public function getDadosContato($where) {
		$select = $this->getData($where);
		$Rs = $this->_db->fetchRow($select);
		return $Rs;
	}
}
