diff --git a/EstateManagementUI.BlazorServer/Components/Pages/Merchants/Edit.razor b/EstateManagementUI.BlazorServer/Components/Pages/Merchants/Edit.razor index 7dfb42c5..5622878e 100644 --- a/EstateManagementUI.BlazorServer/Components/Pages/Merchants/Edit.razor +++ b/EstateManagementUI.BlazorServer/Components/Pages/Merchants/Edit.razor @@ -192,21 +192,57 @@ @if (showAddOperator) {
- -
- + + @if (availableOperators != null) { - + @foreach (var op in availableOperators) + { + + } } + +
+ + @if (selectedOperator != null) + { + @if (selectedOperator.RequireCustomMerchantNumber) + { +
+ + + @if (!string.IsNullOrEmpty(merchantNumberError)) + { +

@merchantNumberError

+ } +
} - - + + @if (selectedOperator.RequireCustomTerminalNumber) + { +
+ + + @if (!string.IsNullOrEmpty(terminalNumberError)) + { +

@terminalNumberError

+ } +
+ } + } + +
+ +
} @@ -388,6 +424,11 @@ private List assignedOperators = new(); private bool showAddOperator = false; private string? selectedOperatorId; + private OperatorModel? selectedOperator; + private string? merchantNumber; + private string? terminalNumber; + private string? merchantNumberError; + private string? terminalNumberError; // Contracts private List? availableContracts; @@ -615,12 +656,79 @@ } } + private void OnOperatorSelected() + { + if (string.IsNullOrEmpty(selectedOperatorId)) + { + selectedOperator = null; + merchantNumber = null; + terminalNumber = null; + merchantNumberError = null; + terminalNumberError = null; + } + else + { + var operatorId = Guid.Parse(selectedOperatorId); + selectedOperator = availableOperators?.FirstOrDefault(o => o.OperatorId == operatorId); + merchantNumber = null; + terminalNumber = null; + merchantNumberError = null; + terminalNumberError = null; + } + } + + private bool ValidateOperatorFields() + { + bool isValid = true; + merchantNumberError = null; + terminalNumberError = null; + + if (selectedOperator != null) + { + if (selectedOperator.RequireCustomMerchantNumber) + { + if (string.IsNullOrWhiteSpace(merchantNumber)) + { + merchantNumberError = "Merchant number is required"; + isValid = false; + } + else if (!System.Text.RegularExpressions.Regex.IsMatch(merchantNumber, @"^\d+$")) + { + merchantNumberError = "Merchant number must be numeric"; + isValid = false; + } + } + + if (selectedOperator.RequireCustomTerminalNumber) + { + if (string.IsNullOrWhiteSpace(terminalNumber)) + { + terminalNumberError = "Terminal number is required"; + isValid = false; + } + else if (!System.Text.RegularExpressions.Regex.IsMatch(terminalNumber, @"^\d+$")) + { + terminalNumberError = "Terminal number must be numeric"; + isValid = false; + } + } + } + + return isValid; + } + private async Task AddOperatorToMerchant() { if (string.IsNullOrEmpty(selectedOperatorId)) return; ClearMessages(); + // Validate fields + if (!ValidateOperatorFields()) + { + return; + } + try { var correlationId = new CorrelationId(Guid.NewGuid()); @@ -633,7 +741,9 @@ accessToken, estateId, MerchantId, - operatorId + operatorId, + merchantNumber, + terminalNumber ); var result = await Mediator.Send(command); @@ -642,6 +752,11 @@ { successMessage = "Operator added successfully"; selectedOperatorId = null; + selectedOperator = null; + merchantNumber = null; + terminalNumber = null; + merchantNumberError = null; + terminalNumberError = null; showAddOperator = false; // Add to assigned list (in real implementation, reload from server) diff --git a/EstateManagementUI.BlazorServer/Requests/Requests.cs b/EstateManagementUI.BlazorServer/Requests/Requests.cs index 0286af98..8692ad9f 100644 --- a/EstateManagementUI.BlazorServer/Requests/Requests.cs +++ b/EstateManagementUI.BlazorServer/Requests/Requests.cs @@ -43,7 +43,7 @@ public record GetMerchantQuery(CorrelationId CorrelationId, string AccessToken, public static class Commands { public record AddMerchantDeviceCommand(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid MerchantId, string DeviceIdentifier) : IRequest; - public record AddOperatorToMerchantCommand(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid MerchantId, Guid OperatorId) : IRequest; + public record AddOperatorToMerchantCommand(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid MerchantId, Guid OperatorId, string? MerchantNumber, string? TerminalNumber) : IRequest; public record AddOperatorToEstateCommand(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid OperatorId) : IRequest; public record AssignContractToMerchantCommand(CorrelationId CorrelationId, string AccessToken, Guid EstateId, Guid MerchantId, Guid ContractId) : IRequest; public record CreateContractCommand(CorrelationId CorrelationId, string AccessToken, Guid EstateId, string Description, Guid OperatorId) : IRequest;