399 lines
13 KiB
C#
399 lines
13 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Report.ReportObjects;
|
|
using BeWo.Service.ServiceImplementations;
|
|
using BS.Shared.DataContracts;
|
|
using DevExpress.Data.Helpers;
|
|
using DevExpress.Printing.ExportHelpers;
|
|
|
|
namespace BfpDus.Export
|
|
{
|
|
public class CustomCsvExporter
|
|
{
|
|
|
|
public static QueryDC CreateQuery(QueryDC query)
|
|
{
|
|
DateTime dt = DateTime.Now;
|
|
|
|
query.FileName = String.Format("{0}.csv", query.Title);
|
|
|
|
//if (query.Parameter != null && query.Parameter.Count > 0)
|
|
//{
|
|
// DateTime.TryParse(query.Parameter[0].Value.ToString(), out dt);
|
|
// query.FileName = String.Format("{0} {1:yyyy-MM}.csv", query.Title, dt);
|
|
//}
|
|
|
|
|
|
var service = new QueryServiceImp();
|
|
var data = service.ExecuteQuery(query.Oid, query.Parameter);
|
|
|
|
var dataTable = BS.Shared.Core.Utils.XMLDeserializeFromString<DataTable>(data);
|
|
|
|
if (query.Oid == 1300)
|
|
{
|
|
query.QueryResult = CreateServiceRecordLinkDataCsvFromDataTable(dataTable);
|
|
}
|
|
else if (query.Oid == 1400)
|
|
{
|
|
query.QueryResult = CreateServiceRecordCsvFromDataTable(dataTable);
|
|
}
|
|
else if (query.Oid == 1500)
|
|
{
|
|
query.QueryResult = CreateSaldenlisteCsvFromDataTable(dataTable);
|
|
}
|
|
else
|
|
{
|
|
query.QueryResult = CreateCsvFromDataTable(dataTable);
|
|
}
|
|
|
|
return query;
|
|
}
|
|
|
|
private static String CreateServiceRecordCsvFromDataTable(DataTable dt)
|
|
{
|
|
|
|
/*
|
|
SELECT
|
|
sr.Oid,
|
|
sr.startdate,
|
|
sr.enddate,
|
|
sr.groupoid,
|
|
sr.customeroid,
|
|
sr.employeeOid,
|
|
sr.GroupPersonCount,
|
|
sd.Name,
|
|
sr.Notice
|
|
FROM servicerecord sr
|
|
inner join servicedescription sd on sd.oid = sr.servicedescriptionoid
|
|
where sr.startdate >= ':Von' and sr.startdate < ':Bis'
|
|
*/
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.Append("S_ID;Datum;Anfang;Ende;Gruppe;Gruppenleiter;Co_Leiter;Anzahl;Sitzungsart");
|
|
|
|
var sitzungen = CreateSitzungsdata(dt);
|
|
|
|
foreach (var data in sitzungen)
|
|
{
|
|
sb.AppendLine();
|
|
|
|
sb.Append(String.Format("{0}", data.SID)); // S_ID
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0:dd.MM.yyyy}", data.Datum)); // Datum
|
|
sb.Append(";");
|
|
|
|
if (data.Anfang.HasValue)
|
|
{
|
|
sb.Append(String.Format("{0:HH:mm}", data.Anfang)); // Anfang
|
|
}
|
|
|
|
sb.Append(";");
|
|
|
|
if (data.Ende.HasValue)
|
|
{
|
|
sb.Append(String.Format("{0:HH:mm}", data.Ende)); // Anfang
|
|
}
|
|
|
|
sb.Append(";");
|
|
|
|
if (data.Gruppe)
|
|
{
|
|
sb.Append("ja");
|
|
}
|
|
sb.Append(";");
|
|
|
|
sb.Append(data.GruppenLeiter);
|
|
sb.Append(";");
|
|
sb.Append(data.CoLeiter);
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0}", data.Anzahl)); // Anzahl
|
|
sb.Append(";");
|
|
sb.Append(data.Sitzungsart); // Sitzungsart
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
private static String CreateServiceRecordLinkDataCsvFromDataTable(DataTable dt)
|
|
{
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.Append("S_ID;K_ID");
|
|
|
|
var sitzungen = CreateSitzungsdata(dt);
|
|
|
|
foreach (var data in sitzungen)
|
|
{
|
|
foreach (var customerOid in data.KlientenListe)
|
|
{
|
|
sb.AppendLine();
|
|
sb.Append(String.Format("{0}", data.SID)); // S_ID
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0}", customerOid)); // K_ID
|
|
}
|
|
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
private static List<SitzungenData> CreateSitzungsdata(DataTable dt)
|
|
{
|
|
|
|
var allEmps = DAOFactory.GenericDAO.GetAllActiveAndArchived<Employee>();
|
|
|
|
Dictionary<long, SitzungenData> groupDict = new Dictionary<long, SitzungenData>();
|
|
var sitzungen = new List<SitzungenData>();
|
|
|
|
foreach (DataRow row in dt.Rows)
|
|
{
|
|
|
|
var oid = (long)row[0];
|
|
var startdate = (DateTime)row[1];
|
|
var enddate = (DateTime)row[2];
|
|
var groupoid = row[3] as long?;
|
|
var customerOid = row[4] as long?;
|
|
var empOid = row[5] as long?;
|
|
var anzahl = row[6] as int?;
|
|
var roundedduration = row[9] as decimal?;
|
|
|
|
SitzungenData data = new SitzungenData();
|
|
data.KlientenListe = new List<long>();
|
|
data.EmployeeListe = new List<String>();
|
|
data.SID = oid;
|
|
data.Datum = startdate;
|
|
data.Anfang = startdate;
|
|
data.Ende = startdate.AddMinutes((double)(roundedduration ?? 0));
|
|
data.Gruppe = groupoid.HasValue && groupoid > 0;
|
|
if (data.Gruppe)
|
|
{
|
|
data.Ende = enddate;
|
|
}
|
|
var emp = allEmps.Where(e => e.Oid == empOid).FirstOrDefault();
|
|
if (emp != null)
|
|
{
|
|
data.GruppenLeiter = emp.PersonnelNumber;
|
|
data.EmployeeListe.Add(emp.PersonnelNumber);
|
|
}
|
|
|
|
if (!anzahl.HasValue)
|
|
{
|
|
anzahl = 1;
|
|
}
|
|
|
|
if (customerOid.HasValue)
|
|
{
|
|
data.KlientenListe.Add(customerOid.Value);
|
|
}
|
|
|
|
data.Anzahl = anzahl.Value;
|
|
|
|
data.Sitzungsart = String.Format("{0}", row[7]); // Sitzungsart
|
|
data.Inhalt = String.Format("{0}", row[8]); // Sitzungsart
|
|
|
|
if (groupoid.HasValue && groupDict.ContainsKey(groupoid.Value))
|
|
{
|
|
var olddata = groupDict[groupoid.Value];
|
|
|
|
if (olddata.GruppenLeiter != data.GruppenLeiter)
|
|
{
|
|
olddata.CoLeiter = data.GruppenLeiter;
|
|
}
|
|
|
|
if (emp != null && !olddata.EmployeeListe.Contains(emp.PersonnelNumber))
|
|
{
|
|
olddata.EmployeeListe.Add(emp.PersonnelNumber);
|
|
}
|
|
if (customerOid.HasValue && !olddata.KlientenListe.Contains(customerOid.Value))
|
|
{
|
|
olddata.KlientenListe.Add(customerOid.Value);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (groupoid.HasValue)
|
|
{
|
|
groupDict.Add(groupoid.Value, data);
|
|
}
|
|
|
|
sitzungen.Add(data);
|
|
}
|
|
}
|
|
|
|
return sitzungen;
|
|
}
|
|
|
|
private static String CreateSaldenlisteCsvFromDataTable(DataTable dt)
|
|
{
|
|
|
|
/*
|
|
*
|
|
ZG_ID K_ID Kostenträger Bereits gezahlt Bis dato geleistete FLS Betrag Saldo
|
|
|
|
Startdatum Alle HPs die ab dem Datum starten
|
|
Enddatum Stichtag
|
|
|
|
alle mit Saldo 0 raus
|
|
|
|
KH Differenzen nicht berücksichtigen
|
|
|
|
|
|
|
|
Bezeichnung Saldenliste
|
|
|
|
*/
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.Append("ZG_ID;K_ID;KT;Bereits gezahlt;Bis dato geleistete FLS;Fehlkontakte;Betrag;Saldo");
|
|
|
|
DateTime startdate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
|
|
DateTime enddate = startdate.AddMonths(1).AddDays(-1);
|
|
|
|
|
|
foreach (DataRow row in dt.Rows)
|
|
{
|
|
var von = (String)row[0];
|
|
var bis = (String)row[1];
|
|
|
|
if (DateTime.TryParse(von, out var s) && s < DateTime.MaxValue)
|
|
{
|
|
startdate = s;
|
|
}
|
|
if (DateTime.TryParse(bis, out var e) && e < DateTime.MaxValue)
|
|
{
|
|
enddate = e.AddDays(-1);
|
|
}
|
|
}
|
|
|
|
var ro = FinanceRO.Create(startdate, enddate, false, false);
|
|
ro.CalculateBillableAmountInReportTimeSpan();
|
|
var saldenliste = CreateSaldenliste(ro);
|
|
|
|
foreach (var data in saldenliste)
|
|
{
|
|
sb.AppendLine();
|
|
|
|
sb.Append(String.Format("{0}", data.SupportConceptOid));
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0}", data.CustomerOid));
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0}", data.Organisation));
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0:0.00}", data.BereitsGezahlt));
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0:0.00}", data.BisDatoGeleistet));
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0:0.00}", data.Fehlkontakte));
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0:0.00}", data.Betrag));
|
|
sb.Append(";");
|
|
sb.Append(String.Format("{0:0.00}", data.Saldo));
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
private static List<SaldolistenEintrag> CreateSaldenliste(FinanceRO ro)
|
|
{
|
|
var liste = new List<SaldolistenEintrag>();
|
|
|
|
foreach (var item in ro.SupportConceptFinanceList)
|
|
{
|
|
var newEntry = new SaldolistenEintrag();
|
|
|
|
newEntry.SupportConceptOid = item.Costbearer2Supportconcept.SupportConcept.SupportConceptOid;
|
|
newEntry.CustomerOid = item.Costbearer2Supportconcept.SupportConcept.Customer.Oid.Value;
|
|
newEntry.CustomerName = item.Costbearer2Supportconcept.SupportConcept.Customer.LastNameFirstName;
|
|
newEntry.Organisation = item.CostBearerName;
|
|
newEntry.BereitsGezahlt = item.AmountPaid;
|
|
newEntry.BisDatoGeleistet = item.BillableHours;
|
|
newEntry.Fehlkontakte = item.StundenFehlkontakteInReportTimeSpan;
|
|
newEntry.Betrag = item.BillableAmountInReportTimeSpan;
|
|
newEntry.Saldo = item.AmountPaid - item.BillableAmountInReportTimeSpan;
|
|
|
|
|
|
//if (newEntry.Saldo != 0 && item.Costbearer2Supportconcept.StartDate >= ro.ReportStartDate)
|
|
if (item.Costbearer2Supportconcept.StartDate >= ro.ReportStartDate)
|
|
{
|
|
liste.Add(newEntry);
|
|
}
|
|
}
|
|
|
|
return liste.OrderBy(a => a.CustomerName).ToList();
|
|
}
|
|
|
|
private static String CreateCsvFromDataTable(DataTable dt)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
foreach (DataColumn column in dt.Columns)
|
|
{
|
|
if (sb.Length > 0)
|
|
{
|
|
sb.Append(";");
|
|
}
|
|
sb.Append(column.ColumnName);
|
|
}
|
|
foreach (DataRow row in dt.Rows)
|
|
{
|
|
sb.AppendLine();
|
|
|
|
for (int i = 0; i < row.ItemArray.Length; i++)
|
|
{
|
|
if (i > 0)
|
|
{
|
|
sb.Append(";");
|
|
}
|
|
|
|
|
|
var item = row[i];
|
|
|
|
var itemStr = String.Format("{0}", item);
|
|
sb.Append(itemStr);
|
|
}
|
|
|
|
}
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
}
|
|
|
|
public class SitzungenData
|
|
{
|
|
public long SID { get; set; }
|
|
public DateTime Datum { get; set; }
|
|
public DateTime? Anfang { get; set; }
|
|
public DateTime? Ende { get; set; }
|
|
public bool Gruppe { get; set; }
|
|
public String GruppenLeiter { get; set; }
|
|
public String CoLeiter { get; set; }
|
|
public int Anzahl { get; set; }
|
|
public String Sitzungsart { get; set; }
|
|
public String Inhalt { get; set; }
|
|
|
|
public List<String> EmployeeListe { get; set; }
|
|
public List<long> KlientenListe { get; set; }
|
|
}
|
|
|
|
public class SaldolistenEintrag
|
|
{
|
|
//"ZG_ID,K_ID;Kostenträger;Bereits gezahlt;Bis dato geleistete FLS;Fehlkontakte;Betrag;Saldo"
|
|
public long SupportConceptOid { get; set; }
|
|
public long CustomerOid { get; set; }
|
|
public String CustomerName { get; set; }
|
|
public String Organisation { get; set; }
|
|
public decimal BereitsGezahlt { get; set; }
|
|
public decimal BisDatoGeleistet { get; set; }
|
|
public decimal Fehlkontakte { get; set; }
|
|
public decimal Betrag { get; set; }
|
|
public decimal Saldo { get; set; }
|
|
}
|
|
} |