示例#1
0
    def post(self, request, *args, **kwargs):

        payment_method = self.request.GET.get('method')
        context = template_context(self.request)
        proposal_id = int(kwargs['proposal_pk'])
        proposal = Proposal.objects.get(id=proposal_id)
        try:
            recipient = proposal.applicant.email
            submitter = proposal.applicant
        except:
            recipient = proposal.submitter.email
            submitter = proposal.submitter

        #if isinstance(proposal.org_applicant, Organisation) and (proposal.org_applicant.monthly_invoicing_allowed or proposal.org_applicant.bpay_allowed or proposal.org_applicant.other_allowed):
        if isinstance(proposal.org_applicant, Organisation) and (proposal.org_applicant.monthly_invoicing_allowed or proposal.org_applicant.bpay_allowed or (settings.OTHER_PAYMENT_ALLOWED and is_payment_admin(request.user))):
            try:
                lines = create_lines(request)
                logger.info('{} Show Park Bookings Preview for BPAY/Other/monthly invoicing'.format('User {} with id {}'.format(proposal.submitter.get_full_name(),proposal.submitter.id), proposal.id))
                context.update({
                    'lines': lines,
                    'line_details': request.POST['payment'],
                    'proposal_id': proposal_id,
                    'submitter': submitter,
                    'payment_method': payment_method,
                })
                return render(request, self.template_name, context)


            except Exception, e:
                logger.error('Error creating booking preview: {}'.format(e))
示例#2
0
文件: views.py 项目: wilsonc86/ledger
    def get(self, request, *args, **kwargs):
        print (" BOOKING SUCCESS ")

        context = template_context(self.request)
        basket = None
        booking = get_session_booking(request.session)

        if self.request.user.is_authenticated():
            basket = Basket.objects.filter(status='Submitted', owner=request.user).order_by('-id')[:1]
        else:
            basket = Basket.objects.filter(status='Submitted', owner=booking.proposal.submitter).order_by('-id')[:1]

        order = Order.objects.get(basket=basket[0])
        invoice = Invoice.objects.get(order_number=order.number)
        invoice_ref = invoice.reference
        book_inv, created = BookingInvoice.objects.get_or_create(booking=booking, invoice_reference=invoice_ref)

        print ("BOOKING")

        try:
            recipient = booking.proposal.applicant.email
            submitter = booking.proposal.applicant
        except:
            recipient = booking.proposal.submitter.email
            submitter = booking.proposal.submitter

        #import ipdb; ipdb.set_trace()
        send_invoice_tclass_email_notification(request, booking, invoice, recipients=[recipient])
        send_confirmation_tclass_email_notification(request, booking, invoice, recipients=[recipient])

        #delete_session_booking(request.session)

        context.update({
            'booking_id': booking.id,
            'submitter': submitter,
            'book_inv': [book_inv]
        })
        return render(request, self.template_name, context)
示例#3
0
文件: views.py 项目: wilsonc86/ledger
    def get(self, request, *args, **kwargs):

        context = template_context(self.request)
        basket = None
        proposal = get_session_application_invoice(request.session)

        #import ipdb; ipdb.set_trace()
        if proposal.fee_paid:
            #proposal.fee_invoice_reference = request.session.pop('checkout_invoice')
            #proposal.save()
            #TODO must remove this ''if-block' - temp hack, the method is executing twice - need to FIX
            invoice = Invoice.objects.get(reference=proposal.fee_invoice_reference)
            try:
                recipient = proposal.applicant.email
                submitter = proposal.applicant
            except:
                recipient = proposal.submitter.email
                submitter = proposal.submitter
            send_application_fee_invoice_tclass_email_notification(request, proposal, invoice, recipients=[recipient])

            context.update({
                'proposal': proposal,
                'submitter': submitter,
                'fee_invoice': invoice
            })
            return render(request, self.template_name, context)

        print (" APPLICATION FEE SUCCESS ")
        if self.request.user.is_authenticated():
            basket = Basket.objects.filter(status='Submitted', owner=request.user).order_by('-id')[:1]
        else:
            basket = Basket.objects.filter(status='Submitted', owner=booking.proposal.submitter).order_by('-id')[:1]

        order = Order.objects.get(basket=basket[0])
        invoice = Invoice.objects.get(order_number=order.number)
        invoice_ref = invoice.reference
        #book_inv, created = BookingInvoice.objects.get_or_create(booking=booking, invoice_reference=invoice_ref)

        #import ipdb; ipdb.set_trace()
        proposal = proposal_submit(proposal, request)
        if proposal and (invoice.payment_status == 'paid' or invoice.payment_status == 'over_paid'):
            proposal.fee_invoice_reference = invoice_ref
            proposal.save()
        else:
            logger.error('Invoice payment status is {}'.format(invoice.payment_status))
            raise

        print ("APPLICATION FEE")
        try:
            recipient = proposal.applicant.email
            submitter = proposal.applicant
        except:
            recipient = proposal.submitter.email
            submitter = proposal.submitter
        #import ipdb; ipdb.set_trace()
        send_application_fee_invoice_tclass_email_notification(request, proposal, invoice, recipients=[recipient])
        send_application_fee_confirmation_tclass_email_notification(request, proposal, invoice, recipients=[recipient])

        #delete_session_booking(request.session)

        context.update({
            'proposal': proposal,
            'submitter': submitter,
            'fee_invoice': invoice
        })
        return render(request, self.template_name, context)
