Example #1
0
def anunciar_produto(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.anuncia_produto:
        if request.method == 'POST':
            produto = Produtos.objects.get(
                pk=int(QueryDict(request.body).get('registro_id')))

            if produto.anunciar_produto == 0:
                produto.anunciar_produto = 1
                titulo = 'ANUNCIANDO PRODUTO . . .'
                anuncio = 'ANUNCIADO'
                mensagem = 'O produto passou a ser anunciado no site ' + str(usuario.empresa.site) + '.' \
                           ' Lembramos que para isto, é necessário que o mesmo possua um estoque positivo.'

            else:
                produto.anunciar_produto = 0
                titulo = 'DEIXANDO DE ANUNCIAR PRODUTO . . .'
                anuncio = 'SEM ANUNCIO'
                mensagem = 'O produto deixou de ser anunciado no site ' + str(usuario.empresa.site) + \
                           '''. Lembramos que você pode voltar a  anunciá-lo a qualquer momento
                           repetindo esta mesma operação.'''
            produto.save()
            retorno['titulo'] = titulo
            retorno['anuncio'] = anuncio
            retorno['mensagem'] = mensagem
            retorno['permissao_negada'] = 0
            retorno['sucesso'] = 1
    else:
        retorno['mensagem'] = mensagem_permissao_negada()
        retorno['titulo'] = titulo_mensagem_permissao_negada()
        retorno['permissao_negada'] = 1
        retorno['sucesso'] = 0
    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #2
0
def buscar_produto(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    id = 0
    if usuario.permissoes.administrador or usuario.permissoes.administrador_super or usuario.permissoes.edita_produto:
        id = request.GET.get('id')
        registro = Produtos.objects.get(pk=int(id))
        form = FormCadastroProduto(instance=registro)
        titulo = 'BUSCANADO REGISTROS...'
        mensagem = 'Busca efetuada com sucesso!!!'
        campos = {}
        for campo in form.fields:
            if campo in form.initial:
                campos[form.auto_id % campo] = str(form.initial[campo])
        retorno = json.dumps({
            'id': id,
            'titulo': titulo,
            'mensagem': mensagem,
            'campos': campos,
            'sucesso': 1,
        })
    else:
        retorno = json.dumps({
            'id': id,
            'titulo': titulo_mensagem_permissao_negada(),
            'mensagem': mensagem_permissao_negada(),
            'campos': {},
            'permissao_negada': 1,
        })
    return HttpResponse(retorno, content_type='application/json')
Example #3
0
def cancelar_saida_produto(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    mensagem = ''
    titulo = ''
    sucesso = 0
    erro = 0
    info = 0
    titulo = 'CANCELANDO ÌTEM...'
    valor_total = 0
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.edita_saida_produto:
        if request.method == 'POST':
            saida = SaidaProdutos.objects.filter(
                pk=int(QueryDict(request.body).get('id_saida')))
            if saida:
                saida = SaidaProdutos.objects.get(
                    pk=int(QueryDict(request.body).get('id_saida')))
                produto = Produtos.objects.get(id=saida.produto.id)
                if saida.venda.status_pedido == 'EM ANDAMENTO':
                    if saida.status != 'CANCELADO':
                        saida.status = 'CANCELADO'
                        produto.estoque_atual += saida.quantidade
                        saida.save()
                        produto.save()
                        mensagem = 'Ìtem cancelado com sucesso!!!'
                        sucesso = 1
                        itens = SaidaProdutos.objects.filter(
                            venda=saida.venda.id)
                        for item in itens:
                            valor_total += item.saldo_final
                            if item.status == 'CANCELADO':
                                valor_total -= item.saldo_final

                        retorno['status'] = 'CANCELADO'
                        retorno['id_pedido'] = str(saida.venda.id)
                        retorno['cliente'] = str(
                            saida.venda.cliente.nome_razao_social)
                        retorno['valor_total'] = str(valor_total)

                    elif saida.status == 'CANCELADO':
                        mensagem = '''Este ítem já encontra-se cancelado...'''
                        info = 1
                else:
                    mensagem = '''Este ítem não pode ser cancelado, pois o mesmo faz parte de uma venda já finalizada...'''
                    erro = 1
    else:
        erro = 1
        mensagem = mensagem_permissao_negada()
        titulo = titulo_mensagem_permissao_negada()

    retorno['sucesso'] = sucesso
    retorno['erro'] = erro
    retorno['info'] = info
    retorno['mensagem'] = mensagem
    retorno['titulo'] = titulo

    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #4
0
def muda_status_item(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    mensagem = ''
    titulo = ''
    sucesso = 0
    erro = 0
    status = ''
    titulo = 'ALTERANDO STÁTUS DOS ÍTENS DO PEDIDO...'
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.muda_status_saida_produto:
        if request.method == 'POST':
            item = SaidaProdutos.objects.get(
                pk=int(QueryDict(request.body).get('id_item')))
            status = item.status
            if item.status != 'CANCELADO':
                if status == 'EM SEPARACAO' or status == 'SEPARADO':
                    if status == 'EM SEPARACAO':
                        mensagem = 'Este ítem foi marcado como separado...'
                        status = 'SEPARADO'
                    elif status == 'SEPARADO':
                        mensagem = 'Este ítem foi posto novamente em separação...'
                        status = 'EM SEPARACAO'
                    else:
                        mensagem = 'Este ítem foi marcado como separado...'
                        status = 'SEPARADO'
                    try:
                        item.status = status
                        item.save()
                        sucesso = 1
                    except:
                        erro = 1
                        sucesso = 0
                        mensagem = 'Houve um erro inesperado na tentativa de mudar o státus do ítem...<br>Por favor, tente novamente...'
                elif status == 'ENTREGUE':
                    mensagem = 'Não é possível alterar o státus deste ítem pois ele pertence um pedido já entregue...'
                    titulo = 'AÇÃO INTERROMPIDA PELO SISTEMA...'
                    erro = 1
                elif status == 'AGUARDANDO':
                    mensagem = 'Não é possível alterar o státus deste ítem pois ele pertence a venda ainda nao finalizada...'
                    titulo = 'AÇÃO INTERROMPIDA PELO SISTEMA...'
                    erro = 1
            else:
                mensagem = 'Não é possível alterar o státus deste ítem pois ele pertence a venda "CANCELADA"...'
                titulo = 'AÇÃO INTERROMPIDA PELO SISTEMA...'
                erro = 1
    else:
        mensagem = mensagem_permissao_negada()
        titulo = titulo_mensagem_permissao_negada()
        erro = 1

    retorno['sucesso'] = sucesso
    retorno['erro'] = erro
    retorno['mensagem'] = mensagem
    retorno['titulo'] = titulo
    retorno['status'] = status
    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #5
0
def conta_a_pagar(request, id_compra):
    retorno = {}
    id_conta = 0
    compra = {}
    usuario = Usuarios.objects.get(usuario=request.user.id)

    if usuario.status != 'ATIVO' or usuario.permissoes.status != 'ATIVO' or usuario.empresa.status != 'ATIVO':
        retorno['deslogar_usuario'] = 1
        return HttpResponse(json.dumps(retorno),
                            content_type="application/json")

    if not usuario.permissoes.administrador_super:
        compra = Compras.objects.get(id=id_compra, empresa=usuario.empresa.id)
    elif usuario.permissoes.administrador_super:
        compra = Compras.objects.get(id=id_compra)
    try:
        pagamento = ContasPagar.objects.filter(id=compra.pagamento.id)
    except:
        pagamento = {}

    if 'verifica_permissoes' in request.GET and request.GET[
            'verifica_permissoes']:
        permissoes = 0
        if usuario.permissoes.administrador_super or usuario.permissoes.administrador or (
                usuario.permissoes.acessa_contas_pagar
                and usuario.permissoes.edita_contas_pagar
                and usuario.permissoes.exclui_contas_pagar
                and usuario.permissoes.quita_contas_pagar
                and usuario.permissoes.registra_pagamento
                and usuario.permissoes.acessa_pagamento
                and usuario.permissoes.edita_pagamento
                and usuario.permissoes.exclui_pagamento
                and usuario.permissoes.muda_status_pagamento):
            permissoes = 1
        if permissoes == 0:
            retorno['mensagem'] = mensagem_permissao_negada()
            retorno['titulo'] = titulo_mensagem_permissao_negada()
            retorno['erro'] = 1
        elif permissoes == 1 and not pagamento:
            retorno[
                'mensagem'] = 'Não há registros de pagamentos vinculados a esta compra...'
            retorno['titulo'] = 'NENHUM PAGAMENTO REGISTRADO...'
            retorno['info'] = 1
        elif permissoes == 1:
            retorno['permissoes'] = permissoes
        return HttpResponse(json.dumps(retorno),
                            content_type="application/json")
    else:

        if int(id_compra) > 0:
            if compra.status_compra == 'LANCADO':
                id_conta = str(compra.pagamento.id)

        return HttpResponseRedirect('/admin/contas_a_pagar/contaspagar/' +
                                    id_conta + '/')
Example #6
0
def status_colaborador(request):
    retorno = {}
    titulo = ''
    mensagem = ''
    try:
        usuario = Usuarios.objects.get(usuario=request.user)
        if not usuario.permissoes.muda_status_colaborador and not usuario.permissoes.administrador \
                and not usuario.permissoes.administrador_super:
            retorno['titulo'] = titulo_mensagem_permissao_negada()
            retorno['erro'] = 1
            retorno['mensagem'] = mensagem_permissao_negada()
            return HttpResponse(json.dumps(retorno), content_type="application/json")

        elif request.method == 'POST':
            colaborador = Colaboradores.objects.get(id=int(QueryDict(request.body).get('registro_id')))
            status = QueryDict(request.body).get('status')

            colaborador.status = status
            colaborador.save()

            if status == 'ATIVO':
                mensagem = 'Colaborador ativado com sucesso !!!'
                titulo = 'ATIVAR CADASTRO DE COLABORADOR ...'

            elif status == 'INATIVO':
                mensagem = 'colaborador desativado com sucesso !!!'
                titulo = 'DESATIVAR CADASTRO DE COLABORADOR ...'

            elif status == 'EXCLUIDO':
                mensagem = 'colaborador excluido com sucesso !!!'
                titulo = 'EXCLUIR CADASTRO DE COLABORADOR ...'

            elif status == 'AFASTADO':
                mensagem = 'colaborador afastado com sucesso !!!'
                titulo = 'AFASTAR COLABORADOR ...'

            elif status == 'APOSENTADO':
                mensagem = 'colaborador aposentado com sucesso !!!'
                titulo = 'APOSENTAR COLABORADOR ...'

            elif status == 'DEMITIDO':
                mensagem = 'colaborador demitido com sucesso !!!'
                titulo = 'DEMITIR COLABORADOR ...'

            retorno['mensagem'] = mensagem
            retorno['titulo'] = titulo
            retorno['sucesso'] = 1
            retorno['status'] = status
    except:
        retorno['titulo'] = titulo_mensagem_erro_padrao()
        retorno['mensagem'] = mensagem_erro_padrao()
        retorno['erro'] = 1

    return HttpResponse(
            json.dumps(retorno), content_type="application/json")
Example #7
0
def status_produto(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    mensagem = ''
    titulo = ''
    if usuario.permissoes.administrador > 0 or usuario.permissoes.administrador_super > 0 or usuario.permissoes.anuncia_produto > 0:
        if request.method == 'POST':
            registro = Produtos.objects.get(
                pk=int(QueryDict(request.body).get('registro_id')))
            status = QueryDict(request.body).get('status')

            if status != 'ATIVO':
                registro.anunciar_produto = 0

            registro.status = status
            registro.save()

            if status == 'ATIVO':
                mensagem = 'Produto ativado com sucesso !!!'
                titulo = 'ATIVAR PRODUTO ...'

            elif status == 'INATIVO':
                mensagem = 'Produto desativado com sucesso !!!'
                titulo = 'DESATIVAR PRODUTO ...'

            elif status == 'EXCLUIDO':
                mensagem = 'Produto excluido com sucesso !!!'
                titulo = 'EXCLUIR PRODUTO ...'

            elif status == 'FORA DE LINHA':
                mensagem = 'Produto posto fora de linha com sucesso !!!'
                titulo = 'TIRAR PRODUTO DE LINHA ...'

            if registro.anunciar_produto == 1:
                anuncio = 'ANUNCIADO'
            else:
                anuncio = 'SEM ANUNCIO'

            retorno['mensagem'] = mensagem
            retorno['titulo'] = titulo
            retorno['status'] = status
            retorno['anuncio'] = anuncio
            retorno['sucesso'] = 1
            retorno['permissao_negada'] = 0
    else:
        retorno['mensagem'] = mensagem_permissao_negada()
        retorno['titulo'] = titulo_mensagem_permissao_negada()
        retorno['permissao_negada'] = 1
        retorno['sucesso'] = 0

    return HttpResponse(json.dumps(retorno), content_type="application/json")
def buscar_preco_tabelado(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    id = int(request.GET.get('id') or 0)
    preco = {}
    retorno = {}
    if not usuario.permissoes.administrador_super and not usuario.permissoes.administrador and not usuario.permissoes.edita_tabela_de_precos:
        retorno = json.dumps({
            'titulo': titulo_mensagem_permissao_negada(),
            'mensagem': mensagem_permissao_negada(),
            'permissao_negada': 1,
        })
    else:
        precos = TabelaPrecos.objects.filter(id=id)
        if precos:
            preco = TabelaPrecos.objects.get(id=id)
        if not preco:
            retorno = json.dumps({
                'titulo': 'REGISTRO NÃO ENCONTRADO...',
                'mensagem':
                'O sistema não identificou nenhum registro de preço tabelado com este ID.',
                'alerta': 1,
            })
        elif preco.empresa != usuario.empresa and usuario.permissoes.administrador_super:
            retorno = json.dumps({
                'titulo':
                'AÇÃO INTERROMPIDA PELO SISTEMA...',
                'mensagem':
                '''Por questão de segurança, para realizar alterações neste registro, é necessário que você
                esteja logado como usuário da empresa <strong>''' +
                str(preco.empresa).upper() + '</strong>...',
                'alerta':
                1,
            })
        else:
            form = FormTabelaPrecos(instance=preco)
            titulo = 'BUSCANADO REGISTROS...'
            mensagem = 'Busca efetuada com sucesso!!!'
            campos = {}

            for campo in form.fields:
                if campo in form.initial:
                    campos[form.auto_id % campo] = str(form.initial[campo])

            retorno = json.dumps({
                'id': id,
                'titulo': titulo,
                'mensagem': mensagem,
                'campos': campos,
                'sucesso': 1,
            })
    return HttpResponse(retorno, content_type='application/json')
Example #9
0
def status_usuario(request):
    retorno = {}
    titulo = ''
    mensagem = ''
    try:
        usuario = Usuarios.objects.get(usuario=request.user)
        if not usuario.permissoes.muda_status_usuario and not usuario.permissoes.administrador \
                and not usuario.permissoes.administrador_super:
            retorno['titulo'] = titulo_mensagem_permissao_negada()
            retorno['erro'] = 1
            retorno['mensagem'] = mensagem_permissao_negada()
            return HttpResponse(json.dumps(retorno), content_type="application/json")

        elif request.method == 'POST':
            registro = Usuarios.objects.get(id=int(QueryDict(request.body).get('registro_id')))
            status = QueryDict(request.body).get('status')

            registro.status = status
            registro.save()

            if status == 'ATIVO':
                mensagem = 'Usuario ativado com sucesso !!!'
                titulo = 'ATIVAR CADASTRO DE USUARIO ...'

            elif status == 'INATIVO':
                mensagem = 'Usuario desativado com sucesso !!!'
                titulo = 'DESATIVAR CADASTRO DE USUARIO ...'

            elif status == 'EXCLUIDO':
                mensagem = 'Usuario excluido com sucesso !!!'
                titulo = 'EXCLUIR CADASTRO DE USUARIO ...'

            elif status == 'BLOQUEADO':
                mensagem = 'Usuario BLOQUEADO com sucesso !!!'
                titulo = 'BLOQUEAR USUARIO ...'

            retorno['mensagem'] = mensagem
            retorno['titulo'] = titulo
            retorno['sucesso'] = 1
            retorno['status'] = status
    except:
        retorno['titulo'] = titulo_mensagem_erro_padrao()
        retorno['mensagem'] = mensagem_erro_padrao()
        retorno['erro'] = 1

    return HttpResponse(
            json.dumps(retorno), content_type="application/json")
def excluir_preco_tabelado(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.exclui_preco_tabelado:
        if request.method == 'DELETE':
            registro = TabelaPrecos.objects.get(
                id=int(QueryDict(request.body).get('registro_id')))

            registro.delete()

            retorno['mensagem'] = 'Registro excluído com sucesso!!!'
            retorno['titulo'] = 'EXCLUINDO PREÇO TABELADO...'
            retorno['sucesso'] = 1
    else:
        retorno['mensagem'] = mensagem_permissao_negada()
        retorno['titulo'] = titulo_mensagem_permissao_negada()
        retorno['erro'] = 1
    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #11
0
def cancelar_entrada_produto(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    mensagem = ''
    titulo = ''
    sucesso = 0
    erro = 0
    info = 0
    titulo = 'CANCELANDO ÌTEM...'
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.edita_entrada_produto:
        if request.method == 'POST':
            entrada = EntradaProdutos.objects.filter(
                pk=int(QueryDict(request.body).get('id_entrada')))
            if entrada:
                entrada = EntradaProdutos.objects.get(
                    pk=int(QueryDict(request.body).get('id_entrada')))
                produto = Produtos.objects.get(id=entrada.produto.id)
                if entrada.status_entrada != 'CANCELADO':
                    entrada.status_entrada = 'CANCELADO'
                    produto.estoque_atual -= entrada.quantidade
                    entrada.save()
                    produto.save()
                    mensagem = 'Ìtem cancelado com sucesso!!!'
                    sucesso = 1
                    retorno['status'] = 'CANCELADO'
                elif entrada.status_entrada == 'CANCELADO':
                    mensagem = '''Este ítem já encontra-se cancelado...'''
                    info = 1
    else:
        erro = 1
        mensagem = mensagem_permissao_negada()
        titulo = titulo_mensagem_permissao_negada()

    retorno['sucesso'] = sucesso
    retorno['erro'] = erro
    retorno['info'] = info
    retorno['mensagem'] = mensagem
    retorno['titulo'] = titulo

    return HttpResponse(json.dumps(retorno), content_type="application/json")
def muda_status_promocao(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    status_promocao = ''
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.muda_status_preco_tabelado:
        if request.method == 'POST':
            registro = PrecosPomocionais.objects.filter(
                id=int(QueryDict(request.body).get('registro_id')))
            if registro:
                registro = PrecosPomocionais.objects.get(
                    id=int(QueryDict(request.body).get('registro_id')))
                status = registro.status_promocao
                if registro.status_promocao == 'ATIVO':
                    registro.status_promocao = 'INATIVO'
                elif registro.status_promocao == 'INATIVO':
                    registro.status_promocao = 'ATIVO'

                status_promocao = registro.status_promocao
                registro.save()
                if registro.status_promocao == status_promocao:
                    mensagem = 'Státus alterado com sucesso!!!'
                else:
                    mensagem = '''Verifique se o státus foi realmente alterado,
                                  pois há uma suspeita, de que isto não tenha ocorrido...'''
                retorno['mensagem'] = mensagem
                retorno['titulo'] = 'ALTERANDO STÁTUS DE PREÇO...'
                retorno['status_preco'] = registro.status_promocao
                retorno['sucesso'] = 1
            else:
                retorno[
                    'mensagem'] = '''Não foi possível identificar o registro para efetuar a alteração.
                                         Por favor, tente novamente...'''
                retorno['titulo'] = 'OPERAÇÃO NÃO REALIZADA...'
                retorno['erro'] = 1
    else:
        retorno['mensagem'] = mensagem_permissao_negada()
        retorno['titulo'] = titulo_mensagem_permissao_negada()
        retorno['erro'] = 1
    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #13
0
def imprimir_pedido(request, id_venda=None, cupom=None):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    data = datetime.now()
    if usuario.status != 'ATIVO' or usuario.permissoes.status != 'ATIVO' or usuario.empresa.status != 'ATIVO':
        retorno['deslogar_usuario'] = 1
        return HttpResponse(json.dumps(retorno),
                            content_type="application/json")

    venda = Vendas.objects.get(id=id_venda)
    itens = SaidaProdutos.objects.filter(
        venda=id_venda, status='SEPARADO') | SaidaProdutos.objects.filter(
            venda=id_venda,
            status='AGUARDANDO') | SaidaProdutos.objects.filter(
                venda=id_venda, status='EM SEPARACAO')

    if 'verifica_permissoes' in request.GET and request.GET[
            'verifica_permissoes']:
        permissoes = 0
        if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.imprime_cupom_venda:
            permissoes = 1
        if permissoes == 0:
            retorno['mensagem'] = mensagem_permissao_negada()
            retorno['titulo'] = titulo_mensagem_permissao_negada()
            retorno['erro'] = 1
        elif permissoes == 1 and not itens:
            retorno[
                'mensagem'] = 'Não é possível imprimir o pedido, pois não foi vendido nenhum ítem...'
            retorno['titulo'] = 'NENHUM ÍTEM VENDIDO...'
            retorno['info'] = 1
        elif permissoes == 1 and itens:
            retorno['permissoes'] = permissoes
        return HttpResponse(json.dumps(retorno),
                            content_type="application/json")

    else:
        if 'vias' in request.GET and request.GET['vias']:
            vias = request.GET['vias']

        valor_total = 0
        desconto = 0.0
        saldo_final = 0
        valor_total_sem_desconto = 0
        data = datetime.now()
        for item in itens:

            item.valor_unitario = '%0.02f' % item.valor_unitario
            item.valor_unitario = moeda(item.valor_unitario)
            item.produto.descricao_simplificada = item.produto.descricao_simplificada[:
                                                                                      32]
            valor_total += float(item.saldo_final) + float(item.saldo_final)
            valor_total_sem_desconto += float(item.saldo_final) + float(
                item.total_desconto)
            desconto += float(item.total_desconto)
            item.saldo_final = moeda(item.saldo_final + item.total_desconto)
            item.total_desconto = moeda(item.total_desconto)

        desconto = '%0.02f' % desconto
        valor_total_sem_desconto = '%0.02f' % valor_total_sem_desconto
        valor_total = moeda(valor_total)
        desconto = moeda(desconto)
        valor_total_sem_desconto = moeda(valor_total_sem_desconto)
        saldo_final = moeda(venda.saldo_final)

        venda.cliente.nome_razao_social = venda.cliente.nome_razao_social[:32]
        venda.empresa.nome_fantasia = venda.empresa.nome_fantasia[:32]
        if venda.pagamento:
            venda.pagamento.meio_de_pagamento = venda.pagamento.meio_de_pagamento.lower(
            )
        if cupom:
            return render(
                request,
                'vendas/cupom_nao_fiscal.html',
                locals(),
            )
        else:
            titulo = 'Imprimir Cupom não Fiscal'
        return render(
            request,
            'vendas/pedido_a4.html',
            locals(),
        )
Example #14
0
def finalizar_venda(request):
    titulo = 'FINALIZANDO PEDIDO...'
    mensagem = ''
    cliente = 0
    registro = {}
    p = {}
    venda = {}
    itens = {}
    erro = 0
    id_venda = 0
    id_conta = 0
    info = 0
    alerta = 0
    valortotal = 0
    sucesso = 0
    retorno = {}
    usuario = Usuarios.objects.get(usuario=request.user.id)
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.finaliza_compra:
        if request.method == 'GET':
            id_conta = int(request.GET.get('id_conta') or 0)
            id_venda = int(request.GET.get('id_venda') or 0)
        elif request.method == 'POST':
            id_conta = int(request.POST.get('id_conta') or 0)
            id_venda = int(request.POST.get('id_venda') or 0)

        if id_venda > 0:
            venda = Vendas.objects.get(id=id_venda)
            cliente = venda.cliente.id
            itens = SaidaProdutos.objects.filter(venda=venda.id,
                                                 status='AGUARDANDO')

            if itens:
                valortotal = 0
                desc = 0
                tot = 0
                for item in itens:
                    valortotal += item.saldo_final
                    desc += item.total_desconto
                    tot += item.valor_unitario

                if id_conta > 0:
                    conta = ContasReceber.objects.get(id=int(id_conta))
                else:
                    conta = None

                if request.method == 'POST':
                    form = FormContasReceber(deserialize_form(
                        request.POST.get('form')),
                                             instance=conta)

                    if form.is_valid():
                        registro = form.save(commit=False)

                        venda.saldo_final = valortotal
                        venda.valor_total = tot
                        venda.desconto = desc
                        venda.status_pedido = 'CONCLUIDO NAO ENTREGUE'

                        registro.usuario = request.user
                        registro.empresa = usuario.empresa
                        registro.status_conta = 'PENDENTE'
                        registro.data_vencimento = datetime.now()
                        registro.documento_vinculado = venda.id
                        registro.valor_conta = venda.saldo_final
                        registro.descricao = 'Pagamento referente ao pedido 000' + str(
                            venda.id)

                        if registro.valor_entrada < venda.saldo_final:
                            if registro.forma_de_pagamento == 'A VISTA' and registro.valor_entrada == 0.0 or \
                                            registro.forma_de_pagamento == 'A PRAZO':

                                registro.save()
                                conta = ContasReceber.objects.get(
                                    id=registro.id)
                                id_conta = conta.id
                                venda.pagamento = conta
                                venda.save()

                                if registro.valor_entrada > 0:
                                    pgtos = None
                                    frm = FormPagamentos(instance=pgtos)
                                    p = frm.save(commit=False)
                                    p.conta_id = registro.id
                                    p.empresa = registro.empresa
                                    p.usuario = request.user
                                    p.meio_pagamento = registro.meio_de_pagamento
                                    p.data_pagamento = datetime.now()
                                    p.data_vencimento = datetime.now()
                                    p.valor_pagamento = registro.valor_entrada
                                    p.status_pagamento = 'PAGO'
                                    registro.status_conta = 'PARCIALMENTE PAGO'
                                    p.observacoes_pagamento = 'Pago como entrada no ato da venda.'
                                    registro.save()
                                    p.save()

                                if registro.forma_de_pagamento == 'A VISTA':
                                    pgtos = None
                                    frm = FormPagamentos(instance=pgtos)
                                    p = frm.save(commit=False)
                                    p.empresa = registro.empresa
                                    p.usuario = request.user
                                    p.meio_pagamento = registro.meio_de_pagamento
                                    p.conta_id = registro.id
                                    p.data_pagamento = datetime.now()
                                    p.data_vencimento = datetime.now()
                                    p.valor_pagamento = venda.saldo_final
                                    # p.status_pagamento = 'PAGO'
                                    # registro.status_conta = 'PAGO'
                                    # registro.status_conta = 'PAGO'
                                    registro.quantidade_parcelas = 0
                                    p.meio_pagamento = registro.meio_de_pagamento
                                    p.observacoes_pagamento = 'Pagamento realizado no ato da venda.'
                                    p.save()
                                    registro.save()

                                if registro.forma_de_pagamento == 'A PRAZO':
                                    data = registro.primeiro_vencimento
                                    restante = int(
                                        registro.quantidade_parcelas)
                                    for ps in range(0, restante):
                                        pgtos = None
                                        frm = FormPagamentos(instance=pgtos)
                                        p = frm.save(commit=False)
                                        p.conta_id = registro.id
                                        if ps == 0:
                                            vencimento = datetime.fromordinal(
                                                data.toordinal())
                                        else:
                                            vencimento = datetime.fromordinal(
                                                data.toordinal() + 31 * ps)
                                        p.empresa = registro.empresa
                                        p.usuario = request.user
                                        p.data_vencimento = vencimento
                                        p.valor_pagamento = (
                                            venda.saldo_final -
                                            registro.valor_entrada) / restante
                                        p.status_pagamento = 'PENDENTE'
                                        p.meio_pagamento = registro.meio_de_pagamento
                                        p.observacoes_pagamento = 'Pagamento programado conforme informações coletadas nafinalização da venda.'
                                        p.save()

                                mensagem = 'Venda finalizada com sucesso!!!'
                                sucesso = 1
                                for item in itens:
                                    if item.status != 'CANCELADO':
                                        item.status = 'EM SEPARACAO'
                                        item.save()
                            elif registro.forma_de_pagamento == 'A VISTA' and registro.valor_entrada != 0.0:
                                mensagem = 'Tratando se de um pagamento á vista, o valor da entrada deve ser sempre $0,00'
                                erro = 1

                        elif registro.valor_entrada >= venda.saldo_final:
                            mensagem = '''Tratando-se de um pagamento a prazo, a  entrada não pode ser igual nem superior
                            ao valor total do pedido'''
                            erro = 1
                    else:
                        form_erro = []
                        for error in form.errors:
                            form_erro += {error}

                        retorno['form_erro'] = form_erro
                        titulo = 'ERRO NA VALIDAÇÃO DOS DADOS...'
                        mensagem = 'Por favor, corrija os campos listados em vermelho e tente novamente...'
            else:
                mensagem = 'Não será possível finalizar a venda, pois não foi vendido nenhum ítem. Caso não tenha interesse em continuá-la, você deve cancelar a mesma...'
                erro = 1
        else:
            mensagem = mensagem_erro_padrao()
            titulo = titulo_mensagem_erro_padrao()
            erro = 1
    else:
        mensagem = mensagem_permissao_negada()
        titulo = titulo_mensagem_permissao_negada()
        erro = 1

    retorno['sucesso'] = sucesso
    retorno['erro'] = erro
    retorno['info'] = info
    retorno['id_conta'] = id_conta
    retorno['alerta'] = alerta
    retorno['mensagem'] = mensagem
    retorno['titulo'] = titulo
    retorno['valor_total'] = str(valortotal)
    retorno['method'] = request.method
    retorno['agente_pagador'] = str(cliente)
    retorno['data_atual'] = str(datetime.now().strftime('%Y-%m-%d'))

    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #15
0
def muda_status_venda(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    mensagem = ''
    sucesso = 0
    erro = 0
    info = 0
    itens_venda = []
    status = ''
    status_pedido = ''
    titulo = 'ALTERANDO STÁTUS DA VENDA...'
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.muda_status_venda:
        if request.method == 'POST':
            venda = Vendas.objects.filter(
                pk=int(QueryDict(request.body).get('id_venda')))
            status = QueryDict(request.body).get('status')
            if venda:
                venda = Vendas.objects.get(
                    pk=int(QueryDict(request.body).get('id_venda')))
                status_pedido = venda.status_pedido
                if status != status_pedido:
                    venda.status_pedido = str(status)
                    venda.save()
                    sucesso = 1

                    itens = SaidaProdutos.objects.filter(
                        venda=venda.id,
                        status='EM SEPARACAO') | SaidaProdutos.objects.filter(
                            venda=venda.id,
                            status='SEPARADO') | SaidaProdutos.objects.filter(
                                venda=venda.id, status='AGUARDANDO'
                            ) | SaidaProdutos.objects.filter(venda=venda.id,
                                                             status='ENTREGUE')

                    if status == 'CONCLUIDO NAO ENTREGUE':
                        mensagem = 'Esta venda foi marcada novamente como não entregue...'
                        for item in itens:
                            item.status = 'SEPARADO'
                            item.save()

                    elif status == 'CONCLUIDO E ENTREGUE':
                        mensagem = 'Esta venda foi marcada como entregue...'
                        for item in itens:
                            item.status = 'ENTREGUE'
                            item.save()

                    elif status == 'CANCELADO':
                        mensagem = 'Venda cancelada com sucesso!!!'
                        if itens:
                            for item in itens:
                                produto = Produtos.objects.get(
                                    id=item.produto.id)
                                produto.estoque_atual += item.quantidade
                                item.status = 'CANCELADO'
                                item.save()
                                produto.save()

                        if venda.pagamento:
                            conta = ContasReceber.objects.filter(
                                documento_vinculado=venda.pk)
                            if conta:
                                conta = ContasReceber.objects.get(
                                    documento_vinculado=venda.pk)
                                pagamentos = PagamentosRecebidos.objects.filter(
                                    conta=conta.pk)
                                for pagamento in pagamentos:
                                    pagamento.delete()
                                conta.delete()

                elif status == status_pedido:
                    mensagem = '''O registro não foi alterado, pois o seu státus é exatamente o mesmo indicado para
                                      alteração...'''
                    info = 1
    else:
        erro = 1
        mensagem = mensagem_permissao_negada()
        titulo = titulo_mensagem_permissao_negada()
    retorno['itens'] = itens_venda
    retorno['sucesso'] = sucesso
    retorno['erro'] = erro
    retorno['info'] = info
    retorno['mensagem'] = mensagem
    retorno['titulo'] = titulo
    retorno['status'] = status
    retorno['status_pedido'] = status_pedido
    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #16
0
def buscar_vendas(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    tb_vendas = {}
    mensagem = ''
    vendas = []
    classe = ''
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.acessa_registro_venda:
        if 'status' in request.GET and request.GET['status']:
            status = request.GET.get('status')
            if status == 'CONCLUIDO E ENTREGUE':
                tb_vendas = Vendas.objects.filter(
                    empresa=usuario.empresa.id,
                    status_pedido=status) | Vendas.objects.filter(
                        empresa=usuario.empresa.id, status_pedido=status)
                if usuario.permissoes.administrador_super:
                    tb_vendas = Vendas.objects.filter(
                        status_pedido=status) | Vendas.objects.filter(
                            status_pedido=status)
            else:
                tb_vendas = Vendas.objects.filter(empresa=usuario.empresa.id,
                                                  status_pedido=status)
                if usuario.permissoes.administrador_super:
                    tb_vendas = Vendas.objects.filter(status_pedido=status)

        if 'id_venda' in request.GET and request.GET['id_venda']:
            id_venda = request.GET.get('id_venda')
            tb_vendas = Vendas.objects.filter(empresa=usuario.empresa.id,
                                              pk=int(id_venda))

            if usuario.permissoes.administrador_super:
                tb_vendas = Vendas.objects.filter(pk=int(id_venda))

        if 'data_venda' in request.GET and request.GET['data_venda']:
            data_venda = request.GET.get('data_venda')
            data_venda = datetime.strptime(data_venda, "%Y-%m-%d")
            tb_vendas = Vendas.objects.filter(empresa=usuario.empresa.id,
                                              data_venda=data_venda)

            if usuario.permissoes.administrador_super:
                tb_vendas = Vendas.objects.filter(data_venda=data_venda)

        if 'cliente' in request.GET and request.GET['cliente']:
            cliente = request.GET.get('cliente')
            tb_vendas = Vendas.objects.filter(empresa=usuario.empresa.id,
                                              cliente=cliente)

            if usuario.permissoes.administrador_super:
                tb_vendas = Vendas.objects.filter(cliente=cliente)
        for index in tb_vendas:

            if index.status_pedido == 'EM ANDAMENTO':
                classe = ''
            elif index.status_pedido == 'CONCLUIDO NAO ENTREGUE':
                classe = 'warning'
            elif index.status_pedido == 'CONCLUIDO ENTREGUE':
                classe = 'success'
            elif index.status_pedido == 'CANCELADO':
                classe = 'danger'

            itens = SaidaProdutos.objects.filter(venda=index.id)
            valor_total = 0
            total_desconto = 0
            for i in itens:
                valor_total += i.valor_total
                total_desconto += i.total_desconto
                if i.status == 'CANCELADO':
                    valor_total -= i.valor_total
                    total_desconto -= i.total_desconto

            if index.pagamento:
                status_pagamento = index.pagamento.status_conta
                id_pagamento = index.pagamento.id
            else:
                status_pagamento = 'PENDENTE'
                id_pagamento = 'NAO PAGO'

            if not id_pagamento:
                id_pagamento = 'NAO PAGO'

            vendas += [{
                'id':
                index.id,
                'cliente':
                str(index.cliente),
                'solicitante':
                index.solicitante,
                'data_venda':
                str(index.data_venda),
                'data_entrega':
                str(index.data_entrega),
                'vencimento':
                str(index.vencimento),
                'status_pedido':
                index.status_pedido,
                'status_pagamento':
                status_pagamento,
                'valor_total':
                str('%0.02f' % valor_total),
                'desconto':
                str('%0.02f' % total_desconto),
                'saldo_final':
                str('%0.02f' % (valor_total - total_desconto)),
                'observacoes':
                index.observacoes,
                'pagamento':
                str(id_pagamento),
                'pagamento_id':
                str(id_pagamento),
                'empresa':
                str(index.empresa),
                'cep':
                index.cep,
                'endereco':
                index.endereco,
                'numero':
                index.numero,
                'complemento':
                index.complemento,
                'bairro':
                index.bairro,
                'cidade':
                index.cidade,
                'estado':
                index.estado,
                'observacoes_entrega':
                index.observacoes_entrega,
                'classe':
                classe,
                'mensagem':
                mensagem,
            }]
    else:
        vendas += [{
            'titulo': titulo_mensagem_permissao_negada(),
            'mensagem': mensagem_permissao_negada(),
            'erro': 1,
        }]
    retorno = json.dumps(vendas)
    return HttpResponse(retorno, content_type='application/json')
Example #17
0
def muda_status_compra(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    mensagem = ''
    titulo = ''
    sucesso = 0
    erro = 0
    info = 0
    itens_compra = []
    status = ''
    status_compra = ''
    titulo = 'ALTERANDO STÁTUS DA COMPRA...'
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.muda_status_compra:
        if request.method == 'POST':
            compra = Compras.objects.filter(
                pk=int(QueryDict(request.body).get('id_compra')))
            status = QueryDict(request.body).get('status')
            if compra:
                compra = Compras.objects.get(
                    pk=int(QueryDict(request.body).get('id_compra')))
                status_compra = compra.status_compra
                if status != status_compra:
                    compra.status_compra = status
                    compra.save()
                    sucesso = 1
                    if status == 'NAO LANCADO':
                        mensagem = 'Esta compra foi marcado novamente como não lançada...'

                    elif status == 'PARCIALMENTE LANCADO':
                        mensagem = 'Esta compra foi marcado como parcialmente lançada...'

                    elif status == 'LANCADO':
                        mensagem = 'Esta compra foi marcada como lançada...'

                    elif status == 'CANCELADO':
                        itens = EntradaProdutos.objects.filter(
                            compra=compra.id, status_entrada='LANCADO')
                        if itens:
                            for item in itens:
                                produto = Produtos.objects.get(
                                    id=item.produto.id)
                                produto.estoque_atual -= item.quantidade
                                item.status_entrada = 'CANCELADO'
                                item.save()
                                produto.save()
                                itens = EntradaProdutos.objects.filter(
                                    compra=compra.id)
                                for index in itens:
                                    classe = 'success'
                                    if index.status_entrada == 'CANCELADO':
                                        classe = 'danger'
                                    itens_compra += [{
                                        'id':
                                        str(index.id),
                                        'compra':
                                        str(index.compra),
                                        'produto':
                                        str(index.produto),
                                        'quantidade':
                                        str(index.quantidade),
                                        'preco_compra':
                                        moeda_real(index.preco_compra),
                                        'data_entrada':
                                        str(index.data_entrada),
                                        'data_fabricacao':
                                        str(index.data_fabricacao),
                                        'data_validade':
                                        str(index.data_validade),
                                        'numero_lote':
                                        str(index.numero_lote),
                                        'total':
                                        moeda_real(index.total),
                                        'balanco':
                                        index.balanco,
                                        'marca':
                                        str(index.produto.marca_produto),
                                        'status_entrada':
                                        index.status_entrada,
                                        'observacoes_entrada':
                                        index.observacoes_entrada,
                                        'empresa':
                                        str(index.empresa),
                                        'classe':
                                        classe
                                    }]
                        mensagem = 'Compra cancelada com sucesso!!!'
                elif status == status_compra:
                    mensagem = '''O registro não foi alterado, pois o seu státus é exatamente o mesmo indicado para
                                  alteração...'''
                    info = 1
    else:
        erro = 1
        mensagem = mensagem_permissao_negada()
        titulo = titulo_mensagem_permissao_negada()
    retorno['itens'] = itens_compra
    retorno['sucesso'] = sucesso
    retorno['erro'] = erro
    retorno['info'] = info
    retorno['mensagem'] = mensagem
    retorno['titulo'] = titulo
    retorno['status'] = status
    retorno['status_compra'] = status_compra
    return HttpResponse(json.dumps(retorno), content_type="application/json")
def precos_promocionais_pdf(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    permissoes = 0
    if usuario.status != 'ATIVO' or usuario.permissoes.status != 'ATIVO' or usuario.empresa.status != 'ATIVO':
        return HttpResponseRedirect('/logout/')

    promocoes = PrecosPomocionais.objects.filter(
        empresa=usuario.empresa,
        status_promocao='ATIVO').order_by('-preco_venda_promocao')
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.acessa_tabela_de_precos:
        permissoes = 1

    if 'verifica_permissoes' in request.GET and request.GET[
            'verifica_permissoes']:

        if permissoes == 0:
            retorno['mensagem'] = mensagem_permissao_negada()
            retorno['titulo'] = titulo_mensagem_permissao_negada()
            retorno['erro'] = 1
        elif permissoes == 1 and not promocoes:
            retorno[
                'mensagem'] = 'Não há nenhum registro de produtos em promoção na empresa ' + str(
                    usuario.empresa.razao_social) + '...'
            retorno['titulo'] = 'NENHUM REGISTRO ENCONTRADO...'
            retorno['info'] = 1
        elif permissoes and promocoes:
            retorno['permissoes'] = permissoes
        return HttpResponse(json.dumps(retorno),
                            content_type="application/json")

    if promocoes and permissoes:

        response = HttpResponse(content_type='application/pdf')
        response[
            'Content-Disposition'] = 'inline; filename="tabela_de_precos.pdf"'

        documento = canvas.Canvas(response)

        empresa = Empresas.objects.get(id=usuario.empresa.id)

        linha = 0
        cont = 0
        for index in promocoes:

            if cont == 0:
                linha = 820
                documento.setFont("Helvetica", 12)
                documento.drawString(20, linha, empresa.nome_fantasia.upper())
                linha -= 20
                data = datetime.now()
                documento.drawString(
                    20, linha,
                    'ATENÇÃO!!!: Fique atento as datas de início e fim de cada promoção...'
                )
                linha = 780
                documento.setFont("Helvetica", 10)
                documento.drawString(20, linha - 2, 'CÓDIGO')
                documento.drawString(120, linha - 2, 'DESCRIÇÃO DO PRODUTO')
                documento.drawString(290, linha - 2, 'PREÇO')
                documento.drawString(350, linha - 2, 'DESC')
                documento.drawString(400, linha - 2, 'PROMOÇÃO')
                documento.drawString(480, linha - 2, 'INÍCIO')
                documento.drawString(530, linha - 2, 'FIM')
                documento.line(15, linha - 4, 580, linha - 4)
                linha -= 15
            promocao = (index.produto_promocao.preco_venda -
                        index.preco_venda_promocao)
            documento.setFont("Helvetica", 8)
            documento.drawString(20, linha,
                                 str(index.produto_promocao.codigo_barras))
            documento.drawString(
                120, linha,
                str(index.produto_promocao.descricao_simplificada + ' (' +
                    index.produto_promocao.unidade_medida + ')').upper())
            documento.drawString(
                290, linha,
                'R$ ' + str('%0.02f' % index.produto_promocao.preco_venda))
            documento.drawString(350, linha, 'R$ ' + str('%0.02f' % promocao))
            documento.drawString(
                400, linha, 'R$ ' + str('%0.02f' % index.preco_venda_promocao))
            documento.drawString(
                480, linha, str(index.inicio_promocao.strftime('%d/%m/%Y')))
            documento.drawString(530, linha,
                                 str(index.fim_promocao.strftime('%d/%m/%Y')))

            documento.line(15, linha - 4, 580, linha - 4)
            linha -= 15
            cont += 1

            if cont == 50:
                documento.showPage()
                cont = 0

        documento.showPage()
        documento.save()
        return response
    elif not permissoes:
        return HttpResponseRedirect('/logout/')
Example #19
0
def finalizar_compra(request):
    titulo = 'FINALIZANDO COMPRA...'
    mensagem = ''
    fornecedor = 0
    registro = {}
    p = {}
    compra = {}
    itens = {}
    erro = 0
    id_compra = 0
    id_conta = 0
    info = 0
    alerta = 0
    valortotal = 0
    sucesso = 0
    retorno = {}
    usuario = Usuarios.objects.get(usuario=request.user.id)
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.finaliza_compra:
        if request.method == 'GET':
            id_conta = int(request.GET.get('id_conta') or 0)
            id_compra = int(request.GET.get('id_compra') or 0)
        elif request.method == 'POST':
            id_conta = int(request.POST.get('id_conta') or 0)
            id_compra = int(request.POST.get('id_compra') or 0)

        if id_compra > 0:
            compra = Compras.objects.get(id=id_compra)
            fornecedor = compra.fornecedor.id
            itens = EntradaProdutos.objects.filter(compra=compra.id,
                                                   status_entrada='LANCADO')
            if id_conta > 0:
                conta = ContasPagar.objects.get(id=int(id_conta))
            else:
                conta = None

            if request.method == 'POST':
                form = FormContasPagar(deserialize_form(
                    request.POST.get('form')),
                                       instance=conta)

                if form.is_valid():
                    registro = form.save(commit=False)

                    if itens:
                        valortotal = 0
                        for item in itens:
                            valortotal = valortotal + item.total

                        compra.valor_total = valortotal
                        compra.status_compra = 'LANCADO'

                        registro.usuario = request.user
                        registro.empresa = usuario.empresa
                        registro.status_conta = 'PENDENTE'
                        registro.data_vencimento = datetime.now()
                        registro.documento_vinculado = compra.id
                        registro.valor_conta = compra.valor_total
                        registro.descricao = 'Pagamento referente a compra 000' + str(
                            compra.id)

                        if registro.valor_entrada < compra.valor_total:
                            if registro.forma_de_pagamento == 'A VISTA' and registro.valor_entrada == 0.0 or \
                                            registro.forma_de_pagamento == 'A PRAZO':

                                registro.save()
                                conta = ContasPagar.objects.get(id=registro.id)
                                id_conta = conta.id
                                compra.pagamento = conta
                                compra.save()

                                if registro.valor_entrada > 0:
                                    pgtos = None
                                    frm = FormPagamentos(instance=pgtos)
                                    p = frm.save(commit=False)
                                    p.conta_id = registro.id
                                    p.empresa = registro.empresa
                                    p.usuario = request.user
                                    p.meio_pagamento = registro.meio_de_pagamento
                                    p.data_pagamento = datetime.now()
                                    p.data_vencimento = datetime.now()
                                    p.valor_pagamento = registro.valor_entrada
                                    p.status_pagamento = 'PAGO'
                                    registro.status_conta = 'PARCIALMENTE PAGO'
                                    p.observacoes_pagamento = 'Pago como entrada no ato da compra.'
                                    registro.save()
                                    p.save()

                                if registro.forma_de_pagamento == 'A VISTA':
                                    pgtos = None
                                    frm = FormPagamentos(instance=pgtos)
                                    p = frm.save(commit=False)
                                    p.empresa = registro.empresa
                                    p.usuario = request.user
                                    p.meio_pagamento = registro.meio_de_pagamento
                                    p.conta_id = registro.id
                                    p.data_pagamento = datetime.now()
                                    p.data_vencimento = datetime.now()
                                    p.valor_pagamento = compra.valor_total
                                    p.status_pagamento = 'PAGO'
                                    registro.status_conta = 'PAGO'
                                    registro.status_conta = 'PAGO'
                                    registro.quantidade_parcelas = 0
                                    p.meio_pagamento = registro.meio_de_pagamento
                                    p.observacoes_pagamento = 'Pagamento realizado no ato da compra.'
                                    p.save()
                                    registro.save()

                                if registro.forma_de_pagamento == 'A PRAZO':
                                    data = registro.primeiro_vencimento
                                    restante = int(
                                        registro.quantidade_parcelas)
                                    for ps in range(0, restante):
                                        pgtos = None
                                        frm = FormPagamentos(instance=pgtos)
                                        p = frm.save(commit=False)
                                        p.conta_id = registro.id
                                        if ps == 0:
                                            vencimento = datetime.fromordinal(
                                                data.toordinal())
                                        else:
                                            vencimento = datetime.fromordinal(
                                                data.toordinal() + 31 * ps)
                                        p.empresa = registro.empresa
                                        p.usuario = request.user
                                        p.data_vencimento = vencimento
                                        p.valor_pagamento = (
                                            compra.valor_total -
                                            registro.valor_entrada) / restante
                                        p.status_pagamento = 'PENDENTE'
                                        p.meio_pagamento = registro.meio_de_pagamento
                                        p.observacoes_pagamento = \
                                            'Pagamento programado conforme informações coletadas nafinalização da compra.'
                                        p.save()

                                mensagem = 'Compra finalizada com sucesso!!!'
                                sucesso = 1

                            elif registro.forma_de_pagamento == 'A VISTA' and registro.valor_entrada != 0.0:
                                mensagem = 'Tratando se de um pagamento á vista, o valor da entrada deve ser sempre 0,00'
                                erro = 1

                        elif registro.valor_entrada >= compra.valor_total:
                            mensagem = '''Tratando-se de um pagamento a prazo, a  entrada não pode ser igual nem superior
                            ao valor total da compra'''
                            erro = 1

                    else:
                        mensagem = 'Não foi possível finalizar a compra, pois não foi vendido nenhum ítem...'
                        erro = 1

                else:
                    form_erro = []
                    for error in form.errors:
                        form_erro += {error}

                    retorno['form_erro'] = form_erro
                    titulo = 'ERRO NA VALIDAÇÃO DOS DADOS...'
                    mensagem = 'Por favor, corrija os campos listados em vermelho e tente novamente...'
            else:

                if itens:
                    valortotal = 0
                    for item in itens:
                        valortotal = valortotal + item.total
        else:
            mensagem = mensagem_erro_padrao()
            titulo = titulo_mensagem_erro_padrao()
            erro = 1
    else:
        mensagem = mensagem_permissao_negada()
        titulo = titulo_mensagem_permissao_negada()
        erro = 1

    retorno['sucesso'] = sucesso
    retorno['erro'] = erro
    retorno['info'] = info
    retorno['id_conta'] = id_conta
    retorno['alerta'] = alerta
    retorno['mensagem'] = mensagem
    retorno['titulo'] = titulo
    retorno['valor_total'] = str(valortotal)
    retorno['method'] = request.method
    retorno['favorecido'] = str(fornecedor)
    retorno['data_atual'] = str(datetime.now().strftime('%Y-%m-%d'))

    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #20
0
def buscar_produto(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    produto = Produtos.objects.filter(id=0)
    codigo_barras = request.GET.get('codigo_barras') or ''
    id_entrada = int(request.GET.get('id_entrada') or 0)
    id_produto = int(request.GET.get('id_produto') or 0)
    id_compra = int(request.GET.get('id_compra') or 0)
    campos = {}
    if id_entrada > 0:
        if not usuario.permissoes.administrador and not usuario.permissoes.administrador_super and not usuario.permissoes.edita_entrada_produto:
            retorno['permissao_negada'] = 1
            retorno['titulo'] = titulo_mensagem_permissao_negada()
            retorno['mensagem'] = mensagem_permissao_negada()
            return HttpResponse(json.dumps(retorno),
                                content_type="application/json")

        entrada = EntradaProdutos.objects.filter(id=id_entrada)
        if entrada:
            entrada = EntradaProdutos.objects.get(id=id_entrada)
            produto = Produtos.objects.get(id=entrada.produto.id)
            form = FormEntradaProdutos(instance=entrada)
            for campo in form.fields:
                if campo in form.initial:
                    campos[form.auto_id % campo] = str(form.initial[campo])

    elif id_produto > 0:
        produto = Produtos.objects.filter(id=id_produto,
                                          empresa=usuario.empresa.id,
                                          status='ATIVO')
        if produto:
            produto = Produtos.objects.get(id=id_produto)

    elif codigo_barras != '':
        produto = Produtos.objects.filter(codigo_barras=codigo_barras,
                                          empresa=usuario.empresa.id,
                                          status='ATIVO')
        if produto:
            produto = Produtos.objects.get(codigo_barras=codigo_barras,
                                           empresa=usuario.empresa.id,
                                           status='ATIVO')

    if produto:
        retorno['sucesso'] = 1
        titulo = 'BUSCANADO PRODUTO...'
        mensagem = 'Busca efetuada com sucesso!!!'
        retorno['id'] = produto.id
        retorno['estoque_atual'] = produto.estoque_atual
        retorno['status'] = produto.status
        retorno['codigo_barras'] = produto.codigo_barras
        retorno['preco_venda'] = str(produto.preco_venda)
        retorno['valor_compra'] = str(produto.valor_compra)
        retorno['estoque_atual'] = str(produto.estoque_atual)
        retorno['descricao_simplificada'] = produto.descricao_simplificada
        retorno['unidade_medida'] = produto.unidade_medida
        retorno['categoria'] = str(produto.categoria_produto)
        retorno['estoque_minimo'] = str(produto.estoque_minimo)
        retorno['estoque_maximo'] = str(produto.estoque_maximo)
        retorno['fracionar_produto'] = produto.fracionar_produto
        retorno['id_embalagem_fechada'] = str(produto.id_embalagem_fechada)
        retorno['desconto_maximo'] = str(produto.desconto_maximo)
        retorno['atacado_apartir'] = str(produto.atacado_apartir)
        retorno['atacado_desconto'] = str(produto.atacado_desconto)
        retorno['empresa'] = str(produto.empresa)
        retorno['marca'] = str(produto.marca_produto)
        retorno['status'] = produto.status
        retorno['mensagem'] = mensagem
        retorno['titulo'] = titulo
        retorno['quantidade_embalagem_fechada'] = 0
        retorno['estoque_embalagem_fechada'] = 0
        retorno['campos'] = campos
        retorno['id_entrada'] = id_entrada

    else:
        retorno['alerta'] = 1
        retorno['titulo'] = 'PRODUTO NÃO CADASTRADO...'
        retorno[
            'mensagem'] = '''Não encontramos registros deste produto em nosso sistema,
                            se já o cadastrou, verifique se seu státus está ativo, se não, cadastre-o...'''

    return HttpResponse(json.dumps(retorno), content_type="application/json")
Example #21
0
def cadastrar_colaborador(request):
    colaborador_id = request.POST.get('id')
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    sucesso = {}
    erro = []
    if colaborador_id != '0':
        if not usuario.permissoes.administrador and not usuario.permissoes.administrador_super and not usuario.permissoes.edita_colaborador:
            sucesso['negado'] = 1
            sucesso['mensagem'] = mensagem_permissao_negada()
            sucesso['titulo'] = titulo_mensagem_permissao_negada()
            retorno = json.dumps(sucesso)
            return HttpResponse(retorno, content_type="application/json")
        else:
            colaborador = Colaboradores.objects.get(id=int(colaborador_id))
    else:
        colaborador = None
        if not usuario.permissoes.administrador and not usuario.permissoes.administrador_super and not usuario.permissoes.cadastra_colaborador:
            sucesso['negado'] = 1
            sucesso['mensagem'] = mensagem_permissao_negada()
            sucesso['titulo'] = titulo_mensagem_permissao_negada()
            retorno = json.dumps(sucesso)
            return HttpResponse(retorno, content_type="application/json")

    if request.method == 'POST':
        form = deserialize_form(request.POST.get('form'))
        form = FormCadastroColaboradores(form, instance=colaborador)
        if form.is_valid():
            registro = form.save(commit=False)
            registro.nome = NORMALIZAR(registro.nome)
            registro.sobre_nome = NORMALIZAR(registro.sobre_nome)
            if not colaborador_id != '0':
                registro.empresa = usuario.empresa
                registro.id_usuario = request.user.id
                titulo_mensagem = 'SALVANDO REGISTRO...'
                mensagem = 'O registro foi salvo com sucesso !!!'
            else:
                titulo_mensagem = 'ALTERANDO REGISTRO...'
                mensagem = 'O registro foi alterado com sucesso!!!'

            registro.save()

            sucesso['success'] = True
            sucesso['mensagem'] = mensagem
            sucesso['id'] = registro.id
            sucesso['titulo'] = titulo_mensagem
            retorno = json.dumps(sucesso)

        else:

            for error in form.errors:
                erro += {error}

            titulo_mensagem = 'ERRO NA VALIDAÇÃO DOS DADOS . . .'
            mensagem = '''O formulário apresentou erros no seu preenchimento.
                       Corrija os campos listados em vermelho e tente novamente. . .'''

            retorno = json.dumps({
                'titulo': titulo_mensagem,
                'mensagem': mensagem,
                'erro': erro,
            })
    return HttpResponse(retorno, content_type="application/json")
Example #22
0
def busca_produto(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    produto = Produtos.objects.filter(id=0)
    codigo_barras = request.GET.get('codigo_barras') or ''
    id_saida = int(request.GET.get('id_saida') or 0)
    id_produto = int(request.GET.get('id_produto') or 0)
    id_venda = int(request.GET.get('id_venda') or 0)
    saida = {}
    campos = {}
    venda = {}
    tabela_preco = {}
    preco_promocional = 0
    preco_tabelado = 0
    promocao = {}
    observacoes = ''
    if id_saida > 0:
        if not usuario.permissoes.administrador and not usuario.permissoes.administrador_super and not usuario.permissoes.edita_saida_produto:
            retorno['permissao_negada'] = 1
            retorno['titulo'] = titulo_mensagem_permissao_negada()
            retorno['mensagem'] = mensagem_permissao_negada()
            return HttpResponse(json.dumps(retorno),
                                content_type="application/json")
        try:
            if usuario.permissoes.edita_saida_produto:
                saida = SaidaProdutos.objects.get(id=id_saida)
                produto = Produtos.objects.get(id=saida.produto.id,
                                               empresa=saida.empresa,
                                               status='ATIVO')

            if usuario.permissoes.administrador:
                saida = SaidaProdutos.objects.get(id=id_saida,
                                                  empresa=usuario.empresa)
                produto = Produtos.objects.get(id=saida.produto.id,
                                               empresa=saida.empresa,
                                               status='ATIVO')

            if usuario.permissoes.administrador_super:
                saida = SaidaProdutos.objects.get(id=id_saida)
                produto = Produtos.objects.get(id=saida.produto.id,
                                               empresa=saida.empresa,
                                               status='ATIVO')

            form = FormSaidaProdutos(instance=saida)
            for campo in form.fields:
                if campo in form.initial:
                    campos[form.auto_id % campo] = str(form.initial[campo])
        except:
            retorno['erro'] = 1
            retorno['titulo'] = 'PRODUTO NÃO ENCONTRADO...'
            retorno[
                'mensagem'] = '''Não pudemos acessar o registro deste produto,
                    certamente ele não está mais ativo...''' + traceback.format_exc(
                )
            return HttpResponse(json.dumps(retorno),
                                content_type="application/json")

    elif id_produto > 0:
        try:
            produto = Produtos.objects.get(id=id_produto,
                                           empresa=usuario.empresa,
                                           status='ATIVO')
        except:
            retorno['alerta'] = 1
            retorno['titulo'] = 'PRODUTO NÃO CADASTRADO...'
            retorno[
                'mensagem'] = '''Não encontramos registros deste produto em nosso sistema,
                                se já o cadastrou, verifique se seu státus está ativo, se não, cadastre-o...'''
            return HttpResponse(json.dumps(retorno),
                                content_type="application/json")

    elif codigo_barras != '':
        try:
            produto = Produtos.objects.get(codigo_barras=codigo_barras,
                                           empresa=usuario.empresa,
                                           status='ATIVO')
        except:
            retorno['alerta'] = 1
            retorno['titulo'] = 'PRODUTO NÃO CADASTRADO...'
            retorno[
                'mensagem'] = '''Não encontramos registros deste produto em nosso sistema,
                                se já o cadastrou, verifique se seu státus está ativo, se não, cadastre-o...'''
            return HttpResponse(json.dumps(retorno),
                                content_type="application/json")

    if produto:
        if id_venda > 0:
            venda = Vendas.objects.get(id=id_venda)
            tabela_preco = TabelaPrecos.objects.filter(produto=produto,
                                                       cliente=venda.cliente,
                                                       status_preco='ATIVO')
            promocao = PrecosPomocionais.objects.filter(
                produto_promocao=produto, status_promocao='ATIVO')
        if tabela_preco:
            tabela_preco = TabelaPrecos.objects.get(produto=produto,
                                                    cliente=venda.cliente,
                                                    status_preco='ATIVO')
            percentual = float(tabela_preco.percentual)
            preco_venda = tabela_preco.preco_venda
            desconto_maximo = 0
            preco_tabelado = 1
            observacoes = 'Produto vendido conforme tabela de preços do cliente.'
        else:
            percentual = produto.percentual_lucro
            preco_venda = produto.preco_venda
            desconto_maximo = produto.desconto_maximo
        if promocao:
            promocao = PrecosPomocionais.objects.get(produto_promocao=produto,
                                                     status_promocao='ATIVO')
            if promocao.preco_venda_promocao < preco_venda and promocao.fim_promocao.toordinal(
            ) >= datetime.now().toordinal():
                percentual = 0
                preco_venda = produto.preco_venda
                desconto_maximo = promocao.percentual_desconto
                preco_promocional = 1
                observacoes = 'Foi aplicado desconto de: ' + str(
                    promocao.percentual_desconto
                ) + '%, referente a promoção vigente.'
        retorno['sucesso'] = 1
        titulo = 'BUSCANADO PRODUTO...'
        mensagem = 'Busca efetuada com sucesso!!!'
        retorno['id'] = produto.id
        retorno['estoque_atual'] = produto.estoque_atual
        retorno['status'] = produto.status
        retorno['codigo_barras'] = produto.codigo_barras
        retorno['preco_venda'] = str(preco_venda)
        retorno['valor_compra'] = str(produto.valor_compra)
        retorno['estoque_atual'] = str(produto.estoque_atual)
        retorno['descricao_simplificada'] = produto.descricao_simplificada
        retorno['unidade_medida'] = produto.unidade_medida
        retorno['categoria'] = str(produto.categoria_produto)
        retorno['estoque_minimo'] = str(produto.estoque_minimo)
        retorno['estoque_maximo'] = str(produto.estoque_maximo)
        retorno['fracionar_produto'] = produto.fracionar_produto
        retorno['id_embalagem_fechada'] = str(produto.id_embalagem_fechada)
        retorno['percentual_lucro'] = str(percentual)
        retorno['desconto_maximo'] = str(desconto_maximo)
        retorno['atacado_apartir'] = str(produto.atacado_apartir)
        retorno['atacado_desconto'] = str(produto.atacado_desconto)
        retorno['empresa'] = str(produto.empresa)
        retorno['status'] = produto.status
        retorno['mensagem'] = mensagem
        retorno['titulo'] = titulo
        retorno['quantidade_embalagem_fechada'] = 0
        retorno['estoque_embalagem_fechada'] = 0
        retorno['campos'] = campos
        retorno['id_saida'] = id_saida
        retorno['preco_tabelado'] = preco_tabelado
        retorno['preco_promocional'] = preco_promocional
        retorno['observacoes'] = observacoes
        if produto.id_embalagem_fechada > 0:
            try:
                embalagem_fechada = Produtos.objects.get(
                    pk=produto.id_embalagem_fechada, empresa=usuario.empresa)
                retorno['quantidade_embalagem_fechada'] = str(
                    embalagem_fechada.quantidade_embalagem_fechada)
                retorno['estoque_embalagem_fechada'] = str(
                    embalagem_fechada.estoque_atual)
            except:
                retorno['erro'] = 1
                retorno['titulo'] = 'PRODUTO CADASTRADO INCORRETAMENTE'
                retorno['mensagem'] = '''Há um erro no cadasto deste produto,
                        o mesmo deverá ser corrigido imediatamente. É impossível efetuar a venda,
                        ou mesmo alterações de vendas já realizadas...'''
                return HttpResponse(json.dumps(retorno),
                                    content_type="application/json")

    else:
        retorno['alerta'] = 1
        retorno['titulo'] = 'PRODUTO NÃO CADASTRADO...'
        retorno[
            'mensagem'] = '''Não encontramos registros deste produto em nosso sistema,
                            se já o cadastrou, verifique se seu státus está ativo, se não, cadastre-o...'''

    return HttpResponse(json.dumps(retorno), content_type="application/json")
def tabela_precos_pdf(request):
    usuario = Usuarios.objects.get(usuario=request.user.id)
    retorno = {}
    permissoes = 0
    if usuario.status != 'ATIVO' or usuario.permissoes.status != 'ATIVO' or usuario.empresa.status != 'ATIVO':
        return HttpResponseRedirect('/logout/')

    tabela = TabelaPrecos.objects.filter(
        empresa=usuario.empresa).order_by('-preco_venda')
    if usuario.permissoes.administrador_super or usuario.permissoes.administrador or usuario.permissoes.acessa_tabela_de_precos:
        permissoes = 1

    if 'verifica_permissoes' in request.GET and request.GET[
            'verifica_permissoes']:

        if permissoes == 0:
            retorno['mensagem'] = mensagem_permissao_negada()
            retorno['titulo'] = titulo_mensagem_permissao_negada()
            retorno['erro'] = 1
        elif permissoes == 1 and not tabela:
            retorno[
                'mensagem'] = 'Não há nenhum produto tabelado para nenhum cliente da empresa ' + str(
                    usuario.empresa.razao_social) + '...'
            retorno['titulo'] = 'NENHUM REGISTRO ENCONTRADO...'
            retorno['info'] = 1
        elif permissoes and tabela:
            retorno['permissoes'] = permissoes
        return HttpResponse(json.dumps(retorno),
                            content_type="application/json")

    if tabela and permissoes:

        response = HttpResponse(content_type='application/pdf')
        response[
            'Content-Disposition'] = 'inline; filename="tabela_de_precos.pdf"'

        documento = canvas.Canvas(response)

        empresa = Empresas.objects.get(id=usuario.empresa.id)

        linha = 0
        cont = 0
        for index in tabela:

            if cont == 0:
                linha = 820
                documento.setFont("Helvetica", 12)
                documento.drawString(
                    20, linha, 'Fornecedor: ' + empresa.nome_fantasia.upper())
                linha -= 20
                data = datetime.now()
                vencimento = datetime.fromordinal(data.toordinal() +
                                                  10).strftime('%d/%m/%Y')
                documento.drawString(
                    20, linha, 'Tabela válida até ' + vencimento +
                    ' ,ou, enquanto durarem os nossos estoques.')
                linha = 780
                documento.setFont("Helvetica", 10)
                documento.drawString(20, linha - 2, 'CÓDIGO DE BARRAS')
                documento.drawString(130, linha - 2, 'DESCRIÇÃO DO PRODUTO')
                documento.drawString(330, linha - 2, 'PREÇO')
                documento.drawString(380, linha - 2, 'CLIENTE')
                documento.line(15, linha - 4, 580, linha - 4)
                linha -= 15

            documento.setFont("Helvetica", 8)
            documento.drawString(20, linha, str(index.produto.codigo_barras))
            documento.drawString(
                130, linha,
                str(index.produto.descricao_simplificada + ' (' +
                    index.produto.unidade_medida + ')').upper())
            documento.drawString(330, linha, 'R$ ' + str(index.preco_venda))
            documento.drawString(380, linha,
                                 str(index.cliente.nome_razao_social))
            documento.line(15, linha - 4, 580, linha - 4)
            linha -= 15
            cont += 1

            if cont == 50:
                documento.showPage()
                cont = 0

        documento.showPage()
        documento.save()
        return response
    elif not permissoes:
        return HttpResponseRedirect('/logout/')