<?php

class Sinistro2_Model_Rotinas extends Agro_Db_Table_Abstract {
	protected $_schema = 'sinistro';
	protected $_name = 'processos_observacoes';
	protected $_primary = 'id';
	
	public function save($data) {

		try {
			
			$Row = $this->createRow();
			$Row->id_processo = $data['id_processo'];
			
			if(strtolower($data['tipo_laudo']) == 'preliminar'){
				//$Row->ds_observacao = "Os laudos referentes a proposta '".$data['proposta']."', sinistro '".$data['sinistro']."', quadras/itens '".$data['quadra']."' e variedade '".$data['variedade']."' foram recepcionados em '".Agro_Util::formatDate($data['data'],Zend_Date::DATES)."', acompanhados da NF '".$data['nota']."'. O laudo é de vistoria '".$data['tipo_laudo'].".";
				$Row->ds_observacao = "Recebido em ".Agro_Util::formatDate($data['data'],Zend_Date::DATES).": NF ".$data['nota'].", laudo preliminar das quadras ".$data['quadra']."; var ".$data['variedade']."; data da vistoria: ".$data['sinistro'];
			}else{
				//$Row->ds_observacao = "Os laudos referentes a proposta '".$data['proposta']."', sinistro '".$data['sinistro']."', quadras/itens '".$data['quadra']."' foram recepcionados em '".Agro_Util::formatDate($data['data'],Zend_Date::DATES)."', acompanhados da NF '".$data['nota']."'. O laudo é de vistoria '".$data['tipo_laudo'].".";
				$Row->ds_observacao = "Recebido em ".Agro_Util::formatDate($data['data'],Zend_Date::DATES).": NF ".$data['nota'].", laudo final das quadras ".$data['quadra']."; var ".$data['variedade']."; data da vistoria: ".$data['sinistro'];			
			}
			return $Row->save();
		
		}catch (Exception $e){
			die($e);
		}
	}
	
	public function getAvisoReserva($idAviso, $idCobertura) {
		$select = $this->select()->setIntegrityCheck(false);
	
		$select->from(array('a'=>'sinistro.avisos_transmissao_seguradora'), '*');
		$select->join(array('s' => 'sinistro.avisos'), 's.id = a.id_aviso', 'id_proposta');
		$select->where('a.id_aviso     = ?', $idAviso);
		$select->where('a.id_cobertura = ?', $idCobertura);
	
		return $this->_db->fetchRow($select);
	}	

	/**
	 * Busca os dados do XML de transmissão de um aviso
	 *
	 * @param int $idAviso
	 * @return array
	 */
	public function getDadosTransmissaoXML(int $idAviso): array
	{
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(['ats' => 'sinistro.avisos_transmissao_seguradora'], ['id_aviso', 'cd_identificador_seguradora']);
		$select->join(['av' => 'sinistro.avisos'], 'av.id = ats.id_aviso', ['id_proposta']);
		$select->join(['pr' => 'seguro.propostas'], 'pr.id = av.id_proposta', false);
		$select->join(['pe' => 'seguro.propostas_endosso'], 'pe.id_proposta = pr.id', false);
		$select->join(['endossos' => 'seguro.propostas_endosso'], 'endossos.id_endosso = pe.id_endosso', false);
		$select->join(
			['pt' => 'log.propostas_transmissao'],
			"pt.id_proposta = endossos.id_proposta
			  AND pt.fl_sucesso = TRUE
			  AND pt.ds_tipo_transmissao = 'InserirAvisoSinistro'
			  AND pt.ds_xml_transmissao != 'Array'
			  AND pt.ds_retorno ILIKE '%'||av.id::TEXT||'%'",
			"(xpath('//Cobertura/text()', pt.ds_xml_transmissao::XML))[1]::TEXT AS cobertura_xml");
		$select->join(['prc' => 'seguro.propostas_coberturas'], 'prc.id_proposta = pr.id', false);
		$select->join(
			['pc' => 'produto.produtos_coberturas'],
			"pc.id_produto = pr.id_produto
              AND pc.id_cobertura = prc.id_cobertura
              AND pc.fl_cobertura_principal = TRUE",
			false);
		$select->where("av.id = ?", $idAviso);

		$row = $this->_db->fetchRow($select);
		return !empty($row) ? $row : [];
	}
}