Esempio n. 1
0
def ajouter(request):
    """create a new driver account and credentials with picture (optional)"""
    # setting general template context
    context = updated_context()
    context['creer_user_form'] = CreerUser()
    context['creer_cond_form'] = CondForm()
    context['photo_form'] = PhotoForm()

    if request.method == 'POST':
        creer_user_form = CreerUser(request.POST)
        creer_cond_form = CondForm(request.POST)

        # Checking if both forms are valid
        if creer_user_form.is_valid() and creer_cond_form.is_valid():
            created_user_form = creer_user_form.save()
            created_cond_form = creer_cond_form.save(commit=False)
            created_cond_form.user = created_user_form

            # Creating token for added user
            Token.objects.create(user=created_user_form)

            # if picture file has been selected
            if len(request.FILES):
                photo_form = PhotoForm(request.POST, request.FILES)

                if photo_form.is_valid():
                    temp_photo_form = photo_form.save(commit=False)
                    created_cond_form.id_photo = temp_photo_form
                    photo_form.crop_and_save()

            created_cond_form.save()
            messages.success(request, 'Conducteur ajouté avec succès.')

            # adding picture messages "AFTER" main form messages
            if len(request.FILES):
                messages.success(
                    request, 'Une photo de profil a également été ajoutée')
            else:
                messages.info(request, "Aucune photo n'a été ajoutée")

            return redirect('employe:page_conducteurs')

        # if errors in user_form and/or cond_form
        else:
            messages.error(request, creer_user_form.errors)
            messages.error(request, creer_cond_form.errors)

            # reassign the sent form to context (including errors)
            context['creer_user_form'] = creer_user_form
            context['creer_cond_form'] = creer_cond_form

    return render(request=request,
                  template_name='employe/ajouter.html',
                  context=context)
Esempio n. 2
0
def fiche_vehicule(request, pk):
    """displays vehicle's info"""
    vehicule = get_object_or_404(Vehicule, id=pk)
    veh_filled_form = ModifierVeh(instance=vehicule)

    possible_notifications = Notification.objects.filter(
        Q(is_ct=True) | Q(is_entretien=True) | Q(is_assurance=True),
        id_vehicule=pk,
        seen=False,
    )

    # marking eventual notifications as "seen"
    for possible_notification in possible_notifications:
        possible_notification.seen = True
        possible_notification.save()

    context = updated_context()
    context['veh_form_modifier'] = veh_filled_form

    if request.POST:
        veh_filled_form = ModifierVeh(request.POST, instance=vehicule)

        if veh_filled_form.is_valid():
            veh_filled_form.save()

            messages.success(request, 'Véhicule modifié avec succès.')
            return redirect('vehicule:page_vehicules')

        # in case of errors
        else:
            messages.error(request, veh_filled_form.errors)

            # reassign the sent form to context (including errors)
            context['veh_form_modifier'] = veh_filled_form

    return render(request=request,
                  template_name='vehicule/fiche.html',
                  context=context)
Esempio n. 3
0
def ajouter_veh(request):
    """creates a new vehicle"""
    context = updated_context()
    context['creer_veh_form'] = CreerVeh()

    if request.method == 'POST':
        creer_veh_form = CreerVeh(request.POST)

        if creer_veh_form.is_valid():
            creer_veh_form.save()

            messages.success(request, 'Véhicule ajouté avec succès.')
            return redirect('vehicule:page_vehicules')

        else:
            messages.error(request, creer_veh_form.errors)

            # reassign the sent form to context (including errors)
            context['creer_veh_form'] = creer_veh_form

    return render(request=request,
                  template_name='vehicule/ajouter.html',
                  context=context)
Esempio n. 4
0
def page_vehicules(request):
    """lists all vehicles (including non-available ones)"""
    return render(request=request,
                  template_name='vehicule/vehicules.html',
                  context=updated_context())
