コード例 #1
0
    def test_amount_too_small(self):
        with self.assertRaises(AmountIsTooSmallException):
            OrderManagement._check_minimum_amount(
                MIN_ETH_AMOUNT - Decimal('0.000001'), CURRENCY.ETH)

        with self.assertRaises(AmountIsTooSmallException):
            OrderManagement._check_minimum_amount(
                MIN_BTC_AMOUNT - Decimal('0.000001'), CURRENCY.BTC)
コード例 #2
0
def post_save_order(sender, **kwargs):
    order = kwargs['instance']
    created = kwargs['created']
    try:
        if created:
            OrderManagement.increase_limit(order.user, order.amount,
                                           order.currency, order.direction,
                                           order.fiat_local_amount,
                                           order.fiat_local_currency)
            if order.direction == DIRECTION.buy:
                if order.order_type == ORDER_TYPE.cod:
                    OrderManagement.send_new_order_notification(order)
            elif order.direction == DIRECTION.sell:
                TrackingManagement.add_tracking_address_payment(order)
                OrderManagement.send_new_order_notification(order)
        else:
            update_fields = kwargs['update_fields']
            if update_fields and 'status' in update_fields:
                if order.status in [
                        ORDER_STATUS.expired, ORDER_STATUS.cancelled,
                        ORDER_STATUS.rejected
                ]:
                    OrderManagement.decrease_limit(order.user, order.amount,
                                                   order.currency,
                                                   order.direction,
                                                   order.fiat_local_amount,
                                                   order.fiat_local_currency)
                    TrackingManagement.remove_tracking(order)
                if order.direction == DIRECTION.buy:
                    if order.status == ORDER_STATUS.fiat_transferring:
                        if order.order_type == ORDER_TYPE.bank:
                            OrderManagement.send_new_order_notification(order)
                    if order.status == ORDER_STATUS.transferring:
                        if order.tx_hash:
                            TrackingManagement.create_tracking_simple_transaction(
                                order)
                    elif order.status == ORDER_STATUS.success:
                        UserManagement.update_first_purchase(order.user)
                        ReferralManagement.create_referral(order)
                        PromotionManagement.create_promotion(order)
                        TrackingManagement.remove_tracking(order)
                        # TODO Send notification
                elif order.direction == DIRECTION.sell:
                    if order.status == ORDER_STATUS.transferred:
                        TrackingManagement.remove_tracking(order)
                    elif order.status == ORDER_STATUS.success:
                        UserManagement.update_first_purchase(order.user)
                        ReferralManagement.create_referral(order)
                        PromotionManagement.create_promotion(order)
                        TrackingManagement.remove_tracking(order)
                        # TODO Send notification
    except Exception as ex:
        # I don't want the alter flow effect the ORDER
        logging.exception(ex)
コード例 #3
0
 def post(self, request, format=None):
     OrderManagement.reset_user_limit()
     return Response()
コード例 #4
0
 def post(self, request, format=None):
     OrderManagement.expire_order()
     return Response()
コード例 #5
0
 def post(self, request, format=None):
     OrderManagement.load_transferring_order_to_track()
     return Response()
