示例#1
0
 def test_cancel_send_mail_waitinglist(self):
     v = Voucher.objects.create(event=self.event,
                                block_quota=True,
                                redeemed=1)
     WaitingListEntry.objects.create(event=self.event,
                                     item=self.ticket,
                                     variation=None,
                                     email='*****@*****.**',
                                     voucher=v)
     WaitingListEntry.objects.create(event=self.event,
                                     item=self.ticket,
                                     variation=None,
                                     email='*****@*****.**')
     cancel_event(self.event.pk,
                  subevent=None,
                  auto_refund=True,
                  keep_fee_fixed="0.00",
                  keep_fee_percentage="0.00",
                  send=False,
                  send_subject="Event canceled",
                  send_message="Event canceled :-(",
                  send_waitinglist=True,
                  send_waitinglist_message="Event canceled",
                  send_waitinglist_subject=":(",
                  user=None)
     assert len(djmail.outbox) == 1
     assert djmail.outbox[0].to == ['*****@*****.**']
示例#2
0
    def test_cancel_refund_paid_partial_no_manual(self):
        gc = self.o.issued_gift_cards.create(currency="EUR")
        p1 = self.order.payments.create(
            amount=Decimal('20.00'),
            state=OrderPayment.PAYMENT_STATE_CONFIRMED,
            provider='giftcard',
            info='{"gift_card": %d}' % gc.pk)
        self.order.payments.create(
            amount=Decimal('26.00'),
            state=OrderPayment.PAYMENT_STATE_CONFIRMED,
            provider='manual',
        )
        self.order.status = Order.STATUS_PAID
        self.order.save()

        cancel_event(self.event.pk,
                     subevent=None,
                     manual_refund=False,
                     auto_refund=True,
                     keep_fee_fixed="0.00",
                     keep_fee_percentage="0.00",
                     send=False,
                     send_subject="Event canceled",
                     send_message="Event canceled :-(",
                     user=None)

        assert self.order.refunds.count() == 1
        r = self.order.refunds.get(provider='giftcard')
        assert r.state == OrderRefund.REFUND_STATE_DONE
        assert r.amount == Decimal('20.00')
        assert r.source == OrderRefund.REFUND_SOURCE_ADMIN
        assert r.payment == p1
示例#3
0
    def test_cancel_partially_keep_fees_per_ticket(self):
        gc = self.o.issued_gift_cards.create(currency="EUR")
        self.order.payments.create(amount=Decimal('46.00'),
                                   state=OrderPayment.PAYMENT_STATE_CONFIRMED,
                                   provider='giftcard',
                                   info='{"gift_card": %d}' % gc.pk)
        self.order.status = Order.STATUS_PAID
        self.order.save()

        cancel_event(self.event.pk,
                     subevent=self.se1.pk,
                     auto_refund=True,
                     keep_fee_fixed="0.00",
                     keep_fee_percentage="0.00",
                     keep_fee_per_ticket="2.00",
                     send=False,
                     send_subject="Event canceled",
                     send_message="Event canceled :-(",
                     user=None)
        r = self.order.refunds.get()
        assert r.state == OrderRefund.REFUND_STATE_DONE
        assert r.amount == Decimal('21.00')
        assert r.source == OrderRefund.REFUND_SOURCE_ADMIN
        f = self.order.fees.get(fee_type=OrderFee.FEE_TYPE_CANCELLATION)
        assert f.value == Decimal('2.00')
