Migrate code to handle availability.contact

This commit is contained in:
Claude Paroz 2013-07-11 12:50:41 +02:00
parent bc046994ef
commit 1e6f91f59a
2 changed files with 29 additions and 13 deletions

View file

@ -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":

View file

@ -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' % (