Skip to content

Commit 67f95df

Browse files
committed
feat(migration): hash refresh tokens and update schema
- Removed existing Token and ReplacedByToken columns from RefreshTokens table. - Added TokenHash and ReplacedByTokenHash columns with appropriate constraints. - Updated indices to ensure uniqueness on TokenHash. - Cleared existing refresh tokens data during migration.
1 parent 9a0179e commit 67f95df

198 files changed

Lines changed: 16601 additions & 2245 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

API.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,9 +1587,15 @@ Proxy endpoints for the REVMax fiscal device (ZIMRA compliance).
15871587
|--------|----------|-------------|
15881588
| GET | `/api/revmax/card-details` | Fiscal device card details (TIN, BPN, serial number) |
15891589
| GET | `/api/revmax/day-status` | Current fiscal day status |
1590-
| POST | `/api/revmax/invoice` | Submit invoice for fiscalization |
1591-
| POST | `/api/revmax/credit-note` | Submit credit note for fiscalization |
1592-
| GET | `/api/revmax/report` | Get fiscal report (Z-report) |
1590+
| GET | `/api/revmax/license` | Get the active REVMax license |
1591+
| POST | `/api/revmax/license` | Set or replace the active REVMax license |
1592+
| GET | `/api/revmax/z-report` | Get fiscal report (Z-report) |
1593+
| GET | `/api/revmax/invoices/{invoiceNumber}` | Get a fiscalized invoice by invoice number |
1594+
| GET | `/api/revmax/unprocessed-invoices/summary` | Get the summary of invoices still pending processing on REVMax |
1595+
| POST | `/api/revmax/transact` | Submit a standard fiscal transaction |
1596+
| POST | `/api/revmax/transact-ext` | Submit an extended fiscal transaction used to fiscalise credit notes where the original invoice was fiscalised on a different device |
1597+
1598+
`/api/revmax/transact-ext` proxies REVMax `TransactMExt` and extends the standard transaction payload with `refDeviceId`, `refReceiptGlobalNo`, and `refFiscalDayNo`. Use it when the credit note must reference a prior fiscalized invoice from a different device.
15931599

15941600
**VAT Rate:** 15.5% (configurable)
15951601

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using ErrorOr;
2+
3+
namespace ShopInventory.Web.Common.Errors;
4+
5+
public static partial class Errors
6+
{
7+
public static class CreditNote
8+
{
9+
public static Error LoadFailed(string message) =>
10+
Error.Failure("CreditNote.LoadFailed", message);
11+
12+
public static Error CreateFailed(string message) =>
13+
Error.Failure("CreditNote.CreateFailed", message);
14+
15+
public static Error UpdateFailed(string message) =>
16+
Error.Failure("CreditNote.UpdateFailed", message);
17+
18+
public static Error BulkCancelFailed(string message) =>
19+
Error.Failure("CreditNote.BulkCancelFailed", message);
20+
21+
public static Error DuplicateFailed(string message) =>
22+
Error.Failure("CreditNote.DuplicateFailed", message);
23+
}
24+
}

ShopInventory.Web/Common/Errors/Errors.Report.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,8 @@ public static Error LoadMerchandiserPurchaseOrdersFailed(string message) =>
1111

1212
public static Error LoadFiscalTransactionsFailed(string message) =>
1313
Error.Failure("Report.LoadFiscalTransactionsFailed", message);
14+
15+
public static Error BackfillFiscalTransactionsFailed(string message) =>
16+
Error.Failure("Report.BackfillFiscalTransactionsFailed", message);
1417
}
1518
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using ErrorOr;
2+
3+
namespace ShopInventory.Web.Common.Errors;
4+
5+
public static partial class Errors
6+
{
7+
public static class Revmax
8+
{
9+
public static Error LoadDraftFailed(string message) =>
10+
Error.Failure("Revmax.LoadDraftFailed", message);
11+
12+
public static Error CreditNoteNotFound(string creditNoteNumber) =>
13+
Error.NotFound("Revmax.CreditNoteNotFound", $"Credit note {creditNoteNumber} was not found.");
14+
15+
public static Error FiscalizationFailed(string message) =>
16+
Error.Failure("Revmax.FiscalizationFailed", message);
17+
}
18+
}