Esempio n. 5
0
def page_recherche(request):
    """search by driver or vehicle and get relevant history"""
    context = updated_context()

    if request.POST:
        if request.POST.get('recherche_cond') != '0':
            context['recherche_cond'] = True

            # retrieve selected employe and add it to context
            employe_selectionne = Employe.objects.get(
                pk=request.POST.get('recherche_cond'))
            context['cond_selectionne'] = employe_selectionne

            # retrieve instances of Conduire
            conduites = Conduire.objects.filter(id_employe=employe_selectionne)
            context['conduites'] = conduites

            # retrieve fines linked to employe_selectionné
            amendes = Amende.objects.filter(id_employe=employe_selectionne)
            context['amendes'] = amendes

            # retrieve the sum of amendes
            total_amendes = amendes.aggregate(sum=Sum('montant'))['sum']
            context['total_amendes'] = total_amendes

        if request.POST.get('recherche_veh') != '0':
            context['recherche_veh'] = True

            # retrieve selected vehicule and add it to context
            vehicule_selectionne = Vehicule.objects.get(
                pk=request.POST.get('recherche_veh'))
            context['veh_selectionne'] = vehicule_selectionne

            # retrieve the sum of amendes
            amendes = Amende.objects.filter(id_vehicule=vehicule_selectionne)
            context['amendes'] = amendes

            # retrieve the sum of amendes
            total_amendes = amendes.aggregate(sum=Sum('montant'))['sum']
            context['total_amendes'] = total_amendes

            # retrieve sum of vehicule services
            frais_d_entretien = Entretien.objects.filter(
                id_vehicule=vehicule_selectionne)
            total_frais_d_entretien = frais_d_entretien.aggregate(
                sum=Sum('montant'))['sum']
            context['total_frais_d_entretien'] = total_frais_d_entretien

            # retrieve most recent service date if any
            entretiens = Entretien.objects.filter(
                id_vehicule=vehicule_selectionne)
            context['entretiens'] = entretiens

            # retrieve most recent service date if any
            if entretiens:
                dernier_entretien = entretiens.latest('date')
                context['dernier_entretien'] = dernier_entretien

            # retrieve instances of Conduire
            conduites = Conduire.objects.filter(
                id_vehicule=vehicule_selectionne)
            context['conduites'] = conduites

    return render(request=request,
                  template_name='historique/page_recherche.html',
                  context=context)
Esempio n. 6
0
def voir_profil(request, pk):
    """access driver's profile information"""
    conducteur = get_object_or_404(Employe, id=pk)
    user_filled_form = ModifierUser(instance=conducteur.user)
    cond_filled_form = CondForm(instance=conducteur)

    context = updated_context()
    context['user_form_modifier'] = user_filled_form
    context['cond_form_modifier'] = cond_filled_form
    context['photo_form'] = PhotoForm()
    context['conducteur'] = conducteur

    if request.POST:
        user_filled_form = ModifierUser(request.POST, instance=conducteur.user)
        cond_filled_form = CondForm(request.POST, instance=conducteur)

        if user_filled_form.is_valid() and cond_filled_form.is_valid():
            user = user_filled_form.save()
            cond = cond_filled_form.save(commit=False)
            cond.user = user

            # if picture file has been selected
            if len(request.FILES):

                # we find the old profile to delete it later (after new picture is saved)
                try:
                    old_profil_pic_id = conducteur.id_photo
                    old_profil_pic = Photo.objects.get(id=old_profil_pic_id.id)

                # do nothing in case there is no old picture
                except Photo.DoesNotExist:
                    pass

                # retrieving the submitted form
                photo_form = PhotoForm(request.POST,
                                       request.FILES,
                                       instance=conducteur.id_photo)

                if photo_form.is_valid():
                    temp_photo_form = photo_form.save(commit=False)
                    cond.id_photo = temp_photo_form
                    photo_form.crop_and_save()

                    # once new picture is saved, we delete the old picture
                    if old_profil_pic:
                        old_profil_pic.picture.delete(save=False)

            cond.save()

            messages.success(request, 'Conducteur modifié avec succès.')

            # adding picture messages "AFTER" main form messages
            if len(request.FILES):
                messages.success(request,
                                 'La photo de profil a été mise à jour')
            else:
                messages.info(
                    request,
                    "Aucune modification n'a été enregistrée sur la photo")

            return redirect('employe:page_conducteurs')

        # if errors in user_filled_form and/or cond_filled_form
        else:
            messages.error(request, user_filled_form.errors)
            messages.error(request, cond_filled_form.errors)

            # reassign the sent form to context (including errors)
            context['user_form_modifier'] = user_filled_form
            context['cond_form_modifier'] = cond_filled_form

    # else if GET request
    return render(request=request,
                  template_name='employe/profil.html',
                  context=context)
Esempio n. 7
0
def page_conducteurs(request):
    """generates webpage conducteurs"""
    return render(request=request,
                  template_name='employe/conducteurs.html',
                  context=updated_context())