Reines SQL holt die Unterschriftenwerte aus der ServiceRecordHistory-Tabelle

MoK:
    Abwesenheiten bei Klienten angefangen. Nur im Debug-Modus sichtbar
This commit is contained in:
2023-11-02 16:25:36 +01:00
parent 263fd7fe74
commit ac65422235
19 changed files with 403 additions and 59 deletions

View File

@@ -5090,6 +5090,9 @@
<ItemGroup>
<Content Include="Views\Customer\CustomerBargeldkassen.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Customer\CustomerAbsenceTimeFormPartial.cshtml" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>

View File

@@ -94,6 +94,8 @@ namespace BeWoPlanerMobil.Controllers
{
Model.ReportTypes = new List<CustomerReportType> { CustomerReportType.Medikamentenliste, CustomerReportType.Bedarfsmedikation, CustomerReportType.Historie };
}
Model.AllAbsenceReasons = AbstractModel.HasRightToViewCustomerAbsenceTimes ? CustomerService.GetAllAbsenceReasons() : new List<AbsenceReasonDC>();
}
[Authorize]

View File

@@ -8,6 +8,7 @@ using BeWoPlanerMobil.Models;
using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
namespace BeWoPlanerMobil.Controllers
@@ -99,7 +100,6 @@ namespace BeWoPlanerMobil.Controllers
Model.Queries = QueryService.GetAllQueriesOfType(QueryType.Public);
return View(Model);
}
@@ -121,6 +121,8 @@ namespace BeWoPlanerMobil.Controllers
var selectedQuery = Model.Queries.FirstOrDefault(query => query.Oid.Equals(reportOid.Value));
var queryParameter = selectedQuery?.Parameter ?? new List<QueryParamDC>();
if (selectedQuery is null)
{
Model.Report = null;
@@ -137,12 +139,13 @@ namespace BeWoPlanerMobil.Controllers
}
QueryService.PrepareQueryReport(test, dcid);
Model.Report = Model.ReportCreator.CreateQueryReport(selectedQuery.Oid, dcid);
var queryReport = Model.ReportCreator.CreateQueryReport(selectedQuery.Oid, dcid);
Model.Report = queryReport;
}
catch (Exception e)
{
Log.Error(e);
TempData["ErrorMessage"] = e.Message;
}
return PartialView("DocumentWebViewerPartial", Model);

View File

@@ -133,5 +133,34 @@ namespace BeWoPlanerMobil.Models
public string ReportName { get; set; }
public List<BargeldkassenDC> Bargeldkassen { get; set; }
[Display(Name = "Kategorie")]
public long? SelectedAbsenceReason { get; set; }
public List<AbsenceReasonDC> AllAbsenceReasons { get; set; }
public List<SelectListItem> AbsenceReasonItems
{
get
{
var result = new List<SelectListItem>();
foreach(var absenceReason in AllAbsenceReasons)
{
if(absenceReason.AbsenceReasonOid is null)
{
continue;
}
result.Add(new SelectListItem
{
Value = absenceReason.AbsenceReasonOid.Value.ToString(),
Text = absenceReason.Description
});
}
return result;
}
}
}
}

View File

