I am doing a card payment process. When making the confirmation of the transaction I want to be able to delete the POST data so that I can not make a new transaction when reloading the page.
My code is this:
def comprar(request,producto,stock):
if request.POST:
producto = get_object_or_404(Producto, slug = producto)
foto = Foto.objects.filter(producto = producto)
perfil = Perfil.objects.get(usuario = request.user)
comision = Comision.objects.get(id = 1)
stock = Stock.objects.get(producto = producto, id = stock)
promocion = Promocion.objects.get(id = 1)
form = PayerForm(request.POST)
if form.is_valid():
if promocion.activo:
promo = promocion
gastos_envio = promocion.precio_oferta
total = producto.p_venta + gastos_envio
else:
gastos_envio = comision.gastos_envio
total = producto.p_venta + gastos_envio
tarjeta_data = form.clean()
if tarjeta_data['guardar']:
guardar_tarjeta(tarjeta_data, perfil)
comision = Comision.objects.get()
if producto.perfil.boutique:
p_comision = comision.comision_boutique
else:
p_comision = comision.comision
cal_comision = round(((p_comision * producto.p_venta) / 100),2)
cal_iva = round(((comision.impuesto * cal_comision) / 100),2)
pedido = Pedido(p_prod = producto.p_venta,
p_envio = gastos_envio,
cp_nom_producto = producto.nombre,
cp_estado = producto.estado_prod,
cp_talla = stock.talla.valor,
cp_marca = producto.marca.nombre,
cp_nombre_completo = producto.perfil.usuario.first_name + producto.perfil.usuario.last_name,
cp_direccion = perfil.entrg_direccion,
cp_ciudad = perfil.entrg_ciudad.name,
cp_dep = perfil.entrg_dep.name,
cp_pais = perfil.entrg_pais.name,
cp_telefono = perfil.tel,
perfil = perfil,
producto = producto,
cp_email = perfil.usuario.email,
cp_comision = cal_comision,
cp_impuesto = cal_iva,
cp_total = total,
nit_o_cedula = producto.perfil.cedula_o_nit)
pedido.estado_pago = 3
pedido.save()
resultado = realizar_compra(pedido,perfil,tarjeta_data,request)
return confirmacion_pago(request,perfil,pedido,resultado)
return redirect('proceso-compra',slug=producto.slug)
and this is the function to which I send it in case the process has been successfully completed:
def confirmacion_pago(request,perfil,pedido,resultado):
perfil = Perfil.objects.get(usuario = request.user)
producto = pedido.producto
foto = Foto.objects.filter(producto = producto)
comision = Comision.objects.get(id = 1)
if pedido.estado_pago == 3:
if resultado['code'] == 'SUCCESS':
pedido.id_transaccion = resultado['transactionId']
pedido.estado_pago = 2
tallas = Stock.objects.filter(producto = producto)
stock = tallas.get(talla__valor = pedido.cp_talla)
stock.cantidad = stock.cantidad - 1
stock.save()
is_vendido = True
for t in tallas:
if t.cantidad != 0:
is_vendido = False
if is_vendido == True:
producto.estado_rev = 5
producto.save()
if perfil.boutique == False:
transferencia = comision.gastos_transferencia
else:
transferencia = comision.gastos_transferencia_boutique
if producto.perfil.boutique == False:
transferencia = comision.gastos_transferencia
else:
transferencia = comision.gastos_transferencia_boutique
cal_comision = round(((p_comision * producto.p_venta) / 100),2)
cal_iva = round(((comision.impuesto * cal_comision) / 100),2)
total = round(producto.p_venta - cal_comision - cal_iva,2)
Transaccion.objects.create(pedido=pedido,
perfil=pedido.producto.perfil,
concepto=1,
cantidad=total + transferencia - pedido.p_envio,
comision=cal_comision,
iva=cal_iva,
gastos_gestion=0,
gasto_transferencia=transferencia)
html = render_to_string('intranet/emails/compra.html',{'pedido':pedido,'foto':foto[0].path,'domain': 'www.chikka.com.co'})
msg = EmailMessage('Te han hecho una compra', html, settings.EMAIL_HOST_USER, to=[producto.perfil.usuario.email])
msg.content_subtype = 'html'
msg.send(fail_silently=False)
conexion = SoapConexion()
nombre_contacto = pedido.perfil.usuario.first_name + ' ' + pedido.perfil.usuario.last_name
nombre_remitente = pedido.producto.perfil.usuario.first_name + ' ' + pedido.producto.perfil.usuario.last_name
pedido.save()
request.POST = {}
return render(request, 'intranet/confirmacion_comprar.html',{'resultado':resultado,'perfil':perfil,'producto':producto,'foto':foto[0],
'gastos_envio':comision.gastos_envio,'total':pedido.cp_total,'form':PayerForm(),'pedido':pedido})