def validar(request):
    if request.method == 'POST':
        form = ProdutoForm(request.POST) 
        
        if form.is_valid():
            produto = Produto(**form.cleaned_data)
            produto.save()
            
            produto = Produto.objects.all()
            
            return render(request, 'validar.html',{'form':form, 'produto':produto})
Example #2
0
def salvaProduto(listaCodigo):
    categoria = Categoria.objects.get(id=2)
    for codigo in listaCodigo:
        payload = {
            'apikey':
            'e5f8af5a3039686600cd5df81b77bbf244abfacc52bb94424df874630b20384f07939108',
            'imagem': 'S'
        }
        produto = requests.get(
            f'https://bling.com.br/Api/v2/produto/{codigo}/json/',
            params=payload).json()
        print("antes do try")
        try:
            jsonProduto = produto['retorno']['produtos']
            jsonProduto[0]['produto']['preco'] = '%.2f' % float(
                jsonProduto[0]['produto']['preco'])
            jsonProduto[0]['produto']['preco'] = jsonProduto[0]['produto'][
                'preco'].replace(".", ",")
        except KeyError:
            print("produto não encontrado no bling")
            codigoErro = "Falha"
            return None
        try:
            jsonProduto[0]['produto']['camposCustomizados']['m2PorCaixa']
        except:
            jsonProduto[0]['produto']['camposCustomizados'] = {'m2PorCaixa': 1}
        try:
            jsonProduto[0]['produto']['imagem'][0]['link']
        except:
            jsonProduto[0]['produto']['imagem'].append({'link': ""})
        print("sucesso2")
        produto = jsonProduto
        produtoBling = Produto(
            codigo=produto[0]['produto']['codigo'],
            nome=produto[0]['produto']['descricao'],
            marca=produto[0]['produto']['marca'],
            imagem=produto[0]['produto']['imagem'][0]['link'],
            disponivel=True,
            preco=float(produto[0]['produto']['preco'].replace(",", ".")),
            altura=float(produto[0]['produto']['alturaProduto']),
            largura=float(produto[0]['produto']['larguraProduto']),
            profundidade=float(produto[0]['produto']['profundidadeProduto']),
            pesoBruto=float(produto[0]['produto']['pesoBruto']),
            unidadesPorCaixa=float(produto[0]['produto']['itensPorCaixa']),
            unidadeDeVenda=produto[0]['produto']['unidade'],
            multiploDeVenda=produto[0]['produto']['camposCustomizados']
            ['m2PorCaixa'],
            descricao=produto[0]['produto']['descricaoCurta'],
            categoria=categoria,
        )
        print("sucesso3")
        produtoBling.save()
        print(f"{produtoBling.codigo} foi salvo")
Example #3
0
    def listar(self, request):
        try:
            m_produto = Produto()

            retorno_produtos = m_produto.listar()
            return Response(retorno_produtos.json())
        except Exception as e:
            print(traceback.format_exception(None, e, e.__traceback__),
                  file=sys.stderr,
                  flush=True)

            retorno = Retorno(
                False, 'Falha de comunicação. Em breve será normalizado.', '')
            return Response(retorno.json())
Example #4
0
    def incluir(self, chaves_produtos):
        try:

            retorno_cliente = self.cliente.obter()

            if not retorno_cliente.estado.ok:
                return retorno_cliente

            m_produto = Produto()
            retorno_produtos = m_produto.listar_especificos(chaves_produtos)
            
            if not retorno_produtos.estado.ok:
                return retorno_produtos

            d_dados_pedido = self.gerar_dados_pedido_transacao_gerencia_net(retorno_produtos.dados)

            m_transacao_gerencia_net = TransacaoGerenciaNet()

            retorno_transacao = m_transacao_gerencia_net.incluir(d_dados_pedido)

            if not retorno_transacao.estado.ok:
                return retorno_transacao
            
            self.charge_id = m_transacao_gerencia_net.id            
            self.id_contrato = str(self.cliente.id_cliente_iter).rjust(6, '0') + str(self.charge_id).rjust(10, '0')
            self.cliente = retorno_cliente.dados
            self.calcular_valor_total(retorno_produtos.dados)

            # Inclui na base
            self.save()

            # Atualiza com os produtos
            self.produtos_contratados.add(*retorno_produtos.dados)

            retorno = Retorno(True, 'Seu contrato foi gerado e será efetivado após o pagamento do boleto.')
            retorno.dados = self

            return retorno
        except Exception as e:
            print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True)
                    
            retorno = Retorno(False, 'Falha de comunicação. Em breve será normalizado.')
            return retorno