示例#4
0
文件: views.py 项目: wilsonc86/ledger
    def get(self, request, *args, **kwargs):
        print (" APPLICATION FEE SUCCESS ")
#        for ss in request.session.keys():
#            print (ss)
#            print (request.session[ss])

        proposal = None
        submitter = None
        invoice = None
        try:
            print '0a Session: {}'.format(request.session['cols_app_invoice'] if 'cols_app_invoice' in request.session else '')
            print '0b Last Session: {}'.format(request.session['cols_last_app_invoice'] if 'cols_last_app_invoice' in request.session else '')
            #import ipdb; ipdb.set_trace()
            context = template_context(self.request)
            basket = None
            application_fee = get_session_application_invoice(request.session)
            print (" Session (App Fee) {}".format(application_fee))
            print (" 1 ")
            proposal = application_fee.proposal
            print (" 2 ")
            #proposal = get_session_application_invoice(request.session)

            try:
                recipient = proposal.applicant.email
                submitter = proposal.applicant
            except:
                recipient = proposal.submitter.email
                submitter = proposal.submitter

            print (" 3 ")
            if self.request.user.is_authenticated():
                basket = Basket.objects.filter(status='Submitted', owner=request.user).order_by('-id')[:1]
                #basket_open = Basket.objects.filter(status='Open', owner=request.user).order_by('-id')[:1]
                #print '3a - Basket ID: {}, Status: {}'.format(basket_open[0].id, basket_open[0].status)
                print (" 3a ")
            else:
                basket = Basket.objects.filter(status='Submitted', owner=booking.proposal.submitter).order_by('-id')[:1]
                print (" 3b ")

            print (" 4 ")
            order = Order.objects.get(basket=basket[0])
            print (" 5 ")
            invoice = Invoice.objects.get(order_number=order.number)
            print (" 6 ")
            invoice_ref = invoice.reference
            print (" 7 ")
            #book_inv, created = BookingInvoice.objects.get_or_create(booking=booking, invoice_reference=invoice_ref)
            fee_inv, created = ApplicationFeeInvoice.objects.get_or_create(application_fee=application_fee, invoice_reference=invoice_ref)

            #import ipdb; ipdb.set_trace()
            print 'Basket ID: {}, Status: {}, Order: {}, Invoice: {}'.format(basket[0].id, basket[0].status, order, invoice_ref)
            if application_fee.payment_type == 3:
                try:
                    inv = Invoice.objects.get(reference=invoice_ref)
                    order = Order.objects.get(number=inv.order_number)
                    order.user = submitter
                    order.save()
                    print (" 8 ")
                except Invoice.DoesNotExist:
                    print ("INVOICE ERROR")
                    logger.error('{} tried paying an application fee with an incorrect invoice'.format('User {} with id {}'.format(proposal.submitter.get_full_name(), proposal.submitter.id) if proposal.submitter else 'An anonymous user'))
                    return redirect('external-proposal-detail', args=(proposal.id,))
                #if inv.system not in ['S557']:
                print ("INVOICE SYSTEM {}, settings.PS_PAYMENT_SYSTEM_ID {}".format(inv.system, settings.PS_PAYMENT_SYSTEM_ID))
                if inv.system not in ['0557']:
                    print ("SYSTEM ERROR")
                    logger.error('{} tried paying an application fee with an invoice from another system with reference number {}'.format('User {} with id {}'.format(proposal.submitter.get_full_name(), proposal.submitter.id) if proposal.submitter else 'An anonymous user',inv.reference))
                    return redirect('external-proposal-detail', args=(proposal.id,))

                if fee_inv:
                    application_fee.payment_type = 1  # internet booking
                    application_fee.expiry_time = None
                    update_payments(invoice_ref)

                    print (" 9 ")
                    proposal = proposal_submit(proposal, request)
                    if proposal and (invoice.payment_status == 'paid' or invoice.payment_status == 'over_paid'):
                        proposal.fee_invoice_reference = invoice_ref
                        proposal.save()
                        print (" 10 ")
                    else:
                        logger.error('Invoice payment status is {}'.format(invoice.payment_status))
                        raise

                    application_fee.save()
                    print (" 11 ")
                    request.session['cols_last_app_invoice'] = application_fee.id
                    delete_session_application_invoice(request.session)
                    print '11a Session: {}'.format(request.session['cols_app_invoice'] if 'cols_app_invoice' in request.session else '')
                    print '11b Last Session: {}'.format(request.session['cols_last_app_invoice'] if 'cols_last_app_invoice' in request.session else '')

                    send_application_fee_invoice_tclass_email_notification(request, proposal, invoice, recipients=[recipient])
                    send_application_fee_confirmation_tclass_email_notification(request, proposal, invoice, recipients=[recipient])
                    print (" 12 ")

                    context = {
                        'proposal': proposal,
                        'submitter': submitter,
                        'fee_invoice': invoice
                    }
                    print (" 13 ")
                    return render(request, self.template_name, context)

        except Exception as e:
            print 'My Exception: {}'.format(e)
            if ('cols_last_app_invoice' in request.session) and ApplicationFee.objects.filter(id=request.session['cols_last_app_invoice']).exists():
                application_fee = ApplicationFee.objects.get(id=request.session['cols_last_app_invoice'])
                proposal = application_fee.proposal

                try:
                    recipient = proposal.applicant.email
                    submitter = proposal.applicant
                except:
                    recipient = proposal.submitter.email
                    submitter = proposal.submitter

                if ApplicationFeeInvoice.objects.filter(application_fee=application_fee).count() > 0:
                    afi = ApplicationFeeInvoice.objects.filter(application_fee=application_fee)
                    #invoice = afi[0].invoice_reference
                    invoice = afi[0]
                    print (" 13a: {} ".format(invoice))