示例#4
0
    def test_cancel_refund_paid_with_fees(self):
        gc = self.o.issued_gift_cards.create(currency="EUR")
        p1 = self.order.payments.create(
            amount=Decimal('46.00'),
            state=OrderPayment.PAYMENT_STATE_CONFIRMED,
            provider='giftcard',
            info='{"gift_card": %d}' % gc.pk)
        self.order.status = Order.STATUS_PAID
        self.order.save()

        cancel_event(self.event.pk,
                     subevent=None,
                     auto_refund=True,
                     keep_fee_fixed="10.00",
                     keep_fee_percentage="10.00",
                     send=False,
                     send_subject="Event canceled",
                     send_message="Event canceled :-(",
                     user=None)

        r = self.order.refunds.get()
        assert r.state == OrderRefund.REFUND_STATE_DONE
        assert r.amount == Decimal('31.40')
        assert r.source == OrderRefund.REFUND_SOURCE_ADMIN
        assert r.payment == p1
        assert self.order.all_logentries().filter(
            action_type='pretix.event.order.refund.created').exists()
        assert not self.order.all_logentries().filter(
            action_type='pretix.event.order.refund.requested').exists()
        assert gc.value == Decimal('31.40')
示例#5
0
 def test_cancel_subevent_range(self):
     self.op2.subevent = self.se1
     self.op2.save()
     cancel_event(self.event.pk,
                  subevent=None,
                  subevents_from=self.se1.date_from - timedelta(days=3),
                  subevents_to=self.se1.date_from - timedelta(days=2),
                  auto_refund=True,
                  keep_fee_fixed="0.00",
                  keep_fee_percentage="0.00",
                  keep_fee_per_ticket="",
                  send=True,
                  send_subject="Event canceled",
                  send_message="Event canceled :-(",
                  user=None)
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_PENDING
     cancel_event(self.event.pk,
                  subevent=None,
                  subevents_from=self.se1.date_from - timedelta(days=3),
                  subevents_to=self.se1.date_from + timedelta(days=2),
                  auto_refund=True,
                  keep_fee_fixed="0.00",
                  keep_fee_percentage="0.00",
                  keep_fee_per_ticket="",
                  send=True,
                  send_subject="Event canceled",
                  send_message="Event canceled :-(",
                  user=None)
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_CANCELED
示例#6
0
 def test_cancel_mixed_order_range(self):
     cancel_event(self.event.pk,
                  subevent=None,
                  subevents_from=self.se1.date_from - timedelta(days=3),
                  subevents_to=self.se1.date_from - timedelta(days=2),
                  auto_refund=True,
                  keep_fee_fixed="0.00",
                  keep_fee_percentage="0.00",
                  keep_fee_per_ticket="",
                  send=True,
                  send_subject="Event canceled",
                  send_message="Event canceled :-( {refund_amount}",
                  user=None)
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_PENDING
     assert self.order.positions.count() == 2
     cancel_event(self.event.pk,
                  subevent=None,
                  subevents_from=self.se1.date_from - timedelta(days=3),
                  subevents_to=self.se1.date_from + timedelta(days=2),
                  auto_refund=True,
                  keep_fee_fixed="0.00",
                  keep_fee_percentage="0.00",
                  keep_fee_per_ticket="",
                  send=True,
                  send_subject="Event canceled",
                  send_message="Event canceled :-( {refund_amount}",
                  user=None)
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_PENDING
     assert self.order.positions.filter(subevent=self.se1,
                                        canceled=False).count() == 0
示例#7
0
    def test_cancel_refund_paid_with_per_ticket_fees_ignore_addon(self):
        self.op2.addon_to = self.op1
        self.op2.save()
        gc = self.o.issued_gift_cards.create(currency="EUR")
        self.order.payments.create(amount=Decimal('46.00'),
                                   state=OrderPayment.PAYMENT_STATE_CONFIRMED,
                                   provider='giftcard',
                                   info='{"gift_card": %d}' % gc.pk)
        self.order.status = Order.STATUS_PAID
        self.order.save()

        cancel_event(self.event.pk,
                     subevent=None,
                     auto_refund=True,
                     keep_fee_fixed="0.00",
                     keep_fee_percentage="0.00",
                     keep_fee_per_ticket="2.00",
                     send=False,
                     send_subject="Event canceled",
                     send_message="Event canceled :-(",
                     user=None)

        r = self.order.refunds.get()
        assert r.state == OrderRefund.REFUND_STATE_DONE
        assert r.amount == Decimal('44.00')
        assert r.source == OrderRefund.REFUND_SOURCE_ADMIN