Example #5
0
    def listar(self, request):
        try:
            m_produto = self.definir_contexto(Produto())

            retorno_produtos = m_produto.listar()
            return retorno_produtos.gerar_resposta_http()
        except Exception as e:

            retorno = Retorno(False, self,
                              'A consulta a produtos Trisafe falhou.', None,
                              None, e)
            return retorno.gerar_resposta_http()
Example #6
0
 def criar_produtos(produtos):
     Produto.objects.all().delete()
     aux = []
     for produto in produtos:
         data = dict(
             produto=produto,
             importado=choice((True, False)),
             ncm=Utils.gen_digits(8),
             preco=random() * randint(10, 50),
             estoque=randint(10, 200),
         )
         obj = Produto(**data)
         aux.append(obj)
     Produto.objects.bulk_create(aux)
Example #7
0
    def alterar(self, chaves_produtos):

        try:
            retorno_cliente = self.cliente.obter()

            if not retorno_cliente.estado.ok:
                return retorno_cliente

            m_produto = self.definir_contexto(Produto())
            retorno_produtos = m_produto.listar_especificos(chaves_produtos)

            if not retorno_produtos.estado.ok:
                return retorno_produtos

            d_dados_pedido = self.gerar_dados_pedido_transacao_gerencia_net(
                retorno_produtos.dados)

            m_transacao_gerencia_net = self.definir_contexto(
                TransacaoGerenciaNet())

            retorno_transacao = m_transacao_gerencia_net.incluir(
                d_dados_pedido)

            if not retorno_transacao.estado.ok:
                return retorno_transacao

            self.chave_boleto_ext = m_transacao_gerencia_net.id
            self.cliente = retorno_cliente.dados
            self.calcular_valor_total(retorno_produtos.dados)
            self.aceito = False
            # Atualiza com os produtos
            self.produtos_contratados.set(retorno_produtos.dados)

            # Inclui na base
            self.save()

            retorno = Retorno(
                True, self,
                'Contrato gerado com sucesso. Selecione "Contratar" para aceitá-lo.'
            )
            retorno.dados = self

            return retorno
        except Exception as e:

            retorno = Retorno(False, self, 'A atualização do contrato falhou.',
                              None, None, e)
            return retorno
Example #8
0
def add_product(request):

    #Se o usuario adicionou um novo produto
    erros = []
    retornoAdd = False
    form = ProdutoForm()

    if request.POST:
        d = Draft.objects.all().filter(id=request.POST.get('foto', 0))
        if d:
            p = Produto(foto=d[0].photo)
            form = ProdutoForm(request.POST, instance=p)
        else:
            form = ProdutoForm(request.POST)
        print form.is_valid()
        if form.is_valid():

            form.save()
            form = ProdutoForm()
        else:
            print form.errors
        retornoAdd = True

    #template = loader.get_template('pedidos.html')
    #html = template.render(Context({'pedidoAbertoList': pedidosAbertos, 'pedidoFechadoList': pedidosFechados, 'clienteList': clienteLista, 'drawings': drawings, 'erros': erros, 'retornoAdd' : retornoAdd}))
    #return HttpResponse(html)

    productList = Produto.objects.all()

    clientList = Cliente.objects.all()

    drawings = Draft.objects.all()

    return render(
        request, 'produtos.html', {
            "productList": productList,
            "clienteList": clientList,
            'drawings': drawings,
            'erros': erros,
            'retornoAdd': retornoAdd,
            'form': form
        })
