Files
BeWoPlaner/BeWoPlanerMobil/Controllers/ReportViewerController.cs
Lyndon Jetten 2f9495161a FaC:
Kalender: Enddatum bei Abwesenheiten im ToolTip korrigiert.
Verwaltung: Sessiontimeout für den MoK zwischen 20 und 60 Minuten einstellbar gemacht.
Auswertungen: Ansehenrechte hinzugefügt (hat man nur das Recht Auswertungen ansehen zu dürfen und sonst keine Auswertungsrechte (z.B. "Auswertungen Berichte ansehen" oder "Jahresberichte"), wird das Modul nicht angezeigt).

MoK (siehe "MoK Neuerungen Juni Release 2023.pdf"):
Zeiterfassung:
+ Berechnung der Dauer/Start/Ende korrigiert.
+ Hilfeplanbezeichnungen werden angezeigt.
+ Unterschriften sind löschbar und machen Monatsunterschriften ungültig (Warnung inklusive)
+ Infotext (dass die erneute Unterschrift nicht notwendig ist) wird im Unterschriftenformular angezeigt, wenn bereits eine Monatsunterschrift für den zu unterschreibenden Eintrag geleistet wurde.

Klienten:
+ Diagnosen hinzugefügt
+ Behinderungen hinzugefügt

Quittierungsbelege:
+ Neue Informationen von Monatsunterschriften: Ob für alle Zeiterfassungseinträge im ausgewählten Zeitraum gültig, ob die Monatsunterschrift auf dem Quittierungsbeleg angezeigt wird, Unterschrift von, geleistet am (sekundengenau), und geleistet für x erbrachte Leistungen.

Auswertungen:
+ Mitarbeiterstundenkonto hinzugefügt
2023-06-18 17:11:35 +02:00

