[Requirement #10233] - The RIS server will be enhanced to support Scheduling

In order to allow the scheduling plugins to perform validation on the Procedure entity (so as to validate that the Procedure is not scheduled across a midnight boundary), some infrastructure changes were required:

 * modified the IValidationRuleSetSource so that it can be used to support both static as well as custom validation rules; it is now possible to create an extension that provides static validation rules.  Extensions that provide static rules should implement IValidationRuleSetSource.IsStatic to return true.
 * the ValidationBuilder is responsible for incorporating rules defined by any static extensions of IValidationRuleSetSource
 * non-static (i.e. custom) rule set sources are treated the same as before.
[Requirement #10233] - The RIS server will be enhanced to support Scheduling

In order to allow the scheduling plugins to perform validation on the OrderEditorComponent and ProcedureEditorComponent (so as to validate that the Procedure is not scheduled across a midnight boundary), some infrastructure changes were required:

 * Introduced a new extension point to the Desktop: ValidationRuleSourceExtensionPoint.
 * This extension point allows application component rules to be provided from outside of the application component, which effectively allows the Scheduling plugins to perform additional validation on the application components defined in the core.
[Requirement #10312] - User shall be warned about collisions

 * added some new events to IWorkflowEventListener: OrderSubmitting and OrderSubmitted
 * added an OrderEntryEventListener class, which will listen for the OrderSubmitting event and throw up a message box if it detects collisions (not yet implemented)
[Requirement #10312] - User shall be warned about collisions

Refactored order entry service and OrderEditorComponent so that the default modality for a procedure type is known to the client.  This is necessary in order for the client-side scheduling plugins to know which modality to detect collisions for.
[Requirement #10312] - User shall be warned about collisions

Corrected an issue with the implementation of the in-memory "Between" operator.  It was implemented as

start <= x < end

but in order to match the database (MS-SQL Server) implementation, it should be implemented as

start <= x <= end

Note: ultimately didn't end up using the Between operator to implement this TR, but decided to commit the fix in any case.  There is minimal risk here because the in-memory operators are thus far only used in the OWLS code and the above change in implementation will not have any practical impact on the OWLS functionality.
[Requirement #10312] - User shall be warned about collisions

DB Schema change: add ScheduledEndTime_ (datetime) to Procedure_

In order to perform the database queries necessary for collision detection, the Procedure needs to store a scheduled end time, in addition to the start time and duration (because even though the end time is just the start time + duration, this cannot be efficiently queried).
 * added ScheduledEndTime to Procedure
 * added index to dbi file

Also, in order to make collision detection easier at the boundary cases, we need to be scheduling procedures with minute-level resolution - that is, the seconds and milliseconds components of the times need to be discarded before the object is saved in the database.
 * modified Procedure.Schedule(...) so that it truncates the time to minute-level resolution
 * updated corresponding unit tests
[Bug #10515] - Client-side licensing is being way too talkative when it doesn't need to be

* Code Reviewed
Merge
[Requirement #10232] - The system shall support a configuration option to hide all visit-related screens, and visit-based sections on preview pages.

When VisitWorkflow is disabled:

 * The tool to open the Location Admin screen is now hidden.
 * Patient Location filter page in the Worklist Editor is hidden
 * Patient Class filter in the Worklist Editor is hidden

When VisitWorkflow is enabled:
 * fixed exception on preview page. Note that visit information will not be displayed on the preview page even when the VisitWorkflow is enabled.
[Requirement #10212] - Remove transcription supervision workflow
[Requirement #10227] - Remove resident workflow


 * Submit for Review tool in Reporting FS now hidden appropriately
 * ToBeReviewed and AwaitingReview folders in Transcription FS now hidden appropriately
 * Transcription FS now hidden when transcription workflow is disabled
 * Also fixed the Reject Transcription icon, which was missing and was filling up the log with errors.
[Requirement #10440] - Disable change-set auditing

Introduced a new settings group EntityChangeSetRecorderSettings and a setting that controls whether change-set auditing is enabled or not.  By default it is disabled.
[Requirement #10439] - The system shall generate audit logs recording all viewing and modification of patient data

Did some preliminary work to get the Service Operation Recorder mechanism ready to go so that it can be used to implement this TR.
 * Implementations are no longer limited to generating XML.  The audit message can be generated in any text-based format.
 * The ServiceOperationInvocationInfo passed to the recorder is now more cleanly designed, in that it has Request and Response properties, as opposed to Arguments and ReturnValue terminology which doesn't really fit the context.
[Requirement #10486] - Ensure the source code repository is managed correctly
 * Merged Cheetah SP1 release into Yen.
[Requirement #10433] - The Report Editor will allow the radiologist to modify the priority of the Order

 * Added a dropdown on the ReportingComponent that allows the user to select a new priority that will be applied when the report is saved.
 * Added a method IReportEditorContext.ChangePriority(...) that allows a report editor to modify the priority e.g. in response to a mic button press.

 * Also fixed a bug in the Order class that was introduced in recent changes where a property that should have been virtual was not. The effect of the bug was that the priority of an order would always show up as Routine on the client side.
Merge