Payment event ledger (PaymentEvent) replicated to the backup server, plus CSV export script on 247
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,8 @@ from rest_framework.exceptions import APIException
|
||||
|
||||
from statuslog.signals import status_changed
|
||||
|
||||
from . import events
|
||||
|
||||
from .models import Order, Transaction
|
||||
from .providers import PROVIDERS, provider_for
|
||||
|
||||
@@ -135,6 +137,8 @@ def create_order(*, user_id: int, amount: int, currency: str = 'IRT',
|
||||
subscription_id=subscription_id, plan_id=plan_id, provider=provider,
|
||||
)
|
||||
|
||||
events.record('order_created', order=order, plan_id=plan_id, amount=amount, currency=currency,
|
||||
duration_days=order.duration_days, sku=bazaar_product_sku)
|
||||
# بازار paymentUrl ندارد (اپ با Poolakey میخرد)؛ زرینپال آدرسِ PaymentRedirectView را دارد (providers.py).
|
||||
payment_url = provider_for(order.provider).payment_url(order)
|
||||
return order, payment_url
|
||||
@@ -387,6 +391,7 @@ def cancel_pending_order(order: Order, *, staff: str = '') -> None:
|
||||
raise OrderStateError(f'سفارشِ {order.id} «{order.get_status_display()}» است؛ فقط سفارشِ در انتظار لغو میشود.')
|
||||
order.status = 'canceled'
|
||||
order.save(update_fields=['status'])
|
||||
events.record('admin_cancel', order=order, staff=staff)
|
||||
status_changed.send(sender='payment.Order', object_id=order.id, old_status='pending',
|
||||
new_status='canceled', event=f'admin_cancel:{staff}'[:50], user_id=order.user_id)
|
||||
|
||||
@@ -428,6 +433,7 @@ def refund_order(order: Order, *, staff: str = '') -> dict:
|
||||
|
||||
order.status = 'refunded'
|
||||
order.save(update_fields=['status'])
|
||||
events.record('admin_refund', order=order, staff=staff, subscription_days=summary['subscription_days'])
|
||||
Transaction.objects.create(order=order, gateway='admin', status='refunded',
|
||||
gateway_ref_id=f'refund-{order.id}')
|
||||
status_changed.send(sender='payment.Order', object_id=order.id, old_status='paid',
|
||||
|
||||
Reference in New Issue
Block a user