ShopInventory.Web/Components/Layout/NavMenu.razor

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -597,13 +597,13 @@
597597
<span class="snav-icon">
598598
<MudIcon Icon="@Icons.Material.Filled.FactCheck" />
599599
</span>
600-
<span class="snav-text">Proof of Delivery</span>
600+
<span class="snav-text">Product PODs</span>
601601
</NavLink>
602602
<NavLink class="snav-link" href="/pod-report" Match="NavLinkMatch.Prefix">
603603
<span class="snav-icon">
604604
<MudIcon Icon="@Icons.Material.Filled.Assessment" />
605605
</span>
606-
<span class="snav-text">POD Report</span>
606+
<span class="snav-text">Product POD Report</span>
607607
</NavLink>
608608
<div class="nav-section-label">Account</div>
609609
<NavLink class="snav-link" href="/security" Match="NavLinkMatch.Prefix">
@@ -632,14 +632,24 @@
632632
<span class="snav-icon">
633633
<MudIcon Icon="@Icons.Material.Filled.FactCheck" />
634634
</span>
635-
<span class="snav-text">Proof of Delivery</span>
635+
<span class="snav-text">Product PODs</span>
636636
</NavLink>
637637
<NavLink class="snav-link" href="/pod-report" Match="NavLinkMatch.Prefix">
638638
<span class="snav-icon">
639639
<MudIcon Icon="@Icons.Material.Filled.Assessment" />
640640
</span>
641-
<span class="snav-text">POD Report</span>
641+
<span class="snav-text">Product POD Report</span>
642642
</NavLink>
643+
<AuthorizeView Roles="PodOperator" Context="driverAccountCtx">
644+
<Authorized>
645+
<NavLink class="snav-link" href="/user-management" Match="NavLinkMatch.Prefix">
646+
<span class="snav-icon">
647+
<MudIcon Icon="@Icons.Material.Filled.LocalShipping" />
648+
</span>
649+
<span class="snav-text">Driver Accounts</span>
650+
</NavLink>
651+
</Authorized>
652+
</AuthorizeView>
643653
<AuthorizeView Roles="PodOperator,Driver" Context="podSecCtx">
644654
<Authorized>
645655
<div class="nav-section-label">Account</div>
@@ -653,27 +663,30 @@
653663
</AuthorizeView>
654664
</Authorized>
655665
</AuthorizeView>
656-
<AuthorizeView Roles="Admin,Manager,Merchandiser,Driver" Context="crateCtx">
666+
<AuthorizeView Roles="Admin,Manager,Merchandiser,PodOperator,Driver" Context="crateCtx">
657667
<Authorized>
658668
<div class="nav-section-label">Crates</div>
659-
<NavLink class="snav-link" href="/crates/opening-balances" Match="NavLinkMatch.All">
660-
<span class="snav-icon">
661-
<MudIcon Icon="@Icons.Material.Filled.Inventory2" />
662-
</span>
663-
<span class="snav-text">Opening Balances</span>
664-
</NavLink>
665669
<NavLink class="snav-link sub-link" href="/crates/pods" Match="NavLinkMatch.All">
666670
<span class="snav-icon">
667671
<MudIcon Icon="@Icons.Material.Filled.FactCheck" />
668672
</span>
669673
<span class="snav-text">Crate PODs</span>
670674
</NavLink>
671-
<NavLink class="snav-link sub-link" href="/crates/grvs" Match="NavLinkMatch.All">
672-
<span class="snav-icon">
673-
<MudIcon Icon="@Icons.Material.Filled.AssignmentReturn" />
674-
</span>
675-
<span class="snav-text">Crate GRVs</span>
676-
</NavLink>
675+
@if (!crateCtx.User.IsInRole("PodOperator"))
676+
{
677+
<NavLink class="snav-link" href="/crates/opening-balances" Match="NavLinkMatch.All">
678+
<span class="snav-icon">
679+
<MudIcon Icon="@Icons.Material.Filled.Inventory2" />
680+
</span>
681+
<span class="snav-text">Opening Balances</span>
682+
</NavLink>
683+
<NavLink class="snav-link sub-link" href="/crates/grvs" Match="NavLinkMatch.All">
684+
<span class="snav-icon">
685+
<MudIcon Icon="@Icons.Material.Filled.AssignmentReturn" />
686+
</span>
687+
<span class="snav-text">Crate GRVs</span>
688+
</NavLink>
689+
}
677690
</Authorized>
678691
</AuthorizeView>
679692

@@ -738,6 +751,13 @@
738751
</span>
739752
<span class="snav-text">REVMax Fiscal</span>
740753
</NavLink>
754+
<NavLink class="snav-link sub-link" href="/revmax/cross-device-credit-note"
755+
Match="NavLinkMatch.All">
756+
<span class="snav-icon">
757+
<MudIcon Icon="@Icons.Material.Filled.ReceiptLong" />
758+
</span>
759+
<span class="snav-text">Cross-Device CN</span>
760+
</NavLink>
741761
</Authorized>
742762
</AuthorizeView>
743763

0 commit comments

Comments
 (0)