예제 #1
0
def finalizar_compra(request, pagamento, observacao=""):
    loja = request.session['loja'].nome_curto
    cidade = request.session['cidade']
    usuario = get_usuario(request)
    if usuario is None:
        return HttpResponseRedirect("/")
    try:
        carrinho = Carrinho.objects.get(comprador=usuario,
                                        loja=Loja.objects.get(nome_curto=loja,
                                                              endereco__cidade=cidade))
    except Carrinho.DoesNotExist:
        return redireciona_usuario(request)
    pedido = Pedido(comprador=usuario,
                    loja=request.session['loja'],
                    data_criacao=datetime.datetime.now(),
                    status="ABERTO",
                    total_pago=carrinho.total_pago,
                    pagamento=pagamentos[pagamento],
                    observacao=observacao)
    pedido.save()
    for produto_carrinho in carrinho.produtos_carrinho.all():
        produto = ProdutosPedido(pedido=pedido,
                                 produto=produto_carrinho.produto,
                                 quantidade=produto_carrinho.quantidade,
                                 valor=produto_carrinho.valor)
        produto.save()
    utils.enviar_pedido_loja(pedido, Loja.objects.get(nome_curto=loja,
                                                      endereco__cidade=cidade))
    carrinho.delete()
    return HttpResponseRedirect("/painel/historico/")
예제 #2
0
 def new(self, request, loja_id):
     carrinho = Pedido(data_criacao=datetime.datetime.now(),
                       loja = Loja.objects.get(id=loja_id), status = "ABERTO")
     carrinho.save()
     request.session[ID_CARRINHO] = carrinho.id
     print "Criado novo carrinho de id "+ str(carrinho.id)
     return carrinho
예제 #3
0
def excluir_pedido(chave):
  pedido = Pedido.get(chave)
  if request.method == 'POST':
    pedido = Pedido.get(chave)
    pedido.producao.delete()
    pedido.entrega.delete()
    pedido.delete()
    flash('Pedido excluido com sucesso!')
    return redirect(url_for('listar_pedidos'))
  return render_template('excluir_pedido.html', pedido=pedido)
예제 #4
0
def excluir_pedido(chave):
    pedido = Pedido.get(chave)
    if request.method == 'POST':
        pedido = Pedido.get(chave)
        pedido.producao.delete()
        pedido.entrega.delete()
        pedido.delete()
        flash('Pedido excluido com sucesso!')
        return redirect(url_for('listar_pedidos'))
    return render_template('excluir_pedido.html', pedido=pedido)
예제 #5
0
    def post():
        json_data = request.get_json(force=True)
        if not json_data:
            return {'message': 'No input data provided'}, 400
        json_data['cliente'] = cliente_schema.dump(
            Cliente.query.get(json_data['cliente']['id'])).data

        if not json_data['itens_pedido']:
            return {'status': 'erro', 'message': 'Lista de itens vazia'}, 400

        for item in json_data['itens_pedido']:
            produto = produto_schema.dump(Produto.query.get(item['id'])).data
            if not validate_multiplo(produto['multiplo'], item['quantidade']):
                return {'status': 'erro na quantidade',
                        'message': 'O item \'{}\' precisa ser solicitado em '
                                   'múltiplos de {}'.format(produto['nome'], produto['multiplo'])}
            item['produto'] = produto
            item['rentabilidade'] = get_rentabilidade(produto['preco_unitario'], item['preco_unitario'])
        data, errors = pedido_schema.load(json_data)
        if errors:
            return errors, 422
        pedido = Pedido(cliente_id=data['cliente']['id'])
        db.session.add(pedido)
        db.session.commit()

        for received_item in json_data['itens_pedido']:
            item = ItensPedido(received_item['produto']['id'], received_item['preco_unitario'],
                               received_item['quantidade'], received_item['rentabilidade'], pedido.id)

            db.session.add(item)
            db.session.commit()

        result = pedido_schema.dump(pedido).data

        return {"status": 'success', 'data': result}, 201