Example #9
0
def produtos(request):

    productList = Produto.objects.all()

    clientList = Cliente.objects.all()

    crawl()
    drawings = Draft.objects.all()

    erros = []
    retornoAdd = False
    form = ProdutoForm()

    if request.POST:
        d = Draft.objects.all().filter(id=request.POST.get('foto', 0))
        if d:
            p = Produto(foto=d[0].photo)
            form = ProdutoForm(request.POST, instance=p)
        else:
            form = ProdutoForm(request.POST)
        print form.is_valid()
        if form.is_valid():

            form.save()
            form = ProdutoForm()
        else:
            print form.errors
        retornoAdd = True

    return render(
        request, 'produtos.html', {
            "productList": productList,
            "clienteList": clientList,
            'drawings': drawings,
            'erros': erros,
            'retornoAdd': retornoAdd,
            'form': form
        })
Example #10
0
    def apropriar_dados_http_chave(cls, request):
        m_produto = Produto()
        m_produto.cpf = request.data['codigo']

        return m_produto
Example #11
0
def cadastraProdutoPorCodigo(request):
    # cadastra o produto já buscado no bling com os dados de lá
    print("cadastro por codigo")
    produtoDicionario = ""
    if request.GET:
        print("é get")
        try:
            del request.session['codigoSelecionado']
        except KeyError:
            pass

        formCodigo = PesquisaPorCodigoForm(request.GET)
        if formCodigo.is_valid():
            codigo = formCodigo.cleaned_data['codigo']
            print(f"{codigo} é valido no form")
            produto = getFromBling(codigo)
            if not produto:
                print("produto não encontrado no bling")
                formCodigo = PesquisaPorCodigoForm()
                messages.add_message(request, messages.ERROR,
                                     'Produto não encontrado!')
                return render(request, 'produto/cadastroPorCodigo.html', {
                    'form': formCodigo,
                    'produto': ""
                })

            produtoDicionario = {
                "codigo":
                produto[0]['produto']['codigo'],
                "nome":
                produto[0]['produto']['descricao'],
                "marca":
                produto[0]['produto']['marca'],
                "imagem":
                produto[0]['produto']['imagem'][0]['link'],
                "disponivel":
                True,
                "preco":
                produto[0]['produto']['preco'],
                "altura":
                produto[0]['produto']['alturaProduto'],
                "largura":
                produto[0]['produto']['larguraProduto'],
                "profundidade":
                produto[0]['produto']['profundidadeProduto'],
                "pesoBruto":
                produto[0]['produto']['pesoBruto'],
                "unidadesPorCaixa":
                produto[0]['produto']['itensPorCaixa'],
                "multiploDeVenda":
                produto[0]['produto']['camposCustomizados']['m2PorCaixa'],
                "unidadeDeVenda":
                produto[0]['produto']['unidade'],
                "descricao":
                produto[0]['produto']['descricaoCurta'],
            }

            request.session['codigoSelecionado'] = produtoDicionario['codigo']
            print("request é:")
            print(
                f"{request.session['codigoSelecionado']} custa {produtoDicionario['preco']}"
            )
    elif request.POST:
        print("é um post")
        formCategoria = ProdutoCategoriaForm(request.POST)
        categoria = None
        if formCategoria.is_valid():
            print(type(formCategoria.cleaned_data['categoria']))
            categoria = formCategoria.cleaned_data['categoria']
        try:
            produto = get_object_or_404(
                Produto, codigo=request.session['codigoSelecionado'])
            messages.add_message(
                request, messages.ERROR,
                f'O produto {produto.codigo} já está cadastrado no sistema!')
        except:
            produto = getFromBling(request.session['codigoSelecionado'])
            del request.session['codigoSelecionado']
            if not produto:
                formCodigo = PesquisaPorCodigoForm()
                return render(request, 'produto/cadastroPorCodigo.html', {
                    'form': formCodigo,
                    'produto': ""
                })

            produtoBling = Produto(
                codigo=produto[0]['produto']['codigo'],
                nome=produto[0]['produto']['descricao'],
                marca=produto[0]['produto']['marca'],
                imagem=produto[0]['produto']['imagem'][0]['link'],
                disponivel=True,
                preco=float(produto[0]['produto']['preco'].replace(",", ".")),
                altura=float(produto[0]['produto']['alturaProduto']),
                largura=float(produto[0]['produto']['larguraProduto']),
                profundidade=float(
                    produto[0]['produto']['profundidadeProduto']),
                pesoBruto=float(produto[0]['produto']['pesoBruto']),
                unidadesPorCaixa=float(produto[0]['produto']['itensPorCaixa']),
                unidadeDeVenda=produto[0]['produto']['unidade'],
                # colocar vinculado a categoria
                multiploDeVenda=produto[0]['produto']['camposCustomizados']
                ['m2PorCaixa'],
                descricao=produto[0]['produto']['descricaoCurta'],
                categoria=categoria,
            )
            produtoBling.save()
            messages.add_message(
                request, messages.SUCCESS,
                f'O produto {produtoBling.codigo} foi cadastrado no com sucesso sistema!'
            )
        formCodigo = PesquisaPorCodigoForm()
    else:
        print("request inicial")
        try:
            del request.session['codigoSelecionado']
        except KeyError:
            pass
        formCodigo = PesquisaPorCodigoForm()
    formCategoria = ProdutoCategoriaForm()
    print(produtoDicionario)
    return render(
        request, 'produto/cadastroPorCodigo.html', {
            'form': formCodigo,
            'formCategoria': formCategoria,
            'produto': produtoDicionario
        })
