From 29f26530e26b7ed1ac2b9058b36e5b179b253f98 Mon Sep 17 00:00:00 2001 From: Shawn Jackson Date: Thu, 1 Oct 2026 22:38:40 -0700 Subject: [PATCH] RG-T137 Fixing Profile Saving Issue --- .../Resgrid.Providers.Number.csproj | 3 + .../PhoneNumberLibraryBindingTests.cs | 27 + .../Resgrid.Web.Services.xml | 1128 ++++++++--------- 3 files changed, 594 insertions(+), 564 deletions(-) create mode 100644 Tests/Resgrid.Tests/Providers/PhoneNumberLibraryBindingTests.cs diff --git a/Providers/Resgrid.Providers.Number/Resgrid.Providers.Number.csproj b/Providers/Resgrid.Providers.Number/Resgrid.Providers.Number.csproj index 84cd870a5..0ca175979 100644 --- a/Providers/Resgrid.Providers.Number/Resgrid.Providers.Number.csproj +++ b/Providers/Resgrid.Providers.Number/Resgrid.Providers.Number.csproj @@ -13,6 +13,9 @@ + + diff --git a/Tests/Resgrid.Tests/Providers/PhoneNumberLibraryBindingTests.cs b/Tests/Resgrid.Tests/Providers/PhoneNumberLibraryBindingTests.cs new file mode 100644 index 000000000..1cde2e533 --- /dev/null +++ b/Tests/Resgrid.Tests/Providers/PhoneNumberLibraryBindingTests.cs @@ -0,0 +1,27 @@ +using System.Linq; +using FluentAssertions; +using NUnit.Framework; + +namespace Resgrid.Tests.Providers +{ + /// + /// GlobalPhone is compiled against a specific PhoneNumbers assembly version. When the restore graph resolves an older + /// one, the web and worker hosts cannot load it: every parse throws, PhoneNumberProcesserProvider swallows the + /// exception, and every phone number (a valid +1 number included) is reported invalid — which blocks every profile + /// save that carries a phone number. NUnit loads test assemblies with a lenient resolver, so the parsing tests pass + /// either way; this compares the versions directly. + /// + [TestFixture] + public class PhoneNumberLibraryBindingTests + { + [Test] + public void Resolved_PhoneNumbers_assembly_satisfies_GlobalPhone_reference() + { + var required = typeof(GlobalPhone.GlobalPhone).Assembly.GetReferencedAssemblies() + .Single(a => a.Name == "PhoneNumbers").Version; + var resolved = typeof(PhoneNumbers.PhoneNumberUtil).Assembly.GetName().Version; + + resolved.Should().BeGreaterThanOrEqualTo(required); + } + } +} diff --git a/Web/Resgrid.Web.Services/Resgrid.Web.Services.xml b/Web/Resgrid.Web.Services/Resgrid.Web.Services.xml index ac6b6eb0b..5224dd162 100644 --- a/Web/Resgrid.Web.Services/Resgrid.Web.Services.xml +++ b/Web/Resgrid.Web.Services/Resgrid.Web.Services.xml @@ -6179,52 +6179,6 @@ Is the user a group admin - - - UserId (GUID/UUID) of the User to set. This field will be ignored if the input is used on a - function that is setting status for the current user. - - - - - The state/staffing level of the user to set for the user. - - - - - Note for the staffing level - - - - - The result object for a state/staffing level request. - - - - - The UserId GUID/UUID for the user state/staffing level being return - - - - - The full name of the user for the state/staffing level being returned - - - - - The current staffing level (state) type for the user - - - - - The timestamp of the last state/staffing level. This is converted UTC to the departments, or users, TimeZone. - - - - - Staffing note for the User's staffing - - Input data to add a staffing schedule in the Resgrid system @@ -6330,6 +6284,52 @@ Note for this staffing schedule + + + UserId (GUID/UUID) of the User to set. This field will be ignored if the input is used on a + function that is setting status for the current user. + + + + + The state/staffing level of the user to set for the user. + + + + + Note for the staffing level + + + + + The result object for a state/staffing level request. + + + + + The UserId GUID/UUID for the user state/staffing level being return + + + + + The full name of the user for the state/staffing level being returned + + + + + The current staffing level (state) type for the user + + + + + The timestamp of the last state/staffing level. This is converted UTC to the departments, or users, TimeZone. + + + + + Staffing note for the User's staffing + + A resrouce in the system this could be a user or unit @@ -13192,379 +13192,209 @@ Identifier of the new npte - + - The result of getting all personnel filters for the system + A GPS location for a point in time of a specificed person - + - The Id value of the filter + PersonId of the person that the location is for - + - The type of the filter + The timestamp of the location in UTC - + - The filters name + GPS Latitude of the Person - + - Result containing all the data required to populate the New Call form + GPS Longitude of the Person - + - Response Data + GPS Latitude\Longitude Accuracy of the Person - + - Result that contains all the options available to filter personnel against compatible Resgrid APIs + GPS Altitude of the Person - + - Response Data + GPS Altitude Accuracy of the Person - + - Result containing all the data required to populate the New Call form + GPS Speed of the Person - + - Response Data + GPS Heading of the Person - + - Information about a User + A unit location in the Resgrid system - + - The UserId GUID/UUID for the user + Response Data - + - DepartmentId of the deparment the user belongs to + The information about a specific unit's location - + - Department specificed ID number for this user + Id of the Person - + - The Users First Name + The Timestamp for the location in UTC - + - The Users Last Name + GPS Latitude of the Person - + - The Users Email Address + GPS Longitude of the Person - + - The Users Mobile Telephone Number + GPS Latitude\Longitude Accuracy of the Person - + - GroupId the user is assigned to (0 for no group) + GPS Altitude of the Person - + - Name of the group the user is assigned to + GPS Altitude Accuracy of the Person - + - Enumeration/List of roles the user currently holds + GPS Speed of the Person - + - The current action/status type for the user + GPS Heading of the Person - + - The current action/status string for the user + The result of getting the current staffing for a user - + - The current action/status color hex string for the user + Response Data - + - The timestamp of the last action. This is converted UTC to the departments, or users, TimeZone. + Information about a User staffing - + - The current action/status destination id for the user + The UserId GUID/UUID for the user status being return - + - The current action/status destination name for the user + DepartmentId of the deparment the user belongs to - + - The current staffing level (state) type for the user + The current staffing type for the user - + - The current staffing level (state) string for the user + The timestamp of the last staffing. This is converted UTC version of the timestamp. - + - The current staffing level (state) color hex string for the user + The timestamp of the last staffing. This is converted UTC to the departments, or users, TimeZone. - + - The timestamp of the last state/staffing level. This is converted UTC to the departments, or users, TimeZone. + Note for this staffing - + - Users last known location + Saves (sets) and Personnel Staffing in the system, for a single user - + - Sorting weight for the user + UnitId of the apparatus that the state is being set for - + - User Defined Field values for this personnel record + The UnitStateType of the Unit - + - A GPS location for a point in time of a specificed person + The timestamp of the status event in UTC - + - PersonId of the person that the location is for + The timestamp of the status event in the local time of the device - + - The timestamp of the location in UTC + User provided note for this event - + - GPS Latitude of the Person + The event id used for queuing on mobile applications - + - GPS Longitude of the Person + Depicts a result after saving a person status - + - GPS Latitude\Longitude Accuracy of the Person + Response Data - + - GPS Altitude of the Person - - - - - GPS Altitude Accuracy of the Person - - - - - GPS Speed of the Person - - - - - GPS Heading of the Person - - - - - A unit location in the Resgrid system - - - - - Response Data - - - - - The information about a specific unit's location - - - - - Id of the Person - - - - - The Timestamp for the location in UTC - - - - - GPS Latitude of the Person - - - - - GPS Longitude of the Person - - - - - GPS Latitude\Longitude Accuracy of the Person - - - - - GPS Altitude of the Person - - - - - GPS Altitude Accuracy of the Person - - - - - GPS Speed of the Person - - - - - GPS Heading of the Person - - - - - The result of getting the current staffing for a user - - - - - Response Data - - - - - Information about a User staffing - - - - - The UserId GUID/UUID for the user status being return - - - - - DepartmentId of the deparment the user belongs to - - - - - The current staffing type for the user - - - - - The timestamp of the last staffing. This is converted UTC version of the timestamp. - - - - - The timestamp of the last staffing. This is converted UTC to the departments, or users, TimeZone. - - - - - Note for this staffing - - - - - Saves (sets) and Personnel Staffing in the system, for a single user - - - - - UnitId of the apparatus that the state is being set for - - - - - The UnitStateType of the Unit - - - - - The timestamp of the status event in UTC - - - - - The timestamp of the status event in the local time of the device - - - - - User provided note for this event - - - - - The event id used for queuing on mobile applications - - - - - Depicts a result after saving a person status - - - - - Response Data - - - - - Saves (sets) and Personnel Status in the system, for a single user + Saves (sets) and Personnel Status in the system, for a single user @@ -13865,113 +13695,283 @@ Response Data - + - Result containing all the data required to populate the New Call form + The result of getting all personnel filters for the system - + - Response Data + The Id value of the filter - + - Details of a protocol + The type of the filter - + - Protocol id + The filters name - + - Department id + Result containing all the data required to populate the New Call form - + - Name of the Protocol + Response Data - + - Protocol code + Result that contains all the options available to filter personnel against compatible Resgrid APIs - + - This this protocol disabled + Response Data - + - Protocol description + Result containing all the data required to populate the New Call form - + - Text of the protocol + Response Data - + - UTC date and time when the Protocol was created + Information about a User - + - UserId of the user who created the protocol + The UserId GUID/UUID for the user - + - UTC timestamp of when the Protocol was updated + DepartmentId of the deparment the user belongs to - + - Minimum triggering Weight of the Protocol + Department specificed ID number for this user - + - UserId that last updated the Protocol + The Users First Name - + - Triggers used to activate this Protocol + The Users Last Name - + - Attachments for this Protocol + The Users Email Address - + - Questions used to determine if this Protocol needs to be used or not + The Users Mobile Telephone Number - + - State type + GroupId the user is assigned to (0 for no group) - + - Result containing all the data required to populate the New Call form + Name of the group the user is assigned to - + - Response Data + Enumeration/List of roles the user currently holds - - : 2 Responder, 3 Unit, 4 IncidentCommand, 5 Dispatch. + + + The current action/status type for the user + + + + + The current action/status string for the user + + + + + The current action/status color hex string for the user + + + + + The timestamp of the last action. This is converted UTC to the departments, or users, TimeZone. + + + + + The current action/status destination id for the user + + + + + The current action/status destination name for the user + + + + + The current staffing level (state) type for the user + + + + + The current staffing level (state) string for the user + + + + + The current staffing level (state) color hex string for the user + + + + + The timestamp of the last state/staffing level. This is converted UTC to the departments, or users, TimeZone. + + + + + Users last known location + + + + + Sorting weight for the user + + + + + User Defined Field values for this personnel record + + + + + Result containing all the data required to populate the New Call form + + + + + Response Data + + + + + Details of a protocol + + + + + Protocol id + + + + + Department id + + + + + Name of the Protocol + + + + + Protocol code + + + + + This this protocol disabled + + + + + Protocol description + + + + + Text of the protocol + + + + + UTC date and time when the Protocol was created + + + + + UserId of the user who created the protocol + + + + + UTC timestamp of when the Protocol was updated + + + + + Minimum triggering Weight of the Protocol + + + + + UserId that last updated the Protocol + + + + + Triggers used to activate this Protocol + + + + + Attachments for this Protocol + + + + + Questions used to determine if this Protocol needs to be used or not + + + + + State type + + + + + Result containing all the data required to populate the New Call form + + + + + Response Data + + + + : 2 Responder, 3 Unit, 4 IncidentCommand, 5 Dispatch. records.v1 / records.v1b / records.v1c; an unknown value is treated as the oldest. @@ -15947,554 +15947,554 @@ Default constructor - + - Result that contains all the options available to filter units against compatible Resgrid APIs + Depicts a result after saving a unit status - + Response Data - + - A unit in the Resgrid system + Object inputs for setting a users Status/Action. If this object is used in an operation that sets + a status for the current user the UserId value in this object will be ignored. - + - Response Data + UnitId of the apparatus that the state is being set for - + - The information about a specific unit + The UnitStateType of the Unit - + - Id of the Unit + The Call/Station the unit is responding to - + - The Id of the department the unit is under + Destination type for RespondingTo (Station = 1, Call = 2, POI = 3). - + - Name of the Unit + The timestamp of the status event in UTC - + - Department assigned type for the unit + The timestamp of the status event in the local time of the device - + - Department assigned type id for the unit + User provided note for this event - + - Custom Statuses Set Id + GPS Latitude of the Unit - + - Station Id of the station housing the unit (0 means no station) + GPS Longitude of the Unit - + - Name of the station the unit is under + GPS Latitude\Longitude Accuracy of the Unit - + - Vehicle Identification Number for the unit + GPS Altitude of the Unit - + - Plate Number for the Unit + GPS Altitude Accuracy of the Unit - + - Is the unit 4-Wheel drive + GPS Speed of the Unit - + - Does the unit require a special permit to drive + GPS Heading of the Unit - + - Id number of the units current destionation (0 means no destination) + The event id used for queuing on mobile applications - + - The current status/state of the Unit + The accountability roles filed for this event - + - The Timestamp of the status + Role filled by a User on a Unit for an event - + - The units current Latitude + Id of the locally stored event - + - The units current Longitude + Local Event Id - + - Current user provide status note + UserId of the user filling the role - + - User Defined Field values for this unit + RoleId of the role being filled - + - Unit role information for roles on a unit + The name of the Role - + - Unit Role Id + Depicts a unit status in the Resgrid system. - + - User Id of the user in the role (could be null) + Response Data - + - Name of the Role + Depicts a unit's status - + - Name of the user in the role (could be null) + Unit Id - + - Multiple Unit infos Result + Units Name - + - Response Data + The Type of the Unit - + - Default constructor + Units current Status (State) - + - The information about a specific unit + CSS for status (for display) - + - Id of the Unit + CSS Style for status (for display) - + - The Id of the department the unit is under + Timestamp of this Unit State - + - Name of the Unit + Timestamp in Utc of this Unit State - + - Department assigned type for the unit + Destination Id (Station or Call) - + - Department assigned type id for the unit + Destination type (Station, Call, or POI). - + - Custom Statuses Set Id + Name of the Desination (Call or Station) - + - Station Id of the station housing the unit (0 means no station) + Destination address. - + - Name of the station the unit is under + Localized display label for the destination type (e.g. "Station", "Call", "POI"). Not + suitable for programmatic branching; use as the + machine-readable discriminator instead. - + - Vehicle Identification Number for the unit + Note for the State - + - Plate Number for the Unit + Latitude - + - Is the unit 4-Wheel drive + Longitude - + - Does the unit require a special permit to drive + Name of the Group the Unit is in - + - Id number of the units current destination (0 means no destination) + Id of the Group the Unit is in - + - Name of the units current destination (0 means no destination) + Unit statuses (states) - + - The current status/state of the Unit + Response Data - + - The current status/state of the Unit as a name + Default constructor - + - The current status/state of the Unit color, always a CSS hex colour ("#5CB85C"). + Result that contains all the options available to filter units against compatible Resgrid APIs - + - The base type the unit's current custom status maps to (see ), - or null when the status has no base type. Clients need this to answer "is this unit - available/responding/on scene" -- the status id itself is department-specific and the unit's - TypeId is the unit type, not a status. + Response Data - + - The Timestamp of the status, in the department's timezone. + A unit in the Resgrid system - + - The Timestamp of the status in UTC/GMT. Serialised with an explicit "Z" -- without it clients - parsed the value as local time and reported unit statuses hours stale. + Response Data - + - The units current Latitude + The information about a specific unit - + - The units current Longitude + Id of the Unit - + - Current user provide status note + The Id of the department the unit is under - + - Units Roles + Name of the Unit - + - Multiple Units Result + Department assigned type for the unit - + - Response Data + Department assigned type id for the unit - + - Default constructor + Custom Statuses Set Id - + - Depicts a result after saving a unit status + Station Id of the station housing the unit (0 means no station) - + - Response Data + Name of the station the unit is under - + - Object inputs for setting a users Status/Action. If this object is used in an operation that sets - a status for the current user the UserId value in this object will be ignored. + Vehicle Identification Number for the unit - + - UnitId of the apparatus that the state is being set for + Plate Number for the Unit - + - The UnitStateType of the Unit + Is the unit 4-Wheel drive - + - The Call/Station the unit is responding to + Does the unit require a special permit to drive - + - Destination type for RespondingTo (Station = 1, Call = 2, POI = 3). + Id number of the units current destionation (0 means no destination) - + - The timestamp of the status event in UTC + The current status/state of the Unit - + - The timestamp of the status event in the local time of the device + The Timestamp of the status - + - User provided note for this event + The units current Latitude - + - GPS Latitude of the Unit + The units current Longitude - + - GPS Longitude of the Unit + Current user provide status note - + - GPS Latitude\Longitude Accuracy of the Unit + User Defined Field values for this unit - + - GPS Altitude of the Unit + Unit role information for roles on a unit - + - GPS Altitude Accuracy of the Unit + Unit Role Id - + - GPS Speed of the Unit + User Id of the user in the role (could be null) - + - GPS Heading of the Unit + Name of the Role - + - The event id used for queuing on mobile applications + Name of the user in the role (could be null) - + - The accountability roles filed for this event + Multiple Unit infos Result - + - Role filled by a User on a Unit for an event + Response Data - + - Id of the locally stored event + Default constructor - + - Local Event Id + The information about a specific unit - + - UserId of the user filling the role + Id of the Unit - + - RoleId of the role being filled + The Id of the department the unit is under - + - The name of the Role + Name of the Unit - + - Depicts a unit status in the Resgrid system. + Department assigned type for the unit - + - Response Data + Department assigned type id for the unit - + - Depicts a unit's status + Custom Statuses Set Id - + - Unit Id + Station Id of the station housing the unit (0 means no station) - + - Units Name + Name of the station the unit is under - + - The Type of the Unit + Vehicle Identification Number for the unit - + - Units current Status (State) + Plate Number for the Unit - + - CSS for status (for display) + Is the unit 4-Wheel drive - + - CSS Style for status (for display) + Does the unit require a special permit to drive - + - Timestamp of this Unit State + Id number of the units current destination (0 means no destination) - + - Timestamp in Utc of this Unit State + Name of the units current destination (0 means no destination) - + - Destination Id (Station or Call) + The current status/state of the Unit - + - Destination type (Station, Call, or POI). + The current status/state of the Unit as a name - + - Name of the Desination (Call or Station) + The current status/state of the Unit color, always a CSS hex colour ("#5CB85C"). - + - Destination address. + The base type the unit's current custom status maps to (see ), + or null when the status has no base type. Clients need this to answer "is this unit + available/responding/on scene" -- the status id itself is department-specific and the unit's + TypeId is the unit type, not a status. - + - Localized display label for the destination type (e.g. "Station", "Call", "POI"). Not - suitable for programmatic branching; use as the - machine-readable discriminator instead. + The Timestamp of the status, in the department's timezone. - + - Note for the State + The Timestamp of the status in UTC/GMT. Serialised with an explicit "Z" -- without it clients + parsed the value as local time and reported unit statuses hours stale. - + - Latitude + The units current Latitude - + - Longitude + The units current Longitude - + - Name of the Group the Unit is in + Current user provide status note - + - Id of the Group the Unit is in + Units Roles - + - Unit statuses (states) + Multiple Units Result - + Response Data - + Default constructor