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