2018-10-08 11:57:16 +02:00
using System ;
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Linq ;
using System.Windows ;
using System.Windows.Controls ;
using System.Windows.Input ;
using BeWo.Annotations ;
using BeWo.Core ;
using BeWo.ServiceProxy ;
using BeWo.Validation ;
using BeWo.View.Controls ;
using BeWo.ViewModel ;
using BeWo.ViewModel.ListViewModel ;
using BS.Shared ;
using BS.Shared.Core ;
using BS.Shared.DataContracts ;
using BS.Shared.Extensions ;
using DevExpress.Utils ;
using DevExpress.Xpf.Editors ;
2021-02-21 19:01:51 +01:00
using DevExpress.Xpf.Editors.Settings ;
2018-10-08 11:57:16 +02:00
using DevExpress.Xpf.Grid ;
2021-02-21 19:01:51 +01:00
using DevExpress.XtraRichEdit.Mouse ;
2018-10-08 11:57:16 +02:00
namespace BeWo.View
{
public partial class NotizenView : INotifyPropertyChanged
{
2019-08-09 16:40:41 +02:00
private ObservableSortCollection < ValueListEntryDC > _AlleEintragKategorien ;
private ObservableSortCollection < ValueListEntryDC > _AlleEintragKategorienMitLeereintrag ;
public NotizenView ( TableID objectTid , long objectOid , ObservableSortCollection < ValueListEntryDC > possibleKategoriesDCs )
{
InitializeComponent ( ) ;
_JahresComboBoxSource = new List < int > ( ) ;
for ( var i = 9 ; i > = 0 ; i - - )
{
_JahresComboBoxSource . Add ( DateTime . Now . Year - i ) ;
}
_MonatsComboBoxSource = new List < int > { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 } ;
currentObjectOid = objectOid ;
currentObjectTid = objectTid ;
2019-12-09 11:38:52 +01:00
NewNotizenEintrag = new NotizenEintragVM ( new NotizenEintragDC { Datum = DateTime . Now . Date } ) ;
2019-08-09 16:40:41 +02:00
InitRights ( ) ;
ReloadViewModel ( ) ;
if ( tabcontrol_NotizenKategorien ! = null & & tabcontrol_NotizenKategorien . SelectedIndex = = - 1 )
{
tabcontrol_NotizenKategorien . SelectedIndex = 0 ;
}
_AlleEintragKategorien = possibleKategoriesDCs ;
_AlleEintragKategorienMitLeereintrag = new ObservableSortCollection < ValueListEntryDC > ( ) ;
_AlleEintragKategorienMitLeereintrag . Add ( new ValueListEntryDC { TypeDescription = " " , ValueListEntryOid = - 1 } ) ;
_AlleEintragKategorienMitLeereintrag . AddRange ( possibleKategoriesDCs ) ;
}
2018-10-08 11:57:16 +02:00
public NotizenEintragVM NewNotizenEintrag { get ; set ; }
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public NotizenKategorieVM SelectedNotizenKategorie { get ; set ; }
public static DateTime PreselectedStartDate
{
get { return new DateTime ( DateTime . Now . Year , DateTime . Now . Month , 1 ) ; ; }
}
public static DateTime PreselectedEndDate
{
get
{
return new DateTime ( DateTime . Now . Year , DateTime . Now . Month , DateTime . DaysInMonth ( DateTime . Now . Year , DateTime . Now . Month ) ) ;
}
}
public static int PreselectedMonth
{
get { return DateTime . Now . Month ; }
}
public static int PreselectedYear
{
get { return DateTime . Now . Year ; }
}
private readonly List < int > _JahresComboBoxSource ;
public IEnumerable < int > JahresComboBoxSource
{
get { return _JahresComboBoxSource ; }
}
private readonly List < int > _MonatsComboBoxSource ;
public IEnumerable < int > MonatsComboBoxSource
{
get { return _MonatsComboBoxSource ; }
}
private static bool darfNotizenEintraegeBearbeiten ;
private static DefaultBoolean darfNotizenEintraegeBearbeitenAsDefaultBoolean ;
private static bool darfNotizenEintraegeAnlegen ;
private static bool darfNotizenEintraegeLoeschen ;
public static bool DarfNotizenEintraegeBearbeiten
{
get { return darfNotizenEintraegeBearbeiten ; }
}
public static DefaultBoolean NotizenEintraegeBearbeitenAlsDefaultBooelan
{
get { return darfNotizenEintraegeBearbeitenAsDefaultBoolean ; }
}
public static bool DarfNotizenEintraegeLoeschen
{
get { return darfNotizenEintraegeLoeschen ; }
}
public static bool DarfNotizenEintraegeAnlegen
{
get { return darfNotizenEintraegeAnlegen ; }
}
private NotizenKategorieListVM _ViewModel ;
private NotizenKategorieListVM ViewModel
{
get { return _ViewModel ; }
set
{
DataContext = value ;
_ViewModel = value ;
}
}
2019-08-09 16:40:41 +02:00
public ObservableSortCollection < ValueListEntryDC > EintragKategorien = > _AlleEintragKategorien ;
public ObservableSortCollection < ValueListEntryDC > EintragKategorienMitLeereintrag = > _AlleEintragKategorienMitLeereintrag ;
2018-10-08 11:57:16 +02:00
private readonly TableID currentObjectTid ;
private readonly long currentObjectOid ;
public override bool IsDirty
{
get
{
return ViewModel ! = null & & ViewModel . IsDirty ;
}
}
2019-08-09 16:40:41 +02:00
2018-10-08 11:57:16 +02:00
private void InitRights ( )
{
//bool editRight;
//DefaultBoolean editRightAsDefaultBoolean;
//bool deleteRight;
//bool createRight;
//if (currentObjectTid == TableID.Customer)
//{
// editRight = BeWoApp.LoggedOnUser.HasRight(UserRightType.BargeldverwaltungBearbeiten) || BeWoApp.LoggedOnUser.HasRight(UserRightType.EditAll);
// editRightAsDefaultBoolean = (DefaultBoolean)(Convert.ToInt32((BeWoApp.LoggedOnUser.HasRight(UserRightType.BargeldverwaltungBearbeiten)) || BeWoApp.LoggedOnUser.HasRight(UserRightType.EditAll)) + 1);
// deleteRight = BeWoApp.LoggedOnUser.HasRight(UserRightType.BargeldverwaltungLoeschen) || BeWoApp.LoggedOnUser.HasRight(UserRightType.DeleteAll);
// createRight = BeWoApp.LoggedOnUser.HasRight(UserRightType.BargeldverwaltungAnlegen) || BeWoApp.LoggedOnUser.HasRight(UserRightType.CreateAll);
//}
//else
//{
// editRight = BeWoApp.LoggedOnUser.HasRight(UserRightType.BargeldverwaltungFinanzenBearbeiten) || BeWoApp.LoggedOnUser.HasRight(UserRightType.EditAll);
// editRightAsDefaultBoolean = (DefaultBoolean)(Convert.ToInt32((BeWoApp.LoggedOnUser.HasRight(UserRightType.BargeldverwaltungFinanzenBearbeiten)) || BeWoApp.LoggedOnUser.HasRight(UserRightType.EditAll)) + 1);
// deleteRight = BeWoApp.LoggedOnUser.HasRight(UserRightType.BargeldverwaltungFinanzenLoeschen) || BeWoApp.LoggedOnUser.HasRight(UserRightType.DeleteAll);
// createRight = BeWoApp.LoggedOnUser.HasRight(UserRightType.BargeldverwaltungFinanzenAnlegen) || BeWoApp.LoggedOnUser.HasRight(UserRightType.CreateAll);
//}
//darfBargeldTransaktionenBearbeiten = editRight;
//darfBargeldTransaktionenBearbeitenAsDefaultBoolean = editRightAsDefaultBoolean;
//darfBargeldTransaktionenLoeschen = deleteRight;
//darfBargeldTransaktionenAnlegen = createRight;
2021-02-21 19:01:51 +01:00
2018-10-08 11:57:16 +02:00
darfNotizenEintraegeAnlegen = true ;
darfNotizenEintraegeBearbeiten = true ;
darfNotizenEintraegeBearbeitenAsDefaultBoolean = DefaultBoolean . True ;
darfNotizenEintraegeLoeschen = true ;
2021-02-21 19:01:51 +01:00
if ( currentObjectTid = = TableID . Customer )
{
darfNotizenEintraegeAnlegen = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Customer_EditNotizen ) ;
darfNotizenEintraegeBearbeiten = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Customer_EditNotizen ) ;
darfNotizenEintraegeBearbeitenAsDefaultBoolean = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Customer_EditNotizen ) ? DefaultBoolean . True : DefaultBoolean . False ;
darfNotizenEintraegeLoeschen = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Customer_DeleteNotizen ) ;
}
else if ( currentObjectTid = = TableID . Employee )
{
darfNotizenEintraegeAnlegen = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_EditNotizen ) ;
darfNotizenEintraegeBearbeiten = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_EditNotizen ) ;
darfNotizenEintraegeBearbeitenAsDefaultBoolean = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_EditNotizen ) ? DefaultBoolean . True : DefaultBoolean . False ;
darfNotizenEintraegeLoeschen = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_DeleteNotizen ) ;
}
2018-10-08 11:57:16 +02:00
}
private void ReloadViewModel ( )
{
var previouslySelectedTab = tabcontrol_NotizenKategorien . SelectedIndex ;
ServiceFacade . DoOperationsServiceAsync ( s = > s . LoadNotizenKategorienForObject ( currentObjectTid , currentObjectOid ) , r = > this . Dispatch (
delegate
{
if ( r . Any ( ) )
{
int? alteAnzahl = null ;
if ( ViewModel ! = null )
{
alteAnzahl = ViewModel . VMList . Count ;
}
ViewModel = new NotizenKategorieListVM ( r ) ;
var neueAnzahl = ViewModel . VMList . Count ;
if ( alteAnzahl ! = null & & neueAnzahl > alteAnzahl )
{
tabcontrol_NotizenKategorien . SelectedIndex = neueAnzahl - 1 ;
}
else if ( previouslySelectedTab > - 1 )
{
tabcontrol_NotizenKategorien . SelectedIndex = previouslySelectedTab ;
}
else
{
tabcontrol_NotizenKategorien . SelectedIndex = 0 ;
}
ViewModel . VMList . DoForEach ( d = > d . NotizenEintraege . VMList . ListChanged + = ( sender , args ) = >
{
var isRelevantProperty = false ;
if ( args . PropertyDescriptor ! = null )
{
isRelevantProperty = args . PropertyDescriptor . Name . Equals ( NotizenEintragVM . PropertyName_Datum ) | |
2019-08-09 16:40:41 +02:00
args . PropertyDescriptor . Name . Equals ( NotizenEintragVM . PropertyName_Notice ) | |
args . PropertyDescriptor . Name . Equals ( NotizenEintragVM . PropertyName_EintragKategorieDC ) ;
2018-10-08 11:57:16 +02:00
}
if ( args . ListChangedType . Equals ( ListChangedType . ItemChanged ) & & isRelevantProperty )
{
var eintraege = ( BindingList < NotizenEintragVM > ) sender ;
var kategorie = ViewModel . VMList . FirstOrDefault ( f = > f . NotizenEintraege . VMList . Equals ( eintraege ) ) ;
if ( kategorie ! = null )
{
ServiceFacade . DoOperationsServiceAsync ( s = > s . UpdateNotizenKategorie ( kategorie . CommitToDataContract ( ) ) , r2 = > this . Dispatch ( ReloadViewModel ) ) ;
}
}
} ) ;
}
else
{
ViewModel = new NotizenKategorieListVM ( new List < NotizenKategorieDC > ( ) ) ;
}
} ) ) ;
}
private void GridNotizenEintraegeOnCustomColumnSort ( object sender , CustomColumnSortEventArgs e )
{
e . Result = DateTime . Compare ( Convert . ToDateTime ( e . Value1 ) , Convert . ToDateTime ( e . Value2 ) ) ;
e . Handled = true ;
}
private void KategorieLinkOnPreviewMouseLeftButtonDown ( object sender , MouseButtonEventArgs e )
{
var textBlock = ( TextBlock ) sender ;
var kategorie = ( ( NotizenKategorieVM ) textBlock . Tag ) . CommitToDataContract ( ) ;
var parentStackPanel = ( StackPanel ) textBlock . Parent ;
var kinder = parentStackPanel . Children ;
var startzeitraum = ( DateEdit ) kinder [ 2 ] ;
var endzeitraum = ( DateEdit ) kinder [ 4 ] ;
string url = BeWoApp . SiteOfOrigin + "/ReportView.aspx?katOid=" + kategorie . NotizenKategorieOid . Value + "&start=" + String . Format ( "{0:dd.MM.yyyy}" , startzeitraum . DateTime ) + "&end=" + String . Format ( "{0:dd.MM.yyyy}" , endzeitraum . DateTime ) + "&type=" + Utils . EnumName ( ReportTypes . NotizenKategorie ) ;
BeWoUtils . NavigateToReportUri ( url , "Druckvorschau" ) ;
//ServiceFacade.DoReportServiceAsync(strom => strom.CreateKassenbuchReportImZeitraum(zeitraum, endzeitraum, kasse, objectOid, objectTid), ms => BeWoApp.MainControl.Dispatch(() => ShowReportWindow(ms, title)));
//BeWoUtils.ShowReport("Kassenbuch", new Dictionary<String, Object> { { "bargeldkasse", kategorie }, { "zeitraum", startzeitraum.DateTime }, { "endzeitraum", endzeitraum.DateTime }, { "objectoid", kategorie.ObjectOid }, { "objecttid", kategorie.ObjectTid } }, ReportEnum.KassenbuchReportEnum);
}
private void ButtonNotizenEintragDeleteClick ( object sender , RoutedEventArgs e )
{
var btn = ( ( Button ) sender ) ;
var eintrag = ( ( NotizenEintragVM ) ( ( EditGridCellData ) btn . Tag ) . RowData . Row ) ;
if ( MessageBox . Show ( "Möchten Sie den Eintrag wirklich löschen?" , "Eintrag löschen" , MessageBoxButton . YesNo , MessageBoxImage . Warning ) = = MessageBoxResult . No )
{
return ;
}
var cellEditor = ( ( CellEditor ) btn . TemplatedParent ) . RowData . View ;
var selectedNotizenKategorie = ( NotizenKategorieVM ) cellEditor . DataControl . Tag ;
var removingSuccessfull = selectedNotizenKategorie . NotizenEintraege . VMList . Remove ( eintrag ) ;
ServiceFacade . DoOperationsServiceAsync ( s = > s . DeactivateNotizenEintrag ( eintrag . DataContract . NotizenEintragOid . Value , eintrag . DataContract . NotizenEintragVersion . Value ) , ( ) = > this . Dispatch ( ReloadViewModel ) ) ;
//ServiceFacade.DoOperationsServiceAsync(s => s.UpdateNotizenKategorie(selectedNotizenKategorie.CommitToDataContract()), r => this.Dispatch(ReloadViewModel));
}
private void ButtonAddNotizenKategorieClick ( object sender , RoutedEventArgs e )
{
if ( ! Validate ( groupbox_newNotizenKategorie ) )
{
return ;
}
var neu = ViewModel . NewVM ;
neu . ObjectOid = currentObjectOid ;
neu . ObjectTid = currentObjectTid ;
ServiceFacade . DoOperationsServiceAsync ( s = > s . InsertNewNotizenKategorie ( neu . CommitToDataContract ( ) ) , r = > this . Dispatch ( delegate
{
popup_newNotizenKategorie . IsOpen = false ;
ViewModel . NewVM = new NotizenKategorieVM ( new NotizenKategorieDC ( ) ) ;
ReloadViewModel ( ) ;
} ) ) ;
}
private void ButtonCancelAddNotizenKategorieClick ( object sender , RoutedEventArgs e )
{
popup_newNotizenKategorie . IsOpen = false ;
}
private void ButtonOpenAddNotizenKategorieClick ( object sender , RoutedEventArgs e )
{
popup_newNotizenKategorie . IsOpen = true ;
}
private void ButtonAddNotizenEintragClick ( object sender , RoutedEventArgs e )
{
if ( ! Validate ( groupbox_newNotizenEintrag ) )
{
return ;
}
SelectedNotizenKategorie . NotizenEintraege . NewVM = NewNotizenEintrag ;
SelectedNotizenKategorie . NotizenEintraege . AddNewVMToList ( ) ;
2019-12-09 11:38:52 +01:00
NewNotizenEintrag = new NotizenEintragVM ( new NotizenEintragDC { Datum = DateTime . Now . Date } ) ;
2018-10-08 11:57:16 +02:00
ServiceFacade . DoOperationsServiceAsync ( s = > s . UpdateNotizenKategorie ( SelectedNotizenKategorie . CommitToDataContract ( ) ) , r = > this . Dispatch ( delegate
{
popup_newNotizenEintrag . IsOpen = false ;
2019-12-09 11:38:52 +01:00
NewNotizenEintrag = new NotizenEintragVM ( new NotizenEintragDC { Datum = DateTime . Now . Date } ) ;
2018-10-08 11:57:16 +02:00
SelectedNotizenKategorie = null ;
OnPropertyChanged ( "NewNotizenEintrag" ) ;
OnPropertyChanged ( "SelectedNotizenKategorie" ) ;
ReloadViewModel ( ) ;
} ) ) ;
}
private void ButtonCancelAddNotizenEintragClick ( object sender , RoutedEventArgs e )
{
2019-12-09 11:38:52 +01:00
NewNotizenEintrag = new NotizenEintragVM ( new NotizenEintragDC { Datum = DateTime . Now . Date } ) ;
2018-10-08 11:57:16 +02:00
SelectedNotizenKategorie = null ;
OnPropertyChanged ( "NewNotizenEintrag" ) ;
OnPropertyChanged ( "SelectedNotizenKategorie" ) ;
popup_newNotizenEintrag . IsOpen = false ;
}
private void ButtonOpenAddNotizenEintragClick ( object sender , RoutedEventArgs e )
{
var abc = ( ( Button ) sender ) . Tag ;
if ( abc ! = null )
{
SelectedNotizenKategorie = ( NotizenKategorieVM ) abc ;
OnPropertyChanged ( "SelectedNotizenKategorie" ) ;
}
popup_newNotizenEintrag . IsOpen = true ;
}
private void BtnDeleteNotizenKategorieClick ( object sender , RoutedEventArgs e )
{
var button = ( Button ) sender ;
var selectedNotizenKategorie = ( NotizenKategorieVM ) button . Tag ;
var result = MessageBox . Show ( string . Format ( "Möchten Sie die Kategorie \"{0}\" wirklich löschen?" , selectedNotizenKategorie . KategorieName ) , "Kategorie löschen" , MessageBoxButton . YesNo , MessageBoxImage . Warning ) ;
if ( result = = MessageBoxResult . No )
{
return ;
}
ViewModel . VMList . Remove ( selectedNotizenKategorie ) ;
ServiceFacade . DoOperationsServiceAsync ( s = > s . DeactivateNotizenKategorie ( selectedNotizenKategorie . DataContract . NotizenKategorieOid . Value , selectedNotizenKategorie . DataContract . NotizenKategorieVersion . Value ) , ( ) = > this . Dispatch ( ReloadViewModel ) ) ;
}
public event PropertyChangedEventHandler PropertyChanged ;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged ( string propertyName )
{
var handler = PropertyChanged ;
if ( handler ! = null )
{
handler ( this , new PropertyChangedEventArgs ( propertyName ) ) ;
}
}
private void KategorienamenChangeButtonClick ( object sender , RoutedEventArgs e )
{
var btn = ( Button ) sender ;
var panel = ( StackPanel ) btn . Parent ;
var popup = ( PopupNonTopmost ) panel . Children [ 2 ] ;
popup . IsOpen = ! popup . IsOpen ;
}
private void KategorienamenChangeCancelButtonClick ( object sender , RoutedEventArgs e )
{
var btn = ( Button ) sender ;
var popupMostInnerChild = BeWoWpfUtils . FindParent < Border > ( btn ) ;
var popup = ( PopupNonTopmost ) LogicalTreeHelper . GetParent ( popupMostInnerChild ) ;
popup . IsOpen = false ;
}
private void KategorienamenChangeSaveButtonClick ( object sender , RoutedEventArgs e )
{
var btn = ( Button ) sender ;
var popupMostInnerChild = BeWoWpfUtils . FindParent < Border > ( btn ) ;
var popup = ( PopupNonTopmost ) LogicalTreeHelper . GetParent ( popupMostInnerChild ) ;
var notizenKategorie = ( NotizenKategorieVM ) tabcontrol_NotizenKategorien . SelectedItem ;
ServiceFacade . DoOperationsServiceAsync ( s = > s . UpdateNotizenKategorie ( notizenKategorie . CommitToDataContract ( ) ) , r = > this . Dispatch ( delegate
{
popup . IsOpen = false ;
ReloadViewModel ( ) ;
} ) ) ;
}
2021-02-21 19:01:51 +01:00
private void Grid_OnLoaded ( object sender , RoutedEventArgs e )
{
var grid = sender as GridControl ;
SetColumnNoticeEditSettings ( grid ) ;
}
private void SetColumnNoticeEditSettings ( GridControl grid )
{
if ( grid ! = null & & grid . Columns . Count > 0 & & DarfNotizenEintraegeBearbeiten )
{
var ms = new MemoEditSettings ( ) ;
2023-08-16 10:25:05 +02:00
ms . TextWrapping = TextWrapping . Wrap ;
2021-02-21 19:01:51 +01:00
ms . AcceptsReturn = true ;
2023-08-16 10:25:05 +02:00
ms . MemoTextWrapping = TextWrapping . Wrap ;
2021-02-21 19:01:51 +01:00
ms . MemoAcceptsReturn = true ;
ms . ShowIcon = false ;
ms . ShowTooltipForTrimmedText = true ;
grid . Columns [ grid . Columns . Count - 1 ] . EditSettings = ms ;
}
}
2018-10-08 11:57:16 +02:00
}
}