Files
BeWoPlaner/BeWo/View/Detail/OrganisationView.xaml.cs
Rene Evertz 6225773523 Merge branch 'feature_rene_13_dakota'
# Conflicts:
#	.gitignore
#	BeWo/ServiceProxy/Generated.cs
2025-02-26 12:46:25 +01:00

370 lines
12 KiB
C#

using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Navigation;
using BeWo.Core;
using BeWo.Core.Service;
using BeWo.SchulbegleitenderDienst.View;
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.DataContracts.GkvAbrechnung;
using BS.Shared.Extensions;
using BS.Shared.Translation;
using DevExpress.Xpf.Grid;
namespace BeWo.View.Detail
{
public partial class OrganisationView
{
private OrganisationVM _ViewModel;
private GridControl grid_GroupBoxPersonGrid;
public OrganisationView(OrganisationVM pOrganisationVM)
{
InitializeComponent();
ViewModel = pOrganisationVM;
if (pOrganisationVM.VarFields == null || pOrganisationVM.VarFields.VMList.Count == 0)
{
tabitem_varFields.Visibility = Visibility.Collapsed;
}
tabitem_costbearer.Visibility = BeWoApp.LoggedOnUser.HasRight(UserRightType.OrganisationView_AllowEditCostBearer) ? Visibility.Visible : Visibility.Collapsed;
if (BeWoApp.Mandator != null && BeWoApp.Mandator.AllowSbd)
{
tabitem_schuldienst.Visibility = Visibility.Visible;
}
else
{
tabitem_schuldienst.Visibility = Visibility.Collapsed;
}
comboBox_Function.ItemsSource = _ViewModel.Functions;
Combobox_Rolle.ItemsSource = _ViewModel.RoleInOrganisations;
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Organisation_AllowArchiving))
{
lblArchiviert.Visibility = Visibility.Hidden;
chkArchiviert.Visibility = Visibility.Hidden;
}
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsAllowViewAll) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.DokumenteOrganisationen))
{
tabitem_documents.Visibility = Visibility.Collapsed;
}
#if DEBUG
txt_bezdatenannahmestelle.IsEnabled = true;
txt_ikdatenannahmestelle.IsEnabled = true;
txt_ikkostentrager.IsEnabled = true;
#endif
}
public event EventHandler<EventArgs<OrganisationVM>> OrganisationSavedOrUpdated;
public override bool IsDirty
{
get
{
return ViewModel != null && ViewModel.IsDirty;
}
}
public override string Title
{
get
{
return "Organisationen";
}
}
internal OrganisationVM ViewModel
{
get
{
return _ViewModel;
}
set
{
_ViewModel = value;
DataContext = value;
if (tabitem_schuldienst.Content != null)
{
if (tabitem_schuldienst.Content is StundenplanView view)
{
view.ViewModel = value.Arbeitszeiten;
view.RefreshView();
}
}
}
}
protected override UserRightType[] GetSaveDemands()
{
return ViewModel.IsNew ? new[] { UserRightType.CreateAll, UserRightType.OrganisationView_Create } : new[] { UserRightType.EditAll, UserRightType.OrganisationView_Edit };
}
protected override void Save()
{
var lDC = ViewModel.CommitToDataContract();
if (ViewModel.IsNew)
{
IsDoneWithInsertOrUpdate = false;
ServiceFacade.DoCustomerServiceAsync(s => s.InsertNewOrganisation(lDC), ReloadViewModel);
}
else
{
IsDoneWithInsertOrUpdate = false;
ServiceFacade.DoCustomerServiceAsync(s => s.UpdateOrganisation(lDC), ReloadViewModel);
}
Cache.GetInstance().ClearSupportConceptTree();
BeWoApp.MainControl.ResetView(UIContext.Organisation);
}
private void ReloadViewModel(long pOid)
{
VMFactory.CreateOrganisationVMAsync(
pOid,
cb => this.Dispatch(
delegate
{
if (OrganisationSavedOrUpdated != null)
{
OrganisationSavedOrUpdated(this, new EventArgs<OrganisationVM>(cb));
}
ViewModel = cb;
if (ModalEditViewUpdateCallback != null)
{
ModalEditViewUpdateCallback();
}
}));
IsDoneWithInsertOrUpdate = true;
}
public void ReloadViewModel()
{
if (ViewModel.DataContract.OrganisationOid.HasValue)
{
ReloadViewModel(ViewModel.DataContract.OrganisationOid.Value);
}
}
private void bt_addQualificationRate_Click(object sender, RoutedEventArgs e)
{
var stand = ViewModel.CostRatePeriods.GetLatestRate(CostRatePeriodType.HourlyRate);
if (stand != null)
{
ViewModel.CostRatePeriods.NewVM.CostRateValue = stand.CostRateValue;
}
ViewModel.CostRatePeriods.NewVM.ValueListEntry = (ValueListEntryDC)cb_qualifications.SelectedItem;
ViewModel.CostRatePeriods.NewVM.CostRateType = CostRatePeriodType.HourlyRate;
ViewModel.CostRatePeriods.AddNewVMToList();
}
private void button_deleteCostRatePeriodGroup_Click(object sender, RoutedEventArgs e)
{
var valueListEntry = (sender as Button).Tag as ValueListEntryDC;
ViewModel.CostRatePeriods.VMList.RemoveRange(i => i.ValueListEntry != null && i.ValueListEntry.ValueListEntryOid.Equals(valueListEntry.ValueListEntryOid));
}
private void tabitem_documents_Selected(object sender, RoutedEventArgs e)
{
if (ViewModel.IsNew)
{
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.Organisation, ViewModel.DataContract.OrganisationOid.Value);
}
}
private void TabItemsPersons_Selected(object sender, RoutedEventArgs e)
{
if (ViewModel.IsNew)
{
MessageBox.Show(Translator.Translate("Bevor Ansprechpartner zugeordnet werden können, muss die Organisation erst gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information));
return;
}
if (grid_GroupBoxPersonGrid == null)
{
grid_GroupBoxPersonGrid = gridroot.Resources["datagrid_PersonRelation"] as GridControl;
GroupBoxPersonGrid.Content = grid_GroupBoxPersonGrid;
}
}
private void Button_deleteAnsprechpartnerClick(object sender, RoutedEventArgs e)
{
var vm = grid_GroupBoxPersonGrid.GetCurrentValue<OrganisationPersonRelationVM>();
if (MessageBox.Show(String.Format("Möchten Sie " + Translator.Translate("den gewählten Ansprechpartner") + " '{0}, {1}' wirklich löschen?", vm.Person.LastName, vm.Person.FirstName), "Löschen",
MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
ViewModel.PersonRelations.VMList.Remove(vm);
BeWoWpfUtils.RefreshDXGrid(grid_GroupBoxPersonGrid);
ServiceFacade.DoOperationsServiceSync(s =>
s.DeletePerson2OrganisationRelation(vm.DataContract.Organisation2PersonOid.Value));
}
}
private void TableView_OnRowDoubleClick(object sender, RowDoubleClickEventArgs e)
{
var grid = (GridControl)gridroot.Resources["datagrid_PersonRelation"];
var selectedPerson = (grid.GetRow(e.HitInfo.RowHandle) as OrganisationPersonRelationVM).Person;
if (selectedPerson == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.PersonView_View))
return;
VMFactory.CreatePersonVMAsync(selectedPerson.PersonOid,
cb => this.Dispatch(
() => BeWoUtils.OpenModalViewWindow<PersonVM, PersonDC, OrganisationView>(cb, this, () => this.Dispatch(
() => BeWoUtils.UpdateAllViews(selectedPerson)), personSavedOrUpdated: (s, args) => this.Dispatch(delegate { }))));
}
private void EMailButton_OnClick(object sender, RoutedEventArgs e)
{
BeWoUtils.OpenMailClient(ViewModel.EMail);
}
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
BeWoUtils.OpenMailClient(e.Uri.ToString());
}
private void CreateNewAnsprechpartner_OnClick(object sender, RoutedEventArgs e)
{
if (ValidationTrigger.Validate(groupbox_newOrganisationAnsprechpartner) && pes != null)
{
var mail = textbox_mail.Text;
var fax = textbox_fax.Text;
var phone = textbox_phone.Text;
var notice = textbox_notice.Text;
var ldc = ViewModel.CommitToDataContract();
if (pes.PersonOid != 0 && ldc.OrganisationOid.HasValue)
{
//ViewModel.PersonRelations.AddNewVMToList();
ServiceFacade.DoOperationsServiceSync(s => s.CreateNewPerson2OrganisationRelation(ldc.OrganisationOid.Value, (ValueListEntryDC)Combobox_Rolle.SelectedItem, pes.PersonOid, mail, fax, phone.ToString(), notice.ToString()));
Save();
textbox_mail.Text = "";
textbox_fax.Text = "";
textbox_phone.Text = "";
textbox_notice.Text = "";
//ReloadViewModel();
pes = null;
}
}
}
CompactPersonDC pes = new CompactPersonDC();
private void popupedit_Person_PopUpClick(object sender, RoutedEventArgs e)
{
personsearchview.ItemSelected += personsearchview_EnvironmentPersonSelected;
popup_person.IsOpen = true;
}
private void personsearchview_EnvironmentPersonSelected(object sender, EventArgs<CompactPersonDC> e)
{
popup_person.IsOpen = false;
personsearchview.ItemSelected -= personsearchview_EnvironmentPersonSelected;
pes = e.Data;
popupedit_environmentPersonSearch.Text = pes.FirstName + " " + pes.LastName;
popupedit_environmentPersonSearch.Focus();
}
private void tabitem_SchulDienst_Selected(object sender, RoutedEventArgs e)
{
if (GridSBD.Children.Count == 0)
{
var sp = new StundenplanView(ViewModel.Arbeitszeiten, Translator.Translate("OrganisationStundenplan"));
Grid.SetRow(sp, 0);
GridSBD.Children.Add(sp);
var ov = new SbdOrganisationView(ViewModel.Feiertage);
ov.Margin = new Thickness(0, 10, 0, 0);
Grid.SetRow(ov, 1);
GridSBD.Children.Add(ov);
}
}
private void button_ik_ermitteln_click(object sender, RoutedEventArgs e)
{
var req = new GkvAbrechnungGetIKRequestDC();
req.OrganisationOid = ViewModel.DataContract.OrganisationOid;
req.IKKrankenkasse = ViewModel.IKKrankenkasse;
req.Leistungserbringergruppe = ViewModel.Leistungserbringergruppe;
ServiceFacade.DoGkvAccountingServiceAsync(x => x.SendGetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb)));
}
private void IKRequestCallback(GkvAbrechnungGetIKRequestDC req, GkvAbrechnungGetIKResponseDC response)
{
if (response is null || !response.Success)
{
MessageBox.Show($"Interner Serverfehler.", "Fehler");
return;
}
if (!response.Gefunden)
{
MessageBox.Show($"Für die Organisation mit dem IK \"{req.IKKrankenkasse}\" und Leistungserbringergruppe \"{req.Leistungserbringergruppe}\" " +
$"konnte keine Datenannahmestelle gefunden werden. Wenn Sie dennoch den elektronischen Datenaustausch mit der Krankenkasse " +
$"durchführen möchten, informieren Sie sich bitte bei der Krankenkasse, ob zum elektronischen Datenaustausch eine seperate " +
$"Anmeldung benötigt wird.", "Fehler");
return;
}
if (response.BereitsEnthalten)
{
var orgas = response.BereitsEnthaltenBei.Select(x => $"\"{x}\"");
var orga_str = response.BereitsEnthaltenBei.Count == 1
? $"der Organisation {orgas.First()}"
: $"den Organisationen {string.Join(",", orgas.ToArray())}";
var title = "Doppeltes IK Krankenkasse gefunden";
var msg = $"Das eingegebene IK der Krankenkasse \"{req.IKKrankenkasse}\" wurde bereits bei {orga_str} hinterlegt. Eine fehlerhafte Benennung der IKs führt zu einer fehlerhaften Weiterleitung Ihrer Daten. Möchten Sie fortfahren?";
var result = MessageBox.Show(msg, title, MessageBoxButton.OKCancel);
if (result != MessageBoxResult.OK)
return;
}
ViewModel.BezDatenannahmestelle = response.BezDatenannahmestelle;
ViewModel.IKKostentrager = response.IKKostentrager;
ViewModel.IKDatenannahmestelle = response.IKDatenannahmestelle;
CommandManager.InvalidateRequerySuggested();
}
}
}