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"> </TD>
<TD class="celdas_pedidos"><%= subtotal_pantalla %> €</TD>
<TD class="celdas_pedidos"><a href="tienda.asp?ac=sacar&prod=<%=clave%>&cant=<%=carrito(clave)%>"><img src="../images/papelera.gif" alt="Eliminar Artí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"> </td>
<td width="177"> </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
%> €</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))
%>
€</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
%>
€</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
%>
€</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