コード例 #6
0
def custom_order_view(admin_view, request, pk, title, read_only):
    changelist_filters = request.GET.get('_changelist_filters')
    url_filters = urlunquote(changelist_filters) if changelist_filters else ''

    order = Order.objects.get(id=pk)
    if request.method != 'POST':
        form = OrderBankForm(
            initial={
                'id': order.id,
                'user': order.user,
                'amount': order.amount,
                'currency': order.currency,
                'fiat_local_amount': order.fiat_local_amount,
                'fiat_local_currency': order.fiat_local_currency,
                'address': order.address,
                'ref_code': order.ref_code,
                'receipt_url': order.receipt_url,
                'tx_hash': order.tx_hash,
                'instance': order,
            })
        if not read_only:
            if order.status not in [ORDER_STATUS.fiat_transferring, ORDER_STATUS.processing] and \
                    order.direction == DIRECTION.buy and \
                    order.order_type == ORDER_TYPE.bank:
                messages.warning(request,
                                 'Order is in invalid status to process')
                return HttpResponseRedirect(
                    reverse("admin:coin_exchange_order_changelist") +
                    '?{}'.format(url_filters))

            # Change to processing status
            if order.status == ORDER_STATUS.fiat_transferring:
                order.status = ORDER_STATUS.processing
                order.save(update_fields=['status', 'updated_at'])
    else:
        action = request.POST['action'].lower()
        if action == 'approve':
            OrderManagement.complete_order(order)
            messages.success(
                request,
                'Order is approved successful. Sending crypto to destination...'
            )
        elif action == 'reject':
            OrderManagement.reject_order(order)
            messages.success(request, 'Order is rejected successful.')

        return HttpResponseRedirect(
            reverse("admin:coin_exchange_order_changelist") +
            '?{}'.format(url_filters))

    context = admin_view.admin_site.each_context(request)
    context['opts'] = admin_view.model._meta
    context['form'] = form
    context['obj'] = order
    context['title'] = title
    context['read_only'] = read_only
    context['url_filters'] = url_filters

    return TemplateResponse(
        request,
        'admin/order/order_bank.html',
        context,
    )
コード例 #7
0
def custom_selling_cod_order_view(admin_view, request, pk, title, read_only):
    changelist_filters = request.GET.get('_changelist_filters')
    url_filters = urlunquote(changelist_filters) if changelist_filters else ''

    order = Order.objects.get(id=pk)
    if request.method != 'POST':
        payment = None
        payment_details = []
        if order.selling_order_payments:
            payment = order.selling_order_payments.first()
            if payment:
                payment_details = payment.selling_payment_details

        user_info = order.user_info
        try:
            user_info = simplejson.loads(user_info)
            user_info = simplejson.dumps(user_info,
                                         ensure_ascii=False,
                                         indent=2,
                                         sort_keys=True)
        except Exception:
            pass

        form = SellingOrderForm(
            initial={
                'id':
                order.id,
                'user':
                order.user,
                'amount':
                order.amount,
                'currency':
                order.currency,
                'payment':
                '{:.6f} ({})'.format(payment.amount, PAYMENT_STATUS[
                    payment.status]),
                'payment_details':
                payment_details,
                'fiat_local_amount':
                order.fiat_local_amount,
                'fiat_local_currency':
                order.fiat_local_currency,
                'address':
                order.address,
                'order_user_payment_type':
                ORDER_USER_PAYMENT_TYPE[order.order_user_payment_type]
                if order.order_user_payment_type else '-',
                'user_info':
                user_info,
                'ref_code':
                order.ref_code,
                'tx_hash':
                order.tx_hash,
                'instance':
                order,
            })
        if not read_only:
            if order.status not in [ORDER_STATUS.transferred, ORDER_STATUS.processing] and \
                    order.direction == DIRECTION.buy and \
                    order.order_type == ORDER_TYPE.cod:
                messages.warning(request,
                                 'Order is in invalid status to process')
                return HttpResponseRedirect(
                    reverse("admin:coin_exchange_sellingorder_changelist") +
                    '?{}'.format(url_filters))

            # Change to processing status
            if order.status == ORDER_STATUS.transferred:
                order.status = ORDER_STATUS.processing
                order.save(update_fields=['status', 'updated_at'])
    else:
        action = request.POST['action'].lower()
        if action == 'approve':
            OrderManagement.complete_order(order)
            messages.success(request, 'Order is approved successful.')
        elif action == 'reject':
            OrderManagement.reject_order(order)
            messages.success(request, 'Order is rejected successful.')

        return HttpResponseRedirect(
            reverse("admin:coin_exchange_sellingorder_changelist") +
            '?{}'.format(url_filters))

    context = admin_view.admin_site.each_context(request)
    context['opts'] = admin_view.model._meta
    context['form'] = form
    context['obj'] = order
    context['title'] = title
    context['read_only'] = read_only
    context['url_filters'] = url_filters

    return TemplateResponse(
        request,
        'admin/order/selling_cod_order.html',
        context,
    )
コード例 #8
0
 def test_check_different_in_threshold(self):
     with self.assertRaises(PriceChangeException):
         OrderManagement._check_different_in_threshold(
             Decimal(5), Decimal(4.5))