from ares_util.ares import call_ares from django.contrib.auth.decorators import login_required from django.http import HttpRequest from django.http import HttpResponse from django.shortcuts import redirect from django.shortcuts import render from django.urls import reverse from . import forms from . import models def build_address(street: str, zip_code: int | str, city: str, city_part: str) -> str: return f'{street}, {zip_code}, {city} - {city_part}' @login_required def main_page(req: HttpRequest) -> HttpResponse: if req.method == 'POST': select_subject_form = forms.SelectSubjectForm( data=req.POST, instance=req.user, current_user=req.user, ) if select_subject_form.is_valid(): select_subject_form.save() return redirect(reverse('subjects:list')) elif req.method == 'GET': subjects = models.Subject.objects.exclude( id=req.user.supplier.id if req.user.supplier else None, ) select_subject_form = forms.SelectSubjectForm( instance=req.user, current_user=req.user, ) return render( req, 'subjects/index.html', dict(subjects=subjects, form=select_subject_form), ) return HttpResponse(status=405) @login_required def create_subject(req: HttpRequest) -> HttpResponse: if req.method == 'POST': form = forms.CreateSubjectForm(data=req.POST) if not form.is_valid(): return render(req, 'subjects/create.html', dict(form=form)) ares_data = call_ares(form.cleaned_data.get('cin')) ares_address_data = ares_data['address'] ares_legal_data = ares_data['legal'] subject = models.Subject.objects.create( id=ares_legal_data['company_id'], vat_id=ares_legal_data['company_vat_id'], ) models.SubjectData.objects.create( subject=subject, name=ares_legal_data['company_name'], street=ares_address_data['street'], zip_code=ares_address_data['zip_code'], city=ares_address_data['city'], city_part=ares_address_data['city_part'], ) return redirect(reverse('subjects:list')) elif req.method == 'GET': form = forms.CreateSubjectForm() return render(req, 'subjects/create.html', dict(form=form)) return HttpResponse(status=405) @login_required def link_subject(request: HttpRequest, subject_id: int) -> HttpResponse: subject = models.Subject.objects.get(pk=subject_id) subject.user_set.add(request.user) return redirect(reverse('subjects:list')) @login_required def unlink_subject(request: HttpRequest, subject_id: int) -> HttpResponse: subject = models.Subject.objects.get(pk=subject_id) subject.user_set.remove(request.user) return redirect(reverse('subjects:list'))