#                    book_inv = BookingInvoice.objects.get(booking=booking).invoice_reference
            else:
                #import ipdb; ipdb.set_trace()
                print (" 14 ")
                return redirect('home')

        context = {
            #'booking': booking,
            #'book_inv': [app_inv]
            'proposal': proposal,
            'submitter': submitter,
            'fee_invoice': invoice
        }
        print (" 15 ")
        return render(request, self.template_name, context)
示例#5
0
    def get(self, request, *args, **kwargs):
        print(" BOOKING SUCCESS ")

        booking = None
        submitter = None
        invoice = None
        try:
            context = template_context(self.request)
            basket = None
            booking = get_session_booking(request.session)
            proposal = booking.proposal

            try:
                recipient = proposal.applicant.email
                submitter = proposal.applicant
            except:
                recipient = proposal.submitter.email
                submitter = proposal.submitter

            if self.request.user.is_authenticated():
                basket = Basket.objects.filter(
                    status='Submitted', owner=request.user).order_by('-id')[:1]
            else:
                basket = Basket.objects.filter(
                    status='Submitted',
                    owner=booking.proposal.submitter).order_by('-id')[:1]

            order = Order.objects.get(basket=basket[0])
            invoice = Invoice.objects.get(order_number=order.number)
            invoice_ref = invoice.reference
            book_inv, created = BookingInvoice.objects.get_or_create(
                booking=booking,
                invoice_reference=invoice_ref,
                payment_method=invoice.payment_method)

            if booking.booking_type == Booking.BOOKING_TYPE_TEMPORARY:
                try:
                    inv = Invoice.objects.get(reference=invoice_ref)
                    #if (inv.payment_method == Invoice.PAYMENT_METHOD_BPAY):
                    #    # will return 1st of the next month + monthly_payment_due_period (days) e.g 20th of next month
                    #    now = timezone.now().date()
                    #    dt = date(now.year, now.month, 1) + relativedelta(months=1)
                    #    inv.settlement_date = calc_payment_due_date(booking, dt) - relativedelta(days=1)
                    #    inv.save()

                    order = Order.objects.get(number=inv.order_number)
                    order.user = submitter
                    order.save()
                except Invoice.DoesNotExist:
                    logger.error(
                        '{} tried paying an admission fee with an incorrect invoice'
                        .format('User {} with id {}'.
                                format(proposal.submitter.get_full_name(
                                ), proposal.submitter.id) if proposal.
                                submitter else 'An anonymous user'))
                    return redirect('external-proposal-detail',
                                    args=(proposal.id, ))
                if inv.system not in ['0557']:
                    logger.error(
                        '{} tried paying an admission fee with an invoice from another system with reference number {}'
                        .format(
                            'User {} with id {}'.format(
                                proposal.submitter.get_full_name(),
                                proposal.submitter.id) if proposal.submitter
                            else 'An anonymous user', inv.reference))
                    return redirect('external-proposal-detail',
                                    args=(proposal.id, ))

                if book_inv:
                    booking.booking_type = Booking.BOOKING_TYPE_INTERNET
                    booking.expiry_time = None
                    #booking.set_admission_number()
                    update_payments(invoice_ref)

                    if not (
                            invoice.payment_status == 'paid'
                            or invoice.payment_status == 'over_paid'
                    ) and invoice.payment_method == Invoice.PAYMENT_METHOD_CC:
                        logger.error(
                            'Payment Method={} - Admission Fee Invoice payment status is {}'
                            .format(invoice.get_payment_method_display(),
                                    invoice.payment_status))
                        raise

                    booking.save()
                    request.session['cols_last_booking'] = booking.id
                    delete_session_booking(request.session)

                    send_invoice_tclass_email_notification(
                        request, booking, invoice, recipients=[recipient])
                    send_confirmation_tclass_email_notification(
                        request, booking, invoice, recipients=[recipient])

                    context.update({
                        'booking_id': booking.id,
                        'submitter': submitter,
                        'invoice_reference': invoice.reference
                    })
                    return render(request, self.template_name, context)

        except Exception as e:
            #logger.error('{}'.format(e))
            if ('cols_last_booking'
                    in request.session) and Booking.objects.filter(
                        id=request.session['cols_last_booking']).exists():
                booking = Booking.objects.get(
                    id=request.session['cols_last_booking'])
                proposal = booking.proposal

                try:
                    recipient = proposal.applicant.email
                    submitter = proposal.applicant
                except:
                    recipient = proposal.submitter.email
                    submitter = proposal.submitter

                if BookingInvoice.objects.filter(booking=booking).count() > 0:
                    bi = BookingInvoice.objects.filter(booking=booking)
                    invoice = bi[0]
            else:
                return redirect('home')

        context.update({
            'booking_id': booking.id,
            'submitter': submitter,
            'invoice_reference': invoice.invoice_reference
        })
        return render(request, self.template_name, context)
