public async Task <IActionResult> Edit(Guid id, [Bind("WorktimeID,EmplID,ProjectID,ServiceID,WorkDate,TimeUsed,DrivingTime,Lunch")] Worktime worktime)
 {
     if (id != worktime.WorktimeID)
     {
         return(NotFound());
     }
     worktime.UserID = this.User.FindFirst(ClaimTypes.NameIdentifier).Value;
     if (ModelState.IsValid)
     {
         try
         {
             _context.Update(worktime);
             await _context.SaveChangesAsync();
         }
         catch (DbUpdateConcurrencyException)
         {
             if (!WorktimeExists(worktime.WorktimeID))
             {
                 return(NotFound());
             }
             else
             {
                 throw;
             }
         }
         return(RedirectToAction(nameof(Index)));
     }
     PopulateProjectDropDownList(worktime.ProjectID);
     PopulateServiceDropDownList(worktime.ServiceID);
     return(View(worktime));
 }
Esempio n. 2
0
        public IActionResult Worktime(AddTimeViewModel addTimeViewModel)
        {
            if (ModelState.IsValid)
            {
                Project newProject = context.Projects.Single(p => p.ProjectID == addTimeViewModel.ProjectID);

                Worktime newWorktime = new Worktime
                {
                    Hours       = addTimeViewModel.Hours,
                    WeekRange   = WeekNumber.WeekDict[addTimeViewModel.WeekId],
                    Description = addTimeViewModel.Description,
                    Project     = newProject
                };

                newWorktime.Amount     = newWorktime.Hours * (double)newWorktime.Project.Rate;
                newWorktime.OpenStatus = true;

                context.Worktimes.Add(newWorktime);
                context.SaveChanges();

                return(Redirect("/?id=" + addTimeViewModel.ProjectID));
            }

            addTimeViewModel.SelectProjects = SelectListGen.SelectProjects(context.Projects.ToList());

            return(View("AddTime", addTimeViewModel));
        }
        //***********************************************************************************
        //Get Timesheet
        public ActionResult VolunteerTimesheet()
        {
            var vol         = db.Volunteers;
            var user        = (from i in vol where i.volEmail == User.Identity.Name select i.volID).SingleOrDefault();
            var volunteerID = user;
            var timesheet   = db.Worklog.Where(s => s.volID == volunteerID).ToList().OrderByDescending(d => d.wrkDate);

            var wlog       = db.Worklog.Include(v => v.Volunteer);
            var volunteers = db.Volunteers;

            //will set Worktime object if Endtime null. i.e., user clocked-in.
            Worktime time = (from w in wlog where w.volID == volunteerID && w.wrkEndTime == null select w).SingleOrDefault();

            if (time != null) //time variable holds a record with wrkEndTime==null, user is still clocked in
            {
                ViewBag.ClockStatus    = "Clocked In";
                ViewBag.ClockActionBtn = "Click To Clock Out";
            }
            else //user has no record containing null wrkEndTime, user currently clocked out
            {
                ViewBag.ClockStatus    = "Clocked Out";
                ViewBag.ClockActionBtn = "Click To Clock In";
            }

            return(PartialView("_VolunteerTimesheet", timesheet));
        }
