Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/09/2009, 05:14
Avatar de Laika
Laika
 
Fecha de Ingreso: octubre-2001
Mensajes: 1.376
Antigüedad: 23 años, 6 meses
Puntos: 0
Ayuda con codigo carrito de la compra en ASP

HOla,

He configurado un carrito de la compra en ASP y tengo un problena que no puedo resolver. El carrito funciona bien pero ahora le he añadido un campo que es Personzalizacion. Esta variable se recoge de un formulario de pedido.

Si es que si se le suma 90 € al articulo y sino es 0 ese importe adicional.

Me lo hace bien por ejemplo cuando compro un articulo pero si añado otro al carrito sin ese plus, me pone a 0 también el que ya tenia en el carrito con 90.

Lo mismo me pasa si tengo en el carrito 2 productos con el plus de 90 y borro un articulo del carrito, al que queda le pone el plus a 0 (pierde su valor de 90).

Este es el codigo a ver si alguien puede ayudarme

Gracias

Código:
<%@LANGUAGE="VBSCRIPT"%>
<%Option Explicit%>
<%Response.Buffer=True%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format"><!-- InstanceBegin template="/Templates/paginas.dwt" codeOutsideHTMLIsLocked="false" -->

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>

<body class="naranja">
 
    <center>
      <div id="cabecera"><a href="../index.aspx"><img src="../images/encabezado.jpg" width="995" height="95" border="0"/></a></div>      
      
      <div id="cuerpo">
        
        <div class="cierrefotohome"></div>
        <div class="principal">
		 <!-- InstanceBeginEditable name="titulo" -->         
         <h1>Resumen del Pedido</h1>
		 <!-- InstanceEndEditable -->

<!-- InstanceBeginEditable name="contenido" -->
<br /><br />

<%

Dim unidades,personalizado,precio,iva,iva_pantalla,descuento,descuento_pantalla,tacos,subtotal_pantalla,sacar,paginadestino

unidades=0
personalizado=0
'Recojo los valores del formulario:
unidades=CInt(Request.Form("unidades"))
personalizado=Request.Form("personalizado")

if unidades = 0 then ' Para que si se viene a la pagina sin comprar (ej. finalizar pedido), no entre en error.aspx si compra menos de 50 €
	unidades = 50
	precio= 1
End If

If personalizado = 1 then
	personalizado= 90 'Plus que se suma a cada producto que vaya personzalido
else
	personalizado= 0
End If
'____________________________________________________--

Sub MostrarCarrito
' Muestra el contenido del carrito de la compra
' carrito es la variable global que referencia al carrito

Dim oRs,Ors2, SQL,SQL2
Dim clave
Dim total, subtotal

total=0
subtotal=0
descuento=0.10
iva=0.16

' Conexión sin DSN a la base de datos
' Debería haber sacado estas líneas a un sub y llamarlo, pero en fin :(

set oRs=Server.CreateObject("ADODB.Recordset")
set oRs2=Server.CreateObject("ADODB.Recordset")

'Dibujo la tabla

%>
	<TABLE width="695" BORDER="0" align="center" CELLPADDING="0" CELLSPACING="0" class="tabla_pedidos">
	<TR class="filas_tabla_pedidos">
	<TD width="212" height="27" class="tit_filas_tabla_pedidos">ARTICULO</TD>
	<TD width="74" class="tit_filas_tabla_pedidos">CANTIDAD</TD>
	<TD width="121" class="tit_filas_tabla_pedidos">PRECIO / UNIDAD</TD>
	<TD width="127" class="tit_filas_tabla_pedidos">+ PERSONALIZAR</TD>
	<TD width="84" class="tit_filas_tabla_pedidos">TOTAL</TD>
	<TD width="76" class="tit_filas_tabla_pedidos">ELIMINAR</TD>	
	</TR>

<%
For Each clave in carrito
subtotal=0		' Total de cada artículo en el carrito
	'Pinto la línea de este producto
SQL="SELECT * FROM Productos WHERE id_producto="&clave&";"
set oRs=oConn.Execute(SQL)

SQL2="SELECT * FROM precios WHERE id_producto="&clave&";"
set oRs2=oConn.Execute(SQL2)

'---------------------
'CALCULO DE PRECIOS

Dim precio1,precio2,precio3
precio1=oRs2("precio1")
precio2=oRs2("precio2")
precio3=oRs2("precio3")

If request.QueryString("prod") <> 5 then
	If unidades <= 200 then
	precio=precio1
		If (precio * unidades) < 50 then
			call SacarArticulo (clave, unidades)
			paginadestino="error.aspx?id_producto="&clave
			response.Redirect(paginadestino)
		End if
		
	elseif unidades >200 AND unidades <= 500 then
	precio=precio2
		If (precio * unidades) < 50 then
			call SacarArticulo (clave, unidades)
			paginadestino="error.aspx?id_producto="&clave
			response.Redirect(paginadestino)
		End if
		
	elseif unidades > 500 then
	precio=precio3
		If (precio * unidades) < 50 then
			call SacarArticulo (clave, unidades)
			paginadestino="error.aspx?id_producto="&clave
			response.Redirect(paginadestino)
		End if
		
	End if
