using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Navigation; using BS.Shared; using BeWo.Controls; using BeWo.Core; using BeWo.ServiceProxy; using BeWo.ViewModel; using BeWo.ViewModel.ListViewModel; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; namespace BeWo.View.Detail.Accounting { public partial class ServiceInvoiceView : BeWoView { private readonly ServiceInvoiceCreatePopUpView _CreatePopUpView; private readonly ServiceInvoiceItemEditView _EditView; private ServiceInvoiceViewVM _Viewmodel; public ServiceInvoiceView() { var lastMonth = DateTime.Now.AddMonths(-1); this.InitializeComponent(); this.ViewModel = new ServiceInvoiceViewVM { InvoicePeriodStart = lastMonth.AddDays(-lastMonth.Day + 1), InvoicePeriodEnd = DateTime.Now.AddDays(-DateTime.Now.Day), IsAllSupportConcepts = false, IsUseApprovalPeriod = false, ServiceInvoiceListVM = new ServiceInvoiceListVM(new List()) }; this._EditView = new ServiceInvoiceItemEditView(); this._EditView.EditingFinished += (s, e) => { this.RefreshViewModel(); this.MainControl.CloseCurrentPopUp(); }; this._CreatePopUpView = new ServiceInvoiceCreatePopUpView(); this._CreatePopUpView.Closed += (s, e) => { this.MainControl.CloseCurrentPopUp(); ServiceFacade.DoAccountingServiceAsync(svc => svc.InsertNewServiceInvoices(e.Data), this.RefreshViewModel); }; } internal ServiceInvoiceViewVM ViewModel { get { return this._Viewmodel; } set { this.DataContext = value; this._Viewmodel = value; value.PropertyChanged += (s, e) => { if (!e.PropertyName.Equals(ServiceInvoiceViewVM.PropertyName_IsSelectionValid)&& !e.PropertyName.Equals(ServiceInvoiceViewVM.PropertyName_ServiceInvoiceListVM)) { this.RefreshViewModel(); } }; } } private void IsPrintingListChanged() { SetCeSelectAllState(); List isPrintingIds = this.ViewModel.GetIsPrintingIds(); if (isPrintingIds.Count == 0) { this.tb_printAll.Visibility = Visibility.Hidden; } else { this.tb_printAll.Visibility = Visibility.Visible; string url = BeWoApp.SiteOfOrigin + "/ReportView.aspx?dcids=" + string.Join(";", isPrintingIds.Select(i => i.ToString()).ToArray()) + "&type=" + Utils.EnumName(ReportTypes.ServiceInvoice); string token = string.Empty; ServiceFacade.DoDownloadServiceSync(s => token = s.CreateTemporaryToken(url, false)); url += "&token=" + token; url = BeWoWpfUtils.GetHTMLEncodedURL(url); // Workaround Hyperlink mit neuem ersetzen, Navigate Uri lässt auf dem alten nicht ändern... this.tb_printAll.Inlines.Clear(); var lNewLink = new Hyperlink(new Run("markierte Rechnungen drucken")) { NavigateUri = new Uri(url), TargetName = "_newWindow", Foreground = Brushes.Blue }; lNewLink.Click += clickTest; this.tb_printAll.Inlines.Add(lNewLink); } } private void clickTest(object sender, RoutedEventArgs rea) { var hl = (Hyperlink)sender; List isPrintingIds = ViewModel.GetIsPrintingIds(); var url = BeWoApp.SiteOfOrigin + "/ReportView.aspx?dcids=" + string.Join(";", isPrintingIds.Select(i => i.ToString()).ToArray()) + "&type=" + Utils.EnumName(ReportTypes.ServiceInvoice); var token = string.Empty; ServiceFacade.DoDownloadServiceSync(s => token = s.CreateTemporaryToken(url, false)); url += "&token=" + token; url = BeWoWpfUtils.GetHTMLEncodedURL(url); BeWoUtils.NavigateToReportUri(url, null); //System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(url)); } private void RefreshViewModel() { if (!this.ViewModel.IsSelectionValid) { this.ViewModel.ServiceInvoiceListVM = new ServiceInvoiceListVM(new List()); if (this.grid_printselect != null) { this.grid_printselect.Visibility = Visibility.Hidden; } this.ce_selectAll.IsChecked = false; return; } List isPrintingIds = this.ViewModel.GetIsPrintingIds(); ServiceFacade.DoAccountingServiceAsync(s => s.GetServiceInvoices(this.ViewModel.SelectedCostBearer.CostBearerOid.Value, this.ViewModel.GetSupportConceptOid(), this.ViewModel.GetPeriodSpan()), cb => this.Dispatch(() => { this.ViewModel.ServiceInvoiceListVM = new ServiceInvoiceListVM(cb); foreach (var iVm in this.ViewModel.ServiceInvoiceListVM.VMList) { iVm.IsPrinting = isPrintingIds.Contains(iVm.DataContract.ServiceInvoiceOid.Value); } this.SetCeSelectAllState(); this.ViewModel.ServiceInvoiceListVM.VMList.ListChanged += this.ServiceInvoiceList_ListChanged; this.grid_printselect.Visibility = this.ViewModel.ServiceInvoiceListVM.VMList.Count > 0 ? Visibility.Visible : Visibility.Hidden; })); } private void ServiceInvoiceList_ListChanged(object sender, ListChangedEventArgs e) { if (e.ListChangedType == ListChangedType.ItemChanged && e.PropertyDescriptor.Name.Equals(ServiceInvoiceVM.PropertyName_IsPrinting)) { this.IsPrintingListChanged(); } } private void SetCeSelectAllState() { this.ce_selectAll.Checked -= this.ce_selectAll_Checked; this.ce_selectAll.Unchecked -= this.ce_selectAll_Unchecked; this.ce_selectAll.IsChecked = this.ViewModel.ServiceInvoiceListVM.VMList.All(i => i.IsPrinting); this.ce_selectAll.Checked += this.ce_selectAll_Checked; this.ce_selectAll.Unchecked += this.ce_selectAll_Unchecked; } private void SupportConceptSearchView_ItemSelected(object sender, EventArgs e) { this.popup_supportConcept.IsOpen = false; this.ViewModel.SelectedSupportConcept = e.Data; } private void bt_selectAllDate_Click(object sender, RoutedEventArgs e) { this.ce_selectAll.IsChecked = true; foreach (var i in this.ViewModel.ServiceInvoiceListVM.VMList) { i.IsPrinting = i.InvoiceBase.InvoiceDate.Value.Date.Equals(this.dt_selectAll.DateTime.Date); } this.SetCeSelectAllState(); } private void btnDelete_Click(object sender, RoutedEventArgs e) { if (MessageBox.Show("Sind Sie sicher, dass Sie den gewählten Eintrag löschen möchten?", "Spitzabrechnung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes) { var vm = BeWoWpfUtils.GetTag(sender); ServiceFacade.DoAccountingServiceAsync(s => s.DeactivateServiceInvoices(new[] { vm.DataContract }.ToList()), () => this.Dispatch(() => this.ViewModel.ServiceInvoiceListVM.VMList.Remove(vm))); } } private void btnEdit_Click(object sender, RoutedEventArgs e) { this._EditView.ViewModel = BeWoWpfUtils.GetTag(sender); this.MainControl.ShowControlAsModalPopup(this._EditView); } private void button_createInvoice_Click(object sender, RoutedEventArgs e) { ServiceFacade.DoAccountingServiceAsync(s => s.GenerateInitialServiceInvoices(this.ViewModel.SelectedCostBearer.CostBearerOid.Value, this.ViewModel.GetSupportConceptOid(), this.ViewModel.GetPeriodSpan()), r => this.Dispatch(() => { this._CreatePopUpView.ServiceInvoiceDcs = r; this.MainControl.ShowControlAsModalPopup(this._CreatePopUpView); })); } private void ce_selectAll_Checked(object sender, RoutedEventArgs e) { foreach (var i in this.ViewModel.ServiceInvoiceListVM.VMList) { i.IsPrinting = true; } } private void ce_selectAll_Unchecked(object sender, RoutedEventArgs e) { foreach (var i in this.ViewModel.ServiceInvoiceListVM.VMList) { i.IsPrinting = false; } } private void organisationSearchView_ItemSelected(object sender, EventArgs e) { this.ViewModel.SelectedCostBearer = e.Data; this.ViewModel.SelectedSupportConcept = null; this.popup_costBearer.IsOpen = false; } private void popupedit_CostBeaerer_PopUpClick(object sender, RoutedEventArgs e) { this.popup_costBearer.IsOpen = true; } private void popupedit_supportConcept_PopUpClick(object sender, RoutedEventArgs e) { this.popup_supportConcept.IsOpen = true; } private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e) { BeWoUtils.NavigateToReportUri(((Hyperlink) sender).NavigateUri.ToString(), null); } private void Popupedit_CostBeaerer_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit)sender, e) || ViewModel.SelectedCostBearer == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.OrganisationView_AllowEditCostBearer)) return; VMFactory.CreateOrganisationVMAsync(ViewModel.SelectedCostBearer.OrganisationOid, cb => this.Dispatch(() => BeWoUtils.OpenModalViewWindow( cb, this, () => this.Dispatch(() => BeWoUtils.UpdateAllViews(ViewModel.SelectedCostBearer)), _OrganisationModalPopUp_OrganisationSavedOrUpdated))); } private void _OrganisationModalPopUp_OrganisationSavedOrUpdated(object sender, EventArgs e) { ServiceFacade.DoCustomerServiceAsync( s => s.LoadOrganisationCompact(e.Data.DataContract.OrganisationOid.Value), p => this.Dispatch( delegate { ViewModel.SelectedCostBearer = p; popupedit_CostBeaerer.Focus(); MainControl.CloseCurrentPopUp(); })); } private void Popupedit_supportConcept_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit)sender, e) || ViewModel.SelectedSupportConcept == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConceptView_Edit)) return; VMFactory.CreateSupportConceptVMAsync(ViewModel.SelectedSupportConcept.SupportConceptOid, cb => this.Dispatch( () => BeWoUtils.OpenModalViewWindow(cb, this, () => this.Dispatch(() => BeWoUtils.UpdateAllViews(ViewModel.SelectedSupportConcept))))); } } }