def subject_add(request, initiative_uuid=None):
    system_message = None
    profile_id = request.session['profile_id']
    if request.POST:
        form = SubjectAddForm(request.POST)
        if form.is_valid() == False:
            system_message = 'Error!'
        else:
            if 'initiative_uuid' in request.POST:
                uuid = request.POST['initiative_uuid']
                if uuid != "":
                    initiative_id = initiative_dao.get_pulic_intitiative_id(
                        uuid)
                    # defensive check - make sure submitter id contributor
                    contrib_init = initiative_dao.all_contributing_initiative_ids(
                        profile_id)
                    can_create_subject = False
                    for init_id in contrib_init:
                        if init_id == int(initiative_id):
                            can_create_subject = True
                            break
                    if not can_create_subject:
                        system_message = 'Error! You must be Initiative contributor or sponsor to create subject.'
                    else:
                        short_desc = form.cleaned_data['short_desc']
                        long_desc = form.cleaned_data['long_desc']
                        subject_dao.subject_create(
                            initiative_id,
                            profile_id,
                            short_desc,
                            long_desc,
                            True)
                        system_message = "Subject successfully created."
                        form = SubjectAddForm()
                else:
                    system_message = 'Error! Initiative is required.'
            else:
                system_message = 'Error! Initiative missing'
    else:
        form = SubjectAddForm()

    if initiative_uuid is None:
        #initiatives = initiative_dao.initiative_list_by_profile_id(profile_id)
        initiatives = initiative_dao.all_contributing_initiatives(profile_id)

    else:
        initiatives = None

    return render_to_response('subject_add.html', {
                              'system_message': system_message,
                              'form': form,
                              'initiatives': initiatives,
                              'initiative_uuid': initiative_uuid
                              }, context_instance=RequestContext(request))
def initiative_service_offer(request, uuid=None):
    my_profile_id = request.session['profile_id']
    if request.POST:
        sl = request.POST.getlist('service_list')
        uuid = request.POST['uuid']
        initiative_id = initiative_dao.get_pulic_intitiative_id(uuid)

        # Initiative_Service_Offer.objects.filter(initiative_id=initiative_id,
        #                                        profile_id=my_profile_id).delete()
        existing_offers = Initiative_Service_Offer.objects.filter(
            initiative_id=initiative_id,
            profile_id=my_profile_id)

        existing_service_ids = []
        for existing_service in existing_offers:
            existing_service_ids.append(existing_service.service_id)
            if str(existing_service.service_id) not in sl:
                Initiative_Service_Offer.objects.get(
                    pk=existing_service.id).delete()

        for service in sl:
            if int(service) not in existing_service_ids:
                Initiative_Service_Offer.objects.create(
                    profile_id=request.session['profile_id'],
                    initiative_id=initiative_id,
                    service_id=service,
                    is_accepted=False)
        system_message = 'Update complete'
    else:
        system_message = None

    s = Service.objects.all().order_by('short_desc', )
    service_selected = Initiative_Service_Offer.objects.get_query_set().filter(
        initiative_id=initiative_dao.get_pulic_intitiative_id(uuid),
        profile_id=my_profile_id)
    return render_to_response('initiative_service_offer.html', {
                              'service_list': s,
                              'service_selected': service_selected,
                              'uuid': uuid,
                              'system_message': system_message,
                              }, RequestContext(request))
def initiative_rate(request, uuid=None):
    system_message = None
    my_profile_id = request.session['profile_id']

    if request.POST:
        initiative_id = initiative_dao.get_pulic_intitiative_id(
            request.POST['uuid'])
        initiative = Initiative.objects.get(pk=initiative_id)
        if my_profile_id == initiative.profile_id:
            system_message = 'You can not rate your own Initiative!'
            return render_to_response(
                'system.html', {
                    'system_message': system_message, }, context_instance=RequestContext(request))
        if 'star' in request.POST:
            rating = Decimal(request.POST['star'])
        else:
            system_message = "Error, you must select a rating."
            if 'initiative_rating_id' in request.POST:
                init_rating = Initiative_Rating.objects.get(
                    pk=request.POST['initiative_rating_id'])
            else:
                init_rating = None

            return render_to_response('initiative_rate.html', {
                                      'system_message': system_message,
                                      'initiative_id': initiative_id,
                                      'init_rating': init_rating,
                                      }, RequestContext(request))

        comments = request.POST['comments']
        if 'initiative_rating_id' in request.POST:
            initiative_rating_id = request.POST['initiative_rating_id']
            system_message = "Your rating has been updated"
            init_rating = Initiative_Rating.objects.get(
                pk=initiative_rating_id)
            init_rating.rating = rating
            init_rating.comments = comments
            init_rating.save()
        else:
            system_message = "Your rating has been added"
            init_rating = Initiative_Rating.objects.create(
                initiative_id=initiative_id,
                profile_id=my_profile_id,
                rating=rating,
                comments=comments
            )
    else:
        try:
            init_rating = Initiative_Rating.objects.get(
                initiative_id=Initiative.objects.get(
                    uuid=uuid).id,
                profile_id=my_profile_id)
            system_message = "Update rating"
        except Initiative_Rating.DoesNotExist:
            init_rating = None

    return render_to_response('initiative_rate.html', {
                              'system_message': system_message,
                              'uuid': uuid,
                              'init_rating': init_rating,
                              }, RequestContext(request))