Files
BeWoPlaner/BeWoPlanerMobil/Controllers/CustomerController.cs
Lyndon Jetten ac65422235 Server:
Reines SQL holt die Unterschriftenwerte aus der ServiceRecordHistory-Tabelle

MoK:
    Abwesenheiten bei Klienten angefangen. Nur im Debug-Modus sichtbar
2023-11-02 16:25:36 +01:00

514 lines
20 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using BeWo.Report.DefaultReports;
using BeWo.View.Navigation.Filter;
using BeWoPlanerMobil.Models;
using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using DevExpress.XtraReports.UI;
namespace BeWoPlanerMobil.Controllers
{
public class CustomerController : AbstractBaseController
{
private CustomerModel _Model;
public CustomerModel Model
{
get
{
if (!MobileSessionFacade.IsUserLoggedIn())
{
Logout();
return null;
}
if (((CustomerModel) Session[ModelSessionConstants.CustomerModelKey])?.Employee is null)
{
_Model = new CustomerModel{Employee = MobileSessionFacade.LoggedInEmployee};
Session[ModelSessionConstants.CustomerModelKey] = _Model;
}
else
{
_Model = (CustomerModel)Session[ModelSessionConstants.CustomerModelKey];
}
return _Model;
}
}
[Authorize]
public ActionResult Customer()
{
try
{
if (!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
return Logout();
}
var customerFilter = MobileUserSettingsUtils.GetSettingValueAsEnum(AbstractModel.UserSettings, SettingsKeys.CustomerFilterCustomers, CustomerFilterEnum.MyCustomer);
Model.SelectedCustomerFilter = customerFilter;
InitViewModel();
}
catch (Exception e)
{
Log.Info($"Exception: " + e.Message + "\n" + e.StackTrace);
if (e.InnerException != null)
{
Log.Info($"\n\nInnerException: " + e.InnerException.Message + "\n" + e.InnerException.StackTrace);
}
throw;
}
return View(Model);
}
private void InitViewModel()
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
Logout();
return;
}
if(Model.Employee?.EmployeeOid.HasValue ?? false)
{
Model.Customers = EmployeeService.GetActiveCustomersForEmployee(Model.Employee.EmployeeOid.Value, Model.SelectedCustomerFilter).OrderBy(customer => customer.LastName).ToList();
}
else
{
Model.Customers = new List<CompactCustomerDC>();
}
if(AbstractModel.IsAllowedToSeeMedikamentenliste)
{
Model.ReportTypes = new List<CustomerReportType> { CustomerReportType.Medikamentenliste, CustomerReportType.Bedarfsmedikation, CustomerReportType.Historie };
}
Model.AllAbsenceReasons = AbstractModel.HasRightToViewCustomerAbsenceTimes ? CustomerService.GetAllAbsenceReasons() : new List<AbsenceReasonDC>();
}
[Authorize]
public ActionResult PreselectCustomer(long? customerOid)
{
if (Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
return Logout();
}
InitViewModel();
if(customerOid > 0 && Model.Customers.Any(customer => customer.CustomerOid.Equals(customerOid.Value)))
{
Model.SelectedCustomerOid = customerOid;
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, customerOid.Value);
var customer = CustomerService.LoadCustomer(customerOid.Value);
Model.ICD10Diagnosen = OperationsService.GetDiagiosisStringsForICD10Codes(customer.ICD10DiagnosisCodes);
Model.SelectedCustomer = customer;
var bargeldkassen = OperationsService.LoadBargeldkassenForObject(TableID.Customer, customerOid.Value);
Model.Bargeldkassen = bargeldkassen;
}
return RedirectToActionPermanent("Customer");
}
[Authorize]
[HttpPost]
public ActionResult SelectCustomer(FormCollection formCollection)
{
try
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
return Logout();
}
var selectedCustomerOidString = formCollection[FormCollectionConstants.SelectedCustomerOidKey];
if (long.TryParse(selectedCustomerOidString, out var selectedCustomerOid))
{
var isCustomerInList = Model.Customers.Any(customer => customer.CustomerOid == selectedCustomerOid);
if(isCustomerInList)
{
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, selectedCustomerOid);
Model.SelectedCustomerOid = selectedCustomerOid == -1 ? (long?)null : selectedCustomerOid;
var customer = selectedCustomerOid != -1 ? CustomerService.LoadCustomer(selectedCustomerOid) : null;
if(!(customer is null))
{
Model.ICD10Diagnosen = OperationsService.GetDiagiosisStringsForICD10Codes(customer.ICD10DiagnosisCodes);
}
Model.SelectedCustomer = customer;
var bargeldkassen = OperationsService.LoadBargeldkassenForObject(TableID.Customer, selectedCustomerOid);
Model.Bargeldkassen = bargeldkassen;
}
}
return RedirectToActionPermanent("Customer");
}
catch (Exception exception)
{
Log.Error(exception.Message, exception);
}
return RedirectToActionPermanent("Customer");
}
[HttpPost]
[Authorize]
public ActionResult SetCustomerFilter(FormCollection formCollection)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
return Logout();
}
var selectedCustomerFilter = formCollection[nameof(Model.SelectedCustomerFilter)];
if(!Enum.TryParse(selectedCustomerFilter, out CustomerFilterEnum customerFilter))
{
customerFilter = CustomerFilterEnum.MyCustomer;
}
UpdateApplicationSettings(SettingsKeys.CustomerFilterCustomers, customerFilter.ToString());
return RedirectToActionPermanent("Customer");
}
[Authorize]
public FileResult DownloadFile(long fileOid)
{
if (Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
Logout();
return null;
}
var fileAttachment = DownloadService.GetFileAttachmentForMobile(fileOid, MobileSessionFacade.Tenant);
return File(fileAttachment.BinaryData, "application/octet-stream", fileAttachment.FileName);
}
[Authorize]
public string SaveEditedNotice(string newNotice)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
Logout();
return LeerzeichenFuerGetMethoden;
}
var isAllowedToEdit = MobileSessionFacade.LoggedInUser.CheckForAtLeastOneRight(new List<UserRightType> { UserRightType.CustomerView_Edit, UserRightType.EditAll });
if(isAllowedToEdit && Model.SelectedCustomer != null)
{
Model.SelectedCustomer.Notice = newNotice?.RemoveUppercaseEsszett();
var customerOid = CustomerService.UpdateCustomer(Model.SelectedCustomer);
Model.SelectedCustomer = CustomerService.LoadCustomer(customerOid);
}
return LeerzeichenFuerGetMethoden;
}
[Authorize]
[HttpPost]
public ActionResult SelectReport(FormCollection formCollection)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer") || !AbstractModel.IsAllowedToSeeMedikamentenliste)
{
return Logout();
}
Model.Report = null;
if(int.TryParse(formCollection["report-type-input"], out var selectedReportTypeInt))
{
var selectedReportType = (CustomerReportType) selectedReportTypeInt;
SelectReport(selectedReportType);
}
return RedirectToActionPermanent("Customer");
}
private void SelectReport(CustomerReportType selectedReportType)
{
Model.SelectedReportType = selectedReportType;
GenerateMobileMedListForSelectedCustomer();
}
public void GenerateMobileMedListForSelectedCustomer(long? selectedMedListOid = null)
{
if(Model.SelectedCustomerOid is null)
{
return;
}
long? medListOid = null;
var customerOid = Model.SelectedCustomerOid.Value;
switch(Model.SelectedReportType)
{
case CustomerReportType.Medikamentenliste:
medListOid = CustomerService.GetActiveMedListByTypeForCustomer(customerOid, false);
break;
case CustomerReportType.Bedarfsmedikation:
medListOid = CustomerService.GetActiveMedListByTypeForCustomer(customerOid, true);
break;
case CustomerReportType.Historie:
medListOid = selectedMedListOid;
break;
}
var medList = Model.SelectedCustomer.Medikamentenverordnungslisten.FirstOrDefault(f => f.MedikamentenverordnungslistenOid == medListOid);
if(medList?.MedikamentenverordnungslistenOid is null || Request?.Url is null)
{
return;
}
Model.ReportName = $"Medikamentenverordnung vom {medList.ErstellDatum}";
using (var memoryStream = ReportService.CreateMedikamentenlistenReport(medList.MedikamentenverordnungslistenOid.Value, MobileSessionFacade.Tenant))
{
var medikamentenverordnungslistenReport = new MedikamentenverordnungslistenReport();
medikamentenverordnungslistenReport.PrintingSystem.LoadDocument(memoryStream);
Model.Report = medikamentenverordnungslistenReport;
}
}
public ActionResult UpdateCustomer(FormCollection formCollection)
{
if(Model is null)
{
return Logout();
}
var firstname = formCollection["vorname"]?.RemoveUppercaseEsszett();
var lastname = formCollection["nachname"]?.RemoveUppercaseEsszett();
var geburtdatum = formCollection["geburtstag"]?.RemoveUppercaseEsszett();
var geschlecht = formCollection["geschlecht"]?.RemoveUppercaseEsszett();
var adresszusatz = formCollection["adresszusatz"]?.RemoveUppercaseEsszett();
var street = formCollection["strasse"]?.RemoveUppercaseEsszett();
var postalCode = formCollection["plz"]?.RemoveUppercaseEsszett();
var city = formCollection["ort"]?.RemoveUppercaseEsszett();
var nameInvoiceAddress = formCollection["name-rechnungsadresse"]?.RemoveUppercaseEsszett();
var streetInvoiceAddress = formCollection["strasse-rechnungsadresse"]?.RemoveUppercaseEsszett();
var postalCodeInvoiceAddress = formCollection["plz-rechnungsadresse"]?.RemoveUppercaseEsszett();
var cityInvoiceAddress = formCollection["ort-rechnungsadresse"]?.RemoveUppercaseEsszett();
var mobile = formCollection["handy"]?.RemoveUppercaseEsszett();
var phone = formCollection["telefon"]?.RemoveUppercaseEsszett();
var fax = formCollection["fax"]?.RemoveUppercaseEsszett();
var eMailAddress = formCollection["mail"]?.RemoveUppercaseEsszett();
var notice = formCollection["notiz"]?.RemoveUppercaseEsszett();
var customer = Model.SelectedCustomer;
if(customer is null)
{
return RedirectToActionPermanent("Customer");
}
customer.FirstName = firstname;
customer.LastName = lastname;
if(DateTime.TryParse(geburtdatum, out var dateOfBirth))
{
customer.DateOfBirth = dateOfBirth;
}
if(int.TryParse(geschlecht, out var sexIndex))
{
var castSex = sexIndex >= 0 ? (Sex?)sexIndex : null;
customer.Sex = castSex;
}
customer.AddressLine1 = adresszusatz;
customer.Street = street;
customer.PostalCode = postalCode;
customer.Town = city;
customer.InvoiceAddressLine1 = nameInvoiceAddress;
customer.InvoiceAddressStreet = streetInvoiceAddress;
customer.InvoiceAddressPostalCode = postalCodeInvoiceAddress;
customer.InvoiceAddressTown = cityInvoiceAddress;
var mobileContactInfo = customer.ContactInformations.FirstOrDefault(contactInformation => contactInformation.ContactType == ContactType.business_MobilePhone) ?? new ContactDC { ContactType = ContactType.business_MobilePhone };
mobileContactInfo.ContactValue = mobile;
if(customer.ContactInformations.All(a => a.ContactType != ContactType.business_MobilePhone))
{
customer.ContactInformations.Add(mobileContactInfo);
}
var phoneContactInfo = customer.ContactInformations.FirstOrDefault(contactInformation => contactInformation.ContactType == ContactType.business_Phone) ?? new ContactDC { ContactType = ContactType.business_Phone };
phoneContactInfo.ContactValue = phone;
if(customer.ContactInformations.All(a => a.ContactType != ContactType.business_Phone))
{
customer.ContactInformations.Add(phoneContactInfo);
}
var faxContactInfo = customer.ContactInformations.FirstOrDefault(contactInformation => contactInformation.ContactType == ContactType.business_Fax) ?? new ContactDC { ContactType = ContactType.business_Fax };
faxContactInfo.ContactValue = fax;
if(customer.ContactInformations.All(a => a.ContactType != ContactType.business_Fax))
{
customer.ContactInformations.Add(faxContactInfo);
}
var eMailContactInfo = customer.ContactInformations.FirstOrDefault(contactInformation => contactInformation.ContactType == ContactType.business_Mail) ?? new ContactDC { ContactType = ContactType.business_Mail };
eMailContactInfo.ContactValue = eMailAddress;
if(customer.ContactInformations.All(a => a.ContactType != ContactType.business_Mail))
{
customer.ContactInformations.Add(eMailContactInfo);
}
customer.Notice = notice;
CustomerService.UpdateCustomer(customer);
return RedirectToActionPermanent("PreselectCustomer", new { customerOid = customer.CustomerOid });
}
[Authorize]
[HttpPost]
public ActionResult ViewMedListFromHistoryList(FormCollection formCollection)
{
if(long.TryParse(formCollection["med-list-oid"], out var medListOid))
{
Model.SelectedReportType = CustomerReportType.Historie;
GenerateMobileMedListForSelectedCustomer(medListOid);
}
return RedirectToActionPermanent("Customer");
}
[Authorize]
[HttpPost]
public ActionResult DeleteMedListFromHistoryList(FormCollection formCollection)
{
if(long.TryParse(formCollection["med-list-oid"], out var medListOid))
{
Model.SelectedReportType = CustomerReportType.Historie;
CustomerService.DeleteMedikamentenverordnungsliste(medListOid);
}
return RedirectToActionPermanent("Customer");
}
[Authorize]
public string ResetReport()
{
Model.Report = null;
return LeerzeichenFuerGetMethoden;
}
#region Bargeldkassen
// GetBargeldkassenName
// SaveBargeldkassenName
// DeleteBargeldkasse
// DownloadBargeldkassenPdf
// DownloadTransactionPdf
// SaveTransactionSignature
[Authorize]
public string GetBargeldkassenName(long oid)
{
if(Model is null)
{
Logout();
return LeerzeichenFuerGetMethoden;
}
var bargeldkassenname = Model.Bargeldkassen.FirstOrDefault(bargeldkasse => bargeldkasse.BargeldkassenOid.HasValue && bargeldkasse.BargeldkassenOid.Value.Equals(oid))?.Kassenname;
return bargeldkassenname ?? LeerzeichenFuerGetMethoden;
}
// ToDo: Erstmal durch Get
[Authorize]
public string SaveBargeldkassenName(string newName, long oid)
{
if(Model is null)
{
Logout();
return LeerzeichenFuerGetMethoden;
}
var bargeldkasse = Model.Bargeldkassen.FirstOrDefault(bk => bk.BargeldkassenOid.HasValue && bk.BargeldkassenOid.Value.Equals(oid));
if(bargeldkasse is null || string.IsNullOrWhiteSpace(newName) || newName.Equals(bargeldkasse.Kassenname) || Model.SelectedCustomerOid is null)
{
return LeerzeichenFuerGetMethoden;
}
bargeldkasse.Kassenname = newName;
OperationsService.UpdateBargeldkasse(bargeldkasse);
Model.Bargeldkassen = OperationsService.LoadBargeldkassenForObject(TableID.Customer, Model.SelectedCustomerOid.Value);
return LeerzeichenFuerGetMethoden;
}
[Authorize]
[HttpPost]
public ActionResult DeleteBargeldkasse(FormCollection formCollection)
{
if(Model is null || !long.TryParse(formCollection["bk-to-delete-oid"], out var bargeldkassenOid) || Model.SelectedCustomerOid is null)
{
return Logout();
}
var bargeldkasse = Model.Bargeldkassen.FirstOrDefault(f => f.BargeldkassenOid.HasValue && f.BargeldkassenOid.Value.Equals(bargeldkassenOid));
if(bargeldkasse?.BargeldkassenVersion is null)
{
return RedirectToActionPermanent("Customer");
}
var bargeldkassenVersion = bargeldkasse.BargeldkassenVersion.Value;
OperationsService.DeactivateBargeldkasse(bargeldkassenOid, bargeldkassenVersion);
Model.Bargeldkassen = OperationsService.LoadBargeldkassenForObject(TableID.Customer, Model.SelectedCustomerOid.Value);
return RedirectToActionPermanent("Customer");
}
#endregion
}
public enum CustomerReportType
{
Medikamentenliste = 0,
Bedarfsmedikation = 1,
Historie = 2
}
}