Ir para conteúdo
Fórum CódigoFonte.net
edergonsilva

Trocando informações em "select multiple" de um para o outro

Recommended Posts

Olá pessoal sou novo no fórum.

Aqui na empresa temos 2 sistemas, e estou realizando um vínculo de notas fiscais entre os dois sistemas. Para realizar esta façanha, eu criei dois campos 'select' do tipo 'multiple' onde de um lado lista todas as notas disponíveis, e do outro lado mostra as notas fiscais que já foram vinculadas para um registro específico.

Para passar as notas de um lado para o outro o usuário precisa dar dois cliques.

O problema é que na hora em que o usuário da os dois cliques, o sistema precisa atualizar os dois campos, ou seja, o que foi vinculado deve sumir do primeiro select e aparecer no outro....só que no evento javascript ele executa as 3 funções ao mesmo tempo, ou seja, não dá tempo de fazer a inserção ou o delete no banco de dados e ele não atualiza as informações corretamente. Explicando melhor...qd ele clica por exemplo em uma nota não vinculada o sistema tem que fazer o insert na tabela de vínculos, atualizar o select um para sumir e mostrar no outro select com outra função. Abaixo segue o código das páginas e requisições ajax que eu to fazendo pra ver se alguém tem uma luz:

Outro problema é que não funciona no Internet explorer em qualquer versão que seja.

Aqui são os dois fieldsets que o sistema mostra na tela inicial:

<div id="corpodiv" class="corpo">

	 <fieldset class="box500" id="esquerda">

<legend><b>Notas Sem Vínculo</b></legend>

<p><b><i>Dê dois cliques para vincular a nota</i></b></p>

<div id="semvinculo"></div>

</fieldset>



<fieldset class="box500" id="direita">

<legend><b>Notas da Viagem</b></legend>

<p><b><i>Dê dois cliques para excluir o vínculo da nota</i></b></p>

<div id="vinculadas"></div>

</fieldset>


</div>

Aqui é o select que ele monta com as informações pra mostrar na tela da parte de não vinculadas (SQL EM ORACLE):
<?php

include("../dd/ddconn.php");		 //conexão

include("../dd/ddfuncoes.php");	 //funções gerais do sistema


$idsessao = $_GET['idsessao'];

$cavalo = $_GET['cavalo'];

$idviagem = $_GET['idviagem'];

$sqlpend = "Select omc.empresa

			 ,omc.nota_fiscal

			 ,to_char(omc.nota_fiscal,'00000000') nf_formatada

			 ,to_char(omc.serie_nota_fiscal,'000') serie_formatada

			 ,omc.serie_nota_fiscal

			 ,omc.remetent

			 ,coo_f_ret_nomredcli(omc.remetent) nom_remetente

			 ,omc.pagador_frete

			 ,coo_f_ret_nomredcli(omc.pagador_frete) nom_pagador_frete

		 From notas Omc

		 JOIN conhecs con on (con.empresa_nota_fiscal = omc.empresa and con.nota_fiscal = omc.nota_fiscal and con.serie_nota_fiscal = omc.serie_nota_fiscal and con.subserie_nf = omc.subserie_nf and con.remetent = omc.remetent)

		 JOIN conhectran cot on (cot.empresa = con.empresa and cot.pconh_transporte = con.pconh_transporte)

		 Where cot.veiculo = '$cavalo'

			 and TO_DATE(to_char(omc.dat_emissao,'ddmmyyyy'),'ddMMYYYY') BETWEEN TO_DATE(to_char(sysdate - 30,'ddMMYYYY'),'ddMMYYYY') and TO_DATE(to_char(sysdate + 30,'ddMMYYYY'),'ddMMYYYY')

		 And Not Exists (Select 1

				 From Coo_Exp_Vinculo_Notas v

				 Where v.Nota_Fiscal = Omc.Nota_Fiscal

				 And trim(v.Serie_Nota_Fiscal) = trim(Omc.Serie_Nota_Fiscal)

				 And v.Remetente = Omc.Remetent

				 And v.Cliente_Pagador = Omc.Pagador_Frete

				 And v.empresa = omc.empresa)

		 And Not Exists (Select 1

				 From Coo_Xml_Pre_Nf Xml

				 Where Xml.Nf_Nro = Omc.Nota_Fiscal

				 And trim(Xml.Nf_Serie) = trim(Omc.Serie_Nota_Fiscal)

				 And Xml.Emb_Cnpj = Omc.Remetent

				 And xml.empresa = omc.empresa

				 and xml.cli_pag = omc.pagador_frete)

		 order by omc.nota_fiscal desc";

$conn = conn();