示例#8
0
    def test_cancel_refund_partially_paid_with_fees(self):
        gc = self.o.issued_gift_cards.create(currency="EUR")
        self.order.payments.create(amount=Decimal('12.00'),
                                   state=OrderPayment.PAYMENT_STATE_CONFIRMED,
                                   provider='giftcard',
                                   info='{"gift_card": %d}' % gc.pk)
        self.order.status = Order.STATUS_PENDING
        self.order.save()

        cancel_event(self.event.pk,
                     subevent=None,
                     auto_refund=True,
                     keep_fee_fixed="10.00",
                     keep_fee_percentage="10.00",
                     keep_fee_per_ticket="",
                     send=False,
                     send_subject="Event canceled",
                     send_message="Event canceled :-(",
                     user=None)

        assert not self.order.refunds.exists()
        self.order.refresh_from_db()
        assert self.order.total == Decimal('12.00')
        assert self.order.status == Order.STATUS_PAID
        assert self.order.positions.count() == 0
示例#9
0
    def test_cancel_partially_keep_fees(self):
        gc = self.o.issued_gift_cards.create(currency="EUR")
        p1 = self.order.payments.create(
            amount=Decimal('46.00'),
            state=OrderPayment.PAYMENT_STATE_CONFIRMED,
            provider='giftcard',
            info='{"gift_card": %d}' % gc.pk
        )
        self.op1.price -= Decimal('5.00')
        self.op1.save()
        self.order.fees.create(
            fee_type=OrderFee.FEE_TYPE_PAYMENT,
            value=Decimal('5.00'),
        )
        self.order.status = Order.STATUS_PAID
        self.order.save()

        cancel_event(
            self.event.pk, subevent=self.se1.pk,
            auto_refund=True, keep_fee_fixed="0.00", keep_fee_percentage="10.00", keep_fee_per_ticket="",
            send=False, send_subject="Event canceled", send_message="Event canceled :-(",
            user=None
        )
        r = self.order.refunds.get()
        assert r.state == OrderRefund.REFUND_STATE_DONE
        assert r.amount == Decimal('16.20')
        assert r.source == OrderRefund.REFUND_SOURCE_ADMIN
        assert r.payment == p1
        assert self.order.all_logentries().filter(action_type='pretix.event.order.refund.created').exists()
        assert not self.order.all_logentries().filter(action_type='pretix.event.order.refund.requested').exists()
        assert gc.value == Decimal('16.20')
        assert self.order.positions.filter(subevent=self.se2).count() == 1
        assert self.order.positions.filter(subevent=self.se1).count() == 0
        f = self.order.fees.get(fee_type=OrderFee.FEE_TYPE_CANCELLATION)
        assert f.value == Decimal('1.80')
示例#10
0
    def test_cancel_keep_some_fees(self):
        gc = self.o.issued_gift_cards.create(currency="EUR")
        self.order.payments.create(
            amount=Decimal('46.00'),
            state=OrderPayment.PAYMENT_STATE_CONFIRMED,
            provider='giftcard',
            info='{"gift_card": %d}' % gc.pk
        )
        self.op1.price -= Decimal('5.00')
        self.op1.save()
        self.order.fees.create(
            fee_type=OrderFee.FEE_TYPE_PAYMENT,
            value=Decimal('2.50'),
        )
        self.order.fees.create(
            fee_type=OrderFee.FEE_TYPE_SHIPPING,
            value=Decimal('2.50'),
        )
        self.order.status = Order.STATUS_PAID
        self.order.save()

        cancel_event(
            self.event.pk, subevent=None,
            auto_refund=True, keep_fee_fixed="0.00", keep_fee_percentage="10.00", keep_fees=[OrderFee.FEE_TYPE_PAYMENT], keep_fee_per_ticket="",
            send=False, send_subject="Event canceled", send_message="Event canceled :-(",
            user=None
        )
        r = self.order.refunds.get()
        assert r.amount == Decimal('39.40')
        assert self.order.all_fees.get(fee_type=OrderFee.FEE_TYPE_SHIPPING).canceled
        assert not self.order.all_fees.get(fee_type=OrderFee.FEE_TYPE_PAYMENT).canceled
        assert self.order.all_fees.get(fee_type=OrderFee.FEE_TYPE_CANCELLATION).value == Decimal('4.10')