331 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using BeWo.Report;
using BeWo.Service.Plugins;
using BeWoPlanerMobil.Models;
using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.DataContracts.Compact;
namespace BeWoPlanerMobil.Controllers
{
public class ReportViewerController : AbstractBaseController
{
private ReportViewerModel _Model;
public ReportViewerModel Model
{
get
{
if(!MobileSessionFacade.IsUserLoggedIn())
{
RedirectToActionPermanent("Index", "Login");
return null;
}
if(((ReportViewerModel)Session[ModelSessionConstants.ReportViewerModelKey])?.Employee is null)
{
_Model = new ReportViewerModel { Employee = MobileSessionFacade.LoggedInEmployee, ReportCreator = GetReportCreator() };
Session[ModelSessionConstants.ReportViewerModelKey] = _Model;
}
else
{
_Model = (ReportViewerModel)Session[ModelSessionConstants.ReportViewerModelKey];
}
return _Model;
}
}
public ActionResult ReportViewer()
{
if(Model is null)
{
return Logout();
}
Model.Report = null;
var month = DateTime.Today.Month;
var year = DateTime.Today.Year;
var first = new DateTime(year, month, 1).AddMonths(-1);
Model.SelectedYear = Model.SelectedYear ?? first.Year;
Model.SelectedMonth = Model.SelectedMonth ?? first.Month;
Model.AllEmployees = AbstractModel.HasRightMitarbeiterstundenkontoViewAll
? EmployeeService.GetActiveCompactEmployeesForEmployee(MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid)
: new List<CompactEmployeeDC> { MobileSessionFacade.LoggedInCompactEmployee };
// Alle Teams darf man nur sehen, wenn man das Recht "HasRightMitarbeiterstundenkontoViewAll" hat.
// Hat man weder das Recht "HasRightMitarbeiterstundenkontoViewAll" noch "HasRightMitarbeiterstundenkontoViewTeams", sieht man die Teams gar nicht.
// Hat man das Recht "HasRightMitarbeiterstundenkontoViewTeams", aber nicht das Recht "HasRightMitarbeiterstundenkontoViewAll", sieht man nur die Teams, deren Teamleiter man ist.
Model.AllTeams = AbstractModel.HasRightMitarbeiterstundenkontoViewAll
? EmployeeService.GetAllActiveCompactTeamsForEmployee(MobileSessionFacade.LoggedInEmployee.EmployeeOid)
: EmployeeService.FindLeadingCompactTeamsOfEmployee(MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid);
if(!AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
{
Model.SelectedEmployeeOid = MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid;
}
Model.ReportTypes = new List<SelectListItem>();
//if(AbstractModel.HasRightToViewReports)
//{
// Model.ReportTypes.Add(new SelectListItem
// {
// Text = "Berichte",
// Value = "0"
// });
//}
if(AbstractModel.HasRightToViewMitarbeiterstundenkonto)
{
Model.ReportTypes.Add(new SelectListItem
{
Text = "Mitarbeiterstundenkonto",
Value = "1"
});
}
// ToDo: Bis auf weiteres nur Mitarbeiterstundenkonto anzeigen!
Model.SelectedReportType = ReportType.Mitarbeiterstundenkonto;//ReportType.Berichte;
Model.Queries = QueryService.GetAllQueriesOfType(QueryType.Public);
return View(Model);
}
[Authorize]
public ActionResult DocumentWebViewerPartial()
{
return PartialView("DocumentWebViewerPartial", Model);
}
[Authorize]
public ActionResult LoadCustomReport(long? reportOid)
{
try
{
if (Model?.Employee?.EmployeeOid is null || reportOid is null)
{
return Logout();
}
var selectedQuery = Model.Queries.FirstOrDefault(query => query.Oid.Equals(reportOid.Value));
if (selectedQuery is null)
{
Model.Report = null;
return PartialView("DocumentWebViewerPartial", Model);
}
var dcid = $"{MobileSessionFacade.Tenant}queryeoid{Model.Employee.EmployeeOid.Value}";
var test = QueryService.ExecuteQuery(selectedQuery.Oid, null);
if (test is null)
{
return PartialView("DocumentWebViewerPartial", Model);
}
QueryService.PrepareQueryReport(test, dcid);
Model.Report = Model.ReportCreator.CreateQueryReport(selectedQuery.Oid, dcid);
}
catch (Exception e)
{
Log.Error(e);
}
return PartialView("DocumentWebViewerPartial", Model);
}
[Authorize]
//private string GetQueryReportUrl(QueryDC query)
//{
// var url = Request?.Url;
// if(Model?.Employee?.EmployeeOid is null || url is null || query is null)
// {
// return null;
// }
// //DEBUG: http://localhost:3777/service
// //RELEASE: https://app4.bewoplaner.de/service
// // http://localhost:3777/Host/ReportView.aspx?dcid=demoqueryeoid372&qoid=1304&type=QueryReport
// var urlSuffix = $"/ReportView.aspx?dcid={MobileSessionFacade.Tenant}queryeoid{Model.Employee.EmployeeOid.Value}&qoid={query.Oid}&type={Utils.EnumName(ReportTypes.QueryReport)}";
// return GetSiteOfOrigin() + urlSuffix;
//}
private string GetSiteOfOrigin()
{
if(Model?.Employee?.EmployeeOid is null)
{
return null;
}
var url = Request?.Url;
#if DEBUG
return "http://localhost:3777/Host";
#endif
return $"{url.Scheme}://{url.Host}/service";
}
[Authorize]
public ActionResult LoadViewerForm(string reportType)
{
if(Model is null)
{
return Logout();
}
Model.SelectedReportType = reportType == "0" ? ReportType.Berichte : ReportType.Mitarbeiterstundenkonto;
return PartialView("ReportViewerFormPartial", Model);
}
[Authorize]
public ActionResult LoadMitarbeiterstundenkonto(string parameters)
{
if(Model?.Employee?.EmployeeOid is null)
{
return Logout();
}
if(!string.IsNullOrWhiteSpace(parameters))
{
var splitParameters = parameters.Split(';');
if(splitParameters.Length == 6)
{
var month = int.Parse(splitParameters[0]);
var year = int.Parse(splitParameters[1]);
var isEmployee = bool.Parse(splitParameters[2]);
var all = bool.Parse(splitParameters[3]);
long? employeeOid = null;
List<long> teamOids = null;
long? oid = null;
if(long.TryParse(splitParameters[4], out var oOid))
{
oid = oOid;
}
var ansicht = int.Parse(splitParameters[5]);
var siteOfOrigin = GetSiteOfOrigin();
//var url = $"{siteOfOrigin}/ReportView.aspx?type={Utils.EnumName(ReportTypes.EmployeeHourReport)}";
if(isEmployee)
{
employeeOid = oid;
if(all || !AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
{
employeeOid = null;
}
if(!(employeeOid is null))
{
employeeOid = oid;
}
if(!AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
{
employeeOid = Model.Employee.EmployeeOid;
}
if(employeeOid > 0)
{
//url += $"&eoid={employeeOid}";
}
}
else
{
teamOids = new List<long>();
var teamOid = oid;
if(all || (!AbstractModel.HasRightMitarbeiterstundenkontoViewAll && !AbstractModel.HasRightMitarbeiterstundenkontoViewTeams))
{
teamOid = null;
}
if(!(teamOid is null))
{
teamOid = oid;
}
//url += "&toid=";
if(teamOid > 0 && !all)
{
//url += $"{teamOid}";
teamOids.Add(teamOid.Value);
}
else if(all)
{
// url += string.Join(",", Model.AllTeams.Select(team => team.TeamOid));
teamOids.AddRange(Model.AllTeams.Select(team => team.TeamOid));
}
}
//url += $"&m={month}&y={year}";
//if(ansicht != 0)
//{
// url += $"&ansicht={ansicht}";
//}
//var tempToken = DownloadService.CreateTemporaryToken(url, true);
//url += $"&token={tempToken}";
//var webClient = new WebClient();
//var data = webClient.DownloadData(url);
//var report = new XtraReport();
//using(var memoryStream = new MemoryStream(data))
//{
// report.PrintingSystem.LoadDocument(memoryStream);
//}
var start = new DateTime(year, month, 1);
var end = start.AddMonths(1);
var report = Model.ReportCreator.CreateEmployeeHourReport(employeeOid, teamOids, start, end, ansicht);
Model.Report = report;
}
}
return PartialView("DocumentWebViewerPartial", Model);
}
private AbstractReportCreator GetReportCreator()
{
var creator = PluginLoader.FindClass<DefaultReportCreator>();
creator.Tenant = PluginLoader.Tenant;
creator.ReportPath = PluginLoader.CustomerPluginPath();
#if DEBUG
creator.TempPath = BS.Shared.Core.Utils.CreateSavePath(AppDomain.CurrentDomain.BaseDirectory, @"demo\temp");
#else
creator.TempPath = BS.Shared.Core.Utils.CreateSavePath(AppDomain.CurrentDomain.BaseDirectory, PluginLoader.Tenant + @"\temp");
#endif
Log.Info(String.Format("Create ReportCreator: {0}, Tenant={1}, ReportPath={2}, TempPath={3}", creator.GetType().FullName, creator.Tenant, creator.ReportPath, creator.TempPath));
return creator;
}
}
}