Elekronischer Datenaustausch nicht immer möglich

+ UI Text
+ Unittest
This commit is contained in:
2024-11-14 15:11:10 +01:00
parent 433a9f5cf7
commit bce0b1a6aa
3 changed files with 243 additions and 248 deletions

View File

@@ -22,35 +22,35 @@ using DevExpress.Xpf.Grid;
namespace BeWo.View.Detail
{
public partial class OrganisationView
{
private OrganisationVM _ViewModel;
public partial class OrganisationView
{
private OrganisationVM _ViewModel;
private GridControl grid_GroupBoxPersonGrid;
private GridControl grid_GroupBoxPersonGrid;
public OrganisationView(OrganisationVM pOrganisationVM)
{
InitializeComponent();
ViewModel = pOrganisationVM;
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;
}
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_Function.ItemsSource = _ViewModel.Functions;
Combobox_Rolle.ItemsSource = _ViewModel.RoleInOrganisations;
Combobox_Rolle.ItemsSource = _ViewModel.RoleInOrganisations;
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Organisation_AllowArchiving))
{
@@ -66,283 +66,284 @@ namespace BeWo.View.Detail
label_verfahrensstufe.Visibility = Visibility.Collapsed;
radiobuttons_verfahrensstufe.Visibility = Visibility.Collapsed;
#endif
}
}
public event EventHandler<EventArgs<OrganisationVM>> OrganisationSavedOrUpdated;
public event EventHandler<EventArgs<OrganisationVM>> OrganisationSavedOrUpdated;
public override bool IsDirty
{
get
{
return ViewModel != null && ViewModel.IsDirty;
}
}
public override bool IsDirty
{
get
{
return ViewModel != null && ViewModel.IsDirty;
}
}
public override string Title
{
get
{
return "Organisationen";
}
}
public override string Title
{
get
{
return "Organisationen";
}
}
internal OrganisationVM ViewModel
{
get
{
return _ViewModel;
}
internal OrganisationVM ViewModel
{
get
{
return _ViewModel;
}
set
{
_ViewModel = value;
DataContext = value;
set
{
_ViewModel = value;
DataContext = value;
if (tabitem_schuldienst.Content != null)
{
if (tabitem_schuldienst.Content is StundenplanView view)
{
view.ViewModel = value.Arbeitszeiten;
view.RefreshView();
}
}
}
}
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 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);
}
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);
}
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));
}
private void ReloadViewModel(long pOid)
{
VMFactory.CreateOrganisationVMAsync(
pOid,
cb => this.Dispatch(
delegate
{
if (OrganisationSavedOrUpdated != null)
{
OrganisationSavedOrUpdated(this, new EventArgs<OrganisationVM>(cb));
}
ViewModel = cb;
ViewModel = cb;
if (ModalEditViewUpdateCallback != null)
{
ModalEditViewUpdateCallback();
}
}));
if (ModalEditViewUpdateCallback != null)
{
ModalEditViewUpdateCallback();
}
}));
IsDoneWithInsertOrUpdate = true;
}
IsDoneWithInsertOrUpdate = true;
}
public void ReloadViewModel()
{
if (ViewModel.DataContract.OrganisationOid.HasValue)
{
ReloadViewModel(ViewModel.DataContract.OrganisationOid.Value);
}
}
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;
}
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();
}
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 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;
}
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);
}
}
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 (grid_GroupBoxPersonGrid == null)
{
grid_GroupBoxPersonGrid = gridroot.Resources["datagrid_PersonRelation"] as GridControl;
GroupBoxPersonGrid.Content = grid_GroupBoxPersonGrid;
}
}
private void TabItemsPersons_Selected(object sender, RoutedEventArgs e)
{
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>();
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);
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));
}
}
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;
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;
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 { }))));
}
if (selectedPerson == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.PersonView_View))
return;
private void EMailButton_OnClick(object sender, RoutedEventArgs e)
{
BeWoUtils.OpenMailClient(ViewModel.EMail);
}
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 Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
BeWoUtils.OpenMailClient(e.Uri.ToString());
}
private void EMailButton_OnClick(object sender, RoutedEventArgs e)
{
BeWoUtils.OpenMailClient(ViewModel.EMail);
}
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;
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
BeWoUtils.OpenMailClient(e.Uri.ToString());
}
var ldc = ViewModel.CommitToDataContract();
private void CreateNewAnsprechpartner_OnClick(object sender, RoutedEventArgs e)
{
if (ValidationTrigger.Validate(groupbox_newOrganisationAnsprechpartner) && pes != null)
{
if (pes.PersonOid != 0)
{
//ViewModel.PersonRelations.AddNewVMToList();
var mail = textbox_mail.Text;
var fax = textbox_fax.Text;
var phone = textbox_phone.Text;
var notice = textbox_notice.Text;
ServiceFacade.DoOperationsServiceSync(s => s.CreateNewPerson2OrganisationRelation(ldc.OrganisationOid.Value, (ValueListEntryDC) Combobox_Rolle.SelectedItem, pes.PersonOid, mail, fax, phone.ToString(), notice.ToString()));
var ldc = ViewModel.CommitToDataContract();
Save();
}
if (pes.PersonOid != 0)
{
//ViewModel.PersonRelations.AddNewVMToList();
ServiceFacade.DoOperationsServiceSync(s => s.CreateNewPerson2OrganisationRelation(ldc.OrganisationOid.Value, (ValueListEntryDC)Combobox_Rolle.SelectedItem, pes.PersonOid, mail, fax, phone.ToString(), notice.ToString()));
textbox_mail.Text = "";
textbox_fax.Text = "";
textbox_phone.Text = "";
textbox_notice.Text = "";
Save();
}
//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;
textbox_mail.Text = "";
textbox_fax.Text = "";
textbox_phone.Text = "";
textbox_notice.Text = "";
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);
//ReloadViewModel();
pes = null;
}
}
var ov = new SbdOrganisationView(ViewModel.Feiertage);
ov.Margin = new Thickness(0, 10, 0, 0);
Grid.SetRow(ov, 1);
GridSBD.Children.Add(ov);
}
}
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 IKNumber_Button_Click(object sender, RoutedEventArgs e)
{
var req = new GkvAbrechnungGetIKRequestDC();
var req = new GkvAbrechnungGetIKRequestDC();
req.IKKrankenkasse = ViewModel.IKKrankenkasse;
req.Leistungserbringergruppe = ViewModel.Leistungserbringergruppe;
req.IKKrankenkasse = ViewModel.IKKrankenkasse;
req.Leistungserbringergruppe = ViewModel.Leistungserbringergruppe;
ServiceFacade.DoAccountingServiceAsync(x => x.SendGetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb)));
ServiceFacade.DoAccountingServiceAsync(x => x.SendGetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb)));
}
private void IKRequestCallback(GkvAbrechnungGetIKRequestDC req, GkvAbrechnungGetIKResponseDC response)
private void IKRequestCallback(GkvAbrechnungGetIKRequestDC req, GkvAbrechnungGetIKResponseDC response)
{
if(response is null || !response.Success)
if (response is null || !response.Success)
{
MessageBox.Show($"Interner Serverfehler.", "Fehler");
return;
}
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. " +
$"Bitte informieren Sie sich bei der Krankenkasse, ob zum elektronischen Datenaustausch " +
$"eine seperate Anmeldung benötigt wird.", "Fehler");
return;
MessageBox.Show($"Für die Organisation mit dem IK \"{req.IKKrankenkasse}\" und Leistungserbringergruppe \"{req.Leistungserbringergruppe}\" \n" +
$"konnte keine Datenannahmestelle gefunden werden. Wenn Sie dennoch den elektronischen Datenaustausch mit der Krankenkasse \n" +
$"durchführen möchten, informieren Sie sich bitte bei der Krankenkasse, ob zum elektronischen Datenaustausch eine seperate \n" +
$"Anmeldung benötigt wird.", "Fehler");
return;
}
ViewModel.BezDatenannahmestelle = response.BezDatenannahmestelle;
ViewModel.IKKostentrager = response.IKKostentrager;
ViewModel.IKDatenannahmestelle = response.IKDatenannahmestelle;
ViewModel.BezDatenannahmestelle = response.BezDatenannahmestelle;
ViewModel.IKKostentrager = response.IKKostentrager;
ViewModel.IKDatenannahmestelle = response.IKDatenannahmestelle;
CommandManager.InvalidateRequerySuggested();
}
CommandManager.InvalidateRequerySuggested();
}
}
}

View File

@@ -102,7 +102,7 @@ namespace Dakota.Logic
if (datenannahmestellen_3.Count() == 1)
return GetIKNummern(datenannahmestellen_3.First(), kostentrager, ikkrankenkasse);
throw new GkvException($"Keine oder mehrere Datenannahmestellen für {ikkrankenkasse} gefunden.");
return null;
}
private Tuple<string, string, string> GetIKNummern(SegmentKTDVKG vkg, string kostentrager, string ikkrankenkasse)

View File

@@ -74,13 +74,7 @@ namespace DakotaUnitTest
{
var test = Reader.Resolve("104080005", "69", "08101");
Assert.IsNotNull(test);
Assert.IsTrue(test.Item1 == "104212516");
Assert.IsTrue(test.Item2 == "104212505");
Assert.IsTrue(test.Item3 == "104212505");
Assert.IsNull(test);
}
}
}