示例#11
0
 def test_cancel_all_subevents(self):
     cancel_event(
         self.event.pk, subevent=None,
         auto_refund=True, keep_fee_fixed="0.00", keep_fee_percentage="0.00", keep_fee_per_ticket="",
         send=True, send_subject="Event canceled", send_message="Event canceled :-(",
         user=None
     )
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_CANCELED
示例#12
0
 def test_cancel_send_mail_attendees(self):
     self.op1.attendee_email = '*****@*****.**'
     self.op1.save()
     cancel_event(
         self.event.pk, subevent=None,
         auto_refund=True, keep_fee_fixed="0.00", keep_fee_percentage="0.00", keep_fee_per_ticket="",
         send=True, send_subject="Event canceled", send_message="Event canceled :-(",
         user=None
     )
     assert len(djmail.outbox) == 2
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_CANCELED
示例#13
0
 def test_cancel_simple_order(self):
     self.op2.subevent = self.se1
     self.op2.save()
     cancel_event(self.event.pk,
                  subevent=self.se1.pk,
                  auto_refund=True,
                  keep_fee_fixed="0.00",
                  keep_fee_percentage="0.00",
                  send=True,
                  send_subject="Event canceled",
                  send_message="Event canceled :-(",
                  user=None)
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_CANCELED
示例#14
0
 def test_cancel_partially_send_mail_attendees(self):
     self.op1.attendee_email = '*****@*****.**'
     self.op1.save()
     self.op2.attendee_email = '*****@*****.**'
     self.op2.save()
     cancel_event(
         self.event.pk, subevent=self.se1.pk,
         auto_refund=True, keep_fee_fixed="0.00", keep_fee_percentage="0.00", keep_fee_per_ticket="",
         send=True, send_subject="Event canceled", send_message="Event canceled :-(",
         user=None
     )
     assert len(djmail.outbox) == 2
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_PENDING
     assert self.order.positions.count() == 1
示例#15
0
 def test_cancel_mixed_order(self):
     gc = self.o.issued_gift_cards.create(currency="EUR")
     self.order.payments.create(
         amount=Decimal('46.00'),
         state=OrderPayment.PAYMENT_STATE_CONFIRMED,
         provider='giftcard',
         info='{"gift_card": %d}' % gc.pk
     )
     self.order.status = Order.STATUS_PAID
     self.order.save()
     cancel_event(
         self.event.pk, subevent=self.se1.pk,
         auto_refund=True, keep_fee_fixed="0.00", keep_fee_percentage="0.00", keep_fee_per_ticket="",
         send=True, send_subject="Event canceled", send_message="Event canceled :-( {refund_amount}",
         user=None
     )
     self.order.refresh_from_db()
     assert self.order.status == Order.STATUS_PAID
     assert '23.00' in djmail.outbox[0].body
示例#16
0
    def test_cancel_do_not_refund(self):
        gc = self.o.issued_gift_cards.create(currency="EUR")
        self.order.payments.create(
            amount=Decimal('46.00'),
            state=OrderPayment.PAYMENT_STATE_CONFIRMED,
            provider='giftcard',
            info='{"gift_card": %d}' % gc.pk
        )
        self.order.status = Order.STATUS_PAID
        self.order.save()

        cancel_event(
            self.event.pk, subevent=None,
            auto_refund=False, keep_fee_fixed="0.00", keep_fee_percentage="0.00", keep_fee_per_ticket="",
            send=True, send_subject="Event canceled", send_message="Event canceled :-(",
            user=None
        )

        self.order.refresh_from_db()
        assert self.order.status == Order.STATUS_CANCELED
        assert not self.order.refunds.exists()