$oparse = oci_parse($conn, $sqlpend);

oci_execute($oparse);

oci_close($conn);

$cont = 0;

//

echo "<select id='nfsemvinc' multiple='true' size='20' ondblclick='inserir(\"ajax/exp_vinculo_notas.ajax.php?idsessao=$idsessao&cavalo=$cavalo&idviagem=$idviagem\"+$(this).val(),\"ajax/exp_lista_notas_vinc.ajax.php?idsessao=$idsessao&idviagem=$idviagem\",\"vinculadas\",\"ajax/exp_lista_notas_semvinc.ajax.php?idsessao=$idsessao&cavalo=$cavalo&idviagem=$idviagem\"+$(this).val(),\"semvinculo\"); showResultc(\"ajax/exp_lista_notas_semvinc.ajax.php?idsessao=$idsessao&cavalo=$cavalo&idviagem=$idviagem\"+$(this).val(),\"semvinculo\"); showResultd(\"ajax/exp_lista_notas_vinc.ajax.php?idsessao=$idsessao&idviagem=$idviagem\",\"vinculadas\");'>";

while ($ddpend = oci_fetch_array($oparse, OCI_ASSOC)) {


$values = "&nota_fiscal=".trim($ddpend['NOTA_FISCAL'])."&serie_nota_fiscal=".trim($ddpend['SERIE_NOTA_FISCAL'])."&remetente=".trim($ddpend['REMETENT'])."&cliente_pagador=".trim($ddpend['PAGADOR_FRETE'])."&empresa=".trim($ddpend['EMPRESA'])."";

$text = trim($ddpend['EMPRESA'])." - ".trim($ddpend['NF_FORMATADA'])." - ".trim($ddpend['SERIE_FORMATADA'])." - ".trim($ddpend['NOM_PAGADOR_FRETE']);

echo "<option value='$values'>$text</option>";

$cont++;

}

echo "</select>";

?>

Aqui é a função ajax para inserir as notas:
<?php

include("../dd/ddconn.php");		 //conexão

include("../dd/ddfuncoes.php");	 //funções gerais do sistema


$idsessao = $_GET['idsessao'];

$codcliente = $_GET['codcliente'];

$conn = conn();

$sql = "insert into vinculo_notas values ((select nvl(max(idvinculo)+1,1) from vinculo_notas),'$nota_fiscal','$serie_nota_fiscal','$remetente','$cliente_pagador','$idviagem','$empresa')";

$ora = oci_parse($conn,$sql);

oci_execute($ora);

oci_commit($conn);

oci_close($conn);

?>

A função que o ajax chama pra mostrar as notas vinculadas na tela:
<?php

include("../dd/ddconn.php");		 //conexão

include("../dd/ddfuncoes.php");	 //funções gerais do sistema


$idsessao = $_GET['idsessao'];

$cavalo = $_GET['cavalo'];

$idviagem = $_GET['idviagem'];

$conn = conn();

$sql = "SELECT v.idvinculo

	 ,v.empresa

	 ,v.nota_fiscal

	 ,to_char(v.nota_fiscal,'00000000') nf_formatada

	 ,v.serie_nota_fiscal

	 ,v.remetente

	 ,coo_f_ret_nomredcli(v.remetente) nom_remetente

	 ,v.cliente_pagador

	 ,coo_f_ret_nomredcli(v.cliente_pagador) nom_pagador

	 ,( select cavalo from coo_viagem where idviagem = '$idviagem' ) cavalo

	 ,coo_f_ret_nomredcli(v.cliente_pagador) nom_pagador_frete FROM Vinculo_Notas v WHERE v.idviagem = '$idviagem'

	 order by v.nota_fiscal desc";

$ora = oci_parse($conn, $sql);

oci_execute($ora);

oci_close($conn);

$cont = 0;

echo "<select id='nfvinculada' size='20' multiple='true' height='200' ondblclick='deletar(\"ajax/exp_exclusao_notas.ajax.php?idsessao=$idsessao&idviagem=$idviagem\"+$(this).val(),\"ajax/exp_lista_notas_semvinc.ajax.php?idsessao=$idsessao&idviagem=$idviagem\"+$(this).val(),\"semvinculo\",\"ajax/exp_lista_notas_vinc.ajax.php?idsessao=$idsessao&idviagem=$idviagem\"+$(this).val(),\"vinculadas\"); showResultd(\"ajax/exp_lista_notas_vinc.ajax.php?idsessao=$idsessao&idviagem=$idviagem\",\"vinculadas\"); showResultc(\"ajax/exp_lista_notas_semvinc.ajax.php?idsessao=$idsessao&cavalo=$cavalo&idviagem=$idviagem\"+$(this).val(),\"semvinculo\"); '>";


