2019-02-28 12:38:29 +01:00
using System ;
using System.Collections.Generic ;
using System.Collections.ObjectModel ;
2024-07-24 16:45:56 +02:00
using System.Linq ;
2019-02-28 12:38:29 +01:00
using System.Windows ;
using System.Windows.Media ;
using BS.Shared.DataContracts ;
using BS.Shared.DataContracts.Compact ;
2019-12-20 12:37:08 +01:00
using BS.Shared.Extensions ;
2019-02-28 12:38:29 +01:00
namespace BeWo.Scheduler.ViewModel
{
public class CustomFieldStorage
{
public string ToolTip
{
get
{
var result = Subject ;
if ( IsTask )
{
2023-07-03 21:05:05 +02:00
result = result ? ? string . Empty ;
2019-02-28 12:38:29 +01:00
if ( CompletedDate . HasValue )
{
result + = " erledigt am " + CompletedDate . Value . ToShortDateString ( ) ;
2023-06-18 17:11:35 +02:00
}
else if ( DueDate . HasValue )
2019-02-28 12:38:29 +01:00
{
2022-12-30 16:28:23 +01:00
result + = $" bis {DueDate.Value:dd.MM.yyyy HH:mm}" ;
2019-02-28 12:38:29 +01:00
}
}
2024-11-13 19:54:49 +01:00
else
{
// Man darf den Betreff nicht sehen, wenn man der Originator ist und nicht in der nicht leeren EmployeeList ist oder man weder Originator noch in der EmployeeList ist
var isInEmployeeList = EmployeeList . Any ( e2A = > e2A . Employee . Equals ( BeWoApp . CompactLoggedOnEmployee ) ) ;
var isOriginator = Originator . Equals ( BeWoApp . CompactLoggedOnEmployee ) ;
if ( IsPrivate & & ( ! isOriginator & & ! isInEmployeeList | | ! isInEmployeeList ) )
{
result = "Privat" ;
}
}
2019-12-20 12:37:08 +01:00
2023-06-12 17:27:53 +02:00
if ( ! IsAbsenceTime | | ! _AbsenceTimeStart . HasValue )
2019-12-20 12:37:08 +01:00
{
2023-06-12 17:27:53 +02:00
return result ;
2019-12-20 12:37:08 +01:00
}
2023-06-12 17:27:53 +02:00
var absenceTimeEnd = _AbsenceTimeEnd ;
2023-07-03 21:05:05 +02:00
if ( ! absenceTimeEnd . HasValue )
2023-06-12 17:27:53 +02:00
{
2023-10-25 21:52:23 +02:00
return $"{result}{_AbsenceTimeStart.Value.GetIntervalDescription(absenceTimeEnd)}" ;
2023-07-03 21:05:05 +02:00
}
2023-06-12 17:27:53 +02:00
2023-07-03 21:05:05 +02:00
var absenceTimeStart = _AbsenceTimeStart . Value ;
if ( absenceTimeStart . IsTimeZero ( ) & & absenceTimeEnd . Value . IsTimeZero ( ) & & absenceTimeEnd . Value . AddDays ( - 1 ) > absenceTimeStart )
{
absenceTimeEnd = absenceTimeEnd . Value . AddDays ( - 1 ) ;
2023-06-12 17:27:53 +02:00
}
2023-10-25 21:52:23 +02:00
return $"{result}{_AbsenceTimeStart.Value.GetIntervalDescription(absenceTimeEnd)}" ;
2019-02-28 12:38:29 +01:00
}
}
public string Subject { get ; set ; }
public bool IsTask { get ; set ; }
public bool IsAbsenceTime { get ; set ; }
public bool IsPrivate { get ; set ; }
public bool IsAllDay { get ; set ; }
public LinearGradientBrush BackgroundColor = > new LinearGradientBrush ( new GradientStopCollection { new GradientStop ( IsTask ? Color . FromRgb ( 153 , 59 , 59 ) : Color . FromRgb ( 192 , 255 , 208 ) , 1 ) } , new Point ( . 5 , 0 ) , new Point ( . 5 , 1 ) ) ;
public LinearGradientBrush ForegroundColor = > new LinearGradientBrush ( new GradientStopCollection { new GradientStop ( IsTask ? Color . FromRgb ( 224 , 224 , 224 ) : Color . FromRgb ( 0 , 0 , 0 ) , 1 ) } , new Point ( . 5 , 0 ) , new Point ( . 5 , 1 ) ) ;
public ObservableCollection < Employee2SchedulerAppointmentDC > EmployeeList { get ; set ; } = new ObservableCollection < Employee2SchedulerAppointmentDC > ( ) ;
public List < CompactCustomerDC > CustomerList { get ; set ; } = new List < CompactCustomerDC > ( ) ;
public List < ResourceDC > ResourceList { get ; set ; } = new List < ResourceDC > ( ) ;
public List < CompactSupportConceptDC > SupportConceptList { get ; set ; } = new List < CompactSupportConceptDC > ( ) ;
public DateTime ? DueDate { get ; set ; }
public DateTime ? CompletedDate { get ; set ; }
public string CompletedNotice { get ; set ; }
2022-12-15 23:16:04 +01:00
public string CompletedUser { get ; set ; }
2019-02-28 12:38:29 +01:00
public string TaskDescription { get ; set ; }
2019-07-01 15:11:19 +02:00
public long? SchedulerAppointmentOid { get ; set ; }
public string RecurrenceId { get ; set ; }
public int RecurrenceIndex { get ; set ; }
2023-10-25 21:52:23 +02:00
2019-02-28 12:38:29 +01:00
public CompactEmployeeDC Originator { get ; set ; }
2019-12-20 12:37:08 +01:00
private DateTime ? _AbsenceTimeStart ;
private DateTime ? _AbsenceTimeEnd ;
2021-11-08 20:24:26 +01:00
public InternalInfo InternalInfo { get ; set ; }
2022-04-06 16:47:09 +02:00
public bool CanBeEdited { get ; set ; }
2022-10-11 16:48:36 +02:00
public long? AbsenceTimeOid { get ; set ; }
2022-12-30 16:28:23 +01:00
public bool IsCustomerAbsenceTime { get ; set ; }
2019-02-28 12:38:29 +01:00
public CustomFieldStorage ( )
{
}
public CustomFieldStorage ( SchedulerAppointmentVM pAppointment )
{
IsTask = pAppointment . IsTask ;
IsAbsenceTime = pAppointment . IsAbsenceTime ;
IsPrivate = pAppointment . IsPrivate ;
IsAllDay = pAppointment . AllDay ;
EmployeeList = pAppointment . EmployeeList ;
CustomerList = pAppointment . CustomerList ;
ResourceList = pAppointment . ResourceList ;
SupportConceptList = pAppointment . SupportConceptList ;
DueDate = pAppointment . DueDate ;
CompletedDate = pAppointment . CompletedDate ;
CompletedNotice = pAppointment . CompletedNotice ;
TaskDescription = pAppointment . TaskDescription ;
Originator = pAppointment . Originator ;
Subject = pAppointment . Subject ;
2019-07-01 15:11:19 +02:00
SchedulerAppointmentOid = pAppointment . DataContract ? . SchedulerAppointmentOid ;
2023-10-25 21:52:23 +02:00
RecurrenceId = pAppointment . DataContract ? . RecurrenceIdReference ;
RecurrenceIndex = pAppointment . DataContract ? . RecurrenceIndexReference ? ? 0 ;
2019-12-20 12:37:08 +01:00
_AbsenceTimeStart = pAppointment . AbsenceTimeStart ;
_AbsenceTimeEnd = pAppointment . AbsenceTimeEnd ;
2020-08-04 12:45:46 +02:00
HasServiceRecordEntry = pAppointment . HasServiceRecordEntry ;
2022-04-06 16:47:09 +02:00
CanBeEdited = pAppointment . CanBeEdited ;
2022-10-11 16:48:36 +02:00
AbsenceTimeOid = pAppointment . AbsenceTimeOid ;
2022-12-30 16:28:23 +01:00
IsCustomerAbsenceTime = pAppointment . IsCustomerAbsenceTime ;
2023-01-26 12:55:56 +01:00
ServiceRecordList = pAppointment . ServiceRecordList ;
2019-02-28 12:38:29 +01:00
}
2023-10-25 21:52:23 +02:00
/// <summary>
/// Erzeugt ein CustomFieldStorage-Objekt aus einem SchedulerAppointmentDC. Wird nur für veränderte Serientermine benutzt.
/// </summary>
/// <param name="pAppointment">Der veränderte Serientermin als SchedulerAppointmentDC</param>
2019-02-28 12:38:29 +01:00
public CustomFieldStorage ( SchedulerAppointmentDC pAppointment )
{
IsTask = pAppointment . IsTask ;
IsAbsenceTime = false ;
IsPrivate = pAppointment . IsPrivate ;
IsAllDay = pAppointment . AllDay ;
EmployeeList = new ObservableCollection < Employee2SchedulerAppointmentDC > ( pAppointment . EmployeeList ) ;
CustomerList = pAppointment . CustomerList ;
ResourceList = pAppointment . ResourceList ;
SupportConceptList = pAppointment . SupportConceptList ;
2023-03-03 21:54:36 +01:00
ServiceRecordList = pAppointment . ServiceRecordList ;
2019-02-28 12:38:29 +01:00
DueDate = pAppointment . DueDate ;
CompletedDate = pAppointment . CompletedDate ;
CompletedNotice = pAppointment . CompletedNotice ;
TaskDescription = pAppointment . TaskDescription ;
Originator = pAppointment . Originator ;
Subject = pAppointment . Subject ;
2019-07-01 15:11:19 +02:00
SchedulerAppointmentOid = pAppointment . SchedulerAppointmentOid ;
2023-10-25 21:52:23 +02:00
RecurrenceId = pAppointment . RecurrenceIdReference ;
RecurrenceIndex = pAppointment . RecurrenceIndexReference ? ? 0 ;
2020-08-04 12:45:46 +02:00
HasServiceRecordEntry = pAppointment . HasServiceRecordEntry ;
2022-04-06 16:47:09 +02:00
CanBeEdited = pAppointment . CanBeEdited ;
2019-02-28 12:38:29 +01:00
}
2023-03-03 21:54:36 +01:00
public CustomFieldStorage ( ObservableCollection < Employee2SchedulerAppointmentDC > pEmployees , List < CompactCustomerDC > pCustomers , List < ResourceDC > pResources , CompactEmployeeDC pOriginator , bool pIsPrivate , bool pIsTask , string pTaskDescription , DateTime ? pDueDate , DateTime ? pCompletedDate , string pCompletedNotice , List < CompactSupportConceptDC > pSupportConcepts , string pSubject , bool pIsAllDay , List < ServiceRecordDC > serviceRecords )
2019-02-28 12:38:29 +01:00
{
IsTask = pIsTask ;
IsPrivate = pIsPrivate ;
IsAllDay = pIsAllDay ;
EmployeeList = pEmployees ;
CustomerList = pCustomers ;
ResourceList = pResources ;
2023-03-03 21:54:36 +01:00
2019-02-28 12:38:29 +01:00
SupportConceptList = pSupportConcepts ;
2023-03-03 21:54:36 +01:00
ServiceRecordList = serviceRecords ;
2019-02-28 12:38:29 +01:00
DueDate = pDueDate ;
CompletedDate = pCompletedDate ;
CompletedNotice = pCompletedNotice ;
TaskDescription = pTaskDescription ;
Originator = pOriginator ;
Subject = pSubject ;
}
2023-07-03 21:05:05 +02:00
public Visibility ToolTipTimeVisibility = > IsTask | | IsAbsenceTime ? Visibility . Collapsed : Visibility . Visible ;
2019-02-28 12:38:29 +01:00
public Visibility ToolTipResourcesVisibility = > ResourceList ? . Count > 0 ? Visibility . Visible : Visibility . Collapsed ;
public Visibility ToolTipEmployeesVisibility = > EmployeeList ? . Count > 0 ? Visibility . Visible : Visibility . Collapsed ;
public Visibility ToolTipCustomersVisibility = > CustomerList ? . Count > 0 ? Visibility . Visible : Visibility . Collapsed ;
public Visibility ToolTipTrennstrichVisibility = > EmployeeList ? . Count > 0 | | CustomerList ? . Count > 0 | | ResourceList ? . Count > 0 ? Visibility . Visible : Visibility . Collapsed ;
public Visibility ToolTipZusageVisibility = > IsTask ? Visibility . Collapsed : Visibility . Visible ;
2020-08-04 12:45:46 +02:00
public bool HasServiceRecordEntry { get ; set ; }
2023-01-26 12:55:56 +01:00
public List < ServiceRecordDC > ServiceRecordList { get ; set ; } = new List < ServiceRecordDC > ( ) ;
2019-02-28 12:38:29 +01:00
}
2021-11-08 20:24:26 +01:00
public class InternalInfo
{
public bool IsTimeChangedRecurringAppointment { get ; set ; }
}
2019-02-28 12:38:29 +01:00
}