diff --git a/stages/admin.py b/stages/admin.py index a54a20b..602fabe 100644 --- a/stages/admin.py +++ b/stages/admin.py @@ -56,27 +56,36 @@ class AvailabilityAdminForm(forms.ModelForm): Custom avail form to create several availabilities at once when inlined in the PeriodAdmin interface """ - num_avail = forms.IntegerField(label="Nombre de places", initial=1) + num_avail = forms.IntegerField(label="Nombre de places", initial=1, required=False) + + class Media: + js = ('js/avail_form.js',) + class Meta: model = Availability widgets = { 'num_avail': forms.TextInput(attrs={'size': 3}), } - def __init__(self, *args, **kwargs): - super(AvailabilityAdminForm, self).__init__(*args, **kwargs) + def __init__(self, data=None, files=None, **kwargs): + super(AvailabilityAdminForm, self).__init__(data=data, files=files, **kwargs) if self.instance.pk is not None: # Hide num_avail on existing instances self.fields['num_avail'].widget = forms.HiddenInput() + # Limit CorpContact objects to contacts of chosen corporation + if data is None and self.instance.corporation_id: + self.fields['contact'].queryset = self.instance.corporation.corpcontact_set def save(self, **kwargs): instance = super(AvailabilityAdminForm, self).save(**kwargs) # Create supplementary availabilities depending on num_avail - for i in range(1, self.cleaned_data.get('num_avail', 1)): + num_avail = self.cleaned_data.get('num_avail', 1) or 1 + for i in range(1, num_avail): Availability.objects.create( corporation=instance.corporation, period=instance.period, domain=instance.domain, + contact=instance.contact, comment=instance.comment) return instance @@ -99,7 +108,8 @@ class PeriodAdmin(admin.ModelAdmin): class AvailabilityAdmin(admin.ModelAdmin): list_display = ('corporation', 'period', 'domain') list_filter = ('period',) - fields = (('corporation', 'period'), 'domain', 'comment') + fields = (('corporation', 'period'), 'domain', 'contact', 'comment') + form = AvailabilityAdminForm def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "corporation": diff --git a/stages/views.py b/stages/views.py index e6371ba..bcbba3f 100644 --- a/stages/views.py +++ b/stages/views.py @@ -179,12 +179,15 @@ def new_training(request): try: ref = Referent.objects.get(pk=ref_key) if ref_key else None contact = CorpContact.objects.get(pk=cont_key) if cont_key else None + avail = Availability.objects.get(pk=request.POST.get('avail')) training = Training.objects.create( student=Student.objects.get(pk=request.POST.get('student')), - availability=Availability.objects.get(pk=request.POST.get('avail')), + availability=avail, referent=ref, - contact=contact, ) + if avail.contact != contact: + avail.contact = contact + avail.save() except Exception as exc: return HttpResponse(str(exc)) return HttpResponse('OK') @@ -217,8 +220,10 @@ def stages_export(request): ('Ville Inst.', 'availability__corporation__city'), ('Domaine', 'availability__domain__name'), ('Remarques Inst.', 'availability__comment'), - ('Civilité contact', 'contact__title'), ('Prénom contact', 'contact__first_name'), - ('Nom contact', 'contact__last_name'), ('Courriel contact', 'contact__email'), + ('Civilité contact', 'availability__contact__title'), + ('Prénom contact', 'availability__contact__first_name'), + ('Nom contact', 'availability__contact__last_name'), + ('Courriel contact', 'availability__contact__email'), ] period_filter = request.GET.get('filter') @@ -245,13 +250,14 @@ def stages_export(request): for row_idx, tr in enumerate(query.values(*query_keys), start=1): for col_idx, field in enumerate(query_keys): ws.cell(row=row_idx, column=col_idx).value = tr[field] - if tr['contact__last_name'] is None: + if tr['availability__contact__last_name'] is None: # Use default contact contact = contacts.get(tr['availability__corporation__name']) if contact: - ws.cell(row=row_idx, column=col_idx-2).value = contact.title - ws.cell(row=row_idx, column=col_idx-1).value = contact.first_name - ws.cell(row=row_idx, column=col_idx).value = contact.last_name + ws.cell(row=row_idx, column=col_idx-3).value = contact.title + ws.cell(row=row_idx, column=col_idx-2).value = contact.first_name + ws.cell(row=row_idx, column=col_idx-1).value = contact.last_name + ws.cell(row=row_idx, column=col_idx).value = contact.email response = HttpResponse(save_virtual_workbook(wb), mimetype='application/ms-excel') response['Content-Disposition'] = 'attachment; filename=%s%s.xlsx' % (