diff --git a/multigranja/apps/entities/services/farm.py b/multigranja/apps/entities/services/farm.py index 6a8d97c..f22008f 100644 --- a/multigranja/apps/entities/services/farm.py +++ b/multigranja/apps/entities/services/farm.py @@ -1,13 +1,47 @@ from django.shortcuts import get_object_or_404 from django.urls import reverse -from django.db.models import Prefetch from ..models import Farm, Paddock, PaddockGroup from ..forms import FarmCreateForm, FarmEditForm, PaddockCreateForm, PaddockEditForm, PaddockGroupCreateForm, PaddockGroupEditForm -def get_selected_farm(request): - return Farm.objects.get(id=request.session['selected_farm_id']) +def _get_selected_farm_id(request): + 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 @@ -18,7 +52,7 @@ def get_farm_home_context(request): context['title'] = 'Fazenda' 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 ) @@ -26,7 +60,6 @@ def get_farm_home_context(request): return context - def get_farm_create_context(): form = FarmCreateForm() @@ -38,7 +71,6 @@ def get_farm_create_context(): return context - def create_farm(request): form = FarmCreateForm(request.POST) authenticated_user = request.user @@ -50,9 +82,9 @@ def create_farm(request): return False - -def update_farm(request, farm_id): - farm = get_object_or_404(Farm, pk=farm_id, is_active=True) +def get_update_farm_context(request, farm_id): + farm = _get_farm_by_id(request, farm_id) + form = FarmEditForm(instance=farm) context = {} context['title'] = 'Editar fazenda' @@ -61,121 +93,113 @@ def update_farm(request, farm_id): kwargs={'farm_id': farm.pk} ) 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 - 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): - farm = get_object_or_404(Farm, pk=farm_id, is_active=True) + if form.is_valid(): + 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.save() # 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): - selected_farm = get_selected_farm(request) + form = PaddockCreateForm(request.POST) + selected_farm = _get_selected_farm(request) - if request.method == 'GET': - form = PaddockCreateForm() + if form.is_valid(): + paddock = form.save(commit=False) + paddock.farm = selected_farm + paddock.save() - context = { - 'title': 'Novo Piquete', - 'form': form, - 'action_url': reverse('entities:farm:paddock_create'), - 'return_url': reverse('entities:farm:paddock_list') - } + return True - return {'context': context} + return False - elif request.method == 'POST': - form = PaddockCreateForm(request.POST) +def get_paddock_update_context(request, paddock_id): + paddock = _get_paddock_by_id(request, paddock_id) + form = PaddockEditForm(instance=paddock) - if form.is_valid(): - paddock = form.save(commit=False) - paddock.farm = selected_farm - paddock.save() - - return {'redirect': 'entities:farm:paddock_list'} - - context = { - 'title': 'Novo Piquete', - 'form': form, - 'action_url': reverse('entities:farm:paddock_create'), - 'return_url': reverse('entities:farm:paddock_list') - } - - return {'context': context} + context = { + 'title': 'Editar piquete', + 'action_url': reverse( + 'entities:farm:paddock_update', + kwargs={'paddock_id': paddock.pk} + ), + 'return_url': reverse('entities:farm:paddock_list'), + 'form': form + } + return context def update_paddock(request, paddock_id): - farm_id = request.session['selected_farm_id'] - paddock = get_object_or_404(Paddock, pk=paddock_id, farm_id=farm_id, is_active=True) + paddock = _get_paddock_by_id(request, paddock_id) + 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['title'] = 'Editar piquete' - context['action_url'] = reverse( - 'entities:farm:paddock_update', - kwargs={'paddock_id': paddock.pk} + context['description'] = f"Excluir registro do piquete {paddock.identifier}" + context['positive_url'] = reverse( + 'entities:farm:paddock_delete', + 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': - form = PaddockEditForm(instance=paddock) + return context - elif request.method == 'POST': - form = PaddockEditForm(request.POST, instance=paddock) - - 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) +def delete_paddock(request, paddock_id): + paddock = _get_paddock_by_id(request, paddock_id) paddock.is_active = False paddock.save() # Paddock Group Services -def create_paddock_group(request): - selected_farm = get_selected_farm(request) - - 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 - ) +def get_paddock_group_create_context(request): + form = PaddockGroupCreateForm() context = { 'title': 'Novo Bloco', @@ -184,56 +208,66 @@ def create_paddock_group(request): '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): - selected_farm = get_selected_farm(request) - paddock_group = get_object_or_404(PaddockGroup, pk=paddock_group_id, is_active=True) + if form.is_valid(): + form.save() + 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 = { - 'title': f'Editar Lote {paddock_group.identifier}', - 'return_url': reverse('entities:farm:paddock_group_list') + 'title': f'Editar Bloco {paddock_group.identifier}', + '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': - form = PaddockGroupEditForm(instance=paddock_group) + return context - form.fields['paddocks'].queryset = Paddock.objects.filter( - farm=selected_farm, - is_active=True - ) +def update_paddock_group(request, paddock_group_id): + paddock_group = _get_paddock_group_by_id(request, paddock_group_id) - context['action_url'] = reverse( - 'entities:farm:paddock_group_update', - kwargs={'paddock_group_id': paddock_group.pk} - ) + form = PaddockGroupEditForm( + request.POST, + instance=paddock_group + ) - elif request.method == 'POST': - form = PaddockGroupEditForm(request.POST, instance=paddock_group) + if form.is_valid(): + form.save() + return True - if form.is_valid(): - paddock_group = form.save() - paddock_group.save() + return False - 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( - farm=selected_farm, - is_active=True - ) + context = {} + context['description'] = ( + 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( - 'entities:farm:paddock_group_update', - kwargs={'paddock_group_id': paddock_group.pk} - ) + return context - context['form'] = form - - return {'context': context} - - -def delete_paddock_group(paddock_group_id): - paddock_group = get_object_or_404(PaddockGroup, pk=paddock_group_id, is_active=True) +def delete_paddock_group(request, paddock_group_id): + paddock_group = _get_paddock_group_by_id(request, paddock_group_id) paddock_group.is_active = False paddock_group.save() \ No newline at end of file diff --git a/multigranja/apps/entities/services/user.py b/multigranja/apps/entities/services/user.py index 7cd1123..3d36a07 100644 --- a/multigranja/apps/entities/services/user.py +++ b/multigranja/apps/entities/services/user.py @@ -8,34 +8,29 @@ from ..forms import UserLoginForm 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): - if request.user.is_authenticated: - return {'redirect': 'entities:user:farm_select'} + form = UserLoginForm(request.POST) - context = {} - context['fail_login'] = False - form = UserLoginForm() + if not form.is_valid(): + return False + + username = form.cleaned_data['login'] + password = form.cleaned_data['password'] + user = authenticate(request, username=username, password=password) - if request.method == "POST": - form = UserLoginForm(request.POST) - - if form.is_valid(): - username = form.cleaned_data['login'] - 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} + if user is None: + return False + + login(request, user) + return True def user_logout(request): diff --git a/multigranja/apps/entities/views/farm.py b/multigranja/apps/entities/views/farm.py index b18a157..646f189 100644 --- a/multigranja/apps/entities/views/farm.py +++ b/multigranja/apps/entities/views/farm.py @@ -1,4 +1,3 @@ -from django.views.decorators.http import require_http_methods from django.shortcuts import redirect, render from core.decorators import farm_required from ..services import farm as services @@ -12,97 +11,113 @@ def farm_home(request): @farm_required def farm_create(request): + context = services.get_farm_create_context() if request.method == 'GET': - context = services.get_farm_create_context() return render(request, 'farm/farm_create.html', context) - elif request.method == 'POST': - success = services.create_farm(request) - if success: + if request.method == 'POST': + if services.create_farm(request): return redirect('entities:farm:farm_list') - - return redirect('entities:farm:farm_create') - - + context['error'] = "Não foi possível criar a fazenda" + return render(request, 'farm/farm_create.html', context) @farm_required def farm_update(request, farm_id): - result = services.update_farm(request, farm_id) - - if result.get('redirect'): - return redirect(result['redirect']) - - return render(request, 'farm/farm_update.html', result['context']) + context = services.get_update_farm_context(request, farm_id) + if request.method == 'GET': + return render(request, 'farm/farm_update.html', 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 -@require_http_methods(["POST"]) 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') # Paddock Views @farm_required def paddock_create(request): + context = services.get_paddock_create_context() if request.method == 'GET': - context = services.get_paddock_create_context() return render(request, 'paddock/paddock_create.html', context) - elif request.method == 'POST': - success = services.create_paddock(request) - if success: + if request.method == 'POST': + if services.create_paddock(request): return redirect('entities:farm:paddock_list') - - return redirect('entities:farm:paddock_create') - - + context['error'] = "Não foi possível criar o piquete" + return render(request, 'paddock/paddock_create.html', context) @farm_required def paddock_update(request, paddock_id): - result = services.update_paddock(request, paddock_id) - - if result.get('redirect'): - return redirect(result['redirect']) - - return render(request, 'paddock/paddock_update.html', result['context']) + context = services.get_paddock_update_context(request, paddock_id) + if request.method == 'GET': + return render(request, 'paddock/paddock_update.html', 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 -@require_http_methods(["POST"]) 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') # Paddock Group Views @farm_required def paddock_group_create(request): + context = services.get_paddock_group_create_context(request) + if request.method == 'GET': - context = services.get_paddock_group_create_context() return render(request, 'paddock_group/paddock_group_create.html', context) - elif request.method == 'POST': - success = services.create_paddock_group(request) - if success: + if request.method == 'POST': + if services.create_paddock_group(request): 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 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'): - return redirect(result['redirect']) + if request.method == 'GET': + 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 -@require_http_methods(["POST"]) 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') \ No newline at end of file diff --git a/multigranja/apps/entities/views/user.py b/multigranja/apps/entities/views/user.py index 86e2a15..9fecc66 100644 --- a/multigranja/apps/entities/views/user.py +++ b/multigranja/apps/entities/views/user.py @@ -7,13 +7,20 @@ def user_profile(request): # TO DO def user_login(request): - result = services.user_login(request) - - if result.get('redirect'): - return redirect(result['redirect']) - - return render(request, 'login.html', result['context']) + if request.user.is_authenticated: + return redirect('entities:user:farm_select') + + context = services.get_user_login_context(request) + 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): return services.user_logout(request)