def add(request, form_class=JobForm, template_name="jobs/add.html", object_type=Job, success_redirect='job', thankyou_redirect='job.thank_you'): require_payment = get_setting('module', 'jobs', 'jobsrequirespayment') can_add_active = has_perm(request.user, 'jobs.add_job') get_object_or_404(ContentType, app_label=object_type._meta.app_label, model=object_type._meta.model_name) form = form_class(request.POST or None, request.FILES or None, user=request.user) # adjust the fields depending on user type if not require_payment: del form.fields['payment_method'] del form.fields['list_type'] if request.method == "POST": if require_payment: is_free = is_free_listing(request.user, request.POST.get('pricing', 0), request.POST.get('list_type')) if is_free: del form.fields['payment_method'] if form.is_valid(): job = form.save(commit=False) pricing = form.cleaned_data['pricing'] if require_payment and is_free: job.payment_method = 'paid - cc' # set it to pending if the user is anonymous or not an admin if not can_add_active: #job.status = 1 job.status_detail = 'pending' # list types and duration if not job.requested_duration: job.requested_duration = 30 if not job.list_type: job.list_type = 'regular' # set up all the times now = datetime.now() job.activation_dt = now if not job.post_dt: job.post_dt = now # set the expiration date job.expiration_dt = job.activation_dt + timedelta( days=job.requested_duration) # semi-anon job posts don't get a slug field on the form # see __init__ method in JobForm if not job.slug: #job.slug = get_job_unique_slug(slugify(job.title)) job.slug = '%s-%s' % (slugify( job.title), object_type.objects.count()) job = update_perms_and_save(request, form, job) # create invoice job_set_inv_payment(request.user, job, pricing) #save relationships job.save() msg_string = u'Successfully added %s' % str(job) messages.add_message(request, messages.SUCCESS, _(msg_string)) # send notification to administrators recipients = get_notice_recipients('module', 'jobs', 'jobrecipients') if recipients: if notification: extra_context = { 'object': job, 'request': request, } notification.send_emails(recipients, 'job_added', extra_context) # send user to the payment page if payment is required if require_payment: if job.payment_method.lower() in [ 'credit card', 'cc', 'online payment' ]: if job.invoice and job.invoice.balance > 0: return HttpResponseRedirect( reverse('payment.pay_online', args=[job.invoice.id, job.invoice.guid])) # send user to thank you or view page if request.user.profile.is_superuser: return HttpResponseRedirect( reverse(success_redirect, args=[job.slug])) else: return HttpResponseRedirect(reverse(thankyou_redirect)) else: # Redirect user w/perms to create pricing if none exist pricings = JobPricing.objects.all() if not pricings and has_perm(request.user, 'jobs.add_jobpricing'): msg_string = 'You need to add a %s Pricing before you can add a %s.' % ( get_setting('module', 'jobs', 'label_plural'), get_setting('module', 'jobs', 'label')) messages.add_message(request, messages.WARNING, _(msg_string)) return HttpResponseRedirect(reverse('job_pricing.add')) return render_to_resp(request=request, template_name=template_name, context={ 'form': form, 'require_payment': require_payment })
def add(request, form_class=JobForm, template_name="jobs/add.html", object_type=Job, success_redirect='job', thankyou_redirect='job.thank_you'): require_payment = get_setting('module', 'jobs', 'jobsrequirespayment') can_add_active = has_perm(request.user, 'jobs.add_job') content_type = get_object_or_404( ContentType, app_label=object_type._meta.app_label, model=object_type._meta.model_name ) if request.user.profile.is_superuser: category_form_class = CategoryForm else: category_form_class = CategoryForm2 form = form_class(request.POST or None, request.FILES or None, user=request.user) # adjust the fields depending on user type if not require_payment: del form.fields['payment_method'] del form.fields['list_type'] if request.method == "POST": if require_payment: is_free = is_free_listing(request.user, request.POST.get('pricing', 0), request.POST.get('list_type')) if is_free: del form.fields['payment_method'] categoryform = category_form_class( content_type, request.POST,) if form.is_valid() and categoryform.is_valid(): job = form.save(commit=False) pricing = form.cleaned_data['pricing'] if require_payment and is_free: job.payment_method = 'paid - cc' # set it to pending if the user is anonymous or not an admin if not can_add_active: #job.status = 1 job.status_detail = 'pending' # list types and duration if not job.requested_duration: job.requested_duration = 30 if not job.list_type: job.list_type = 'regular' # set up all the times now = datetime.now() job.activation_dt = now if not job.post_dt: job.post_dt = now # set the expiration date job.expiration_dt = job.activation_dt + timedelta( days=job.requested_duration) # semi-anon job posts don't get a slug field on the form # see __init__ method in JobForm if not job.slug: #job.slug = get_job_unique_slug(slugify(job.title)) job.slug = '%s-%s' % (slugify(job.title), object_type.objects.count()) job = update_perms_and_save(request, form, job) # create invoice job_set_inv_payment(request.user, job, pricing) #setup categories category = Category.objects.get_for_object(job, 'category') sub_category = Category.objects.get_for_object( job, 'sub_category') ## update the category of the job category_removed = False category = categoryform.cleaned_data['category'] if category != '0': Category.objects.update(job, category, 'category') else: # remove category_removed = True Category.objects.remove(job, 'category') Category.objects.remove(job, 'sub_category') if not category_removed: # update the sub category of the job sub_category = categoryform.cleaned_data['sub_category'] if sub_category != '0': Category.objects.update(job, sub_category, 'sub_category') else: # remove Category.objects.remove(job,'sub_category') #save relationships job.save() msg_string = 'Successfully added %s' % job messages.add_message(request, messages.SUCCESS,_(msg_string)) # send notification to administrators recipients = get_notice_recipients( 'module', 'jobs', 'jobrecipients') if recipients: if notification: extra_context = { 'object': job, 'request': request, } notification.send_emails(recipients, 'job_added', extra_context) # send user to the payment page if payment is required if require_payment: if job.payment_method.lower() in ['credit card', 'cc']: if job.invoice and job.invoice.balance > 0: return HttpResponseRedirect(reverse( 'payment.pay_online', args=[job.invoice.id, job.invoice.guid]) ) # send user to thank you or view page if request.user.profile.is_superuser: return HttpResponseRedirect( reverse(success_redirect, args=[job.slug])) else: return HttpResponseRedirect(reverse(thankyou_redirect)) else: # Redirect user w/perms to create pricing if none exist pricings = JobPricing.objects.all() if not pricings and has_perm(request.user, 'jobs.add_jobpricing'): msg_string = 'You need to add a %s Pricing before you can add a %s.' % (get_setting('module', 'jobs', 'label_plural'),get_setting('module', 'jobs', 'label')) messages.add_message(request, messages.WARNING, _(msg_string)) return HttpResponseRedirect(reverse('job_pricing.add')) initial_category_form_data = { 'app_label': 'jobs', 'model': 'job', 'pk': 0, #not used for this view but is required for the form } categoryform = category_form_class( content_type, initial=initial_category_form_data,) return render_to_response(template_name, {'form': form, 'require_payment': require_payment, 'categoryform': categoryform}, context_instance=RequestContext(request))