@@ -977,7 +977,7 @@
@if(Html.IsInDebugMode() && AbstractModel.HasRightToViewCustomerAbsenceTimes)
{
<div class="col-12 my-3">
<div class="card w-100 h-100">
<div class="card w-100 h-100 bg-bewo-dev">
<div class="card-header" onclick="cardHeaderClick('#chevron-customer-absencetimes', '#collapse-customer-absencetimes')">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header" id="chevron-customer-absencetimes"></i>
@@ -988,8 +988,11 @@
</button>
</div>
</div>
<!-- ToDo: Formular-Partial anlegen! -->
<div class="collapse" id="collapse-customer-absencetimes">
<div class="card-body">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#customer-absence-times-form-popup" onclick="calcAbsenceTimePrependWidth()"></button>
<hr />
@Html.Partial("CustomerAbsenceTimePartial", Model)
</div>
</div>
@@ -1002,6 +1005,30 @@
}
</div>
@if(Html.IsInDebugMode() && AbstractModel.HasRightToViewCustomerAbsenceTimes)
{
<!-- ToDo: Popup für Abwesenheitsformular -->
<div class="modal" tabindex="-1" role="dialog" id="customer-absence-times-form-popup">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Abwesenheit hinzufügen</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="modal-body">
@Html.Partial("CustomerAbsenceTimeFormPartial", Model)
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="button" data-dismiss="modal" onclick="submitCustomerAbsenceTimesForm()">OK</button>
<button class="btn btn-secondary" type="button" data-dismiss="modal" onclick="clearCustomerAbsenceTimesForm()">Abbrechen</button>
</div>
</div>
</div>
</div>
}
@if(!(Model?.Report is null) && Html.IsInDebugMode())
{
<div class="modal modal-fullscreen" tabindex="-1" role="dialog" id="report-popup">

View File

@@ -0,0 +1,179 @@
@using BeWoPlanerMobil.Models;
@using BeWoPlanerMobil.Util
@using BS.Shared
@model CustomerModel
@*
ToDos:
1. Formularvalidierung mittels Klassen und Bootstrap
2. Ganztagsfunktionalität einbauen
3. Controller-Funktionen implementieren:
1. Bearbeiten einer existierenden Abwesenheit
2. Anlegen einer neuen Abwesenheit
*@
<script type="text/javascript">
$(function () {
$("#customer-absence-time-start-date-picker, #customer-absence-time-end-date-picker").datetimepicker({
locale: "de",
format: "L"
});
$("#customer-absence-time-start-time-picker, #customer-absence-time-end-time-picker").datetimepicker({
locale: "de",
format: "LT"
});
});
var initialDatePrependWidth = 0;
function calcAbsenceTimePrependWidth() {
try {
setTimeout(function() {
if (initialDatePrependWidth <= 0 && $.isNumeric(getMaxWidth("customer-absence-time-prepend"))) {
initialDatePrependWidth = getMaxWidth("customer-absence-time-prepend");
}
if (initialDatePrependWidth <= 0) {
return;
}
logInfo2(`max width: ${getMaxWidth("customer-absence-time-prepend")}`);
$(".customer-absence-time-prepend").width(getMaxWidth("customer-absence-time-prepend"));
});
} catch (error) {
showErrorPopup(error);
}
}
function submitCustomerAbsenceTimesForm() {
try {
} catch (error) {
showErrorPopup(error);
}
}
function clearCustomerAbsenceTimesForm() {
try {
} catch (error) {
showErrorPopup(error);
}
}
</script>
<div class="form-row">
<div class="col-lg">
<div class="form-group my-2">
<div class="input-group date" id="customer-absence-time-start-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text customer-absence-time-prepend">
Startdatum
</div>
</div>
<input type="text" id="customer-absence-time-start-date" name="Datum" class="form-control datetimepicker-input" data-target="#customer-absence-time-start-date-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#customer-absence-time-start-date-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2">
<i class="fas fa-calendar-alt"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg">
<div class="form-group my-2">
<div class="input-group date" id="customer-absence-time-end-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text customer-absence-time-prepend">
Enddatum
</div>
</div>
<input type="text" id="customer-absence-time-end-date" name="Enddatum" class="form-control datetimepicker-input" data-target="#customer-absence-time-end-date-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#customer-absence-time-end-date-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2">
<i class="fas fa-calendar-alt"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-lg">
<div class="form-group my-2">
<div class="input-group date" id="customer-absence-time-start-time-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text customer-absence-time-prepend">
Von
</div>
</div>
<input type="text" id="customer-absence-time-start-time" name="Start" class="form-control datetimepicker-input" data-target="#customer-absence-time-start-time-picker" />
<div class="input-group-append" data-target="#customer-absence-time-start-time-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2">
<i class="fas fa-clock"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg">
<div class="form-group my-2">
<div class="input-group date" id="customer-absence-time-end-time-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text customer-absence-time-prepend">
Bis
</div>
</div>
<input type="text" id="customer-absence-time-end-time" name="Ende" class="form-control datetimepicker-input" data-target="#customer-absence-time-end-time-picker" />
<div class="input-group-append" data-target="#customer-absence-time-end-time-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2">
<i class="fas fa-clock"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" class="custom-control-input" name="allday-cb" id="customer-absence-time-allday-cb" />
<label class="custom-control-label" for="customer-absence-time-allday-cb">Ganztäglich</label>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-absence-time-prepend">
Kategorie
</div>
</div>
@Html.DropDownListFor(m => m.SelectedAbsenceReason, Model.AbsenceReasonItems, new { @class = "custom-select", Id = "absence-reason-select" })
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-absence-time-prepend">
Erläuterung
</div>
</div>
<textarea class="form-control" id="notice" name="Notice" maxlength="1024" ></textarea>
</div>
</div>
</div>
</div>

View File

@@ -1 +1,22 @@
<p>Hier wird f&uuml;r Sie gebaut!</p>
@using BeWoPlanerMobil.Models;
@using BS.Shared.Extensions
@model CustomerModel
<script type="text/javascript">
</script>
@foreach(var absenceTime in Model.SelectedCustomer.AbsenceTimes)
{
if(absenceTime.Start is null)
{
continue;
}
@*
ToDo: Startdatum und -zeit, Enddatum und -zeit, Kategorie, Erläuterung
*@
}

View File

@@ -216,7 +216,7 @@
</div>
</div>
<!-- Einzelbuchung: Startdatum -->
<!-- Einzelbuchung: Startdatum und gegebenenfalls Enddatum -->
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">

View File

@@ -1,5 +1,4 @@
@using BeWoPlanerMobil.Util
@model BeWoPlanerMobil.Models.ReportViewerModel
@model BeWoPlanerMobil.Models.ReportViewerModel
<script>
$(window).ready(function () {
@@ -17,6 +16,7 @@
}
}
// ToDo: Nicht hier laden, sondern nur, wenn keine weiteren Variablen benötigt werden!
function loadCustomReport() {
try {
var selectedReportOid = $("#msk-customReportSelect").val();
@@ -50,12 +50,12 @@
<div class="container-fluid my-3">
<div class="row h-auto" id="abc-def">
<div class="col-sm-12 col-md-4 col-lg-4 col-xl-3">
@*<div class="row">
<div class="row">
<div class="col">
@Html.DropDownListFor(model => model.SelectedReportType, Model.ReportTypes, new { @class = "custom-select", onchange = "updateForm()", id = "msk-report-type-select" })
<hr />
</div>
</div>*@
</div>
<div class="row">
<div class="col" id="msk-form-col">
@Html.Partial("ReportViewerFormPartial", Model)
@@ -69,5 +69,4 @@
}
</div>
</div>
</div>

View File

@@ -1,9 +1,7 @@
@using BeWoPlanerMobil.Models
@using BeWoPlanerMobil.Util
@model BeWoPlanerMobil.Models.ReportViewerModel
<script type="text/javascript">
// ToDo:
function reportFilterOnChange() {
try {
//team oder mitarbeiter

View File

@@ -494,7 +494,6 @@
</div>
}
@RenderBody()
</body>
</html>

View File

@@ -5515,13 +5515,25 @@ namespace BeWo.Data.Access
return list.ToList();
}
/// <summary>
/// VERALTET! FindMostRecentSignatureStatusInfoByServiceRecordOid benutzen!
/// </summary>
/// <param name="serviceRecordOid"></param>
/// <returns></returns>
public ServiceRecordHistory FindMostRecentServiceRecordHistoryEntryByServiceRecordOid(long serviceRecordOid)
{
var criteira = CreateCriteria<ServiceRecordHistory>()
.Add(Restrictions.Eq(nameof(ServiceRecordHistory.ServiceRecordOid), serviceRecordOid))
.AddOrder(Order.Desc(nameof(ServiceRecordHistory.InsTs)));
try
{
var criteira = CreateCriteria<ServiceRecordHistory>()
.Add(Restrictions.Eq(nameof(ServiceRecordHistory.ServiceRecordOid), serviceRecordOid))
.AddOrder(Order.Desc(nameof(ServiceRecordHistory.InsTs)));
return criteira.List<ServiceRecordHistory>().FirstOrDefault();
return criteira.List<ServiceRecordHistory>().FirstOrDefault();
}
catch(Exception e)
{
return null;
}
}
public Dictionary<long, ServiceRecordHistory> FindMostRecentServiceRecordHistoryEntryByServiceRecords(List<long> serviceRecordOids)
@@ -5603,5 +5615,32 @@ namespace BeWo.Data.Access
return criteria.List<ServiceRecord>().ToList();
}
public SignatureStateInfoFromServiceRecordHistoryEntry FindMostRecentSignatureStatusInfoByServiceRecordOid(long serviceRecordOid)
{
var sqlQuery = Session.CreateSQLQuery($"SELECT * FROM ServiceRecordHistory WHERE ServiceRecordOid = {serviceRecordOid} ORDER BY InsTs LIMIT 1")
.AddScalar("CustomerConfirmationReceiptSignatureStateType", NHibernateUtil.Int32)
.AddScalar("EmployeeConfirmationReceiptSignatureStateType", NHibernateUtil.Int32)
.AddScalar("ServiceRecordSignatureStateType", NHibernateUtil.Int32)
.AddScalar("CustomerConfirmationReceiptSignatureOid", NHibernateUtil.Int64)
.AddScalar("EmployeeConfirmationReceiptSignatureOid", NHibernateUtil.Int64);
var objectsList = sqlQuery.List<object[]>().ToList();
var row = objectsList.FirstOrDefault();
if(row is null || row.Length != 5)
{
return null;
}
var customerConfirmationReceiptSignatureState = (SignatureStateType)row[0];
var employeeConfirmationReceiptSignatureState = (SignatureStateType)row[1];
var serviceRecordSignatureStateType = (SignatureStateType)row[2];
var customerConfirmationReceiptSignatureOid = (long?)row[3];
var employeeConfirmationReceiptSignatureOid = (long?)row[4];
return new SignatureStateInfoFromServiceRecordHistoryEntry(customerConfirmationReceiptSignatureState, employeeConfirmationReceiptSignatureState, serviceRecordSignatureStateType, customerConfirmationReceiptSignatureOid, employeeConfirmationReceiptSignatureOid);
}
}
}