예제 #6
0
def editar_pedido(chave):
  pedido = Pedido.get(chave)
  form = PedidoForm(request.form, pedido)
  if request.method == 'PUT' and form.validate():
    form.populate_obj(pedido)
    pedido.producao.put()
    pedido.entrega.put()
    pedido.put()
    flash('Pedido alterado com sucesso!')
    return redirect(url_for('listar_pedidos'))
  return render_template('editar_pedido.html', chave=chave, form=form)
예제 #7
0
def editar_pedido(chave):
    pedido = Pedido.get(chave)
    form = PedidoForm(request.form, pedido)
    if request.method == 'PUT' and form.validate():
        form.populate_obj(pedido)
        pedido.producao.put()
        pedido.entrega.put()
        pedido.put()
        flash('Pedido alterado com sucesso!')
        return redirect(url_for('listar_pedidos'))
    return render_template('editar_pedido.html', chave=chave, form=form)
예제 #8
0
def pedidos_post():

    #Obtencion de id dede el token!!!!!
    user_email =  get_jwt_identity()
    user = User.query.filter_by(email = user_email).first()

    if user:
        info_pedidos = Info_Pedidos()
        info_pedidos.id_mesa = request.json.get('id_mesa')
        info_pedidos.id_user = user.id

        db.session.add(info_pedidos)
        db.session.commit()

        pedidos = request.json.get('productos')
        for p in pedidos:
            pedido = Pedido()
            pedido.id_info_pedidos = info_pedidos.id
            pedido.id_item = p['id_producto']
            pedido.cantidad = p['cantidad']
            db.session.add(pedido)
            db.session.commit()

        info_resumen = Info_Pedidos.query.get(info_pedidos.id)
        pedidos = Pedido.query.filter_by(id_info_pedidos = info_resumen.id).all()
        info_total = {}
        info_total["info_pedido"] = info_resumen.serialize()
        info_total["pedidos"] = [pedido.serialize() for pedido in pedidos]
        info_total["total"] = 0 if len(pedidos) == 0 else sum(float(pedido.cantidad) * float(pedido.item.precio)  for pedido in pedidos)
        return jsonify(info_total), 201
    
    return "Usuario no encontrado", 404
예제 #9
0
def envio_pedido():
    if request.method == 'POST':
        pedido_actual = Pedido(fecha=datetime.datetime.now(),
                               cobrado=False,
                               observacion=request.form['observacion'],
                               dni_mozo=session['dni'],
                               mesa=request.form['mesa'])
        db.session.add(pedido_actual)
        db.session.commit()

        t = 0
        for i in session['items']:
            prod = Producto.query.filter_by(nombre=i).first()
            item_ = Item(num_pedido=pedido_actual.num_pedido,
                         num_producto=prod.num_producto,
                         precio=prod.precio_unitario,
                         estado="Pendiente")
            db.session.add(item_)
            t += item_.precio
        pedido_actual.total = t
        db.session.commit()
        return render_template('envio_pedido.html')
예제 #10
0
def pedido():
    pedidoform = PedidoForm()

    if pedidoform.validate_on_submit():
        #salvar o pedido em formato de texto
        loja_atual = Loja.query.filter_by(
            id=current_user.id_loja).first_or_404()
        text = "Loja: %s, pedido de %s, %s unidades" % (
            loja_atual.store_name, pedidoform.product_name, pedidoform.units)
        new_pedido = Pedido(date=datetime.utcnow(), request=text, situation=0)
        db.session.add(new_pedido)
        db.commit()
        flash("Novo pedido registrado")
        return redirect(url_for('index'))
    return render_template('pedido.html', form=pedidoform)
예제 #11
0
def novo_pedido():
    form = PedidoForm(request.form)
    if request.method == 'POST' and form.validate():
        Pedido(parent=pedido_key(),
               cliente=form.cliente.data,
               descricao=form.descricao.data,
               valor=form.valor.data,
               data_entrega=form.data_entrega.data,
               pago=form.pago.data,
               producao=Producao(parent=pedido_key(),
                                 arte_pronta=form.producao.arte_pronta.data,
                                 impresso=form.producao.impresso.data,
                                 montado=form.producao.montado.data).put(),
               entrega=Entrega(
                   parent=pedido_key(),
                   enviado=form.entrega.enviado.data,
                   recebido=form.entrega.recebido.data).put()).put()
        flash('Pedido criado com sucesso!')
        return redirect(url_for('listar_pedidos'))
    return render_template('novo_pedido.html', form=form)