Esempio n. 4
0
        public async Task <IActionResult> Edit(int id, [Bind("WorktimeId,PersonId,Date,Hours,LocalId,PositionId")] Worktime worktime)
        {
            if (id != worktime.WorktimeId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(worktime);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!WorktimeExists(worktime.WorktimeId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["LocalId"]    = new SelectList(_context.Locals, "LocalId", "LocalName", worktime.LocalId);
            ViewData["PersonId"]   = new SelectList(_context.People, "PersonId", "PersonId", worktime.PersonId);
            ViewData["PositionId"] = new SelectList(_context.Positions, "PositionId", "PositionName", worktime.PositionId);
            return(View(worktime));
        }
        //***********************************************************************************
        //Update Timesheet
        public ActionResult UpdateTimesheet(int?id)
        {
            ViewBag.FullName = getUserName();

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Worktime worklog = db.Worklog.Find(id);


            if (worklog == null)
            {
                return(HttpNotFound());
            }
            ViewBag.volID = new SelectList(db.Volunteers, "volID", "volFirstName", worklog.volID);

            if (Request.Browser.Browser == "InternetExplorer")
            {
                ViewBag.date = worklog.wrkDate.ToShortDateString();
            }
            else
            {
                ViewBag.date = worklog.wrkDate.ToString("yyyy-MM-dd");
            }
            return(View(worklog));
        }
        public IHttpActionResult PutWorktime(int id, Worktime worktime)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != worktime.WorkTimeID)
            {
                return(BadRequest());
            }

            db.Entry(worktime).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!WorktimeExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Esempio n. 7
0
        public void TestWorktimeCanAddAndFormatAsTime(double value, double toAdd, WorktimePrecision withPrecision, string expectedTime, string expectedDecimal)
        {
            var wt = new Worktime(value, WorktimePrecision.Minutes);

            wt = wt.Add(toAdd, withPrecision);
            Assert.That(wt.ToString(null, CultureInfo.InvariantCulture), Is.EqualTo(expectedTime));
            Assert.That(wt.ToString("d", CultureInfo.InvariantCulture), Is.EqualTo(expectedDecimal));
        }
Esempio n. 8
0
        public void TestMoneyCanAddAndFormatAsTime(double worktime, double value, MoneyChargeRate chargeRate, double tax, string expected)
        {
            var wt       = new Worktime(worktime, WorktimePrecision.Minutes);
            var money    = Money.Get(wt, value, chargeRate);
            var taxValue = money.GetTax(tax);

            money = money.Add(taxValue);
            Assert.That(money.ToString(null, CultureInfo.InvariantCulture), Is.EqualTo(expected));
        }
        public IHttpActionResult GetWorktime(int id)
        {
            Worktime worktime = db.Worktimes.Find(id);

            if (worktime == null)
            {
                return(NotFound());
            }

            return(Ok(worktime));
        }
        public IHttpActionResult PostWorktime(Worktime worktime)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.Worktimes.Add(worktime);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = worktime.WorkTimeID }, worktime));
        }
        public async Task <IActionResult> Create([Bind("WorktimeID,EmplID,ProjectID,ServiceID,WorkDate,TimeUsed,DrivingTime,Lunch")] Worktime worktime)
        {
            if (ModelState.IsValid)
            {
                worktime.WorktimeID = Guid.NewGuid();
                worktime.UserID     = this.User.FindFirst(ClaimTypes.NameIdentifier).Value;
                _context.Add(worktime);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(worktime));
        }
        public ActionResult UpdateTimesheet([Bind(Include = "wrkID,volID,wrkDate,wrkStartTime,wrkEndTime")] Worktime worklog)
        {
            if (ModelState.IsValid)
            {
                db.Entry(worklog).State = EntityState.Modified;

                //db.Worklog.Add(worklog);
                db.SaveChanges();

                return(RedirectToAction("Index", new { id = worklog.volID }));
            }

            return(View(worklog));
        }
