修复仲裁订单线下结算
This commit is contained in:
@@ -32,11 +32,12 @@ const (
|
||||
handoffStatusAdminClosed = "admin_closed"
|
||||
handoffStatusAdminAbnormal = "admin_abnormal"
|
||||
|
||||
settlementStatusUnsettled = "unsettled"
|
||||
settlementStatusPending = "pending"
|
||||
settlementStatusSettled = "settled"
|
||||
settlementStatusClosed = "closed"
|
||||
settlementStatusDisputed = "disputed"
|
||||
settlementStatusUnsettled = "unsettled"
|
||||
settlementStatusPending = "pending"
|
||||
settlementStatusSettled = "settled"
|
||||
settlementStatusClosed = "closed"
|
||||
settlementStatusDisputed = "disputed"
|
||||
settlementStatusArbitrated = "arbitrated"
|
||||
|
||||
handoffModeOwner = "owner"
|
||||
handoffModePlatform = "platform"
|
||||
|
||||
@@ -66,7 +66,7 @@ func canAdminPlatformCheckoutConfirm(order model.RentalOrder) bool {
|
||||
func canAdminMarkOfflineSettlement(order model.RentalOrder) bool {
|
||||
return isPlatformSettlementOrder(order) &&
|
||||
order.Status == orderStatusCompleted &&
|
||||
order.SettlementStatus == settlementStatusSettled &&
|
||||
(order.SettlementStatus == settlementStatusSettled || order.SettlementStatus == settlementStatusArbitrated) &&
|
||||
effectiveOfflineSettlementStatus(order) == offlineSettlementStatusPending &&
|
||||
order.OfflineSettlementAmountCent > 0
|
||||
}
|
||||
|
||||
@@ -1580,6 +1580,46 @@ func TestAdminPlatformCheckoutCounterCanBeAcceptedByRenter(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAdminMarkOfflineSettlementAllowsArbitratedPlatformOrder(t *testing.T) {
|
||||
db := setupOrderTestDB(t)
|
||||
repo := NewRepository(db)
|
||||
adminID := uint64(79)
|
||||
order := model.RentalOrder{
|
||||
OrderNo: "ORD-OFFLINE-ARBITRATED-001",
|
||||
ListingID: 1,
|
||||
AccountID: 1,
|
||||
OwnerID: 1,
|
||||
RenterID: 2,
|
||||
Status: orderStatusCompleted,
|
||||
SettlementStatus: settlementStatusArbitrated,
|
||||
HandoffMode: handoffModePlatform,
|
||||
SettlementMode: settlementModePlatformManaged,
|
||||
OfflineSettlementStatus: offlineSettlementStatusPending,
|
||||
OfflineSettlementAmountCent: 8000,
|
||||
}
|
||||
if err := db.Create(&order).Error; err != nil {
|
||||
t.Fatalf("create order failed: %v", err)
|
||||
}
|
||||
|
||||
if !canAdminMarkOfflineSettlement(order) {
|
||||
t.Fatal("arbitrated platform order should allow offline settlement")
|
||||
}
|
||||
if err := repo.AdminMarkOfflineSettlement(t.Context(), adminID, order.ID, OfflineSettlementRequest{Remark: "仲裁后线下转账"}, AuditMeta{}); err != nil {
|
||||
t.Fatalf("AdminMarkOfflineSettlement() error = %v", err)
|
||||
}
|
||||
|
||||
var saved model.RentalOrder
|
||||
if err := db.First(&saved, order.ID).Error; err != nil {
|
||||
t.Fatalf("load order failed: %v", err)
|
||||
}
|
||||
if saved.OfflineSettlementStatus != offlineSettlementStatusSettled {
|
||||
t.Fatalf("offline settlement status = %q, want %q", saved.OfflineSettlementStatus, offlineSettlementStatusSettled)
|
||||
}
|
||||
if saved.OfflineSettledBy == nil || *saved.OfflineSettledBy != adminID {
|
||||
t.Fatalf("offline settled by = %#v, want %d", saved.OfflineSettledBy, adminID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPlatformManagedCheckoutIncludesConsumableAndDepositCompensation(t *testing.T) {
|
||||
db := setupOrderTestDB(t)
|
||||
repo := NewRepository(db)
|
||||
|
||||
Reference in New Issue
Block a user