diff --git a/src/PostIt/PostIt/ViewModels/Activity/BillingQueriesPageViewModel.cs b/src/PostIt/PostIt/ViewModels/Activity/BillingQueriesPageViewModel.cs
index aab923d80..fa12fd3cc 100644
--- a/src/PostIt/PostIt/ViewModels/Activity/BillingQueriesPageViewModel.cs
+++ b/src/PostIt/PostIt/ViewModels/Activity/BillingQueriesPageViewModel.cs
@@ -171,5 +171,9 @@ public partial class BillingQueriesPageViewModel : ViewModelBase, IActionStatusV
}
private static bool IsOngoingStatus(QueryStatus status)
- => status is QueryStatus.Inserted or QueryStatus.Accepted or QueryStatus.InProgress;
+ => status is QueryStatus.Inserted
+ or QueryStatus.Accepted
+ or QueryStatus.ProAccepted
+ or QueryStatus.ClientAccepted
+ or QueryStatus.InProgress;
}
diff --git a/src/PostIt/PostIt/ViewModels/Activity/BillingQueryDetailsPageViewModel.cs b/src/PostIt/PostIt/ViewModels/Activity/BillingQueryDetailsPageViewModel.cs
index cd13daaf1..362edb088 100644
--- a/src/PostIt/PostIt/ViewModels/Activity/BillingQueryDetailsPageViewModel.cs
+++ b/src/PostIt/PostIt/ViewModels/Activity/BillingQueryDetailsPageViewModel.cs
@@ -166,6 +166,8 @@ public partial class BillingQueryDetailsPageViewModel : ViewModelBase, IActionSt
=> status switch
{
QueryStatus.Accepted => "#E6F7EC",
+ QueryStatus.ProAccepted => "#E6F7EC",
+ QueryStatus.ClientAccepted => "#E1F5FE",
QueryStatus.InProgress => "#FFF4D6",
QueryStatus.Rejected => "#FDECEA",
QueryStatus.Failed => "#ECEFF1",
@@ -177,6 +179,8 @@ public partial class BillingQueryDetailsPageViewModel : ViewModelBase, IActionSt
=> status switch
{
QueryStatus.Accepted => "#2E7D32",
+ QueryStatus.ProAccepted => "#2E7D32",
+ QueryStatus.ClientAccepted => "#1565C0",
QueryStatus.InProgress => "#B26A00",
QueryStatus.Rejected => "#C62828",
QueryStatus.Failed => "#607D8B",
@@ -188,6 +192,8 @@ public partial class BillingQueryDetailsPageViewModel : ViewModelBase, IActionSt
=> status switch
{
QueryStatus.Accepted => "#1B5E20",
+ QueryStatus.ProAccepted => "#1B5E20",
+ QueryStatus.ClientAccepted => "#0D47A1",
QueryStatus.InProgress => "#7A4A00",
QueryStatus.Rejected => "#8E0000",
QueryStatus.Failed => "#37474F",
@@ -199,6 +205,8 @@ public partial class BillingQueryDetailsPageViewModel : ViewModelBase, IActionSt
=> status switch
{
QueryStatus.Accepted => "OK",
+ QueryStatus.ProAccepted => "P",
+ QueryStatus.ClientAccepted => "C",
QueryStatus.InProgress => "~",
QueryStatus.Rejected => "!",
QueryStatus.Failed => "X",
diff --git a/src/PostIt/PostIt/ViewModels/Activity/ProviderOngoingRequestsPageViewModel.cs b/src/PostIt/PostIt/ViewModels/Activity/ProviderOngoingRequestsPageViewModel.cs
index 71e979e66..360476152 100644
--- a/src/PostIt/PostIt/ViewModels/Activity/ProviderOngoingRequestsPageViewModel.cs
+++ b/src/PostIt/PostIt/ViewModels/Activity/ProviderOngoingRequestsPageViewModel.cs
@@ -344,11 +344,13 @@ public partial class ProviderOngoingRequestsPageViewModel : ViewModelBase, IActi
=> status switch
{
QueryStatus.InProgress => 0,
- QueryStatus.Accepted => 1,
- QueryStatus.Inserted => 2,
- QueryStatus.Success => 3,
- QueryStatus.Rejected => 4,
- QueryStatus.Failed => 5,
+ QueryStatus.ClientAccepted => 1,
+ QueryStatus.ProAccepted => 2,
+ QueryStatus.Accepted => 2,
+ QueryStatus.Inserted => 3,
+ QueryStatus.Success => 4,
+ QueryStatus.Rejected => 5,
+ QueryStatus.Failed => 6,
_ => 99,
};
diff --git a/src/Yavsc.Abstract/Workflow/QueryStatus.cs b/src/Yavsc.Abstract/Workflow/QueryStatus.cs
index 861043765..23b44312c 100644
--- a/src/Yavsc.Abstract/Workflow/QueryStatus.cs
+++ b/src/Yavsc.Abstract/Workflow/QueryStatus.cs
@@ -5,15 +5,28 @@ namespace Yavsc
/// should be associated to any
/// client user query to a provider user or
/// other external entity.
+ ///
+ ///
+ /// Acceptance is split by party: when the
+ /// provider accepts the client's request (and produces/submits the
+ /// estimate), when the client accepts
+ /// the provider's estimate. is the legacy
+ /// single-value kept for rows written before the split; new writes
+ /// use the party-specific values. Its integer value (2) is stable
+ /// so existing rows still deserialize.
+ ///
///
public enum QueryStatus: int
{
- Inserted,
- Rejected,
- Accepted,
- InProgress,
+ Inserted = 0,
+ Rejected = 1,
+ Accepted = 2,
+ InProgress = 3,
// final states
- Failed,
- Success
+ Failed = 4,
+ Success = 5,
+ // party-specific acceptance (see summary)
+ ProAccepted = 6,
+ ClientAccepted = 7,
}
-}
+}
\ No newline at end of file
diff --git a/src/Yavsc.Api.Test/FrontOfficeApiControllerTests.cs b/src/Yavsc.Api.Test/FrontOfficeApiControllerTests.cs
index 55e830660..53babf7e0 100644
--- a/src/Yavsc.Api.Test/FrontOfficeApiControllerTests.cs
+++ b/src/Yavsc.Api.Test/FrontOfficeApiControllerTests.cs
@@ -127,7 +127,8 @@ public sealed class FrontOfficeApiControllerTests : IClassFixture();
var updated = assertDb.RdvQueries.Single(q => q.Id == queryId);
- Assert.Equal(QueryStatus.Accepted, updated.Status);
+ // Default caller is "alice" (the provider) → ProAccepted.
+ Assert.Equal(QueryStatus.ProAccepted, updated.Status);
}
[Fact]
@@ -146,7 +147,7 @@ public sealed class FrontOfficeApiControllerTests : IClassFixture();
- Assert.Equal(QueryStatus.Accepted, assertDb.RdvQueries.Single(q => q.Id == queryId).Status);
+ Assert.Equal(QueryStatus.ProAccepted, assertDb.RdvQueries.Single(q => q.Id == queryId).Status);
var estimate = assertDb.Estimates.Single(e => e.Id == estimateId);
Assert.True(estimate.ProviderValidationDate != default);
@@ -173,7 +174,7 @@ public sealed class FrontOfficeApiControllerTests : IClassFixture();
- Assert.Equal(QueryStatus.Accepted, assertDb.RdvQueries.Single(q => q.Id == queryId).Status);
+ Assert.Equal(QueryStatus.ClientAccepted, assertDb.RdvQueries.Single(q => q.Id == queryId).Status);
var estimate = assertDb.Estimates.Single(e => e.Id == estimateId);
Assert.True(estimate.ClientValidationDate != default);
diff --git a/src/Yavsc.Api/Controllers/Business/BillingController.cs b/src/Yavsc.Api/Controllers/Business/BillingController.cs
index ba43094a9..f4fe8bc82 100644
--- a/src/Yavsc.Api/Controllers/Business/BillingController.cs
+++ b/src/Yavsc.Api/Controllers/Business/BillingController.cs
@@ -157,6 +157,8 @@ namespace Yavsc.ApiControllers
.Where(q => allowedActivityCodes.Contains(q.ActivityCode))
.Where(q => q.Status == QueryStatus.Inserted
|| q.Status == QueryStatus.Accepted
+ || q.Status == QueryStatus.ProAccepted
+ || q.Status == QueryStatus.ClientAccepted
|| q.Status == QueryStatus.InProgress)
.Cast()
.ToList()
@@ -169,6 +171,8 @@ namespace Yavsc.ApiControllers
.Where(q => allowedActivityCodes.Contains(q.ActivityCode))
.Where(q => q.Status == QueryStatus.Inserted
|| q.Status == QueryStatus.Accepted
+ || q.Status == QueryStatus.ProAccepted
+ || q.Status == QueryStatus.ClientAccepted
|| q.Status == QueryStatus.InProgress)
.Cast()
.ToList()
@@ -181,6 +185,8 @@ namespace Yavsc.ApiControllers
.Where(q => allowedActivityCodes.Contains(q.ActivityCode))
.Where(q => q.Status == QueryStatus.Inserted
|| q.Status == QueryStatus.Accepted
+ || q.Status == QueryStatus.ProAccepted
+ || q.Status == QueryStatus.ClientAccepted
|| q.Status == QueryStatus.InProgress)
.Cast()
.ToList()
diff --git a/src/Yavsc.Api/Controllers/Business/FrontOfficeApiController.cs b/src/Yavsc.Api/Controllers/Business/FrontOfficeApiController.cs
index 5f328728c..3afa11e0d 100644
--- a/src/Yavsc.Api/Controllers/Business/FrontOfficeApiController.cs
+++ b/src/Yavsc.Api/Controllers/Business/FrontOfficeApiController.cs
@@ -100,7 +100,16 @@ namespace Yavsc.ApiControllers
estimate.ClientValidationDate = DateTime.UtcNow;
}
- query.Status = QueryStatus.Accepted;
+ // The party-specific status records who accepted: the
+ // provider (ProAccepted) or the client (ClientAccepted).
+ // An admin accepting (neither party) falls back to the
+ // legacy generic Accepted.
+ query.Status = role switch
+ {
+ ActorRole.Provider => QueryStatus.ProAccepted,
+ ActorRole.Client => QueryStatus.ClientAccepted,
+ _ => QueryStatus.Accepted,
+ };
try
{
diff --git a/src/Yavsc.Org/Controllers/Contracting/FrontOfficeController.cs b/src/Yavsc.Org/Controllers/Contracting/FrontOfficeController.cs
index 549d80942..2044e2b0b 100644
--- a/src/Yavsc.Org/Controllers/Contracting/FrontOfficeController.cs
+++ b/src/Yavsc.Org/Controllers/Contracting/FrontOfficeController.cs
@@ -46,9 +46,9 @@ namespace Yavsc.Controllers
{
EstimateToProduceCount = _context.RdvQueries.Where(c => c.PerformerId == uid && c.EventDate > now && c.Status == QueryStatus.Inserted
&& c.ValidationDate == null && !_context.Estimates.Any(e => e.CommandId == c.Id)).Count(),
- EstimateToHonorAsProCount = _context.RdvQueries.Where(c => c.PerformerId == uid && c.EventDate > now && c.Status == QueryStatus.Accepted
+ EstimateToHonorAsProCount = _context.RdvQueries.Where(c => c.PerformerId == uid && c.EventDate > now && (c.Status == QueryStatus.ProAccepted || c.Status == QueryStatus.Accepted)
&& c.ValidationDate == null && _context.Estimates.Any(e => e.CommandId == c.Id )).Count(),
- EstimateToSignAsCliCount = _context.Estimates.Where(e => e.ClientId == uid && e.Query.Status == QueryStatus.Accepted).Count(),
+ EstimateToSignAsCliCount = _context.Estimates.Where(e => e.ClientId == uid && (e.Query.Status == QueryStatus.ProAccepted || e.Query.Status == QueryStatus.Accepted)).Count(),
BillToSignAsCliCount = 0,
NewPayementsCount = 0