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)
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)
def post(self, request, format=None): OrderManagement.reset_user_limit() return Response()
def post(self, request, format=None): OrderManagement.expire_order() return Response()
def post(self, request, format=None): OrderManagement.load_transferring_order_to_track() return Response()
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, )
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, )
def test_check_different_in_threshold(self): with self.assertRaises(PriceChangeException): OrderManagement._check_different_in_threshold( Decimal(5), Decimal(4.5))