View File

@@ -382,6 +382,7 @@
<Compile Include="UpdInsInterceptor.cs" />
<Compile Include="Utils\AppointmentSearchResult.cs" />
<Compile Include="Utils\IntervalFinderHelper.cs" />
<Compile Include="Utils\SignatureStateInfoFromServiceRecordHistoryEntry.cs" />
<Compile Include="WCFHibernateSessionManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

View File

@@ -0,0 +1,23 @@
using BS.Shared;
namespace BeWo.Data.Utils
{
public class SignatureStateInfoFromServiceRecordHistoryEntry
{
public SignatureStateType CustomerConfirmationReceiptSignatureStateType { get; }
public SignatureStateType EmployeeConfirmationReceiptSignatureStateType { get; }
public SignatureStateType ServiceRecordSignatureStateType { get; }
public long? CustomerConfirmationReceiptSignatureOid { get; }
public long? EmployeeConfirmationReceiptSignatureOid { get; }
public SignatureStateInfoFromServiceRecordHistoryEntry(SignatureStateType customerConfirmationReceiptSignatureStateType, SignatureStateType employeeConfirmationReceiptSignatureStateType, SignatureStateType serviceRecordSignatureStateType, long? customerConfirmationReceiptSignatureOid, long? employeeConfirmationReceiptSignatureOid)
{
CustomerConfirmationReceiptSignatureStateType = customerConfirmationReceiptSignatureStateType;
EmployeeConfirmationReceiptSignatureStateType = employeeConfirmationReceiptSignatureStateType;
ServiceRecordSignatureStateType = serviceRecordSignatureStateType;
CustomerConfirmationReceiptSignatureOid = customerConfirmationReceiptSignatureOid;
EmployeeConfirmationReceiptSignatureOid = employeeConfirmationReceiptSignatureOid;
}
}
}

