SHARE
TWEET

_conntectAppointments.cshtml

Leeondamiky Sep 11th, 2019 118 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @using DoctorLink.Portal.FeatureToggle
  2. @using Microsoft.Extensions.Configuration
  3. @model EditBranchModel
  4. @inject IConfiguration Configuration
  5. @inject IFeatureToggle FeatureToggle
  6.  
  7. @{
  8.     var callbackUrl = @Url.Page("EditBranch", "ConnectedAppointmentsPartial");
  9.     var wikiUrl = Configuration["DoctorLink:ExternalLinks:ConnectedAppointmentSettingsWiki"];
  10. }
  11.  
  12. @section scripts{
  13.     @await Html.PartialAsync("_ValidationScriptsPartial")
  14. }
  15.  
  16. <div class="row gap-bottom">
  17.     <h4>Connected Appointments</h4>
  18.     <hr />
  19.     <div class="col-md-12">
  20.         @if (TempData["connected-appointment-success"] != null)
  21.         {
  22.             <div class="alert alert-success">
  23.                 <span class="help-block">@TempData["connected-appointment-success"]</span>
  24.             </div>
  25.         }
  26.         else if (TempData["connected-appointment-failed"] != null)
  27.         {
  28.             <div class="alert alert-danger">
  29.                 <span class="help-block">@TempData["connected-appointment-failed"]</span>
  30.             </div>
  31.         }
  32.     </div>
  33.     <div>
  34.         <!-- Nav tabs -->
  35.  
  36.         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsSlotRetrievalSupported ||
  37.  Model.ConnectedAppointmentsCapabilitiesModel.IsOrganisationConfigRetrievalSupported
  38.       || Model.ConnectedAppointmentsCapabilitiesModel.IsSlotTypeSupported)
  39.         {
  40.             <ul class="nav nav-tabs body-tabs" role="tablist">
  41.  
  42.                 <li role="presentation" class="body-tab @(Model.SubTab == string.Empty ? "active" : string.Empty)">
  43.                     <a href="#settings" aria-controls="settings" role="tab" data-toggle="tab">Settings</a>
  44.                 </li>
  45.  
  46.                 @if (Model.ConnectedAppointmentsCapabilitiesModel.IsSlotTypeSupported)
  47.                 {
  48.                     <li role="presentation" class="body-tab @(Model.SubTab == "slot-type" ? "active" : string.Empty)">
  49.                         <a href="#slot-type" aria-controls="slot-type" role="tab" data-toggle="tab">Slot Types</a>
  50.                     </li>
  51.                 }
  52.  
  53.                 @if (Model.ConnectedAppointmentsCapabilitiesModel.IsSlotRetrievalSupported)
  54.                 {
  55.                     <li role="presentation" class="body-tab @(Model.SubTab == "slots" ? "active" : string.Empty)">
  56.                         <a href="#slots" aria-controls="slots" role="tab" data-toggle="tab">Slots</a>
  57.                     </li>
  58.                 }
  59.  
  60.                 @if (Model.ConnectedAppointmentsCapabilitiesModel.IsOrganisationConfigRetrievalSupported)
  61.                 {
  62.                     <li role="presentation" class="body-tab @(Model.SubTab == "config" ? "active" : string.Empty)">
  63.                         <a href="#organisation-config" aria-controls="organisation-config" role="tab" data-toggle="tab">Organisation Config</a>
  64.                     </li>
  65.                 }
  66.  
  67.                 <li role="presentation" class="body-tab @(Model.SubTab == "video" ? "active" : string.Empty)">
  68.                     <a href="#video" aria-controls="organisation-video-consultation" role="tab" data-toggle="tab">Video</a>
  69.                 </li>
  70.  
  71.                 @if (FeatureToggle.CheckToggle(FeatureName.AdditionalCapacity))
  72.                 {
  73.                     <li role="presentation" class="body-tab @(Model.SubTab == "additional-capacity" ? "active" : string.Empty)">
  74.                         <a href="#additional-capacity" aria-controls="additional-capacity" role="tab" data-toggle="tab" id="additionalCapacity">Additional Capacity</a>
  75.                     </li>
  76.                 }
  77.  
  78.             </ul>
  79.  
  80.             <br />
  81.         }
  82.         <!-- Tab panes -->
  83.         <div class="tab-content">
  84.             <div role="tabpanel" class="tab-pane fade @(Model.SubTab == String.Empty ? "in active" : string.Empty)" id="settings">
  85.                 <div class="col-md-12">
  86.                     <form method="post" id="appointment_settings_form">
  87.                         <input type="hidden" asp-for="ConnectedAppointmentsCapabilitiesModel.BookingSystem" />
  88.                         <input type="hidden" asp-for="AppointmentSettingsViewModel.BranchId" />
  89.                         <div class="row gap-bottom">
  90.                             <div class="col-md-5">
  91.                                 <label asp-for="AppointmentSettingsViewModel.BookingSystem"></label>
  92.                             </div>
  93.                             <div class="col-md-3">
  94.                                 @Html.DropDownList("AppointmentSettingsViewModel.BookingSystem", Html.GetEnumSelectList<DoctorLink.Models.Organisation.BookingSystem>(),
  95.                                     new { @class = "form-control", onchange = "reloadConnectedAppointmentsSection('" + callbackUrl + "');" })
  96.                             </div>
  97.                         </div>
  98.                         <div class="row gap-bottom">
  99.                             <div class="col-md-5">
  100.                                 <label asp-for="AppointmentSettingsViewModel.ConnectedAppointmentServiceCode">ODS code</label>
  101.                                 <p><small>The ODS code you enter here will be used to create a link to your GPSOC (i.e. TPP/EMIS/Vision)</small></p>
  102.                             </div>
  103.                             <div class="col-md-3">
  104.                                 <input asp-for="AppointmentSettingsViewModel.ConnectedAppointmentServiceCode" class="form-control" />
  105.                             </div>
  106.                         </div>
  107.  
  108.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsConnectedAppointmentEnabledSupported)
  109.                         {
  110.                             <div class="row gap-bottom">
  111.                                 <div class="col-md-5">
  112.                                     <label asp-for="AppointmentSettingsViewModel.ConnectedAppointmentEnabled"></label>
  113.                                     <p><small>Tick box to turn on connected appointments</small></p>
  114.                                 </div>
  115.                                 <div class="col-md-1">
  116.                                     <input asp-for="AppointmentSettingsViewModel.ConnectedAppointmentEnabled" class="form-check-input" />
  117.                                 </div>
  118.                             </div>
  119.                         }
  120.  
  121.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsAppointmentsLimitSupported)
  122.                         {
  123.                             <div class="row gap-bottom">
  124.                                 <div class="col-md-5">
  125.                                     <label asp-for="AppointmentSettingsViewModel.AppointmentsLimit"></label>
  126.                                     <p><small>Set a limit for the number of appointments a patient can hold at any one time. Once a patient reaches this limit, they will only be able to request.</small></p>
  127.                                 </div>
  128.                                 <div class="col-md-3">
  129.                                     <input asp-for="AppointmentSettingsViewModel.AppointmentsLimit" class="form-control" />
  130.                                     <span asp-validation-for="AppointmentSettingsViewModel.AppointmentsLimit"></span>
  131.                                 </div>
  132.                             </div>
  133.                         }
  134.  
  135.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsUseClinicianNameFromGPSOCEnabledSupported)
  136.                         {
  137.                             <div class="row gap-bottom">
  138.                                 <div class="col-md-5">
  139.                                     <label asp-for="AppointmentSettingsViewModel.UseClinicianNameFromGPSOCEnabled"></label>
  140.                                     <p><small>Tick box to use display names from the GP system to the patient. If this is not ticked “Appointment” will be shown instead of a name.</small></p>
  141.                                 </div>
  142.                                 <div class="col-md-1">
  143.                                     <input asp-for="AppointmentSettingsViewModel.UseClinicianNameFromGPSOCEnabled" class="form-check-input" />
  144.                                 </div>
  145.                             </div>
  146.                         }
  147.  
  148.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsShowAppointmentLocationEnabledSupported)
  149.                         {
  150.                             <div class="row gap-bottom">
  151.                                 <div class="col-md-5">
  152.                                     <label asp-for="AppointmentSettingsViewModel.ShowAppointmentLocationEnabled"></label>
  153.                                     <p><small>Tick box to show location of appointment. This must be used for practices with multiple sites. It is an option for others.</small></p>
  154.                                 </div>
  155.                                 <div class="col-md-1">
  156.                                     <input asp-for="AppointmentSettingsViewModel.ShowAppointmentLocationEnabled" class="form-check-input" />
  157.                                 </div>
  158.                             </div>
  159.                         }
  160.  
  161.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsProviderAdviceAsRequestAppointmentOnlySupported)
  162.                         {
  163.                             <div class="row gap-bottom">
  164.                                 <div class="col-md-5">
  165.                                     <label asp-for="AppointmentSettingsViewModel.ProviderAdviceAsRequestAppointmentOnlyEnabled"></label>
  166.                                     <p><small>Tick box to send all provider advice appointments (i.e. those that say “discuss with”) to request appointment only. This will allow practices to triage over the phone before offering an appointment.</small></p>
  167.                                 </div>
  168.                                 <div class="col-md-1">
  169.                                     <input asp-for="AppointmentSettingsViewModel.ProviderAdviceAsRequestAppointmentOnlyEnabled" class="form-check-input" />
  170.                                 </div>
  171.                             </div>
  172.                         }
  173.  
  174.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsProviderAdviceAsTelephoneAppointmentEnabled)
  175.                         {
  176.                             <div class="row gap-bottom">
  177.                                 <div class="col-md-5">
  178.                                     <label asp-for="AppointmentSettingsViewModel.ProviderAdviceAsTelephoneAppointmentEnabled"></label>
  179.                                     <p><small>Tick box to send provider advice appointments (i.e. those that say “discuss with”) to telephone appointment.</small></p>
  180.                                 </div>
  181.                                 <div class="col-md-1">
  182.                                     <input asp-for="AppointmentSettingsViewModel.ProviderAdviceAsTelephoneAppointmentEnabled" class="form-check-input" />
  183.                                 </div>
  184.                             </div>
  185.                         }
  186.  
  187.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsBookKnownPatientsOnlySupported)
  188.                         {
  189.                             <div class="row gap-bottom">
  190.                                 <div class="col-md-5">
  191.                                     <label asp-for="AppointmentSettingsViewModel.BookKnownPatientsOnlyEnabled"></label>
  192.                                     <p><small>Tick box to only allow patients registered at the practice to book. This must be on.</small></p>
  193.                                 </div>
  194.                                 <div class="col-md-1">
  195.                                     <input asp-for="AppointmentSettingsViewModel.BookKnownPatientsOnlyEnabled" class="form-check-input" />
  196.                                 </div>
  197.                             </div>
  198.                         }
  199.  
  200.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsPrecisAsPdfSupported)
  201.                         {
  202.                             <div class="row gap-bottom">
  203.                                 <div class="col-md-5">
  204.                                     <label asp-for="AppointmentSettingsViewModel.PrecisAsPdfEnabled"></label>
  205.                                     <p><small>Tick box for disposition to be entered directly into patient record. Practices will still receive an email copy for information only.</small></p>
  206.                                 </div>
  207.                                 <div class="col-md-1">
  208.                                     <input asp-for="AppointmentSettingsViewModel.PrecisAsPdfEnabled" class="form-check-input" />
  209.                                 </div>
  210.                             </div>
  211.                         }
  212.  
  213.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsAppointmentTypesFallBackToDefaultSupported)
  214.                         {
  215.                             <div class="row gap-bottom">
  216.                                 <div class="col-md-5">
  217.                                     <label asp-for="AppointmentSettingsViewModel.PracticeClinicianFallsBackToGp"></label>
  218.                                     <p><small>Tick this box to offer a patient an appointment with a GP if there are no Practice Clinician appointments available.</small></p>
  219.                                 </div>
  220.                                 <div class="col-md-1">
  221.                                     <input asp-for="AppointmentSettingsViewModel.PracticeClinicianFallsBackToGp" class="form-check-input" />
  222.                                 </div>
  223.                             </div>
  224.                         }
  225.  
  226.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsConnectedAppointmentNoFallbackSupported)
  227.                         {
  228.                             <div class="row gap-bottom">
  229.                                 <div class="col-md-5">
  230.                                     <label asp-for="AppointmentSettingsViewModel.ConnectedAppointmentNoFallback"></label>
  231.                                     <p><small>Remove the request appointment link for connected appointments when appointments available.</small></p>
  232.                                 </div>
  233.                                 <div class="col-md-1">
  234.                                     <input asp-for="AppointmentSettingsViewModel.ConnectedAppointmentNoFallback" class="form-check-input" />
  235.                                 </div>
  236.                             </div>
  237.                         }
  238.  
  239.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsConnectedAppointmentLocationFilterSupported)
  240.                         {
  241.                             <div class="row gap-bottom">
  242.                                 <div class="col-md-5">
  243.                                     <label asp-for="AppointmentSettingsViewModel.LocationFilter"></label>
  244.                                     <p><small>To only display appointments from @Model.AppointmentSettingsViewModel.ConnectedAppointmentServiceCode enter a location name</small></p>
  245.                                 </div>
  246.                                 <div class="col-md-3">
  247.                                     <input asp-for="AppointmentSettingsViewModel.LocationFilter" class="form-control" />
  248.                                 </div>
  249.                             </div>
  250.                         }
  251.  
  252.                         <br />
  253.  
  254.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsConnectionTestingSupported)
  255.                         {
  256.                             <div class="form-group">
  257.                                 <button type="submit" class="btn btn-secondary" asp-page-handler="TestConnectedAppointmentSettings">Test connection</button>
  258.                                 <br />
  259.                                 @if (TempData["connected-appointment-test-result"] != null && (bool)TempData["connected-appointment-test-result"])
  260.                                 {
  261.                                     <div class="has-success">
  262.                                         <span class="help-block">Success! @TempData["connected-appointment-test-details"]</span>
  263.                                     </div>
  264.                                 }
  265.                                 @if (TempData["connected-appointment-test-result"] != null && !(bool)TempData["connected-appointment-test-result"])
  266.                                 {
  267.                                     <div class="has-error">
  268.                                         <span class="help-block">Error! @TempData["connected-appointment-test-details"]</span>
  269.                                     </div>
  270.                                 }
  271.                             </div>
  272.                         }
  273.  
  274.                         @if (Model.ConnectedAppointmentsCapabilitiesModel.IsOptimisedBookingTimeFrameSupported)
  275.                         {
  276.                             <h4>Optimised booking timeframe</h4>
  277.                             <hr />
  278.                             <p>
  279.                                 <small>
  280.                                     Optimised appointment booking reduces the timeframe in which users can book appointments linked to certain dispositions.
  281.                                     This is to ensure patients get appointments closer to their disposition and to protect same day appointments for more acute conditions
  282.                                 </small>
  283.  
  284.                                 <div class="form-group">
  285.                                     <div class="table-wrapper-scroll">
  286.                                         <table class="table table-striped">
  287.                                             <thead>
  288.                                                 <tr><th>Type</th> <th>Description</th><th>Timeframe</th> </tr>
  289.                                             </thead>
  290.                                             <tbody>
  291.                                                 <tr>
  292.                                                     <td>48 hs disposition</td>
  293.                                                     <td>Set the number of hours to not allow appointments for 48hs disposition</td>
  294.                                                     <td>
  295.                                                         @Html.DropDownList("AppointmentSettingsViewModel.TwoDaysTimeFrame", Model.DispositionTimeframe.Take(2))
  296.                                                     </td>
  297.                                                 </tr>
  298.                                                 <tr>
  299.                                                     <td>3 days disposition</td>
  300.                                                     <td>Set the number of hours to not allow appointments for 3 day disposition</td>
  301.                                                     <td>
  302.                                                         @Html.DropDownList("AppointmentSettingsViewModel.ThreeDaysTimeFrame", Model.DispositionTimeframe.Take(3))
  303.                                                     </td>
  304.                                                 </tr>
  305.                                                 <tr>
  306.                                                     <td>1 week disposition</td>
  307.                                                     <td>Set the number of hours to not allow appointments for 1 week disposition</td>
  308.                                                     <td>
  309.                                                         @Html.DropDownList("AppointmentSettingsViewModel.OneWeekTimeFrame", Model.DispositionTimeframe)
  310.                                                     </td>
  311.                                                 </tr>
  312.                                             </tbody>
  313.                                         </table>
  314.                                     </div>
  315.                                 </div>
  316.                             </p>
  317.  
  318.                             <h4>Request appointments only for specific dispositions</h4>
  319.                             <hr />
  320.                             <p>
  321.                                 <div class="form-group">
  322.                                     <div class="table-wrapper-scroll">
  323.                                         <table class="table table-striped">
  324.                                             <thead>
  325.                                                 <tr><th>Conclusion</th><th>Description</th> <th></th> </tr>
  326.                                             </thead>
  327.                                             <tbody>
  328.                                                 <tr>
  329.                                                     <td>ANA</td>
  330.                                                     <td>
  331.                                                         Unable to fully identify or assess the problem, but you believe making a GP surgery appointment is the right thing to do
  332.                                                         <span class="glyphicon glyphicon-question-sign" data-container="body" data-toggle="popover" data-placement="right" data-content="Request appointments only for ANA dispositions means that any assessments which do not produce a symptom assessment outcome are sent for request.  This is to allow for further triage by the practice before offering an appointment"></span>
  333.                                                     </td>
  334.                                                     <td><input asp-for="AppointmentSettingsViewModel.UnavailableAssessmentEnabled" class="form-check-input" /></td>
  335.                                                 </tr>
  336.                                                 <tr>
  337.                                                     <td>UTI</td>
  338.                                                     <td>
  339.                                                         Send UTI outcomes to request appointment
  340.                                                         <span class="glyphicon glyphicon-question-sign" data-container="body" data-toggle="popover" data-placement="right" data-content="The specific outcomes are detailed &lt;a href='@wikiUrl' target='_blank'&gt;here&lt;/a&gt;"></span>
  341.                                                     </td>
  342.                                                     <td><input asp-for="AppointmentSettingsViewModel.BlockConnectedApptForUtiAssessmentEnabled" class="form-check-input" /></td>
  343.                                                 </tr>
  344.                                             </tbody>
  345.                                         </table>
  346.                                     </div>
  347.                                 </div>
  348.                             </p>
  349.                         }
  350.  
  351.                         <div class="col-md-12 content-block gap-bottom" style="text-align: right">
  352.                             <button type="submit" class="btn btn-primary" asp-page-handler="UpdateConnectedAppointmentSettings">Save</button>
  353.                         </div>
  354.                     </form>
  355.                 </div>
  356.             </div>
  357.             @if (Model.ConnectedAppointmentsCapabilitiesModel.IsSlotRetrievalSupported)
  358.             {
  359.                 <div role="tabpanel" class="tab-pane fade @(Model.SubTab == "slots" ? "in active" : string.Empty)" id="slots">
  360.                     <h4>Test slot types mapping configuration</h4>
  361.  
  362.                     <p>
  363.                         <small>
  364.                             Here is a list with your configured mappings, you just need to select a disposition time
  365.                         </small>
  366.                     </p>
  367.                     <hr />
  368.                     @if (TempData["slot-type-failed"] != null)
  369.                     {
  370.                         <div class="alert alert-danger">
  371.                             <span class="help-block">@TempData["slots-failed"]</span>
  372.                         </div>
  373.                     }
  374.                     @if (TempData["slot-type-success"] != null)
  375.                     {
  376.                         <div class="alert alert-success">
  377.                             <span class="help-block">@TempData["slots-success"]</span>
  378.                         </div>
  379.                     }
  380.                     <form method="post">
  381.                         <div class="col-md-12">
  382.                             <div class="col-md-3">
  383.                                 <div class="form-group">
  384.                                     <label>Mapping to test</label>
  385.                                     @Html.DropDownList("appointmentType", new SelectList(Model.AppointmentSettingsViewModel.SlotTypeFilters, "Name", "Name"), new { @class = "form-control" })
  386.                                 </div>
  387.                             </div>
  388.                             <div class="col-md-3">
  389.                                 <div class="form-group">
  390.                                     <label>Disposition time</label>
  391.                                     <select name="dispositionTime" class="form-control">
  392.                                         <option value="1 week">1 week</option>
  393.                                         <option value="2 days">2 days</option>
  394.                                         <option value="3 days">3 days</option>
  395.                                     </select>
  396.                                 </div>
  397.                             </div>
  398.                             <div class="col-md-3">
  399.                                 <div class="form-group">
  400.                                     <br />
  401.                                     <button type="submit" class="btn btn-primary" asp-page-handler="SampleSlots">Get Slots</button>
  402.                                 </div>
  403.                             </div>
  404.                         </div>
  405.                     </form>
  406.                     <br />
  407.                     <div class="col-md-12">
  408.                         @if (TempData["connected-appointments-slots-failed"] != null)
  409.                         {
  410.                             <div class="alert alert-danger">
  411.                                 <span class="help-block">Parsing Slots failed: @TempData["connected-appointments-slots-failed"]</span>
  412.                             </div>
  413.                         }
  414.                     </div>
  415.                     <div class="col-md-12">
  416.                         @if (Model.BranchSampleAppointmentSlotsModel.Slots != null && Model.BranchSampleAppointmentSlotsModel.Slots.Count > 0)
  417.                         {
  418.                             <table class="table table-sm">
  419.                                 <thead>
  420.                                     <tr>
  421.                                         <th scope="col" class="col-sm-2">Id</th>
  422.                                         <th scope="col" class="col-sm-2">Start</th>
  423.                                         <th scope="col" class="col-sm-2">End</th>
  424.                                         <th scope="col" class="col-sm-2">Schedule</th>
  425.                                         <th scope="col" class="col-sm-2">Practitioner</th>
  426.                                         <th scope="col" class="col-sm-2">Free / Busy</th>
  427.                                         <th scope="col" class="col-sm-2">Type Display</th>
  428.                                         <th scope="col" class="col-sm-2">Type Code</th>
  429.                                     </tr>
  430.                                 </thead>
  431.                                 <tbody>
  432.                                     @foreach (var slot in Model.BranchSampleAppointmentSlotsModel.Slots)
  433.                                     {
  434.                                         <tr>
  435.                                             <td scope="col" class="col-sm-2">@slot.Id</td>
  436.                                             <td scope="col" class="col-sm-2">@slot.StartTime.ToDisplayString(includeOffsetText: true)</td>
  437.                                             <td scope="col" class="col-sm-2">@slot.EndTime.ToDisplayString(includeOffsetText: true)</td>
  438.                                             <td scope="col" class="col-sm-2">@slot.Schedule</td>
  439.                                             <td scope="col" class="col-sm-2">@slot.PractitionerName</td>
  440.                                             <td scope="col" class="col-sm-2">@slot.FreeBusy.ToString()</td>
  441.                                             <td scope="col" class="col-sm-2">@slot.TypeCodingDisplay</td>
  442.                                             <td scope="col" class="col-sm-2">@slot.TypeCodingCode</td>
  443.                                         </tr>
  444.                                     }
  445.                                 </tbody>
  446.                             </table>
  447.                         }
  448.                     </div>
  449.                     <div class="col-md-12">
  450.                         @if (TempData["connected-appointments-json-failed"] != null)
  451.                         {
  452.                             <div class="alert alert-danger">
  453.                                 <span class="help-block">Fetching Json failed: @TempData["connected-appointments-json-failed"]</span>
  454.                             </div>
  455.                         }
  456.                     </div>
  457.                     <div class="col-md-12">
  458.                         @if (!string.IsNullOrEmpty(Model.BranchSampleAppointmentSlotsModel.RawResponse))
  459.                         {
  460.                             <textarea class="form-control" rows="20">@Model.BranchSampleAppointmentSlotsModel.RawResponse</textarea>
  461.                         }
  462.                     </div>
  463.                 </div>
  464.             }
  465.  
  466.             @if (Model.ConnectedAppointmentsCapabilitiesModel.IsOrganisationConfigRetrievalSupported)
  467.             {
  468.                 <div role="tabpanel" class="tab-pane fade @(Model.SubTab == "config" ? "in active" : string.Empty)" id="organisation-config">
  469.                     <div class="col-md-12">
  470.                         <form method="post">
  471.                             <button type="submit" class="btn btn-primary" asp-page-handler="OrganisationConfig">Get Organisation Config</button>
  472.                         </form>
  473.                     </div>
  474.                     <br />
  475.                     <div class="col-md-12">
  476.                         @if (TempData["connected-appointments-organisation-config-failed"] != null)
  477.                         {
  478.                             <div class="has-error">
  479.                                 <span class="help-block">Fetching Json failed: @TempData["connected-appointments-organisation-config-failed"]</span>
  480.                             </div>
  481.                         }
  482.                     </div>
  483.                     <div class="col-md-12">
  484.                         @if (!string.IsNullOrEmpty(Model.OrganisationConfigRaw))
  485.                         {
  486.                             <textarea class="form-control" rows="20">@Model.OrganisationConfigRaw</textarea>
  487.                         }
  488.                     </div>
  489.                 </div>
  490.             }
  491.             @if (Model.ConnectedAppointmentsCapabilitiesModel.IsSlotTypeSupported)
  492.             {
  493.                 <div role="tabpanel" class="tab-pane fade @(Model.SubTab == "slot-type" ? "in active" : string.Empty)" id="slot-type">
  494.                     <h4>Slot Types</h4>
  495.                     <hr />
  496.                     @if (TempData["slot-type-failed"] != null)
  497.                     {
  498.                         <div class="alert alert-danger">
  499.                             <span class="help-block">@TempData["slot-type-failed"]</span>
  500.                         </div>
  501.                     }
  502.                     @if (TempData["slot-type-success"] != null)
  503.                     {
  504.                         <div class="alert alert-success">
  505.                             <span class="help-block">@TempData["slot-type-success"]</span>
  506.                         </div>
  507.                     }
  508.                     <p>
  509.                         <small>
  510.                             Search here for the slot types created by the practice and save for use by DoctorLink. You must set a slot type for GP as a minimum.
  511.                         </small>
  512.                     </p>
  513.                     <form method="post">
  514.                         <div class="form-group">
  515.                             <label> Search slot type display</label>
  516.                             <input name="SlotTypeSearch" class="form-control" value="@Model.SlotTypeSearch" />
  517.                             <br />
  518.                             <button type="submit" class="btn btn-primary" asp-page-handler="SearchSlotTypes">Search</button>
  519.                         </div>
  520.                     </form>
  521.                     <div class="form-group">
  522.                         @if (Model.SlotTypesViewModel != null)
  523.                         {
  524.                             <div class="table-wrapper-scroll">
  525.                                 <table class="table table-striped">
  526.                                     <thead>
  527.                                         <tr><th>Display</th> <th>Code</th><th></th> </tr>
  528.                                     </thead>
  529.                                     <tbody>
  530.                                         @foreach (var slotType in Model.SlotTypesViewModel)
  531.                                         {
  532.                                             <tr>
  533.                                                 <td>@slotType.Display</td>
  534.                                                 <td>@slotType.Code</td>
  535.                                                 <td style="line-height: 2.5em;">
  536.                                                     @foreach (var slotFilter in Model.SlotTypesFiltersViewModel)
  537.                                                     {
  538.                                                         @if (Model.AppointmentSettingsViewModel.SlotTypeFilters.Any(x => x.ToString() == slotFilter.FilterString + " : " + slotType.Display + " : " + slotType.Code))
  539.                                                         {
  540.                                                             <input type="button" disabled class="btn btn-info" value="Set as @slotFilter.FilterString" />
  541.                                                         }
  542.                                                         else
  543.                                                         {
  544.                                                             <input type="button" onclick="setMapping('@slotFilter.FilterString', '@slotType.Display', '@slotType.Code')" class="btn btn-info" value="Set as @slotFilter.FilterString" />
  545.                                                         }
  546.                                                     }
  547.                                                 </td>
  548.                                             </tr>
  549.                                         }
  550.                                     </tbody>
  551.                                 </table>
  552.                             </div>
  553.                         }
  554.                     </div>
  555.  
  556.                     @if (TempData["connected-appointments-slot-types-failed"] != null)
  557.                     {
  558.                         <div class="alert alert-danger">
  559.                             <span class="help-block">@TempData["connected-appointments-slot-types-failed"]</span>
  560.                         </div>
  561.                     }
  562.  
  563.                     <div class="row gap-bottom">
  564.                         <div class="col-md-3">Type</div>
  565.                         <div class="col-md-3">Display</div>
  566.                         <div class="col-md-3">Code</div>
  567.                         <div class="col-md-3"></div>
  568.                     </div>
  569.                     <form method="post">
  570.                         <div class="row gap-bottom">
  571.                             <div class="col-md-3">
  572.                                 @Html.DropDownList("mapping", new SelectList(Model.SlotTypesFiltersViewModel, "FilterString", "DisplayName"), new { @class = "form-control" })
  573.                             </div>
  574.                             <div class="col-md-3">
  575.                                 <input type="text" class="form-control" id="display-filter-mapping" name="display" required="required">
  576.                             </div>
  577.                             <div class="col-md-3">
  578.                                 <input type="text" class="form-control" id="code-filter-mapping" name="code" required="required">
  579.                             </div>
  580.  
  581.                             <div class="col-md-3">
  582.                                 <input type="submit" id="mappingBtnAdd" value="Add" class="btn btn-primary" asp-page-handler="AddSlotTypeFilter" />
  583.                             </div>
  584.  
  585.                         </div>
  586.                     </form>
  587.  
  588.                     @foreach (var slotType in Model.AppointmentSettingsViewModel.SlotTypeFilters)
  589.                     {
  590.                         <form method="post">
  591.                             <div class="row gap-bottom">
  592.                                 <div class="col-md-3">
  593.                                     @slotType.Name
  594.                                 </div>
  595.                                 <div class="col-md-3">
  596.                                     @slotType.Display
  597.                                 </div>
  598.                                 <div class="col-md-3">
  599.                                     @slotType.Code
  600.                                 </div>
  601.  
  602.                                 <div class="col-md-3">
  603.                                     <input type="hidden" value="@slotType.Id" name="slotTypeId" />
  604.                                     <input type="submit" value="Remove" class="btn btn-warning" asp-page-handler="RemoveSlotTypeFilter" />
  605.                                 </div>
  606.                             </div>
  607.                         </form>
  608.                     }
  609.  
  610.                 </div>
  611.             }
  612.             <div role="tabpanel" class="tab-pane fade @(Model.SubTab == "video" ? "in active" : string.Empty)" id="video">
  613.                 <div>
  614.                     <ul>
  615.                         <li>Please ensure connected appointments are enabled for the practice</li>
  616.                         <li>Please map a slot type to DL-GP-VIDEO to fully enable video consultations for this practice</li>
  617.                         <li>Please activate the Video feature in the Configurations tab</li>
  618.                         <li>Send an invite to clinicians below. EMIS name not mandatory</li>
  619.                     </ul>
  620.                 </div>
  621.                 <hr />
  622.                 @if (TempData["connected-appointments-video-invite-failed"] != null)
  623.                 {
  624.                     <div class="alert alert-danger">
  625.                         @foreach (string err in (string[])@TempData["connected-appointments-video-invite-failed"])
  626.                         {
  627.                             <span class="help-block">@err</span>
  628.                         }
  629.                     </div>
  630.  
  631.                 }
  632.                 @if (TempData["connected-appointments-video-invite-ok"] != null)
  633.                 {
  634.                     <div class="alert alert-success">
  635.                         <span class="help-block">The invitation was sent</span>
  636.                     </div>
  637.                 }
  638.                 <h4>Invite</h4>
  639.                 <hr />
  640.                 <div class="row gap-bottom">
  641.                     <div class="col-md-2">First name</div>
  642.                     <div class="col-md-2">Last name</div>
  643.                     <div class="col-md-2">NHS email address</div>
  644.                     <div class="col-md-2">EMIS name (if a clinician)</div>
  645.                     <div class="col-md-2"></div>
  646.                 </div>
  647.                 <div>
  648.                     <form method="post">
  649.                         <div class="row gap-bottom">
  650.                             <div class="col-md-2">
  651.                                 <input type="text" class="form-control" id="a1" name="firstname" required="required">
  652.                             </div>
  653.                             <div class="col-md-2">
  654.                                 <input type="text" class="form-control" id="a2" name="lastname" required="required">
  655.                             </div>
  656.                             <div class="col-md-2">
  657.                                 <input type="text" class="form-control" id="a3" name="email" required="required">
  658.                             </div>
  659.                             <div class="col-md-2">
  660.                                 <input type="text" class="form-control" id="a4" name="emisname">
  661.                             </div>
  662.  
  663.                             <div class="col-md-2">
  664.                                 <input type="submit" value="Send" class="btn btn-primary" asp-page-handler="PractitionerInvite" />
  665.                             </div>
  666.                         </div>
  667.                     </form>
  668.                 </div>
  669.  
  670.                 @if (TempData["practitioners-by-branch-failed"] != null)
  671.                 {
  672.                     <div class="alert alert-danger">
  673.                         <span class="help-block">@TempData["practitioners-by-branch-failed"]</span>
  674.                     </div>
  675.                 }
  676.                 else
  677.                 {
  678.                     <br />
  679.                     <h4>Practitioners</h4>
  680.                     <hr />
  681.                     <div class="table-wrapper-scroll">
  682.                         <table class="table table-striped">
  683.                             <thead>
  684.                                 <tr>
  685.                                     <th class="th-sm">Name</th>
  686.                                     <th class="th-sm">Email</th>
  687.                                 </tr>
  688.                             </thead>
  689.                             <tbody>
  690.                                 @if (Model.Practitioners.Count > 0)
  691.                                 {
  692.                                     foreach (var practitioner in Model.Practitioners)
  693.                                     {
  694.                                         <tr>
  695.                                             <td>@($"{practitioner.FirstName} {practitioner.LastName}")</td>
  696.                                             <td>@practitioner.Email</td>
  697.                                         </tr>
  698.                                     }
  699.                                 }
  700.                             </tbody>
  701.                         </table>
  702.                     </div>
  703.                 }
  704.  
  705.                 @if (TempData["connected-appointments-video-usage-failed"] != null)
  706.                 {
  707.                     <div class="alert alert-danger">
  708.                         <span class="help-block">@TempData["connected-appointments-video-usage-failed"]</span>
  709.                     </div>
  710.                 }
  711.                 else
  712.                 {
  713.                     <br />
  714.                     <h4>Montly Usage</h4>
  715.                     <hr />
  716.                     <div class="table-wrapper-scroll">
  717.                         <table class="table table-striped">
  718.                             <thead>
  719.                                 <tr>
  720.                                     <th>Month</th>
  721.                                     <th>Number of VCs</th>
  722.                                     <th>Average VC duration</th>
  723.                                     <th>Total Usage (Minutes)</th>
  724.                                 </tr>
  725.                             </thead>
  726.                             <tbody>
  727.                                 @if (Model.VcUsage.Count > 0)
  728.                                 {
  729.                                     foreach (var usage in Model.VcUsage.First().Monthly)
  730.                                     {
  731.                                         <tr>
  732.                                             <td>@($"{usage.Month?.ToString("X2")}/{usage.Year.ToString()}")</td>
  733.                                             <td>@usage.SessionCount</td>
  734.                                             @if (usage.SessionCount != 0)
  735.                                             {
  736.                                                 <td>@((usage.UsageInMinutes / usage.SessionCount)?.ToString("0.0#"))</td>
  737.                                             }
  738.                                             else
  739.                                             {
  740.                                                 <td>0</td>
  741.                                             }
  742.                                             <td>@usage.UsageInMinutes?.ToString("0.0#")</td>
  743.                                         </tr>
  744.                                     }
  745.                                 }
  746.                             </tbody>
  747.                         </table>
  748.                     </div>
  749.  
  750.                 }
  751.             </div>
  752.             @if (FeatureToggle.CheckToggle(FeatureName.AdditionalCapacity))
  753.             {
  754.                 <div role="tabpanel" class="tab-pane fade @(Model.SubTab == "additional-capacity" ? "in active" : string.Empty)" id="additional-capacity">
  755.                     <form method="post" asp-page-handler="UpdateAdditionalCapacity">
  756.                         <input type="hidden" asp-for="AdditionalCapacityModel.BranchId" />
  757.                         <div class="row gap-bottom">
  758.                             <div class="col-md-5">
  759.                                 <label asp-for="AdditionalCapacityModel.AdditionalCapacityEnabled"></label>
  760.                                 <p><small>Tick box to turn on additional capacity</small></p>
  761.                             </div>
  762.                             <div class="col-md-1">
  763.                                 <input asp-for="AdditionalCapacityModel.AdditionalCapacityEnabled" class="form-check-input" />
  764.                             </div>
  765.                         </div>
  766.  
  767.                         <div class="row gap-bottom" id="targetBranchSelection">
  768.                             <div class="col-md-2">
  769.                                 @Model.EditBranchViewModel.Name
  770.                             </div>
  771.                             <div class="col-md-1">
  772.                                 <b>Supplies to </b>
  773.                             </div>
  774.                             <div class="col-md-9">
  775.                                 <input id="targetBranches" value="@Model.AdditionalCapacityModel.TargetBranchName" />
  776.                                 <input type="hidden" asp-for="AdditionalCapacityModel.TargetBranchId" />
  777.                             </div>
  778.  
  779.                         </div>
  780.  
  781.                         @if (TempData["additional-capacity-failed"] != null)
  782.                         {
  783.                             <div class="alert alert-danger">
  784.                                 <span class="help-block">@TempData["additional-capacity-failed"]</span>
  785.                             </div>
  786.                         }
  787.  
  788.                         <div class="col-md-12 content-block gap-bottom" style="text-align: right">
  789.                             <input type="submit" value="Save" class="btn btn-primary" />
  790.  
  791.                         </div>
  792.                     </form>
  793.  
  794.                     @if (@Model.AdditionalCapacityModel.AdditionalCapacityEnabled)
  795.                     {
  796.                         <h4>Add or remove sessions</h4>
  797.  
  798.                         <form method="post" asp-page-handler="AddAdditionalCapacitySession">
  799.                             <input type="hidden" asp-for="@Model.AdditionalCapacitySessionModel.BranchId" />
  800.                             <label class="additional-capacity-session-form__label" asp-for="@Model.AdditionalCapacitySessionModel.Date">Date</label>
  801.                             <input asp-for="@Model.AdditionalCapacitySessionModel.Date" style="width: 140px;" type="date">
  802.                             <span class="additional-capacity-session-form__validation" asp-validation-for="@Model.AdditionalCapacitySessionModel.Date"></span>
  803.                             <br />
  804.                             <label class="additional-capacity-session-form__label" asp-for="@Model.AdditionalCapacitySessionModel.StartTime">Start time</label>
  805.                             <input asp-for="@Model.AdditionalCapacitySessionModel.StartTime" style="width: 140px;" type="time">
  806.                             <span class="additional-capacity-session-form__validation" asp-validation-for="@Model.AdditionalCapacitySessionModel.StartTime"></span>
  807.                             <br />
  808.                             <label class="additional-capacity-session-form__label" asp-for="@Model.AdditionalCapacitySessionModel.EndTime">End time</label>
  809.                             <input asp-for="@Model.AdditionalCapacitySessionModel.EndTime" style="width: 140px;" type="time">
  810.                             <span class="additional-capacity-session-form__validation" asp-validation-for="@Model.AdditionalCapacitySessionModel.EndTime"></span>
  811.                             <br />
  812.                             <label class="additional-capacity-session-form__label" asp-for="@Model.AdditionalCapacitySessionModel.PractitionerName">Practitioner Name</label>
  813.                             <input asp-for="@Model.AdditionalCapacitySessionModel.PractitionerName" style="width: 140px;">
  814.                             <span class="additional-capacity-session-form__validation" asp-validation-for="@Model.AdditionalCapacitySessionModel.PractitionerName"></span>
  815.                             <br />
  816.                             <label class="additional-capacity-session-form__label" asp-for="@Model.AdditionalCapacitySessionModel.SlotLength">Slot Length</label>
  817.                             <input asp-for="@Model.AdditionalCapacitySessionModel.SlotLength" style="width: 140px;" type="number" min="1" step="1">
  818.                             <span class="additional-capacity-session-form__validation" asp-validation-for="@Model.AdditionalCapacitySessionModel.SlotLength"></span>
  819.                             <br />
  820.                             <label class="additional-capacity-session-form__label" asp-for="@Model.AdditionalCapacitySessionModel.SlotLength">Slot Length</label>
  821.                             <select asp-for="@Model.AdditionalCapacitySessionModel.SlotType">
  822.                                 <option value="DL-GP-PHONE" selected="selected">DL-GP-PHONE</option>
  823.                                 <option value="DL-GP-VIDEO">DL-GP-VIDEO</option>
  824.                             </select>
  825.  
  826.                             <div class="row gap-top">
  827.                                 @if (TempData["additional-capacity-session-failed"] != null)
  828.                                 {
  829.                                     <div class="alert alert-danger">
  830.                                         @foreach (var error in (string[])TempData["additional-capacity-session-failed"])
  831.                                         {
  832.                                             <span class="help-block">@error</span>
  833.                                         }
  834.                                     </div>
  835.                                 }
  836.                             </div>
  837.  
  838.                             <div class="row gap-top">
  839.                                 @if (TempData["additional-capacity-session-success"] != null)
  840.                                 {
  841.                                     <div class="alert alert-success">
  842.                                             <span class="help-block">Session added successfully</span>
  843.                                     </div>
  844.                                 }
  845.                             </div>
  846.  
  847.                             <div class="row">
  848.                                 <div class="col-md-12 content-block gap-bottom" style="text-align: right">
  849.                                     <input type="submit" value="Save" class="btn btn-primary" />
  850.                                 </div>
  851.                             </div>
  852.  
  853.                         </form>
  854.                     }
  855.                 </div>
  856.             }
  857.         </div>
  858.     </div>
  859. </div>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top