274 lines
9.2 KiB
C#
274 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;
|
|
|
|
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 "";
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|