View File

@@ -1,3 +1 @@
ALTER TABLE servicerecordhistory ADD COLUMN `CustomerConfirmationReceiptSignatureStateType` int DEFAULT 0;
ALTER TABLE servicerecordhistory ADD COLUMN `EmployeeConfirmationReceiptSignatureStateType` int DEFAULT 0;
ALTER TABLE servicerecordhistory ADD COLUMN `ServiceRecordSignatureStateType` int DEFAULT 0;
ALTER TABLE servicerecordhistory ADD COLUMN `CustomerConfirmationReceiptSignatureStateType` int DEFAULT 0, ADD COLUMN `EmployeeConfirmationReceiptSignatureStateType` int DEFAULT 0, ADD COLUMN `ServiceRecordSignatureStateType` int DEFAULT 0;

View File

@@ -85,7 +85,7 @@ namespace BeWo.Service.Plugins
//t = "4867997795"; // ADiK Kleve
//t = "3184859776"; // Sergej Becker
//t = "7752610643"; // BWK Gbr
//t = "3785623125"; // Betreuwo
t = "3785623125"; // Betreuwo
//t = "7130228334"; // LH Borken
//t = "4209820830"; // VKM Hamm
//t = "5700328131"; // Betreutes Wohnen St. Ludgerus Essen-Werden
@@ -357,7 +357,7 @@ namespace BeWo.Service.Plugins
//t = "4434019324"; // FENIX Soziale Dienste
//t = "6219220038"; // SKM Kreis Viersen e.V.
//t = "1372050368"; // Petra Wagner Matthes
t = "1253359817"; // Lebenshilfe Bad Kreuznach e.V.
//t = "1253359817"; // Lebenshilfe Bad Kreuznach e.V.
//t = "6038574522"; // I-Wohl
//t = "2438529184"; // Alloheim Seniorenresidenzen SE
//t = "7564067748"; // SKM Aachen