示例#6
0
    def get(self, request, *args, **kwargs):
        print(" APPLICATION FEE SUCCESS ")
        #        for ss in request.session.keys():
        #            print (ss)
        #            print (request.session[ss])

        proposal = None
        submitter = None
        invoice = None
        try:
            context = template_context(self.request)
            basket = None
            application_fee = get_session_application_invoice(request.session)
            proposal = application_fee.proposal

            try:
                recipient = proposal.applicant.email
                submitter = proposal.applicant
            except:
                recipient = proposal.submitter.email
                submitter = proposal.submitter

            if self.request.user.is_authenticated():
                basket = Basket.objects.filter(
                    status='Submitted', owner=request.user).order_by('-id')[:1]
            else:
                basket = Basket.objects.filter(
                    status='Submitted',
                    owner=booking.proposal.submitter).order_by('-id')[:1]

            order = Order.objects.get(basket=basket[0])
            invoice = Invoice.objects.get(order_number=order.number)
            invoice_ref = invoice.reference
            fee_inv, created = ApplicationFeeInvoice.objects.get_or_create(
                application_fee=application_fee, invoice_reference=invoice_ref)

            if application_fee.payment_type == ApplicationFee.PAYMENT_TYPE_TEMPORARY:
                try:
                    inv = Invoice.objects.get(reference=invoice_ref)
                    order = Order.objects.get(number=inv.order_number)
                    order.user = submitter
                    order.save()
                except Invoice.DoesNotExist:
                    logger.error(
                        '{} tried paying an application fee with an incorrect invoice'
                        .format('User {} with id {}'.
                                format(proposal.submitter.get_full_name(
                                ), proposal.submitter.id) if proposal.
                                submitter else 'An anonymous user'))
                    return redirect('external-proposal-detail',
                                    args=(proposal.id, ))
                if inv.system not in ['0557']:
                    logger.error(
                        '{} tried paying an application fee with an invoice from another system with reference number {}'
                        .format(
                            'User {} with id {}'.format(
                                proposal.submitter.get_full_name(),
                                proposal.submitter.id) if proposal.submitter
                            else 'An anonymous user', inv.reference))
                    return redirect('external-proposal-detail',
                                    args=(proposal.id, ))

                if fee_inv:
                    #application_fee.payment_type = 1  # internet booking
                    application_fee.payment_type = ApplicationFee.PAYMENT_TYPE_INTERNET
                    application_fee.expiry_time = None
                    update_payments(invoice_ref)

                    proposal = proposal_submit(proposal, request)
                    if proposal and (invoice.payment_status == 'paid'
                                     or invoice.payment_status == 'over_paid'):
                        proposal.fee_invoice_reference = invoice_ref
                        proposal.save()
                    else:
                        logger.error('Invoice payment status is {}'.format(
                            invoice.payment_status))
                        raise

                    application_fee.save()
                    request.session[
                        'cols_last_app_invoice'] = application_fee.id
                    delete_session_application_invoice(request.session)

                    send_application_fee_invoice_tclass_email_notification(
                        request, proposal, invoice, recipients=[recipient])
                    send_application_fee_confirmation_tclass_email_notification(
                        request,
                        application_fee,
                        invoice,
                        recipients=[recipient])

                    context = {
                        'proposal': proposal,
                        'submitter': submitter,
                        'fee_invoice': invoice
                    }
                    return render(request, self.template_name, context)

        except Exception as e:
            if ('cols_last_app_invoice'
                    in request.session) and ApplicationFee.objects.filter(
                        id=request.session['cols_last_app_invoice']).exists():
                application_fee = ApplicationFee.objects.get(
                    id=request.session['cols_last_app_invoice'])
                proposal = application_fee.proposal

                try:
                    recipient = proposal.applicant.email
                    submitter = proposal.applicant
                except:
                    recipient = proposal.submitter.email
                    submitter = proposal.submitter

                if ApplicationFeeInvoice.objects.filter(
                        application_fee=application_fee).count() > 0:
                    afi = ApplicationFeeInvoice.objects.filter(
                        application_fee=application_fee)
                    invoice = afi[0]
            else:
                return redirect('home')

        context = {
            'proposal': proposal,
            'submitter': submitter,
            'fee_invoice': invoice
        }
        return render(request, self.template_name, context)
