2026-08-03 14:27:22 +02:00
using BeWo.Data.Entities ;
2023-06-07 17:38:11 +02:00
using BeWo.Report ;
using BeWo.Service.Plugins ;
2024-07-24 16:45:56 +02:00
using BeWo.View.Navigation.Filter ;
2023-03-16 13:57:04 +01:00
using BeWoPlanerMobil.Models ;
using BeWoPlanerMobil.Service ;
using BeWoPlanerMobil.Util ;
2026-08-03 14:27:22 +02:00
using Bogus.DataSets ;
2023-03-16 13:57:04 +01:00
using BS.Shared ;
2024-09-12 14:55:35 +02:00
using BS.Shared.Core ;
2023-11-02 16:25:36 +01:00
using BS.Shared.DataContracts ;
2023-05-17 13:58:10 +02:00
using BS.Shared.DataContracts.Compact ;
2024-08-02 12:11:53 +02:00
using BS.Shared.Extensions ;
2026-08-03 14:27:22 +02:00
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Linq ;
using System.Web.Mvc ;
2023-03-16 13:57:04 +01:00
2025-03-25 17:36:15 +01:00
// Controller des Auswertungsmoduls
2023-03-16 13:57:04 +01:00
namespace BeWoPlanerMobil.Controllers
{
2024-07-24 16:45:56 +02:00
public class ReportViewerController : ReportBaseController
2023-03-16 13:57:04 +01:00
{
private ReportViewerModel _Model ;
public ReportViewerModel Model
{
get
{
2026-03-27 16:59:10 +01:00
if ( false = = MobileSessionFacade . IsUserLoggedIn ( ) )
2023-03-16 13:57:04 +01:00
{
RedirectToActionPermanent ( "Index" , "Login" ) ;
return null ;
}
2025-06-11 22:56:25 +02:00
2026-03-27 16:59:10 +01:00
if ( _Model is null )
2023-03-16 13:57:04 +01:00
{
2025-06-11 22:56:25 +02:00
_Model = new ReportViewerModel { ReportCreator = GetReportCreator ( ) } ;
InitModel ( _Model ) ;
InitViewModel ( ) ;
2023-03-16 13:57:04 +01:00
}
return _Model ;
}
}
2025-06-11 22:56:25 +02:00
private void InitViewModel ( )
2023-03-16 13:57:04 +01:00
{
2023-05-15 11:54:13 +02:00
Model . Report = null ;
2023-03-16 13:57:04 +01:00
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 ;
2024-08-02 12:11:53 +02:00
2025-06-11 22:56:25 +02:00
Model . AllEmployees = Model . HasRightMitarbeiterstundenkontoViewAll
? EmployeeService . GetAllActiveEmployeesCompact ( )
: new List < CompactEmployeeDC > { LoggedInUser . Employee } ;
2023-03-16 13:57:04 +01:00
2023-05-17 13:58:10 +02:00
// 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.
2025-06-11 22:56:25 +02:00
Model . AllTeams = Model . HasRightMitarbeiterstundenkontoViewAll
? EmployeeService . GetAllActiveCompactTeamsForEmployee ( LoggedInEmployee . EmployeeOid )
: EmployeeService . FindLeadingCompactTeamsOfEmployee ( LoggedInUser . Employee . EmployeeOid ) ;
if ( false = = Model . HasRightMitarbeiterstundenkontoViewAll | | Model . SelectedEmployeeOid is null )
{
Model . SelectedEmployeeOid = LoggedInUser . Employee . EmployeeOid ;
}
if ( Model . SelectedEmployeeOid . HasValue )
{
Model . SelectedEmployee = Model . AllEmployees . FirstOrDefault ( employee = > employee . EmployeeOid . Equals ( Model . SelectedEmployeeOid . Value ) ) ;
}
2023-05-17 13:58:10 +02:00
2025-06-11 22:56:25 +02:00
if ( Model . SelectedTeamOid . HasValue )
2023-05-17 13:58:10 +02:00
{
2025-06-11 22:56:25 +02:00
Model . SelectedTeam = Model . AllTeams . FirstOrDefault ( team = > team . TeamOid . Equals ( Model . SelectedTeamOid . Value ) ) ;
2023-05-17 13:58:10 +02:00
}
2025-06-11 22:56:25 +02:00
2023-05-17 13:58:10 +02:00
Model . ReportTypes = new List < SelectListItem > ( ) ;
2024-07-24 16:45:56 +02:00
#if DEBUG
2025-06-11 22:56:25 +02:00
if ( Model . HasRightToViewReports )
2023-05-17 13:58:10 +02:00
{
Model . ReportTypes . Add ( new SelectListItem
2023-03-16 13:57:04 +01:00
{
2024-08-02 12:11:53 +02:00
Text = "Berichte" ,
Value = "0"
2023-05-17 13:58:10 +02:00
} ) ;
2023-03-16 13:57:04 +01:00
2024-09-12 14:55:35 +02:00
Model . AllEmployeesForQueries = EmployeeService . GetAllActiveEmployeesCompact ( ) ;
Model . AllCustomersForQueries = EmployeeService . GetActiveCompactCustomersForEmployee ( null ) ;
2023-03-16 13:57:04 +01:00
2024-09-12 14:55:35 +02:00
Model . Queries = QueryService . GetAllQueriesOfType ( QueryType . Public ) ;
2023-03-16 13:57:04 +01:00
2025-06-11 22:56:25 +02:00
if ( Model . SelectedQueryOid . HasValue )
{
Model . SelectedQuery = Model . Queries . FirstOrDefault ( q = > q . Oid . Equals ( Model . SelectedQueryOid . Value ) ) ;
}
2024-09-12 14:55:35 +02:00
var names2ValueListEntryTypes = new Dictionary < string , ValueListEntryType > ( ) ;
2025-06-11 22:56:25 +02:00
foreach ( var query in Model . Queries . Where ( q = > q . Parameter ? . Any ( ) ? ? false ) )
2024-08-13 11:29:40 +02:00
{
2025-06-11 22:56:25 +02:00
foreach ( var parameter in query . Parameter . Where ( p = > p . ParamType = = QueryParameterType . ValueListEntryType ) )
2024-09-12 14:55:35 +02:00
{
var parameterName = parameter . Name ;
2025-06-11 22:56:25 +02:00
if ( ! ( parameterName ? . Contains ( "_" ) ? ? false ) )
2024-09-12 14:55:35 +02:00
{
continue ;
}
var name2Type = parameterName . Split ( '_' ) ;
var name = name2Type [ 0 ] ;
var type = name2Type [ 1 ] ;
2025-06-11 22:56:25 +02:00
if ( ! int . TryParse ( type , out var typeEnumInt ) )
2024-09-12 14:55:35 +02:00
{
continue ;
}
2025-06-11 22:56:25 +02:00
var valueListEntryType = ( ValueListEntryType ) typeEnumInt ;
2024-09-12 14:55:35 +02:00
names2ValueListEntryTypes . AddIfNotIn ( new KeyValuePair < string , ValueListEntryType > ( name , valueListEntryType ) ) ;
}
2024-08-13 11:29:40 +02:00
}
2024-09-12 14:55:35 +02:00
Model . AllValueListEntriesForQuery = ValueListService . GetAllValueListEntrysByTypes ( names2ValueListEntryTypes . Values . ToList ( ) ) . ToList ( ) ;
2024-07-24 16:45:56 +02:00
2024-09-12 14:55:35 +02:00
Model . AllValueListEntriesForQuery . DoForEach ( valueListEntry = >
{
Model . ValueListEntryTypes2ValueListEntries . AddOrUpdateValueInDictionary ( valueListEntry . Type , valueListEntry ) ;
} ) ;
2024-08-02 12:11:53 +02:00
2025-06-11 22:56:25 +02:00
if ( Model . LoggedInEmployee ? . EmployeeOid . HasValue ? ? false )
2024-09-12 14:55:35 +02:00
{
2025-06-11 22:56:25 +02:00
Model . SupportConcepts = EmployeeService . GetActiveSupportConceptsForEmployee ( Model . LoggedInEmployee . EmployeeOid , CustomerFilterEnum . All ) ;
2024-09-12 14:55:35 +02:00
}
else
{
Model . SupportConcepts = new List < SupportConceptDC > ( ) ;
}
Model . SupportConcepts . DoForEach ( sc = > Model . CostBearer2SupportConceptRels . AddRangeIfElementsNotIn ( sc . CostBearerRelations ) ) ;
2024-07-24 16:45:56 +02:00
2025-06-11 22:56:25 +02:00
if ( Model . SelectedCostBearer2SupportConceptRelListObject is null )
2024-09-12 14:55:35 +02:00
{
2025-06-11 22:56:25 +02:00
Model . SelectedCostBearer2SupportConceptRelListObject = Model . CostBearer2SupportConceptRelListObjects . FirstOrDefault ( f = > f . CostBearer2SupportConceptOid = = - 1 ) ? ? Model . CostBearer2SupportConceptRelListObjects . First ( ) ;
2024-09-12 14:55:35 +02:00
}
Model . AllOrganisationForQuery = CustomerService . GetAllActiveOrganisationsCompact ( ) ;
Model . AllTeamsForQueries = EmployeeService . GetAllActiveCompactTeamsForEmployee ( null ) ;
Model . AllServiceCategoriesForQueries = OperationsService . GetAllServiceCategories ( ) ;
}
2024-08-02 12:11:53 +02:00
#endif
2024-07-24 16:45:56 +02:00
2025-06-11 22:56:25 +02:00
if ( Model . HasRightToViewMitarbeiterstundenkonto )
2024-07-24 16:45:56 +02:00
{
2024-08-02 12:11:53 +02:00
Model . ReportTypes . Add ( new SelectListItem
{
Text = "Mitarbeiterstundenkonto" ,
Value = "1"
} ) ;
2024-07-24 16:45:56 +02:00
}
2024-08-02 12:11:53 +02:00
#if ! DEBUG
Model . SelectedReportType = ReportType . Mitarbeiterstundenkonto ;
#endif
#if DEBUG
//Model.SelectedReportType = ReportType.Berichte;
#endif
2025-06-11 22:56:25 +02:00
}
[Authorize]
public ActionResult ReportViewer ( )
{
if ( Model is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return Logout ( ) ;
}
2023-03-16 13:57:04 +01:00
return View ( Model ) ;
}
[Authorize]
2023-03-27 17:41:58 +02:00
public ActionResult DocumentWebViewerPartial ( )
2023-03-16 13:57:04 +01:00
{
2024-06-26 12:29:22 +02:00
if ( Model is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
}
2024-07-24 16:45:56 +02:00
return PartialView ( "BeWoReportPartial" , Model ) ;
2023-03-16 13:57:04 +01:00
}
2023-03-27 17:41:58 +02:00
[Authorize]
public ActionResult LoadCustomReport ( long? reportOid )
{
2023-06-07 17:38:11 +02:00
try
2023-03-27 17:41:58 +02:00
{
2025-06-11 22:56:25 +02:00
if ( Model ? . LoggedInEmployee ? . EmployeeOid is null | | reportOid is null )
2023-06-07 17:38:11 +02:00
{
2024-06-26 12:29:22 +02:00
TempData [ TempDataConstants . DoLogoutKey ] = true ;
2024-07-24 16:45:56 +02:00
return PartialView ( "BeWoReportPartial" ) ;
2023-06-07 17:38:11 +02:00
}
2023-03-27 17:41:58 +02:00
2023-06-07 17:38:11 +02:00
var selectedQuery = Model . Queries . FirstOrDefault ( query = > query . Oid . Equals ( reportOid . Value ) ) ;
2024-07-24 16:45:56 +02:00
if ( selectedQuery is null )
2023-06-07 17:38:11 +02:00
{
Model . Report = null ;
2024-07-24 16:45:56 +02:00
return PartialView ( "BeWoReportPartial" , Model ) ;
2023-06-07 17:38:11 +02:00
}
2023-03-27 17:41:58 +02:00
2024-09-12 14:55:35 +02:00
Model . SelectedCustomReport = Model . CustomReports . FirstOrDefault ( cr = > cr . QueryOid = = selectedQuery . Oid ) ;
2024-07-24 16:45:56 +02:00
Model . SelectedQuery = selectedQuery ;
2025-06-11 22:56:25 +02:00
var dcid = $"{MobileSessionFacade.Tenant}queryeoid{Model.LoggedInEmployee.EmployeeOid.Value}" ;
2023-03-27 17:41:58 +02:00
2024-07-24 16:45:56 +02:00
var queryResult = QueryService . ExecuteQuery ( selectedQuery . Oid , null ) ;
2023-06-07 17:38:11 +02:00
2024-07-24 16:45:56 +02:00
if ( queryResult is null )
2023-06-07 17:38:11 +02:00
{
2024-07-24 16:45:56 +02:00
return PartialView ( "BeWoReportPartial" , Model ) ;
2023-06-07 17:38:11 +02:00
}
2023-03-27 17:41:58 +02:00
2024-07-24 16:45:56 +02:00
QueryService . PrepareQueryReport ( queryResult , dcid ) ;
2023-11-02 16:25:36 +01:00
var queryReport = Model . ReportCreator . CreateQueryReport ( selectedQuery . Oid , dcid ) ;
2024-07-24 16:45:56 +02:00
2023-11-02 16:25:36 +01:00
Model . Report = queryReport ;
2024-07-24 16:45:56 +02:00
Model . ReportName = selectedQuery . Title ;
2023-03-27 17:41:58 +02:00
}
2024-07-24 16:45:56 +02:00
catch ( Exception e )
2023-06-07 17:38:11 +02:00
{
Log . Error ( e ) ;
2024-07-24 16:45:56 +02:00
if ( Model ! = null )
{
Model . ReportName = "Fehler" ;
}
TempData [ TempDataConstants . ReportErrorMessageKey ] = e . Message ;
2023-06-07 17:38:11 +02:00
}
2023-06-01 13:06:39 +02:00
2024-07-24 16:45:56 +02:00
return PartialView ( "BeWoReportPartial" , Model ) ;
}
[Authorize]
public ActionResult LoadBerichteForm ( long? reportOid )
{
try
{
2025-06-11 22:56:25 +02:00
if ( Model ? . LoggedInEmployee ? . EmployeeOid is null | | reportOid is null )
2024-07-24 16:45:56 +02:00
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BerichteFormPartialView" ) ;
}
var selectedQuery = Model . Queries . FirstOrDefault ( query = > query . Oid . Equals ( reportOid . Value ) ) ;
2024-09-12 14:55:35 +02:00
if ( selectedQuery is null )
{
return PartialView ( "BerichteFormPartialView" , Model ) ;
}
Model . SelectedCustomReport = Model . CustomReports . FirstOrDefault ( cr = > cr . QueryOid = = selectedQuery . Oid ) ;
2026-08-03 14:27:22 +02:00
Model . SelectedQueryOid = selectedQuery . Oid ;
2024-07-24 16:45:56 +02:00
Model . SelectedQuery = selectedQuery ;
2024-08-02 12:11:53 +02:00
foreach ( var parameter in selectedQuery ? . Parameter ? ? new List < QueryParamDC > ( ) )
{
if ( parameter . QueryParameterOid is null )
{
continue ;
}
if ( parameter . ParamType = = QueryParameterType . Year )
{
Model . SelectedValues . AddOrUpdate ( parameter . QueryParameterOid . Value , new SelectedValue ( QueryParameterType . Year , DateTime . Today . Year ) ) ;
}
if ( parameter . ParamType = = QueryParameterType . Month )
{
Model . SelectedValues . AddOrUpdate ( parameter . QueryParameterOid . Value , new SelectedValue ( QueryParameterType . Month , DateTime . Today . AddMonths ( - 1 ) ) ) ;
}
}
2024-07-24 16:45:56 +02:00
return PartialView ( "BerichteFormPartialView" , Model ) ;
}
catch ( Exception exception )
{
Log . Error ( exception ) ;
TempData [ TempDataConstants . ReportErrorMessageKey ] = exception . Message ;
}
return PartialView ( "BerichteFormPartialView" , Model ) ;
2023-03-27 17:41:58 +02:00
}
2023-05-15 11:54:13 +02:00
private string GetSiteOfOrigin ( )
{
2025-06-11 22:56:25 +02:00
if ( Model ? . LoggedInEmployee ? . EmployeeOid is null )
2023-05-15 11:54:13 +02:00
{
return null ;
}
var url = Request ? . Url ;
#if DEBUG
return "http://localhost:3777/Host" ;
#endif
2023-06-07 17:38:11 +02:00
return $"{url.Scheme}://{url.Host}/service" ;
2023-05-15 11:54:13 +02:00
}
[Authorize]
public ActionResult LoadViewerForm ( string reportType )
{
if ( Model is null )
{
2024-06-26 12:29:22 +02:00
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "ReportViewerFormPartial" ) ;
2023-05-15 11:54:13 +02:00
}
Model . SelectedReportType = reportType = = "0" ? ReportType . Berichte : ReportType . Mitarbeiterstundenkonto ;
return PartialView ( "ReportViewerFormPartial" , Model ) ;
}
[Authorize]
2024-11-12 18:37:23 +01:00
public string SetEmployeeForMitarbeiterstundenkonto ( long? employeeOid )
2023-05-15 11:54:13 +02:00
{
2024-11-12 18:37:23 +01:00
if ( Model is null )
2023-05-15 11:54:13 +02:00
{
2024-06-26 12:29:22 +02:00
TempData [ TempDataConstants . DoLogoutKey ] = true ;
2024-11-12 18:37:23 +01:00
return LeerzeichenFuerGetMethoden ;
2023-05-15 11:54:13 +02:00
}
2024-11-12 18:37:23 +01:00
if ( employeeOid is null )
2023-05-15 11:54:13 +02:00
{
2024-11-12 18:37:23 +01:00
Model . SelectedEmployee = null ;
return LeerzeichenFuerGetMethoden ;
}
2023-03-27 17:41:58 +02:00
2025-06-11 22:56:25 +02:00
Model . SelectedEmployeeOid = employeeOid ;
2024-11-12 18:37:23 +01:00
Model . SelectedEmployee = Model . AllEmployees . FirstOrDefault ( employee = > employee . EmployeeOid . Equals ( employeeOid . Value ) ) ;
2023-05-17 13:58:10 +02:00
2024-11-12 18:37:23 +01:00
return Model . SelectedEmployee ? . DetailDescription ? ? LeerzeichenFuerGetMethoden ;
}
2023-05-15 11:54:13 +02:00
2024-11-12 18:37:23 +01:00
[Authorize]
public string SetTeamForMitarbeiterstundenkonto ( long? teamOid )
{
if ( Model is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return LeerzeichenFuerGetMethoden ;
}
2023-05-15 11:54:13 +02:00
2024-11-12 18:37:23 +01:00
if ( teamOid is null )
{
Model . SelectedTeam = null ;
return LeerzeichenFuerGetMethoden ;
}
2023-05-15 11:54:13 +02:00
2025-06-11 22:56:25 +02:00
Model . SelectedTeamOid = teamOid ;
2024-11-12 18:37:23 +01:00
Model . SelectedTeam = Model . AllTeams . FirstOrDefault ( team = > team . TeamOid . Equals ( teamOid . Value ) ) ;
2023-05-15 11:54:13 +02:00
2024-11-12 18:37:23 +01:00
return Model . SelectedTeam ? . DetailDescription ? ? LeerzeichenFuerGetMethoden ;
}
[Authorize]
public ActionResult LoadMitarbeiterstundenkonto ( int ansicht , int month , int year , bool all , bool isEmployee )
{
2025-06-11 22:56:25 +02:00
if ( Model ? . LoggedInEmployee ? . EmployeeOid is null )
2024-11-12 18:37:23 +01:00
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BeWoReportPartial" ) ;
}
2023-06-07 17:38:11 +02:00
2024-11-12 18:37:23 +01:00
var teamOids = new List < long > ( ) ;
var employeeOid = Model . SelectedEmployeeOid ;
2025-06-11 22:56:25 +02:00
var oid = isEmployee ? employeeOid ? ? Model . LoggedInEmployee . EmployeeOid . Value : Model . SelectedTeamOid ;
2023-05-15 11:54:13 +02:00
2024-11-12 18:37:23 +01:00
if ( isEmployee )
{
2025-06-11 22:56:25 +02:00
teamOids = null ;
2024-11-12 18:37:23 +01:00
employeeOid = oid ;
2023-05-15 11:54:13 +02:00
2025-06-11 22:56:25 +02:00
if ( all | | false = = Model . HasRightMitarbeiterstundenkontoViewAll )
2024-11-12 18:37:23 +01:00
{
employeeOid = null ;
}
2023-05-15 11:54:13 +02:00
2024-11-12 18:37:23 +01:00
if ( employeeOid . HasValue )
{
employeeOid = oid ;
}
2023-05-15 11:54:13 +02:00
2025-06-11 22:56:25 +02:00
if ( false = = Model . HasRightMitarbeiterstundenkontoViewAll )
2024-11-12 18:37:23 +01:00
{
2025-06-11 22:56:25 +02:00
employeeOid = Model . LoggedInEmployee . EmployeeOid ;
2023-05-15 11:54:13 +02:00
}
}
2024-11-12 18:37:23 +01:00
else
{
2025-06-11 22:56:25 +02:00
employeeOid = null ;
2024-11-12 18:37:23 +01:00
var teamOid = oid ;
2025-06-11 22:56:25 +02:00
if ( all | | ( ! Model . HasRightMitarbeiterstundenkontoViewAll & & ! Model . HasRightMitarbeiterstundenkontoViewTeams ) )
2024-11-12 18:37:23 +01:00
{
teamOid = null ;
}
if ( teamOid ! = 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 ) ;
Model . Report = Model . ReportCreator . CreateEmployeeHourReport ( employeeOid , teamOids , start , end , ansicht ) ;
2024-07-24 16:45:56 +02:00
return PartialView ( "BeWoReportPartial" , Model ) ;
2023-03-27 17:41:58 +02:00
}
2023-06-07 17:38:11 +02:00
2023-11-27 19:03:39 +01:00
private static AbstractReportCreator GetReportCreator ( )
2023-06-07 17:38:11 +02:00
{
2023-12-07 14:54:26 +01:00
AbstractReportCreator creator = PluginLoader . FindClass < DefaultReportCreator > ( ) ? ? new DefaultReportCreator ( ) ;
var mobileBaseDirectory = Path . Combine ( AppDomain . CurrentDomain . BaseDirectory , @"..\Host\" ) ;
2023-06-07 17:38:11 +02:00
#if DEBUG
2023-12-07 14:54:26 +01:00
creator . TempPath = BS . Shared . Core . Utils . CreateSavePath ( mobileBaseDirectory , @"demo\temp" ) ;
2023-06-07 17:38:11 +02:00
#else
2023-12-07 14:54:26 +01:00
creator . TempPath = BS . Shared . Core . Utils . CreateSavePath ( mobileBaseDirectory , PluginLoader . Tenant + @"\temp" ) ;
2023-06-07 17:38:11 +02:00
#endif
return creator ;
}
2024-07-24 16:45:56 +02:00
[Authorize]
public override string ResetReport ( )
{
if ( Model is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return LeerzeichenFuerGetMethoden ;
}
Model . Report = null ;
Model . ReportName = null ;
return LeerzeichenFuerGetMethoden ;
}
// ToDo: Parameter hinzufügen
[Authorize]
public ActionResult CreateBerichtWithParameters ( )
{
if ( Model ? . SelectedQuery is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BeWoReportPartial" ) ;
}
return PartialView ( "BeWoReportPartial" , Model ) ;
}
[Authorize]
public ActionResult SelectCostBearer2SupportConceptRel ( long? relOid )
{
if ( Model ? . SelectedQuery is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BerichteFormPartialView" , Model ) ;
}
if ( relOid ! = null )
{
Model . SelectedCostBearer2SupportConceptRelListObject = Model . CostBearer2SupportConceptRelListObjects . FirstOrDefault ( f = > f . CostBearer2SupportConceptOid ! = null & & f . CostBearer2SupportConceptOid . Equals ( relOid . Value . ToString ( ) ) ) ;
}
return PartialView ( "BerichteFormPartialView" , Model ) ;
}
[Authorize]
2024-08-02 12:11:53 +02:00
public ActionResult SelectQueryCustomValue ( string customValue , long? paramOid )
2024-07-24 16:45:56 +02:00
{
if ( Model ? . SelectedQuery is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BerichteFormPartialView" ) ;
}
2024-08-02 12:11:53 +02:00
return PartialView ( "BerichteFormPartialView" , Model ) ;
}
2024-07-24 16:45:56 +02:00
2024-08-02 12:11:53 +02:00
[Authorize]
public ActionResult SelectValueListEntry ( long? valueListEntryOid , int paramType , int index )
{
if ( Model ? . SelectedQuery is null )
2024-07-24 16:45:56 +02:00
{
2024-08-02 12:11:53 +02:00
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BerichteFormPartialView" ) ;
}
if ( valueListEntryOid . HasValue )
{
var type = ( QueryParameterType ) paramType ;
var valueListEntry = Model . AllValueListEntriesForQuery . FirstOrDefault ( vle = > vle . ValueListEntryOid . HasValue & & vle . ValueListEntryOid . Value . Equals ( valueListEntryOid ) ) ;
if ( valueListEntry ! = null )
{
var selectedValue = new SelectedValue ( type , valueListEntry ) ;
Model . SelectedValues . AddOrUpdate ( index , selectedValue ) ;
}
2024-07-24 16:45:56 +02:00
}
return PartialView ( "BerichteFormPartialView" , Model ) ;
}
[Authorize]
2024-08-02 12:11:53 +02:00
public ActionResult SelectQueryParameter ( long? objectOid , int parameterType , long? parameterOid , string textValue )
2024-07-24 16:45:56 +02:00
{
2025-07-18 19:37:01 +02:00
if ( Model ? . SelectedQueryOid . HasValue ? ? false )
{
Model . SelectedQuery = Model . Queries . FirstOrDefault ( q = > q . Oid . Equals ( Model . SelectedQueryOid . Value ) ) ;
}
2024-07-24 16:45:56 +02:00
if ( Model ? . SelectedQuery is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BerichteFormPartialView" ) ;
}
2024-11-12 18:37:23 +01:00
if ( parameterOid . HasValue )
2024-07-24 16:45:56 +02:00
{
2026-08-03 14:27:22 +02:00
var queryParameterType = ( QueryParameterType ) parameterType ;
2024-08-02 12:11:53 +02:00
switch ( queryParameterType )
{
case QueryParameterType . Custom :
2024-09-12 14:55:35 +02:00
throw new NotImplementedException ( "Dieser Parametertyp wird noch nicht unterstützt!" ) ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . Customer :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryCustomerOids . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
break ;
}
2024-08-02 12:11:53 +02:00
var selectedCustomer = Model . AllCustomersForQueries . FirstOrDefault ( customer = > customer . CustomerOid . Equals ( objectOid . Value ) ) ;
2026-08-03 14:27:22 +02:00
if ( selectedCustomer is object )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedCustomer ) ) ;
Model . QueryCustomerOids . AddOrUpdate ( parameterOid . Value , selectedCustomer . CustomerOid ) ;
}
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . Employee :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryEmployeeOids . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
break ;
}
2024-08-02 12:11:53 +02:00
var selectedEmployee = Model . AllEmployeesForQueries . FirstOrDefault ( employee = > employee . EmployeeOid . Equals ( objectOid . Value ) ) ;
2026-08-03 14:27:22 +02:00
2024-08-02 12:11:53 +02:00
if ( selectedEmployee ! = null )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedEmployee ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryEmployeeOids . AddOrUpdate ( parameterOid . Value , selectedEmployee . EmployeeOid ) ;
2024-08-02 12:11:53 +02:00
}
2026-08-03 14:27:22 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . Organisation :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryOrganisationOids . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
break ;
}
2024-08-02 12:11:53 +02:00
var selectedOrganisation = Model . AllOrganisationForQuery . FirstOrDefault ( organisation = > organisation . OrganisationOid . Equals ( objectOid . Value ) ) ;
if ( selectedOrganisation ! = null )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedOrganisation ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryOrganisationOids . AddOrUpdate ( parameterOid . Value , selectedOrganisation . OrganisationOid ) ;
2024-08-02 12:11:53 +02:00
}
2026-08-03 14:27:22 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . Text :
2024-09-12 14:55:35 +02:00
if ( false = = string . IsNullOrEmpty ( textValue ) )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , textValue ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryTexts . AddOrUpdate ( parameterOid . Value , textValue ) ;
2024-09-12 14:55:35 +02:00
}
else
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryTexts . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
}
2026-08-03 14:27:22 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . Date :
2024-09-12 14:55:35 +02:00
if ( textValue ! = null & & DateTime . TryParse ( textValue , out var selectedDate ) )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedDate ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryDateTimes . AddOrUpdate ( parameterOid . Value , selectedDate ) ;
2024-09-12 14:55:35 +02:00
}
else
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryDateTimes . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
}
2025-07-24 10:21:01 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . DateRange :
2024-09-12 14:55:35 +02:00
if ( textValue ! = null & & textValue . Length = = 21 & & textValue . Contains ( "_" ) )
{
var split = textValue . Split ( '_' ) ;
if ( DateTime . TryParse ( split [ 0 ] , out var start ) & & DateTime . TryParse ( split [ 1 ] , out var end ) )
{
var dateRange = new DateTimeSpan ( start , end ) ;
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , dateRange ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryDateRanges . AddOrUpdate ( parameterOid . Value , dateRange ) ;
2024-09-12 14:55:35 +02:00
}
}
else
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryDateRanges . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
}
2025-07-24 10:21:01 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . Month :
2024-09-12 14:55:35 +02:00
if ( ! textValue . Contains ( "_" ) )
{
break ;
}
var month2Year = textValue . Split ( '_' ) ;
var monthAsString = month2Year [ 0 ] ;
var yearAsString = month2Year [ 1 ] ;
if ( int . TryParse ( monthAsString , out var month ) & & month > 0 & & month < 13 & & int . TryParse ( yearAsString , out var year ) & & Model . Years . Any ( listItem = > listItem . Value . Equals ( yearAsString ) ) )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , new DateTime ( year , month , 1 ) ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryMonths . AddOrUpdate ( parameterOid . Value , new DateTime ( year , month , 1 ) ) ;
2024-09-12 14:55:35 +02:00
}
2025-07-24 10:21:01 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . ServiceCategory :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryServiceCategoryOids . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
break ;
}
2024-08-02 12:11:53 +02:00
var selectedServiceCategory = Model . AllServiceCategoriesForQueries . FirstOrDefault ( serviceCategory = > serviceCategory . ServiceCategoryOid . HasValue & & serviceCategory . ServiceCategoryOid . Value . Equals ( objectOid ) ) ;
if ( selectedServiceCategory ! = null )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedServiceCategory ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryServiceCategoryOids . AddOrUpdate ( parameterOid . Value , selectedServiceCategory . ServiceCategoryOid . Value ) ;
2024-08-02 12:11:53 +02:00
}
2025-07-24 10:21:01 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . SupportConcept :
var costBearer2SupportConceptRelListObj = Model . CostBearer2SupportConceptRelListObjects . FirstOrDefault ( costBearer2SupportConceptRelListObject = > costBearer2SupportConceptRelListObject . CostBearer2SupportConceptOid . Equals ( objectOid . ToString ( ) ) ) ;
2024-09-12 14:55:35 +02:00
Model . SelectedCostBearer2SupportConceptRelListObject = costBearer2SupportConceptRelListObj ;
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QuerySupportConceptOids . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
break ;
}
2024-08-02 12:11:53 +02:00
if ( costBearer2SupportConceptRelListObj ! = null )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , costBearer2SupportConceptRelListObj ) ) ;
2026-08-03 14:27:22 +02:00
Model . QuerySupportConceptOids . AddOrUpdate ( parameterOid . Value , costBearer2SupportConceptRelListObj . CostBearer2SupportConceptOid ) ;
2024-08-02 12:11:53 +02:00
}
2025-07-24 10:21:01 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . Team :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryTeamOids . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
break ;
}
2024-08-02 12:11:53 +02:00
var selectedTeam = Model . AllTeamsForQueries . FirstOrDefault ( team = > team . TeamOid . Equals ( objectOid . Value ) ) ;
if ( selectedTeam ! = null )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedTeam ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryTeamOids . AddOrUpdate ( parameterOid . Value , selectedTeam . TeamOid ) ;
2024-08-02 12:11:53 +02:00
}
2025-07-24 10:21:01 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . ValueListEntryType :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
2026-08-03 14:27:22 +02:00
Model . QueryValueListEntryOids . Remove ( parameterOid . Value ) ;
2024-09-12 14:55:35 +02:00
break ;
}
2024-08-02 12:11:53 +02:00
var selectedValueListEntry = Model . AllValueListEntriesForQuery . FirstOrDefault ( valueListEntry = > valueListEntry . ValueListEntryOid ? . Equals ( objectOid . Value ) ? ? false ) ;
if ( selectedValueListEntry ! = null )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedValueListEntry ) ) ;
2026-08-03 14:27:22 +02:00
Model . QueryValueListEntryOids . AddOrUpdate ( parameterOid . Value , selectedValueListEntry . ValueListEntryOid . Value ) ;
2024-08-02 12:11:53 +02:00
}
2025-07-24 10:21:01 +02:00
break ;
2024-08-02 12:11:53 +02:00
case QueryParameterType . Year :
break ;
}
2024-07-24 16:45:56 +02:00
}
return PartialView ( "BerichteFormPartialView" , Model ) ;
}
2024-09-12 14:55:35 +02:00
[Authorize]
public ActionResult ExecuteQuery ( )
{
2025-06-11 22:56:25 +02:00
if ( Model ? . LoggedInEmployee ? . EmployeeOid is null )
2024-09-12 14:55:35 +02:00
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BeWoReportPartial" ) ;
}
2026-08-03 14:27:22 +02:00
2024-09-12 14:55:35 +02:00
var query = Model . SelectedQuery ;
var paramList = new List < QueryParamDC > ( ) ;
foreach ( var item in query . Parameter )
{
var param = new QueryParamDC ( ) ;
paramList . Add ( param ) ;
param . Name = item . Name ;
param . ParamType = item . ParamType ;
2026-08-03 14:27:22 +02:00
if ( item . QueryParameterOid . HasValue & & IsParameterOidInQueryValues ( item . ParamType , item . QueryParameterOid . Value ) )
2024-09-12 14:55:35 +02:00
{
2026-08-03 14:27:22 +02:00
switch ( item . ParamType )
{
case QueryParameterType . Custom :
// Nicht implementiert
break ;
case QueryParameterType . Customer :
var customerOid = Model . QueryCustomerOids [ item . QueryParameterOid . Value ] ;
var queryCustomer = Model . AllCustomersForQueries . FirstOrDefault ( customer = > customer . CustomerOid . Equals ( customerOid ) ) ;
param . Value = queryCustomer ;
break ;
case QueryParameterType . Employee :
var employeeOid = Model . QueryEmployeeOids [ item . QueryParameterOid . Value ] ;
var queryEmployee = Model . AllEmployeesForQueries . FirstOrDefault ( employee = > employee . EmployeeOid . Equals ( employeeOid ) ) ;
param . Value = queryEmployee ;
break ;
case QueryParameterType . Organisation :
var organisationOid = Model . QueryOrganisationOids [ item . QueryParameterOid . Value ] ;
var queryOrganisation = Model . AllOrganisationForQuery . FirstOrDefault ( organisation = > organisation . OrganisationOid . Equals ( organisationOid ) ) ;
param . Value = queryOrganisation ;
break ;
case QueryParameterType . Text :
param . Value = Model . QueryTexts [ item . QueryParameterOid . Value ] ;
break ;
case QueryParameterType . Date :
param . Value = Model . QueryDateTimes [ item . QueryParameterOid . Value ] ;
break ;
case QueryParameterType . DateRange :
param . Value = Model . QueryDateRanges [ item . QueryParameterOid . Value ] ;
break ;
case QueryParameterType . Month :
param . Value = Model . QueryMonths [ item . QueryParameterOid . Value ] ;
break ;
case QueryParameterType . ServiceCategory :
var serviceCategoryOid = Model . QueryServiceCategoryOids [ item . QueryParameterOid . Value ] ;
var queryServiceCategory = Model . AllServiceCategoriesForQueries . FirstOrDefault ( serviceCategory = > serviceCategory . ServiceCategoryOid ? . Equals ( serviceCategoryOid ) ? ? false ) ;
param . Value = queryServiceCategory ;
break ;
case QueryParameterType . SupportConcept :
var cb2ScRelOid = Model . QuerySupportConceptOids [ item . QueryParameterOid . Value ] ;
var querySupportConcept = Model . CostBearer2SupportConceptRelListObjects . FirstOrDefault ( cb2ScRel = > cb2ScRel . CostBearer2SupportConceptOid . Equals ( cb2ScRelOid ) ) ;
param . Value = querySupportConcept ;
break ;
case QueryParameterType . Team :
var teamOid = Model . QueryTeamOids [ item . QueryParameterOid . Value ] ;
var queryTeam = Model . AllTeamsForQueries . FirstOrDefault ( team = > team . TeamOid . Equals ( teamOid ) ) ;
param . Value = queryTeam ;
break ;
case QueryParameterType . ValueListEntryType :
var valueListEntryOid = Model . QueryValueListEntryOids [ item . QueryParameterOid . Value ] ;
var queryValueListEntry = Model . AllValueListEntriesForQuery . FirstOrDefault ( valueListEntry = > valueListEntry . ValueListEntryOid ? . Equals ( valueListEntryOid ) ? ? false ) ;
param . Value = queryValueListEntry ;
break ;
case QueryParameterType . Year :
// Nicht implementiert
break ;
}
}
else if ( item . QueryParameterOid . HasValue & & item . ParamType = = QueryParameterType . Month & & false = = IsParameterOidInQueryValues ( item . ParamType , item . QueryParameterOid . Value ) )
{
if ( item . ParamType = = QueryParameterType . Month )
{
var defaultDate = new DateTime ( DateTime . Today . Year , DateTime . Today . Month , 1 ) ;
param . Value = defaultDate . AddMonths ( - 1 ) ;
}
2024-09-12 14:55:35 +02:00
}
}
2025-06-11 22:56:25 +02:00
var dcid = $"{MobileSessionFacade.Tenant}queryeoid{Model.LoggedInEmployee.EmployeeOid.Value}" ;
2024-09-12 14:55:35 +02:00
var queryResult = QueryService . ExecuteQuery ( query . Oid , paramList ) ;
if ( queryResult is null )
{
return PartialView ( "BeWoReportPartial" , Model ) ;
}
QueryService . PrepareQueryReport ( queryResult , dcid ) ;
var queryReport = Model . ReportCreator . CreateQueryReport ( query . Oid , dcid ) ;
Model . Report = queryReport ;
Model . ReportName = query . Title ;
return PartialView ( "BeWoReportPartial" , Model ) ;
}
2025-03-25 17:36:15 +01:00
2026-08-03 14:27:22 +02:00
[Authorize]
private bool IsParameterOidInQueryValues ( QueryParameterType parameterType , long parameterOid )
{
switch ( parameterType )
{
case QueryParameterType . Custom :
// Nicht implementiert
break ;
case QueryParameterType . Customer :
return Model . QueryCustomerOids . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . Employee :
return Model . QueryEmployeeOids . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . Organisation :
return Model . QueryOrganisationOids . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . Text :
return Model . QueryTexts . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . Date :
return Model . QueryDateTimes . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . DateRange :
return Model . QueryDateRanges . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . Month :
return Model . QueryMonths . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . ServiceCategory :
return Model . QueryServiceCategoryOids . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . SupportConcept :
return Model . QuerySupportConceptOids . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . Team :
return Model . QueryTeamOids . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . ValueListEntryType :
return Model . QueryValueListEntryOids . ContainsKey ( parameterOid ) ;
break ;
case QueryParameterType . Year :
// Nicht implementiert
break ;
}
return false ;
}
2025-03-25 17:36:15 +01:00
[Authorize]
public override string SaveCollapsibleStatus ( bool isOpen , string identifier )
{
2025-10-24 01:53:29 +02:00
return SaveCollapsibleStatusToModel ( Model , isOpen , identifier ) ;
2025-03-25 17:36:15 +01:00
}
2023-03-16 13:57:04 +01:00
}
}