View File

@@ -36,6 +36,7 @@ using System.Text;
using System.Threading;
using System.Web;
using System.Windows;
using BeWo.Data.Utils;
using Utils = BeWo.Service.Core.Utils;
namespace BeWo.Service.ServiceImplementations
@@ -2230,11 +2231,12 @@ namespace BeWo.Service.ServiceImplementations
var customerMonthlySignatureState = serviceRecord2SignatureState.CustomerMonthlySignatureStateType;
var employeeMonthlySignatureState = serviceRecord2SignatureState.EmployeeMonthlySignatreStateType;
ServiceRecordHistory previousRecordHistoryEntry = null;
SignatureStateInfoFromServiceRecordHistoryEntry previousRecordHistorySignatureInfo = null;
if(serviceRecord.Oid.HasValue)
{
previousRecordHistoryEntry = DAOFactory.SearchDAO.FindMostRecentServiceRecordHistoryEntryByServiceRecordOid(serviceRecord.Oid.Value);
//previousRecordHistoryEntry = DAOFactory.SearchDAO.FindMostRecentServiceRecordHistoryEntryByServiceRecordOid(serviceRecord.Oid.Value);
previousRecordHistorySignatureInfo = DAOFactory.SearchDAO.FindMostRecentSignatureStatusInfoByServiceRecordOid(serviceRecord.Oid.Value);
}
serviceRecordHistoryEntries.AddIfNotIn(new ServiceRecordHistory
@@ -2269,22 +2271,17 @@ namespace BeWo.Service.ServiceImplementations
SystemEntryID = serviceRecord.SystemEntryID,
DistanceInMeter = serviceRecord.DistanceInMeter,
IsCreatedInMobileClient = serviceRecord.IsCreatedInMobileClient,
ServiceRecordSignatureStateType = singleSignatureState ?? previousRecordHistoryEntry?.ServiceRecordSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureStateType = customerMonthlySignatureState ?? previousRecordHistoryEntry?.CustomerConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
EmployeeConfirmationReceiptSignatureStateType = employeeMonthlySignatureState ?? previousRecordHistoryEntry?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureOid = previousRecordHistoryEntry?.CustomerConfirmationReceiptSignatureOid,
EmployeeConfirmationReceiptSignatureOid = previousRecordHistoryEntry?.EmployeeConfirmationReceiptSignatureOid
ServiceRecordSignatureStateType = singleSignatureState ?? previousRecordHistorySignatureInfo?.ServiceRecordSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureStateType = customerMonthlySignatureState ?? previousRecordHistorySignatureInfo?.CustomerConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
EmployeeConfirmationReceiptSignatureStateType = employeeMonthlySignatureState ?? previousRecordHistorySignatureInfo?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureOid = previousRecordHistorySignatureInfo?.CustomerConfirmationReceiptSignatureOid,
EmployeeConfirmationReceiptSignatureOid = previousRecordHistorySignatureInfo?.EmployeeConfirmationReceiptSignatureOid
});
}
DAOFactory.GenericDAO.Insert(serviceRecordHistoryEntries);
}
// ToDo: 3 Unterschriften; 1 Gültig mit U1; 2 Ungültig mit U1; 3 Gültig mit U2;
// ToDo:
// ToDo:
// ToDo:
// ToDo:
private static List<ServiceRecord2SignatureStates> GenerateSignatureStates(List<ServiceRecord> serviceRecordsWithDeletedSingleSignatures, List<ServiceRecord2SignatureStates> serviceRecordsdWithRemovedConfirmationReceiptSignatures, List<ServiceRecord> originals)
{
var serviceRecords2SignatureStates = new List<ServiceRecord2SignatureStates>();
@@ -3190,11 +3187,11 @@ namespace BeWo.Service.ServiceImplementations
{
foreach(var original in lOriginals)
{
ServiceRecordHistory previousRecordHistoryEntry = null;
SignatureStateInfoFromServiceRecordHistoryEntry previousRecordHistorySignatureInfo = null;
if(original.Oid.HasValue)
{
previousRecordHistoryEntry = DAOFactory.SearchDAO.FindMostRecentServiceRecordHistoryEntryByServiceRecordOid(original.Oid.Value);
previousRecordHistorySignatureInfo = DAOFactory.SearchDAO.FindMostRecentSignatureStatusInfoByServiceRecordOid(original.Oid.Value);
}
serviceRecordHistoryEntries.AddIfNotIn(new ServiceRecordHistory
@@ -3229,9 +3226,11 @@ namespace BeWo.Service.ServiceImplementations
SystemEntryID = original.SystemEntryID,
DistanceInMeter = original.DistanceInMeter,
IsCreatedInMobileClient = original.IsCreatedInMobileClient,
ServiceRecordSignatureStateType = previousRecordHistoryEntry?.ServiceRecordSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureStateType = previousRecordHistoryEntry?.CustomerConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
EmployeeConfirmationReceiptSignatureStateType = previousRecordHistoryEntry?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None
ServiceRecordSignatureStateType = previousRecordHistorySignatureInfo?.ServiceRecordSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureStateType = previousRecordHistorySignatureInfo?.CustomerConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
EmployeeConfirmationReceiptSignatureStateType = previousRecordHistorySignatureInfo?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureOid = previousRecordHistorySignatureInfo?.CustomerConfirmationReceiptSignatureOid,
EmployeeConfirmationReceiptSignatureOid = previousRecordHistorySignatureInfo?.EmployeeConfirmationReceiptSignatureOid
});
}
}
@@ -8323,8 +8322,13 @@ namespace BeWo.Service.ServiceImplementations
private static void MakeSignatureStatusTypeServiceRecordHistoryEntry(ServiceRecord serviceRecord, SignatureStateType? singleSignatureStateType, SignatureStateType? customerMonthlySignatureStateType, SignatureStateType? employeeMonthlySignatureStateType, long? customerConfirmationReceiptSignatureOid, long? employeeConfirmationReceiptsignatureOid)
{
// Alten ServiceRecordHistory laden
var mostRecentHistoryEntry = DAOFactory.SearchDAO.FindMostRecentServiceRecordHistoryEntryByServiceRecordOid(serviceRecord.Oid.Value);
// Alten Unterschriftenstatus aus ServiceRecordHistory laden
SignatureStateInfoFromServiceRecordHistoryEntry previousRecordHistorySignatureInfo = null;
if(serviceRecord.Oid.HasValue)
{
previousRecordHistorySignatureInfo = DAOFactory.SearchDAO.FindMostRecentSignatureStatusInfoByServiceRecordOid(serviceRecord.Oid.Value);
}
var seviceRecordHistoryEntry = new ServiceRecordHistory
{
@@ -8358,11 +8362,11 @@ namespace BeWo.Service.ServiceImplementations
SystemEntryID = serviceRecord.SystemEntryID,
DistanceInMeter = serviceRecord.DistanceInMeter,
IsCreatedInMobileClient = serviceRecord.IsCreatedInMobileClient,
CustomerConfirmationReceiptSignatureStateType = customerMonthlySignatureStateType ?? mostRecentHistoryEntry?.CustomerConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
EmployeeConfirmationReceiptSignatureStateType = employeeMonthlySignatureStateType ?? mostRecentHistoryEntry?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
ServiceRecordSignatureStateType = singleSignatureStateType ?? mostRecentHistoryEntry?.ServiceRecordSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureOid = customerConfirmationReceiptSignatureOid ?? mostRecentHistoryEntry?.CustomerConfirmationReceiptSignatureOid,
EmployeeConfirmationReceiptSignatureOid = employeeConfirmationReceiptsignatureOid ?? mostRecentHistoryEntry?.EmployeeConfirmationReceiptSignatureOid
CustomerConfirmationReceiptSignatureStateType = customerMonthlySignatureStateType ?? previousRecordHistorySignatureInfo?.CustomerConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
EmployeeConfirmationReceiptSignatureStateType = employeeMonthlySignatureStateType ?? previousRecordHistorySignatureInfo?.EmployeeConfirmationReceiptSignatureStateType ?? SignatureStateType.None,
ServiceRecordSignatureStateType = singleSignatureStateType ?? previousRecordHistorySignatureInfo?.ServiceRecordSignatureStateType ?? SignatureStateType.None,
CustomerConfirmationReceiptSignatureOid = customerConfirmationReceiptSignatureOid ?? previousRecordHistorySignatureInfo?.CustomerConfirmationReceiptSignatureOid,
EmployeeConfirmationReceiptSignatureOid = employeeConfirmationReceiptsignatureOid ?? previousRecordHistorySignatureInfo?.EmployeeConfirmationReceiptSignatureOid
};
DAOFactory.GenericDAO.Insert(seviceRecordHistoryEntry);

View File

@@ -87,21 +87,9 @@ namespace BeWo.Service.ServiceImplementations
var lDir = BS.Shared.Core.Utils.CreateSavePath(baseDirectory, tenant + @"\temp");
var lPath = BS.Shared.Core.Utils.CreateSavePath(lDir, lResult);
var table = BS.Shared.Core.Utils.XMLDeserializeFromString<DataTable>(dataTableJsonString);
BS.Shared.Core.Utils.XMLSerialize(lPath, table);
if(!Directory.Exists(lDir))
{
}
if(!File.Exists(lPath))
{
}
return lResult;
}
catch (Exception e)

