from django.views.generic import ListView, CreateView, UpdateView, DeleteView, DetailView from django.contrib.auth.mixins import LoginRequiredMixin , PermissionRequiredMixin from Movement.Forms import FormsExpenseOrCredit from Movement import models from Base.models import ChartOfAccount from django.urls import reverse_lazy from django.contrib import messages from django.utils import timezone class ExpenseOrCreditListView(LoginRequiredMixin, PermissionRequiredMixin, ListView): model = models.ExpenseOrCredit template_name = 'ExpenseOrCredit/List.html' context_object_name = 'Expenses' paginate_by = 10 permission_required = 'Base.view_professional' def get_queryset(self): queryset = super().get_queryset() month = self.request.GET.get('month') mov_type = self.request.GET.get('type') resp = self.request.GET.get('resp') # Validação: Se NÃO houver month E NÃO houver type E NÃO houver resp, retorna vazio if not any([month, mov_type, resp]): return super().get_queryset().none() # Se passou da validação, começamos o filtro queryset = super().get_queryset() year = timezone.localtime(timezone.now()).year # 1. Filtro de Data if month: queryset = queryset.filter(date__month=month, date__year=year) else: # Se você quiser que o mês atual seja o padrão caso month não venha, # mas type ou resp venham: current_month = timezone.localtime(timezone.now()).month queryset = queryset.filter(date__month=current_month, date__year=year) # 2. Filtro de Tipo if mov_type == 'credit': queryset = queryset.filter(credit=True, debit=False) elif mov_type == 'debit': queryset = queryset.filter(credit=False, debit=True) # 3. Filtro de Responsável if resp == 'firm': queryset = queryset.filter(firm=True, prof=False) elif resp == 'prof': queryset = queryset.filter(firm=False, prof=True) return queryset # class ExpenseOrCreditCreateView(LoginRequiredMixin,PermissionRequiredMixin, CreateView): # model = models.ExpenseOrCredit # template_name = 'ExpenseOrCredit/Create.html' # form_class = FormsExpenseOrCredit.FormsExpenseOrCredit # success_url = reverse_lazy('MovExpenseOrCreditListView') # permission_required = 'Base.add_professional' class ExpenseOrCreditDetailView(LoginRequiredMixin,PermissionRequiredMixin, DetailView): model = models.ExpenseOrCredit template_name = 'ExpenseOrCredit/Detail.html' permission_required = 'Base.view_professional' class ExpenseOrCreditDeleteView(LoginRequiredMixin,PermissionRequiredMixin, DeleteView): model = models.ExpenseOrCredit # template_name = 'Expense/Delete.html' success_url = reverse_lazy('MovExpenseOrCreditListView') permission_required = 'Base.delete_professional' def form_valid(self, form): messages.success(self.request, 'Registro Deletado com sucesso!') return super().form_valid(form) def form_invalid(self, form): errors = form.errors.as_text() messages.error(self.request, f'Verifique os dados: {errors}') return super().form_invalid(form) class ExpenseOrCreditFirmCreateView(LoginRequiredMixin,PermissionRequiredMixin, CreateView): model = models.ExpenseOrCredit template_name = 'ExpenseOrCredit/CreateFirm.html' form_class = FormsExpenseOrCredit.FormsExpenseOrCredit success_url = reverse_lazy('MovExpenseOrCreditListView') permission_required = 'Base.add_professional' def get_form(self, form_class=None): form = super().get_form(form_class) form.fields['chart_of_account'].queryset = ChartOfAccount.objects.filter( firm=True, debit=True, credit=False, ) return form def form_valid(self, form): form.instance.firm = True form.instance.debit = True form.instance.created_by = self.request.user messages.success(self.request, 'Registro realizado com sucesso!') return super().form_valid(form) def form_invalid(self, form): errors = form.errors.as_text() messages.error(self.request, f'Verifique os dados: {errors}') return super().form_invalid(form) class ExpenseOrCreditProfCreateView(LoginRequiredMixin,PermissionRequiredMixin, CreateView): model = models.ExpenseOrCredit template_name = 'ExpenseOrCredit/CreateProf.html' form_class = FormsExpenseOrCredit.FormsExpenseOrCredit success_url = reverse_lazy('MovExpenseOrCreditListView') permission_required = 'Base.add_professional' def get_form(self, form_class=None): form = super().get_form(form_class) form.fields['chart_of_account'].queryset = ChartOfAccount.objects.filter( firm=False, debit=True, credit=False, prof=True, ) return form def form_valid(self, form): form.instance.firm = False form.instance.debit = True form.instance.prof = True form.instance.created_by = self.request.user messages.success(self.request, 'Registro realizado com sucesso!') return super().form_valid(form) def form_invalid(self, form): errors = form.errors.as_text() messages.error(self.request, f'Verifique os dados: {errors}') return super().form_invalid(form) class ExpenseOrCreditFirmCreditCreateView(LoginRequiredMixin,PermissionRequiredMixin, CreateView): model = models.ExpenseOrCredit template_name = 'ExpenseOrCredit/CreateCredit.html' form_class = FormsExpenseOrCredit.FormsExpenseOrCredit success_url = reverse_lazy('MovExpenseOrCreditListView') permission_required = 'Base.add_professional' def get_form(self, form_class=None): form = super().get_form(form_class) form.fields['chart_of_account'].queryset = ChartOfAccount.objects.filter( firm=True, credit=True, ) return form def form_valid(self, form): form.instance.firm = True form.instance.debit = False form.instance.credit = True form.instance.created_by = self.request.user messages.success(self.request, 'Registro realizado com sucesso!') return super().form_valid(form) def form_invalid(self, form): errors = form.errors.as_text() messages.error(self.request, f'Verifique os dados: {errors}') return super().form_invalid(form) class ExpenseOrCreditProfCreditCreateView(LoginRequiredMixin,PermissionRequiredMixin, CreateView): model = models.ExpenseOrCredit template_name = 'ExpenseOrCredit/CreateProfCredit.html' form_class = FormsExpenseOrCredit.FormsExpenseOrCredit success_url = reverse_lazy('MovExpenseOrCreditListView') permission_required = 'Base.add_professional' def get_form(self, form_class=None): form = super().get_form(form_class) form.fields['chart_of_account'].queryset = ChartOfAccount.objects.filter( firm=False, debit=False, credit=True, prof=True, ) return form def form_valid(self, form): form.instance.firm = False form.instance.debit = False form.instance.credit = True form.instance.prof = True form.instance.created_by = self.request.user messages.success(self.request, 'Registro realizado com sucesso!') return super().form_valid(form) def form_invalid(self, form): errors = form.errors.as_text() messages.error(self.request, f'Verifique os dados: {errors}') return super().form_invalid(form)