def relatorioAReceber(request): user = request.user if (request.method == 'POST'): inicio = request.POST['inicio'] fim = request.POST['fim'] status = request.POST['status'] #converte as datas em objetos datetime para fazer o filtro data_inicio = datetime.strptime(inicio, "%d/%m/%Y") data_fim = datetime.strptime(fim, "%d/%m/%Y") if (status == 'abertas'): contas = ContasAReceber.objects.filter( data__gte=data_inicio, data__lte=data_fim).filter(user=user).filter(recebido=False) elif (status == 'recebidas'): contas = ContasAReceber.objects.filter( data__gte=data_inicio, data__lte=data_fim).filter(user=user).filter(recebido=True) elif (status == 'vencidas'): contas = ContasAReceber.objects.filter( data__gte=data_inicio, data__lt=datetime.now()).filter( user=user).filter(recebido=False) contasJson = serializers.serialize('json', contas, use_natural_foreign_keys=True, use_natural_primary_keys=True) return HttpResponse(contasJson, content_type="application/json") template = 'relatorio/relatorio_contas_a_receber.html' contexto = {} #busca o saldo de Caixa do usuario e atribui ao contexto saldoC = SaldoCaixa.objects.get(user=user) contexto['saldoCaixa'] = saldoC.saldoAtual #para saldo de cada agencia agencias = ContaBanco.objects.filter(user=user) contexto['agencias'] = agencias #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) contexto['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') contexto['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') contexto['formLancCredito'] = formCredito userProfile = UsuarioProfile.objects.get(user=request.user) contexto['profile'] = userProfile return render(request, template, contexto)
def lancamentos(request): #id do usuario logado id_user = request.user.id if (request.method == 'POST'): mes = request.POST.get('mes') ano = request.POST.get('ano') lancamentos = LancamentosCaixa.objects.filter(data__month=mes).filter( data__year=ano).filter(user_id=id_user) if (len(lancamentos) != 0): lancJson = serializers.serialize('json', lancamentos, use_natural_foreign_keys=True, use_natural_primary_keys=True) return HttpResponse(lancJson, content_type="application/json") else: return HttpResponseServerError("Nenhum lançamento foi encontrado.") #armazena a data atual hoje = datetime.today() saldo = 0 template = 'caixa/caixa.html' #seleciona os lancamentos do mes atual lancamentos = LancamentosCaixa.objects.filter( data__month=hoje.month).filter(data__year=hoje.year).filter( user_id=id_user) contexto = {'lancamentos': lancamentos} #busca o saldo de Caixa do usuario e atribui ao contexto saldoC = SaldoCaixa.objects.get(user=request.user) contexto['saldoCaixa'] = saldoC.saldoAtual #para saldo de cada agencia agencias = ContaBanco.objects.filter(user=request.user) contexto['agencias'] = agencias #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) contexto['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') contexto['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') contexto['formLancCredito'] = formCredito userProfile = UsuarioProfile.objects.get(user=request.user) contexto['profile'] = userProfile return render(request, template, contexto)
def categoria(request): form = CategoriaForm() if (request.method == 'POST'): form = CategoriaForm(request.POST) if (form.is_valid()): categoria = form.save(commit=False) categoria.user = request.user categoria.save() messages.success( request, "Categoria " + categoria.descricao + " adicionada com sucesso!") return HttpResponseRedirect(reverse('caixa:categoria')) else: messages.warning(request, "Formulário inválido") user = request.user template = 'caixa/categoria.html' catEntrada = Categoria.objects.filter(tipo=1).filter(user=user) catSaida = Categoria.objects.filter(tipo=2).filter(user=user) contexto = {'catEntrada': catEntrada, 'catSaida': catSaida, 'form': form} #busca o saldo de Caixa do usuario e atribui ao contexto saldoC = SaldoCaixa.objects.get(user=user) contexto['saldoCaixa'] = saldoC.saldoAtual #para saldo de cada agencia agencias = ContaBanco.objects.filter(user=user) contexto['agencias'] = agencias #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) contexto['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') contexto['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') contexto['formLancCredito'] = formCredito userProfile = UsuarioProfile.objects.get(user=user) contexto['profile'] = userProfile return render(request, template, contexto)
def cadastroBanco(request): user = request.user form_agencia = ContaBancoForm() if (request.method == 'POST'): form_agencia = ContaBancoForm(request.POST) if (form_agencia.is_valid()): bancos = form_agencia.save(commit=False) bancos.user = user bancos.save() messages.success(request, 'Agência cadastrada com sucesso.') return HttpResponseRedirect(reverse('banco:agencia')) else: messages.warning(request, "Formulário inválido") template = 'banco/agencia.html' agencias = ContaBanco.objects.filter(user=user).exclude( tipo=ContaBanco.CARTAO_DE_CREDITO) credito = ContaBanco.objects.filter(user=user).filter( tipo=ContaBanco.CARTAO_DE_CREDITO) contexto = {'form': form_agencia, 'agencias': agencias, 'credito': credito} #busca o saldo de Caixa do usuario e atribui ao contexto saldoC = SaldoCaixa.objects.get(user=user) contexto['saldoCaixa'] = saldoC.saldoAtual userProfile = UsuarioProfile.objects.get(user=user) contexto['profile'] = userProfile #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) contexto['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') contexto['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') contexto['formLancCredito'] = formCredito return render(request, template, contexto)
def contasAPagar(request): user = request.user form = ContasAPagarForm() if(request.method == 'POST'): form = ContasAPagarForm(request.POST) try: parcelas = int(request.POST.get('parcelas')) except ValueError as error: messages.warning(request, 'A quantidade de parcelas é inválida.') return HttpResponseRedirect(reverse('contas_a_pagar:index')) if(parcelas < 1 or parcelas > form.PARCELAS): messages.warning(request, 'A quantidade de parcelas é inválida.') return HttpResponseRedirect(reverse('contas_a_pagar:index')) if(form.is_valid()): contaPagar = form.save(commit = False) contaPagar.user = request.user contaPagar.paga = False parcela1 = "" mensagem = contaPagar.descricao if(parcelas > 1): parcela1 = " 1/" + str(parcelas) for x in range(1, parcelas): novaParcela = ContasAPagar() novaParcela.data = contaPagar.data + datedelta.datedelta(months = x) novaParcela.categoria = contaPagar.categoria novaParcela.descricao = contaPagar.descricao + " " + str(x + 1) + "/" + str(parcelas) novaParcela.valor = contaPagar.valor novaParcela.paga = False novaParcela.user = request.user novaParcela.save() contaPagar.descricao += parcela1 contaPagar.save() messages.success(request, "Conta " + mensagem + " adicionada com sucesso!") return HttpResponseRedirect(reverse('contas_a_pagar:index')) else: messages.warning(request, "Formulário inválido") template = 'contas_a_pagar/contas_a_pagar.html' contas = ContasAPagar.getCurrentMmonthAccounts(user) form.getAddCPForm(request) context = {'contPagar': contas, 'contPagarForm': form} #busca o saldo na carteira do usuario e atribui ao contexto saldoC = SaldoCaixa.objects.get(user = user) context['saldoCaixa'] = saldoC.saldoAtual #para saldo de cada agencia agencias = ContaBanco.objects.filter(user = user) context['agencias'] = agencias #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) context['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') context['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') context['formLancCredito'] = formCredito userProfile = UsuarioProfile.objects.get(user = user) context['profile'] = userProfile return render(request, template, context)
def config(request): id_user = request.user.id template = 'config/config.html' contexto = {} user = User.objects.get(pk=id_user) formSenha = PasswordChangeForm(user=request.user) formDados = EditAccountsForm(instance=request.user) formUser = UsuarioProfileForm() contexto['formUser'] = formUser #Editar if (request.method == 'POST'): if (request.POST.get('old_password')): formSenha = PasswordChangeForm(data=request.POST, user=request.user) if formSenha.is_valid(): formSenha.save() formSenha = PasswordChangeForm(user=request.user) messages.success(request, "Senha alterada com sucesso!") elif (request.FILES): userProfile = UsuarioProfile.objects.get(user=request.user) form = UsuarioProfileForm(request.POST, request.FILES, instance=userProfile) if (form.is_valid()): form.save() messages.success(request, "Imagem alterada com sucesso!") elif (request.POST.get('mail_contas_a_pagar')): lista = request.POST.getlist('mail_contas_a_pagar') userProfile = UsuarioProfile.objects.get(user=request.user) if (not userProfile.mail_contas_a_pagar and (lista[0] == 'on')): userProfile.mail_contas_a_pagar = True userProfile.save() elif (userProfile.mail_contas_a_pagar and (lista[0] == '0')): userProfile.mail_contas_a_pagar = False userProfile.save() messages.success(request, "Alerta alterado com sucesso!") else: #form = UsuarioProfileForm(request.POST, request.FILES) formDados = EditAccountsForm(request.POST, instance=request.user) if formDados.is_valid(): formDados.save() formDados = EditAccountsForm(instance=request.user) formDados.fields['username'].widget.attrs.update( {'readonly': 'readonly'}) #não permite que o usuário altere o username messages.success(request, "Usuário alterado com sucesso!") formSenha.fields['old_password'] = forms.CharField( label='Senha atual', max_length=32, required=True, widget=forms.PasswordInput(attrs={ 'class': 'form-control', 'placeholder': 'Senha atual', })) formSenha.fields['new_password1'] = forms.CharField( label='Nova senha', max_length=32, required=True, widget=forms.PasswordInput(attrs={ 'class': 'form-control', 'placeholder': 'Nova senha', })) formSenha.fields['new_password2'] = forms.CharField( label='Confirmaçao da nova senha', max_length=32, required=True, widget=forms.PasswordInput(attrs={ 'class': 'form-control', 'placeholder': 'Confirme a senha', })) #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) contexto['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') contexto['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') contexto['formLancCredito'] = formCredito contexto['formConfig'] = formDados contexto['formSenha'] = formSenha userProfile = UsuarioProfile.objects.get(user=request.user) contexto['profile'] = userProfile #busca o saldo de Caixa do usuario e atribui ao contexto saldoC = SaldoCaixa.objects.get(user=request.user) contexto['saldoCaixa'] = saldoC.saldoAtual #para saldo de cada agencia agencias = ContaBanco.objects.filter(user=request.user) contexto['agencias'] = agencias contexto['isPerfil'] = True contexto['userProfile'] = userProfile return render(request, template, contexto)
def home(request): template = 'principal/home.html' context = {} user = request.user userProfile = UsuarioProfile.objects.get(user=user) context['profile'] = userProfile locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8') if 'data' in request.session: data = datetime.strptime(request.session.get('data'), "%Y-%m-%d %H-%M-%S") else: data = datetime.today() if (request.method == 'POST' and 'mes' in request.POST): tipo_mes = request.POST.get('mes') if (tipo_mes == 'anterior'): data = data - relativedelta(months=1) else: data = data + relativedelta(months=1) request.session['data'] = data.strftime("%Y-%m-%d %H-%M-%S") return redirect('principal:home') total_credito_entradas = 0 total_credito_saidas = 0 total_entradas = 0 total_saidas = 0 total_metas = 0 entradas_array = [] saidas_array = [] #calcula total de entradas banco_entrada = ContaBanco.getLancamentosGroupByCategoria( user, data, 'entrada', 'banco') for b in banco_entrada: entradas_array.append(b) total_entradas += b['valor'] caixa_entrada = LancamentosCaixa.getLancamentosGroupByCategoria( user, data, 'entrada') for c in caixa_entrada: descricao_categoria = "" for b in entradas_array: if (c['categoria__descricao'] == b['categoria__descricao']): b['quantidade'] += c['quantidade'] b['valor'] += c['valor'] descricao_categoria = c['categoria__descricao'] break if (c['categoria__descricao'] != descricao_categoria): entradas_array.append(c) total_entradas += c['valor'] #calcula total de saidas banco_saida = ContaBanco.getLancamentosGroupByCategoria( user, data, 'saida', 'banco') for b in banco_saida: saidas_array.append(b) total_saidas += b['valor'] caixa_saida = LancamentosCaixa.getLancamentosGroupByCategoria( user, data, 'saida') for c in caixa_saida: descricao_categoria = "" for b in saidas_array: if (c['categoria__descricao'] == b['categoria__descricao']): b['quantidade'] += c['quantidade'] b['valor'] += c['valor'] descricao_categoria = c['categoria__descricao'] break if (c['categoria__descricao'] != descricao_categoria): saidas_array.append(c) total_saidas += c['valor'] #calcula total de lançamentos do cartão de crédito cartao_credito_saidas = ContaBanco.getLancamentosGroupByCategoria( user, data, 'saida', 'credito') cartao_credito_entradas = ContaBanco.getLancamentosGroupByCategoria( user, data, 'entrada', 'credito') for cre in cartao_credito_entradas: total_credito_entradas += cre['valor'] for cr in cartao_credito_saidas: total_credito_saidas += cr['valor'] context['total_entradas'] = locale.currency(total_entradas, grouping=True, symbol=None) context['total_saidas'] = locale.currency(total_saidas, grouping=True, symbol=None) context['total_credito_saidas'] = locale.currency(total_credito_saidas, grouping=True, symbol=None) context['total_credito_entradas'] = locale.currency(total_credito_entradas, grouping=True, symbol=None) context['saldo'] = locale.currency(total_entradas - total_saidas, grouping=True, symbol=None) contas_abertas = ContasAPagar.objects.filter( data__month__lte=data.month).filter(data__year__lte=data.year).filter( user=user).filter(paga=False) context['contas_abertas'] = contas_abertas context['quant_contas_abertas'] = len(contas_abertas) categorias_entrada = [] categorias_saida = [] categorias_credito_entradas = [] categorias_credito_saidas = [] categorias_entradas_total = 0 categorias_saidas_total = 0 categorias_credito_total_saidas = 0 categorias_credito_total_entradas = 0 for cr in cartao_credito_saidas: categorias_credito_saidas.append({ 'categoria_id': cr['categoria__pk'], 'label': cr['categoria__descricao'], 'tipo': cr['banco__tipo'], 'value': cr['valor'], 'quantidade': cr['quantidade'] }) categorias_credito_total_saidas += cr['valor'] for cre in cartao_credito_entradas: categorias_credito_entradas.append({ 'categoria_id': cre['categoria__pk'], 'label': cre['categoria__descricao'], 'tipo': cre['banco__tipo'], 'value': cre['valor'], 'quantidade': cre['quantidade'] }) categorias_credito_total_entradas += cre['valor'] for e in entradas_array: tipo = 'caixa' if ('banco__tipo' in e): tipo = e['banco__tipo'] categorias_entrada.append({ 'categoria_id': e['categoria__pk'], 'tipo': tipo, 'label': e['categoria__descricao'], 'value': e['valor'], 'quantidade': e['quantidade'] }) categorias_entradas_total += e['valor'] for s in saidas_array: tipo = 'caixa' if ('banco__tipo' in s): tipo = s['banco__tipo'] categorias_saida.append({ 'categoria_id': s['categoria__pk'], 'tipo': tipo, 'label': s['categoria__descricao'], 'value': s['valor'], 'quantidade': s['quantidade'] }) categorias_saidas_total += s['valor'] context['categoria_saida'] = sorted(categorias_saida, key=lambda i: (i['value'], i['quantidade']), reverse=True) categorias_saidas_json = json.dumps(categorias_saida, ensure_ascii=False, use_decimal=True) context['categoria_saida_json'] = categorias_saidas_json context['categorias_saidas_total'] = categorias_saidas_total context['categoria_entrada'] = sorted(categorias_entrada, key=lambda i: (i['value'], i['quantidade']), reverse=True) categorias_entrada_json = json.dumps(categorias_entrada, ensure_ascii=False, use_decimal=True) context['categoria_entrada_json'] = categorias_entrada_json context['categorias_entrada_total'] = categorias_entradas_total context['categoria_credito_entradas'] = sorted( categorias_credito_entradas, key=lambda i: (i['value'], i['quantidade']), reverse=True) context['categoria_credito_saidas'] = sorted(categorias_credito_saidas, key=lambda i: (i['value'], i['quantidade']), reverse=True) categorias_credito_json = json.dumps(categorias_credito_saidas, ensure_ascii=False, use_decimal=True) context['categoria_credito_json'] = categorias_credito_json context[ 'categorias_credito_total_entradas'] = categorias_credito_total_entradas context[ 'categorias_credito_total_saidas'] = categorias_credito_total_saidas #busca o saldo de Caixa do usuario e atribui ao contexto saldoC = SaldoCaixa.objects.get(user=user) context['saldoCaixa'] = saldoC.saldoAtual #para saldo de cada agencia agencias = ContaBanco.objects.filter(user=user) context['agencias'] = agencias context['data'] = data #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) context['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') context['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') context['formLancCredito'] = formCredito #soma o valor de saldo de todas as agencias totalSaldoAgencias = 0 for a in agencias: totalSaldoAgencias += a.saldo metas = Metas.objects.filter(user=user).filter(concluida=False).filter( prazo__month=data.month).filter(prazo__year=data.year) for meta in metas: total_metas += meta.valor context['total_metas'] = locale.currency(total_metas, grouping=True, symbol=None) return render(request, template, context)
def metas(request): if (request.method == 'POST'): form = MetasForm(request.POST) if (form.is_valid()): cadastroMeta = form.save(commit=False) cadastroMeta.user = request.user cadastroMeta.progresso = 0 cadastroMeta.concluida = False cadastroMeta.save() messages.success( request, 'Meta ' + cadastroMeta.titulo + ' cadastrada com sucesso.') return HttpResponseRedirect(reverse('metas:metas')) else: messages.success(request, 'Formulário inválido. Tente novamente.') return HttpResponseRedirect(reverse('metas:metas')) user = request.user template = 'meta/metas.html' contexto = {} metas = Metas.objects.filter(user=user) contexto['formMetas'] = metas #busca o saldo de Caixa do usuario e atribui ao contexto saldoC = SaldoCaixa.objects.get(user=request.user) contexto['saldoCaixa'] = saldoC.saldoAtual #para saldo de cada agencia agencias = ContaBanco.objects.filter(user=user).exclude( tipo=ContaBanco.CARTAO_DE_CREDITO) contexto['agencias'] = agencias somaMetas = 0 totalMetas = 0 if agencias: #soma o valor de saldo de todas as agencias totalSaldoAgencias = 0 for a in agencias: totalSaldoAgencias += a.saldo saldoTotal = totalSaldoAgencias + saldoC.saldoAtual for m in metas: progresso = util.getMetaPercent(m.valor, saldoTotal) m.progresso = progresso m.save() saldoTotal -= m.valor somaMetas += m.valor contexto['totalMetas'] = totalMetas contexto['somaMetas'] = somaMetas form = MetasForm() contexto['formCad'] = form userProfile = UsuarioProfile.objects.get(user=request.user) contexto['profile'] = userProfile #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) contexto['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') contexto['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') contexto['formLancCredito'] = formCredito return render(request, template, contexto)
def banco(request): #usuario logado user = request.user if (request.method == 'POST'): agencia = request.POST.get('agencia') mes = request.POST.get('mes') ano = request.POST.get('ano') agencia = ContaBanco.objects.get(pk=agencia) lancamentos = LancamentosBanco.objects.filter(data__month=mes).filter( data__year=ano).filter(user=user).filter(banco=agencia) lancJson = serializers.serialize('json', lancamentos, use_natural_foreign_keys=True, use_natural_primary_keys=True) return HttpResponse(lancJson, content_type="application/json") template = 'banco/banco.html' contexto = {} listAgencias = [] todasAgencias = ContaBanco.objects.filter(user=user).exclude( tipo=ContaBanco.CARTAO_DE_CREDITO) for a in todasAgencias: id = a.id nome = a.banco saldo = str(a.saldo) listAgencias.append((id, nome, saldo)) listAgencias = [{ 'id': id, 'agencia': agencia, 'saldo': saldo } for id, agencia, saldo in listAgencias] listAgencias = json.dumps(listAgencias, ensure_ascii=False) contexto['selectAgencias'] = listAgencias listCredito = [] todasCredito = ContaBanco.objects.filter(user=user).filter( tipo=ContaBanco.CARTAO_DE_CREDITO) for c in todasCredito: id = c.id nome = c.banco saldo = str(c.saldo) listCredito.append((id, nome, saldo)) listCredito = [{ 'id': id, 'agencia': credito, 'saldo': saldo } for id, credito, saldo in listCredito] listCredito = json.dumps(listCredito, ensure_ascii=False) contexto['selectCredito'] = listCredito #para adicionar lancamento formCaixa = LancamentosForm() formCaixa.getAddLancamentoForm(request) contexto['formLancCaixa'] = formCaixa formBanco = LancamentosBancoForm() formBanco.getAddLancamentoForm(request, 'banco') contexto['formLancBanco'] = formBanco formCredito = LancamentosBancoForm() formCredito.getAddLancamentoForm(request, 'credito') contexto['formLancCredito'] = formCredito userProfile = UsuarioProfile.objects.get(user=user) contexto['profile'] = userProfile #para saldo da carteira saldoC = SaldoCaixa.objects.get(user=user) contexto['saldoCaixa'] = saldoC.saldoAtual #para saldo de cada agencia agencias = ContaBanco.objects.filter(user=user) contexto['agencias'] = agencias return render(request, template, contexto)