elseif Request.QueryString("prod") = 5 then 'âra los tacos de notas
	Dim tacos			
	tacos=request.Form("tacos")
	If tacos = 200 then
		precio=precio1
	elseif tacos = 300 then
		precio=precio2
	End if		

End If

'--------------------------------------------------------------------

' Multiplico el precio por la cantidad. FormatNumber me asegura que es un nº válido
' y convierto todo a tipo Single con CSng.

subtotal=CSng(FormatNumber(carrito(clave))*precio)
subtotal_pantalla=Formatnumber(subtotal,2)
total=total+subtotal
%>

	<TR class="filas_tabla_pedidos">

	<TD height="32" class="celdas_pedidos"><%=oRs.Fields("Nombre")%></TD>
	<TD class="celdas_pedidos"><%=carrito(clave)%></TD>
	<TD class="celdas_pedidos"><%=precio%></TD>
	<TD class="celdas_pedidos">&nbsp;</TD>
	<TD class="celdas_pedidos"><%= subtotal_pantalla %> &euro;</TD>

	<TD class="celdas_pedidos"><a href="tienda.asp?ac=sacar&amp;prod=<%=clave%>&amp;cant=<%=carrito(clave)%>"><img src="../images/papelera.gif" alt="Eliminar Art&iacute;culo" width="20" height="25" border="0" /></a></TD>
	</TR>
<%
Next

if carrito.Count > 0 then
   oRs.Close
   set oRs=nothing
end if

'Pinto el final de la tabla

%>	
	</TABLE> <br />
	<table width="640" border="0" align="center" cellpadding="0" cellspacing="0">
	  <tr>
	    <td width="213">&nbsp;</td>
	    <td width="177">&nbsp;</td>
	    <td width="250">
        
        <table width="250" border="0" align="center" cellpadding="0" cellspacing="0" class="tabla_pedidos">
	      <tr class="filas_tabla_pedidos">
	        <td height="25" colspan="4" align="right" class="tit_filas_tabla_pedidos">DESCUENTO (-10 %)</td>
	        <td width="106" class="celdas_pedidos" ><%
	if total=0 then 
		Response.Write("0") 	' Sin compra no hay descuento
	else
		descuento=total*descuento
		descuento_pantalla=Formatnumber(descuento,2)
		Response.Write(descuento_pantalla)
		'Actualizazo TOTAl
		total=total-descuento
	end if
	%>	          &euro;</td>
	        </tr>
	      <tr class="filas_tabla_pedidos">
	        <td height="25" colspan="4" align="right" class="tit_filas_tabla_pedidos">SUBTOTAL</td>
	        <td class="celdas_pedidos"><%		
		Response.Write(formatnumber(total,2))
	%>
	          &euro;</td>
	        </tr>
	      <tr class="filas_tabla_pedidos">
	        <td height="25" colspan="4" align="right" class="tit_filas_tabla_pedidos">IVA (16 %)</td>
	        <td class="celdas_pedidos"><%
	if total=0 then 
		Response.Write("0")
	else
		iva=(iva * total)
		iva_pantalla=Formatnumber(iva,2)
		response.Write(iva_pantalla)
		'Actualizazo TOTAl
		total=total+iva	
	end if	
	%>
	          &euro;</td>
	        </tr>
	      <tr class="filas_tabla_pedidos">
	        <td height="25" colspan="4" align="right" class="tit_filas_tabla_pedidos"><b>TOTAL FINAL:</b></td>
	        <td class="celdas_pedidos"><%if total=0 then
		Response.Write("0")
	else
		total=total
		Response.Write(Formatnumber(total,2))
	end if
	%>
	          &euro;</td>
	        </tr>
        </table></td>
      </tr>
    </table>
	<p>
      <%
' Pinto los enlaces
' si no he llamado desde PasarPorCaja
if accion<>"fin" then
%>
    </p><br />
    <center>
      <A HREF=calendarios-personalizados.aspx class="enlace">Seguir comprando</A> <span class="enlace">/</span> <A HREF=tienda.asp?ac=fin class="enlace">Confirmar Pedido</A>
    </center>
<%
end if
End Sub
'--------------------------------------------------------------------------------------------------------------------------------

Sub MeterArticulo (id)
' Añade el producto id al carrito de la compra
' En un caso real se deberían poder añadir más de una unidad
' bien desde el catálogo, bien editando en el carrito

' Si ya tengo el artículo en el carrito sumo 1 a la cantidad
if carrito.Exists(id) then
   carrito(id)=carrito(id)+ unidades 'PERSONALIZADO
else
' Si no lo añado
   carrito.Add id, unidades 'PERSONALIZADO
end if
'Response.Write("Se ha añadido el artículo al carrito<br>")
End Sub

Sub SacarArticulo (id, cantidad)
' Saca un numero "cantidad" de articulos "id" del carrito
if not carrito.Exists(id) then
   'Response.Write("¡No tienes eso en tu carrito!")
else
    if cantidad>1 then
    'Quito todos así que quito ese articulo del carrito
       carrito.Remove(id)
    else
    'Quito uno
       carrito(id)=carrito(id)-1
       if carrito(id)<1 then
          carrito.Remove(id)
       end if
    end if
end if

End Sub