Example #12
0
cat1 = Categoria(nome='Balas', slug='balas')
cat2 = Categoria(nome='Chocolate', slug='chocolate')
cat3 = Categoria(nome='Especiais', slug='especiais')
cat4 = Categoria(nome='Bebidas', slug='bebidas')

cat1.save()
cat2.save()
cat3.save()
cat4.save()

Loja(nome="Candy Store", logo="candyStoreLogo4.png").save()

p = []
p.append(
    Produto(nome='Confeito M&M chocolate ao leite',
            imagem='MEM.png',
            secao='maisVendidos',
            loja=l))
p.append(
    Produto(nome='Barra de chocolate lacta laka',
            imagem='LAKA.png',
            secao='maisVendidos',
            loja=l))
p.append(
    Produto(nome='Chocolate KitKat ao leite',
            imagem='KITKATAOLEITE.png',
            secao='maisVendidos',
            loja=l))
p.append(
    Produto(nome='Bala de gelatina fini amoras',
            imagem='FINIAMORAS.png',
            secao='maisVendidos',
Example #13
0
    def incluir(self):

        try:
            retorno_cliente = self.cliente.obter()

            if (not retorno_cliente.estado.ok):
                return retorno_cliente

            m_produto = self.definir_contexto(Produto())
            retorno_produtos = m_produto.listar()

            if not retorno_produtos.estado.ok:
                return retorno_produtos

            chave_doc = ''

            # Tenta obter o contrato da base, pelo CPF
            retorno = self.obter_por_cliente()

            if (retorno.estado.ok):

                return retorno
            else:
                if retorno.estado.codMensagem != 'NaoCadastrado':
                    return retorno
                else:
                    m_contrato_clicksign = ContratoClicksign(self)

                    retorno = m_contrato_clicksign.incluir(
                        retorno_cliente.dados)

                    if not retorno.estado.ok:
                        return retorno

                    d_dados_doc = retorno.dados

                    if 'document' in d_dados_doc:
                        d_documento = d_dados_doc['document']
                        if 'key' in d_documento:
                            chave_doc = d_documento['key']

                        self.cliente = retorno_cliente.dados
                        # Sobram 4, caso necessario mais de um contrato por cliente.
                        self.id_contrato = str(
                            self.cliente.id_cliente_iter).rjust(6, '0') + str(
                                self.cliente.cpf).rjust(6, '0')
                        self.chave_contrato_ext = d_documento['key']
                        self.calcular_valor_total(retorno_produtos.dados)

                        # Inclui/atualiza na base
                        self.save()

                        # Atualiza com os produtos
                        self.produtos_contratados.add(*retorno_produtos.dados)

            retorno = Retorno(
                True, self,
                'Contrato gerado com sucesso. Selecione "Contratar" para aceitá-lo.'
            )
            retorno.dados = self

            return retorno
        except Exception as e:

            retorno = Retorno(False, self, 'A inclusão do contrato falhou.',
                              None, None, e)
            return retorno