Files
BeWoPlaner/BeWoPlanerMobil/Controllers/CustomerController.cs
Lyndon Jetten 5939aef72c Fat-Client:
Es ist möglich, allen Termin-Einladungen auf einmal zuzusagen

MoK:
DevExpress von Version 17.1 auf 21.1 aktualisiert
Reports testweise eingebaut
DevExpress-Scheduler testweise eingebaut
2021-10-13 16:00:33 +02:00

236 lines
8.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
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.Compact;
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 == null)
{
_Model = new CustomerModel{Employee = MobileSessionFacade.LoggedInEmployee};
Session[ModelSessionConstants.CustomerModelKey] = _Model;
}
else
{
_Model = (CustomerModel)Session[ModelSessionConstants.CustomerModelKey];
}
return _Model;
}
}
[Authorize]
public ActionResult Customer()
{
if (!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
return Logout();
}
var customerFilter = MobileUserSettingsUtils.GetSettingValueAsEnum(AbstractModel.UserSettings, SettingsKeys.CustomerFilterCustomers, CustomerFilterEnum.MyCustomer);
Model.SelectedCustomerFilter = customerFilter;
InitViewModel();
return View(Model);
}
private void InitViewModel()
{
if(Model == null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
Logout();
}
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>();
}
// ReportTypes laden! Erstmal nur Medikamentenansicht
if(AbstractModel.IsAllowedToSeeMedikamentenliste)
{
Model.ReportTypes = new List<CustomerReportType> { CustomerReportType.Medikamentenliste, CustomerReportType.Test };
}
}
[Authorize]
public ActionResult PreselectCustomer(long? customerOid)
{
if (Model == 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.SelectedCustomer = CustomerService.LoadCustomer(customerOid.Value);
}
return RedirectToActionPermanent("Customer");
}
[Authorize]
[HttpPost]
public ActionResult SelectCustomer(FormCollection formCollection)
{
try
{
if (Model == 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;
Model.SelectedCustomer = selectedCustomerOid != -1 ? CustomerService.LoadCustomer(selectedCustomerOid) : null;
}
}
return RedirectToActionPermanent("Customer");
}
catch (Exception exception)
{
Log.Error(exception.Message, exception);
}
return RedirectToActionPermanent("Customer");
}
[HttpPost]
[Authorize]
public ActionResult SetCustomerFilter(FormCollection formCollection)
{
if(Model == 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;
}
UpdateSettings(SettingsKeys.CustomerFilterCustomers, customerFilter.ToString());
return RedirectToActionPermanent("Customer");
}
[Authorize]
public FileResult DownloadFile(long fileOid)
{
if (Model == 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 == 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;
var customerOid = CustomerService.UpdateCustomer(Model.SelectedCustomer);
Model.SelectedCustomer = CustomerService.LoadCustomer(customerOid);
}
return _LeerzeichenFuerGetMethoden;
}
[Authorize]
[HttpPost]
public ActionResult SelectReport(FormCollection formCollection)
{
if(Model == null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
return Logout();
}
var selectedReportType = formCollection[nameof(Model.SelectedReportType)];
if(int.TryParse(selectedReportType, out var reportTypeInt))
{
if(AbstractModel.IsAllowedToSeeMedikamentenliste && reportTypeInt == (int) CustomerReportType.Medikamentenliste)
{
// MedListType = true => Bedarfsliste
var listen = Model.SelectedCustomer.Medikamentenverordnungslisten;
var aktuelleListe = listen.FirstOrDefault(f => f.Gueltig && f.MedListType == false);
if(aktuelleListe != null && Request?.Url != null)
{
using (var memoryStream = ReportService.CreateMedikamentenlistenReport(aktuelleListe.MedikamentenverordnungslistenOid.Value, MobileSessionFacade.Tenant))
{
var report = new XtraReport();
report.PrintingSystem.LoadDocument(memoryStream);
Model.Report = report;
}
}
}
}
return RedirectToActionPermanent("Customer");
}
}
public enum CustomerReportType
{
Medikamentenliste = 0,
Test = 1
}
}