View File

@@ -684,5 +684,36 @@ namespace BS.Shared.Extensions
{
return (dateTime.GetLastOfMonth() - dateTime.GetFirstOfMonth()).Days + 1;
}
/// <summary>
/// Liefert einen String, der das Interval darstellt.
/// Ist endDate null und die Uhrzeit vom Startdatum 00:00 oder sind beide Uhrzeiten 00:00, wird die Uhrzeit nicht angezeigt.
/// </summary>
/// <param name="dateTime">Startdatum des Intervalls</param>
/// <param name="endDate">Eventuelles Enddatum des Intervalls</param>
/// <returns></returns>
public static string ToIntervalString(this DateTime dateTime, DateTime? endDate)
{
if(endDate is null)
{
if(dateTime.Hour == 0 && dateTime.Minute == 0)
{
return $"{dateTime:dd.MM.yyyy}";
}
return $"{dateTime:dd.MM.yyyy HH:mm}";
}
if(dateTime.Hour == 0 && dateTime.Minute == 0 && endDate.Value.Hour == 0 && endDate.Value.Minute == 0)
{
return dateTime.Year == endDate.Value.Year ?
$"{dateTime:dd.MM.} - {endDate.Value:dd.MM.yyyy}" :
$"{dateTime:dd.MM.yyyy} - {endDate.Value:dd.MM.yyyy}";
}
return dateTime.Year == endDate.Value.Year ?
$"{dateTime:dd.MM. HH:mm} - {endDate.Value:dd.MM.yyyy HH:mm}" :
$"{dateTime:dd.MM.yyyy HH:mm} - {endDate.Value:dd.MM.yyyy HH:mm}";
}
}
}