Merge branch 'master' of ssh://float.ownsoft.de/git/beyondSoft/BeWo

This commit is contained in:
2025-07-11 18:48:53 +02:00
182 changed files with 21940 additions and 12634 deletions

View File

@@ -76,6 +76,8 @@ namespace BeWoPlanerMobil.Controllers
//Load SupportConcepts
if (Model.LoggedInEmployee?.EmployeeOid.HasValue ?? false)
{
//var test = OperationsService.GetAllActiveSupportConceptCostbearer(false, true, Model.LoggedInEmployee.EmployeeOid.Value);
Model.SupportConcepts = EmployeeService.GetActiveSupportConceptsForEmployee(Model.LoggedInEmployee.EmployeeOid, Model.SelectedSupportConceptFilter);
}
else
@@ -130,7 +132,7 @@ namespace BeWoPlanerMobil.Controllers
Model.Employees = Model.Employees.OrderBy(e => e.LastName).ThenBy(e => e.FirstName).ToList();
Model.SelectedConceptCostBearerRelations = new List<SupportConceptCostBearerRelDC>();
Model.MultiBookingSelectedConceptCostBearerRelations = new List<SupportConceptCostBearerRelDC>();
//Model.MultiBookingSelectedConceptCostBearerRelations = new List<SupportConceptCostBearerRelDC>();
Model.GoalRatingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position).ToList();
@@ -188,6 +190,9 @@ namespace BeWoPlanerMobil.Controllers
Model.GroupBookingSelectedEmployees = Model.AllEmployees.Where(employee => Model.GroupBookingSelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList();
Model.GroupBookingSelectedSupportConcepts = Model.SupportConcepts.Where(s => Model.GroupBookingSelectedSupportConceptOids.Contains(s.SupportConceptOid.Value)).ToList();
Model.MultiBookingSelectedEmployees = Model.AllEmployees.Where(employee => Model.MultiBookingSelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList();
Model.MultiBookingSelectedSupportConcepts = Model.SupportConcepts.Where(s => Model.MultiBookingSelectedSupportConceptOids.Contains(s.SupportConceptOid.Value)).ToList();
//Model.Group = Model.SupportConceptListObjectsForGroupBooking.Where(s => Model.GroupBookingSelectedSupportConceptOids.Contains(s.SupportConceptOid.Value)).ToList();
if (Model.SelectedCostBearerSupportConceptOid.HasValue && Model.SelectedCostBearerSupportConceptOid != -1)
@@ -204,7 +209,10 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedGoals = Model.AllGoals.Where(g => Model.SelectedGoalOids.Contains(g.ValueListEntryOid.Value)).ToList();
}
if (Model.IsInEditingMode && Model.SelectedServiceRecordOid.HasValue)
{
Model.SelectedServiceRecord = Model.GetServiceRecord(Model.SelectedServiceRecordOid.Value);
}
}
private void LoadSupportConceptThings(long? cb2ScOid)
@@ -555,7 +563,10 @@ namespace BeWoPlanerMobil.Controllers
if(supportConcept is null)
{
Log.Info($"Hilfeplan von Bewilligung mit Oid {Model.SelectedCostBearerSupportConceptOid} nicht gefunden beim Laden der Ziele (LoadGoals).");
if (Model.SelectedCostBearerSupportConceptOid.Value > 0)
{
Log.Info($"Hilfeplan von Bewilligung mit Oid {Model.SelectedCostBearerSupportConceptOid} nicht gefunden beim Laden der Ziele (LoadGoals).");
}
return;
}
@@ -860,59 +871,67 @@ namespace BeWoPlanerMobil.Controllers
[Authorize]
public ActionResult SaveSignature(FormCollection formCollection)
{
var blob = formCollection[FormCollectionConstants.ServiceRecordSignatureBlobKey];
var date = DateTime.Parse(formCollection[FormCollectionConstants.ServiceRecordSignatureDateKey]);
long.TryParse(formCollection[FormCollectionConstants.ServiceRecordSignatureRecordOidKey], out var serviceRecordOid);
var serviceRecord = Model.ServiceRecords.FirstOrDefault(sr => sr.ServiceRecordOid.HasValue && sr.ServiceRecordOid.Value.Equals(serviceRecordOid));
if(serviceRecordOid < 1 || serviceRecord is null)
try
{
var message2Log = string.Empty;
var blob = formCollection[FormCollectionConstants.ServiceRecordSignatureBlobKey];
var date = DateTime.Parse(formCollection[FormCollectionConstants.ServiceRecordSignatureDateKey]);
long.TryParse(formCollection[FormCollectionConstants.ServiceRecordSignatureRecordOidKey], out var serviceRecordOid);
if(serviceRecordOid < 1)
var serviceRecord = Model.ServiceRecords.FirstOrDefault(sr => sr.ServiceRecordOid.HasValue && sr.ServiceRecordOid.Value.Equals(serviceRecordOid));
if (serviceRecordOid < 1 || serviceRecord is null)
{
message2Log = $"Einzelunterschrift konnte nicht gespeichert werden, da die ServiceRecordOid {serviceRecordOid} ungültig ist.";
}
else if(serviceRecord is null)
{
message2Log = "Einzelunterschrift konnte nicht gespeichert werden, da der Zeiterfassungseintrag im Model nicht gefunden werden konnte.";
}
var message2Log = string.Empty;
Log.Error(message2Log);
if (serviceRecordOid < 1)
{
message2Log = $"Einzelunterschrift konnte nicht gespeichert werden, da die ServiceRecordOid {serviceRecordOid} ungültig ist.";
}
else if (serviceRecord is null)
{
message2Log = "Einzelunterschrift konnte nicht gespeichert werden, da der Zeiterfassungseintrag im Model nicht gefunden werden konnte.";
}
TempData[TempDataConstants.ErrorMessageKey] = "Beim Speichern der Unterschrift ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator.";
return RedirectToActionPermanent("Main", "Main");
}
Log.Error(message2Log);
long? oid;
using(var signatureBitmap = SignatureUtils.Base64StringToBitmap(blob.Split(',')[1]))
{
var isValid = SignatureUtils.ValidateSignature(signatureBitmap);
if(!isValid)
{
TempData[TempDataConstants.ErrorMessageKey] = "Das Unterschriftenfeld darf nicht leer sein.";
TempData[TempDataConstants.ErrorMessageKey] = "Beim Speichern der Unterschrift ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator.";
return RedirectToActionPermanent("Main", "Main");
}
oid = OperationsService.InsertSignature(new SignatureDC
{
DataBild = blob,
Zeitstempel = date,
ServiceRecordOid = serviceRecordOid
}).SignatureOid;
}
long? oid;
if(oid is null)
{
TempData[TempDataConstants.ErrorMessageKey] = "Beim Speichern der Unterschrift ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator.";
using (var signatureBitmap = SignatureUtils.Base64StringToBitmap(blob.Split(',')[1]))
{
var isValid = SignatureUtils.ValidateSignature(signatureBitmap);
if (!isValid)
{
TempData[TempDataConstants.ErrorMessageKey] = "Das Unterschriftenfeld darf nicht leer sein.";
return RedirectToActionPermanent("Main", "Main");
}
oid = OperationsService.InsertSignature(new SignatureDC
{
DataBild = blob,
Zeitstempel = date,
ServiceRecordOid = serviceRecordOid
}).SignatureOid;
}
if (oid is null)
{
TempData[TempDataConstants.ErrorMessageKey] = "Beim Speichern der Unterschrift ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator.";
}
else
{
TempData[TempDataConstants.InfoMessageKey] = $"Die Unterschrift von {serviceRecord.Customer} für den Eintrag vom {MainModel.GetServiceRecordTimeHeader(serviceRecord, false)} wurde erfolgreich gespeichert.";
}
}
else
catch (Exception ex)
{
TempData[TempDataConstants.InfoMessageKey] = $"Die Unterschrift von {serviceRecord.Customer} für den Eintrag vom {MainModel.GetServiceRecordTimeHeader(serviceRecord, false)} wurde erfolgreich gespeichert.";
Log.Error("Fehler beim Speichern der Einzelunterschrift: " + ex.Message, ex);
}
return RedirectToActionPermanent("Main", "Main");
}
@@ -1067,7 +1086,7 @@ namespace BeWoPlanerMobil.Controllers
betrag = betragAsDecimal;
}
Log.Info($"CreateOrUpdateServiceRecord: datum:{collection[FormCollectionConstants.DateKey]}; start:{collection[FormCollectionConstants.StartKey]}; ende:{collection[FormCollectionConstants.EndKey]}; dauer:{collection[FormCollectionConstants.DurationKey]}; doku:{doku1}; aktion:{(Model.IsInEditingMode ? "Speichern" : "Anlegen")}");
Log.Info($"CreateOrUpdateServiceRecord: datum:{collection[FormCollectionConstants.DateKey]}; start:{collection[FormCollectionConstants.StartKey]}; ende:{collection[FormCollectionConstants.EndKey]}; dauer:{collection[FormCollectionConstants.DurationKey]}; aktion:{(Model.IsInEditingMode ? "Speichern" : "Anlegen")}");
if(string.IsNullOrEmpty(collection[FormCollectionConstants.DateKey]))
{
@@ -2665,7 +2684,7 @@ namespace BeWoPlanerMobil.Controllers
{
employeeOids.AddRangeIfElementsNotIn(Model.MultiBookingSelectedEmployees.Select(e => e.EmployeeOid));
var cb2ScOids = Model.MultiBookingSelectedConceptCostBearerRelations.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).ToList();
var cb2ScOids = Model.SelectedConceptCostBearerRelations.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).ToList();
var relations = CustomerService.GetSupportConceptCostBearerRelationsById(cb2ScOids);
foreach(var costBearer2SupportConceptRel in relations)
@@ -3212,7 +3231,8 @@ namespace BeWoPlanerMobil.Controllers
{
Model.Categories2Descriptions.Clear();
Model.MultiBookingSelectedConceptCostBearerRelations.Clear();
//Model.MultiBookingSelectedConceptCostBearerRelations.Clear();
Model.SelectedConceptCostBearerRelationOids.Clear();
Model.MultiBookingSelectedEmployeeOids.Clear();
Model.MultiBookingSelectedGroupOfPeopleOids.Clear();
Model.MultiBookingSelectedCostbearerRelOids.Clear();
@@ -3241,7 +3261,7 @@ namespace BeWoPlanerMobil.Controllers
ResetBookingMode(BookingMode.SingleBookingMode);
//LoadServiceCategoriesToModel(Model.SelectedCostBearerSupportConceptOid);
LoadServiceCategoriesToModel(Model.SelectedCostBearerSupportConceptOid);
return View("Main", Model);
}
@@ -4204,8 +4224,8 @@ namespace BeWoPlanerMobil.Controllers
var groupCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(singleRels);
Model.MultiBookingSelectedConceptCostBearerRelations.Clear();
Model.MultiBookingSelectedConceptCostBearerRelations.AddRangeIfElementsNotIn(groupCostBearerRelations);
Model.SelectedConceptCostBearerRelations.Clear();
Model.SelectedConceptCostBearerRelations.AddRangeIfElementsNotIn(groupCostBearerRelations);
Model.MultiBookingSelectedSupportConcepts.AddRangeIfElementsNotIn(selectedSupportConcepts);
@@ -4231,12 +4251,16 @@ namespace BeWoPlanerMobil.Controllers
}
}
Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(s => s.CostBearer2SupportConceptOid.Value).ToList();
Model.MultiBookingSelectedSupportConceptOids = Model.MultiBookingSelectedSupportConcepts.Select(s => s.SupportConceptOid.Value).ToList();
return PartialView("MultiBookingScCbRelList", Model);
}
[Authorize]
public ActionResult RemoveSupportConceptCostbearerRelFromMultiBooking(string relOid)
{
//das funktioniert hier noch nicht mit dem letzten Eintrag
if(Model is null)
{
TempData[TempDataConstants.DoLogoutKey] = true;
@@ -4250,7 +4274,7 @@ namespace BeWoPlanerMobil.Controllers
var supportConcept2Remove = Model.MultiBookingSelectedSupportConcepts.FirstOrDefault(f => f.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid));
var relation2Remove = Model.MultiBookingSelectedConceptCostBearerRelations.FirstOrDefault(f => f.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid);
var relation2Remove = Model.SelectedConceptCostBearerRelations.FirstOrDefault(f => f.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid);
if(supportConcept2Remove?.SupportConceptOid.HasValue ?? false)
{
@@ -4271,7 +4295,7 @@ namespace BeWoPlanerMobil.Controllers
}
Model.MultiBookingSelectedSupportConcepts.Remove(supportConcept2Remove);
Model.MultiBookingSelectedConceptCostBearerRelations.Remove(relation2Remove);
Model.SelectedConceptCostBearerRelations.Remove(relation2Remove);
var selectedGroups = Model.GroupsOfPeople.Where(group => group.GroupOfPeopleOid.HasValue && Model.MultiBookingSelectedGroupOfPeopleOids.Contains(group.GroupOfPeopleOid.Value)).ToList();
@@ -4291,6 +4315,12 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedServiceDescription = firstServiceDescription;
}
Model.SelectedGoalOids = Model.SelectedGoals.Select(g => g.ValueListEntryOid.Value).ToList();
Model.MultiBookingSelectedSupportConceptOids = Model.MultiBookingSelectedSupportConcepts.Select(g => g.SupportConceptOid.Value).ToList();
Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(g => g.CostBearer2SupportConceptOid.Value).ToList();
Model.SelectedServiceCategoryOid = Model.SelectedServiceCategory?.ServiceCategoryOid;
Model.SelectedServiceDescriptionOid = Model.SelectedServiceDescription?.ServiceDescriptionOid;
return PartialView("MultiBookingSelectionPartial", Model);
}
@@ -4436,9 +4466,9 @@ namespace BeWoPlanerMobil.Controllers
var serviceRecordsToInsert = new List<ServiceRecordDC>();
if(Model.MultiBookingSelectedConceptCostBearerRelations.Any() && Model.MultiBookingSelectedEmployees.Any())
if(Model.SelectedConceptCostBearerRelations.Any() && Model.MultiBookingSelectedEmployees.Any())
{
foreach(var sc2cbRel in Model.MultiBookingSelectedConceptCostBearerRelations)
foreach(var sc2cbRel in Model.SelectedConceptCostBearerRelations)
{
var roundedDuration = dauer;
@@ -4538,7 +4568,7 @@ namespace BeWoPlanerMobil.Controllers
{
try
{
return JsonConvert.SerializeObject(Model.MultiBookingSelectedConceptCostBearerRelations.Any());
return JsonConvert.SerializeObject(Model.SelectedConceptCostBearerRelations.Any());
}
catch(Exception exception)
{

View File

@@ -690,12 +690,18 @@ namespace BeWoPlanerMobil.Models
{
get
{
if(SelectedDurationUnit == "Stunden")
if (SelectedServiceRecord != null)
{
return SelectedServiceRecord is null ? string.Empty : (SelectedServiceRecord.RoundedDuration / 60).ToString();
var duration = SelectedServiceRecord.RoundedDuration;
if (SelectedDurationUnit == "Stunden")
{
return Math.Round(duration / 60, 2, MidpointRounding.AwayFromZero).ToString();
}
return Math.Round(duration, 0, MidpointRounding.AwayFromZero).ToString();
}
return SelectedServiceRecord?.RoundedDuration.ToString() ?? string.Empty;
return string.Empty;
}
}
@@ -803,9 +809,9 @@ namespace BeWoPlanerMobil.Models
public List<long> MultiBookingSelectedGroupOfPeopleOids { get { return MainSessionModel.MultiBookingSelectedGroupOfPeopleOids; } set { MainSessionModel.MultiBookingSelectedGroupOfPeopleOids = value; } }
public List<SupportConceptCostBearerRelDC> MultiBookingSelectedConceptCostBearerRelations { get; set; } = new List<SupportConceptCostBearerRelDC>();
//public List<SupportConceptCostBearerRelDC> MultiBookingSelectedConceptCostBearerRelations { get; set; }
public GroupBookingSelectionObject MultiBookingSelectionObject => new GroupBookingSelectionObject(MultiBookingSelectedConceptCostBearerRelations, MultiBookingSelectedGroupOfPeopleOids);
public GroupBookingSelectionObject MultiBookingSelectionObject => new GroupBookingSelectionObject(SelectedConceptCostBearerRelations, MultiBookingSelectedGroupOfPeopleOids);
public List<long> MultiBookingSelectedCostbearerRelOids { get { return MainSessionModel.MultiBookingSelectedCostbearerRelOids; } set { MainSessionModel.MultiBookingSelectedCostbearerRelOids = value; } }

View File

@@ -245,28 +245,40 @@ function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd
let dauer = (end.getTime() - start.getTime()) / 60000;
if (duration > 0 && true === isInvokedByStart && start >= end) {
end = new Date(start.getTime() + (false === isInMin ? duration * 60 : duration) / 60000);
if (duration > 0 && start >= end) {
dauer = (false === isInMin ? duration * 60 : duration);
endTimeInput.val(getTimeAsString(end));
endDateInput.val(getDateAsString(end));
if (true === isInvokedByStart) {
end = new Date(start.getTime() + dauer * 60000);
dauer = (end.getTime() - start.getTime()) * 60000;
endTimeInput.val(getTimeAsString(end));
endDateInput.val(getDateAsString(end));
}
else if (true === isInvokedByEnd) {
end.setDate(end.getDate() + 1);
var test = new Date(2025, 1, 31);
test.setDate(test.getDate() + 1);
//start = new Date(end.getTime() - dauer * 60000);
endTimeInput.val(getTimeAsString(end));
endDateInput.val(getDateAsString(end));
//startTimeInput.val(getTimeAsString(start));
//startDateInput.val(getDateAsString(start));
}
dauer = (end.getTime() - start.getTime()) / 60000;
}
if (duration > 0 && true === isInvokedByEnd && start >= end) {
start = new Date(end.getTime() - (false === isInMin ? duration * 60 : duration) / 60000);
startTimeInput.val(getTimeAsString(start));
startDateInput.val(getDateAsString(start));
dauer = (end.getTime() - start.getTime()) * 60000;
if (false === isInMin) {
dauer /= 60.0;
}
durationInput.val(dauer);
} else if (true === isStartTimeValid && true === isDurationValid) {
var newDuration = duration;
if(true === isFormatChange) {
if (true === isFormatChange) {
let newDurationValue = true === isInMin ? duration * 60.0 : duration / 60.0;
if(isNaN(newDurationValue)) {
@@ -274,7 +286,11 @@ function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd
} else {
durationInput.val(newDurationValue);
}
newDuration = newDurationValue;
if (true === isInMin)
{
newDuration = newDurationValue;
}
}
calcTimeWithDuration(startTimeValue, endTimeInput, start, newDuration, isFormatChange, isInMin);
@@ -318,7 +334,8 @@ function calcTimeWithDuration(timeAsString, timeElement, start, duration, isForm
start = combineDateAndTime(start, timeAsString);
const x = new Date(start.getTime() + duration * 60000);
timeElement.val(`${x.getMinutes().toString().padStart(2, "0")}:${x.getMinutes().toString().padStart(2, "0")}`);
var timeString = `${x.getHours().toString().padStart(2, "0")}:${x.getMinutes().toString().padStart(2, "0")}`;
timeElement.val(timeString);
}
function beiDaueraenderung(idPrefix) {
@@ -329,8 +346,8 @@ function beiDaueraenderung(idPrefix) {
const durationInput = $(`#${idPrefix}-duration-input`);
const startDateInput = $(`#${idPrefix}-start-date-input`);
const endDateInput = $(`#${idPrefix}-end-date-input`);
const isInMin = getIsZeiterfassungseinheitInMinutes();//hoursMinutesDropdown.length && hoursMinutesDropdown.text().replaceAll(/\s/g, "") === "Minuten" || 0 === hoursMinutesDropdown.length;
const isInMin = hoursMinutesDropdown.length === 0 || hoursMinutesDropdown.length > 0 && hoursMinutesDropdown.text().replaceAll(/\s/g, "") === "Minuten";
const startTimeCondition = startTimeInput.val().length > 0;
const endTimeCondition = endTimeInput.val().length > 0;
let duration = parseFloat(durationInput.val().replace(",", "."));

View File

@@ -182,8 +182,8 @@
$("#fehlerdetail-textarea").prop("disabled", false);
if ("@Model.IsInMultiBookingMode".toLowerCase() === "true") {
const isMultiBookingFormDisabled = "@Model.MultiBookingSelectedConceptCostBearerRelations.Any()".toLowerCase() === "false";
if ("@Model.IsInMultiBookingMode".toLowerCase() === "true") {
const isMultiBookingFormDisabled = "@Model.SelectedConceptCostBearerRelations.Any()".toLowerCase() === "false";
window.toggleMultiBookingForm(isMultiBookingFormDisabled);
}

View File

@@ -20,7 +20,7 @@
@{
var timeSpanColorClass2 = cb2Sc.IsAboutToExpire ? "text-bewo-is-about-to-expire" : cb2Sc.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
var checkedValue = Model.MultiBookingSelectedConceptCostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.Equals(cb2Sc.CostBearer2SupportConceptOid));
var checkedValue = Model.SelectedConceptCostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.Equals(cb2Sc.CostBearer2SupportConceptOid));
}
<div class="custom-control custom-checkbox custom-control-inline">

View File

@@ -68,7 +68,7 @@
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/trimCanvas.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/resources-list-utils.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/list-utils.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/service-record-time-calc.js?v=1.41")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/js-helper.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/logging.js?v=1.3")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/MoKPasswordSecurity.js?v=1.3")"></script>

View File

@@ -30,7 +30,6 @@
<log4net debug="true">
<appender name="logFile" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="logs\mobilelog.txt" />
<param name="LogFileName" value="logs\mobilelog.txt" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="dd.MM.yyyy" />
@@ -39,19 +38,32 @@
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<appender name="DebugSQL" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<logger name="NHibernnate.SQL" additivity="false">
<level value="ERROR" />
<appender-ref ref="DebugSQL" />
</logger>
<root>
<priority value="ERROR" />
<appender-ref ref="DebugSQL" />
<root>
<priority value="DEBUG" />
<appender-ref ref="logFile" />
</root>
<logger name="NHibernate">
<level value="WARN" />
</logger>
<logger name="NHibernate.Caches">
<level value="WARN" />
</logger>
<logger name="NHibernate.Engine.Cascade">
<level value="WARN" />
</logger>
<logger name="NHibernate.Loader.Loader">
<level value="WARN" />
</logger>
<logger name="NHibernate.SQL">
<level value="WARN" />
</logger>
<logger name="NHibernate.Search">
<level value="WARN" />
</logger>
</log4net>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
@@ -67,8 +79,8 @@
<add name="ASPxQueryBuilderDesignerHandlerModule" preCondition="integratedMode" verb="GET,POST" path="DXQB.axd" type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" /><remove name="OPTIONSVerbHandler" /><remove name="TRACEVerbHandler" /><add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /></handlers>
<security>
<requestFiltering allowDoubleEscaping="true">
<requestLimits maxQueryString="32768" maxUrl="65535" />
<requestFiltering allowDoubleEscaping="true" >
<requestLimits maxQueryString="32768" maxUrl="65535" maxAllowedContentLength="20971520" />
</requestFiltering>
</security>
<staticContent>
@@ -231,7 +243,7 @@
</authentication>
<sessionState timeout="20" />
<identity impersonate="false" />
<httpRuntime maxQueryStringLength="32768" maxRequestLength="8192" maxUrlLength="65536" />
<httpRuntime maxQueryStringLength="32768" maxRequestLength="20480" maxUrlLength="65536" />
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">