Esempio n. 13
0
        public async Task <IActionResult> Create([Bind("WorktimeId,PersonId,Date,Hours,LocalId,PositionId")] Worktime worktime)
        {
            if (ModelState.IsValid)
            {
                _context.Add(worktime);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["LocalId"]    = new SelectList(_context.Locals, "LocalId", "LocalName", worktime.LocalId);
            ViewData["PersonId"]   = new SelectList(_context.People, "PersonId", "PersonId", worktime.PersonId);
            ViewData["PositionId"] = new SelectList(_context.Positions, "PositionId", "PositionName", worktime.PositionId);
            return(View(worktime));
        }
        public IHttpActionResult DeleteWorktime(int id)
        {
            Worktime worktime = db.Worktimes.Find(id);

            if (worktime == null)
            {
                return(NotFound());
            }

            db.Worktimes.Remove(worktime);
            db.SaveChanges();

            return(Ok(worktime));
        }
        //***********************************************************************************
        //Update Timesheet
        public ActionResult UpdateTimesheet()
        {
            var vol  = db.Volunteers;
            var user = (from i in vol where i.volEmail == User.Identity.Name select i.volID).SingleOrDefault();

            ViewBag.FullName = getUserName();

            Worktime worklog = db.Worklog.Find(user);


            if (worklog == null)
            {
                return(HttpNotFound());
            }
            ViewBag.volID = new SelectList(db.Volunteers, "volID", "volFirstName", worklog.volID);

            return(View(worklog));
        }
        public ActionResult UpdateTimesheet([Bind(Include = "wrkID,volID,wrkDate,wrkStartTime,wrkEndTime")] Worktime worklog)
        {
            ViewBag.FullName = getUserName();

            if (Request.Browser.Browser == "InternetExplorer")
            {
                ViewBag.date = worklog.wrkDate.ToShortDateString();
            }
            else
            {
                ViewBag.date = worklog.wrkDate.ToString("yyyy-MM-dd");
            }

            if (ModelState.IsValid)
            {
                List <Worktime> timesheet  = db.Worklog.AsNoTracking().Where(t => t.volID.Equals(worklog.volID)).ToList(); //get all records in vol's timesheet
                Worktime        oldWorklog = timesheet.Where(t => t.wrkID.Equals(worklog.wrkID)).FirstOrDefault();

                worklog.wrkStartTime = worklog.wrkDate.Add(worklog.wrkStartTime.TimeOfDay);
                worklog.wrkEndTime   = worklog.wrkDate.Add(worklog.wrkEndTime.Value.TimeOfDay);

                var updateStartTime = worklog.wrkStartTime;
                var updateEndTime   = worklog.wrkEndTime;

                var updatedRecordIsValid = true;
                var updateSuccessful     = false;

                if (updateStartTime == null || updateEndTime == null)
                {
                    ViewBag.updateTimesheetError = "All fields must be filled.";
                    return(View(worklog));
                }
                if (updateStartTime > updateEndTime) //user input error: clockin time after clockout time
                {
                    ViewBag.updateTimesheetError = "The clock-out time should be later than clock-in time. Please adjust clock-out to after clock-in or adjust clock-in to before clock-out.";
                    return(View(worklog));
                }

                foreach (var record in timesheet)
                {
                    if (record.wrkID != worklog.wrkID)
                    {
                        bool overlap = worklog.wrkStartTime < record.wrkEndTime && record.wrkStartTime < worklog.wrkEndTime;

                        if (overlap)
                        {
                            updatedRecordIsValid   = false;
                            ViewBag.recordConflict = "Conflicting Record: " + record.wrkDate.Date.ToShortDateString() + " - " + record.wrkStartTime.ToShortTimeString() + " - " + record.wrkEndTime.Value.ToShortTimeString();
                        }
                    }
                }

                if (updatedRecordIsValid) //everything is ok
                {
                    db.Entry(worklog).State = EntityState.Modified;
                    db.SaveChanges();
                    updateSuccessful = true;
                }
                else
                {
                    ViewBag.updateTimesheetError = "This update conflicts with one or more existing timesheet records.";
                }

                if (updateSuccessful == true)
                {
                    List <string> flags = new List <string>();

                    using (System.IO.StreamReader file = new System.IO.StreamReader(Server.MapPath("~/Content/docs/WorklogDataMessages/") + ("WorklogDataFlags.txt"), false))
                    {
                        try
                        {
                            var txt = "";

                            while ((txt = file.ReadLine()) != null)
                            {
                                var msgs = txt.Split(';');
                                foreach (var item in msgs)
                                {
                                    if (item != "")
                                    {
                                        var id_code = item.Split(',');

                                        if (id_code[0] != worklog.wrkID.ToString())
                                        {
                                            flags.Add(item);
                                        }
                                    }
                                }
                            }
                            file.Close();
                        }
                        catch (Exception e)
                        {
                        }
                    }
                    using (System.IO.StreamWriter newFile = new System.IO.StreamWriter(Server.MapPath("~/Content/docs/WorklogDataMessages/") + ("WorklogDataFlags.txt"), false))
                    {
                        try
                        {
                            foreach (var item in flags)
                            {
                                if (item != "")
                                {
                                    newFile.Write(item + ";");
                                }
                            }
                            newFile.Close();
                        }
                        catch (Exception e)
                        {
                        }
                    }

                    return(RedirectToAction("Details", new { id = worklog.volID }));
                }
            }

            return(View(worklog));
        }
        /// <summary>
        /// 查询指定日期范围内的运转时间并补偿相应的数量
        /// </summary>
        /// <param name="averagable"></param>
        /// <returns></returns>
        private string HandleQueryEquipmentWorktime(bool averagable = true)
        {
            var ret = "{}";
            var id  = ParseInt(Utility.Decrypt(data));
            var obj = EquipmentInstance.Find(f => f.id == id && f.Deleted == false);

            if (null != obj)
            {
                var date = DateTime.Parse(GetParamenter("date") + " 00:00:00");
                // 如果不是求平均值则将日期往前推一天
                //if (!averagable) { date = date.AddDays(-1); }
                var date1 = DateTime.Parse(GetParamenter("date1") + " 23:59:59");
                List <WorktimeChart> avg  = new List <WorktimeChart>();
                List <WorktimeChart> work = new List <WorktimeChart>();
                DateTime             dt   = date;
                // 循环每天一个节点
                while (dt.Ticks < date1.Ticks)
                {
                    avg.Add(new WorktimeChart()
                    {
                        date = dt.ToString("yyyy/MM/dd"), x = Utility.DateTimeToJavascriptDate(dt.Date), y = 0, min = 0
                    });
                    work.Add(new WorktimeChart()
                    {
                        date = dt.ToString("yyyy/MM/dd"), x = Utility.DateTimeToJavascriptDate(dt.Date), y = 0, min = 0
                    });
                    dt = dt.AddDays(1);
                }
                var macid    = EquipmentInstance.GetFullNumber(obj);
                var cmds     = new string[] { "0x1000", "0x600B" };
                var runtimes = DataInstance.FindList(f => f.mac_id.Equals(macid) && cmds.Contains(f.command_id) &&
                                                     f.receive_time >= date && f.receive_time <= date1).OrderBy(o => o.receive_time);
                var list = new List <Worktime>();
                if (null != runtimes)
                {
                    long today        = 0;
                    long timeInterval = 0;
                    foreach (var r in runtimes)
                    {
                        bool gps = r.command_id.Equals("0x1000");
                        if (today == 0)
                        {
                            dt = r.receive_time.Value;
                        }
                        else
                        {
                            // 计算与上一条数据的实际接收时间之间的时间差
                            timeInterval = (long)(r.receive_time.Value - dt).TotalSeconds;
                        }
                        var t = Utility.DateTimeToJavascriptDate(r.receive_time.Value.Date);
                        // 日期不同则重置日期和运转时间
                        if (today != t)
                        {
                            today = t;
                        }

                        byte[] temp  = null;
                        int    index = 0;
                        if (gps)
                        {
                            if (r.protocol_type == ProtocolTypes.SATELLITE)
                            {
                                temp  = CustomConvert.GetBytes(r.message_content);
                                index = 13;
                            }
                        }
                        else
                        {
                            temp  = CustomConvert.GetBytes(r.message_content);
                            index = 0;
                        }

                        // 增加一个节点
                        Worktime wt = new Worktime();
                        wt.date     = r.receive_time.Value.ToString("yyyy/MM/dd HH:mm:ss");
                        wt.worktime = null == temp ? 0 : BitConverter.ToUInt32(temp, index);
                        var bin = !gps ? "00000000" : CustomConvert.IntToDigit(temp[4], CustomConvert.BIN, 8);
                        // 如果list已经有数据则计算与上一条数据之间的差值
                        var cnt = list.Count;
                        if (cnt > 0)
                        {
                            if (wt.worktime < list[cnt - 1].worktime)
                            {
                                // 当前运转时间小于前一条时,小计为0
                                wt.interval = 0;
                            }
                            else
                            {
                                // 差值
                                wt.interval = !gps ? 0 : (wt.worktime - list[cnt - 1].worktime);
                                // 计算差值与实际两条数据的接收时间差值的对比
                                if (wt.interval > timeInterval)
                                {
                                    // 如果运转时间差超过了这两条数据接收时间的差值,则记为0
                                    wt.interval = 0;
                                }
                                // 计算运转时间之间的差值  2016/08/15 15:00
                                if (wt.interval > 0)
                                {
                                    uint hour = (uint)r.receive_time.Value.Hour, min = (uint)r.receive_time.Value.Minute;
                                    // 凌晨0点的运转时间需要分开到两个日期里
                                    if (hour == 0)
                                    {
                                        // 时间间隔大于0点已过的分钟数,则需要把时间差分开到两个日期里
                                        if (wt.interval > min)
                                        {
                                            list[cnt - 1].interval += wt.interval - min;
                                            wt.interval             = min;
                                        }
                                    }
                                }
                                // 补偿的分钟
                                if (wt.interval > 0)
                                {
                                    uint ad = 0;
                                    if (wt.interval > 60)
                                    {
                                        ad = wt.interval / 60;
                                    }
                                    else
                                    {
                                        ad = 1;
                                    }
                                    if (bin[6] == '1')
                                    {
                                        ad += 1;
                                    }
                                    wt.added = ad;
                                }
                                else
                                {
                                    wt.interval = 0;
                                }
                                // 所用的小时
                                wt.hours = wt.interval > 0 ? (wt.interval > 60 ? wt.interval / 60 : 1) : 0;
                            }
                        }
                        else
                        {
                            // 第一条数据小计为0
                            wt.interval = 0;
                        }
                        list.Add(wt);

                        // 更新本日最后的运转时间
                        var wk = work.FirstOrDefault(f => f.x == today);
                        if (null != wk)
                        {
                            //if (wk.min == 0) { wk.min = run; }
                            wk.min = wt.worktime;
                        }
                    }// end of foreach

                    // 工作时间总计
                    var totalWorkMins = list.Sum(s => s.interval);
                    // 补偿的分钟
                    var totalAddMins = list.Sum(s => s.added);
                    // 所用的小时数
                    var totalUsedHours = list.Sum(s => s.hours);
                    // 工作效率
                    var compensate = totalWorkMins / 60.0 / totalUsedHours;
                    // 最终增加的小时数
                    var finalAdded = totalAddMins / 60.0 * compensate;

                    // 计算每日运转时间
                    foreach (var f in work)
                    {
                        f.y   = Math.Round(list.Where(w => w.date.Contains(f.date)).Sum(s => s.interval) / 60.0, 2);
                        f.add = finalAdded;
                    }
                    // 有工作时间的天数里平均加入补偿的小时数
                    var per = finalAdded / work.Count(c => c.y > 0);
                    //per = Math.Round(per, 2);
                    // 加入补偿
                    foreach (var w in work)
                    {
                        //if (!averagable)
                        {
                            w.y += w.y > 0 ? per : 0;
                            // 如果超过24小时则直接设为24小时  2016/08/15 15:16
                            if (w.y >= 24)
                            {
                                w.y = 24;
                            }
                        }
                        if (averagable)
                        {
                            w.y = Math.Round(w.y, 2);
                        }
                    }

                    // 计算平均值
                    var avgg = Math.Round(work.Sum(s => s.y) * 1.0 / work.Count, 2);
                    foreach (var a in avg)
                    {
                        a.y = avgg;
                    }
                }
                if (averagable)
                {
                    ret = string.Format("{0}\"Average\":{1},\"Worktime\":{2}{3}", "{", JsonConverter.ToJson(avg), JsonConverter.ToJson(work), "}");
                }
                else
                {
                    ret = JsonConverter.ToJson(work);
                }
            }
            return(ret);
        }
Esempio n. 18
0
        public ActionResult Index([Bind(Include = "wrkID,volID,wrkDate,wrkStartTime,wrkEndTime")] string email)
        {
            ViewBag.FullName = getUserName();

            string text = "";

            DirectoryInfo d = new DirectoryInfo(Server.MapPath("~/Content/docs/HomePageMessages"));

            foreach (var file in d.GetFiles("*.txt"))
            {
                text += System.IO.File.ReadAllText(file.FullName);
            }

            ViewBag.message = text.Replace(Environment.NewLine, "<br />");

            ViewBag.confirm = email + " is now... ";

            ViewBag.clock = "";

            var wlog       = db.Worklog.Include(v => v.Volunteer);
            var volunteers = db.Volunteers;

            //get id from email
            var thisVolID = (from i in volunteers where i.volEmail == email select i.volID).SingleOrDefault();

            //will set Worktime object if Endtime null. i.e., user clocked-in.
            Worktime time        = (from w in wlog where w.volID == thisVolID && w.wrkEndTime == null select w).SingleOrDefault();
            TimeSpan closingTime = new TimeSpan(17, 00, 00);

            //if wrkEndTime null, user is still clocked in. Update wrkEndTime with timestamp.
            //Then, user has no worktime record with empty end time. At next entry query will return null and move to else.

            if (time != null) //user still clocked in
            {
                time.wrkEndTime = DateTime.Now;

                if (time.wrkEndTime.Value.Date != time.wrkStartTime.Date) //if clocked out the day after clocked in
                {
                    time.wrkEndTime   = new DateTime(time.wrkStartTime.Year, time.wrkStartTime.Month, time.wrkStartTime.Day, 17, 0, 0);
                    ViewBag.SignInMsg = "You were still signed-in. \n\n Last sign-in occured: " + time.wrkStartTime + "\n\n You are now signed-out for that day (5:00 PM). \n Please enter your e-mail again if you want to sign-in for today";

                    using (System.IO.StreamWriter file = new System.IO.StreamWriter(Server.MapPath("~/Content/docs/WorklogDataMessages/") + ("WorklogDataFlags.txt"), true))
                    {
                        var flag = time.wrkID + ",2;";
                        file.Write(flag);
                    }                                                    //send notification to admin
                }
                else if (time.wrkEndTime.Value.TimeOfDay >= closingTime) //clocked out same day as clock in, but after 5 PM
                {
                    time.wrkEndTime   = new DateTime(time.wrkStartTime.Year, time.wrkStartTime.Month, time.wrkStartTime.Day, 17, 0, 1);
                    ViewBag.SignInMsg = "You were still signed-in. \n\n Last sign-in occured: " + time.wrkStartTime + "\n\n You are now signed-out for that day (5:00 PM). \n Please enter your e-mail again if you want to sign-in for today";

                    using (System.IO.StreamWriter file = new System.IO.StreamWriter(Server.MapPath("~/Content/docs/WorklogDataMessages/") + ("WorklogDataFlags.txt"), true))
                    {
                        var flag = time.wrkID + ",1;";
                        file.Write(flag);
                    }                    //send notification to admin
                }

                ViewBag.clock = "Clocked Out!";
                db.SaveChanges();
            }
            else //user has no record containing null wrkEndTime, user currently clocked out
            {
                try
                {
                    if (ModelState.IsValid)
                    {
                        if (DateTime.Now.TimeOfDay >= closingTime) // if user tries to clock in after 5pm today
                        {
                            ViewBag.confirm = "";
                            ViewBag.clock   = "You cannot sign in after 5 PM. Please see your administrator for more information.";
                        }
                        else //normal working hours
                        {
                            Worktime newTime = new Worktime();

                            newTime.volID        = thisVolID;
                            newTime.wrkDate      = DateTime.Now;
                            newTime.wrkStartTime = DateTime.Now;
                            newTime.wrkEndTime   = null;
                            db.Worklog.Add(newTime);
                            db.SaveChanges();
                            ViewBag.clock = "Clocked In!";
                        }
                    }
                }
                catch (DataException)
                {
                    ViewBag.clock   = "";
                    ViewBag.confirm = "";
                    ModelState.AddModelError("", "We cannot find your account. Try again. If the problem persists, contact your system administrator.");
                }
            }

            var sorts = from s in wlog
                        select s;

            sorts = sorts.OrderByDescending(s => s.wrkDate);
            sorts = sorts.Take(15);
            return(View(sorts.ToList()));
        }