Esempio n. 1
0
def edit_specialty(request, specialty_id):
    from forms import SpecialtyForm, GroupInlineForm, SpecialistInlineForm

    specialty = get_object_or_404(Specialty, id=specialty_id)

    if request.method == 'POST':
        group_forms = []

        # get all the groups
        groups =  request.POST.get('groups_list','').split(',')
        if not any(groups):
            groups = []

        group_forms = []
        for x in groups:
            # get the specialists in the group, or make an empty list if there arent any
            specialists = request.POST.get('g%s-specialists_list' % x, '').split(',')
            if not any(specialists):
                specialists = []

            try:
                # if the group exists in the DB, we need a form for an instance
                group = specialty.groups.get(pk=x)
                group_form = GroupInlineForm(request.POST, prefix="g%s" % x, instance=group)
            except Group.DoesNotExist:
                # if the group doesnt exist in the DB, just make a form with no instance
                group = None
                group_form = GroupInlineForm(request.POST, prefix="g%s" % x)

            # if the group does exist in the DB, then there might be existing Specialists too
            if group:
                specialist_forms = []
                for s in specialists:
                    try:
                        # if existing Specialist, create form with a Specialist instance
                        specialist = group.specialists.get(pk=s)
                        specialist_forms.append(SpecialistInlineForm(request.POST, prefix="g%s-s%s" % (x,s), instance=specialist))
                    except Specialist.DoesNotExist:
                        specialist = None
                        specialist_forms.append(SpecialistInlineForm(request.POST, prefix="g%s-s%s" % (x,s)))
            else:
                specialist_forms = [SpecialistInlineForm(request.POST, prefix="g%s-s%s" %(x,y)) for y in specialists],

            group_forms.append( {
                'group': group_form,
                'specialists' : specialist_forms,
                'specialist_list' : specialists,
                } )
    
        specialty_form = SpecialtyForm(request.POST, instance=specialty)
        context_dict = {
                        'specialty_form': specialty_form,
                        'group_forms' : group_forms,
                        'group_meta' : Group()._meta,
                        'specialist_meta' : Specialist()._meta,
                        'specialist_reference_form' : SpecialistInlineForm(),
                        'groups_list' : groups,
                       }

        # validate all forms
        validations = [
                        specialty_form.is_valid(),
                        all([ gf['group'].is_valid() for gf in group_forms]),
                        all([ sf.is_valid() for gf in group_forms for sf in gf['specialists'] if type(sf) != type([]) ]),
                      ]
        
        if all(validations):
            new_specialty = specialty_form.save(commit=False)
            new_specialty.slug = slugify(new_specialty.name)
            new_specialty.save()

            for gf in group_forms:
                new_group = gf['group'].save(commit=False)
                new_group.specialty = new_specialty
                new_group.save()

                for specialist_form in gf['specialists']:
                    if type(sf) != type([]):
                        new_specialist = specialist_form.save(commit=False)
                        new_specialist.group = new_group
                        new_specialist.save()

            cache_invalidate_specialty(0, new_specialty.id)
            return HttpResponseRedirect(reverse('show_filtered_list', kwargs = {'doctor' : 'department', 'specialty' : new_specialty.slug} ))
    else:
        groups_list = [str(grp.id) for grp in specialty.groups.all()]
        specialty_form = SpecialtyForm(instance=specialty, initial={'groups_list': ",".join(groups_list)})
        group_forms = []
        for grp in specialty.groups.all():
            specialists = [ str(spec.id) for spec in grp.specialists.all() ]
            group_forms.append( {
                'group': GroupInlineForm(prefix="g%s" % grp.id, instance=grp, initial={'specialists_list':",".join(specialists)}),
                'specialists' : [SpecialistInlineForm(prefix="g%s-s%s" %(grp.id,spec.id), instance=spec) for spec in grp.specialists.all()],
                'specialist_list' : specialists,
                } )
            
        context_dict = {'specialty_id' : specialty_id,
                        'specialty_form': specialty_form,
                        'group_meta' : Group()._meta,
                        'specialist_meta' : Specialist()._meta,
                        'group_forms' : group_forms,
                        'specialist_reference_form' : SpecialistInlineForm(),
                        'groups_list' : [ grp.id for grp in specialty.groups.all()],
                       }
    return render_to_response('specialty_one_shot.html', context_dict, context_instance=RequestContext(request))
Esempio n. 2
0
def add_specialty(request,):
    from forms import SpecialtyAddForm as SpecialtyForm
    from forms import GroupInlineForm, SpecialistInlineForm
    if request.method == 'POST':
        specialty_form = SpecialtyForm(request.POST)
        group_forms = []

        groups =  request.POST.get('groups_list','').split(',')
        if not any(groups):
            groups = []

        group_forms = []
        for x in groups:
            specialists = request.POST.get('g%s-specialists_list' % x, '').split(',')
            if not any(specialists):
                specialists = []

            group_forms.append( {
                'group': GroupInlineForm(request.POST, prefix="g%s" % x),
                'specialists' : [SpecialistInlineForm(request.POST, prefix="g%s-s%s" %(x,y)) for y in specialists],
                'specialist_list' : specialists,
                } )
    
        context_dict = {
                        'specialty_form': specialty_form,
                        'group_forms' : group_forms,
                        'group_meta' : Group()._meta,
                        'specialist_meta' : Specialist()._meta,
                        'specialist_reference_form' : SpecialistInlineForm(),
                        'groups_list' : groups,
                       }
        # validate all forms
        validations = [ specialty_form.is_valid(),
                        all([ gf['group'].is_valid() for gf in group_forms]),
                        all([ sf.is_valid() for gf in group_forms for sf in gf['specialists']]),
                      ]
        
        if all(validations):
            new_specialty = specialty_form.save(commit=False)
            new_specialty.slug = slugify(new_specialty.name)
            new_specialty.save()

            for gf in group_forms:
                new_group = gf['group'].save(commit=False)
                new_group.specialty = new_specialty
                new_group.save()

                for specialist_form in gf['specialists']:
                    if type(sf) != type([]):
                        new_specialist = specialist_form.save(commit=False)
                        new_specialist.group = new_group
                        new_specialist.save()

            cache_invalidate_specialty(0, 0)
            return HttpResponseRedirect(reverse('show_filtered_list', kwargs = {'doctor' : 'department', 'specialty' : new_specialty.slug} ))
    else:
        specialty_form = SpecialtyForm()
        group_forms = []
        context_dict = {
                        'specialty_form': specialty_form,
                        'group_meta' : Group()._meta,
                        'specialist_meta' : Specialist()._meta,
                        'group_forms' : group_forms,
                        'specialist_reference_form' : SpecialistInlineForm(),
                        'groups_list' : [],
                       }
    return render_to_response('specialty_one_shot.html', context_dict, context_instance=RequestContext(request))