-1

Why am I seeing this error prnt.sc/11btyns . This happens only when I change mostRecentMonday TO lastWeekMonday, and weekEnd TO lastWeekSunday.

var mostRecentMonday = DateTime.Now.AddDays(-7).StartOfWeek(DayOfWeek.Monday); 
var weekEnd = mostRecentMonday.AddDays(7).AddSeconds(-1); 
var lastWeekMonday = mostRecentMonday.AddDays(-7).StartOfWeek(DayOfWeek.Monday); 
var lastWeekSunday = lastWeekMonday.AddDays(7).AddSeconds(-1); 

Model class

public DateTime? FeedbackDateTime { get; set; }

public DateTime? FeedbackSharedDateTime { get; set; }

public string AuditorAHT { get; set; }

ReportVM To Group Data and display in the View

public string FeedbackSharedBy { get; set; }
public int AuditCount { get; set; }

public string AudtAht { get; set; }

Controller that saves the action perform by auditor as duration in

public string AuditorAHT { get; set; }
dto.FeedbackSharedDateTime = DateTime.Now;

string ahtString = string.Format("{0:hh\\:mm\\:ss}", dto.FeedbackSharedDateTime - dto.FeedbackDateTime);

dto.AuditorAHT = ahtString;

db.SaveChanges();

Below Action should display Auditors Name, Count, and Average Time spent.

var audtName = db.Chats.Where(x => System.Data.Entity.DbFunctions.TruncateTime(x.MSTChatCreatedDateTime) >= mostRecentMonday
                           && System.Data.Entity.DbFunctions.TruncateTime(x.MSTChatCreatedDateTime) <= weekEnd && x.Feedback != null && x.FeedbackSharedBy != null).Select(x => new {
x.FeedbackSharedBy,
x.AuditorAHT
}).ToList() // this hits the database
                            
// We need to do grouping in the code (rather than the db)
// because timespans are stored as strings
.GroupBy(e => e.FeedbackSharedBy)
.Select(g => new ReportVM
{
FeedbackSharedBy = g.Key,
AuditCount = g.Count(),
AudtAht = TimeSpan.FromSeconds(g.Sum(t => TimeSpan.Parse(t.AuditorAHT).TotalSeconds / g.Count())).ToString()
})
.OrderByDescending(s => s.AuditCount).ToList();

ViewBag.AudtReport = audtName;

DateTime Extn

public static class DateTimeExtensions
    {

        public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
        {
            int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
            return dt.AddDays(-1 * diff).Date;
        }

        static GregorianCalendar _gc = new GregorianCalendar();
        public static int GetWeekOfMonth(this DateTime time)
        {
            DateTime first = new DateTime(time.Year, time.Month, 1);
            return time.GetWeekOfYear() - first.GetWeekOfYear() + 1;
        }

        static int GetWeekOfYear(this DateTime time)
        {
            return _gc.GetWeekOfYear(time, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
        }
        static DateTime ToCleanDateTime(this DateTime dt)
        {
            return new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0, 0);
        }

        public static DateTime ToCleanDateTime(this DateTime? dt)
        {
            if (dt.HasValue)
            {
                return dt.Value.ToCleanDateTime();
            }
            return DateTime.Now; // if dt doesn't have value, return current DateTime.
        }


    }

Kindly suggest

R S
  • 19
  • 3

1 Answers1

0

Was able to resolve this by simply making 2 changes

  1. Following property public string AuditorAHT { get; set; } = "00:00:00";. Updated so default NULL value is stored with 00:00:00 instead of saying NULL.

  2. All past data had to be updated as 00:00:00, hence ran SQL query

Update Chats
Set AuditorAHT = '00:00:00'
Where AuditorAHT IS NULL;

Build the Project and wallaa code started to respond.

Thank you!

R S
  • 19
  • 3