예제 #12
0
def listar_pedidos():
  pedidos_query = Pedido.all().ancestor(pedido_key()).order('data_entrega')
  pedidos = pedidos_query.run()
  return render_template('listar_pedidos.html', pedidos=pedidos)
예제 #13
0
def detalhar_pedido(chave):
    pedido = Pedido.get(chave)
    return render_template('detalhar_pedido.html', pedido=pedido)
예제 #14
0
def listar_pedidos():
    pedidos_query = Pedido.all().ancestor(pedido_key()).order('data_entrega')
    pedidos = pedidos_query.run()
    return render_template('listar_pedidos.html', pedidos=pedidos)
예제 #15
0
def detalhar_pedido(chave):
  pedido = Pedido.get(chave)
  return render_template('detalhar_pedido.html', pedido=pedido)
예제 #16
0
파일: app.py 프로젝트: fKStlorz/phyton1
def Registrar_pedido():
    if 'DNI' in session:
        usuario_actual = Usuario.query.filter_by(
            DNI=session.get('DNI')).first()
        if usuario_actual.Tipo == "Cocinero":
            return redirect(url_for('Marcar_items'))
        if request.method == 'POST':
            valores = list(dict(request.form).keys())
            pedido = None
            if 'NumPedido' in valores:
                pedido = Pedido.query.filter_by(
                    NumPedido=request.form['NumPedido']).first()
            if 'Mesa' in valores:
                try:
                    numeromesa = int(request.form['Mesa'])
                except:
                    return render_template('Numero_mesa.html',
                                           error='Solo se aceptan números.')
                else:
                    pedido = Pedido(Fecha=datetime.now(),
                                    Total=0.0,
                                    Cobrado=False,
                                    Observacion='',
                                    DNIMozo=session.get('DNI'),
                                    Mesa=numeromesa)
                    db.session.add(pedido)
                    db.session.commit()
                    return render_template('Registrar_pedido.html',
                                           carta=Producto.query.all(),
                                           Pedido=pedido)
            elif 'Finalizar' in valores:
                items = list(pedido.Item)
                if len(items) == 0:
                    return render_template(
                        'Registrar_pedido.html',
                        carta=Producto.query.all(),
                        Pedido=pedido,
                        error=
                        "No hay items en el pedido, no se puede finalizar aún."
                    )
                else:
                    return render_template('Observaciones.html', Pedido=pedido)
            elif 'FinalizarPedido' in valores:
                pedido.Observacion = request.form['Observaciones']
                db.session.add(pedido)
                db.session.commit()
                return redirect(url_for('Menu_Mozo'))
            else:
                numprod = valores[1]
                prod = Producto.query.filter_by(NumProducto=numprod).first()
                item = Item(NumPedido=pedido.NumPedido,
                            NumProducto=prod.NumProducto,
                            Precio=prod.PrecioUnitario,
                            Estado='Pendiente')
                db.session.add(item)
                db.session.commit()
            return render_template('Registrar_pedido.html',
                                   carta=Producto.query.all(),
                                   Pedido=pedido)
        return render_template('Numero_mesa.html')
    return render_template('Error.html', error='No se inicio sesión.')
