def finalizar_pagamento(request):
    if verificar_estoque_produtos(request) > 0:
        return HttpResponseRedirect(reverse('carrinho:estoque_indisponivel'))
    if not request.session.get('endereco',False):
        return HttpResponseRedirect(reverse('carrinho:finalizar_pagamento_escolher_endereco'))       
    opcao_pagamento = request.POST.get('opcao-pagamento',None)
    if not opcao_pagamento:         
        return retornar_escolha_pagamento(request,u"Ocorreu algum problema no pagamento. Por favor tente realizar o pagamento novamente.")    
    carrinho = Carrinho(request)    
    endereco = get_object_or_404(Endereco, id=request.session['endereco'])
    frete_valor, frete_tipo, frete_tipo_nome = request.session['frete'].split("/")    
    valor_compra = Decimal(frete_valor)  + carrinho.preco_total()            
    valor_compra = str(valor_compra).replace(",",".") 
        
    if opcao_pagamento == "cielo":
                    
        bandeira = request.POST['bandeira']
        prestacoes = int(request.POST['prestacoes'])                        
        pedido,created = Pedido.objects.get_or_create(cliente=Cliente.objects.get(user=request.user),carrinho=carrinho,endereco=endereco,tipo_frete=frete_tipo,frete=frete_valor,tipo_pagamento=opcao_pagamento,para_presente=para_presente,presente_de=presente_de,presente_para=presente_para)        
        if created:
            atualizar_estoque(pedido)
        payment = PaymentAttempt()            
        if prestacoes > 1:
            transaction = 2
        else:
            transaction = 1 
        try:                
            return redirect(payment.transaction(total=Decimal(valor_compra),card_type=bandeira,order=pedido,installments=prestacoes,transaction=transaction,url_retorno="http://www.miniature.com.br/carrinho/compra-finalizada/cielo/?p=%s" % pedido.numero))
        except:
            messages.error(request,"Ocorreu algum problema na tentativa de pagamento com cartão de crédito através da Cielo. Por favor tente realizar o pagamento novamente.")
            return render_to_response('carrinho/finalizar_pagamento_escolher_forma_pagamento.html', {  
                'valor_compra':valor_compra.replace(".",','),
            },context_instance=RequestContext(request))
def finalizar_pagamento_escolher_forma_pagamento(request): 
    if verificar_estoque_produtos(request) > 0:
        return HttpResponseRedirect(reverse('carrinho:estoque_indisponivel'))
    if not request.session.get('endereco',False):
        return HttpResponseRedirect(reverse('carrinho:finalizar_pagamento_escolher_endereco'))    
    frete_valor,frete_tipo,frete_tipo_nome = request.POST.get('tipo-frete',None).split("/")  
    request.session['frete'] = request.POST.get('tipo-frete',None)
    carrinho = Carrinho(request) 
    valor_compra = Decimal(frete_valor) + carrinho.preco_total()
    return render_to_response('carrinho/finalizar_pagamento_escolher_forma_pagamento.html', {  
        'valor_compra':valor_compra,
    },context_instance=RequestContext(request))
def verificar_estoque_produtos(request):    
    carrinho = Carrinho(request)
    for item in carrinho:
        quantidade_estoque = item.produto.tamanhos.get(sigla=item.tamanho).quantidade_estoque
        quantidade_carrinho = item.quantidade        
        if quantidade_carrinho > quantidade_estoque:
            messages.error(request, u'O produto "%s" não possui %s unidade(s) em estoque. Possui %s unidade(s).' % (item.produto.nome,quantidade_carrinho,quantidade_estoque))    
            if quantidade_estoque == 0:
                carrinho.remove(item.produto,item.tamanho)
            else:
                carrinho.update(item.produto,item.tamanho,quantidade_estoque)
    return len(messages.get_messages(request)._queued_messages)
示例#4
0
def finalizar_pagamento_escolher_forma_pagamento(request):
    if verificar_estoque_produtos(request) > 0:
        return HttpResponseRedirect(reverse('carrinho:estoque_indisponivel'))
    if not request.session.get('endereco', False):
        return HttpResponseRedirect(
            reverse('carrinho:finalizar_pagamento_escolher_endereco'))
    frete_valor, frete_tipo, frete_tipo_nome = request.POST.get(
        'tipo-frete', None).split("/")
    request.session['frete'] = request.POST.get('tipo-frete', None)
    carrinho = Carrinho(request)
    valor_compra = Decimal(frete_valor) + carrinho.preco_total()
    return render_to_response(
        'carrinho/finalizar_pagamento_escolher_forma_pagamento.html', {
            'valor_compra': valor_compra,
        },
        context_instance=RequestContext(request))
