Files
BeWoPlaner/BeWo/View/Detail/CustomerView2.xaml.cs
Lyndon Jetten 23b8757ff5 FaC: Neues Scheduling-Modul hinzugefügt, aber noch lange nicht fertig.
ownChat: Neues TimeStamp-Objekt wird unterstützt und der Chat funktioniert wieder.
2024-06-05 14:45:33 +02:00

429 lines
16 KiB
C#

using System;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using BeWo.Core;
using BeWo.Core.Service;
using BeWo.ServiceProxy;
using BeWo.Validation;
using BeWo.ViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using DevExpress.Xpf.Grid;
using CheckBox = System.Windows.Controls.CheckBox;
namespace BeWo.View.Detail
{
public partial class CustomerView2 : BeWoView
{
private PersonView _PersonModalPopUp;
private OrganisationView _OrganisationModalPopUp;
private CustomerVM _ViewModel;
private GridControl grid_AbsenceTimes;
private GridControl grid_EmployeeRelation;
private GridControl grid_TeamRelation;
private GridControl grid_Persons;
private GridControl grid_Organisations;
private GridControl grid_costBearers;
private StringBuilder _LogText;
public CustomerView2(CustomerVM pCustomerVM)
{
InitializeComponent();
if (ShouldLog)
{
_LogText = new StringBuilder();
tabitem_log.Visibility = Visibility.Visible;
}
else
{
tabitem_log.Visibility = Visibility.Collapsed;
}
ViewModel = pCustomerVM;
if (pCustomerVM.VarFields == null || pCustomerVM.VarFields.VMList.Count == 0)
tabitem_varFields.Visibility = Visibility.Collapsed;
if (!BeWoApp.AppSettings.ShowLargeCustomerNotice)
tabitem_notice.Visibility = Visibility.Collapsed;
// HACK: Force the devexpress grid to end editing when the mouse is over savebutton
// by setting the focus to another element.
MouseMove += (s, e) =>
{
if ((grid_AbsenceTimes == null || !grid_AbsenceTimes.IsVisible) &&
(grid_EmployeeRelation == null || !grid_EmployeeRelation.IsVisible) &&
(grid_TeamRelation == null || !grid_TeamRelation.IsVisible) &&
(grid_costBearers == null || !grid_costBearers.IsVisible) &&
(grid_Persons == null || !grid_Persons.IsVisible) &&
(grid_Organisations == null || !grid_Organisations.IsVisible))
{
return;
}
Point p = e.GetPosition(btnSave);
if (p.X >= 0 && p.X < btnSave.ActualWidth && p.Y >= 0 && p.Y < btnSave.ActualHeight)
{
var i = tabroot.Focus();
}
};
InitCustomerCareTypeList();
panelDebitor.Visibility = Visibility.Visible;
txtDebitorNumber.Visibility = lblDebitorNumber.Visibility;
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Customer_AllowArchiving))
{
lblArchiviert.Visibility = Visibility.Hidden;
chkArchiviert.Visibility = Visibility.Hidden;
}
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsAllowViewAll) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.DokumenteKlienten))
{
tabitem_documents.Visibility = Visibility.Collapsed;
}
Log("Jugendhilfeklient geöffnet");
}
private void Log(string log)
{
if (!ShouldLog)
return;
if (_LogText == null)
_LogText = new StringBuilder();
if (_LogText.Length > 0)
_LogText.Append("\n");
_LogText.Append(log);
}
public override bool IsDirty
{
get { return ViewModel != null ? ViewModel.IsDirty : false; }
}
public override string Title
{
get { return "Klienten"; }
}
internal override System.Windows.DependencyObject ValidationOnSaveRootElement
{
get
{
return grid_details;
}
}
private CustomerVM ViewModel
{
get { return _ViewModel; }
set
{
_ViewModel = value;
root.DataContext = value;
Log(String.Format("ViewModel gesetzt. DataContext={0}", root.DataContext));
if (_ViewModel != null && ShouldLog)
_ViewModel.EnableLogging(true, _LogText);
if (ViewModel.Jugendamt != null)
{
popupedit_OrganisationSearch.Text = ViewModel.Jugendamt.ToString();
personsearchview.OrganisationRelOid = ViewModel.Jugendamt.OrganisationOid;
personsearchview.UpdateFilteredList();
}
if (ViewModel.Ansprechpartner != null)
popupedit_PersonSearch.Text = ViewModel.Ansprechpartner.ToString();
}
}
public override void ModalPopUpCloseInvoked()
{
MainControl.CloseCurrentPopUp();
}
public override void ModalPopUpSaveInvoked()
{
// TODO nicht schön, umbauen wenn an weiteren Stellen popup hierachien nötig werden
if (_PersonModalPopUp != null)
{
if (_PersonModalPopUp._OrganisationModalPopUp != null)
_PersonModalPopUp._OrganisationModalPopUp.SaveData();
else
_PersonModalPopUp.SaveData();
}
else if (_OrganisationModalPopUp != null)
{
_OrganisationModalPopUp.SaveData();
}
}
protected override UserRightType[] GetSaveDemands()
{
return ViewModel.IsNew ? new[] { UserRightType.CreateAll, UserRightType.CustomerView_Create } : new[] { UserRightType.EditAll, UserRightType.CustomerView_Edit };
}
protected override void Save()
{
CustomerDC lDataContract = ViewModel.CommitToDataContract();
try
{
if (ViewModel.IsNew)
{
ServiceFacade.DoCustomerServiceAsync(s => s.InsertNewCustomer(lDataContract), ReloadViewModel);
}
else
{
ServiceFacade.DoCustomerServiceAsync(s => s.UpdateCustomer(lDataContract), ReloadViewModel);
}
Cache.GetInstance().ClearSupportConceptTree();
Cache.GetInstance().ClearCustomers();
BeWoApp.MainControl.ResetView(UIContext.Customer);
}
catch (FaultException<BeWoFault>)
{
MessageBox.Show("Dieser Datensatz wurde in der Zwischenzeit von " + BS.Shared.Translation.Translator.Translate("einem anderen Benutzer") + " geändert. Klicken Sie Ok um den Datansatz erneut zu laden. Ihre Änderungen gehen dabei leider verloren.");
this.ReloadViewModel(lDataContract.CustomerOid.Value);
}
}
private void Button_deleteCostBearerClick(object sender, RoutedEventArgs e)
{
ViewModel.CostBearers.VMList.Remove(grid_costBearers.GetCurrentValue<CustomerCostBearerRealtionVM>());
BeWoWpfUtils.RefreshDXGrid(grid_costBearers);
}
private void EmployeeSearchView_ItemSelected_1(object sender, EventArgs<CompactEmployeeDC> e)
{
popup_employee.IsOpen = false;
ViewModel.EmployeeRelations.NewVM.Employee = e.Data;
//this.popupedit_employeeRelations.Focus();
}
private void TeamSearchView_ItemSelected_1(object sender, EventArgs<CompactTeamDC> e)
{
popup_team.IsOpen = false;
ViewModel.TeamRelations.NewVM.Team = e.Data;
//popupedit_teamRelations.Focus();
}
private void InitCustomerCareTypeList()
{
foreach (ValueListEntryDC dc in ViewModel.PossibleCustomerCareTypes)
{
CheckBox chkBox = new CheckBox();
chkBox.IsChecked = ViewModel.CustomerCareTypes.Contains(dc);
chkBox.Content = dc;
chkBox.Checked += (s, e) =>
{
CheckBox cb = (CheckBox)s;
ViewModel.CustomerCareTypes.Add((ValueListEntryDC)cb.Content);
};
chkBox.Unchecked += (s, e) =>
{
CheckBox cb = (CheckBox)s;
ViewModel.CustomerCareTypes.Remove((ValueListEntryDC)cb.Content);
};
//this.customerCareTypeList.Items.Add(chkBox);
}
}
private void ReloadViewModel(long pCustomerOID)
{
// reload to update version informations and oid
VMFactory.CreateCustomerVMAsync(pCustomerOID, cb => this.Dispatch(delegate { ViewModel = cb; }));
}
private void TabItemAbsenceTimes_Selected(object sender, RoutedEventArgs e)
{
if (grid_AbsenceTimes != null)
return;
grid_AbsenceTimes = root.Resources["datagrid_absences"] as GridControl;
//var col = this.grid_AbsenceTimes.Columns["End"];
//DateEditSettings des = col.EditSettings as DateEditSettings;
//des.DisplayTextConverter = new DateNullValueToEmptyStringConverter();
GroupBoxAbsenceTimes.Content = this.grid_AbsenceTimes;
//if (ViewModel.AbsenceTimes != null)
// grid_AbsenceTimes.Columns["Reason"].EditSettings = new ComboBoxEditSettings { ItemsSource = ViewModel.AbsenceTimes.PossibleReasons };
}
private void TabItemCostBearer_Selected(object sender, RoutedEventArgs e)
{
if (this.grid_costBearers == null)
{
this.grid_costBearers = this.root.Resources["grid_costBearer"] as GridControl;
this.GroupBoxCostBearerGrid.Content = this.grid_costBearers;
}
}
private void UserControl_GotFocus(object sender, RoutedEventArgs e)
{
if (e.OriginalSource.Equals(this))
{
this.textbox_first.Focus();
}
}
private void button_addAbsence_Click(object sender, RoutedEventArgs e)
{
if (ValidationTrigger.Validate(groupbox_newAbsenceTime))
ViewModel.AbsenceTimes.AddNewVMToList();
}
private void button_addCostBearer_Click(object sender, RoutedEventArgs e)
{
if (ValidationTrigger.Validate(groupBox_newCostBearer))
ViewModel.CostBearers.AddNewVMToList();
}
private void button_environmentPersonDeleteClick(object sender, RoutedEventArgs e)
{
ViewModel.EnvironmentPersons.VMList.Remove(grid_Persons.GetCurrentValue<CustomerPersonRelationVM>());
BeWoWpfUtils.RefreshDXGrid(grid_Persons);
}
private void button_environmentOrganisationDeleteClick(object sender, RoutedEventArgs e)
{
ViewModel.EnvironmentOrganisations.VMList.Remove(grid_Organisations.GetCurrentValue<CustomerOrganisationRelationVM>());
BeWoWpfUtils.RefreshDXGrid(grid_Organisations);
}
private void button_removeAbsence_Click(object sender, RoutedEventArgs e)
{
ViewModel.AbsenceTimes.VMList.Remove(grid_AbsenceTimes.GetCurrentValue<AbsenceTimeVM>());
BeWoWpfUtils.RefreshDXGrid(grid_AbsenceTimes);
}
private void button_removeEmployeeRelation_Click(object sender, RoutedEventArgs e)
{
ViewModel.EmployeeRelations.VMList.Remove(grid_EmployeeRelation.GetCurrentValue<CustomerEmployeeRelationVM>());
BeWoWpfUtils.RefreshDXGrid(grid_EmployeeRelation);
}
private void button_removeTeamRelation_Click(object sender, RoutedEventArgs e)
{
ViewModel.TeamRelations.VMList.Remove(grid_TeamRelation.GetCurrentValue<CustomerTeamRelationVM>());
BeWoWpfUtils.RefreshDXGrid(grid_TeamRelation);
}
private void costbearersearchview_ItemSelected(object sender, EventArgs<CompactOrganisationDC> e)
{
popup_costBearer.IsOpen = false;
ViewModel.CostBearers.NewVM.CostBearer = e.Data;
popup_costBearer.Focus();
}
private void popupedit_OrganisationSearch_PopUpClick(object sender, RoutedEventArgs e)
{
jugendamtsearchview.ItemSelected += organisationsearchview_OrganisationSelected;
popup_organisation.IsOpen = true;
}
private void organisationsearchview_OrganisationSelected(object sender, EventArgs<CompactOrganisationDC> e)
{
popup_organisation.IsOpen = false;
jugendamtsearchview.ItemSelected -= organisationsearchview_OrganisationSelected;
ViewModel.Jugendamt = e.Data;
if (ViewModel.Ansprechpartner != null)
{
bool ansprechpartnerInJugendamt = false;
foreach (var relation in ViewModel.Ansprechpartner.OrganisationRelations.Where(relation => relation.Organisation.OrganisationOid == ViewModel.Jugendamt.OrganisationOid))
ansprechpartnerInJugendamt = true;
if (!ansprechpartnerInJugendamt)
{
ViewModel.Ansprechpartner = null;
popupedit_PersonSearch.Text = string.Empty;
}
}
personsearchview.OrganisationRelOid = ViewModel.Jugendamt.OrganisationOid;
personsearchview.UpdateFilteredList();
popupedit_OrganisationSearch.Text = e.Data.ToString();
popupedit_OrganisationSearch.Focus();
}
private void popupedit_PersonSearch_PopUpClick(object sender, RoutedEventArgs e)
{
personsearchview.ItemSelected += personsearchview_PersonSelected;
popup_person.IsOpen = true;
}
private void personsearchview_PersonSelected(object sender, EventArgs<CompactPersonDC> e)
{
popup_person.IsOpen = false;
personsearchview.ItemSelected -= personsearchview_PersonSelected;
ViewModel.Ansprechpartner = e.Data;
popupedit_PersonSearch.Text = e.Data.ToString();
popupedit_PersonSearch.Focus();
}
private void popupedit_costBearer_PopUpClick(object sender, RoutedEventArgs e)
{
popup_costBearer.IsOpen = true;
}
private void tabitem_documents_Selected(object sender, RoutedEventArgs e)
{
if (ViewModel.IsNew)
{
// TODO
MessageBox.Show("Bevor zu einem Datensatz Dokumente hinterlegt werden können, muss dieser gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
if (tabitem_documents.Content == null)
{
tabitem_documents.Content = new BeWoFileView(TableID.Customer, ViewModel.DataContract.CustomerOid.Value);
}
}
private void tabitem_log_Selected(object sender, RoutedEventArgs e)
{
if (!ShouldLog)
return;
TextBlock txt = tabitem_log.Content as TextBlock;
if (txt == null)
{
txt = new TextBlock();
tabitem_log.Content = txt;
}
if (_LogText != null)
txt.Text = _LogText.ToString();
}
public bool ShouldLog
{
get { return false; }
//BeWoApp.Tenant == "1549622397" && BeWoApp.UserName.ToLower() == "h.krause"; }
//get { return BeWoApp.Tenant == "demo" && BeWoApp.UserName == "demo"; }
}
}
}