403 lines
16 KiB
C#
403 lines
16 KiB
C#
using System;
|
|
using System.Activities.Statements;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Media;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Threading;
|
|
using BeWo.Core;
|
|
using BeWo.ServiceProxy;
|
|
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.DataContracts.GkvAbrechnung;
|
|
using BS.Shared.Extensions;
|
|
using DevExpress.Data.Filtering;
|
|
using DevExpress.Mvvm;
|
|
using DevExpress.Xpf.Editors;
|
|
using DevExpress.Xpf.Grid;
|
|
using Microsoft.Win32;
|
|
|
|
namespace BeWo.View.Detail.Accounting
|
|
{
|
|
public partial class GkvAbrechnungOverview : BeWoView
|
|
{
|
|
private readonly NewGkvAbrechnungPopUpView _NewGkvAbrechnungPopUpView;
|
|
private readonly GkvAbrechnungListVM _Viewmodel;
|
|
|
|
public GkvAbrechnungOverview()
|
|
{
|
|
UpdateDataGridFilterCommand = new DelegateCommand(UpdateDataGridFilter);
|
|
|
|
InitializeComponent();
|
|
|
|
DownloadLinkEngine = new DownloadLinkEngine();
|
|
|
|
_Viewmodel = new GkvAbrechnungListVM();
|
|
_Viewmodel.VMList.ListChanged += (s, e) => gridView.BestFitColumns();
|
|
|
|
DataContext = _Viewmodel;
|
|
|
|
//datagrid_gkvAbrechnungen.FixedFilter = new BinaryOperator("Datenaustauschreferenz", 1);
|
|
|
|
_NewGkvAbrechnungPopUpView = new NewGkvAbrechnungPopUpView();
|
|
_NewGkvAbrechnungPopUpView.CancelButtonClicked += NewGkvAbrechnungPopUpViewCancelButtonClicked;
|
|
_NewGkvAbrechnungPopUpView.CreateButtonClicked += NewGkvAbrechnungPopUpViewCreateButtonClicked;
|
|
|
|
_Viewmodel.DateTimeSpanFilter = yearMonthFilter.FilterSpan;
|
|
}
|
|
|
|
public DownloadLinkEngine DownloadLinkEngine { get; set; }
|
|
public DelegateCommand UpdateDataGridFilterCommand { get; set; }
|
|
|
|
private bool ShowAllInvoices => _Viewmodel.DateTimeSpanFilter is null;
|
|
|
|
private void RefreshGkvAbrechnungenList()
|
|
{
|
|
ServiceFacade.DoAccountingServiceAsync(s => s.GetFilteredGkvAbrechnungen(null), UpdateGkvAbrechnungList);
|
|
}
|
|
|
|
private void UpdateGkvAbrechnungList(IList<GkvAbrechnungDC> dcList)
|
|
{
|
|
this.Dispatcher.BeginInvoke(
|
|
DispatcherPriority.Normal,
|
|
(Action)delegate
|
|
{
|
|
_Viewmodel.UpdateList(dcList);
|
|
|
|
if (datagrid_gkvAbrechnungen.Visibility != Visibility.Visible)
|
|
datagrid_gkvAbrechnungen.Visibility = Visibility.Visible;
|
|
|
|
UpdateDataGridFilter();
|
|
|
|
gridView.BestFitColumn(ColumnButtons);
|
|
});
|
|
}
|
|
|
|
private void UpdateDataGridFilter()
|
|
{
|
|
datagrid_gkvAbrechnungen.FixedFilter = null;
|
|
|
|
if (ShowAllInvoices)
|
|
{
|
|
datagrid_gkvAbrechnungen.FixedFilter = null;
|
|
}
|
|
else
|
|
{
|
|
var filterByInvoiceDate = radioFilterByInvoiceDate.IsChecked.Value;
|
|
|
|
var filter_start = _Viewmodel.DateTimeSpanFilter.StartDate;
|
|
var filter_ende = _Viewmodel.DateTimeSpanFilter.EndDate.AddDays(1).AddMilliseconds(-1);
|
|
|
|
if (filterByInvoiceDate)
|
|
{
|
|
datagrid_gkvAbrechnungen.FixedFilter = CriteriaOperator.And(
|
|
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.ErstelltAm >= filter_start),
|
|
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.ErstelltAm <= filter_ende));
|
|
}
|
|
else
|
|
{
|
|
datagrid_gkvAbrechnungen.FixedFilter = CriteriaOperator.Or(
|
|
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => filter_start <= gkv.AbrechnungsZeitraumStart && gkv.AbrechnungsZeitraumStart <= filter_ende),
|
|
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => filter_start <= gkv.AbrechnungsZeitraumEnde && gkv.AbrechnungsZeitraumEnde <= filter_ende),
|
|
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.AbrechnungsZeitraumStart <= filter_start && filter_ende <= gkv.AbrechnungsZeitraumEnde));
|
|
}
|
|
}
|
|
}
|
|
|
|
private void NewGkvAbrechnungPopUpViewCancelButtonClicked(object sender, EventArgs e)
|
|
{
|
|
MainControl.CloseCurrentPopUp();
|
|
}
|
|
private void NewGkvAbrechnungPopUpViewCreateButtonClicked(object sender, EventArgs<GkvAbrechnungDC> e)
|
|
{
|
|
var checked_invoice_bases = _NewGkvAbrechnungPopUpView.ViewModel.InvoiceBases.Where(x => x.IsChecked);
|
|
|
|
// MessageBox.Show("Sie haben keine Rechnung hinzugefügt.", "GKV-Abrechnung erstellen", MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
if (!checked_invoice_bases.Any())
|
|
return;
|
|
|
|
var already_used_invoices = checked_invoice_bases.Where(x => x.IsAlreadyInActiveGkvAbrechnung.Value);
|
|
if (already_used_invoices.Any())
|
|
{
|
|
var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits in einer anderen aktiven GKV-Abrechnung enthalten sind. Möchten Sie fortfahren?";
|
|
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel);
|
|
|
|
if (result != MessageBoxResult.OK)
|
|
return;
|
|
}
|
|
|
|
MainControl.CloseCurrentPopUp();
|
|
|
|
var gkv_abrechnung = e.Data;
|
|
var gkv_filter = new GkvAbrechnungCreateRequestDC
|
|
{
|
|
GkvAbrechnungDC = gkv_abrechnung,
|
|
SelectedInvoiceBases = checked_invoice_bases.Select(x => x.DataContract.InvoiceBaseOid.Value).ToList()
|
|
};
|
|
|
|
ServiceFacade.DoAccountingServiceAsync(x => x.CreateNewGkvAbrechnung(gkv_filter),
|
|
cb => Dispatcher.BeginInvoke(DispatcherPriority.Normal,
|
|
(Action)delegate
|
|
{
|
|
if (cb.Success)
|
|
{
|
|
RefreshGkvAbrechnungenList();
|
|
}
|
|
else
|
|
{
|
|
BeWoWindowBuilder.ShowErrorMessageBox(cb.Message);
|
|
}
|
|
}));
|
|
}
|
|
|
|
private void YearMonthFilter_FilterSpanChanged(object sender, EventArgs<DateTimeSpan> e)
|
|
{
|
|
_Viewmodel.DateTimeSpanFilter = e.Data;
|
|
UpdateDataGridFilter();
|
|
}
|
|
|
|
private void btn_details_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var vm = this.datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
|
|
|
var window = BeWoWindowBuilder.GetGkvAbrechnungDetailWindow(vm);
|
|
|
|
window.Closing += Detail_Window_Closing;
|
|
|
|
window.ShowDialog();
|
|
}
|
|
|
|
private void Detail_Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
{
|
|
var bewo_window = sender as BeWoWindow;
|
|
var detail_control = bewo_window.GroupBoxContent as GkvAbrechnungDetailControl;
|
|
|
|
var vm = detail_control.DataContext as GkvAbrechnungVM;
|
|
|
|
var checkbox_checked = detail_control.Checkbox_Bezahlt.IsChecked;
|
|
var textbox_text = detail_control.Textbox_Notice.Text;
|
|
|
|
vm.Notice = textbox_text;
|
|
|
|
if (vm.IsDirty)
|
|
{
|
|
var dc_in = vm.CommitToDataContract();
|
|
|
|
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
|
{
|
|
Dispatcher.Invoke(() => {
|
|
vm.UpdateByDataContract(dc_out);
|
|
});
|
|
}, false);
|
|
}
|
|
}
|
|
|
|
private void btn_send_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
|
|
|
var state = vm.GetState();
|
|
|
|
string text = "Sind Sie sicher, dass Sie die gewählte GKV-Abrechnung senden möchten?";
|
|
|
|
if (state == GkvState.ErrorSoft)
|
|
text = "Die gewählte GKV-Abrechnung wurde nicht erfolgreich an die Krankenkasse übertragen. Möchten Sie sie erneut senden?";
|
|
|
|
if (MessageBox.Show(text, "GKV-Abrechnung senden", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
|
|
{
|
|
vm.SendGkvAbrechnung();
|
|
}
|
|
}
|
|
private void btn_delete_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
|
|
|
if (MessageBox.Show("Sind Sie sicher, dass Sie die gewählte GKV-Abrechnung löschen möchten?", "GKV-Abrechnung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
|
|
{
|
|
_Viewmodel.VMList.Remove(vm);
|
|
|
|
ServiceFacade.DoAccountingServiceAsync(s => s.DeleteGkvAbrechnung(vm.CommitToDataContract()));
|
|
}
|
|
}
|
|
private void NewButton_OnClick(object sender, RoutedEventArgs e)
|
|
{
|
|
GkvAbrechnungDC gkvAbrechnungDC = new GkvAbrechnungDC();
|
|
int year = DateTime.Now.Year;
|
|
int month = DateTime.Now.Month - 1;
|
|
gkvAbrechnungDC.AbrechnungsZeitraumStart = new DateTime(year, month, 1);
|
|
gkvAbrechnungDC.AbrechnungsZeitraumEnde = new DateTime(year, month, DateTime.DaysInMonth(year, month));
|
|
GkvAbrechnungVM gkvAbrechnungVM = new GkvAbrechnungVM(gkvAbrechnungDC);
|
|
_NewGkvAbrechnungPopUpView.Clear();
|
|
_NewGkvAbrechnungPopUpView.ViewModel = gkvAbrechnungVM;
|
|
this.MainControl.ShowControlAsModalPopup(this._NewGkvAbrechnungPopUpView);
|
|
}
|
|
private void ReloadButton_OnClick(object sender, RoutedEventArgs e)
|
|
{
|
|
RefreshGkvAbrechnungenList();
|
|
}
|
|
|
|
private void gridView_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
this.gridView.BestFitColumns();
|
|
}
|
|
private void gridView_ShownEditor(object sender, EditorEventArgs e)
|
|
{
|
|
if (e.Editor is CheckEdit)
|
|
{
|
|
var ed = (CheckEdit)e.Editor;
|
|
ed.Tag = e.Row;
|
|
}
|
|
else if (int.TryParse(datagrid_gkvAbrechnungen.CurrentColumn.Tag?.ToString(), out int tag) && gridView.ActiveEditor is TextEdit)
|
|
{
|
|
((TextEdit)gridView.ActiveEditor).SetPropertyValue("MaxLength", tag);
|
|
}
|
|
}
|
|
private void gridView_CellValueChanging(object sender, CellValueChangedEventArgs e)
|
|
{
|
|
if (e.Column is null)
|
|
return;
|
|
|
|
if (e.Column.FieldName == nameof(GkvAbrechnungVM.Bezahlt))
|
|
{
|
|
if (e.Value is bool b && e.Row is GkvAbrechnungVM vm)
|
|
{
|
|
SaveBezahltChange(vm, b);
|
|
}
|
|
}
|
|
else if (e.Column.FieldName == nameof(GkvAbrechnungVM.UrbelegeGesendet))
|
|
{
|
|
if (e.Value is bool b && e.Row is GkvAbrechnungVM vm)
|
|
{
|
|
SaveUrbelegeGesendetChange(vm, b);
|
|
}
|
|
}
|
|
}
|
|
private void TableView_OnCustomRowAppearance(object sender, CustomRowAppearanceEventArgs e)
|
|
{
|
|
if (e.Property != null && e.Property.Name == "Background")
|
|
{
|
|
var gkvAbrechnungVM = datagrid_gkvAbrechnungen.GetRow(e.RowHandle) as GkvAbrechnungVM;
|
|
|
|
if (gkvAbrechnungVM is null)
|
|
return;
|
|
|
|
if (gkvAbrechnungVM.GkvState == GkvState.WaitingForKrankenkasseTooLong)
|
|
{
|
|
e.Result = Brushes.Orange;
|
|
e.Handled = true;
|
|
}
|
|
else if (gkvAbrechnungVM.GkvState == GkvState.WaitingForUrbelege)
|
|
{
|
|
e.Result = Brushes.Green;
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void radioFilterByInvoiceDate_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
UpdateDataGridFilter();
|
|
}
|
|
|
|
private void SaveBezahltChange(GkvAbrechnungVM vm, bool b)
|
|
{
|
|
var dc_in = vm.CommitToDataContract();
|
|
|
|
dc_in.Bezahlt = b;
|
|
|
|
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
|
{
|
|
Dispatcher.Invoke(() => {
|
|
vm.UpdateByDataContract(dc_out);
|
|
});
|
|
}, false);
|
|
}
|
|
|
|
private void SaveUrbelegeGesendetChange(GkvAbrechnungVM vm, bool b)
|
|
{
|
|
var dc_in = vm.CommitToDataContract();
|
|
|
|
dc_in.UrbelegeGesendet = b;
|
|
|
|
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
|
{
|
|
Dispatcher.Invoke(() => {
|
|
vm.UpdateByDataContract(dc_out);
|
|
});
|
|
}, false);
|
|
}
|
|
|
|
private void SaveNoticeChange(GkvAbrechnungVM vm, string notice)
|
|
{
|
|
var dc_in = vm.CommitToDataContract();
|
|
|
|
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
|
{
|
|
Dispatcher.Invoke(() => {
|
|
vm.UpdateByDataContract(dc_out);
|
|
});
|
|
}, false);
|
|
}
|
|
|
|
private void gridView_CellValueChanged_1(object sender, CellValueChangedEventArgs e)
|
|
{
|
|
if (e.Column != null && e.Column.FieldName == "Notice")
|
|
{
|
|
if (e.Value is string s && e.Row is GkvAbrechnungVM vm)
|
|
{
|
|
SaveNoticeChange(vm, s);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void BeWoView_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
_Viewmodel.FirePropertyChangedItself();
|
|
|
|
if (_NewGkvAbrechnungPopUpView.PopupObjectList is object)
|
|
_NewGkvAbrechnungPopUpView.PopupObjectList = null;
|
|
|
|
RefreshGkvAbrechnungenList();
|
|
}
|
|
|
|
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
|
|
{
|
|
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
|
|
|
string what2send = "Leistungsnachweise";
|
|
|
|
if (vm.Verfahrensstufe != GkvVerfahrensstufe.Echt)
|
|
what2send += " und Rechnungen";
|
|
|
|
BeWoApp.ShowInfoMessage($"Begleitzettel bitte inklusive der enthaltenen Urbelege ({what2send}) ausdrucken, " +
|
|
$"Anzahl der Urbelege noch eintragen und alles zusammen versenden.");
|
|
|
|
BeWoUtils.NavigateToReportUri(vm.ReportLink, "Druckvorschau");
|
|
}
|
|
|
|
private void Hyperlink_OnRequestNavigate2(object sender, RequestNavigateEventArgs e)
|
|
{
|
|
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
|
|
|
string what2send = "Leistungsnachweise";
|
|
|
|
if (vm.Verfahrensstufe != GkvVerfahrensstufe.Echt)
|
|
what2send += " und Rechnungen";
|
|
|
|
BeWoApp.ShowInfoMessage($"Begleitzettel bitte inklusive der enthaltenen Urbelege ({what2send}) ausdrucken, " +
|
|
$"Anzahl der Urbelege noch eintragen und alles zusammen versenden.");
|
|
|
|
BeWoUtils.NavigateToReportUri(vm.ReportLink2, "Druckvorschau");
|
|
}
|
|
}
|
|
} |