示例#5
0
def verificar_estoque_produtos(request):
    carrinho = Carrinho(request)
    for item in carrinho:
        quantidade_estoque = item.produto.tamanhos.get(
            sigla=item.tamanho).quantidade_estoque
        quantidade_carrinho = item.quantidade
        if quantidade_carrinho > quantidade_estoque:
            messages.error(
                request,
                u'O produto "%s" não possui %s unidade(s) em estoque. Possui %s unidade(s).'
                % (item.produto.nome, quantidade_carrinho, quantidade_estoque))
            if quantidade_estoque == 0:
                carrinho.remove(item.produto, item.tamanho)
            else:
                carrinho.update(item.produto, item.tamanho, quantidade_estoque)
    return len(messages.get_messages(request)._queued_messages)
示例#6
0
def atualizar_carrinho(request, produto_id, tamanho, quantidade):
    redirect_to = request.GET.get('next', request.META.get('HTTP_REFERER', ''))
    produto = get_object_or_404(Produto, id=produto_id)
    carrinho = Carrinho(request)
    carrinho.update(produto, tamanho, quantidade)
    return HttpResponseRedirect(redirect_to)
示例#7
0
def remover_item(request, produto_id, tamanho):
    produto = Produto.objects.get(id=produto_id)
    carrinho = Carrinho(request)
    carrinho.remove(produto, tamanho)
    return HttpResponseRedirect(reverse('carrinho:exibir'))
示例#8
0
def adicionar_item(request, produto_id, quantidade, tamanho):
    produto = get_object_or_404(Produto, id=produto_id)
    carrinho = Carrinho(request)
    carrinho.add(produto, tamanho, quantidade)
    return direct_to_template(
        request, template='carrinho/confirmacao_item_adicionado.html')
示例#9
0
def finalizar_pagamento(request):
    if verificar_estoque_produtos(request) > 0:
        return HttpResponseRedirect(reverse('carrinho:estoque_indisponivel'))
    if not request.session.get('endereco', False):
        return HttpResponseRedirect(
            reverse('carrinho:finalizar_pagamento_escolher_endereco'))
    opcao_pagamento = request.POST.get('opcao-pagamento', None)
    if not opcao_pagamento:
        return retornar_escolha_pagamento(
            request,
            u"Ocorreu algum problema no pagamento. Por favor tente realizar o pagamento novamente."
        )
    carrinho = Carrinho(request)
    endereco = get_object_or_404(Endereco, id=request.session['endereco'])
    frete_valor, frete_tipo, frete_tipo_nome = request.session['frete'].split(
        "/")
    valor_compra = Decimal(frete_valor) + carrinho.preco_total()
    valor_compra = str(valor_compra).replace(",", ".")

    if opcao_pagamento == "cielo":

        bandeira = request.POST['bandeira']
        prestacoes = int(request.POST['prestacoes'])
        pedido, created = Pedido.objects.get_or_create(
            cliente=Cliente.objects.get(user=request.user),
            carrinho=carrinho,
            endereco=endereco,
            tipo_frete=frete_tipo,
            frete=frete_valor,
            tipo_pagamento=opcao_pagamento,
            para_presente=para_presente,
            presente_de=presente_de,
            presente_para=presente_para)
        if created:
            atualizar_estoque(pedido)
        payment = PaymentAttempt()
        if prestacoes > 1:
            transaction = 2
        else:
            transaction = 1
        try:
            return redirect(
                payment.transaction(
                    total=Decimal(valor_compra),
                    card_type=bandeira,
                    order=pedido,
                    installments=prestacoes,
                    transaction=transaction,
                    url_retorno=
                    "http://www.miniature.com.br/carrinho/compra-finalizada/cielo/?p=%s"
                    % pedido.numero))
        except:
            messages.error(
                request,
                "Ocorreu algum problema na tentativa de pagamento com cartão de crédito através da Cielo. Por favor tente realizar o pagamento novamente."
            )
            return render_to_response(
                'carrinho/finalizar_pagamento_escolher_forma_pagamento.html', {
                    'valor_compra': valor_compra.replace(".", ','),
                },
                context_instance=RequestContext(request))
def carrinho(request):    
    carrinho = Carrinho(request)          
    return {
        'carrinho_qtd_itens': carrinho.quantidade(),
        'carrinho':carrinho,
    }
示例#11
0
def atualizar_carrinho(request, produto_id, tamanho, quantidade):
    redirect_to = request.GET.get('next', request.META.get('HTTP_REFERER', '') ) 
    produto = get_object_or_404(Produto,id=produto_id)
    carrinho = Carrinho(request)
    carrinho.update(produto, tamanho, quantidade)
    return HttpResponseRedirect(redirect_to)   
示例#12
0
def remover_item(request, produto_id, tamanho):
    produto = Produto.objects.get(id=produto_id)
    carrinho = Carrinho(request)
    carrinho.remove(produto, tamanho)
    return HttpResponseRedirect(reverse('carrinho:exibir'))
示例#13
0
def adicionar_item(request, produto_id, quantidade, tamanho): 
    produto = get_object_or_404(Produto,id=produto_id)
    carrinho = Carrinho(request)
    carrinho.add(produto, tamanho, quantidade)    
    return direct_to_template(request,template='carrinho/confirmacao_item_adicionado.html')