def addLancamento(request): if (request.method == 'POST'): form = LancamentosForm(request.POST) if (form.is_valid()): lancamento = form.save(commit=False) #busca o saldo do usuario logado saldo = SaldoCaixa.objects.get(user=request.user) #atribui o valor do saldo anterior saldo.saldoAnterior = saldo.saldoAtual #atribui o novo saldo de acordo com a categoria do lançamento if (lancamento.categoria.tipo == "1"): saldo.saldoAtual += lancamento.valor else: saldo.saldoAtual -= lancamento.valor #salva o novo saldo saldo.save() #relacionao o usuario logado com o lançamento lancamento.user = request.user lancamento.save() return HttpResponse('Lançamento efetuado com sucesso.') return ('Lançamento inválido')
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 editLancamento(request): if (request.method == 'POST'): #id do usuario id_user = request.user.id #id do lancamento clicado idLancamento = request.POST.get('id') #busca o lancamento a ser alterado lancamento = LancamentosCaixa.objects.get(pk=idLancamento) #atribui o lancamento ao form form = LancamentosForm(request.POST, instance=lancamento) if (form.is_valid()): form.save() #busca o saldo do usuario logado saldoCaixa = SaldoCaixa.objects.get(user=request.user) lancamentos = LancamentosCaixa.objects.filter(user_id=id_user) saldo = 0 for l in lancamentos: if (l.categoria.tipo == '1'): saldo += l.valor else: saldo -= l.valor saldoCaixa.saldoAtual = saldo saldoCaixa.save() return HttpResponse("Lançamento alterado com sucesso") else: return HttpResponseServerError("Formulário inválido") #id do lancamento clicado idLancamento = request.GET.get('id') lancamento = LancamentosCaixa.objects.get(pk=idLancamento) form = LancamentosForm(instance=lancamento) form.getEditLancamentoForm(request) if (lancamento.conta_a_pagar != None): contaID = "<div id='status_conta'>Pago</div>" elif (lancamento.conta_a_receber != None): contaID = "<div id='status_conta'>Recebido</div>" else: contaID = "<div id='status_conta'>Nenhum</div>" #retorna o id do lancamento junto com o formulario divId = "<div id='id_lancamento'>" + idLancamento + "</div>" form_html = {form.as_p(), divId, contaID} return HttpResponse(form_html)
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 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(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 formCaixa = LancamentosForm() #seleciona apenas as categorias do usuario logado formCaixa.fields['categoria'].choices = separarCategorias(request) formBanco = LancamentosBancoForm() #Seleciona apenas o banco do usuario para o formulario formBanco.fields['banco'] = forms.ModelChoiceField( queryset=ContaBanco.objects.filter(user_id=request.user.id), empty_label='Nenhum', widget=forms.Select(attrs={'class': 'form-control'})) #seleciona apenas as categorias do usuario logado formBanco.fields['categoria'].choices = separarCategorias(request) #para adicionar lancamento contexto['formLancCaixa'] = formCaixa contexto['formLancBanco'] = formBanco userProfile = UsuarioProfile.objects.get(user=request.user) contexto['profile'] = userProfile return render(request, template, contexto)
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() #seleciona apenas as categorias do usuario logado formCaixa.fields['categoria'].choices = separarCategorias(request) formBanco = LancamentosBancoForm() #Seleciona apenas o banco do usuario para o formulario formBanco.fields['banco'] = forms.ModelChoiceField( queryset = ContaBanco.objects.filter(user_id = request.user.id), empty_label = 'Nenhum', widget = forms.Select( attrs = {'class': 'form-control'} ) ) #seleciona apenas as categorias do usuario logado formBanco.fields['categoria'].choices = separarCategorias(request) #para adicionar lancamento contexto['formLancCaixa'] = formCaixa contexto['formLancBanco'] = formBanco userProfile = UsuarioProfile.objects.get(user = request.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 categoria(request): if (request.method == 'POST'): form = CategoriaForm(request.POST) if (form.is_valid()): categoria = form.save(commit=False) categoria.user = request.user categoria.save() return HttpResponse('Categoria cadastrada com sucesso.') else: return HttpResponseServerError("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) form = CategoriaForm() 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 formCaixa = LancamentosForm() #seleciona apenas as categorias do usuario logado formCaixa.fields['categoria'].choices = separarCategorias(request) formBanco = LancamentosBancoForm() #Seleciona apenas o banco do usuario para o formulario formBanco.fields['banco'] = forms.ModelChoiceField( queryset=ContaBanco.objects.filter(user=user), empty_label='Nenhum', widget=forms.Select(attrs={'class': 'form-control'})) #seleciona apenas as categorias do usuario logado formBanco.fields['categoria'].choices = separarCategorias(request) #para adicionar lancamento contexto['formLancCaixa'] = formCaixa contexto['formLancBanco'] = formBanco userProfile = UsuarioProfile.objects.get(user=user) contexto['profile'] = userProfile 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 home(request): template = 'principal/home.html' context = {} #id do usuario logado user = request.user userProfile = UsuarioProfile.objects.get(user=user) context['profile'] = userProfile eventosCaixa = [] eventosBanco = [] eventosCPagar = [] eventosCReceber = [] #carrega os lançamentos do caixa do usuário lancamentosCaixa = LancamentosCaixa.objects.filter(user=user) #carrega os lançamentos do banco do usuário lancamentosBanco = LancamentosBanco.objects.filter(user=user) #carrega as contas a pagar do usuário contasAPagar = ContasAPagar.objects.filter(user=user).filter(paga=False) #carrega as contas a receber do usuário contasAReceber = ContasAReceber.objects.filter(user=user).filter( recebido=False) #separa os dados do caixa que serão utilizados no calendario em um tupla for lancamento in lancamentosCaixa: dia = str(lancamento.data.day) if (len(dia) == 1): dia = "0" + dia mes = str(lancamento.data.month) if (len(mes) == 1): mes = "0" + mes ano = str(lancamento.data.year) #concatena a data para o formato do fullcalendar data = ano + "-" + mes + "-" + dia titulo = lancamento.descricao + " : " + " R$" + str(lancamento.valor) eventosCaixa.append((titulo, data)) #converte a tupla para dicionario eventosCaixa = [{ 'title': title, 'start': start } for title, start in eventosCaixa] #separa os dados do banco que serão utilizados no calendario em um tupla for lancamento in lancamentosBanco: dia = str(lancamento.data.day) if (len(dia) == 1): dia = "0" + dia mes = str(lancamento.data.month) if (len(mes) == 1): mes = "0" + mes ano = str(lancamento.data.year) #concatena a data para o formato do fullcalendar data = ano + "-" + mes + "-" + dia titulo = lancamento.descricao + " : " + " R$" + str(lancamento.valor) eventosBanco.append((titulo, data)) #converte a tupla para para dicionario eventosBanco = [{ 'title': title, 'start': start, 'color': 'yellow', 'textColor': 'black' } for title, start in eventosBanco] #separa os dados do contas a pagar que serão utilizados no calendario em um tupla for conta in contasAPagar: dia = str(conta.data.day) if (len(dia) == 1): dia = "0" + dia mes = str(conta.data.month) if (len(mes) == 1): mes = "0" + mes ano = str(conta.data.year) #concatena a data para o formato do fullcalendar data = ano + "-" + mes + "-" + dia titulo = conta.descricao + " : " + " R$" + str(conta.valor) eventosCPagar.append((titulo, data)) #converte a tupla para para dicionario eventosCPagar = [{ 'title': title, 'start': start, 'color': 'red' } for title, start in eventosCPagar] #separa os dados do contas a receber que serão utilizados no calendario em um tupla for conta in contasAReceber: dia = str(conta.data.day) if (len(dia) == 1): dia = "0" + dia mes = str(conta.data.month) if (len(mes) == 1): mes = "0" + mes ano = str(conta.data.year) #concatena a data para o formato do fullcalendar data = ano + "-" + mes + "-" + dia titulo = conta.descricao + " : " + " R$" + str(conta.valor) eventosCReceber.append((titulo, data)) #converte a tupla para para dicionario eventosCReceber = [{ 'title': title, 'start': start, 'color': 'green' } for title, start in eventosCReceber] #junta os lancamento de caixa, banco e contas a pagar todosEventos = eventosBanco + eventosCaixa + eventosCPagar + eventosCReceber #converte para o formato Json todosEventos = json.dumps(todosEventos, ensure_ascii=False) context['events'] = todosEventos # print(teste) formCaixa = LancamentosForm() #seleciona apenas as categorias do usuario logado formCaixa.fields['categoria'].choices = separarCategorias(request) formBanco = LancamentosBancoForm() #Seleciona apenas o banco do usuario para o formulario formBanco.fields['banco'] = forms.ModelChoiceField( queryset=ContaBanco.objects.filter(user=user), empty_label='Nenhum', widget=forms.Select(attrs={'class': 'form-control'})) #seleciona apenas as categorias do usuario logado formBanco.fields['categoria'].choices = separarCategorias(request) #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['formLancCaixa'] = formCaixa context['formLancBanco'] = formBanco metas = Metas.objects.filter(user=user) #soma o valor de saldo de todas as agencias totalSaldoAgencias = 0 for a in agencias: totalSaldoAgencias += a.saldo for m in metas: #calculo do progresso da meta progresso = ((totalSaldoAgencias + saldoC.saldoAtual) / m.valor) * 100 m.progresso = round(progresso, 2) m.save() context['metas'] = metas return render(request, template, context)
def contasAPagar(request): user = request.user if(request.method == 'POST'): form = ContasAPagarForm(request.POST) if(form.is_valid()): contaPagar = form.save(commit = False) contaPagar.user = request.user contaPagar.paga = False contaPagar.save() return HttpResponse('Conta a pagar adicionada com sucesso') else: return HttpResponseServerError("Formulário inválido.") template = 'contas_a_pagar/contas_a_pagar.html' hoje = datetime.today() contas = ContasAPagar.objects.filter(user = user).filter(data__month = hoje.month) form = ContasAPagarForm() #seleciona apenas as categorias do usuario logado e do tipo saida form.fields['categoria'] = forms.ModelChoiceField( queryset = Categoria.objects.filter(user = user).filter(tipo = 2), empty_label = 'Nenhum', widget = forms.Select( attrs = {'class': 'form-control', 'id': 'id_categoriaCP'} ) ) context = {'contPagar': contas, 'contPagarForm': form} #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 #para adicionar lancamento formCaixa = LancamentosForm() #seleciona apenas as categorias do usuario logado formCaixa.fields['categoria'].choices = separarCategorias(request) formBanco = LancamentosBancoForm() #Seleciona apenas o banco do usuario para o formulario formBanco.fields['banco'] = forms.ModelChoiceField( queryset = ContaBanco.objects.filter(user = user), empty_label = 'Nenhum', widget = forms.Select( attrs = {'class': 'form-control'} ) ) #seleciona apenas as categorias do usuario logado formBanco.fields['categoria'].choices = separarCategorias(request) #para adicionar lancamento context['formLancCaixa'] = formCaixa context['formLancBanco'] = formBanco userProfile = UsuarioProfile.objects.get(user = user) context['profile'] = userProfile return render(request, template, context)
def editSenha(request): template = 'config/config.html' contexto = {} formDados = EditAccountsForm(instance=request.user) #Editar Senha if (request.method == 'POST'): formSenha = PasswordChangeForm(data=request.POST, user=request.user) if formSenha.is_valid(): formSenha.save() contexto['success'] = True else: contexto['erros'] = True contexto['mensagem'] = 'Senha não alterada. Tente novamente' else: formSenha = PasswordChangeForm(user=request.user) 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', })) contexto['formSenha'] = formSenha contexto['formConfig'] = formDados formCaixa = LancamentosForm() #Seleciona apenas o banco do usuario para o formulario formCaixa.fields['categoria'].choices = separarCategorias(request) formBanco = LancamentosBancoForm() #Seleciona apenas o banco do usuario para o formulario formBanco.fields['banco'] = forms.ModelChoiceField( queryset=ContaBanco.objects.filter(user_id=request.user.id), empty_label='Nenhum', widget=forms.Select(attrs={'class': 'form-control'})) #seleciona apenas as categorias do usuario logado formBanco.fields['categoria'].choices = separarCategorias(request) return render(request, template, contexto)
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) formFoto = UsuarioProfileForm() contexto['formFoto'] = formFoto #Editar if (request.method == 'POST'): form = UsuarioProfileForm(request.POST, request.FILES) print(form) formDados = EditAccountsForm(request.POST, instance=request.user) if formDados.is_valid(): formDados.save() formDados = EditAccountsForm(instance=request.user) contexto['success'] = True else: formDados = EditAccountsForm(instance=request.user) 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', })) formCaixa = LancamentosForm() #Seleciona apenas o banco do usuario para o formulario formCaixa.fields['categoria'].choices = separarCategorias(request) formBanco = LancamentosBancoForm() #Seleciona apenas o banco do usuario para o formulario formBanco.fields['banco'] = forms.ModelChoiceField( queryset=ContaBanco.objects.filter(user_id=request.user.id), empty_label='Nenhum', widget=forms.Select(attrs={'class': 'form-control'})) #seleciona apenas as categorias do usuario logado formBanco.fields['categoria'].choices = separarCategorias(request) #para adicionar lancamento contexto['formLancCaixa'] = formCaixa contexto['formLancBanco'] = formBanco 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=user) contexto['agencias'] = agencias return render(request, template, contexto)
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 metas(request): if (request.method == 'POST'): form = MetasForm(request.POST) print(form) if (form.is_valid()): cadastroMeta = form.save(commit=False) cadastroMeta.user = request.user cadastroMeta.progresso = 0 cadastroMeta.save() return HttpResponse('Meta cadastrada com sucesso.') else: return HttpResponseServerError( 'Formulário inválido. Tente novamente.') 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) contexto['agencias'] = agencias #soma o valor de saldo de todas as agencias totalSaldoAgencias = 0 for a in agencias: totalSaldoAgencias += a.saldo for m in metas: progresso = ((totalSaldoAgencias + saldoC.saldoAtual) / m.valor) * 100 m.progresso = round(progresso, 2) m.save() form = MetasForm() contexto['formCad'] = form userProfile = UsuarioProfile.objects.get(user=request.user) contexto['profile'] = userProfile #para adicionar lancamento formCaixa = LancamentosForm() #seleciona apenas as categorias do usuario logado formCaixa.fields['categoria'].choices = separarCategorias(request) #para adicionar lancamento formBanco = LancamentosBancoForm() #Seleciona apenas o banco do usuario para o formulario formBanco.fields['banco'] = forms.ModelChoiceField( queryset=ContaBanco.objects.filter(user_id=request.user.id), empty_label='Nenhum', widget=forms.Select(attrs={'class': 'form-control'})) #seleciona apenas as categorias do usuario logado formBanco.fields['categoria'].choices = separarCategorias(request) #para adicionar lancamento contexto['formLancCaixa'] = formCaixa contexto['formLancBanco'] = formBanco 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 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 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)
def editLancamento(request): if (request.method == 'POST'): #id do usuario id_user = request.user.id #id do lancamento clicado idLancamento = request.POST.get('id') #busca o lancamento a ser alterado lancamento = LancamentosCaixa.objects.get(pk=idLancamento) #atribui o lancamento ao form form = LancamentosForm(request.POST, instance=lancamento) if (form.is_valid()): form.save() #busca o saldo do usuario logado saldoCaixa = SaldoCaixa.objects.get(user=request.user) lancamentos = LancamentosCaixa.objects.filter(user_id=id_user) saldo = 0 for l in lancamentos: if (l.categoria.tipo == '1'): saldo += l.valor else: saldo -= l.valor saldoCaixa.saldoAtual = saldo saldoCaixa.save() return HttpResponse("Lançamento alterado com sucesso") else: return HttpResponseServerError("Formulário inválido") #id do lancamento clicado idLancamento = request.GET.get('id') lancamento = LancamentosCaixa.objects.get(pk=idLancamento) form = LancamentosForm(instance=lancamento) #seleciona apenas as categorias do usuario logado form.fields['categoria'].choices = separarCategorias(request) form.fields['descricao'] = forms.CharField( label='Descrição', max_length=32, required=True, widget=forms.TextInput( attrs={ 'class': 'form-control', 'placeholder': 'Descreva a transação', 'id': 'id_descricao-alter_caixa' })) form.fields['valor'] = forms.DecimalField( label='Valor', min_value=0.01, max_value=9999.99, required=True, widget=forms.NumberInput(attrs={ 'class': 'form-control', 'id': 'id_valor-alter_caixa' })) form.fields['data'] = forms.DateField( label='Data', required=True, widget=forms.TextInput(attrs={ 'class': 'form-control', 'id': 'datepicker-alter_caixa' })) if (lancamento.conta_a_pagar != None): contaID = "<div id='status_conta'>Pago</div>" elif (lancamento.conta_a_receber != None): contaID = "<div id='status_conta'>Recebido</div>" else: contaID = "<div id='status_conta'>Nenhum</div>" #retorna o id do lancamento junto com o formulario divId = "<div id='id_lancamento'>" + idLancamento + "</div>" form_html = {form.as_p(), divId, contaID} return HttpResponse(form_html)