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 ;
2023-03-16 13:57:04 +01:00
using BeWoPlanerMobil.Models ;
using BeWoPlanerMobil.Service ;
using BeWoPlanerMobil.Util ;
using BS.Shared ;
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 ;
2023-03-16 13:57:04 +01:00
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 )
{
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 ;
}
}
public ActionResult ReportViewer ( )
{
2023-06-12 17:27:53 +02:00
if ( Model is null )
{
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 ;
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 ) ;
if ( ! AbstractModel . HasRightMitarbeiterstundenkontoViewAll )
{
Model . SelectedEmployeeOid = MobileSessionFacade . LoggedInCompactEmployee . EmployeeOid ;
}
Model . ReportTypes = new List < SelectListItem > ( ) ;
2023-06-18 17:11:35 +02:00
//if(AbstractModel.HasRightToViewReports)
//{
// Model.ReportTypes.Add(new SelectListItem
// {
// Text = "Berichte",
// Value = "0"
// });
//}
2023-05-17 13:58:10 +02:00
if ( AbstractModel . HasRightToViewMitarbeiterstundenkonto )
{
Model . ReportTypes . Add ( new SelectListItem
2023-03-16 13:57:04 +01:00
{
Text = "Mitarbeiterstundenkonto" ,
Value = "1"
2023-05-17 13:58:10 +02:00
} ) ;
}
2023-03-16 13:57:04 +01:00
2023-06-18 17:11:35 +02:00
// ToDo: Bis auf weiteres nur Mitarbeiterstundenkonto anzeigen!
Model . SelectedReportType = ReportType . Mitarbeiterstundenkonto ; //ReportType.Berichte;
2023-03-16 13:57:04 +01:00
Model . Queries = QueryService . GetAllQueriesOfType ( QueryType . Public ) ;
return View ( Model ) ;
}
[Authorize]
2023-03-27 17:41:58 +02:00
public ActionResult DocumentWebViewerPartial ( )
2023-03-16 13:57:04 +01:00
{
return PartialView ( "DocumentWebViewerPartial" , Model ) ;
}
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
{
2023-06-07 17:38:11 +02:00
if ( Model ? . Employee ? . EmployeeOid is null | | reportOid is null )
{
return Logout ( ) ;
}
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 ) ) ;
2023-11-02 16:25:36 +01:00
var queryParameter = selectedQuery ? . Parameter ? ? new List < QueryParamDC > ( ) ;
2023-06-07 17:38:11 +02:00
if ( selectedQuery is null )
{
Model . Report = null ;
return PartialView ( "DocumentWebViewerPartial" , Model ) ;
}
2023-03-27 17:41:58 +02:00
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
2023-06-07 17:38:11 +02:00
var test = QueryService . ExecuteQuery ( selectedQuery . Oid , null ) ;
if ( test is null )
{
return PartialView ( "DocumentWebViewerPartial" , Model ) ;
}
2023-03-27 17:41:58 +02:00
2023-06-18 17:11:35 +02:00
QueryService . PrepareQueryReport ( test , dcid ) ;
2023-11-02 16:25:36 +01:00
var queryReport = Model . ReportCreator . CreateQueryReport ( selectedQuery . Oid , dcid ) ;
Model . Report = queryReport ;
2023-03-27 17:41:58 +02:00
}
2023-06-07 17:38:11 +02:00
catch ( Exception e )
{
Log . Error ( e ) ;
2024-03-14 17:18:35 +01:00
TempData [ TempDataConstants . ErrorMessageKey ] = e . Message ;
2023-06-07 17:38:11 +02:00
}
2023-06-01 13:06:39 +02:00
2023-03-27 17:41:58 +02:00
return PartialView ( "DocumentWebViewerPartial" , Model ) ;
}
[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 )
{
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 ( ';' ) ;
2023-03-27 17:41:58 +02:00
2023-05-15 11:54:13 +02:00
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 ] ) ;
2023-06-07 17:38:11 +02:00
long? employeeOid = null ;
List < long > teamOids = null ;
2023-05-17 13:58:10 +02:00
long? oid = null ;
2023-09-04 16:57:20 +02:00
2023-05-17 13:58:10 +02:00
if ( long . TryParse ( splitParameters [ 4 ] , out var oOid ) )
{
oid = oOid ;
}
2023-05-15 11:54:13 +02:00
var ansicht = int . Parse ( splitParameters [ 5 ] ) ;
if ( isEmployee )
{
2023-06-07 17:38:11 +02:00
employeeOid = oid ;
2023-05-15 11:54:13 +02:00
if ( all | | ! AbstractModel . HasRightMitarbeiterstundenkontoViewAll )
{
employeeOid = null ;
}
if ( ! ( employeeOid is null ) )
{
employeeOid = oid ;
}
if ( ! AbstractModel . HasRightMitarbeiterstundenkontoViewAll )
{
employeeOid = Model . Employee . EmployeeOid ;
}
}
else
{
2023-06-07 17:38:11 +02:00
teamOids = new List < long > ( ) ;
2023-05-17 13:58:10 +02:00
var teamOid = oid ;
2023-05-15 11:54:13 +02:00
2023-05-17 13:58:10 +02:00
if ( all | | ( ! AbstractModel . HasRightMitarbeiterstundenkontoViewAll & & ! AbstractModel . HasRightMitarbeiterstundenkontoViewTeams ) )
2023-05-15 11:54:13 +02:00
{
teamOid = null ;
}
if ( ! ( teamOid is null ) )
{
teamOid = oid ;
}
if ( teamOid > 0 & & ! all )
{
2023-06-07 17:38:11 +02:00
teamOids . Add ( teamOid . Value ) ;
2023-05-15 11:54:13 +02:00
}
else if ( all )
{
2023-06-07 17:38:11 +02:00
teamOids . AddRange ( Model . AllTeams . Select ( team = > team . TeamOid ) ) ;
2023-05-15 11:54:13 +02:00
}
}
2023-06-07 17:38:11 +02:00
var start = new DateTime ( year , month , 1 ) ;
var end = start . AddMonths ( 1 ) ;
var report = Model . ReportCreator . CreateEmployeeHourReport ( employeeOid , teamOids , start , end , ansicht ) ;
2023-05-15 11:54:13 +02:00
Model . Report = report ;
}
}
return PartialView ( "DocumentWebViewerPartial" , 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 ;
}
2023-03-16 13:57:04 +01:00
}
}