Files
BeWoPlaner/BeWo/View/Detail/Report/AccountingReportView.xaml.cs
2016-06-27 01:45:38 +02:00

225 lines
9.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Navigation;
using BS.Shared;
using BS.Shared.DataContracts.Reports;
using BeWo.Core;
using BeWo.ServiceProxy;
using BS.Shared.Extensions;
using DevExpress.Xpf.Editors;
using DevExpress.Xpf.Grid;
using Microsoft.Win32;
namespace BeWo.View.Detail.Report
{
/// <summary>
/// Interaction logic for QueryView.xaml
/// </summary>
public partial class AccountingReportView : BeWoView
{
private DateTime _StartDate = new DateTime(2012,9,1);
private DateTime _EndDate = DateTime.Now;
public AccountingReportView()
{
InitializeComponent();
try
{
datePickerStartDate.DateTime = _StartDate;
datePickerEndDate.DateTime = _EndDate;
textblock_link.Visibility = Visibility.Collapsed;
textblock_link_pdfexport.Visibility = Visibility.Collapsed;
DownloadLinkEngine = new DownloadLinkEngine();
linkExcelExport.NavigateUri = DownloadLinkEngine.GenerateNewExcelLink();
btnExecuteQuery.Visibility = Visibility.Visible;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public DownloadLinkEngine DownloadLinkEngine { get; set; }
public override string Title
{
get { return "öffentliche Abfragen"; }
}
private void linkExcelExport_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
var lView = this.datagrid_result.View as TableView;
List<string> lHeaderCaptions = new List<string>();
List<List<string>> lContent = new List<List<string>>();
if (lView != null)
{
foreach (var iCol in lView.VisibleColumns)
{
lHeaderCaptions.Add(iCol.HeaderCaption.ToString());
for (int iRowIndex = 0; iRowIndex < this.datagrid_result.VisibleRowCount; iRowIndex++)
{
if (lContent.Count <= iRowIndex)
{
lContent.Add(new List<string>());
}
lContent[iRowIndex].Add(this.datagrid_result.GetCellValue(iRowIndex, iCol).ToStringNullCheck());
}
}
}
var path = BeWoApp.GetAndCreateUserAppDataPath() + "\\Abrechnung.xls";
var sf = new SaveFileDialog { FileName = Path.GetFileName(path), Filter = "Microsoft Excel 97-2003-Arbeitsblatt|*.xls|Alle Dateien|*.*" };
if (sf.ShowDialog() != true)
return;
ServiceFacade.DoDownloadServiceSync(s => BeWoUtils.WriteExcelFile(s.PrepareExcelFile(DownloadLinkEngine.ExcelFileId, lHeaderCaptions, lContent), sf.FileName));
//System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo((sender as System.Windows.Documents.Hyperlink).NavigateUri.ToString()));
//// Workaround Hyperlink mit neuem ersetzen, Navigate Uri lässt auf dem alten nicht ändern...
//this.textblock_link.Inlines.Clear();
//var lNewLink = new Hyperlink(new Run("Excel Export")) { NavigateUri = this.DownloadLinkEngine.GenerateNewExcelLink(), Foreground = Brushes.Black, TargetName = "newWindow" };
//lNewLink.RequestNavigate += this.linkExcelExport_RequestNavigate;
//this.textblock_link.Inlines.Add(lNewLink);
}
private void linkPdfExport_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo((sender as System.Windows.Documents.Hyperlink).NavigateUri.ToString()));
//QueryDC lQuery = this.combo_query.SelectedItem as QueryDC;
//if (lQuery != null)
//{
// DataTable dt = this.datagrid_result.DataSource as DataTable;
// ServiceFacade.DoQueryServiceSync(q => q.PrepareQueryReport(dt, BeWoApp.Tenant + "queryeoid" + BeWoApp.LoggedOnUser.Employee.EmployeeOid));
//}
}
private void linkPdfExport_direct_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo((sender as System.Windows.Documents.Hyperlink).NavigateUri.ToString()));
//QueryDC lQuery = this.combo_query.SelectedItem as QueryDC;
//if (lQuery != null)
//{
// List<QueryParamDC> parameterList = this.CreateQueryParamValues(lQuery);
// DataTable dt = ServiceFacade.DoQueryServiceSync(s => s.ExecuteQuery(lQuery.Oid, parameterList));
// ServiceFacade.DoQueryServiceSync(q => q.PrepareQueryReport(dt, BeWoApp.Tenant + "queryeoid" + BeWoApp.LoggedOnUser.Employee.EmployeeOid));
//}
}
private void btnExecuteQuery_Click(object sender, RoutedEventArgs e)
{
textblock_link.Visibility = Visibility.Visible;
textblock_link_pdfexport.Visibility = Visibility.Visible;
datagrid_result.Visibility = Visibility.Visible;
datagrid_result.Columns.Clear();
ShowSupportConcepts();
}
private void ShowSupportConcepts()
{
ServiceFacade.DoAnalysisServiceAsync<AccountingReportDC>(
s =>
{
try
{
return s.CreateAccountingReport(_StartDate, _EndDate);
}
catch (Exception) {}
return null;
},
r => this.Dispatch(delegate
{
DataTable x = ConvertAccountingReportDCToDataTable(r);
datagrid_result.ItemsSource = x;
}));
}
private DataTable ConvertAccountingReportDCToDataTable(AccountingReportDC accountingReportDC)
{
var table = new DataTable();
table.Columns.Add("Name");
table.Columns.Add("Hilfeplan");
table.Columns.Add("Kostenträger");
table.Columns.Add("FLS");
table.Columns.Add("Stundensatz");
table.Columns.Add("Pauschaler Faktor");
table.Columns.Add("Forderung");
var col = table.Columns;
col["FLS"].DataType = typeof(decimal);
col["Stundensatz"].DataType = typeof(decimal);
col["Pauschaler Faktor"].DataType = typeof(decimal);
col["Forderung"].DataType = typeof(decimal);
foreach(var rowDC in accountingReportDC.AccountingReportRows)
{
var row = table.NewRow();
decimal hourlyRate = 0;
decimal factor = 0;
var crp =
rowDC.CostBearer.Organisation.CostRatePeriods.GetCostRatePeriodForDate(
CostRatePeriodType.HourlyRate, _StartDate);
if (crp != null && crp.CostRateValue.HasValue)
hourlyRate = crp.CostRateValue.Value;
crp =
rowDC.CostBearer.Organisation.CostRatePeriods.GetCostRatePeriodForDate(
CostRatePeriodType.RateFactor, _StartDate);
if (crp != null && crp.CostRateValue.HasValue)
factor = crp.CostRateValue.Value;
decimal amount = (((rowDC.TotalDuration/60)*hourlyRate)*(100 + factor))/100;
row["Name"] = rowDC.Customer;
row["Hilfeplan"] = string.Format("{0:d}", rowDC.SupportConceptStart) + " - " + string.Format("{0:d}", rowDC.SupportConceptEnd);
row["Kostenträger"] = rowDC.CostBearer.OrganisationName;
row["FLS"] = Math.Round((rowDC.TotalDuration / 60), 2);
row["Stundensatz"] = Math.Round((hourlyRate), 2);
row["Pauschaler Faktor"] = Math.Round((factor), 2);
row["Forderung"] = Math.Round((amount), 2);
table.Rows.Add(row);
}
return table;
}
private void datePickerStartDate_EditValueChanged(object sender, EditValueChangedEventArgs e)
{
var dp = (DateEdit)sender;
_StartDate = dp.DateTime;
if(datagrid_result.Visibility.Equals(Visibility.Visible))
ShowSupportConcepts();
}
private void datePickerEndDate_EditValueChanged(object sender, EditValueChangedEventArgs e)
{
var dp = (DateEdit)sender;
_EndDate = dp.DateTime;
if (datagrid_result.Visibility.Equals(Visibility.Visible))
ShowSupportConcepts();
}
}
}