2023-03-16 13:57:04 +01:00
using System ;
using System.Collections.Generic ;
2023-12-07 14:54:26 +01:00
using System.IO ;
2023-03-27 17:41:58 +02:00
using System.Linq ;
2023-03-16 13:57:04 +01:00
using System.Web.Mvc ;
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 ;
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 ;
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
{
if ( ! MobileSessionFacade . IsUserLoggedIn ( ) )
{
RedirectToActionPermanent ( "Index" , "Login" ) ;
return null ;
}
if ( ( ( ReportViewerModel ) Session [ ModelSessionConstants . ReportViewerModelKey ] ) ? . Employee is null )
{
2023-06-07 17:38:11 +02:00
_Model = new ReportViewerModel { Employee = MobileSessionFacade . LoggedInEmployee , ReportCreator = GetReportCreator ( ) } ;
2023-03-16 13:57:04 +01:00
Session [ ModelSessionConstants . ReportViewerModelKey ] = _Model ;
}
else
{
_Model = ( ReportViewerModel ) Session [ ModelSessionConstants . ReportViewerModelKey ] ;
}
return _Model ;
}
}
2024-06-26 12:29:22 +02:00
[Authorize]
2023-03-16 13:57:04 +01:00
public ActionResult ReportViewer ( )
{
2023-06-12 17:27:53 +02:00
if ( Model is null )
{
2024-06-26 12:29:22 +02:00
TempData [ TempDataConstants . DoLogoutKey ] = true ;
2023-06-12 17:27:53 +02:00
return Logout ( ) ;
}
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
2023-05-17 13:58:10 +02:00
Model . AllEmployees = AbstractModel . HasRightMitarbeiterstundenkontoViewAll
2023-09-04 16:57:20 +02:00
? EmployeeService . GetAllActiveEmployeesCompact ( )
2023-05-17 13:58:10 +02:00
: new List < CompactEmployeeDC > { MobileSessionFacade . LoggedInCompactEmployee } ;
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.
Model . AllTeams = AbstractModel . HasRightMitarbeiterstundenkontoViewAll
? EmployeeService . GetAllActiveCompactTeamsForEmployee ( MobileSessionFacade . LoggedInEmployee . EmployeeOid )
: EmployeeService . FindLeadingCompactTeamsOfEmployee ( MobileSessionFacade . LoggedInCompactEmployee . EmployeeOid ) ;
2024-11-12 18:37:23 +01:00
if ( false = = AbstractModel . HasRightMitarbeiterstundenkontoViewAll | | Model . SelectedEmployee is null )
2023-05-17 13:58:10 +02:00
{
2024-11-12 18:37:23 +01:00
Model . SelectedEmployee = MobileSessionFacade . LoggedInCompactEmployee ;
2023-05-17 13:58:10 +02:00
}
Model . ReportTypes = new List < SelectListItem > ( ) ;
2024-07-24 16:45:56 +02:00
#if DEBUG
2024-08-02 12:11:53 +02:00
if ( AbstractModel . 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
2024-09-12 14:55:35 +02:00
var names2ValueListEntryTypes = new Dictionary < string , ValueListEntryType > ( ) ;
foreach ( var query in Model . Queries . Where ( q = > q . Parameter ? . Any ( ) ? ? false ) )
2024-08-13 11:29:40 +02:00
{
2024-09-12 14:55:35 +02:00
foreach ( var parameter in query . Parameter . Where ( p = > p . ParamType = = QueryParameterType . ValueListEntryType ) )
{
var parameterName = parameter . Name ;
if ( ! ( parameterName ? . Contains ( "_" ) ? ? false ) )
{
continue ;
}
var name2Type = parameterName . Split ( '_' ) ;
var name = name2Type [ 0 ] ;
var type = name2Type [ 1 ] ;
if ( ! int . TryParse ( type , out var typeEnumInt ) )
{
continue ;
}
var valueListEntryType = ( ValueListEntryType ) typeEnumInt ;
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
2024-09-12 14:55:35 +02:00
if ( Model . Employee ? . EmployeeOid . HasValue ? ? false )
{
Model . SupportConcepts = EmployeeService . GetActiveSupportConceptsForEmployee ( Model . Employee . EmployeeOid , CustomerFilterEnum . All ) ;
}
else
{
Model . SupportConcepts = new List < SupportConceptDC > ( ) ;
}
Model . SupportConcepts . DoForEach ( sc = > Model . CostBearer2SupportConceptRels . AddRangeIfElementsNotIn ( sc . CostBearerRelations ) ) ;
2024-07-24 16:45:56 +02:00
2024-09-12 14:55:35 +02:00
if ( Model . SelectedCostBearer2SupportConceptRelListObject is null )
{
Model . SelectedCostBearer2SupportConceptRelListObject = Model . CostBearer2SupportConceptRelListObjects . FirstOrDefault ( f = > f . CostBearer2SupportConceptOid = = "-1" ) ? ? Model . CostBearer2SupportConceptRelListObjects . First ( ) ;
}
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
2024-08-02 12:11:53 +02:00
if ( AbstractModel . 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-09-12 14:55:35 +02:00
2024-08-02 12:11:53 +02:00
#if ! DEBUG
Model . SelectedReportType = ReportType . Mitarbeiterstundenkonto ;
#endif
#if DEBUG
//Model.SelectedReportType = ReportType.Berichte;
#endif
2024-07-24 16:45:56 +02:00
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
{
2024-07-24 16:45:56 +02:00
if ( Model ? . Employee ? . 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 ;
2023-06-07 17:38:11 +02:00
var dcid = $"{MobileSessionFacade.Tenant}queryeoid{Model.Employee.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
{
if ( Model ? . Employee ? . EmployeeOid is null | | reportOid is null )
{
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 ) ;
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
}
2024-06-26 12:29:22 +02:00
//[Authorize]
2023-06-07 17:38:11 +02:00
//private string GetQueryReportUrl(QueryDC query)
//{
// var url = Request?.Url;
2023-03-27 17:41:58 +02:00
2023-06-07 17:38:11 +02:00
// if(Model?.Employee?.EmployeeOid is null || url is null || query is null)
// {
// return null;
// }
2023-03-27 17:41:58 +02:00
2023-06-07 17:38:11 +02:00
// //DEBUG: http://localhost:3777/service
// //RELEASE: https://app4.bewoplaner.de/service
// // http://localhost:3777/Host/ReportView.aspx?dcid=demoqueryeoid372&qoid=1304&type=QueryReport
2023-03-27 17:41:58 +02:00
2023-06-07 17:38:11 +02:00
// var urlSuffix = $"/ReportView.aspx?dcid={MobileSessionFacade.Tenant}queryeoid{Model.Employee.EmployeeOid.Value}&qoid={query.Oid}&type={Utils.EnumName(ReportTypes.QueryReport)}";
2023-03-27 17:41:58 +02:00
2023-06-07 17:38:11 +02:00
// return GetSiteOfOrigin() + urlSuffix;
//}
2023-05-15 11:54:13 +02:00
private string GetSiteOfOrigin ( )
{
if ( Model ? . Employee ? . EmployeeOid is null )
{
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
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
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 )
{
if ( Model ? . Employee ? . EmployeeOid is null )
{
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 ;
var oid = isEmployee ? employeeOid ? ? Model . Employee . EmployeeOid . Value : Model . SelectedTeamOid ;
2023-05-15 11:54:13 +02:00
2024-11-12 18:37:23 +01:00
if ( isEmployee )
{
employeeOid = oid ;
2023-05-15 11:54:13 +02:00
2024-11-12 18:37:23 +01:00
if ( all | | false = = AbstractModel . HasRightMitarbeiterstundenkontoViewAll )
{
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
2024-11-12 18:37:23 +01:00
if ( false = = AbstractModel . HasRightMitarbeiterstundenkontoViewAll )
{
employeeOid = Model . Employee . EmployeeOid ;
2023-05-15 11:54:13 +02:00
}
}
2024-11-12 18:37:23 +01:00
else
{
var teamOid = oid ;
if ( all | | ( ! AbstractModel . HasRightMitarbeiterstundenkontoViewAll & & ! AbstractModel . HasRightMitarbeiterstundenkontoViewTeams ) )
{
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
{
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
{
2024-08-02 12:11:53 +02:00
var queryParameterType = ( QueryParameterType ) parameterType ;
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 ) ;
break ;
}
2024-08-02 12:11:53 +02:00
var selectedCustomer = Model . AllCustomersForQueries . FirstOrDefault ( customer = > customer . CustomerOid . Equals ( objectOid . Value ) ) ;
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedCustomer ) ) ;
break ;
case QueryParameterType . Employee :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
break ;
}
2024-08-02 12:11:53 +02:00
var selectedEmployee = Model . AllEmployeesForQueries . FirstOrDefault ( employee = > employee . EmployeeOid . Equals ( objectOid . Value ) ) ;
if ( selectedEmployee ! = null )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , selectedEmployee ) ) ;
}
break ;
case QueryParameterType . Organisation :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
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 ) ) ;
}
break ;
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 ) ) ;
}
else
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
}
2024-08-02 12:11:53 +02:00
break ;
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 ) ) ;
}
else
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
}
2024-08-02 12:11:53 +02:00
break ;
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 ) ) ;
}
}
else
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
}
2024-08-02 12:11:53 +02:00
break ;
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 ) ) ) ;
}
2024-08-02 12:11:53 +02:00
break ;
case QueryParameterType . ServiceCategory :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
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 ) ) ;
}
break ;
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 ) ;
break ;
}
2024-08-02 12:11:53 +02:00
if ( costBearer2SupportConceptRelListObj ! = null )
{
Model . SelectedValues . AddOrUpdate ( parameterOid . Value , new SelectedValue ( queryParameterType , costBearer2SupportConceptRelListObj ) ) ;
}
break ;
case QueryParameterType . Team :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
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 ) ) ;
}
break ;
case QueryParameterType . ValueListEntryType :
2024-09-12 14:55:35 +02:00
if ( objectOid is null | | objectOid . Value . Equals ( 0 ) )
{
Model . SelectedValues . Remove ( parameterOid . Value ) ;
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 ) ) ;
}
break ;
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 ( )
{
if ( Model ? . Employee ? . EmployeeOid is null )
{
TempData [ TempDataConstants . DoLogoutKey ] = true ;
return PartialView ( "BeWoReportPartial" ) ;
}
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 ;
if ( item . QueryParameterOid . HasValue & & Model . SelectedValues . ContainsKey ( item . QueryParameterOid . Value ) )
{
param . Value = Model . SelectedValues [ item . QueryParameterOid . Value ] . Parameter ;
}
}
var dcid = $"{MobileSessionFacade.Tenant}queryeoid{Model.Employee.EmployeeOid.Value}" ;
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
[Authorize]
public override string SaveCollapsibleStatus ( bool isOpen , string identifier )
{
Model . Collapsibles2IsShown [ identifier ] = isOpen ;
return LeerzeichenFuerGetMethoden ;
}
2023-03-16 13:57:04 +01:00
}
}