<?php
   //Arquivo de exportação gerado no Android


  require_once('config.php');
  require_once("./phone_gap/dao/ConfigDAO.class.php");
  require_once('ajustargenerator.php');

  //HTTP_JSON atributo JSON array enviando pelo android para inserir/atualizar no banco de dados
  $json =  $_POST['HTTP_JSON'];  
  $serial = $_GET['serial'];  
  $imei = $_GET['imei'];
  $json =  utf8_encode($_POST['HTTP_JSON']);

//1
    $json = str_replace('', '', $json);
    $json = str_replace('', '', $json);
    $json = str_replace('', '', $json);
//2

  $data1 = json_decode($json);
  $tabela = "";
  
  $configdao = new ConfigDAO();
  $ClientesMultiplosVendedores = "F";
  if($configdao->getDisponibilizar()->getClientes_mult_vends()){
	$ClientesMultiplosVendedores = "T";
  }

  //ibase_trans usando transações para que que em qualquer erro no processo cancelar tudo
  $trans = ibase_trans(IBASE_COMMITTED+IBASE_REC_VERSION+IBASE_NOWAIT);
	try {
		if (count($data1) <= 0)
		  echo "SEM DADOS";
		else {
		  for ($i=0; $i<count($data1);$i++) {
				$data = $data1[$i];
        //Toda iteração onde mudar o nome da $tabela que esta trabalhando usar reflection para guardar todos os atributos de $data
        //na variável $pros		
        if ($tabela != $data->tabela) {
          $ref = new ReflectionObject($data);
            $pros = $ref->getProperties(ReflectionProperty::IS_PUBLIC);
          $tabela = $data->tabela;
        }		
		
		if (isset( $data->codvendedor)){
			$entregador = isEntregador($trans, $data->codvendedor, $imei, $serial);											
		} else {
			$entregador = False;			
		}		

        if ($processo != "DITALIA" && $data->tabela == "movlotemanif")
          $data->tabela = "lotes_mov";

        $existe = "select count(1) from ".$data->tabela;
        $where = "";

        //variável $where sera a condição busca pelo registro no banco de dados para inserir ou atualizar
		// Clientes
        if ($data->tabela == "clientes")
          if ($data->codcliente > 0)
            $where = " where codcliente = '".$data->codcliente."'";
          else
            $where = " where codvendedor = ".$data->codvendedor." and id = '".$data->id."'";

		// Pedidos
        else if ($data->tabela == "pedidos"  && $entregador == false) {
          if ($data->nropedido > 0)
            $where = " where nropedido = '".$data->nropedido."'";
          else                   //aqui
            $where = " where codvendedor = ".$data->codvendedor.
              " and id = '".$data->id."'";
         $query = ibase_query($trans, "select coalesce(USUARIO_,'') USUARIO_ from PEDIDOS ".$where) or die(ibase_errmsg());
         $row = ibase_fetch_row($query);
         if ($row != null && $row[0] != "SYSDBA" && $row[0] != "" && ! $configdao->getDisponibilizar()->getIntegrarGestaoNoManifesto())
           continue;
		// PedProds
        } else if ($data->tabela == "ped_prods" && $entregador == false) {
          if ($data->nropedido <= 0) {
            $pedido = "select nropedido from pedidos where codvendedor = ".
              $data->codvendedor." and id = ".$data->id;
            $query = ibase_query($trans, $pedido) or die(ibase_errmsg());
            $row = ibase_fetch_row($query);
            if ($row != null)
              $data->nropedido = $row[0];
          }
          $where = " where nropedido = '".$data->nropedido."'".
              " and nroitem = '".$data->nroitem."'";
         $query = ibase_query($trans, "select coalesce(USUARIO_,'') USUARIO_ from PEDIDOS  where NROPEDIDO = '".$data->nropedido."'") or die(ibase_errmsg());
         $row = ibase_fetch_row($query);
         if ($row != null && $row[0] != "SYSDBA" && $row[0] != "" && ! $configdao->getDisponibilizar()->getIntegrarGestaoNoManifesto())
           continue;
		//ped_servs
		} else if ($data->tabela == "ped_servs") {
			$pedido = "select nropedido from pedidos where codvendedor = ".
						$data->codvendedor." and id = ".$data->id;
			$query = ibase_query($trans, $pedido) or die(ibase_errmsg());
			$row = ibase_fetch_row($query);
			if ($row != null) {
				$nropedido = $row[0];
			}
			$where = " where nropedido = '".$nropedido."'".
					" and nroitem = '".$data->nroitem."'";
		// Trocas
        } else if ($data->tabela == "trocas") {
          $pedido = "select nropedido from pedidos where codvendedor = ".
              $data->codvendedor." and id = ".$data->idpedido;
          $query = ibase_query($trans, $pedido) or die(ibase_errmsg());
          $row = ibase_fetch_row($query);
          if ($row != null)
            $data->nropedido = $row[0];
          $where = " where ((codvendedor = ".$data->codvendedor.
                   " and id = ".$data->id.") or (nropedido = ".$data->nropedido." and codproduto = '".$data->codproduto."' and coalesce(codmotivo,0) = ".$data->codmotivo."))";

		// Despesas Vendedor
        } else if ($data->tabela == "despesas_vend"){
          $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
		// Justificativas
        } else if ($data->tabela == "tf02_dst"){
          //echo "vendedor: ".$data->codvendedor;
          $where = " where codvendedor = ".$data->codvendedor.
            " and id_ = '".$data->id_."'";
        // Clientes - agendamentos
        } else if ($data->tabela == "cli_agendamentos") {
          //caso encontrar pelo codigo do cliente e nroitem alterar o registro
          if ($data->codcliente > 0 && $data->nroitem > 0)
            $where = " where codcliente = ".$data->codcliente.
              " and nroitem = '".$data->nroitem."'";
          //cadastrando novo agendamento mas tentando buscar pelo id o cadastro
          else
            $where = " where codvendedor = ".$data->codvendedor.
              " and id = '".$data->id."'";
		// Vendedores KM
        } else if ($data->tabela == "vend_km") {
           if ($data->nro > 0)
             $where = " where nro = ".$data->nro;
           else
             $where = " where codvendedor = ".$data->codvendedor.
              " and id = '".$data->id."'";
        // Pedidos Desdobramentos
        } else if ($data->tabela == "ped_desdobramento") {
           $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
        // Cheques Android
        } else if ($data->tabela == "cheques_android") {
           $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
        // Cli estoque
        } else if ($data->tabela == "cli_estoque") {
            if ($data->codcliente <= 0) {
              $query2 = ibase_query($trans, "select codcliente from clientes ".
                  "where codvendedor = ".$data->codvendedor." and id = ".$data->id);
              $query2 = ibase_fetch_row($query2);
              if ($query2 == null)
                 continue;
                //cliente não encontrado continua
              $data->codcliente = $query2[0];
            }
           $where = " where codcliente = ".$data->codcliente.
              " and codproduto = '".$data->codproduto."'";
		// Pesquisas Merchandising
        } else if ($data->tabela == "pesquisas_merchan") {
		      $where = " where codvendedor = ".$data->codvendedor.
		   		  " and id = '".$data->id."'";
		    }

		// Pesquisas Merchandising - Itens
        else if ($data->tabela == "pesquisas_merchan_itens") {
          if ($data->nropesquisa <= 0) {
            $pesquisa = "select nropesquisa from pesquisas_merchan where codvendedor = ".$data->codvendedor.
				" and id = ".$data->id_pesquisas_merchan;
            $query = ibase_query($trans, $pesquisa) or die(ibase_errmsg());
            $row = ibase_fetch_row($query);
            if ($row != null)
              	$data->nropesquisa = $row[0];
          }
          $where = " where nropesquisa = '".$data->nropesquisa."'".
              " and nro = '".$data->nro."'";
        // Distribuição
        } else if ($data->tabela == "distribuicao") {
           $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
        //Distribuição - itens - SEMPRE INCLUIR $where = ''

        // Mix Obrigatório
        } else if ($data->tabela == "mix_obrigatorio") {
           $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";

        // Pesquisas de Preço - Android
        } else if ($data->tabela == "pesquisas_preco_android") {
           $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";

        // Pesquisas Supervisor
        } else if ($data->tabela == "pesquisas_supervisor") {
           $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";

        // Pesquisas Supervisor itens
        } else if ($data->tabela == "pesquisas_supervisor_itens") {
           $query = ibase_query($trans, "select nropesquisa from pesquisas_supervisor where codvendedor = ".$data->codvendedor.
               " and id = ".$data->idpesquisa);
           $query = ibase_fetch_row($query);
           if ($query == null)
             throw new Exception("pesquisas_supervisor_itens: Nro. Pesquisa não encontrado");
           $nropesquisa = $query[0];
           $where = " where nropesquisa = ".$nropesquisa.
            " and codpergunta = '".$data->codpergunta."'";

        // Mensagens
        } else if ($data->tabela == "mensagens") {
           if ($data->nromensagem > 0)
             $where = " where nromensagem = ".$data->nromensagem;
           else
             $where = " where codsupervisor = ".$data->codsupervisor." and id = ".$data->id;
        // Planos de Ação
        } else if ($data->tabela == "plano_acao") {
           $where = " where codsupervisor = ".$data->codsupervisor.
            " and id = '".$data->id."'";

        // Visitas
        } else if ($data->tabela == "visitas_android") {
           $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";

        //fechamento manifesto
        } else if ($data->tabela == "fechamento_manifesto") {
           $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
        //fechamento manifesto portador
        } else if ($data->tabela == "fechamento_manifesto_port") {
           $query = ibase_query($trans, "select NROFECHAMENTO from FECHAMENTO_MANIFESTO where CODVENDEDOR = ".$data->codvendedor.
               " and ID = ".$data->idfechamento);
           $query = ibase_fetch_row($query);
           if ($query == null)
             throw new Exception("fechamento_manifesto_port: Nro Fechamento não encontrado");
           $nrofechamento = $query[0];
           $where = " where nrofechamento = ".$nrofechamento.
            " and codportador = '".$data->codportador."'";
        //cobranca
        } else if ($data->tabela == "cobranca_android") {
           $where = " where codvendedor = ".$data->codvendedor.
              " and id = '".$data->id."'";
        //cobranca portador
        } else if ($data->tabela == "cobranca_port") {
           $query = ibase_query($trans, "select NROCOBRANCA from COBRANCA_ANDROID where CODVENDEDOR = ".$data->codvendedor.
               " and ID = ".$data->idcobranca);
           $query = ibase_fetch_row($query);
           if ($query == null)
             throw new Exception("cobranca_port: Nro Cobranca não encontrado");
           $nrocobranca = $query[0];
           $where = " where nrocobranca = ".$nrocobranca.
            " and codportador = '".$data->codportador."'";
        //cobranca crec
        } else if ($data->tabela == "cobranca_crec") {
           $query = ibase_query($trans, "select NROCOBRANCA from COBRANCA_ANDROID where CODVENDEDOR = ".$data->codvendedor.
               " and ID = ".$data->idcobranca);
           $query = ibase_fetch_row($query);
           if ($query == null)
             throw new Exception("cobranca_crec: Nro Cobranca não encontrado");
           $nrocobranca = $query[0];
           $where = " where NROCOBRANCA = ".$nrocobranca.
            " and NROLANCTO = '".$data->nrolancto."'";
        //contasreceber - pagtos
        } else if ($data->tabela == "contasreceber_pagto") {
           if ($data->nrolanctocrec <= 0) {
              $query = ibase_query($trans, "select NROLANCTO from CONTASRECEBER where CODVENDEDOR = ".$data->codvendedor.
                 " and ID = ".$data->idcreceber);
              $query = ibase_fetch_row($query);
              if ($query != null)
                $data->nrolanctocrec = $query[0];
              else
                throw new Exception("Conta a receber não encontrada ".$data->codvendedor."-".$data->id);
           } else {
              $query = ibase_query($trans, "select NROLANCTO from CONTASRECEBER where NROLANCTO = ".$data->nrolanctocrec);
              $query = ibase_fetch_row($query);
              if ($query == null)
                throw new Exception("Conta a receber nao encontrada ".$data->nrolanctocrec.", exclua a cobranca efeuada!");
           }
           $query = ibase_query($trans, "select V.SITUACAO, V.FECHAMENTO ".
              "from VENDAS V ".
              "where SUBSTRING(V.CODNATOPER FROM 1 FOR 5) IN ('5.904', '5.414', '6.904', '6.414', '5.415', '6.415', '5.657', '6.657') ".
              "and V.NRODOCUMENTO = ".$data->nromanifesto." and V.CODVENDEDOR = ".$data->codvendedor);
           $query = ibase_fetch_row($query);
           if ($query != null) {
             if ($query[0] == "C")
               throw new Exception("Cobrancas: O manifesto foi cancelado ".$data->nrolanctocrec.", verifique a cobranca efeuada!");
           }
		   if ($query[1] == "T")
             throw new Exception("Cobrancas: O manifesto foi fechado ".$data->nrolanctocrec.", verifique a cobranca efeuada!");
           if ($data->nro > 0)
             $where = " where NROLANCTO = ".$data->nrolanctocrec.
                " and NRO = ".$data->nro;
           else
             $where = " where CODVENDEDOR = ".$data->codvendedor.
                " and ID = ".$data->id;
        //contasreceber
        } else if ($data->tabela == "contasreceber") {
           if ($data->nrolancto > 0)
             $where = " where NROLANCTO = ".$data->nrolancto;
           else
             $where = " where CODVENDEDOR = ".$data->codvendedor.
                " and ID = ".$data->id;
    	// Pedidos - Indenizacoes
        } else if ($data->tabela == "pedidos_indeniz" || $data->tabela == "pedidos_indeniz_prods") {
          $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
    	// Resumo Checagens
        } else if ($data->tabela == "resumo_checagens") {
          $where = " where codsupervisor = ".$data->codsupervisor.
            " and id = '".$data->id."'";
    	// Relatorio PDV
        } else if ($data->tabela == "relatoriopdv") {
          $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
    	// PesqExibExtra
        } else if ($data->tabela == "pesqexibextra") {
          $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
		  //Imagens Visitas
		  } else if ($data->tabela == "imagens_visitas") {
			if ($data->nrovisita <= 0) {
			  $query2 = ibase_query($trans, "select nrovisita from visitas_android where id = ".$data->idvisita." and codvendedor = ".$data->codvendedor);
			  $query2 = ibase_fetch_row($query2);
			  if ($query2 != null)
				$data->nrovisita = $query2[0];
			  else
				throw new Exception("Visita ID/CODVENDEDOR: ".$data->idvisita."/".$data->codvendedor." não encontrado!");
			  $where = "";
        }
    	// Atualizacao_Cadastro
      } else if ($data->tabela == "atualizacao_cadastro") {
        $where = " where codvendedor = ".$data->codvendedor.
            " and id = '".$data->id."'";
      } else if ($data->tabela == "movlotemanif" || $data->tabela == "lotes_mov") {
        $where = " where codvendedor = ".$data->codvendedor." and id = '".$data->id."'";
        $query = ibase_query($trans, "select NROPEDIDO from PEDIDOS where CODVENDEDOR = ".$data->codvendedor.
              " and ID = ".$data->idpedido);
        $query = ibase_fetch_row($query);
        if ($query == null)
          throw new Exception("MOVLOTEMANIF: Nro de pedido não encontrado");
        $data->nropedido = $query[0];
        //Se tem idtroca vinculamos com a tabela de trocas
        if ($data->idtroca > 0) {
          $query = ibase_query($trans, "select NROTROCA from TROCAS where NROPEDIDO = ".$data->nropedido.
                " and ID = ".$data->idtroca);
          $query = ibase_fetch_row($query);
          if ($query == null)
            throw new Exception("MOVLOTEMANIF: Nro de troca não encontrado");
          $data->nrotroca = $query[0];
        //Se tem nroitem_ped vinculamos com a tabela de ped_prods
        } else {
          $query = ibase_query($trans, "select NROITEM from PED_PRODS where NROPEDIDO = ".$data->nropedido.
                " and NROITEM = ".$data->nroitem_ped);
          $query = ibase_fetch_row($query);
          if ($query == null)
            throw new Exception("MOVLOTEMANIF: Nro de item do pedido não encontrado");
          $data->nroitem_ped = $query[0];
        }
    	// Confirmação de Manifesto
      } else if ($data->tabela == "vendas") {
        $where = " where nrovenda = ".$data->nrovenda;
      //Clientes contatos
      } else if ($data->tabela == "clientes_contatos") {
        if ($data->codcliente > 0)
          $query = ibase_query($trans, "select CODCLIENTE from CLIENTES where codcliente = ".$data->codcliente);
        else
          $query = ibase_query($trans, "select CODCLIENTE from CLIENTES where id = ".$data->idcliente.
                  " and CODVENDEDOR = ".$data->codvendedor);
        $query = ibase_fetch_row($query);
        if ($query == null)
          throw new Exception("CLIENTES_CONTATOS: código cliente não encontrado ");
        $data->codcliente = $query[0];
        if ($data->nrocontato > 0)
          $where = " where codcliente = ".$data->codcliente." and nrocontato = ".$data->nrocontato;
        else
          $where = " where codvendedor = ".$data->codvendedor." and id = ".$data->id;
		// Ped_Bloqueios
      } else if ($data->tabela == "ped_bloqueios") {
        $pedido = "select nropedido from pedidos where codvendedor = ".
            $data->codvendedor." and id = ".$data->idpedido;
        $query = ibase_query($trans, $pedido) or die(ibase_errmsg());
        $row = ibase_fetch_row($query);
        if ($row != null)
          $data->nropedido = $row[0];
        $where = " where codvendedor = ".$data->codvendedor.
          " and id = ".$data->id;
		// ControleProdutos
      } else if ($data->tabela == "controleprodutos") {
        $where = " where codvendedor = ".$data->codvendedor.
          " and id = ".$data->id;
		// LogIntegracoes
      } else if ($data->tabela == "logintegracoes") {
        $where = " where codvendedor = ".$data->codvendedor.
          " and id = ".$data->id;
		//senhas_android
	  }else if ($data->tabela == "senhas_android") {
        $where = " where codvendedor = ".$data->codvendedor.
          " and id = ".$data->id;
  		// Android - Integrações
	  } else if ($data->tabela == "integracoes_android") {

		// Orcamentos
      } else if ($data->tabela == "orcamentos") {
        $where = " where codvendedor = ".$data->codvendedor.
          " and id = ".$data->id;
		// MovCaixaFlex
      } else if ($data->tabela == "movcaixaflex") {
        $where = " where codvendedorins = ".$data->codvendedorins.
          " and id = ".$data->id;
      }

        //Se o where for vazio sempre
        if ($where != "") {
          $query = ibase_query($trans, $existe." ".$where) or die(ibase_errmsg());
          $row = ibase_fetch_row($query);
          $cont = $row[0];
        } else
          $cont = 0;

        $sql  = "";
        $sql1 = "";

        if ($cont > 0) {
           $UPD = TRUE;

        	//apagar itens e trocas caso alterar
          if ($data->tabela == "pedidos") {
             $sql .= " NROPEDIDO = NROPEDIDO ";
             $query = ibase_query($trans, "select nropedido from pedidos ".$where)
              or die(ibase_errmsg());

             $row = ibase_fetch_row($query);

             if ($row != null) {
               //removido por segurança por causa de estoque
               //ibase_query($trans, "delete from ped_prods where nropedido = ".$row[0]) or die(ibase_errmsg());
               //ibase_query($trans, "delete from trocas where nropedido = ".$row[0]) or die(ibase_errmsg());
             }
           }
          //apagar itens de distribuição caso alterar distribuição
          else if ($data->tabela == "distribuicao") {
             $query = ibase_query($trans, "select nrodistr from distribuicao ".$where)
              or die(ibase_errmsg());

             $row = ibase_fetch_row($query);

             if ($row != null)
               ibase_query($trans, "delete from distribuicao_itens where nrodistr = ".$row[0]) or die(ibase_errmsg());
          }
          //apagar itens do mix caso alterar Mix Obrigatório
          else if ($data->tabela == "mix_obrigatorio") {
             $query = ibase_query($trans, "select nromix from mix_obrigatorio ".$where)
              or die(ibase_errmsg());

             $row = ibase_fetch_row($query);

             if ($row != null)
               ibase_query($trans, "delete from mix_obrigatorio_itens where nromix = ".$row[0]) or die(ibase_errmsg());
          }
          //apagar itens caso a Pesquisa de Preço for alterada
          else if ($data->tabela == "pesquisas_preco_android") {
             $query = ibase_query($trans, "select nropesquisa from pesquisas_preco_android ".$where)
              or die(ibase_errmsg());

             $row = ibase_fetch_row($query);

             if ($row != null)
               ibase_query($trans, "delete from pesq_preco_android_itens where nropesquisa = ".$row[0]) or die(ibase_errmsg());
          }
          //apagar portadores do fechamento manifesto
          else if ($data->tabela == "fechamento_manifesto") {
             $query = ibase_query($trans, "select nrofechamento from fechamento_manifesto ".$where)
              or die(ibase_errmsg());

             $row = ibase_fetch_row($query);

             if ($row != null)
               ibase_query($trans, "delete from fechamento_manifesto_port where nrofechamento = ".$row[0]) or die(ibase_errmsg());
          }
          //apagar portadores e contas da cobranca
          else if ($data->tabela == "cobranca_android") {
             $query = ibase_query($trans, "select nrocobranca from cobranca_android ".$where)
              or die(ibase_errmsg());

             $row = ibase_fetch_row($query);

             if ($row != null) {
               ibase_query($trans, "delete from cobranca_port where nrocobranca = ".$row[0]) or die(ibase_errmsg());
               ibase_query($trans, "delete from cobranca_crec where nrocobranca = ".$row[0]) or die(ibase_errmsg());
             }
          }
        } else {
          $UPD = FALSE;
          if ($data->tabela == "clientes" or $data->tabela == "pedidos" or $data->tabela == "trocas") {

            if ($data->tabela == "clientes") {
              $sql = "codcliente, PROTESTAR, NEGATIVAR, RESTRICAO, DESCONTO_SUBST, NIVEL, FRETEPORCONTA, ATUALIZA_STATUS_AUTO,NROREGIAO ";
              $sql1 = "(select coalesce(max(codcliente), 0) + 1 from clientes), ".
			  "case when (select coalesce(cli_prot_neg, '') from config) = 'P' then 'T' else 'F' end,".
			  "case when (select coalesce(cli_prot_neg, '') from config) = 'N' then 'T' else 'F' end, ".
			  "'F', 'F', 1, 1, 'T', ".
                          "(select NROREGIAO from CIDADES where CODCIDADE = ".$data->codcidade.")";
            }

            if ($data->tabela == "pedidos") {
            //situacao padrao do pedido
              if (isset($situacao_padrao_pedido) && $situacao_padrao_pedido > 0) {
                $sql_aux = ", SITUACAO";
                if (($data->totqtde == 0 && $data->padrao_pedido == "R") || $data->idpedido_ven > 0)
                  $sql1_aux = ", 3";
                else
                  $sql1_aux = ", $situacao_padrao_pedido";
              } else {
                $sql_aux = "";
                $sql1_aux = "";
              }
              if (!isset($data->nromanifesto)) {
                $sql_aux .= ", CODTRANSP";
                $sql1_aux .= ", (select CODTRANSP from CLIENTES where CODCLIENTE = ".$data->codcliente.")";
              }
              //lançando o nro da km no pedido
              if ($data->idvend_km > 0) {
                $query = ibase_query($trans, "select nro from vend_km where codvendedor = ".$data->codvendedor." and id = ".$data->idvend_km) or die(ibase_errmsg());
                $row = ibase_fetch_row($query);
                if ($row != null) {
                  $sql_aux .= ", NROVEND_KM";
                  $sql1_aux .= ", ".$row[0];
                }
              }
              if ($data->idpedido_ven > 0) {
                $query = ibase_query($trans, "select nropedido from pedidos where codvendedor = ".$data->codvendedor." and id = ".$data->idpedido_ven) or die(ibase_errmsg());
                $row = ibase_fetch_row($query);
                if ($row == null)
                  throw new Exception("BONIFICACAO: Pedido ".$data->codvendedor."-".$data->idpedido_ven."não encontrado");
                else {
                  $sql_aux .= ", NROPEDIDO_VEN";
                  $sql1_aux .= ", ".$row[0];
                }
              }
              if ($data->idorc > 0 && $data->nroorc <= 0) {
                $query = ibase_query($trans, "select nroorc from orcamentos where codvendedor = ".$data->codvendedor." and id = ".$data->idorc) or die(ibase_errmsg());
                $row = ibase_fetch_row($query);
                if ($row == null)
                  throw new Exception("PEDIDOS: Orçamento ".$data->codvendedor."-".$data->idorc."não encontrado");
                else
                  $data->nroorc = $row[0];
              }
              $sql = "nropedido, CONFERIDO, FRETEPORCONTA, CODEMPRESA, CODASSISTENTE ".$sql_aux;
              $sql1 = "(select gen_id(GEN_PEDIDOS_NROPEDIDO, 1) from rdb\$database), ".
                "'F', " .
                ($exibir_freteporconta ? $data->freteporconta : "(select FRETEPORCONTA from CLIENTES WHERE CODCLIENTE = ".$data->codcliente.")") .
                ", ".($lancar_empresa_ped == 1 && $data->codempresa > 0 ? $data->codempresa : "CASE WHEN (SELECT CODEMPRESA FROM VENDEDORES WHERE CODVENDEDOR = ".$data->codvendedor.") IS NOT NULL THEN ".
                "(SELECT CODEMPRESA FROM VENDEDORES WHERE CODVENDEDOR = ".$data->codvendedor.") else ".
                "(select first 1 CODEMPRESA from EMPRESAS order by 1) end ").", ".
		"(select codassistente from busca_assistente_vend(" . $data->codcliente. ", " . $data->codvendedor . ", '" . $ClientesMultiplosVendedores . "')) ".$sql1_aux;
            } else if ($data->tabela == "trocas") {
              $sql = "nrotroca ";
              $sql1 = "gen_id(GEN_TROCAS, 1) ";
            }

          } else if ($data->tabela == "despesas_vend") {
            $sql = "nrodespesa, tipo ";
            $sql1 = "(select gen_id(GEN_DESPESAS_VEND, 1) from rdb\$database), 'S' ";
          } else if ($data->tabela == "pesquisas_merchan") {
            $sql = "nropesquisa ";
            $sql1 = "(select gen_id(GEN_PESQUISAS_MERCHAN, 1) from rdb\$database) ";
          } else if ($data->tabela == "tf02_dst") {
            $sql = "id ";
            $sql1 = "(select gen_id(GEN_TF02_DST_ID, 1) from rdb\$database) ";
            //lançando o nro da km no pedido
            if ($data->idvend_km > 0) {
              $query = ibase_query($trans, "select nro from vend_km where codvendedor = ".$data->codvendedor." and id = ".$data->idvend_km) or die(ibase_errmsg());
              $row = ibase_fetch_row($query);
              if ($row != null) {
                $sql .= ", NROVEND_KM";
                $sql1 .= ", ".$row[0];
              }
            }
            if ($data->codcliente > 0)
              $query = ibase_query($trans, "select CODCLIENTE from CLIENTES where codcliente = ".$data->codcliente);
            else
              $query = ibase_query($trans, "select CODCLIENTE from CLIENTES where id = ".$data->idcliente.
                      " and CODVENDEDOR = ".$data->codvendedor);
            $query = ibase_fetch_row($query);
            if ($query == null)
              throw new Exception("TF02_DST: código cliente não encontrado ");
            $data->codcliente = $query[0];

          } else if ($data->tabela == "cli_agendamentos") {

            //localizar cliente para inserção do registro pelo cóidigo quando enviado ou pelo id cliente e vendedor
            if ($data->codcliente > 0)
              $query2 = "select CODCLIENTE from CLIENTES where CODCLIENTE = ".$data->codcliente;
            else
              $query2 = "select CODCLIENTE from CLIENTES where ID = ".$data->idcliente." and CODVENDEDOR = ".$data->codvendedor;
            $query2 = ibase_query($trans, $query2);
            $query2 = ibase_fetch_object($query2);
            //encontrando o cliente cadastrar agendamento senão lança uma exceção
            if ($query2 != null) {
				$query3 = ibase_query($trans, "select nrovisita from visitas_android where id = ".$data->idvisita." and codvendedor = ".$data->codvendedor);
				$query3 = ibase_fetch_row($query3);
				if ($query3 != null)
					$nrovisita = $query3[0];
				else
					$nrovisita = 'null ';

              $sql = "codcliente, nroitem, nrovisita ";
              $sql1 = $query2->CODCLIENTE . ", ".
                  "(select coalesce(max(NROITEM), 0) + 1 from CLI_AGENDAMENTOS where CODCLIENTE = ".$query2->CODCLIENTE."), ".$nrovisita." ";
            } else
              throw new Exception("Cliente não econtrado para o agendamento!!!");

          //pedidos desdobramento
          } else if ($data->tabela == "ped_desdobramento") {
            if ($data->nropedido <= 0) {
              $query2 = ibase_query($trans, "select nropedido from pedidos where id = ".$data->idpedido." and codvendedor = ".$data->codvendedor);
              $query2 = ibase_fetch_row($query2);
              if ($query2 != null)
                $data->nropedido = $query2[0];
              else
                throw new Exception("Pedido ID/CODVENDEDOR: ".$data->idpedido."/".$data->codvendedor." não encontrado!");
            }
            $sql = "nrodesdobramento ";
            $sql1 = "(select coalesce(max(nrodesdobramento),0)+1 from ped_desdobramento where nropedido = ".$data->nropedido.") ";
          //Cheques android
          } else if ($data->tabela == "cheques_android") {
            if ($data->iddesdobramento > 0) {
              $query2 = ibase_query($trans, "select nropedido, nrodesdobramento from ped_desdobramento where id = ".$data->iddesdobramento." and codvendedor = ".$data->codvendedor);
              $query2 = ibase_fetch_row($query2);
              if ($query2 != null) {
                $data->nropedido = $query2[0];
                $data->nrodesdobramento = $query2[1];
              } else
                throw new Exception("Desdobramento ID/CODVENDEDOR: ".$data->idpedido."/".$data->codvendedor." não encontrado!");
            }
            if ($data->idpagto > 0) {
              $query2 = ibase_query($trans, "select nrolancto, nro from contasreceber_pagto where id = ".$data->idpagto." and codvendedor = ".$data->codvendedor);
              $query2 = ibase_fetch_row($query2);
              if ($query2 != null) {
                $data->nrolancto = $query2[0];
                $data->nrocobr = $query2[1];
              } else
                throw new Exception("Cobrança ID/CODVENDEDOR: ".$data->idpedido."/".$data->codvendedor." não encontrado!");
            }
            $sql = "nro ";
            $sql1 = "gen_id(GEN_CHEQUES_ANDROID, 1) ";
          //Distribuição
          } else if ($data->tabela == "distribuicao") {
            $sql = "nrodistr ";
            $sql1 = "(select gen_id(GEN_DISTRIBUICAO, 1) from rdb\$database) ";
          //Distribuição - Itens
          } else if ($data->tabela == "distribuicao_itens") {
            $query = ibase_query($trans, "select NRODISTR from DISTRIBUICAO where CODVENDEDOR = ".$data->codvendedor.
                " and ID = ".$data->iddistribuicao);
            $query = ibase_fetch_row($query);
            if ($query == null)
              throw new Exception("DISTRIBUICAO_ITENS: Nro Distrib não encontrado");
            $nrodistr = $query[0];
            $sql = "nrodistr, nro ";
            $sql1 = "$nrodistr, (select coalesce(max(nro), 0) + 1 from DISTRIBUICAO_ITENS where NRODISTR = $nrodistr) ";
		  // Mix Obrigatório
          } else if ($data->tabela == "mix_obrigatorio") {
            $sql = "nromix ";
            $sql1 = "(select gen_id(GEN_MIX_OBRIGATORIO, 1) from rdb\$database) ";
          // Mix Obrigatório - Itens
          } else if ($data->tabela == "mix_obrigatorio_itens") {
            $query = ibase_query($trans, "select nromix from mix_obrigatorio where codvendedor = ".$data->codvendedor.
                " and id = ".$data->idmix_obrigatorio);
            $query = ibase_fetch_row($query);
            if ($query == null)
              throw new Exception("mix_obrigatorio_itens: Nro. Mix não encontrado");
            $nromix = $query[0];
            $sql = "nromix, nro ";
            $sql1 = "$nromix, (select coalesce(max(nro), 0) + 1 from mix_obrigatorio_itens where nromix = $nromix) ";
          //Pesquisas de Preço - Android
          } else if ($data->tabela == "pesquisas_preco_android") {
            $sql = "nropesquisa ";
            $sql1 = "(select gen_id(GEN_PESQUISAS_PRECO_ANDROID, 1) from rdb\$database) ";
          //Pesquisas Supervisor
          } else if ($data->tabela == "pesquisas_supervisor") {
            $sql = "nropesquisa ";
            $sql1 = "(select gen_id(GEN_PESQUISAS_SUPERVISOR, 1) from rdb\$database)";
          //Plano Ação
          } else if ($data->tabela == "plano_acao") {
            $sql = "nroplano ";
            $sql1 = "(select gen_id(GEN_PLANO_ACAO, 1) from rdb\$database) ";
          //Mensagens
          } else if ($data->tabela == "mensagens") {
            $sql = "nromensagem ";
            $sql1 = "(select gen_id(GEN_MENSAGENS, 1) from rdb\$database) ";
          //Pesquisas de Preço - Android - Itens
          } else if ($data->tabela == "pesq_preco_android_itens") {
            $query = ibase_query($trans, "select nropesquisa from pesquisas_preco_android where codvendedor = ".$data->codvendedor.
                " and id = ".$data->idpesquisa);
            $query = ibase_fetch_row($query);
            if ($query == null)
              throw new Exception("pesq_preco_android_itens: Nro. Pesquisa não encontrado");
            $nropesquisa = $query[0];
            $sql = "nropesquisa, nro ";
            $sql1 = "$nropesquisa, (select coalesce(max(nro), 0) + 1 from pesq_preco_android_itens where nropesquisa = $nropesquisa) ";
          //Pesquisas Supervisor - Itens
          } else if ($data->tabela == "pesquisas_supervisor_itens") {
            $query = ibase_query($trans, "select nropesquisa from pesquisas_supervisor where codvendedor = ".$data->codvendedor.
                " and id = ".$data->idpesquisa);
            $query = ibase_fetch_row($query);
            if ($query == null)
              throw new Exception("pesquisas_supervisor_itens: Nro. Pesquisa não encontrado");
            $nropesquisa = $query[0];
            $sql = "nropesquisa, nro ";
            $sql1 = "$nropesquisa, (select coalesce(max(nro), 0) + 1 from pesquisas_supervisor_itens where nropesquisa = $nropesquisa) ";
          //Visitas
          } else if ($data->tabela == "visitas_android") {
            $sql = "nrovisita ";
            $sql1 = "(select gen_id(GEN_VISITAS_ANDROID, 1) from rdb\$database) ";
          //fechamento manifesto
          } else if ($data->tabela == "fechamento_manifesto") {
            $sql = "nrofechamento ";
            $sql1 = "(select gen_id(GEN_FECHAMENTO_MANIFESTO, 1) from rdb\$database) ";
          //fechamento manifesto portador
          } else if ($data->tabela == "fechamento_manifesto_port") {
            if (! isset($nrofechamento))
              throw new Exception("fechamento_manifesto_port: Nro do fechamento não encontrado");
            $sql = "nrofechamento ";
            $sql1 = "$nrofechamento ";
          //cobranca android
          } else if ($data->tabela == "cobranca_android") {
            $sql = "nrocobranca ";
            $sql1 = "(select coalesce(max(nrocobranca),0)+1 from cobranca_android) ";
          //cobranca portadores
          } else if ($data->tabela == "cobranca_port") {
            if (! isset($nrocobranca))
              throw new Exception("cobranca_port: Nro da cobrança não encontrada");
            $sql = "nrocobranca ";
            $sql1 = "$nrocobranca ";
          //cobranca crec
          } else if ($data->tabela == "cobranca_crec") {
            if (! isset($nrocobranca))
              throw new Exception("cobranca_crec: Nro da cobranca não encontrada");
            $sql = "nrocobranca ";
            $sql1 = "$nrocobranca ";
          //contasreceber pagto
          } else if ($data->tabela == "contasreceber_pagto") {
            $sql = "nrolancto, nro ";
            $sql1 = $data->nrolanctocrec.", (select coalesce(max(nro), 0) + 1 from CONTASRECEBER_PAGTO where NROLANCTO = ".$data->nrolanctocrec.") ";
          //contas receber
          } else if ($data->tabela == "contasreceber") {
          //Orçamento
          } else if ($data->tabela == "orcamentos") {
            $sql = "nroorc, CODASSISTENTE";
            $sql1 = "(select coalesce(max(nroorc),0) + 1 from orcamentos), (select codassistente from busca_assistente_vend(" . $data->codcliente. ", " . $data->codvendedor . ", '" . $ClientesMultiplosVendedores . "')) ";
		      //Orçamentos - Itens
          } else if ($data->tabela == "orc_itens") {
            $sql = "nroorc, nroitem ";
            $sql1 = "(select FIRST 1 o.nroorc from orcamentos o where o.codvendedor = ".$data->codvendedor." and o.id = ".$data->id_orcamento."), ".
                "(select coalesce(max(nroitem), 0) + 1 from orc_itens where codvendedor = ".$data->codvendedor." and id_orcamento = ".$data->id_orcamento.") ";
		      //Pedidos - Indenizacoes
          } else if ($data->tabela == "pedidos_indeniz") {

            $query = ibase_query($trans, "select NROPEDIDO from PEDIDOS where CODVENDEDOR = ".$data->codvendedor.
                " and ID = ".$data->idpedido);
            $query = ibase_fetch_row($query);
            if ($query == null)
              throw new Exception("INDENIZAÇÕES: Nro pedido não encontrado ".$data->codvendedor."-".$data->idpedido);
            $nropedido = $query[0];

            $sql = "nroindeniz, nropedido";
            $sql1 = "(select GEN_ID(GEN_PEDIDOS_INDENIZ_NROINDENIZ, 1) from rdb\$database),  ".$nropedido;

		} else if ($data->tabela == "ped_servs") {

            $query = ibase_query($trans, "select NROPEDIDO from PEDIDOS where CODVENDEDOR = ".$data->codvendedor.
										" and ID = ".$data->id);
            $query = ibase_fetch_row($query);
            if ($query == null)
              throw new Exception("PED_SERVS: Nro pedido não encontrado ".$data->codvendedor."-".$data->idpedido);
            $nropedido = $query[0];

            $sql = "nroitem, nropedido";
            $sql1 = "(select coalesce(max(nroitem), 0) + 1 from ped_servs where nropedido = ".$nropedido." ),  ".$nropedido;

          } else if ($data->tabela == "pedidos_indeniz_prods") {
            $sql = "nroindeniz, nro  ";

            $query = ibase_query($trans, "select NROINDENIZ from PEDIDOS_INDENIZ where CODVENDEDOR = ".$data->codvendedor.
                " and ID = ".$data->idindeniz);
            $query = ibase_fetch_row($query);
            if ($query == null)
              throw new Exception("INDENIZAÇÕES: Nro indenização não encontrada");
            $nroindeniz = $query[0];
            $sql1 = $nroindeniz.", (select COALESCE(MAX(NRO),0)+1 FROM PEDIDOS_INDENIZ_PRODS where NROINDENIZ = ".$nroindeniz.")";
		      //Resumo checagens
          } else if ($data->tabela == "resumo_checagens") {
            $sql = "nrochecagem  ";
            $sql1 = "(select gen_id(GEN_RESUMO_CHECAGENS, 1) from rdb\$database)";
		      //Relatorio PDV
          } else if ($data->tabela == "relatoriopdv") {
            $sql = "nrorel  ";
            $sql1 = "(select GEN_ID(GEN_RELATORIOPDV_NROREL,1) FROM RDB\$DATABASE)";
		      //PesqExibExtra
          } else if ($data->tabela == "pesqexibextra") {
            $sql = "nropesq  ";
            $sql1 = "(select GEN_ID(GEN_PESQEXIBEXTRA,1) FROM RDB\$DATABASE)";
          } else if ($data->tabela == "imagens_visitas") {
            $sql = "nro, nropedido, imagem ";
            $sql1 = "(select coalesce(max(nro), 0) + 1 from imagens_visitas where nrovisita = ".$data->nrovisita."), ".
					($data->idpedido > 0 ? "(select coalesce(p.nropedido, 0) from pedidos p where p.id = ".$data->idpedido." and p.codvendedor = ".$data->codvendedor.")" : " null " ).", ?";
          } else if ($data->tabela == "movlotemanif") {
            $sql = "nromov  ";
            $sql1 = "(select GEN_ID(GEN_MOVLOTEMANIF,1) FROM RDB\$DATABASE)";
          } else if ($data->tabela == "lotes_mov") {
              $sql = "nrocontrole  ";
              $sql1 = "(select GEN_ID(GEN_LOTES_MOV_NROCONTROLE,1) FROM RDB\$DATABASE)";
          } else if ($data->tabela == "clientes_contatos") {
            $sql = "nrocontato  ";
            $sql1 = "(select coalesce(max(NROCONTATO),0) + 1 FROM CLIENTES_CONTATOS where CODCLIENTE = ".$data->codcliente.")";
          } else if ($data->tabela == "ped_bloqueios") {
            $sql = "nro  ";
            $sql1 = "GEN_ID(GEN_PED_BLOQUEIOS, 1) ";
          } else if ($data->tabela == "controleprodutos") {
            $sql = "nrocontrole  ";
            $sql1 = "GEN_ID(GEN_CONTROLEPRODUTOS, 1) ";
          } else if ($data->tabela == "logintegracoes") {
            $sql = "nro  ";
            $sql1 = "GEN_ID(GEN_LOGINTEGRACOES, 1) ";
          } else if ($data->tabela == "movcaixaflex") {
            $sql = "nromov  ";
            $sql1 = "GEN_ID(GEN_MOVCAIXAFLEX, 1) ";
          } else if ($data->tabela == "senhas_android") {
            $sql = "nrosenha  ";
            $sql1 = "GEN_ID(GEN_SENHAS_ANDROID, 1) ";
          }
        }

        //pedidos e distribuição verificar o cliente cadastrado pelo caso o codcliente for igual a ZERO
        if (($data->tabela == "pedidos" || $data->tabela == "distribuicao") && isset($data->codcliente) && $data->codcliente <= 0) {
          $cliente = "select codcliente from clientes where codvendedor = ".
            $data->codvendedor." and id = ".$data->idcliente;
          $query = ibase_query($trans, $cliente) or die(ibase_errmsg());
          $row = ibase_fetch_row($query);
          if ($row != null)
            $data->codcliente = $row[0];
        }

        if ($data->tabela == "pedidos" && ! $UPD) {
		  $banco = "select codbanco from vendedores " .
		    "where codvendedor = ".$data->codvendedor;
		  $queryBanco = ibase_query($trans, $banco) or die(ibase_errmsg());
		  $rowBanco = ibase_fetch_row($queryBanco);

      $portador = "select codbanco from portadores " .
		    "where codportador = ".$data->codportador;
		  $queryPort = ibase_query($trans, $portador) or die(ibase_errmsg());
		  $rowPort = ibase_fetch_row($queryPort);

		  if ($rowBanco != null && $rowBanco[0] > 0) {
		    $sql .= ", CODBANCO";
		    $sql1 .= ", ".$rowBanco[0];
		  } elseif ($rowPort != null && $rowPort[0] > 0) {
		    $sql .= ", CODBANCO";
		    $sql1 .= ", ".$rowPort[0];
		  }	elseif ($codbanco_padrao > 0) {
        $sql .= ", CODBANCO";
        $sql1 .= ", ".$codbanco_padrao;
      } else {
          $banco = "select codbanco from clientes " .
            "where codcliente = ".$data->codcliente;
          $query = ibase_query($trans, $banco) or die(ibase_errmsg());
          $row = ibase_fetch_row($query);
          if ($row != null && $row[0] > 0) {
            $sql .= ", CODBANCO";
            $sql1 .= ", ".$row[0];
          }
        }
      }

        if (($data->tabela == "pedidos" || $data->tabela == "trocas" || $data->tabela == "despesas_vend") && isset($data->nromanifesto) && $data->nromanifesto > 0) {
          $banco = "select NRODOCUMENTO from VENDAS " .
            "where NROVENDA = ".$data->nromanifesto;
          $query = ibase_query($trans, $banco) or die(ibase_errmsg());
          $row = ibase_fetch_row($query);
          if ($row != null && $row[0] > 0) {
            if ($UPD /*&&  $data->tabela == "despesas_vend"*/) {
              if ($sql != "")
                $sql .= ",";
              $sql .= " NROMANIFESTO = ".$row[0];
            } else {
              $sql .= ", NROMANIFESTO";
              $sql1 .= ", ".$row[0];
            }
          }
        }

        //lançar nrofechamento na cobrança
        if ($data->tabela == "cobranca_android" && $data->idfechamento > 0) {
          $query = ibase_query($trans, "select nrofechamento from fechamento_manifesto where codvendedor = ".$data->codvendedor.
              " and id = ".$data->idfechamento);
          $query = ibase_fetch_row($query);
          if ($query != null)
            $nrofechamento2 = $query[0];
          else {
            $nrofechamento2 = 'null';
            throw new Exception("erroooo:".$nrofechamento2);
          }
          if ($UPD) {
            if ($sql != "")
              $sql .= ",";
            $sql .= " NROFECHAMENTO = ".$nrofechamento2;
          } else {
            $sql .= ", NROFECHAMENTO";
            $sql1 .= ", ".$nrofechamento2;
          }
        }
		// Apaga os itens para inserir os itens que vieram do mobile
		if($data->tabela == "pedidos" && $data->nropedido > 0 && $configdao->getDisponibilizar()->getIntegrarGestaoNoManifesto() && @$data->edicao_wmcmobile == "T"){	
			ibase_query($trans, "delete from ped_prods where nropedido = ".$data->nropedido) or die(ibase_errmsg());
			$data->edicao_wmcmobile = "F";
		}
		
        //percorrer os atributos encontrados pelo reflection para montar sql de update insert
        foreach ($pros as $pro) {
          if ($pro->getName() != "tabela" &&
              ($data->tabela != "clientes" || $pro->getName() != "codcliente") &&
              ($data->tabela != "pedidos" || $pro->getName() != "nropedido") &&
              ($data->tabela != "pedidos" || $pro->getName() != "idcliente") &&
              ($data->tabela != "pedidos" || $pro->getName() != "nromanifesto") &&
              ($data->tabela != "pedidos" || $pro->getName() != "freteporconta") &&
              ($data->tabela != "pedidos" || $pro->getName() != "codempresa") &&
              ($data->tabela != "pedidos" || $pro->getName() != "idvend_km") &&
              ($data->tabela != "pedidos" || $pro->getName() != "idpedido_ven") &&
              (! isset($situacao_padrao_pedido) || $data->tabela != "pedidos" || $pro->getName() != "situacao") &&
              ($data->tabela != "ped_prods" || $pro->getName() != "codvendedor") &&
              ($data->tabela != "ped_prods" || $pro->getName() != "id") &&
              ($data->tabela != "trocas" || $pro->getName() != "idpedido") &&
              ($data->tabela != "trocas" || $pro->getName() != "nromanifesto") &&
              ($data->tabela != "despesas_vend" || $pro->getName() != "nromanifesto") &&
              ($data->tabela != "pesquisas_merchan" || $pro->getName() != "nropesquisa") &&
              ($data->tabela != "pesquisas_merchan_itens" || $pro->getName() != "id_pesquisas_merchan") &&
              ($data->tabela != "pesquisas_merchan_itens" || $pro->getName() != "codvendedor") &&
              ($data->tabela != "cli_agendamentos" || $pro->getName() != "codcliente") &&
              ($data->tabela != "cli_agendamentos" || $pro->getName() != "idcliente") &&
              ($data->tabela != "cli_agendamentos" || $pro->getName() != "nroitem") &&
			  ($data->tabela != "cli_agendamentos" || $pro->getName() != "idvisita") &&
              ($data->tabela != "ped_desdobramento" || $pro->getName() != "idpedido") &&
              ($data->tabela != "cli_estoque" || $pro->getName() != "idcliente") &&
              ($data->tabela != "distribuicao" || $pro->getName() != "idcliente")&&
              ($data->tabela != "distribuicao_itens" || $pro->getName() != "iddistribuicao")&&
              ($data->tabela != "distribuicao_itens" || $pro->getName() != "id") &&
              ($data->tabela != "distribuicao_itens" || $pro->getName() != "codvendedor") &&
              ($data->tabela != "mix_obrigatorio_itens" || $pro->getName() != "codvendedor") &&
              ($data->tabela != "mix_obrigatorio_itens" || $pro->getName() != "idmix_obrigatorio") &&
              ($data->tabela != "pesq_preco_android_itens" || $pro->getName() != "idpesquisa") &&
              ($data->tabela != "pesq_preco_android_itens" || $pro->getName() != "codvendedor") &&
              ($data->tabela != "pesquisas_supervisor_itens" || $pro->getName() != "codvendedor") &&
              ($data->tabela != "fechamento_manifesto_port" || $pro->getName() != "idfechamento") &&
              ($data->tabela != "cobranca_android" || $pro->getName() != "idfechamento") &&
              ($data->tabela != "cobranca_crec" || $pro->getName() != "idcobranca") &&
              ($data->tabela != "cobranca_port" || $pro->getName() != "idcobranca") &&
              ($data->tabela != "contasreceber_pagto" || $pro->getName() != "nrolanctocrec") &&
              ($data->tabela != "contasreceber_pagto" || $pro->getName() != "idcreceber") &&
              ($data->tabela != "contasreceber_pagto" || $pro->getName() != "nro") &&
              ($data->tabela != "pedidos_indeniz" || $pro->getName() != "idpedido") &&
              ($data->tabela != "pedidos_indeniz_prods" || $pro->getName() != "idindeniz") &&
              ($data->tabela != "pedidos_indeniz" || $pro->getName() != "nroitem") &&
              ($data->tabela != "mensagens" || $pro->getName() != "nromensagem") &&
              ($data->tabela != "imagens_visitas" || $pro->getName() != "codvendedor") &&
              ($data->tabela != "imagens_visitas" || $pro->getName() != "idvisita") &&
			  ($data->tabela != "imagens_visitas" || $pro->getName() != "idpedido") &&
              ($data->tabela != "imagens_visitas" || $pro->getName() != "imagem") &&
              ($data->tabela != "movlotemanif" || $pro->getName() != "idpedido") &&
              ($data->tabela != "movlotemanif" || $pro->getName() != "idtroca") &&
              ($data->tabela != "movlotemanif" || $pro->getName() != "nrotroca" || $data->idtroca > 0) &&
              ($data->tabela != "movlotemanif" || $pro->getName() != "nroitem_ped" || $data->nroitem_ped > 0) &&
              ($data->tabela != "movlotemanif" || $pro->getName() != "nroitem_pedido") &&
              ($data->tabela != "lotes_mov" || $pro->getName() != "idpedido") &&
              ($data->tabela != "lotes_mov" || $pro->getName() != "idtroca") &&
              ($data->tabela != "lotes_mov" || $pro->getName() != "nrotroca" || $data->idtroca > 0) &&
              ($data->tabela != "lotes_mov" || $pro->getName() != "nroitem_pedido" || $data->nroitem_pedido > 0) &&
              ($data->tabela != "lotes_mov" || $pro->getName() != "nroitem_ped") &&
              ($data->tabela != "lotes_mov" || $pro->getName() != "datahora") &&
              ($data->tabela != "lotes_mov" || $pro->getName() != "datavalidade") &&
              ($data->tabela != "vend_km" || $pro->getName() != "nro") &&
              ($data->tabela != "ped_servs" || $pro->getName() != "id") &&
			        ($data->tabela != "ped_servs" || $pro->getName() != "nroitem") &&
			        ($data->tabela != "ped_servs" || $pro->getName() != "codvendedor") &&
              ($data->tabela != "clientes_contatos" || $pro->getName() != "idcliente") &&
              ($data->tabela != "clientes_contatos" || $pro->getName() != "nrocontato") &&
              ($data->tabela != "tf02_dst" || $pro->getName() != "idvend_km") &&
              ($data->tabela != "tf02_dst" || $pro->getName() != "idcliente") &&
              ($data->tabela != "ped_bloqueios" || $pro->getName() != "idpedido") &&
              ($data->tabela != "cheques_android" || $pro->getName() != "iddesdobramento") &&
              ($data->tabela != "cheques_android" || $pro->getName() != "idpagto") &&
              ($data->tabela != "pedidos" || $pro->getName() != "idorc")) {
            //sql para verificar se o campo esta em uma foreign key
            $foreign_key =
              "select \n".
              "'SELECT COUNT('||iseg.RDB\$FIELD_NAME||') FROM '||id2.RDB\$RELATION_NAME||' where '||iseg.RDB\$FIELD_NAME||' = ' \n".
              "from RDB\$INDICES I,  RDB\$INDEX_SEGMENTS ISE, RDB\$INDICES ID2, RDB\$INDEX_SEGMENTS ISEG \n".
              "WHERE coalesce(I.RDB\$FOREIGN_KEY, '') <> '' \n".
              "and i.RDB\$FOREIGN_KEY = id2.RDB\$INDEX_NAME \n".
              "and iD2.RDB\$INDEX_NAME = ISEG.RDB\$INDEX_NAME \n".
              "and i.RDB\$INDEX_NAME = ISE.RDB\$INDEX_NAME \n".
              "and i.RDB\$RELATION_NAME = upper('".$data->tabela."') \n".
              "and iSE.RDB\$FIELD_NAME = upper('".$pro->getName()."') \n".
			        "and iSE.RDB\$FIELD_NAME <> 'CODSUBGRUPO' and i.RDB\$RELATION_NAME <> 'MOVLOTEMANIF' and i.RDB\$RELATION_NAME <> 'LOTES_MOV' and iSE.RDB\$FIELD_NAME <> 'NRODESDOBRAMENTO' and iSE.RDB\$FIELD_NAME <> 'NROCOBR'";

			
            $query = ibase_query($trans, $foreign_key) or die(ibase_errmsg());
            $OK = FALSE;
			$count = 0;
			while ($fetch[$count] = ibase_fetch_row($query)){
				$count++;
			}
			$row = $fetch[0];
			
            if (($row != null) && ($count == 1)) {
              //caso o campo tem um foreign jey vinculado verificar se o valor existe
              $query = @ibase_query($trans, $row[0]."'".ValorCorreto($pro->getValue($data))."'") or die(ibase_errmsg());
              $row = @ibase_fetch_row($query);
              if (@$row[0] > 0)
                $OK = TRUE;
            } else
              $OK = TRUE;

            if ($OK)  {
              if (property_exists($data, $pro->getName())) {
                if ($sql != "")
                  $sql .= ",";
                if ($sql1 != "")
                  $sql1 .= ",";

                if ($UPD)
                  $sql .= $pro->getName()." = '".ValorCorreto($pro->getValue($data))."'";
                else {
                  $sql .= $pro->getName();
                  $sql1 .= "'".ValorCorreto($pro->getValue($data))."'";
                }
              }
            }
          }
        }
        if ($UPD)
          $sql = "update ".$data->tabela." set ".$sql." ".$where;
		else {
          $sql = "insert into ".$data->tabela."(".$sql.") values (".$sql1.")";
        }

		if ($data->tabela == "imagens_visitas") {
			$queryImgVis = ibase_prepare($trans, $sql);
			ibase_execute($queryImgVis, $data->imagem);
		} else {
			$res = @ibase_query($trans, $sql);
      if ($res === false) {
        $erro = ibase_errmsg();
        if (strpos(strtoupper($erro), 'PRIMARY OR UNIQUE KEY') > 0)
          ajustargenerator($data->tabela);
        die ($data->tabela." --> ".$erro." --> ".$sql);
      }
		}
    if (($data->tabela == "pedidos" || $data->tabela == "tf02_dst") && isset($data->codcliente) && $data->codcliente > 0)
      apagarCli_NaoVisitado($trans, $data->codcliente);
    if ($data->tabela == "pedidos" && @$data->nroorc > 0)  {
      $sql = "update orcamentos set situacao = 'P' where nroorc = ".$data->nroorc;
      ibase_query($trans, $sql) or die ($sql);
    }

		}
		 	ibase_commit($trans);
		  	$trans = null;
		  	echo "importado com sucesso";
		}

	} catch (Exception $e) {
		echo "Erro: ".$e->getMessage();
	}
	if ($trans != null)
	  ibase_rollback($trans);

	function ValorCorreto($str) {
	  $str = str_replace("'", "''", $str);
		return utf8_decode($str);
	}

  function apagarCli_NaoVisitado($trans, $codCli) {
    $sql = "delete ".
          "FROM CLI_NAOVISITADOS CN ".
          " ".
          "WHERE CN.CODCLIENTE = ".$codCli.
          " AND CN.DATA BETWEEN ".
          "  CURRENT_DATE - EXTRACT(WEEKDAY FROM CURRENT_DATE) AND ".
          "  CURRENT_DATE + (6 - EXTRACT(WEEKDAY FROM CURRENT_DATE)) ".
          " ".
          "AND ( ".
          "   (SELECT COUNT(P.NROPEDIDO) from PEDIDOS P ".
          "     where P.CODCLIENTE = ".$codCli." and P.DATA between ".
          "          CURRENT_DATE - EXTRACT(WEEKDAY FROM CURRENT_DATE) AND ".
          "          CURRENT_DATE + (6 - EXTRACT(WEEKDAY FROM CURRENT_DATE)) ".
          "     AND P.CODCLIENTE = CN.CODCLIENTE AND P.SITUACAO = 3 AND P.TIPO = 'V') > 0 ".
          "or (SELECT COUNT(T.ID) from TF02_DST T ".
          "     where T.CODCLIENTE = ".$codCli." and T.DATA between ".
          "          CURRENT_DATE - EXTRACT(WEEKDAY FROM CURRENT_DATE) AND ".
          "          CURRENT_DATE + (6 - EXTRACT(WEEKDAY FROM CURRENT_DATE)) ".
          "     AND T.CODCLIENTE = CN.CODCLIENTE) > 0 ".
          ")";
    ibase_query($trans, $sql) or die ($sql);
  }
  
  function isEntregador($trans, $codVendedor, $imei, $serial){	  
	  $sql = "select coalesce(v.entregador, 'F') ".
	  "from vend_imei v ".
	  "where v.codvendedor = ".$codVendedor;  
	  
	   if ($imei != "") {
		 $sql .= " and v.imei = '".$imei. "'" ;
	   } else {
		  $sql .= " and v.serial = '".$serial. "'";
	    }

		$query = ibase_query($trans, $sql) or die(ibase_errmsg());
        $row = ibase_fetch_row($query);
	    $entregador =  $row[0];       				
		
	  return ($entregador  == "T");     	  
  }



?>