示例#7
0
    def post(self, request, *args, **kwargs):

        payment_method = self.request.POST.get('method')
        context = template_context(self.request)
        proposal_id = int(kwargs['proposal_pk'])
        proposal = Proposal.objects.get(id=proposal_id)
        try:
            recipient = proposal.applicant.email
            submitter = proposal.applicant
        except:
            recipient = proposal.submitter.email
            submitter = proposal.submitter

        if isinstance(proposal.org_applicant, Organisation):
            try:
                if proposal.org_applicant.bpay_allowed and payment_method == 'bpay':
                    booking_type = Booking.BOOKING_TYPE_INTERNET
                elif proposal.org_applicant.monthly_invoicing_allowed and payment_method == 'monthly_invoicing':
                    booking_type = Booking.BOOKING_TYPE_MONTHLY_INVOICING
                #elif proposal.org_applicant.other_allowed and payment_method=='other':
                else:
                    booking_type = Booking.BOOKING_TYPE_RECEPTION

                booking = create_booking(request,
                                         proposal,
                                         booking_type=booking_type)
                invoice_reference = None
                if booking and payment_method == 'bpay':
                    # BPAY/OTHER invoice are created immediately. Monthly invoices are created later by Cron
                    ret = create_bpay_invoice(submitter, booking)
                    invoice_reference = booking.invoice.reference

                if booking and payment_method == 'other':
                    # BPAY/Other invoice are created immediately. Monthly invoices are created later by Cron
                    ret = create_other_invoice(submitter, booking)
                    invoice_reference = booking.invoice.reference

                logger.info(
                    '{} Created Park Bookings with payment method {} for Proposal ID {}'
                    .format(
                        'User {} with id {}'.format(
                            proposal.submitter.get_full_name(),
                            proposal.submitter.id), payment_method,
                        proposal.id))
                #send_monthly_invoicing_confirmation_tclass_email_notification(request, booking, invoice, recipients=[recipient])
                context.update({
                    'booking':
                    booking,
                    'booking_id':
                    booking.id,
                    'submitter':
                    submitter,
                    'monthly_invoicing':
                    True if payment_method == 'monthly_invoicing' else False,
                    'invoice_reference':
                    invoice_reference
                })
                if payment_method == 'other':
                    return HttpResponseRedirect(
                        reverse('payments:invoice-payment') +
                        '?invoice={}'.format(invoice_reference))
                else:
                    return render(request, self.template_name, context)

            except Exception, e:
                logger.error('Error Creating booking: {}'.format(e))
                if booking:
                    booking.delete()
                raise
