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")
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')
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")
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")
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 + '/')
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")
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')
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")
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")
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(), )
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")
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")
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')
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/')
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")
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")
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")
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/')