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; namespace BeWo.Report.ReportObjects { public class ServiceRecordChangesAfterInvoiceDateRO : AbstractBeWoReportObject { public DateTime ReportStart { get; set; } public DateTime ReportEnd { get; set; } public List 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(); var invoices = DAOFactory.SearchDAO.GetInvoiceBases(start, end, false); List c2sOids = new List(); Dictionary c2sOid2MaxInsts = new Dictionary(); Dictionary c2sOid2InvoiceNumber = new Dictionary(); 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 ""; } } } } }