示例#8
0
    def post(self, request, *args, **kwargs):
        try:
            context_processor = template_context(request)
            application_fee = ApplicationFee.objects.get(pk=request.session['cols_app_invoice']) if 'cols_app_invoice' in request.session else None
            proposal = application_fee.proposal

            try:
                recipient = proposal.applicant.email
                submitter = proposal.applicant
            except:
                recipient = proposal.submitter.email
                submitter = proposal.submitter

            if request.user.is_staff or request.user.is_superuser or ApplicationFee.objects.filter(pk=application_fee.id).count() == 1:
                invoice = None
                #basket = get_basket(request)
                basket = request.basket

                # here we are manually creating an order and invoice from the basket - by-passing credit card payment screen.
                ## commenting below lines and using CreateInvoiceBasket because basket created in previous view
                #order_response = place_order_submission(request)
                #order = Order.objects.get(basket=basket, user=submitter)

                order = CreateInvoiceBasket(payment_method='other', system=settings.PAYMENT_SYSTEM_PREFIX).create_invoice_and_order(basket, 0, None, None, user=request.user, invoice_text='Application Fee')
                invoice = Invoice.objects.get(order_number=order.number)
                fee_inv, created = ApplicationFeeInvoice.objects.get_or_create(application_fee=application_fee, invoice_reference=invoice.reference)

                if fee_inv:
                    application_fee.payment_type = ApplicationFee.PAYMENT_TYPE_ZERO
                    application_fee.expiry_time = None

                    proposal = proposal_submit(proposal, request)
                    if proposal and (invoice.payment_status == 'paid' or invoice.payment_status == 'over_paid'):
                        proposal.fee_invoice_reference = invoice.reference
                        proposal.save()
                        proposal.reset_application_discount(request.user)
                    else:
                        logger.error('Invoice payment status is {}'.format(invoice.payment_status))
                        raise

                    application_fee.save()
                    request.session['cols_last_app_invoice'] = application_fee.id
                    delete_session_application_invoice(request.session)

                    send_application_fee_invoice_tclass_email_notification(request, proposal, invoice, recipients=[recipient])

                context = {
                    'proposal': proposal,
                    'submitter': submitter,
                    'fee_invoice': fee_inv,

                    'basket': basket,
                    'lines': request.basket.lines.all(),
                    'line_details': 'N/A', #request.POST['payment'],
                    'proposal_id': proposal.id,
                    'payment_method': 'N/A',
                }

                return render(request, self.template_name, context)
            else:
                return HttpResponseRedirect(reverse('home'))

        except Exception as e:
            return redirect('home')