Files
BeWoPlaner/Report/ReportObjects/ServiceRecordChangesAfterInvoiceDateRO.cs

276 lines
9.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Compact;
namespace BeWo.Report.ReportObjects
{
public class ServiceRecordChangesAfterInvoiceDateRO : AbstractBeWoReportObject<ServiceRecordChangesAfterInvoiceDateRO>
{
public DateTime ReportStart { get; set; }
public DateTime ReportEnd { get; set; }
public List<ServiceRecordChangeRO> DetailList { get; set; }
public static ServiceRecordChangesAfterInvoiceDateRO Create(DateTime start, DateTime end)
{
var ro = new ServiceRecordChangesAfterInvoiceDateRO();
ro.ReportStart = start;
ro.ReportEnd = end;
ro.DetailList = new List<ServiceRecordChangeRO>();
var invoices = DAOFactory.SearchDAO.GetInvoiceBases(start, end, false);
List<long> c2sOids = new List<long>();
Dictionary<long, DateTime> c2sOid2MaxInsts = new Dictionary<long, DateTime>();
Dictionary<long, String> c2sOid2InvoiceNumber = new Dictionary<long, String>();
foreach (var item in invoices)
{
if (item.InsTs.HasValue && item.CostBearer2SupportConceptOid != null)
{
var c2sOid = item.CostBearer2SupportConceptOid.Value;
c2sOids.Add(c2sOid);
DateTime insts = item.InsTs.Value;
if (!c2sOid2MaxInsts.ContainsKey(c2sOid))
{
c2sOid2MaxInsts.Add(c2sOid, insts);
c2sOid2InvoiceNumber.Add(c2sOid, item.InvoiceNumber);
}
else if (insts > c2sOid2MaxInsts[c2sOid])
{
c2sOid2MaxInsts.Remove(c2sOid);
c2sOid2MaxInsts.Add(c2sOid, insts);
c2sOid2InvoiceNumber.Remove(c2sOid);
c2sOid2InvoiceNumber.Add(c2sOid, item.InvoiceNumber);
}
}
}
foreach (var c2sOid in c2sOids)
{
String sql = String.Format(@"
SELECT
sh.startdate,
sh.enddate,
sh.roundedduration,
sh.changetype,
sh.Timestamp,
sh.InsUser,
sh.ServiceRecordOid,
p.FirstName,
p.LastName,
c2s.ApprovedStartDate,
c2s.ApprovedEndDate,
o.Name,
sh.Oid
FROM servicerecordhistory sh
join costbearer2supportconcept c2s on sh.costbearer2supportconceptoid = c2s.Oid
join supportconcept sc on sc.Oid = c2s.supportconceptoid
join customer c on sc.customeroid = c.Oid
join person p on p.Oid = c.PersonOid
join costbearer cb on cb.Oid = c2s.CostBearerOid
join organisation o on o.costbeareroid = cb.Oid
where sh.costbearer2supportconceptoid = {0}
and sh.StartDate >= '{1:yyyy-MM-dd}' and sh.StartDate < '{2:yyyy-MM-dd}' and sh.Timestamp >= '{3:yyyy-MM-dd HH:mm}'
", c2sOid, start, end, c2sOid2MaxInsts[c2sOid]);
var sqlresult = DAOFactory.SearchDAO.GetSqlResult(sql);
//
//update customer set debitornumber = '5' + debitornumber where debitornumber is not null
foreach (object[] srRow in sqlresult)
{
var rro = CreateRecordRO(srRow);
rro.InvoiceNumber = c2sOid2InvoiceNumber[c2sOid];
rro.MinutesOld = GetMinutesOld(rro);
if (!ro.DetailList.Exists(r => r.ServiceRecordHistoryOid == rro.ServiceRecordHistoryOid))
{
ro.DetailList.Add(rro);
}
}
}
//var dclist = MapperFactory.CustomerDC_Customer.MapToNewDCs(customers);
//foreach (var item in dclist)
//{
// var customerRO = CustomerDataRO.Create(item);
// ro.CustomerList.Add(customerRO);
//}
return ro;
}
private static decimal GetMinutesOld(ServiceRecordChangeRO rro)
{
decimal old = 0;
String sql = String.Format(@"
SELECT
sh.startdate,
sh.enddate,
sh.roundedduration,
sh.changetype,
sh.Timestamp,
sh.InsUser,
sh.ServiceRecordOid,
p.FirstName,
p.LastName,
c2s.ApprovedStartDate,
c2s.ApprovedEndDate,
o.Name,
sh.Oid
FROM servicerecordhistory sh
join costbearer2supportconcept c2s on sh.costbearer2supportconceptoid = c2s.Oid
join supportconcept sc on sc.Oid = c2s.supportconceptoid
join customer c on sc.customeroid = c.Oid
join person p on p.Oid = c.PersonOid
join costbearer cb on cb.Oid = c2s.CostBearerOid
join organisation o on o.costbeareroid = cb.Oid
where sh.ServiceRecordOid = {0} and sh.Oid < {1}
order by oid desc"
, rro.ServiceRecordOid, rro.ServiceRecordHistoryOid);
var sqlresult = DAOFactory.SearchDAO.GetSqlResult(sql);
//
//update customer set debitornumber = '5' + debitornumber where debitornumber is not null
foreach (object[] srRow in sqlresult)
{
var ro = CreateRecordRO(srRow);
old = ro.MinutesNew ?? 0;
}
return old;
}
private static ServiceRecordChangeRO CreateRecordRO(object[] sqlRow)
{
var ro = new ServiceRecordChangeRO();
//sh.startdate, 0
//sh.enddate,1
//sh.roundedduration,2
//sh.changetype,3
//sh.Timestamp,4
//sh.InsUser,5
//sh.ServiceRecordOid,6
//p.FirstName,7
//p.LastName,8
//c2s.ApprovedStartDate,9
//c2s.ApprovedEndDate,10
//o.Name11
ro.CustomerFirstName = (String)sqlRow[7];
ro.CustomerLastName = (String)sqlRow[8];
if (sqlRow[9] != null && DateTime.TryParse(sqlRow[9].ToString(), out var dt1))
{
ro.HPStart = dt1;
}
if (sqlRow[10] != null && DateTime.TryParse(sqlRow[10].ToString(), out var dt2))
{
ro.HPEnd = dt2;
}
ro.Organisation = (String)sqlRow[11];
ro.ChangeDate = (DateTime)sqlRow[4];
ro.ServiceRecordStart = (DateTime)sqlRow[0];
ro.ServiceRecordEnd = (DateTime)sqlRow[1];
ro.MinutesNew = (decimal?)sqlRow[2];
ro.ChangeType = Int32.Parse(sqlRow[3].ToString());
ro.UpdateUserName = (String)sqlRow[5];
ro.ServiceRecordOid = (long)sqlRow[6];
ro.ServiceRecordHistoryOid = (long)sqlRow[12];
//e.ServiceRecordOid = (long)sqlRow[0];
//e.ServiceRecordDate = (DateTime)sqlRow[1];
//if (e.ServiceRecordDate.Second == 0)
//{
// e.ServiceRecordStart = e.ServiceRecordDate;
// e.ServiceRecordEnd = (DateTime)sqlRow[2];
//}
//e.ServiceRecordNotice = (String)sqlRow[3];
//e.ServiceRecordNotice2 = (String)sqlRow[4];
//e.ServiceRecordNotice3 = (String)sqlRow[5];
//e.ServiceRecordNotice4 = (String)sqlRow[6];
//e.ServiceRecordNotice5 = (String)sqlRow[7];
//e.Minutes = (decimal)sqlRow[8];
//e.GroupPersonCount = (int?)sqlRow[9];
//e.GroupMinutes = (decimal?)sqlRow[10];
//e.CustomerFirstName = (String)sqlRow[11];
//e.CustomerLastName = (String)sqlRow[12];
//e.ReferenceNumber = (String)sqlRow[13];
//if (sqlRow[14] != null && DateTime.TryParse(sqlRow[14].ToString(), out var dt1))
//{
// e.CustomerSignatureDate = dt1;
//}
//if (sqlRow[15] != null && DateTime.TryParse(sqlRow[15].ToString(), out var dt2))
//{
// e.EmployeeSignatureDate = dt2;
//}
return ro;
}
}
public class ServiceRecordChangeRO
{
public long ServiceRecordHistoryOid { get; set; }
public long ServiceRecordOid { get; set; }
public String CustomerFirstName { get; set; }
public String CustomerLastName { get; set; }
public DateTime HPStart { get; set; }
public DateTime HPEnd { get; set; }
public String Organisation { get; set; }
public DateTime ChangeDate { get; set; }
public DateTime ServiceRecordStart { get; set; }
public DateTime ServiceRecordEnd { get; set; }
public decimal? MinutesOld { get; set; }
public decimal? MinutesNew { get; set; }
public int ChangeType { get; set; }
public String UpdateUserName { get; set; }
public String InvoiceNumber { get; set; }
public String TimeRange
{
get
{
if (ServiceRecordStart.Second == 0)
{
return String.Format("{0:HH:mm}-{1:HH:mm}", ServiceRecordStart, ServiceRecordEnd);
}
return "";
}
}
public String ChangeTypeText
{
get
{
switch (ChangeType)
{
case 0:
return "Neu";
case 1:
return "Geändert";
case 2:
return "Gelöscht";
default:
return "";
}
}
}
}
}