Controle de faturas e bloqueio de usuários para o sistema de lojas web
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

218 lines
7.5 KiB

from django.contrib.admin.models import LogEntry, ContentType, ADDITION, CHANGE, DELETION
from django.utils.translation import ugettext_lazy as _
from django.views.generic import DetailView
class LogBaseMixin(object):
object = None
request = None
class LogCreateMixin(LogBaseMixin):
def form_valid(self, form):
response = super(LogCreateMixin, self).form_valid(form)
LogEntry.objects.log_action(
user_id=self.request.user.pk,
content_type_id=ContentType.objects.get_for_model(
self.object, False).pk,
object_id=self.object.pk,
object_repr=str(self.object),
action_flag=ADDITION,
change_message=_('Adicionado')
)
return response
class LogChangeMixin(LogBaseMixin):
def form_valid(self, form):
response = super(LogChangeMixin, self).form_valid(form)
try:
fs_c = ''
for fs in self.get_formsets():
for fsf in fs.forms:
if fsf.changed_data:
fs_c += f'{fsf.instance} ' + \
', '.join([str(fsf.fields.get(field).label) + ' de ' + str(fsf.initial.get(field)) + ' para ' +
str(fsf.cleaned_data.get(field)) for field in fsf.changed_data])
except Exception as e:
fs_c = ''
LogEntry.objects.log_action(
user_id=self.request.user.pk,
content_type_id=ContentType.objects.get_for_model(
self.object, False).pk,
object_id=self.object.pk,
object_repr=str(self.object),
action_flag=CHANGE,
change_message=f'Modificado {", ".join([str(form.fields.get(field).label) for field in form.changed_data])}{(", " + fs_c) if fs_c != "" else ""}. '
)
return response
class LogDeleteMixin(LogBaseMixin):
def delete(self, request, *args, **kwargs):
obj = self.get_object()
LogEntry.objects.log_action(
user_id=self.request.user.pk,
content_type_id=ContentType.objects.get_for_model(obj, False).pk,
object_id=obj.pk,
object_repr=str(obj),
action_flag=DELETION,
change_message=_('Deletado')
)
return super(LogDeleteMixin, self).delete(request, *args, **kwargs)
class HistoricView(DetailView):
template_name = 'controle/historico.html'
success_url = None
def get_context_data(self, **kwargs):
context = super(HistoricView, self).get_context_data(**kwargs)
context.update({
'log_entries': LogEntry.objects.filter(
content_type=ContentType.objects.get_for_model(
self.get_object(), False),
object_id=self.get_object().pk,
)
})
return context
class LogFormsetCreateMixin(LogBaseMixin):
def get_formsets(self):
if self.request.POST:
return [Formset(self.request.POST, self.request.FILES) for Formset in self.formset_classes]
else:
formsets = []
for formset in self.formset_classes:
prefix = formset().prefix
if self.initial.get(prefix):
formsets.append(formset(initial=self.initial.get(prefix)))
self.initial.pop(prefix)
else:
formsets.append(formset())
return formsets
def get_context_data(self, **kwargs):
context = super(LogFormsetCreateMixin, self).get_context_data(**kwargs)
context.update({
'formsets': self.get_formsets()
})
return context
def form_valid(self, form):
formsets = self.get_formsets()
response = super(LogFormsetCreateMixin, self).form_valid(form)
for formset in formsets:
if formset.cleaned_data != [{}]:
if len(formset.cleaned_data) > 1:
LogEntry.objects.log_action(
user_id=self.request.user.pk,
content_type_id=ContentType.objects.get_for_model(
self.object, False).pk,
object_id=self.object.pk,
object_repr=str(self.object),
action_flag=ADDITION,
change_message=_(
f'{formset.forms[0].instance.__class__._meta.verbose_name_plural} adicionados')
)
else:
LogEntry.objects.log_action(
user_id=self.request.user.pk,
content_type_id=ContentType.objects.get_for_model(
self.object, False).pk,
object_id=self.object.pk,
object_repr=str(self.object),
action_flag=ADDITION,
change_message=_(
f'{formset.forms[0].instance.__class__._meta.verbose_name} adicionado')
)
return response
class FormSetCreateView(object):
formset_classes = []
initial = {}
model = None
object = None
request = None
def get_formsets(self):
if self.request.POST:
return [Formset(self.request.POST, self.request.FILES) for Formset in self.formset_classes]
else:
formsets = []
for formset in self.formset_classes:
prefix = formset().prefix
if self.initial.get(prefix):
formsets.append(formset(initial=self.initial.get(prefix)))
self.initial.pop(prefix)
else:
formsets.append(formset())
return formsets
def get_context_data(self, **kwargs):
context = super(FormSetCreateView, self).get_context_data(**kwargs)
context.update({
'formsets': self.get_formsets()
})
return context
def form_valid(self, form):
formsets = self.get_formsets()
if all([formset.is_valid() for formset in formsets]):
response = super(FormSetCreateView, self).form_valid(form)
for formset in formsets:
formset.instance = self.object
formset.save()
return response
else:
return super(FormSetCreateView, self).form_invalid(form)
class FormSetUpdateView(object):
formset_classes = []
object = None
request = None
def get_formsets(self):
if self.request.POST:
formsets = [
Formset(self.request.POST, self.request.FILES,
instance=self.object)
for Formset in self.formset_classes
]
for formset in formsets:
formset.full_clean()
return formsets
else:
return [Formset(instance=self.object) for Formset in self.formset_classes]
def get_context_data(self, **kwargs):
context = super(FormSetUpdateView, self).get_context_data(**kwargs)
context.update({
'formsets': self.get_formsets()
})
return context
def form_valid(self, form):
formsets = self.get_formsets()
if all([formset.is_valid() for formset in formsets]):
response = super(FormSetUpdateView, self).form_valid(form)
for formset in formsets:
formset.instance = self.object
formset.save()
return response
else:
return super(FormSetUpdateView, self).form_invalid(form)