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)
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)
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)
def page_vehicules(request): """lists all vehicles (including non-available ones)""" return render(request=request, template_name='vehicule/vehicules.html', context=updated_context())
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)
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)
def page_conducteurs(request): """generates webpage conducteurs""" return render(request=request, template_name='employe/conducteurs.html', context=updated_context())