예제 #17
0
def cria_pedido(request):
    redirect_url = '/pizzer/'
    user = request.user
    if user.groups.all():
        grupo = user.groups.all()[0].name
        if grupo == 'cliente':
            cliente = user.cliente_set.all()[0]
            pizzas = Pizza.objects.filter(Q(personalizada=False) | Q(inventor=cliente))
        else:
            redirect_url = '/pizzer/pedidos/'
            pizzas = Pizza.objects.filter(Q(personalizada=False) | Q(inventor__nome='Personalizadas'))
    elif user.is_authenticated():
        grupo = 'admin'
        pizzas = Pizza.objects.filter(personalizada=False)
    else:
        grupo = u'anônimo'
        pizzas = Pizza.objects.filter(personalizada=False)
    bebidas = Bebida.objects.all()
    if request.method == 'POST':
        if grupo == 'cliente':
            form = PedidoFormParaCliente(request.POST)
        else:
            form = PedidoForm(request.POST)
        if form.is_valid():
            if grupo != 'cliente':
                cliente = form.cleaned_data['cliente']
            pagamento = form.cleaned_data['pagamento']
            observacoes = form.cleaned_data['observacoes']
            pedido = Pedido(cliente=cliente, status='A', pagamento=pagamento, observacoes=observacoes)
            pedido.save()
            total = 0
            vazio = True
            for pizza in pizzas:
                quantidade = request.POST.get(pizza.nome + '_qtde')
                quantidade = int(quantidade)
                if quantidade != 0:
                    s = StatusItemPedido(pedido=pedido, item_cardapio=pizza, quantidade=quantidade,
                                         tipo_de_item=1)
                    s.save()
                    total += s.item_cardapio.preco * s.quantidade
                    vazio = False
            for bebida in bebidas:
                quantidade = request.POST.get(bebida.nome + '_qtde')
                quantidade = int(quantidade)
                if quantidade != 0:
                    if bebida.quantidade - quantidade < 0:
                        pedido.delete()
                        return render_to_response('erro_estoque.html', {'bebida': bebida}, context_instance=RequestContext(request))
                    else:
                        s = StatusItemPedido(pedido=pedido, item_cardapio=bebida, quantidade=quantidade,
                                             tipo_de_item=2)
                        s.save()
                        bebida.quantidade -= quantidade
                        bebida.save()
                        total += s.item_cardapio.preco * s.quantidade
            if vazio or (pagamento < total):
                pedido.delete()
            return HttpResponseRedirect(redirect_url)
    else:
        if grupo == 'cliente':
            form = PedidoFormParaCliente(initial={'pagamento': '0.00'})
        else:
            form = PedidoForm(initial={'pagamento': '0.00'})
    return render_to_response('criacao_pedido.html', {'form': form, 'bebidas': bebidas, 'pizzas': pizzas}, context_instance=RequestContext(request))
예제 #18
0
def cria_pedido_pda(request):
    pizzas = Pizza.objects.filter(personalizada=False)
    bebidas = Bebida.objects.all()
    if request.method == 'POST': # If the form has been submitted...
        form = PedidoFormPDA(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            cliente = form.cleaned_data['cliente']
            pedido = Pedido(cliente=cliente, status='A', pagamento=0)
            pedido.save()
            vazio = True
            for pizza in pizzas:
                quantidade = request.POST.get(pizza.nome + '_qtde')
                quantidade = int(quantidade)
                if quantidade != 0:
                    s = StatusItemPedido(pedido=pedido, item_cardapio=pizza, quantidade=quantidade,
                                         tipo_de_item=1)
                    s.save()
                    pedido.pagamento += s.item_cardapio.preco * s.quantidade
                    pedido.save()
                    vazio = False
            for bebida in bebidas:
                quantidade = request.POST.get(bebida.nome + '_qtde')
                quantidade = int(quantidade)
                if quantidade != 0:
                    if bebida.quantidade - quantidade < 0:
                        pedido.delete()
                        return render_to_response('pda_erro_estoque.html', {'bebida': bebida})
                    else:
                        s = StatusItemPedido(pedido=pedido, item_cardapio=bebida, quantidade=quantidade,
                                             tipo_de_item=2)
                        s.save()
                        bebida.quantidade -= quantidade
                        bebida.save()
                        pedido.pagamento += s.item_cardapio.preco * s.quantidade
                        pedido.save()
            if vazio:
                pedido.delete()
                return render_to_response('pda_erro_vazio.html', context_instance=RequestContext(request))
            return HttpResponseRedirect('/pizzer/') # Redirect after POST
    else:
        form = PedidoFormPDA() # An unbound form
    return render_to_response('pda_criacao_pedido.html', {'form': form, 'bebidas': bebidas, 'pizzas': pizzas}, context_instance=RequestContext(request))