Beispiel #1
0
        public ActionResult ProductivityReportTable(ProductivityReportCriteria filter)
        {
            ActionResult result = null;

            try
            {
                var model = LoadReport(filter);
                result = PartialView(model);
            }
            catch (SqlException se)
            {
                Trace.WriteLine($"Failed to open the data store, due to exception:{Environment.NewLine}{se}");
                result = new HttpStatusCodeResult(400, se.Message);
            }
            catch (Exception ex)
            {
                Trace.WriteLine($"Failed to load the report, due to exception:{Environment.NewLine}{ex}");
                result = new HttpStatusCodeResult(500, "The report cannot be generated. Try again later.");
            }

            return(result);
        }
Beispiel #2
0
        private IEnumerable <OperatorReportItem> LoadReport(ProductivityReportCriteria filter)
        {
            var result = new List <OperatorReportItem>();

            var cs = ConfigurationManager.ConnectionStrings["chat"].ConnectionString;

            using (var conn = new SqlConnection(cs))
                using (var sqlcomm = conn.CreateCommand())
                {
                    sqlcomm.CommandText = "dbo.OperatorProductivityRef";
                    sqlcomm.CommandType = CommandType.StoredProcedure;

                    if (filter != null)
                    {
                        if (!string.IsNullOrWhiteSpace(filter.Device))
                        {
                            sqlcomm.Parameters
                            .AddWithValue("@Device", filter.Device)
                            .SqlDbType = SqlDbType.VarChar;
                        }

                        if (filter.EndDate.HasValue)
                        {
                            sqlcomm.Parameters
                            .AddWithValue("@EndDate", filter.EndDate.Value)
                            .SqlDbType = SqlDbType.DateTime2;
                        }

                        if (filter.StartDate.HasValue)
                        {
                            sqlcomm.Parameters
                            .AddWithValue("@StartDate", filter.StartDate)
                            .SqlDbType = SqlDbType.DateTime2;
                        }

                        if (!string.IsNullOrWhiteSpace(filter.Website))
                        {
                            sqlcomm.Parameters
                            .AddWithValue("@Website", filter.Website)
                            .SqlDbType = SqlDbType.VarChar;
                        }
                    }

                    conn.Open();

                    var dr = sqlcomm.ExecuteReader();

                    if (dr != null && dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            var reportItem = new OperatorReportItem();
                            reportItem.ID                       = dr.GetInt32(0);
                            reportItem.Name                     = dr.GetString(1);
                            reportItem.ProactiveSent            = dr.IsDBNull(2) ? 0 : (int)dr[2];
                            reportItem.ProactiveAnswered        = dr.IsDBNull(3) ? 0 : dr.GetInt32(3);
                            reportItem.ReactiveReceived         = dr.IsDBNull(4) ? 0 : dr.GetInt32(4);
                            reportItem.ReactiveAnswered         = dr.IsDBNull(5) ? 0 : dr.GetInt32(5);
                            reportItem.TotalChatLengthSeconds   = dr.IsDBNull(6) ? 0 : dr.GetInt32(6);
                            reportItem.AverageChatLengthSeconds = dr.IsDBNull(7) ? 0 : dr.GetInt32(7);

                            if (reportItem.ProactiveSent != 0)
                            {
                                reportItem.ProactiveResponseRate = Convert
                                                                   .ToInt32((double)reportItem.ProactiveAnswered / reportItem.ProactiveSent * 100);
                            }

                            if (reportItem.ReactiveReceived != 0)
                            {
                                reportItem.ReactiveResponseRate = Convert
                                                                  .ToInt32((double)reportItem.ReactiveAnswered / reportItem.ReactiveReceived * 100);
                            }

                            result.Add(reportItem);
                        }
                    }
                }

            return(result);
        }