Das Mehrfachbuchungsformular hat ebenfalls die Schnittmenge der Leistungen und Kategorien von den ausgewählten Hilfeplänen. Das Caching ist wieder aktiviert. Und lädt pro Post-Aufruf nur noch einmal 13 MB und danach nur noch 300 kb herunter. Überall konsequent geprüft, ob das Model nicht null ist und falls dem so ist, wird ausgeloggt, damit es zu keinen Fehlern mehr kommt.
309 lines
11 KiB
C#
309 lines
11 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
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;
|
|
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;
|
|
}
|
|
}
|
|
|
|
[Authorize]
|
|
public ActionResult ReportViewer()
|
|
{
|
|
if(Model is null)
|
|
{
|
|
TempData[TempDataConstants.DoLogoutKey] = true;
|
|
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.GetAllActiveEmployeesCompact()
|
|
: 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()
|
|
{
|
|
if(Model is null)
|
|
{
|
|
TempData[TempDataConstants.DoLogoutKey] = true;
|
|
}
|
|
|
|
return PartialView("DocumentWebViewerPartial", Model);
|
|
}
|
|
|
|
[Authorize]
|
|
public ActionResult LoadCustomReport(long? reportOid)
|
|
{
|
|
try
|
|
{
|
|
if (Model?.Employee?.EmployeeOid is null || reportOid is null)
|
|
{
|
|
TempData[TempDataConstants.DoLogoutKey] = true;
|
|
return PartialView("DocumentWebViewerPartial");
|
|
}
|
|
|
|
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;
|
|
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);
|
|
var queryReport = Model.ReportCreator.CreateQueryReport(selectedQuery.Oid, dcid);
|
|
Model.Report = queryReport;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.Error(e);
|
|
TempData[TempDataConstants.ErrorMessageKey] = e.Message;
|
|
}
|
|
|
|
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)
|
|
{
|
|
TempData[TempDataConstants.DoLogoutKey] = true;
|
|
return PartialView("ReportViewerFormPartial");
|
|
}
|
|
|
|
Model.SelectedReportType = reportType == "0" ? ReportType.Berichte : ReportType.Mitarbeiterstundenkonto;
|
|
|
|
return PartialView("ReportViewerFormPartial", Model);
|
|
}
|
|
|
|
[Authorize]
|
|
public ActionResult LoadMitarbeiterstundenkonto(string parameters)
|
|
{
|
|
if(Model?.Employee?.EmployeeOid is null)
|
|
{
|
|
TempData[TempDataConstants.DoLogoutKey] = true;
|
|
return PartialView("DocumentWebViewerPartial");
|
|
}
|
|
|
|
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]);
|
|
|
|
if(isEmployee)
|
|
{
|
|
employeeOid = oid;
|
|
|
|
if(all || !AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
|
|
{
|
|
employeeOid = null;
|
|
}
|
|
|
|
if(!(employeeOid is null))
|
|
{
|
|
employeeOid = oid;
|
|
}
|
|
|
|
if(!AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
|
|
{
|
|
employeeOid = Model.Employee.EmployeeOid;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
teamOids = new List<long>();
|
|
|
|
var teamOid = oid;
|
|
|
|
if(all || (!AbstractModel.HasRightMitarbeiterstundenkontoViewAll && !AbstractModel.HasRightMitarbeiterstundenkontoViewTeams))
|
|
{
|
|
teamOid = null;
|
|
}
|
|
|
|
if(!(teamOid is null))
|
|
{
|
|
teamOid = oid;
|
|
}
|
|
|
|
if(teamOid > 0 && !all)
|
|
{
|
|
teamOids.Add(teamOid.Value);
|
|
}
|
|
else if(all)
|
|
{
|
|
teamOids.AddRange(Model.AllTeams.Select(team => team.TeamOid));
|
|
}
|
|
}
|
|
|
|
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 static AbstractReportCreator GetReportCreator()
|
|
{
|
|
AbstractReportCreator creator = PluginLoader.FindClass<DefaultReportCreator>() ?? new DefaultReportCreator();
|
|
|
|
var mobileBaseDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\Host\");
|
|
#if DEBUG
|
|
creator.TempPath = BS.Shared.Core.Utils.CreateSavePath(mobileBaseDirectory, @"demo\temp");
|
|
#else
|
|
creator.TempPath = BS.Shared.Core.Utils.CreateSavePath(mobileBaseDirectory, PluginLoader.Tenant + @"\temp");
|
|
#endif
|
|
return creator;
|
|
}
|
|
}
|
|
} |