Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Relocation planner #49

Merged
merged 8 commits into from
Nov 27, 2024
1 change: 1 addition & 0 deletions config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
'companies.apps.CompaniesConfig',
'online_security.apps.OnlineSecurityConfig',
'pack_planner.apps.PackPlannerConfig',
'relocation_planner.apps.RelocationPlannerConfig',
'safety_at_home.apps.SafetyAtHomeConfig',
'users.apps.UsersConfig',
]
Expand Down
1 change: 1 addition & 0 deletions config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
path('login/', auth_views.LoginView.as_view(template_name='companies/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(next_page='/'), name='logout'),
path('packplanner/', include('pack_planner.urls')),
path('relocation/', include('relocation_planner.urls')),
path('safetyathome/', include('safety_at_home.urls')),
path('securityonline/', include('online_security.urls')),
]
3 changes: 2 additions & 1 deletion pack_planner/templates/pack_planner/assessment_results.html
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ <h3 class="text-lg font-bold text-gray-900">{{ category.name }}</h3>

<a href="{% url 'item_detail' item.id %}"
class="min-w-[120px] px-4 py-2 text-sm font-medium border border-indigo-500 rounded text-indigo-500 hover:bg-indigo-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 text-center">
View Details
More Info
</a>
</div>
</div>
Expand Down Expand Up @@ -382,6 +382,7 @@ <h3 class="text-lg font-bold text-gray-900">{{ category.name }}</h3>
})
.then(response => response.json())
.then(data => {
console.log('Full response data:', data);
if (data.status === 'success') {
const itemElement = buttonElement.closest('[data-item-id]');
itemElement.classList.add('hidden');
Expand Down
Empty file added relocation_planner/__init__.py
Empty file.
62 changes: 62 additions & 0 deletions relocation_planner/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
from django.contrib import admin
from .models import (
Country,
Language,
Visa,
VisaRequirement,
AnimalSpecies,
PetRelocationRequirement
)

# Inline admin classes for nested relationships
class VisaRequirementInline(admin.TabularInline):
model = VisaRequirement
extra = 1

class VisaInline(admin.StackedInline):
model = Visa
extra = 1
inlines = [VisaRequirementInline]
show_change_link = True

class PetRelocationRequirementInline(admin.TabularInline):
model = PetRelocationRequirement
extra = 1

@admin.register(Country)
class CountryAdmin(admin.ModelAdmin):
list_display = ('name', 'business_language', 'cost_of_living_index', 'quality_of_life_index')
list_filter = ('has_universal_healthcare', 'business_language')
search_fields = ('name',)
prepopulated_fields = {'slug': ('name',)}
filter_horizontal = ('common_languages',)
inlines = [VisaInline, PetRelocationRequirementInline]

@admin.register(Visa)
class VisaAdmin(admin.ModelAdmin):
list_display = ('name', 'country', 'duration')
list_filter = ('country',)
search_fields = ('name', 'country__name')
inlines = [VisaRequirementInline]

@admin.register(VisaRequirement)
class VisaRequirementAdmin(admin.ModelAdmin):
list_display = ('name', 'visa')
list_filter = ('visa__country',)
search_fields = ('name', 'description', 'visa__name')

@admin.register(AnimalSpecies)
class AnimalSpeciesAdmin(admin.ModelAdmin):
list_display = ('name',)
search_fields = ('name',)

@admin.register(PetRelocationRequirement)
class PetRelocationRequirementAdmin(admin.ModelAdmin):
list_display = ('name', 'animal', 'type', 'country')
list_filter = ('animal', 'type', 'country')
search_fields = ('name', 'description', 'country__name')

@admin.register(Language)
class LanguageAdmin(admin.ModelAdmin):
list_display = ('name',)
search_fields = ('name',)
6 changes: 6 additions & 0 deletions relocation_planner/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class RelocationPlannerConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'relocation_planner'
16 changes: 16 additions & 0 deletions relocation_planner/forms/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from .edit_country import EditCountryForm
from .edit_pet_relocation_data import EditPetRelocationRequirementForm
from .edit_visa_requirement import EditVisaRequirementForm
from .edit_visa import EditVisaForm
from .pet_relocation_requirement_formset import PetRelocationRequirementFormSet
from .visa_formset import VisaFormSet, VisaRequirementFormSet

__all__ = [
"EditCountryForm",
"EditPetRelocationRequirementForm",
"EditVisaRequirementForm",
"EditVisaForm",
"PetRelocationRequirementFormSet",
"VisaFormSet",
"VisaRequirementFormSet",
]
21 changes: 21 additions & 0 deletions relocation_planner/forms/edit_country.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from django import forms
from relocation_planner.models import Country, Language

class EditCountryForm(forms.ModelForm):
common_languages = forms.ModelMultipleChoiceField(
queryset=Language.objects.all(),
widget=forms.CheckboxSelectMultiple,
required=False,
)

class Meta:
model = Country
fields = [
"name",
"business_language",
"common_languages",
"cost_of_living_index",
"quality_of_life_index",
"has_universal_healthcare",
"pet_relocation_info_link",
]
14 changes: 14 additions & 0 deletions relocation_planner/forms/edit_pet_relocation_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from django import forms
from relocation_planner.models import PetRelocationRequirement

class EditPetRelocationRequirementForm(forms.ModelForm):
class Meta:
model = PetRelocationRequirement
fields = ["animal", "type", "name", "description", "duration"]
widgets = {
'type': forms.Select(attrs={'class': 'w-full border-gray-300 rounded-md'}),
'animal': forms.Select(attrs={'class': 'w-full border-gray-300 rounded-md'}),
'name': forms.TextInput(attrs={'class': 'w-full border-gray-300 rounded-md'}),
'description': forms.Textarea(attrs={'class': 'w-full border-gray-300 rounded-md', 'rows': 3}),
'duration': forms.TextInput(attrs={'class': 'w-full border-gray-300 rounded-md'}),
}
9 changes: 9 additions & 0 deletions relocation_planner/forms/edit_visa.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django import forms
from relocation_planner.models import Visa

class EditVisaForm(forms.ModelForm):
DELETE = forms.BooleanField(required=False, widget=forms.HiddenInput())

class Meta:
model = Visa
fields = ["name", "duration", "description", "information_link"]
7 changes: 7 additions & 0 deletions relocation_planner/forms/edit_visa_requirement.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django import forms
from relocation_planner.models import VisaRequirement

class EditVisaRequirementForm(forms.ModelForm):
class Meta:
model = VisaRequirement
fields = ["name", "description"]
11 changes: 11 additions & 0 deletions relocation_planner/forms/pet_relocation_requirement_formset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.forms import inlineformset_factory
from relocation_planner.models import Country, PetRelocationRequirement
from relocation_planner.forms.edit_pet_relocation_data import EditPetRelocationRequirementForm

PetRelocationRequirementFormSet = inlineformset_factory(
Country,
PetRelocationRequirement,
form=EditPetRelocationRequirementForm,
extra=0,
can_delete=True
)
20 changes: 20 additions & 0 deletions relocation_planner/forms/visa_formset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from django.forms import inlineformset_factory
from relocation_planner.models import Country, Visa, VisaRequirement
from .edit_visa import EditVisaForm
from .edit_visa_requirement import EditVisaRequirementForm

VisaRequirementFormSet = inlineformset_factory(
Visa,
VisaRequirement,
form=EditVisaRequirementForm,
extra=0,
can_delete=True
)

VisaFormSet = inlineformset_factory(
Country,
Visa,
form=EditVisaForm,
extra=0,
can_delete=True
)
Loading