Compare commits

..
6 Commits
Author SHA256 Message Date
Daniel-Garmig 0ab3957efa Localization - Added Spanish
- Added language selector.
- Translated strings to Spanish.
- Added Package MudBlazor.Translations for translations.
2026-09-18 12:42:04 +02:00
Daniel-Garmig fbe1750510 GuestDocument - Page create - Bugfix
Fixed a bug that caused exceptions when "Create New" button was clicked before searching if GuestDocument already exists.
2026-09-17 17:24:58 +02:00
Daniel-Garmig 23c8d490d8 Updated packages
Updated:
- FluentStorage
- EntityFrameworkCore
- MudBlazor
2026-09-17 17:19:58 +02:00
Daniel-Garmig c5d8487046 Small fixes and improvements:
- GuestDocument - At least one contact field is required.
- GuestDocument - List Page - Hide not useful columns: "version"
- StayEntry - Show stayEntry ID in UI msg after creation.
- StayEntry - Create Page - Time fields don't reset anymore when dates change.
- Show local times in UI instead of UTC times.
- Validators - Use expresions for dates so they are recalculated each time.
2026-09-12 15:28:25 +02:00
Daniel-Garmig 491ecc4cd1 GuestDocument - Add edit mode.
Added Edit mode for GuestDocument in GuestDocument details page.
2026-09-10 19:34:46 +02:00
Daniel-Garmig a1a55aa396 Small fixes and improvements:
- StayExport - SpainParteViajerosProvider - Fixed validation for codigoPostal/codMunicipio.
- AddressQueryDialog - Add loading indication and "debounce" input to reduce API queries.
2026-09-10 18:27:56 +02:00
23 changed files with 842 additions and 60 deletions
+11 -10
View File
@@ -6,12 +6,13 @@
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Extensions.MudBlazor.StaticInput" Version="4.1.0" />
<PackageVersion Include="FluentStorage" Version="8.0.16" />
<PackageVersion Include="FluentStorage.AWS" Version="8.0.10" />
<PackageVersion Include="FluentStorage" Version="8.0.22" />
<PackageVersion Include="FluentStorage.AWS" Version="8.0.21" />
<PackageVersion Include="FluentValidation" Version="12.1.1" />
<PackageVersion Include="Grpc.AspNetCore" Version="2.64.0" />
<PackageVersion Include="Microsoft.Extensions.Localization" Version="10.0.9" />
<PackageVersion Include="MudBlazor" Version="9.4.0" />
<PackageVersion Include="MudBlazor" Version="9.10.0" />
<PackageVersion Include="MudBlazor.Translations" Version="3.6.0" />
<PackageVersion Include="Serilog" Version="4.4.0" />
<PackageVersion Include="Serilog.Enrichers.Process" Version="3.0.0" />
<PackageVersion Include="Serilog.Enrichers.Thread" Version="4.0.0" />
@@ -21,18 +22,18 @@
<PackageVersion Include="Serilog.Sinks.File" Version="7.0.0" />
</ItemGroup>
<ItemGroup>
<PackageVersion Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="10.0.7" />
<PackageVersion Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="10.0.12" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="10.0.7" />
</ItemGroup>
<ItemGroup>
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.7" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.7">
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.12" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.12">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageVersion>
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.7" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.7" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Proxies" Version="10.0.7" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.12" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.12" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Proxies" Version="10.0.12" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.3" />
</ItemGroup>
</Project>
@@ -17,13 +17,22 @@
<MudStack row>
<MudTextField @bind-Value="SearchText" Label="@LanguageLocale.control_AddressQueryDialog_searchText"
Required />
<MudIconButton Icon="@Icons.Material.Filled.Search" OnClick="btnSearchAddress" />
<MudIconButton Icon="@Icons.Material.Filled.Search" OnClick="btnSearchAddress" Disabled="@_isDataLoading" />
</MudStack>
<MudPaper Class="mt-4 pa-2">
@if (addressResults.Count == 0)
@if (addressResults.Count == 0 && !_isDataLoading)
{
<MudText Typo="Typo.body1">@LanguageLocale.general_noResults</MudText>
<MudElement Style="width: 100%; height: 100px;" HtmlTag="div">
<MudText Typo="Typo.body1" Align="Align.Center">
@LanguageLocale.general_noResults
</MudText>
</MudElement>
}
@if (_isDataLoading)
{
<MudSkeleton Width="100%" Height="100px" />
}
<MudList T="AddressResultDTO" @bind-SelectedValue="SelectedAddressResult"
@@ -81,6 +90,9 @@
private List<AddressResultDTO> addressResults = [];
private AddressResultDTO? SelectedAddressResult { get; set; }
private bool _isDataLoading = false;
private string _lastSearchText = "";
private void Cancel()
{
@@ -99,16 +111,20 @@
private async Task btnSearchAddress()
{
if (SearchText.Length == 0)
if (SearchText.Length == 0 || SearchText == _lastSearchText)
{
return;
}
try
{
var queryService = addressQueryFactory.GetService();
_isDataLoading = true;
var queryService = addressQueryFactory.GetService();
addressResults = await queryService.SearchAddressAsync(SearchText);
_lastSearchText = SearchText;
_isDataLoading = false;
}
catch (Exception ex)
{
@@ -0,0 +1,60 @@
@using System.Globalization
@using Microsoft.AspNetCore.Localization
@inject IJSRuntime JS
@inject NavigationManager Navigation
<MudItem>
<MudIconButton Icon="@Icons.Material.Outlined.Translate" Color="Color.Primary" DropShadow="false"
OnClick="@BtnToggleOpen" />
<MudPopover Open="_open" AnchorOrigin="Origin.BottomCenter" TransformOrigin="Origin.TopLeft" Paper="false">
<MudPaper Outlined="true" Class="px-4 py-8">
<MudSelect Value="currentCulture" T="CultureInfo" Label="@LanguageLocale.general_languageSelector" FullWidth="true"
ValueChanged="(culture) => CmbSelectedCultureChanged(culture)">
@foreach (CultureInfo culture in supportedCultures)
{
<MudSelectItem Value="culture">
@culture.DisplayName
</MudSelectItem>
}
</MudSelect>
</MudPaper>
</MudPopover>
</MudItem>
@code {
private bool _open;
private CultureInfo? currentCulture;
private List<CultureInfo> supportedCultures = [
new CultureInfo("en-US"),
new CultureInfo("es-ES"),
];
protected override void OnInitialized()
{
currentCulture = CultureInfo.CurrentCulture;
}
private void BtnToggleOpen() => _open = !_open;
private async Task CmbSelectedCultureChanged(CultureInfo? newCulture)
{
if (newCulture is null)
{
return;
}
string cookieValue = CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(newCulture, newCulture));
await JS.InvokeVoidAsync("setBlazorCultureCookie", cookieValue);
Navigation.NavigateTo(Navigation.Uri, forceLoad: true);
//Close Popover.
_open = false;
}
}
@@ -21,12 +21,14 @@
<MudDivider DividerType="DividerType.Middle" Class="mb-4" />
<MudStack Row style="@FieldMarginY">
<MudDatePicker @bind-Date="Model.DateIn" For="@(() => Model.DateIn)"
<MudDatePicker Date="Model.DateIn" For="@(() => Model.DateIn)"
DateChanged="@((newVal) => Model.DateIn = GetDateTimeFromDateAndTime(newVal, Model.DateIn?.TimeOfDay))"
Label="@LanguageLocale.dto_StayEntry_DateIn" Clearable OpenTo="OpenTo.Date" Editable
AutoClose="true" />
<MudTimePicker Time="Model.DateIn?.TimeOfDay" Label=" " Editable
TimeChanged="@((newVal) => Model.DateIn = GetDateTimeFromDateAndTime(Model.DateIn, newVal))" />
<MudDatePicker @bind-Date="Model.DateOut" For="@(() => Model.DateOut)"
<MudDatePicker Date="Model.DateOut" For="@(() => Model.DateOut)"
DateChanged="@((newVal) => Model.DateOut = GetDateTimeFromDateAndTime(newVal, Model.DateOut?.TimeOfDay))"
Label="@LanguageLocale.dto_StayEntry_DateOut" Clearable OpenTo="OpenTo.Date" Editable
AutoClose="true" />
<MudTimePicker Time="Model.DateOut?.TimeOfDay" Label=" " Editable
@@ -19,6 +19,7 @@
<MudToggleIconButton Class="ml-auto" Icon="@Icons.Material.Outlined.LightMode"
ToggledIcon="@Icons.Material.Outlined.DarkMode" ToggledColor="Color.Primary" Color="Color.Primary"
Toggled="@_isDarkMode" ToggledChanged="@DarkModeToggle" />
<LanguageSelector />
</MudAppBar>
<MudDrawer id="nav-drawer" @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Docked" Elevation="2">
<NavMenu />
@@ -9,6 +9,7 @@
@inject NavigationManager Navigation
@inject IGuestDocumentEntityService guestDocService
@inject IStayEntryEntityService stayService
@inject IDialogService DialogService
<PageTitle>Somnia - Guest Docs - Details</PageTitle>
@@ -16,14 +17,28 @@
<MudStack Row="true" Class="my-4">
<MudText Typo="Typo.h4" GutterBottom="true">Guest Document: @docId - @documentModel?.FullDocument</MudText>
<MudSpacer />
<MudButton Variant="Variant.Filled" Color="Color.Success" Size="Size.Small" StartIcon="@Icons.Material.Filled.Edit"
OnClick="() => BtnEdit()" Disabled>
@LanguageLocale.general_btnEdit
</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Default" Size="Size.Small"
StartIcon="@Icons.Material.Filled.ArrowBack" OnClick="() => BtnReturn()">
@LanguageLocale.general_btnReturn
</MudButton>
@if (_isEditMode)
{
<MudButton Variant="Variant.Filled" Color="Color.Error" Size="Size.Small" StartIcon="@Icons.Material.Filled.Cancel"
OnClick="() => BtnCancelEdit()" Disabled="!_isEditMode">
@LanguageLocale.general_btnCancel
</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Success" Size="Size.Small" StartIcon="@Icons.Material.Filled.Save"
OnClick="() => BtnSaveEdit()" Disabled="!_isEditMode">
@LanguageLocale.general_btnSave
</MudButton>
}
@if (!_isEditMode)
{
<MudButton Variant="Variant.Filled" Color="Color.Success" Size="Size.Small" StartIcon="@Icons.Material.Filled.Edit"
OnClick="() => BtnEnableEdit()" Disabled="_isEditMode">
@LanguageLocale.general_btnEdit
</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Default" Size="Size.Small"
StartIcon="@Icons.Material.Filled.ArrowBack" OnClick="() => BtnReturn()">
@LanguageLocale.general_btnReturn
</MudButton>
}
</MudStack>
@if (documentModel is not null)
@@ -32,10 +47,11 @@
Centered>
<MudTabPanel Text="Details" Icon="@Icons.Material.Filled.Info">
<GuestDocForm @ref="_form" Model="documentModel" ReadOnly="true" />
<GuestDocForm @ref="_form" Model="documentModel" ReadOnly="!_isEditMode" />
</MudTabPanel>
<MudTabPanel Text="Stays" ToolTip="Guest stays" OnClick="LoadTabGuestStays" Icon="@Icons.Material.Filled.Bed">
<MudTabPanel Text="Stays" ToolTip="Guest stays" Icon="@Icons.Material.Filled.Bed" OnClick="LoadTabGuestStays"
Disabled="_isEditMode">
<MudText>Total Stays: @(guestStaysLoading ? "Loading..." : guestStayList.Count())</MudText>
<MudTable Items="@guestStayList" Hover="true" Loading="@guestStaysLoading" Class="mt-2" Elevation="2">
<HeaderContent>
@@ -87,8 +103,16 @@
IEnumerable<StayEntryDTO> guestStayList = [];
bool guestStaysLoading = true;
private bool _isEditMode = false;
protected override async Task OnInitializedAsync()
{
//Get model from db.
await LoadGuestDocumentAsync();
}
private async Task LoadGuestDocumentAsync()
{
//Get model from db.
documentModel = await guestDocService.GetLastVersionDtoByIdAsync(docId);
@@ -121,9 +145,68 @@
#region Event Handlers
private void BtnEdit()
private void BtnEnableEdit()
{
userMessage.ShowMessage("Not implemented yet!", MessageKind.Info);
Debug.Assert(_isEditMode == false);
userMessage.ShowMessage(LanguageLocale.page_GuestDocDetail_msgEditEnabled, MessageKind.Normal);
_isEditMode = true;
}
private async Task BtnCancelEdit()
{
Debug.Assert(_isEditMode == true);
var result = await DialogService.ShowMessageBoxAsync(
LanguageLocale.general_confirmTitle, LanguageLocale.page_GuestDocDetail_msgConfirmCancelEdit,
yesText: "OK", cancelText: LanguageLocale.general_btnCancel);
if (result == null || result.Value == false)
{
// Cancel cancel -> Continue with edit.
return;
}
//Cancel edit -> Reload data from DB.
await LoadGuestDocumentAsync();
userMessage.ShowMessage(LanguageLocale.general_msgEditCanceled, MessageKind.Normal);
_isEditMode = false;
}
private async Task BtnSaveEdit()
{
Debug.Assert(_isEditMode == true && documentModel is not null);
var confirmResult = await DialogService.ShowMessageBoxAsync(
LanguageLocale.general_confirmTitle, LanguageLocale.page_GuestDocDetail_msgConfirmSaveEdit,
yesText: "OK", cancelText: LanguageLocale.general_btnCancel);
if (confirmResult == null || confirmResult.Value == false)
{
// Cancel save -> Continue with edit.
return;
}
//Show Loading dialog...
var loadingDialog = await DialogService.ShowAsync<LoadingDialog>();
//Save edit.
Result updateResult = await guestDocService.UpdateDocumentAsync(documentModel);
if (!updateResult.IsSuccess)
{
string errorMsg = string.Format(LanguageLocale.page_GuestDocDetail_msgEditError, documentModel.FullDocument);
userMessage.ShowResultWithMessage(updateResult, errorMsg);
loadingDialog.Close();
return;
}
//Reload data from DB.
await LoadGuestDocumentAsync();
loadingDialog.Close();
userMessage.ShowMessage(LanguageLocale.general_msgEditSaved, MessageKind.Success);
_isEditMode = false;
}
private void BtnReturn()
@@ -43,8 +43,9 @@
</MudStack>
</ToolBarContent>
<Columns>
<PropertyColumn Property="x => x.Id" Title="@LanguageLocale.dto_GuestDocument_Id" />
<PropertyColumn Property="x => x.Version" Title="@LanguageLocale.dto_GuestDocument_Version" />
<PropertyColumn Property="x => x.Id" Title="@LanguageLocale.dto_GuestDocument_Id" Hideable="false" />
<PropertyColumn Property="x => x.Version" Title="@LanguageLocale.dto_GuestDocument_Version" Hidden
Hideable="true" />
<PropertyColumn Title="@LanguageLocale.dto_GuestDocument_DocumentType"
Property="x => dataListService.GetLocalizedValue(GuestConsts.DataList_DocumentTypes, x.DocumentType)"
Hideable="false" />
@@ -18,10 +18,13 @@
<MudStack Row="true" Class="my-4">
<MudText Typo="Typo.h4" GutterBottom="true">New Guest Document</MudText>
<MudSpacer />
<MudButton Variant="Variant.Filled" Color="Color.Success" Size="Size.Small" StartIcon="@Icons.Material.Filled.Add"
OnClick="() => BtnSaveNewGuest()">
@LanguageLocale.general_btnCreate
</MudButton>
@if (currentPageMode == ePageMode.createNew)
{
<MudButton Variant="Variant.Filled" Color="Color.Success" Size="Size.Small" StartIcon="@Icons.Material.Filled.Add"
OnClick="() => BtnSaveNewGuest()">
@LanguageLocale.general_btnCreate
</MudButton>
}
<MudButton Variant="Variant.Filled" Color="Color.Default" Size="Size.Small"
StartIcon="@Icons.Material.Filled.ArrowBack" OnClick="() => BtnReturn()">
@LanguageLocale.general_btnReturn
@@ -129,6 +132,8 @@
private async Task BtnSaveNewGuest()
{
Debug.Assert(currentPageMode == ePageMode.createNew && _form != null);
bool isFormValid = await _form.ValidateForm();
if (!isFormValid)
{
@@ -144,13 +149,13 @@
Result createResult = await guestDocService.CreateDocumentAsync(model);
if (!createResult.IsSuccess)
{
string errorMsg = $"Error creating Document '{model.DocumentNum}'";
string errorMsg = $"Error creating Document '{model.FullDocument}'";
userMessage.ShowResultWithMessage(createResult, errorMsg);
loadingDialog.Close();
return;
}
userMessage.ShowMessage($"Document '{model.DocumentNum}' Created!", MessageKind.Success);
userMessage.ShowMessage($"Document '{model.FullDocument}' Created!", MessageKind.Success);
Navigation.NavigateTo(GuestConsts.Page_GuestDocs_List);
}
@@ -60,7 +60,7 @@
return;
}
userMessage.ShowMessage($"StayEntry Created!", MessageKind.Success);
userMessage.ShowMessage("StayEntry Created: (Id: {0})", MessageKind.Success, createResult.Context ?? ["???"]);
Navigation.NavigateTo(GuestConsts.Page_StayEntry_List);
}
@@ -16,6 +16,8 @@ public sealed record Result(
) : IResult
{
public static Result Ok() => new(IsSuccess: true, ResultCode: ResultCode.Ok, Context: null);
public static Result OkWithContext(params object[] context)
=> new(IsSuccess: true, ResultCode: ResultCode.Ok, Context: context);
public static Result Fail(ResultCode resultCode) => new(IsSuccess: false, resultCode, Context: null);
public static Result FailWithContext(ResultCode resultCode, params object[] context)
+5 -5
View File
@@ -30,8 +30,8 @@ internal static class EntityMapping
AddressState = entity.AddressDetails?.AddressState ?? "",
AddressCountry = entity.AddressDetails?.AddressCountry! ?? "",
ZipCode = entity.AddressDetails?.ZipCode ?? "",
CreateTime = entity.CreateTime,
UpdateTime = entity.UpdateTime,
CreateTime = entity.CreateTime.ToLocalTime(),
UpdateTime = entity.UpdateTime.ToLocalTime(),
};
}
@@ -45,8 +45,8 @@ internal static class EntityMapping
RoomCount = entity.RoomCount,
RoomNumber = entity.RoomNumber,
PaymentMethod = entity.PaymentMethod,
CreateTime = entity.CreateTime,
UpdateTime = entity.UpdateTime,
CreateTime = entity.CreateTime.ToLocalTime(),
UpdateTime = entity.UpdateTime.ToLocalTime(),
GuestDocuments = includeGuests ? [.. entity.GuestDocuments.Select(e => MapGuestDocumentEntityToDTO(e))] : null,
};
}
@@ -68,7 +68,7 @@ internal static class EntityMapping
ExportResult = entity.ExportResult,
ExportedPath = entity.ExportedPath,
ExportDetails = entity.ExportDetails,
ExportTime = entity.ExportTime,
ExportTime = entity.ExportTime.ToLocalTime(),
};
}
+2
View File
@@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Localization;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using MudBlazor.Services;
using MudBlazor.Translations;
using Serilog;
using Serilog.Extensions.Logging;
using Somnia.GuestLog;
@@ -84,6 +85,7 @@ builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddLocalization();
builder.Services.AddMudTranslations();
builder.Services.AddHttpClient();
// Add Validation Services
@@ -0,0 +1,397 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing"
mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework
object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"
msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0"
msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"
msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"
msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="dataList.CountryCode.ABW" xml:space="preserve"><value>Aruba</value></data>
<data name="dataList.CountryCode.AFG" xml:space="preserve"><value>Afganistán</value></data>
<data name="dataList.CountryCode.AGO" xml:space="preserve"><value>Angola</value></data>
<data name="dataList.CountryCode.AIA" xml:space="preserve"><value>Anguila</value></data>
<data name="dataList.CountryCode.ALA" xml:space="preserve"><value>Åland, (las) Islas</value></data>
<data name="dataList.CountryCode.ALB" xml:space="preserve"><value>Albania</value></data>
<data name="dataList.CountryCode.AND" xml:space="preserve"><value>Andorra</value></data>
<data name="dataList.CountryCode.ARE" xml:space="preserve"><value>Emiratos Árabes Unidos (los)</value></data>
<data name="dataList.CountryCode.ARG" xml:space="preserve"><value>Argentina</value></data>
<data name="dataList.CountryCode.ARM" xml:space="preserve"><value>Armenia</value></data>
<data name="dataList.CountryCode.ASM" xml:space="preserve"><value>Samoa Americana</value></data>
<data name="dataList.CountryCode.ATA" xml:space="preserve"><value>Antártida</value></data>
<data name="dataList.CountryCode.ATF" xml:space="preserve"><value>Tierras Australes Francesas (las)</value></data>
<data name="dataList.CountryCode.ATG" xml:space="preserve"><value>Antigua y Barbuda</value></data>
<data name="dataList.CountryCode.AUS" xml:space="preserve"><value>Australia</value></data>
<data name="dataList.CountryCode.AUT" xml:space="preserve"><value>Austria</value></data>
<data name="dataList.CountryCode.AZE" xml:space="preserve"><value>Azerbaiyán</value></data>
<data name="dataList.CountryCode.BDI" xml:space="preserve"><value>Burundi</value></data>
<data name="dataList.CountryCode.BEL" xml:space="preserve"><value>Bélgica</value></data>
<data name="dataList.CountryCode.BEN" xml:space="preserve"><value>Benín</value></data>
<data name="dataList.CountryCode.BES" xml:space="preserve"><value>Bonaire, San Eustaquio y Saba</value></data>
<data name="dataList.CountryCode.BFA" xml:space="preserve"><value>Burkina Faso</value></data>
<data name="dataList.CountryCode.BGD" xml:space="preserve"><value>Bangladés</value></data>
<data name="dataList.CountryCode.BGR" xml:space="preserve"><value>Bulgaria</value></data>
<data name="dataList.CountryCode.BHR" xml:space="preserve"><value>Baréin</value></data>
<data name="dataList.CountryCode.BHS" xml:space="preserve"><value>Bahamas (las)</value></data>
<data name="dataList.CountryCode.BIH" xml:space="preserve"><value>Bosnia y Herzegovina</value></data>
<data name="dataList.CountryCode.BLM" xml:space="preserve"><value>San Barthélemy</value></data>
<data name="dataList.CountryCode.BLR" xml:space="preserve"><value>Belarús</value></data>
<data name="dataList.CountryCode.BLZ" xml:space="preserve"><value>Belice</value></data>
<data name="dataList.CountryCode.BMU" xml:space="preserve"><value>Bermuda</value></data>
<data name="dataList.CountryCode.BOL" xml:space="preserve"><value>Bolivia (Estado Plurinacional de)</value></data>
<data name="dataList.CountryCode.BRA" xml:space="preserve"><value>Brasil</value></data>
<data name="dataList.CountryCode.BRB" xml:space="preserve"><value>Barbados</value></data>
<data name="dataList.CountryCode.BRN" xml:space="preserve"><value>Brunei Darussalam</value></data>
<data name="dataList.CountryCode.BTN" xml:space="preserve"><value>Bhután</value></data>
<data name="dataList.CountryCode.BVT" xml:space="preserve"><value>Bouvet, Isla</value></data>
<data name="dataList.CountryCode.BWA" xml:space="preserve"><value>Botsuana</value></data>
<data name="dataList.CountryCode.CAF" xml:space="preserve"><value>República Centroafricana (la)</value></data>
<data name="dataList.CountryCode.CAN" xml:space="preserve"><value>Canadá</value></data>
<data name="dataList.CountryCode.CCK" xml:space="preserve"><value>Cocos / Keeling, (las) Islas</value></data>
<data name="dataList.CountryCode.CHE" xml:space="preserve"><value>Suiza</value></data>
<data name="dataList.CountryCode.CHL" xml:space="preserve"><value>Chile</value></data>
<data name="dataList.CountryCode.CHN" xml:space="preserve"><value>China</value></data>
<data name="dataList.CountryCode.CIV" xml:space="preserve"><value>Côte d'Ivoire</value></data>
<data name="dataList.CountryCode.CMR" xml:space="preserve"><value>Camerún</value></data>
<data name="dataList.CountryCode.COD" xml:space="preserve"><value>Congo (la República Democrática del)</value></data>
<data name="dataList.CountryCode.COG" xml:space="preserve"><value>Congo (el)</value></data>
<data name="dataList.CountryCode.COK" xml:space="preserve"><value>Cook, (las) Islas</value></data>
<data name="dataList.CountryCode.COL" xml:space="preserve"><value>Colombia</value></data>
<data name="dataList.CountryCode.COM" xml:space="preserve"><value>Comoras (las)</value></data>
<data name="dataList.CountryCode.CPV" xml:space="preserve"><value>Cabo Verde</value></data>
<data name="dataList.CountryCode.CRI" xml:space="preserve"><value>Costa Rica</value></data>
<data name="dataList.CountryCode.CUB" xml:space="preserve"><value>Cuba</value></data>
<data name="dataList.CountryCode.CUW" xml:space="preserve"><value>Curazao</value></data>
<data name="dataList.CountryCode.CXR" xml:space="preserve"><value>Christmas, Isla</value></data>
<data name="dataList.CountryCode.CYM" xml:space="preserve"><value>Caimán, (las) Islas</value></data>
<data name="dataList.CountryCode.CYP" xml:space="preserve"><value>Chipre</value></data>
<data name="dataList.CountryCode.CZE" xml:space="preserve"><value>Chequia</value></data>
<data name="dataList.CountryCode.DEU" xml:space="preserve"><value>Alemania</value></data>
<data name="dataList.CountryCode.DJI" xml:space="preserve"><value>Yibuti</value></data>
<data name="dataList.CountryCode.DMA" xml:space="preserve"><value>Dominica</value></data>
<data name="dataList.CountryCode.DNK" xml:space="preserve"><value>Dinamarca</value></data>
<data name="dataList.CountryCode.DOM" xml:space="preserve"><value>Dominicana, (la) República</value></data>
<data name="dataList.CountryCode.DZA" xml:space="preserve"><value>Argelia</value></data>
<data name="dataList.CountryCode.ECU" xml:space="preserve"><value>Ecuador</value></data>
<data name="dataList.CountryCode.EGY" xml:space="preserve"><value>Egipto</value></data>
<data name="dataList.CountryCode.ERI" xml:space="preserve"><value>Eritrea</value></data>
<data name="dataList.CountryCode.ESH" xml:space="preserve"><value>Sáhara Occidental</value></data>
<data name="dataList.CountryCode.ESP" xml:space="preserve"><value>España</value></data>
<data name="dataList.CountryCode.EST" xml:space="preserve"><value>Estonia</value></data>
<data name="dataList.CountryCode.ETH" xml:space="preserve"><value>Etiopía</value></data>
<data name="dataList.CountryCode.FIN" xml:space="preserve"><value>Finlandia</value></data>
<data name="dataList.CountryCode.FJI" xml:space="preserve"><value>Fiyi</value></data>
<data name="dataList.CountryCode.FLK" xml:space="preserve"><value>Malvinas [Falkland], (las) Islas</value></data>
<data name="dataList.CountryCode.FRA" xml:space="preserve"><value>Francia</value></data>
<data name="dataList.CountryCode.FRO" xml:space="preserve"><value>Feroe, (las) Islas</value></data>
<data name="dataList.CountryCode.FSM" xml:space="preserve"><value>Micronesia (Estados Federados de)</value></data>
<data name="dataList.CountryCode.GAB" xml:space="preserve"><value>Gabón</value></data>
<data name="dataList.CountryCode.GBR" xml:space="preserve"><value>Reino Unido de Gran Bretaña e Irlanda del Norte</value></data>
<data name="dataList.CountryCode.GEO" xml:space="preserve"><value>Georgia</value></data>
<data name="dataList.CountryCode.GGY" xml:space="preserve"><value>Guernsey</value></data>
<data name="dataList.CountryCode.GHA" xml:space="preserve"><value>Ghana</value></data>
<data name="dataList.CountryCode.GIB" xml:space="preserve"><value>Gibraltar</value></data>
<data name="dataList.CountryCode.GIN" xml:space="preserve"><value>Guinea</value></data>
<data name="dataList.CountryCode.GLP" xml:space="preserve"><value>Guadalupe</value></data>
<data name="dataList.CountryCode.GMB" xml:space="preserve"><value>Gambia (la)</value></data>
<data name="dataList.CountryCode.GNB" xml:space="preserve"><value>Guinea-Bissau</value></data>
<data name="dataList.CountryCode.GNQ" xml:space="preserve"><value>Guinea Ecuatorial</value></data>
<data name="dataList.CountryCode.GRC" xml:space="preserve"><value>Grecia</value></data>
<data name="dataList.CountryCode.GRD" xml:space="preserve"><value>Granada</value></data>
<data name="dataList.CountryCode.GRL" xml:space="preserve"><value>Groenlandia</value></data>
<data name="dataList.CountryCode.GTM" xml:space="preserve"><value>Guatemala</value></data>
<data name="dataList.CountryCode.GUF" xml:space="preserve"><value>Guayana Francesa</value></data>
<data name="dataList.CountryCode.GUM" xml:space="preserve"><value>Guam</value></data>
<data name="dataList.CountryCode.GUY" xml:space="preserve"><value>Guyana</value></data>
<data name="dataList.CountryCode.HKG" xml:space="preserve"><value>Hong Kong</value></data>
<data name="dataList.CountryCode.HMD" xml:space="preserve"><value>Heard (Isla) e Islas McDonald</value></data>
<data name="dataList.CountryCode.HND" xml:space="preserve"><value>Honduras</value></data>
<data name="dataList.CountryCode.HRV" xml:space="preserve"><value>Croacia</value></data>
<data name="dataList.CountryCode.HTI" xml:space="preserve"><value>Haití</value></data>
<data name="dataList.CountryCode.HUN" xml:space="preserve"><value>Hungría</value></data>
<data name="dataList.CountryCode.IDN" xml:space="preserve"><value>Indonesia</value></data>
<data name="dataList.CountryCode.IMN" xml:space="preserve"><value>Isla de Man</value></data>
<data name="dataList.CountryCode.IND" xml:space="preserve"><value>India</value></data>
<data name="dataList.CountryCode.IOT" xml:space="preserve"><value>Territorio Británico del Océano Índico (el)</value></data>
<data name="dataList.CountryCode.IRL" xml:space="preserve"><value>Irlanda</value></data>
<data name="dataList.CountryCode.IRN" xml:space="preserve"><value>Irán (República Islámica de)</value></data>
<data name="dataList.CountryCode.IRQ" xml:space="preserve"><value>Irak</value></data>
<data name="dataList.CountryCode.ISL" xml:space="preserve"><value>Islandia</value></data>
<data name="dataList.CountryCode.ISR" xml:space="preserve"><value>Israel</value></data>
<data name="dataList.CountryCode.ITA" xml:space="preserve"><value>Italia</value></data>
<data name="dataList.CountryCode.JAM" xml:space="preserve"><value>Jamaica</value></data>
<data name="dataList.CountryCode.JEY" xml:space="preserve"><value>Jersey</value></data>
<data name="dataList.CountryCode.JOR" xml:space="preserve"><value>Jordania</value></data>
<data name="dataList.CountryCode.JPN" xml:space="preserve"><value>Japón</value></data>
<data name="dataList.CountryCode.KAZ" xml:space="preserve"><value>Kazajistán</value></data>
<data name="dataList.CountryCode.KEN" xml:space="preserve"><value>Kenia</value></data>
<data name="dataList.CountryCode.KGZ" xml:space="preserve"><value>Kirguistán</value></data>
<data name="dataList.CountryCode.KHM" xml:space="preserve"><value>Camboya</value></data>
<data name="dataList.CountryCode.KIR" xml:space="preserve"><value>Kiribati</value></data>
<data name="dataList.CountryCode.KNA" xml:space="preserve"><value>Saint Kitts y Nevis</value></data>
<data name="dataList.CountryCode.KOR" xml:space="preserve"><value>Corea (la República de)</value></data>
<data name="dataList.CountryCode.KWT" xml:space="preserve"><value>Kuwait</value></data>
<data name="dataList.CountryCode.LAO" xml:space="preserve"><value>Lao, (la) República Democrática Popular</value></data>
<data name="dataList.CountryCode.LBN" xml:space="preserve"><value>Líbano</value></data>
<data name="dataList.CountryCode.LBR" xml:space="preserve"><value>Liberia</value></data>
<data name="dataList.CountryCode.LBY" xml:space="preserve"><value>Libia</value></data>
<data name="dataList.CountryCode.LCA" xml:space="preserve"><value>Santa Lucía</value></data>
<data name="dataList.CountryCode.LIE" xml:space="preserve"><value>Liechtenstein</value></data>
<data name="dataList.CountryCode.LKA" xml:space="preserve"><value>Sri Lanka</value></data>
<data name="dataList.CountryCode.LSO" xml:space="preserve"><value>Lesoto</value></data>
<data name="dataList.CountryCode.LTU" xml:space="preserve"><value>Lituania</value></data>
<data name="dataList.CountryCode.LUX" xml:space="preserve"><value>Luxemburgo</value></data>
<data name="dataList.CountryCode.LVA" xml:space="preserve"><value>Letonia</value></data>
<data name="dataList.CountryCode.MAC" xml:space="preserve"><value>Macao</value></data>
<data name="dataList.CountryCode.MAF" xml:space="preserve"><value>San Martín (parte francesa)</value></data>
<data name="dataList.CountryCode.MAR" xml:space="preserve"><value>Marruecos</value></data>
<data name="dataList.CountryCode.MCO" xml:space="preserve"><value>Mónaco</value></data>
<data name="dataList.CountryCode.MDA" xml:space="preserve"><value>Moldova (la República de)</value></data>
<data name="dataList.CountryCode.MDG" xml:space="preserve"><value>Madagascar</value></data>
<data name="dataList.CountryCode.MDV" xml:space="preserve"><value>Maldivas</value></data>
<data name="dataList.CountryCode.MEX" xml:space="preserve"><value>México</value></data>
<data name="dataList.CountryCode.MHL" xml:space="preserve"><value>Marshall, (las) Islas</value></data>
<data name="dataList.CountryCode.MKD" xml:space="preserve"><value>Macedonia del Norte</value></data>
<data name="dataList.CountryCode.MLI" xml:space="preserve"><value>Malí</value></data>
<data name="dataList.CountryCode.MLT" xml:space="preserve"><value>Malta</value></data>
<data name="dataList.CountryCode.MMR" xml:space="preserve"><value>Myanmar</value></data>
<data name="dataList.CountryCode.MNE" xml:space="preserve"><value>Montenegro</value></data>
<data name="dataList.CountryCode.MNG" xml:space="preserve"><value>Mongolia</value></data>
<data name="dataList.CountryCode.MNP" xml:space="preserve"><value>Marianas Septentrionales, (las) Islas</value></data>
<data name="dataList.CountryCode.MOZ" xml:space="preserve"><value>Mozambique</value></data>
<data name="dataList.CountryCode.MRT" xml:space="preserve"><value>Mauritania</value></data>
<data name="dataList.CountryCode.MSR" xml:space="preserve"><value>Montserrat</value></data>
<data name="dataList.CountryCode.MTQ" xml:space="preserve"><value>Martinica</value></data>
<data name="dataList.CountryCode.MUS" xml:space="preserve"><value>Mauricio</value></data>
<data name="dataList.CountryCode.MWI" xml:space="preserve"><value>Malaui</value></data>
<data name="dataList.CountryCode.MYS" xml:space="preserve"><value>Malasia</value></data>
<data name="dataList.CountryCode.MYT" xml:space="preserve"><value>Mayotte</value></data>
<data name="dataList.CountryCode.NAM" xml:space="preserve"><value>Namibia</value></data>
<data name="dataList.CountryCode.NCL" xml:space="preserve"><value>Nueva Caledonia</value></data>
<data name="dataList.CountryCode.NER" xml:space="preserve"><value>Níger (el)</value></data>
<data name="dataList.CountryCode.NFK" xml:space="preserve"><value>Norfolk, Isla</value></data>
<data name="dataList.CountryCode.NGA" xml:space="preserve"><value>Nigeria</value></data>
<data name="dataList.CountryCode.NIC" xml:space="preserve"><value>Nicaragua</value></data>
<data name="dataList.CountryCode.NIU" xml:space="preserve"><value>Niue</value></data>
<data name="dataList.CountryCode.NLD" xml:space="preserve"><value>Países Bajos (los)</value></data>
<data name="dataList.CountryCode.NOR" xml:space="preserve"><value>Noruega</value></data>
<data name="dataList.CountryCode.NPL" xml:space="preserve"><value>Nepal</value></data>
<data name="dataList.CountryCode.NRU" xml:space="preserve"><value>Nauru</value></data>
<data name="dataList.CountryCode.NZL" xml:space="preserve"><value>Nueva Zelandia</value></data>
<data name="dataList.CountryCode.OMN" xml:space="preserve"><value>Omán</value></data>
<data name="dataList.CountryCode.PAK" xml:space="preserve"><value>Pakistán</value></data>
<data name="dataList.CountryCode.PAN" xml:space="preserve"><value>Panamá</value></data>
<data name="dataList.CountryCode.PCN" xml:space="preserve"><value>Pitcairn, (las) Islas</value></data>
<data name="dataList.CountryCode.PER" xml:space="preserve"><value>Perú</value></data>
<data name="dataList.CountryCode.PHL" xml:space="preserve"><value>Filipinas (las)</value></data>
<data name="dataList.CountryCode.PLW" xml:space="preserve"><value>Palau</value></data>
<data name="dataList.CountryCode.PNG" xml:space="preserve"><value>Papúa Nueva Guinea</value></data>
<data name="dataList.CountryCode.POL" xml:space="preserve"><value>Polonia</value></data>
<data name="dataList.CountryCode.PRI" xml:space="preserve"><value>Puerto Rico</value></data>
<data name="dataList.CountryCode.PRK" xml:space="preserve"><value>Corea (la República Popular Democrática de)</value></data>
<data name="dataList.CountryCode.PRT" xml:space="preserve"><value>Portugal</value></data>
<data name="dataList.CountryCode.PRY" xml:space="preserve"><value>Paraguay</value></data>
<data name="dataList.CountryCode.PSE" xml:space="preserve"><value>Palestina, Estado de</value></data>
<data name="dataList.CountryCode.PYF" xml:space="preserve"><value>Polinesia Francesa</value></data>
<data name="dataList.CountryCode.QAT" xml:space="preserve"><value>Catar</value></data>
<data name="dataList.CountryCode.REU" xml:space="preserve"><value>Reunión</value></data>
<data name="dataList.CountryCode.ROU" xml:space="preserve"><value>Rumania</value></data>
<data name="dataList.CountryCode.RUS" xml:space="preserve"><value>Rusia, (la) Federación de</value></data>
<data name="dataList.CountryCode.RWA" xml:space="preserve"><value>Ruanda</value></data>
<data name="dataList.CountryCode.SAU" xml:space="preserve"><value>Arabia Saudita</value></data>
<data name="dataList.CountryCode.SDN" xml:space="preserve"><value>Sudán</value></data>
<data name="dataList.CountryCode.SEN" xml:space="preserve"><value>Senegal</value></data>
<data name="dataList.CountryCode.SGP" xml:space="preserve"><value>Singapur</value></data>
<data name="dataList.CountryCode.SGS" xml:space="preserve"><value>Georgia del Sur (la) y las Islas Sandwich del Sur</value></data>
<data name="dataList.CountryCode.SHN" xml:space="preserve"><value>Santa Elena, Ascensión y Tristán de Acuña</value></data>
<data name="dataList.CountryCode.SJM" xml:space="preserve"><value>Svalbard y Jan Mayen</value></data>
<data name="dataList.CountryCode.SLB" xml:space="preserve"><value>Salomón, (las) Islas</value></data>
<data name="dataList.CountryCode.SLE" xml:space="preserve"><value>Sierra Leona</value></data>
<data name="dataList.CountryCode.SLV" xml:space="preserve"><value>El Salvador</value></data>
<data name="dataList.CountryCode.SMR" xml:space="preserve"><value>San Marino</value></data>
<data name="dataList.CountryCode.SOM" xml:space="preserve"><value>Somalia</value></data>
<data name="dataList.CountryCode.SPM" xml:space="preserve"><value>San Pedro y Miquelón</value></data>
<data name="dataList.CountryCode.SRB" xml:space="preserve"><value>Serbia</value></data>
<data name="dataList.CountryCode.SSD" xml:space="preserve"><value>Sudán del Sur</value></data>
<data name="dataList.CountryCode.STP" xml:space="preserve"><value>Santo Tomé y Príncipe</value></data>
<data name="dataList.CountryCode.SUR" xml:space="preserve"><value>Suriname</value></data>
<data name="dataList.CountryCode.SVK" xml:space="preserve"><value>Eslovaquia</value></data>
<data name="dataList.CountryCode.SVN" xml:space="preserve"><value>Eslovenia</value></data>
<data name="dataList.CountryCode.SWE" xml:space="preserve"><value>Suecia</value></data>
<data name="dataList.CountryCode.SWZ" xml:space="preserve"><value>Eswatini</value></data>
<data name="dataList.CountryCode.SXM" xml:space="preserve"><value>San Martín (parte neerlandesa)</value></data>
<data name="dataList.CountryCode.SYC" xml:space="preserve"><value>Seychelles</value></data>
<data name="dataList.CountryCode.SYR" xml:space="preserve"><value>República Árabe Siria</value></data>
<data name="dataList.CountryCode.TCA" xml:space="preserve"><value>Turcas y Caicos, (las) Islas</value></data>
<data name="dataList.CountryCode.TCD" xml:space="preserve"><value>Chad</value></data>
<data name="dataList.CountryCode.TGO" xml:space="preserve"><value>Togo</value></data>
<data name="dataList.CountryCode.THA" xml:space="preserve"><value>Tailandia</value></data>
<data name="dataList.CountryCode.TJK" xml:space="preserve"><value>Tayikistán</value></data>
<data name="dataList.CountryCode.TKL" xml:space="preserve"><value>Tokelau</value></data>
<data name="dataList.CountryCode.TKM" xml:space="preserve"><value>Turkmenistán</value></data>
<data name="dataList.CountryCode.TLS" xml:space="preserve"><value>Timor-Leste</value></data>
<data name="dataList.CountryCode.TON" xml:space="preserve"><value>Tonga</value></data>
<data name="dataList.CountryCode.TTO" xml:space="preserve"><value>Trinidad y Tabago</value></data>
<data name="dataList.CountryCode.TUN" xml:space="preserve"><value>Túnez</value></data>
<data name="dataList.CountryCode.TUR" xml:space="preserve"><value>Turquía</value></data>
<data name="dataList.CountryCode.TUV" xml:space="preserve"><value>Tuvalu</value></data>
<data name="dataList.CountryCode.TWN" xml:space="preserve"><value>Taiwán (Provincia de China)</value></data>
<data name="dataList.CountryCode.TZA" xml:space="preserve"><value>Tanzania, República Unida de</value></data>
<data name="dataList.CountryCode.UGA" xml:space="preserve"><value>Uganda</value></data>
<data name="dataList.CountryCode.UKR" xml:space="preserve"><value>Ucrania</value></data>
<data name="dataList.CountryCode.UMI" xml:space="preserve"><value>Islas menores alejadas de Estados Unidos (las)</value></data>
<data name="dataList.CountryCode.URY" xml:space="preserve"><value>Uruguay</value></data>
<data name="dataList.CountryCode.USA" xml:space="preserve"><value>Estados Unidos de América (los)</value></data>
<data name="dataList.CountryCode.UZB" xml:space="preserve"><value>Uzbekistán</value></data>
<data name="dataList.CountryCode.VAT" xml:space="preserve"><value>Santa Sede (la)</value></data>
<data name="dataList.CountryCode.VCT" xml:space="preserve"><value>San Vincente y las Granadinas</value></data>
<data name="dataList.CountryCode.VEN" xml:space="preserve"><value>Venezuela (República Bolivariana de)</value></data>
<data name="dataList.CountryCode.VGB" xml:space="preserve"><value>Vírgenes Británicas, (las) Islas</value></data>
<data name="dataList.CountryCode.VIR" xml:space="preserve"><value>Vírgenes de los Estados Unidos, (las) Islas</value></data>
<data name="dataList.CountryCode.VNM" xml:space="preserve"><value>Viet Nam</value></data>
<data name="dataList.CountryCode.VUT" xml:space="preserve"><value>Vanuatu</value></data>
<data name="dataList.CountryCode.WLF" xml:space="preserve"><value>Wallis y Futuna</value></data>
<data name="dataList.CountryCode.WSM" xml:space="preserve"><value>Samoa</value></data>
<data name="dataList.CountryCode.YEM" xml:space="preserve"><value>Yemen</value></data>
<data name="dataList.CountryCode.ZAF" xml:space="preserve"><value>Sudáfrica</value></data>
<data name="dataList.CountryCode.ZMB" xml:space="preserve"><value>Zambia</value></data>
<data name="dataList.CountryCode.ZWE" xml:space="preserve"><value>Zimbabue</value></data>
<data name="dataList.DocumentType.DNI" xml:space="preserve"><value>DNI</value></data>
<data name="dataList.DocumentType.NIE" xml:space="preserve"><value>NIE</value></data>
<data name="dataList.DocumentType.PASSPORT" xml:space="preserve"><value>Pasaporte</value></data>
<data name="dataList.DocumentType.ID" xml:space="preserve"><value>ID Card</value></data>
<data name="dataList.DocumentType.OTHER" xml:space="preserve"><value>Otro</value></data>
<data name="dataList.GenderOption.M" xml:space="preserve"><value>Hombre</value></data>
<data name="dataList.GenderOption.F" xml:space="preserve"><value>Mujer</value></data>
<data name="dataList.GenderOption.O" xml:space="preserve"><value>Otro</value></data>
<data name="dataList.PaymentMethod.EFECT" xml:space="preserve"><value>Efectivo</value></data>
<data name="dataList.PaymentMethod.TARJT" xml:space="preserve"><value>Tarjeta</value></data>
<data name="dataList.PaymentMethod.TRANS" xml:space="preserve"><value>Transferencia</value></data>
<data name="dataList.PaymentMethod.MOVIL" xml:space="preserve"><value>Pago por Móvil</value></data>
<data name="dataList.PaymentMethod.OTRO" xml:space="preserve"><value>Otro</value></data>
</root>
@@ -123,25 +123,147 @@
Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="dto.GuestDocument.Id" xml:space="preserve"><value>ID</value></data>
<data name="dto.GuestDocument.Version" xml:space="preserve"><value>Versión</value></data>
<data name="dto.GuestDocument.DocumentType" xml:space="preserve"><value>Tipo Documento</value></data>
<data name="dto.GuestDocument.DocumentNum" xml:space="preserve"><value>Número Documento</value></data>
<data name="dto.GuestDocument.IssueDate" xml:space="preserve"><value>Fecha emisión</value></data>
<data name="dto.GuestDocument.IssueDate" xml:space="preserve"><value>Fecha Emisión</value></data>
<data name="dto.GuestDocument.SupportNum" xml:space="preserve"><value>Número Soporte</value></data>
<data name="dto.GuestDocument.Nationality" xml:space="preserve"><value>Nacionalidad</value></data>
<data name="dto.GuestDocument.Name" xml:space="preserve"><value>Nombre</value></data>
<data name="dto.GuestDocument.Surname" xml:space="preserve"><value>Apellido 1</value></data>
<data name="dto.GuestDocument.Surname" xml:space="preserve"><value>Apellido</value></data>
<data name="dto.GuestDocument.Surname2" xml:space="preserve"><value>Apellido 2</value></data>
<data name="dto.GuestDocument.BirthDate" xml:space="preserve"><value>Fecha Nacimiento</value></data>
<data name="dto.GuestDocument.Gender" xml:space="preserve"><value>Sexo</value></data>
<data name="dto.GuestDocument.PhoneNumber" xml:space="preserve"><value>Número Teléfono</value></data>
<data name="dto.GuestDocument.EmailAddress" xml:space="preserve"><value>Dirección Email</value></data>
<data name="dto.GuestDocument.Address" xml:space="preserve"><value>Dirección</value></data>
<data name="dto.GuestDocument.AddressCity" xml:space="preserve"><value>Ciudad</value></data>
<data name="dto.GuestDocument.AddressProvince" xml:space="preserve"><value>Provincia</value></data>
<data name="dto.GuestDocument.AddressState" xml:space="preserve"><value>Región</value></data>
<data name="dto.GuestDocument.AddressCountry" xml:space="preserve"><value>País</value></data>
<data name="dto.GuestDocument.ZipCode" xml:space="preserve"><value>Código Postal</value></data>
<data name="dto.GuestDocument.EmailAddress" xml:space="preserve"><value>Correo Electrónico</value></data>
<data name="dto.GuestDocument.CreateTime" xml:space="preserve"><value>Fecha Creación</value></data>
<data name="dto.GuestDocument.UpdateTime" xml:space="preserve"><value>Fecha Modificación</value></data>
<data name="dto.StayEntry.Id" xml:space="preserve"><value>Id</value></data>
<data name="dto.StayEntry.DateIn" xml:space="preserve"><value>Fecha Entrada</value></data>
<data name="dto.StayEntry.DateOut" xml:space="preserve"><value>Fecha Salida</value></data>
<data name="dto.StayEntry.RoomCount" xml:space="preserve"><value>Cantidad Habitaciones</value></data>
<data name="dto.StayEntry.RoomNumber" xml:space="preserve"><value>Número Habitaciones</value></data>
<data name="dto.StayEntry.PaymentMethod" xml:space="preserve"><value>Forma de Pago</value></data>
<data name="dto.StayEntry.GuestDocuments" xml:space="preserve"><value>Huéspedes</value></data>
<data name="dto.StayEntry.CreateTime" xml:space="preserve"><value>Fecha Creación</value></data>
<data name="dto.StayEntry.UpdateTime" xml:space="preserve"><value>Fecha Modificación</value></data>
<data name="dto.StayExportFile.Id" xml:space="preserve"><value>Id</value></data>
<data name="dto.StayExportFile.ExportFormat" xml:space="preserve"><value>Formato Exportación</value></data>
<data name="dto.StayExportFile.ExportParams" xml:space="preserve"><value>Parámetros Exportación</value></data>
<data name="dto.StayExportFile.ExportResult" xml:space="preserve"><value>Resultado Exportación</value></data>
<data name="dto.StayExportFile.ExportedPath" xml:space="preserve"><value>Ruta Exportación</value></data>
<data name="dto.StayExportFile.ExportDetails" xml:space="preserve"><value>Detalles Exportación</value></data>
<data name="dto.StayExportFile.ExportTime" xml:space="preserve"><value>Fecha Exportación</value></data>
<data name="dto.StayExportParams.ExportType" xml:space="preserve"><value>Tipo Exportación</value></data>
<data name="dto.StayExportParams.ExportPeriodStart" xml:space="preserve"><value>Fecha Desde</value></data>
<data name="dto.StayExportParams.ExportPeriodEnd" xml:space="preserve"><value>Fecha Hasta</value></data>
<data name="tmp" xml:space="preserve"><value>TMP</value></data>
<data name="general.actions" xml:space="preserve"><value>Acciones</value></data>
<data name="general.reloadData" xml:space="preserve"><value>Recargar Datos</value></data>
<data name="general.inProgressMsg" xml:space="preserve"><value>En Progreso...</value></data>
<data name="general.ConfigureColumns" xml:space="preserve"><value>Configurar Columnas</value></data>
<data name="general.confirmDeleteMsg" xml:space="preserve"><value>¡Eliminar no se puede deshacer!</value></data>
<data name="general.confirmTitle" xml:space="preserve"><value>¿Confirmar?</value></data>
<data name="general.btnDelete" xml:space="preserve"><value>Eliminar</value></data>
<data name="general.btnCreate" xml:space="preserve"><value>Crear</value></data>
<data name="general.btnEdit" xml:space="preserve"><value>Editar</value></data>
<data name="general.btnReturn" xml:space="preserve"><value>Volver</value></data>
<data name="general.btnClose" xml:space="preserve"><value>Cerrar</value></data>
<data name="general.btnSearch" xml:space="preserve"><value>Buscar</value></data>
<data name="general.btnSave" xml:space="preserve"><value>Guaradar</value></data>
<data name="general.btnCancel" xml:space="preserve"><value>Cancelar</value></data>
<data name="general.noResults" xml:space="preserve"><value>No hay resultados</value></data>
<data name="general.showAllElements" xml:space="preserve"><value>Mostrar todos los elementos</value></data>
<data name="general.wildcardHelperText" xml:space="preserve"><value>Usa '%' como comodín</value></data>
<data name="general.dateStart" xml:space="preserve"><value>Fecha Inicio</value></data>
<data name="general.dateEnd" xml:space="preserve"><value>Fecha Fin</value></data>
<data name="general.loading" xml:space="preserve"><value>Cargando...</value></data>
<data name="general.msgEditSaved" xml:space="preserve"><value>Cambios Guardados...</value></data>
<data name="general.msgEditCanceled" xml:space="preserve"><value>¡Edición cancelada!</value></data>
<data name="general.languageSelector" xml:space="preserve"><value>Idioma</value></data>
<data name="general.address.address" xml:space="preserve"><value>Dirección</value></data>
<data name="general.address.city" xml:space="preserve"><value>Ciudad</value></data>
<data name="general.address.province" xml:space="preserve"><value>Provincia</value></data>
<data name="general.address.state" xml:space="preserve"><value>Región</value></data>
<data name="general.address.country" xml:space="preserve"><value>País</value></data>
<data name="general.address.zipCode" xml:space="preserve"><value>Código Postal</value></data>
<!-- Common codes -->
<data name="enum.ResultCode.Ok" xml:space="preserve"><value>OK</value></data>
<data name="enum.ResultCode.UnknownError" xml:space="preserve"><value>Error desconocido</value></data>
<data name="enum.ResultCode.FailedValidation" xml:space="preserve"><value>Fallo de validación de datos</value></data>
<data name="enum.ResultCode.NotFound" xml:space="preserve"><value>¡No encontrado!</value></data>
<data name="enum.ResultCode.FileStorageError" xml:space="preserve"><value>Error de almacenamiento de ficheros</value></data>
<!-- Specific codes -->
<data name="enum.ResultCode.GuestInStay" xml:space="preserve"><value>Huésped (ID: '{0}') está en una Estancia.</value></data>
<data name="enum.ResultCode.GuestCurrentlyInStay" xml:space="preserve"><value>Huésped (ID: '{0}') ya está en una estancia en el periodo: {1}</value></data>
<data name="enum.StayExportFileResult.OK" xml:space="preserve"><value>OK</value></data>
<data name="enum.StayExportFileResult.NoData" xml:space="preserve"><value>Sin datos</value></data>
<data name="enum.StayExportFileResult.ExportError" xml:space="preserve"><value>Error de Exportación</value></data>
<data name="enum.StayExportFileResult.UploadError" xml:space="preserve"><value>Error de ficheros</value></data>
<data name="enum.StayExportFormat.GuestLogJson" xml:space="preserve"><value>GuestLog JSON</value></data>
<data name="enum.StayExportFormat.SpainParteViajeros" xml:space="preserve"><value>Spain Parte Viajeros</value></data>
<data name="enum.StayExportParamType.PeriodDateIn" xml:space="preserve"><value>'Date Entrada' Estancia</value></data>
<data name="navMenu.GuestDocumentList" xml:space="preserve"><value>Huéspedes</value></data>
<data name="navMenu.StayEntryList" xml:space="preserve"><value>Estancias</value></data>
<data name="navMenu.StayExport" xml:space="preserve"><value>Exportación de Estancias</value></data>
<data name="page.GuestDocList.pageTitle" xml:space="preserve"><value>Documentos Huéspedes</value></data>
<data name="page.GuestDocList.documentList" xml:space="preserve"><value>Lista de Documentos</value></data>
<data name="page.GuestDocList.btnNewGuest" xml:space="preserve"><value>Nuevo Huésped</value></data>
<data name="page.GuestDocNew.msgAlreadyExists" xml:space="preserve"><value>¡Ya existe un huésped con este documento!</value></data>
<data name="page.GuestDocNew.btnGoExistingDoc" xml:space="preserve"><value>Ver huésped existente</value></data>
<data name="page.GuestDocDetail.msgEditEnabled" xml:space="preserve"><value>Se ha entrado en modo edición</value></data>
<data name="page.GuestDocDetail.msgConfirmSaveEdit" xml:space="preserve"><value>Guardar cambios en el documento</value></data>
<data name="page.GuestDocDetail.msgConfirmCancelEdit" xml:space="preserve"><value>Cancelar edición. Se perderán los cambios</value></data>
<data name="page.GuestDocDetail.msgEditError" xml:space="preserve"><value>Error al guardar el documento '{0}'</value></data>
<data name="page.StayEntryList.pageTitle" xml:space="preserve"><value>Lista Estancias</value></data>
<data name="page.StayEntryList.entryList" xml:space="preserve"><value>Lista Estancias</value></data>
<data name="page.StayEntryList.btnNewStay" xml:space="preserve"><value>Nueva Estancia</value></data>
<data name="page.StayEntryNew.pageTitle" xml:space="preserve"><value>Nueva Estancia</value></data>
<data name="page.StayExportList.pageTitle" xml:space="preserve"><value>Exportación de Estancias</value></data>
<data name="page.StayExportList.exportList" xml:space="preserve"><value>Listado de Exportaciones</value></data>
<data name="page.StayExportList.btnNewExport" xml:space="preserve"><value>Nueva Exportación</value></data>
<data name="page.StayExportNew.pageTitle" xml:space="preserve"><value>Nueva Exportación de Estancias</value></data>
<data name="control.GuestDocForm.sectionDocument" xml:space="preserve"><value>Datos Documento</value></data>
<data name="control.GuestDocForm.sectionGuest" xml:space="preserve"><value>Datos Huésped</value></data>
<data name="control.GuestDocForm.sectionContact" xml:space="preserve"><value>Datos de contacto</value></data>
<data name="control.GuestDocForm.sectionAddress" xml:space="preserve"><value>Datos Dirección</value></data>
<data name="control.GuestDocForm.btnSearchAddress" xml:space="preserve"><value>Buscar Dirección</value></data>
<data name="control.StayEntryForm.sectionDetails" xml:space="preserve"><value>Detalles estancia</value></data>
<data name="control.StayEntryForm.sectionGuests" xml:space="preserve"><value>Lista de Huéspedes</value></data>
<data name="control.StayEntryForm.btnAddGuest" xml:space="preserve"><value>Añadir Huésped</value></data>
<data name="control.AddressQueryDialog.dialogTitle" xml:space="preserve"><value>Buscar dirección</value></data>
<data name="control.AddressQueryDialog.searchText" xml:space="preserve"><value>Buscar dirección</value></data>
<data name="control.AddressQueryDialog.btnSearch" xml:space="preserve"><value>Buscar dirección</value></data>
<data name="control.AddressQueryDialog.btnSelectAddress" xml:space="preserve"><value>Usar dirección</value></data>
<data name="control.GuestDocumentSearchDialog.dialogTitle" xml:space="preserve"><value>Buscar Huésped</value></data>
<data name="control.GuestDocumentSearchDialog.btnSelectDocument" xml:space="preserve"><value>Usar Huésped</value></data>
<data name="control.GuestDocumentSearchDialog.txtSuggestedGuests" xml:space="preserve"><value>Huéspedes sugeridos</value></data>
</root>
@@ -182,6 +182,10 @@
<data name="general.wildcardHelperText" xml:space="preserve"><value>Use '%' as wildcard</value></data>
<data name="general.dateStart" xml:space="preserve"><value>Date Start</value></data>
<data name="general.dateEnd" xml:space="preserve"><value>Date End</value></data>
<data name="general.loading" xml:space="preserve"><value>Loading...</value></data>
<data name="general.msgEditSaved" xml:space="preserve"><value>Changes saved...</value></data>
<data name="general.msgEditCanceled" xml:space="preserve"><value>Edit Canceled!</value></data>
<data name="general.languageSelector" xml:space="preserve"><value>Language</value></data>
<data name="general.address.address" xml:space="preserve"><value>Address</value></data>
<data name="general.address.city" xml:space="preserve"><value>City</value></data>
@@ -224,6 +228,11 @@
<data name="page.GuestDocNew.msgAlreadyExists" xml:space="preserve"><value>This Guest Document Already exists!!</value></data>
<data name="page.GuestDocNew.btnGoExistingDoc" xml:space="preserve"><value>Go to existing document</value></data>
<data name="page.GuestDocDetail.msgEditEnabled" xml:space="preserve"><value>Entered Edit mode</value></data>
<data name="page.GuestDocDetail.msgConfirmSaveEdit" xml:space="preserve"><value>Save changes to GuestDocument</value></data>
<data name="page.GuestDocDetail.msgConfirmCancelEdit" xml:space="preserve"><value>Cancel edit. Changes will be lost!</value></data>
<data name="page.GuestDocDetail.msgEditError" xml:space="preserve"><value>Error saving Document '{0}'</value></data>
<data name="page.StayEntryList.pageTitle" xml:space="preserve"><value>Stay Entries</value></data>
<data name="page.StayEntryList.entryList" xml:space="preserve"><value>Entry List</value></data>
<data name="page.StayEntryList.btnNewStay" xml:space="preserve"><value>New Stay</value></data>
@@ -76,9 +76,77 @@ public class GuestDocumentEntityService(
}
}
public Task<Result> UpdateDocumentAsync(GuestDocumentDTO dto)
public async Task<Result> UpdateDocumentAsync(GuestDocumentDTO dto)
{
throw new NotImplementedException();
var valResult = dtoValidator.Validate(dto);
if (!valResult.IsValid)
{
logger.LogWarning("GuestDocumentService - UpdateDocument: Dto validation failed. Fix the errors: {errorList}", valResult.Errors);
return Result.Fail(ResultCode.FailedValidation);
}
try
{
using var dbContext = contextFactory.CreateDbContext();
//Get current entity from DB.
GuestDocument? dbItem = await dbContext.FindAsync<GuestDocument>(dto.Id, dto.Version);
if (dbItem == null)
{
logger.LogWarning("GuestDocumentService - UpdateDocument: Error updating GuestDocument (ID: '{id}'): GuestDocument not found!", dto.FullKey);
return Result.Fail(ResultCode.NotFound);
}
//Dto must be valid, so null warings shouldn't matter.
GuestAddress addressItem = new()
{
Address = dto.Address,
AddressCity = dto.AddressCity,
AddressProvince = dto.AddressProvince,
AddressState = dto.AddressState,
AddressCountry = dto.AddressCountry!,
ZipCode = dto.ZipCode,
};
DateTime updateTime = DateTime.UtcNow;
GuestDocument updatedItem = new()
{
Id = dbItem.Id,
Version = dbItem.Version,
DocumentType = dbItem.DocumentType,
DocumentNum = dbItem.DocumentNum,
IssueDate = dto.IssueDate != null ? DateOnly.FromDateTime(dto.IssueDate!.Value) : null,
SupportNum = dto.SupportNum,
Nationality = dto.Nationality!,
Name = dto.Name!,
Surname = dto.Surname!,
Surname2 = dto.Surname2,
BirthDate = DateOnly.FromDateTime(dto.BirthDate!.Value),
Gender = dto.Gender,
PhoneNumber = dto.PhoneNumber,
EmailAddress = dto.EmailAddress,
AddressDetails = addressItem,
CreateTime = dbItem.CreateTime,
UpdateTime = updateTime,
IsLastVersion = dbItem.IsLastVersion,
};
dbContext.Entry(dbItem).CurrentValues.SetValues(updatedItem);
var result = await dbContext.SaveChangesAsync();
if (result != 1)
{
logger.LogWarning("GuestDocumentService - UpdateDocument: Unexpected updated entity count: {count}", result);
}
logger.LogInformation("GuestDocumentService - UpdateDocument: GuestDocument Updated OK {id}", dbItem.GetFullKey());
return Result.Ok();
}
catch (Exception ex)
{
logger.LogError(ex, "GuestDocumentService - UpdateDocument: Error updating GuestDocument: '{id}'", dto.FullKey);
return Result.FailUnknownError();
}
}
public Task<Result> DeleteDocumentAsync(GuestDocumentDTO dto)
@@ -67,7 +67,7 @@ public class StayEntryEntityService(
await dbContext.SaveChangesAsync();
logger.LogInformation("StayEntryService - CreateEntryAsync: StayEntry Created: '{id}'", dbStay.GetFullKey());
return Result.Ok();
return Result.OkWithContext(dbStay.GetFullKey());
}
catch (Exception ex)
{
@@ -306,7 +306,7 @@ public class StayExportProviderSpainParteViajeros(
.NotEmpty()
.When(p => p.pais != PersonDireccionPais_ESP)
.MaximumLength(100);
d.RuleFor(p => p.codigoMunicipio)
d.RuleFor(p => p.codigoPostal)
.NotEmpty()
.MaximumLength(20);
d.RuleFor(p => p.pais)
@@ -195,7 +195,7 @@ public class StayExportService(
throw new InvalidOperationException($"StayExportFile - ExportType {exportParams.ExportType} require date start/end. Null dates found");
}
//Get Stays in period.
//Get Stays in period -> Local time should be used so it match with entities local-time.
StayEntryFilterDTO filter = new()
{
DateInStart = exportParams.ExportPeriodStart,
@@ -17,6 +17,7 @@
<PackageReference Include="FluentStorage.AWS" />
<PackageReference Include="FluentValidation" />
<PackageReference Include="MudBlazor" />
<PackageReference Include="MudBlazor.Translations" />
<PackageReference Include="Serilog" />
<PackageReference Include="Serilog.Enrichers.Process" />
<PackageReference Include="Serilog.Enrichers.Thread" />
@@ -25,7 +25,7 @@ public class GuestDocumentDTOValidator : ValueValidator<GuestDocumentDTO>
.Cascade(CascadeMode.Stop)
.NotEmpty()
.When(x => x.Nationality != GuestConsts.CountryCode_ESP)
.LessThanOrEqualTo(DateTime.Today);
.LessThanOrEqualTo(x => DateTime.Today);
RuleFor(x => x.SupportNum)
.Cascade(CascadeMode.Stop)
@@ -49,7 +49,7 @@ public class GuestDocumentDTOValidator : ValueValidator<GuestDocumentDTO>
RuleFor(x => x.BirthDate)
.NotEmpty()
.LessThanOrEqualTo(DateTime.Today);
.LessThanOrEqualTo(x => DateTime.Today);
RuleFor(x => x.Nationality)
.Cascade(CascadeMode.Stop)
@@ -66,6 +66,12 @@ public class GuestDocumentDTOValidator : ValueValidator<GuestDocumentDTO>
.Matches(RegexUtils.RegexPhoneNumber()).WithMessage("Invalid format")
.When(x => !string.IsNullOrEmpty(x.PhoneNumber));
// Phone is required if mail is empty.
RuleFor(x => x.PhoneNumber)
.NotNull()
.When(x => string.IsNullOrEmpty(x.EmailAddress))
.WithMessage("At least 1 contact field (phone or email) is required!");
RuleFor(x => x.AddressCountry)
.NotEmpty()
.Must(val => val != null && dataListService.IsValueInList(GuestConsts.DataList_CountryCodes, val));
@@ -10,7 +10,7 @@ public class StayEntryDTOValidator : ValueValidator<StayEntryDTO>
{
RuleFor(e => e.DateIn)
.NotEmpty()
.LessThanOrEqualTo(DateTime.Today.AddDays(1).AddSeconds(-1));
.LessThanOrEqualTo(x => DateTime.Today.AddDays(1).AddSeconds(-1));
RuleFor(e => e.DateOut)
.NotEmpty()
+6
View File
@@ -11,3 +11,9 @@ window.downloadFileFromStream = async (fileName, contentStreamReference) => {
anchorElement.remove();
URL.revokeObjectURL(url);
}
// Function to update Language cookie.
window.setBlazorCultureCookie = async (newCulture) => {
await window.cookieStore.set('.AspNetCore.Culture', newCulture);
console.log("Updated cookie to " + newCulture);
};