Refatoração do Backend das entidades

Agora todas as entidades possuem um código de rota melhor estruturado
This commit is contained in:
Eberton committed 2026-05-26 22:41:18 -03:00
1 parent d7887019f7
commit e9b54535d3
4 files changed
+260 -209

No files matched your search

+167 -133
View File
@@ -1,13 +1,47 @@
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.urls import reverse from django.urls import reverse
from django.db.models import Prefetch
from ..models import Farm, Paddock, PaddockGroup from ..models import Farm, Paddock, PaddockGroup
from ..forms import FarmCreateForm, FarmEditForm, PaddockCreateForm, PaddockEditForm, PaddockGroupCreateForm, PaddockGroupEditForm from ..forms import FarmCreateForm, FarmEditForm, PaddockCreateForm, PaddockEditForm, PaddockGroupCreateForm, PaddockGroupEditForm
def get_selected_farm(request): def _get_selected_farm_id(request):
return Farm.objects.get(id=request.session['selected_farm_id']) return request.session['selected_farm_id']
def _get_selected_farm(request):
return get_object_or_404(
Farm,
pk=_get_selected_farm_id(request),
is_active=True
)
def _get_farm_by_id(request, farm_id):
return get_object_or_404(
Farm,
pk=farm_id,
is_active=True
)
def _get_paddock_by_id(request, paddock_id):
return get_object_or_404(
Paddock,
pk=paddock_id,
farm_id=_get_selected_farm_id(request),
is_active=True
)
def _get_active_farm_paddocks(request):
return Paddock.objects.filter(
farm=_get_selected_farm(request),
is_active=True
)
def _get_paddock_group_by_id(request, paddock_group_id):
return get_object_or_404(
PaddockGroup,
pk=paddock_group_id,
is_active=True
)
# Farm Services # Farm Services
@@ -18,7 +52,7 @@ def get_farm_home_context(request):
context['title'] = 'Fazenda' context['title'] = 'Fazenda'
farms = Farm.objects.filter( farms = Farm.objects.filter(
users=authenticated_user, # Verificar se da para deixar apenas = ou deve usar um is in ou algo do tipo users=authenticated_user,
is_active=True is_active=True
) )
@@ -26,7 +60,6 @@ def get_farm_home_context(request):
return context return context
def get_farm_create_context(): def get_farm_create_context():
form = FarmCreateForm() form = FarmCreateForm()
@@ -38,7 +71,6 @@ def get_farm_create_context():
return context return context
def create_farm(request): def create_farm(request):
form = FarmCreateForm(request.POST) form = FarmCreateForm(request.POST)
authenticated_user = request.user authenticated_user = request.user
@@ -50,9 +82,9 @@ def create_farm(request):
return False return False
def get_update_farm_context(request, farm_id):
def update_farm(request, farm_id): farm = _get_farm_by_id(request, farm_id)
farm = get_object_or_404(Farm, pk=farm_id, is_active=True) form = FarmEditForm(instance=farm)
context = {} context = {}
context['title'] = 'Editar fazenda' context['title'] = 'Editar fazenda'
@@ -61,121 +93,113 @@ def update_farm(request, farm_id):
kwargs={'farm_id': farm.pk} kwargs={'farm_id': farm.pk}
) )
context['return_url'] = reverse('entities:farm:farm_list') context['return_url'] = reverse('entities:farm:farm_list')
if request.method == 'GET':
form = FarmEditForm(instance=farm)
elif request.method == 'POST':
form = FarmEditForm(request.POST, instance=farm)
if form.is_valid():
form.save()
return {'redirect': 'entities:farm:farm_list'}
context['form'] = form context['form'] = form
return {'context': context} return context
def update_farm(request, farm_id):
farm = _get_farm_by_id(request, farm_id)
form = FarmEditForm(request.POST, instance=farm)
def delete_farm(farm_id): if form.is_valid():
farm = get_object_or_404(Farm, pk=farm_id, is_active=True) form.save()
return True
return False
def get_farm_delete_context(request, farm_id):
farm = _get_farm_by_id(request, farm_id)
context = {}
context['description'] = f"Excluir registro da fazenda {farm.name}"
context['positive_url'] = reverse(
'entities:farm:farm_delete',
kwargs={'farm_id': farm_id}
)
context['negative_url'] = reverse('entities:farm:farm_list')
return context
def delete_farm(request, farm_id):
farm = _get_farm_by_id(request, farm_id)
farm.is_active = False farm.is_active = False
farm.save() farm.save()
# Paddock Services # Paddock Services
def get_paddock_create_context():
form = PaddockCreateForm()
context = {
'title': 'Novo Piquete',
'form': form,
'action_url': reverse('entities:farm:paddock_create'),
'return_url': reverse('entities:farm:paddock_list')
}
return context
def create_paddock(request): def create_paddock(request):
selected_farm = get_selected_farm(request) form = PaddockCreateForm(request.POST)
selected_farm = _get_selected_farm(request)
if request.method == 'GET': if form.is_valid():
form = PaddockCreateForm() paddock = form.save(commit=False)
paddock.farm = selected_farm
paddock.save()
context = { return True
'title': 'Novo Piquete',
'form': form,
'action_url': reverse('entities:farm:paddock_create'),
'return_url': reverse('entities:farm:paddock_list')
}
return {'context': context} return False
elif request.method == 'POST': def get_paddock_update_context(request, paddock_id):
form = PaddockCreateForm(request.POST) paddock = _get_paddock_by_id(request, paddock_id)
form = PaddockEditForm(instance=paddock)
if form.is_valid(): context = {
paddock = form.save(commit=False) 'title': 'Editar piquete',
paddock.farm = selected_farm 'action_url': reverse(
paddock.save() 'entities:farm:paddock_update',
kwargs={'paddock_id': paddock.pk}
return {'redirect': 'entities:farm:paddock_list'} ),
'return_url': reverse('entities:farm:paddock_list'),
context = { 'form': form
'title': 'Novo Piquete', }
'form': form,
'action_url': reverse('entities:farm:paddock_create'),
'return_url': reverse('entities:farm:paddock_list')
}
return {'context': context}
return context
def update_paddock(request, paddock_id): def update_paddock(request, paddock_id):
farm_id = request.session['selected_farm_id'] paddock = _get_paddock_by_id(request, paddock_id)
paddock = get_object_or_404(Paddock, pk=paddock_id, farm_id=farm_id, is_active=True) form = PaddockEditForm(request.POST, instance=paddock)
if form.is_valid():
form.save()
return True
return False
def get_paddock_delete_context(request, paddock_id):
paddock = _get_paddock_by_id(request, paddock_id)
context = {} context = {}
context['title'] = 'Editar piquete' context['description'] = f"Excluir registro do piquete {paddock.identifier}"
context['action_url'] = reverse( context['positive_url'] = reverse(
'entities:farm:paddock_update', 'entities:farm:paddock_delete',
kwargs={'paddock_id': paddock.pk} kwargs={'paddock_id': paddock_id}
) )
context['return_url'] = reverse('entities:farm:paddock_list') context['negative_url'] = reverse('entities:farm:paddock_list')
if request.method == 'GET': return context
form = PaddockEditForm(instance=paddock)
elif request.method == 'POST': def delete_paddock(request, paddock_id):
form = PaddockEditForm(request.POST, instance=paddock) paddock = _get_paddock_by_id(request, paddock_id)
if form.is_valid():
form.save()
return {'redirect': 'entities:farm:paddock_list'}
context['form'] = form
return {'context': context}
def delete_paddock(paddock_id):
paddock = get_object_or_404(Paddock, pk=paddock_id, is_active=True)
paddock.is_active = False paddock.is_active = False
paddock.save() paddock.save()
# Paddock Group Services # Paddock Group Services
def create_paddock_group(request): def get_paddock_group_create_context(request):
selected_farm = get_selected_farm(request) form = PaddockGroupCreateForm()
if request.method == 'GET':
form = PaddockGroupCreateForm()
form.fields['paddocks'].queryset = Paddock.objects.filter(
farm=selected_farm,
is_active=True
)
if request.method == 'POST':
form = PaddockGroupCreateForm(request.POST)
if form.is_valid():
paddock_group = form.save(commit=False)
paddock_group.save()
return {'redirect': 'entities:farm:paddock_group_list'}
form.fields['paddocks'].queryset = Paddock.objects.filter(
farm=selected_farm,
is_active=True
)
context = { context = {
'title': 'Novo Bloco', 'title': 'Novo Bloco',
@@ -184,56 +208,66 @@ def create_paddock_group(request):
'return_url': reverse('entities:farm:paddock_group_list') 'return_url': reverse('entities:farm:paddock_group_list')
} }
return {'context': context} return context
def create_paddock_group(request):
form = PaddockGroupCreateForm(request.POST)
def update_paddock_group(request, paddock_group_id): if form.is_valid():
selected_farm = get_selected_farm(request) form.save()
paddock_group = get_object_or_404(PaddockGroup, pk=paddock_group_id, is_active=True) return True
return False
def get_paddock_group_update_context(request, paddock_group_id):
paddock_group = _get_paddock_group_by_id(request, paddock_group_id)
form = PaddockGroupEditForm(instance=paddock_group)
context = { context = {
'title': f'Editar Lote {paddock_group.identifier}', 'title': f'Editar Bloco {paddock_group.identifier}',
'return_url': reverse('entities:farm:paddock_group_list') 'action_url': reverse(
'entities:farm:paddock_group_update',
kwargs={'paddock_group_id': paddock_group.pk}
),
'return_url': reverse('entities:farm:paddock_group_list'),
'form': form
} }
if request.method == 'GET': return context
form = PaddockGroupEditForm(instance=paddock_group)
form.fields['paddocks'].queryset = Paddock.objects.filter( def update_paddock_group(request, paddock_group_id):
farm=selected_farm, paddock_group = _get_paddock_group_by_id(request, paddock_group_id)
is_active=True
)
context['action_url'] = reverse( form = PaddockGroupEditForm(
'entities:farm:paddock_group_update', request.POST,
kwargs={'paddock_group_id': paddock_group.pk} instance=paddock_group
) )
elif request.method == 'POST': if form.is_valid():
form = PaddockGroupEditForm(request.POST, instance=paddock_group) form.save()
return True
if form.is_valid(): return False
paddock_group = form.save()
paddock_group.save()
return {'redirect': 'entities:farm:paddock_group_list'} def get_paddock_group_delete_context(request, paddock_group_id):
paddock_group = _get_paddock_group_by_id(request, paddock_group_id)
form.fields['paddocks'].queryset = Paddock.objects.filter( context = {}
farm=selected_farm, context['description'] = (
is_active=True f"Excluir registro do bloco {paddock_group.identifier}"
) )
context['positive_url'] = reverse(
'entities:farm:paddock_group_delete',
kwargs={'paddock_group_id': paddock_group_id}
)
context['negative_url'] = reverse(
'entities:farm:paddock_group_list'
)
context['action_url'] = reverse( return context
'entities:farm:paddock_group_update',
kwargs={'paddock_group_id': paddock_group.pk}
)
context['form'] = form def delete_paddock_group(request, paddock_group_id):
paddock_group = _get_paddock_group_by_id(request, paddock_group_id)
return {'context': context}
def delete_paddock_group(paddock_group_id):
paddock_group = get_object_or_404(PaddockGroup, pk=paddock_group_id, is_active=True)
paddock_group.is_active = False paddock_group.is_active = False
paddock_group.save() paddock_group.save()
+19 -24
View File
@@ -8,34 +8,29 @@ from ..forms import UserLoginForm
def user_profile(request): # TO DO def user_profile(request): # TO DO
... ...
def get_user_login_context(request):
context = {}
form = UserLoginForm()
context['fail_login'] = False
context['form'] = form
return context
def user_login(request): def user_login(request):
if request.user.is_authenticated: form = UserLoginForm(request.POST)
return {'redirect': 'entities:user:farm_select'}
context = {} if not form.is_valid():
context['fail_login'] = False return False
form = UserLoginForm()
username = form.cleaned_data['login']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if request.method == "POST": if user is None:
form = UserLoginForm(request.POST) return False
if form.is_valid(): login(request, user)
username = form.cleaned_data['login'] return True
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
context['title'] = 'Fazendas'
return {'redirect': 'entities:user:farm_select'}
else:
context['fail_login'] = True
else:
context['fail_login'] = True
context['form'] = form
return {'context': context}
def user_logout(request): def user_logout(request):
+61 -46
View File
@@ -1,4 +1,3 @@
from django.views.decorators.http import require_http_methods
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from core.decorators import farm_required from core.decorators import farm_required
from ..services import farm as services from ..services import farm as services
@@ -12,97 +11,113 @@ def farm_home(request):
@farm_required @farm_required
def farm_create(request): def farm_create(request):
context = services.get_farm_create_context()
if request.method == 'GET': if request.method == 'GET':
context = services.get_farm_create_context()
return render(request, 'farm/farm_create.html', context) return render(request, 'farm/farm_create.html', context)
elif request.method == 'POST': if request.method == 'POST':
success = services.create_farm(request) if services.create_farm(request):
if success:
return redirect('entities:farm:farm_list') return redirect('entities:farm:farm_list')
context['error'] = "Não foi possível criar a fazenda"
return redirect('entities:farm:farm_create') return render(request, 'farm/farm_create.html', context)
@farm_required @farm_required
def farm_update(request, farm_id): def farm_update(request, farm_id):
result = services.update_farm(request, farm_id) context = services.get_update_farm_context(request, farm_id)
if request.method == 'GET':
if result.get('redirect'): return render(request, 'farm/farm_update.html', context)
return redirect(result['redirect'])
return render(request, 'farm/farm_update.html', result['context'])
if request.method == 'POST':
if services.update_farm(request, farm_id):
return redirect('entities:farm:farm_home')
context['error'] = "Não foi possível editar a fazenda"
return render(request, 'farm/farm_update.html', context)
@farm_required @farm_required
@require_http_methods(["POST"])
def farm_delete(request, farm_id): def farm_delete(request, farm_id):
services.delete_farm(request, farm_id) if request.method == 'GET':
context = services.get_farm_delete_context(request, farm_id)
return render(request, 'confirmation_popup.html', context)
if request.method == 'POST':
services.delete_farm(request, farm_id)
return redirect('entities:farm:farm_create') return redirect('entities:farm:farm_create')
# Paddock Views # Paddock Views
@farm_required @farm_required
def paddock_create(request): def paddock_create(request):
context = services.get_paddock_create_context()
if request.method == 'GET': if request.method == 'GET':
context = services.get_paddock_create_context()
return render(request, 'paddock/paddock_create.html', context) return render(request, 'paddock/paddock_create.html', context)
elif request.method == 'POST': if request.method == 'POST':
success = services.create_paddock(request) if services.create_paddock(request):
if success:
return redirect('entities:farm:paddock_list') return redirect('entities:farm:paddock_list')
context['error'] = "Não foi possível criar o piquete"
return redirect('entities:farm:paddock_create') return render(request, 'paddock/paddock_create.html', context)
@farm_required @farm_required
def paddock_update(request, paddock_id): def paddock_update(request, paddock_id):
result = services.update_paddock(request, paddock_id) context = services.get_paddock_update_context(request, paddock_id)
if request.method == 'GET':
if result.get('redirect'): return render(request, 'paddock/paddock_update.html', context)
return redirect(result['redirect'])
return render(request, 'paddock/paddock_update.html', result['context'])
if request.method == 'POST':
if services.update_paddock(request, paddock_id):
return redirect('entities:farm:paddock_list')
context['error'] = "Não foi possível editar o piquete"
return render(request, 'paddock/paddock_update.html', context)
@farm_required @farm_required
@require_http_methods(["POST"])
def paddock_delete(request, paddock_id): def paddock_delete(request, paddock_id):
services.delete_paddock(request, paddock_id) if request.method == 'GET':
context = services.get_paddock_delete_context(request, paddock_id)
return render(request, 'confirmation_popup.html', context)
if request.method == 'POST':
services.delete_paddock(request, paddock_id)
return redirect('entities:farm:paddock_list') return redirect('entities:farm:paddock_list')
# Paddock Group Views # Paddock Group Views
@farm_required @farm_required
def paddock_group_create(request): def paddock_group_create(request):
context = services.get_paddock_group_create_context(request)
if request.method == 'GET': if request.method == 'GET':
context = services.get_paddock_group_create_context()
return render(request, 'paddock_group/paddock_group_create.html', context) return render(request, 'paddock_group/paddock_group_create.html', context)
elif request.method == 'POST': if request.method == 'POST':
success = services.create_paddock_group(request) if services.create_paddock_group(request):
if success:
return redirect('entities:farm:paddock_group_list') return redirect('entities:farm:paddock_group_list')
return redirect('entities:farm:paddock_group_create') context['error'] = "Não foi possível criar o bloco"
return render(request, 'paddock_group/paddock_group_create.html', context)
@farm_required @farm_required
def paddock_group_update(request, paddock_group_id): def paddock_group_update(request, paddock_group_id):
result = services.update_paddock_group(request, paddock_group_id) context = services.get_paddock_group_update_context(request, paddock_group_id)
if result.get('redirect'): if request.method == 'GET':
return redirect(result['redirect']) return render(request, 'paddock_group/paddock_group_update.html', context)
return render(request, 'paddock_group/paddock_group_update.html', result['context']) if request.method == 'POST':
if services.update_paddock_group(request, paddock_group_id):
return redirect('entities:farm:paddock_group_list')
context['error'] = "Não foi possível editar o bloco"
return render(request, 'paddock_group/paddock_group_update.html', context)
@farm_required @farm_required
@require_http_methods(["POST"])
def paddock_group_delete(request, paddock_group_id): def paddock_group_delete(request, paddock_group_id):
services.delete_paddock_group(request, paddock_group_id) if request.method == 'GET':
context = services.get_paddock_group_delete_context(request, paddock_group_id)
return render(request, 'confirmation_popup.html', context)
if request.method == 'POST':
services.delete_paddock_group(request, paddock_group_id)
return redirect('entities:farm:paddock_group_list') return redirect('entities:farm:paddock_group_list')
+13 -6
View File
@@ -7,13 +7,20 @@ def user_profile(request): # TO DO
def user_login(request): def user_login(request):
result = services.user_login(request) if request.user.is_authenticated:
return redirect('entities:user:farm_select')
if result.get('redirect'):
return redirect(result['redirect']) context = services.get_user_login_context(request)
return render(request, 'login.html', result['context'])
if request.method == 'GET':
return render(request, 'login.html', context)
if request.method == 'POST':
if not services.user_login(request):
context['fail_login'] = True
return render(request, 'login.html', context)
return redirect('entities:user:farm_select')
def user_logout(request): def user_logout(request):
return services.user_logout(request) return services.user_logout(request)