while ($ddvinc = oci_fetch_array($ora, OCI_ASSOC)) {


$values = "&idvinculo=".trim($ddvinc['IDVINCULO'])."&cavalo=".$ddvinc['CAVALO'];

echo "<option value='$values'>".$ddvinc['EMPRESA']." - ".$ddvinc['NF_FORMATADA']." - ".$ddvinc['SERIE_NOTA_FISCAL']." - ".$ddvinc['NOM_PAGADOR']."</option>";


}

echo "</select>";

?>

Abaixo, é a função que o ajax chama para deletar o registro da tabela de vínculos
<?php

include("../dd/ddconn.php");		 //conexão

include("../dd/ddfuncoes.php");	 //funções gerais do sistema


$idsessao = $_GET['idsessao'];

$codcliente = $_GET['codcliente'];

$conn = conn();

$sql = "delete from Vinculo_Notas v where v.idvinculo = '$idvinculo'";

$ora = oci_parse($conn,$sql);

oci_execute($ora);

oci_commit($conn);

oci_close($conn);

?>

e lá vai o ajax que faz a requisição:
function deletar(pag,pag1,nmdiv1,pag2,nmdiv2) {



if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

	 xmlhttpd=new XMLHttpRequest();

}else {// code for IE6, IE5

	 xmlhttpd=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttpd.onreadystatechange=function()

{

	 if (xmlhttpd.readyState==4 && xmlhttpd.status==200)

	 {



		 if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

			 exec1=new XMLHttpRequest();

		 }else {// code for IE6, IE5

			 exec1=new ActiveXObject("Microsoft.XMLHTTP");

		 }

		 exec1.onreadystatechange=function()

		 {

			 if (exec1.readyState==4 && exec1.status==200)

			 {


			 document.getElementById(nmdiv1).value = exec1.responseText;

			 //showResultd(pag1,nmdiv1);

			 //showResultb(pag2,nmdiv2);

			 }

		 }


		 exec1.open("GET",pag1,true);

		 exec1.send();


		 if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

			 exec2=new XMLHttpRequest();

		 }else {// code for IE6, IE5

			 exec2=new ActiveXObject("Microsoft.XMLHTTP");

		 }

		 exec2.onreadystatechange=function()

		 {

			 if (exec2.readyState==4 && exec2.status==200)

			 {


			 document.getElementById(nmdiv2).value = exec2.responseText;

			 }

		 }


		 exec2.open("GET",pag2,true);

		 exec2.send();


	 //document.getElementById(nmdiv).value = xmlhttp.responseText;

	 //showResultd(pag1,nmdiv1);

	 //showResultb(pag2,nmdiv2);

	 }

}


xmlhttpd.open("GET",pag,true);

xmlhttpd.send();

}

function inserir(pag,pag3,nmdiv3,pag4,nmdiv4) {



if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

	 xmlhttpu=new XMLHttpRequest();

}

else {// code for IE6, IE5

	 xmlhttpu=new ActiveXObject("Microsoft.XMLHTTP");

}


xmlhttpu.onreadystatechange=function()

{

	 if (xmlhttpu.readyState==4 && xmlhttpu.status==200)

	 {

	 if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

			 exec3=new XMLHttpRequest();

		 }else {// code for IE6, IE5

			 exec3=new ActiveXObject("Microsoft.XMLHTTP");

		 }

		 exec3.onreadystatechange=function()

		 {

			 if (exec3.readyState==4 && exec3.status==200)

			 {


			 document.getElementById(nmdiv3).value = exec3.responseText;

			 //showResultd(pag1,nmdiv1);

			 //showResultb(pag2,nmdiv2);

			 }

		 }


		 exec3.open("GET",pag3,true);

		 exec3.send();


		 if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

			 exec4=new XMLHttpRequest();

		 }else {// code for IE6, IE5

			 exec4=new ActiveXObject("Microsoft.XMLHTTP");

		 }

		 exec4.onreadystatechange=function()

		 {

			 if (exec4.readyState==4 && exec4.status==200)

			 {


			 document.getElementById(nmdiv4).value = exec4.responseText;

			 }

		 }


		 exec4.open("GET",pag4,true);

		 exec4.send();


	 //document.getElementById(nmdiv).value = xmlhttp.responseText;

	 //showResultd(pag1,nmdiv1);

	 //showResultb(pag2,nmdiv2);

	 }

}


xmlhttpu.open("GET",pag,true);

xmlhttpu.send();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitante
Responder

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...

×
×
  • Criar Novo...