196 lines
7.7 KiB
Python
196 lines
7.7 KiB
Python
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) |