PostIt: validate/refuse an estimate with a signature (pro or client)
Adds the client-side ability to open an estimate from the list, draw a signature on a reusable SignaturePadView control, and accept or reject it against /api/v1/front/query/accept|reject. The server resolves the actor role (provider vs client) from the caller's identity, so the same page works for either party. - Yavsc.Api.Client: QueryAcceptanceDto + FrontOfficeApiClient (accept/reject) - PostIt: extract SignaturePadView UserControl from SignaturePage; new EstimateValidationPage (VM + view) with Valider/Refuser/Effacer/Retour; wire OpenEstimate entry point from EstimateListPage; register client/page in DI + ViewLocator - Tests: FrontOfficeApiClient + EstimateValidationPageViewModel unit tests; update EstimateListPageViewModelTests ctor Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
parent
2ad7a55e34
commit
36ffe4683c
18 changed files with 1149 additions and 151 deletions
44
src/Yavsc.Api.Client/Dtos/QueryAcceptanceDto.cs
Normal file
44
src/Yavsc.Api.Client/Dtos/QueryAcceptanceDto.cs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
using System;
|
||||
|
||||
namespace Yavsc.Api.Client;
|
||||
|
||||
/// <summary>
|
||||
/// Body of <c>POST api/v1/front/query/accept</c> and
|
||||
/// <c>.../query/reject</c>, mirroring the server-side
|
||||
/// <c>Yavsc.ViewModels.FrontOffice.QueryAcceptanceRequest</c>.
|
||||
/// <see cref="Strokes"/> is optional: when non-empty on accept it is
|
||||
/// the PostIt wire-format signature captured with the acceptance; null
|
||||
/// or empty means no signature (the only valid value on reject).
|
||||
/// </summary>
|
||||
public sealed class QueryAcceptanceRequestDto
|
||||
{
|
||||
public int[]? Strokes { get; set; }
|
||||
|
||||
public int CoordinateMax { get; set; } = 10_000;
|
||||
|
||||
public DateTime? CapturedAtUtc { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Response of <c>POST .../query/accept</c> / <c>.../query/reject</c>
|
||||
/// (<c>Ok(new { queryId, status, signature = ... })</c>). The
|
||||
/// <see cref="Signature"/> ref is non-null only when a signature was
|
||||
/// staged on accept.
|
||||
/// </summary>
|
||||
public sealed class QueryAcceptanceResponseDto
|
||||
{
|
||||
public long QueryId { get; set; }
|
||||
|
||||
public string? Status { get; set; }
|
||||
|
||||
public QuerySignatureRefDto? Signature { get; set; }
|
||||
}
|
||||
|
||||
public sealed class QuerySignatureRefDto
|
||||
{
|
||||
public long Id { get; set; }
|
||||
|
||||
public long EstimateId { get; set; }
|
||||
|
||||
public string? Type { get; set; }
|
||||
}
|
||||
Loading…
Reference in a new issue