Beispiel #1
0
        public ActionResult GetTimesheetDetail(DateTime singleWorkTime)
        {
            var projectList = GetProjectList();

            List <TimeSheetItem> timeSheetItems = GetTimeSheetDetail(singleWorkTime);

            var viewModel = new TimeSheetViewModel()
            {
                Projects       = projectList.ToArray(),
                TimeSheetItems = timeSheetItems.ToArray()
            };

            return(this.PartialView("_TimeSheetDetails", viewModel));
        }
        // GET: TimeSheetViewModels/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TimeSheetViewModel timeSheetViewModel = db.TimeSheetViewModel.Find(id);

            if (timeSheetViewModel == null)
            {
                return(HttpNotFound());
            }
            return(View(timeSheetViewModel));
        }
        public IHttpActionResult DeleteTimeSheet(int id)
        {
            TimeSheetViewModel timesheet = db.TimeSheets.Find(id);

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

            db.TimeSheets.Remove(timesheet);
            db.SaveChanges();

            return(Ok(timesheet));
        }
 public ActionResult Details(TimeSheet timeSheet)
 {
     if (!ModelState.IsValid)
     {
         var ViewModel = new TimeSheetViewModel
         {
             TimeSheet = new TimeSheet(),
             Status    = GetStatus()
         };
         return(View("Details", ViewModel));
     }
     dbContext.timeSheets.Add(timeSheet);
     dbContext.SaveChanges();
     return(RedirectToAction("GridView", "TimeSheets"));
 }
Beispiel #5
0
        public IActionResult Create(TimeSheetViewModel timeSheetViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(timeSheetViewModel));
            }
            _timeSheetAppService.Create(timeSheetViewModel);

            if (IsValidOperation())
            {
                ViewBag.Sucesso = "TimeSheet Created!";
            }

            return(View(timeSheetViewModel));
        }
Beispiel #6
0
        public IActionResult Save(TimeSheetViewModel formData)
        {
            IActionResult response;
            var           result = _timeSheet.Save(formData, _token.Email);

            if (result.IsError)
            {
                response = Conflict(result);
            }
            else
            {
                response = Ok(result);
            }
            return(response);
        }
        public ActionResult Create()
        {
            Time tes = new Time()
            {
                AsDate  = DateTime.Today.Date,
                ComDate = DateTime.Today.Date
            };
            TimeSheetViewModel viewModel = new TimeSheetViewModel
            {
                Time   = tes,
                Status = GetStatus()
            };

            return(View("Create", viewModel));
        }
 public ActionResult Create(Time time)
 {
     if (!ModelState.IsValid)
     {
         var viewmodel = new TimeSheetViewModel
         {
             Time   = new Time(),
             Status = GetStatus()
         };
         return(View("Create", viewmodel));
     }
     dbContext.times.Add(time);
     dbContext.SaveChanges();
     return(RedirectToAction("Get", "Times"));
 }
Beispiel #9
0
        public ActionResult TimeSheet()
        {
            TimeSheetViewModel model     = new TimeSheetViewModel();
            ListItemViewModel  listitems = new ListItemViewModel();

            model.Projectlist           = new SelectList(TimeSheetAPIHelperService.CostModelProject().Result, "ID", "Value");
            model.OpportunityNumberList = new SelectList(TimeSheetAPIHelperService.CostModelProject().Result, "ID", "OpportunityNumber");
            var listitem = TimeSheetAPIHelperService.CostModelProject().Result.Select(x => new ListItemViewModel()
            {
                Id = x.Id, Value = x.Value
            });
            int opportunityId = listitem.FirstOrDefault().Id;

            model.ActivityList = new SelectList(TimeSheetAPIHelperService.ProjectActivities(opportunityId).Result, "ID", "Value");
            return(View(model));
        }
Beispiel #10
0
 public ActionResult Index()
 {
     if (Session["Username"] == null)
     {
         return(RedirectToAction("Login", "Login"));
     }
     else
     {
         TimeSheetViewModel model = new TimeSheetViewModel();
         model.Projectlist = new SelectList(TimeSheetAPIHelperService.CostModelProject().Result, "ID", "Value");
         //   model.OpportunityNumberList = new SelectList(TimeSheetAPIHelperService.CostModelProject().Result, "ID", "OpportunityNumber");
         model.WarehouseNameList      = new SelectList(ListItemService.Warehouses().Result, "ID", "Value");
         model.CandidateNameList      = new SelectList(ListItemService.Resources().Result, "ID", "Value");
         model.CandidateTimeSheetList = TimeSheetAPIHelperService.TimeSheetList().Result;
         return(View(model));
     }
 }
Beispiel #11
0
        // GET: TimeSheetSettings
        public ActionResult Index()
        {
            TimeSheetViewModel model = new TimeSheetViewModel();
            var projectList          = _projectSettindsMethod.getAllList().Where(x => x.Archived == false);
            var frequencyList        = _otherSettingMethod.getAllSystemValueListByKeyName("Time Sheet Tasks").Where(x => x.Archived == false);
            var detailList           = _otherSettingMethod.getAllSystemValueListByKeyName("Time Sheet Details").Where(x => x.Archived == false);

            model.ProjectList.Add(new SelectListItem()
            {
                Text = "-- Select Project --", Value = "0"
            });
            foreach (var item in projectList)
            {
                model.ProjectList.Add(new SelectListItem()
                {
                    Text = item.Name, Value = item.Id.ToString()
                });
            }

            model.FrequencyList.Add(new SelectListItem()
            {
                Text = "-- Select Frequency --", Value = "0"
            });
            foreach (var item in frequencyList)
            {
                model.FrequencyList.Add(new SelectListItem()
                {
                    Text = item.Value, Value = item.Id.ToString()
                });
            }

            model.DetailList.Add(new SelectListItem()
            {
                Text = "-- Select Detail --", Value = "0"
            });
            foreach (var item in detailList)
            {
                model.DetailList.Add(new SelectListItem()
                {
                    Text = item.Value, Value = item.Id.ToString()
                });
            }

            return(View(model));
        }
Beispiel #12
0
        public ActionResult <TimeSheetViewModel> Delete(Guid id)
        {
            var result    = timeSheetService.Delete(id);
            var timesheet = new TimeSheetViewModel();

            timesheet.Messages = new List <string>();
            if (result)
            {
                timesheet.Messages.Add("Registro excluído com sucesso!");
            }
            else
            {
                timesheet.Messages.Add("Não foi possível excluir o registro");
                return(BadRequest(timesheet));
            }

            return(Ok(timesheet));
        }
Beispiel #13
0
        public static void Init()
        {
            jQuery.OnDocumentReady(delegate()
            {
                ValidationApi.RegisterExtenders();

                // Init settings
                OrganizationServiceProxy.GetUserSettings();

                TimeSheetViewModel vm = new TimeSheetViewModel();


                SetUpGrids(vm);
                SetUpDatePicker(vm);

                ViewBase.RegisterViewModel(vm);
            });
        }
 // GET: TimeSheets
 public ActionResult Index()
 {
     var vm = new TimeSheetViewModel()
     {
         Date = DateTime.Now,
         TimeSheetRows = new List<TimeSheetRowViewModel>()
         {
             new TimeSheetRowViewModel()
             {
                 Worker = new WorkerViewModel()
                 {
                     FirstName = "Filip",
                     LastName = "Skurniak",
                 },
                 IsPresent = true,
                 IsLate = false,
                 NumberOfHours = 8,
             },
             new TimeSheetRowViewModel()
             {
                 Worker = new WorkerViewModel()
                 {
                     FirstName = "Filip2",
                     LastName = "Skurniak2",
                 },
                 IsPresent = false,
                 IsLate = false,
                 NumberOfHours = 8,
             },
             new TimeSheetRowViewModel()
             {
                 Worker = new WorkerViewModel()
                 {
                     FirstName = "Filip2",
                     LastName = "Skurniak3",
                 },
                 IsPresent = true,
                 IsLate = true,
                 NumberOfHours = 4,
             }
         }
     };
     return View(vm);
 }
Beispiel #15
0
        public ActionResult Register()
        {
            TimeSheetViewModel model = new TimeSheetViewModel();

            model.Projectlist           = new SelectList(TimeSheetAPIHelperService.CostModelProject().Result, "ID", "Value");
            model.OpportunityNumberList = new SelectList(TimeSheetAPIHelperService.CostModelProject().Result, "ID", "OpportunityNumber");
            var listitem = TimeSheetAPIHelperService.CostModelProject().Result.Select(x => new ListItemViewModel()
            {
                Id    = x.Id,
                Value = x.Value
            });
            int opportunityId = listitem.FirstOrDefault().Id;

            model.ActivityList           = new SelectList(TimeSheetAPIHelperService.ProjectActivities(opportunityId).Result, "ID", "Value");
            model.WarehouseNameList      = new SelectList(ListItemService.Warehouses().Result, "ID", "Value");
            model.CandidateNameList      = new SelectList(ListItemService.Resources().Result, "ID", "Value");
            model.CandidateTimeSheetList = TimeSheetAPIHelperService.TimeSheetList().Result;
            return(PartialView("Register", model));
        }
Beispiel #16
0
        public ActionResult Details(int id)
        {
            var timeSheet = _timeSheetRepository.Get(id, "ApprovedByEmployee.User.Person");

            if (timeSheet == null)
            {
                return(HttpNotFound());
            }

            var loginEmployee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id);
            var myReportees   = _employeeRepository.GetAllBy(u => u.ReportingPersonId == loginEmployee.Id && u.EmployeeStatus != EmployeeStatus.Ex).Select(u => u.UserId).ToList();
            var userList      = _userRepository.GetAllBy(u => myReportees.Contains(u.Id), "Person").Select(u => u.Id).ToList();

            if (timeSheet.CreatedByUserId == WebUser.Id || userList.Contains(timeSheet.CreatedByUserId) || WebUser.IsAdmin || PermissionChecker.CheckPermission(WebUser.Permissions, 210))
            {
                var timeSheetRows = _timeSheetLineItemRepository.GetAllBy(l => l.TimeSheetId == timeSheet.Id, "Project");
                var activities    = _timeSheetActivityRepository.GetAllBy(l => l.TimeSheetId == timeSheet.Id, o => o.OrderByDescending(t => t.CreatedOn));

                var viewModel = new TimeSheetViewModel(timeSheet, WebUser)
                {
                    LineItems           = timeSheetRows.ToList(),
                    TimeSheetActivities = activities.ToList()
                };

                // Is the Person a Manager, then only show the Approval Screen.

                var timeSheetUser     = _userRepository.Get(timeSheet.CreatedByUserId, "ReportingPerson");
                var timesheetEmployee = _employeeRepository.GetBy(u => u.UserId == timeSheetUser.Id);
                var employee          = _employeeRepository.GetBy(r => r.UserId == WebUser.Id);
                viewModel.IsApprover = timeSheetUser != null && timesheetEmployee.ReportingPersonId == employee.Id;

                return(View(viewModel));
            }
            else
            {
                return(new RedirectToRouteResult(new RouteValueDictionary
                {
                    { "controller", "Error" },
                    { "action", "NotAuthorized" },
                    { "area", "" }
                }));
            }
        }
Beispiel #17
0
        public ActionResult Details(int id)
        {
            var timeSheet     = _timeSheetRepository.Get(id, "ApprovedByEmployee.User.Person,CreatedByUser.Person");
            var timeSheetRows = _timeSheetLineItemRepository.GetAllBy(l => l.TimeSheetId == timeSheet.Id, "Project");

            var viewModel = new TimeSheetViewModel(timeSheet, WebUser)
            {
                LineItems = timeSheetRows.ToList()
            };

            // Is the Person a Manager, then only show the Approval Screen.

            var timeSheetUser     = _userRepository.Get(timeSheet.CreatedByUserId, "ReportingPerson");
            var timesheetEmployee = _employeeRepository.GetBy(u => u.UserId == timeSheetUser.Id);
            var employee          = _employeeRepository.GetBy(r => r.UserId == WebUser.Id);

            viewModel.IsApprover = timeSheetUser != null && timesheetEmployee.ReportingPersonId == employee.Id;
            return(View(viewModel));
        }
Beispiel #18
0
        public TimeSheetRegisterModel MapTimesheetRegisterModel(TimeSheetViewModel timesheetviewmodel)
        {
            var MapRegisterData = new TimeSheetRegisterModel()
            {
                ProjectID           = timesheetviewmodel.TimeSheetRegisterModel.ProjectID,
                WarehouseNameId     = timesheetviewmodel.TimeSheetRegisterModel.WarehouseNameId,
                OpportunityNumberID = timesheetviewmodel.TimeSheetRegisterModel.OpportunityNumberID,
                CandidateNameId     = timesheetviewmodel.TimeSheetRegisterModel.CandidateNameId,
                ServiceActivityId   = timesheetviewmodel.ServiceActivityID,
                OLATarget           = timesheetviewmodel.TimeSheetRegisterModel.OLATarget,
                ActualQuantity      = timesheetviewmodel.TimeSheetRegisterModel.ActualQuantity,
                Colour            = timesheetviewmodel.TimeSheetRegisterModel.Colour,
                StartTime         = timesheetviewmodel.TimeSheetRegisterModel.StartTime,
                EndTime           = timesheetviewmodel.TimeSheetRegisterModel.EndTime,
                Day               = timesheetviewmodel.TimeSheetRegisterModel.Day,
                TimeSheetComments = timesheetviewmodel.TimeSheetRegisterModel.TimeSheetComments,
            };

            return(MapRegisterData);
        }
        public static async Task <TimeSheetViewModel> TimeSheetSearchById(int id)
        {
            var CostModelLists = new TimeSheetViewModel();

            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(TimeSheetAPIURl);
                HttpResponseMessage response = client.GetAsync(string.Format("Timesheet/{0}/TimeSheetSearchById", id)).Result;
                if (response.IsSuccessStatusCode)
                {
                    var projectactivities = await response.Content.ReadAsAsync <TimeSheetViewModel>();

                    CostModelLists = projectactivities;
                    //foreach (var a in projectactivities)
                    //{
                    //    CostModelLists.Add(a);
                    //}
                }
            }
            return(CostModelLists);
        }
Beispiel #20
0
        public IActionResult CurrentTimeSheet()
        {
            var user       = _userManager.FindByNameAsync(User.Identity.Name).Result;
            var timesheet  = _context.TimeSheets.Last(x => x.UserId == user.Id);
            var timeWorked = TimeSheetTimeSpent(timesheet);
            var amountMade = TimeSheetAmountMade(timesheet, timeWorked);


            var model = new TimeSheetViewModel
            {
                StartDate    = timesheet.StartDate,
                EndDate      = timesheet.EndDate,
                Exempt       = timesheet.ExemptFromOvertime,
                Approved     = timesheet.Approved,
                TotalEarning = amountMade,
                TotalHours   = timeWorked,
                DenialReason = timesheet.ReasonDenied ?? "Not Denied Yet"
            };

            return(View("DetailTimeSheet", model));
        }
        private void GenerateMonthlyTimeSheet(TimeSheetViewModel tsvm, List <DateTime> datelists)
        {
            datelists.Add(tsvm.StartDate);
            GetLastDayOfMonth(tsvm);

            if (tsvm.StartDate <= tsvm.EndDate)
            {
                datelists.Add(tsvm.StartDate); //last day of first month
            }

            while (tsvm.StartDate < tsvm.EndDate)
            {
                while (tsvm.StartDate.Day != 1 && tsvm.StartDate.AddDays(1) <= tsvm.EndDate)
                {
                    tsvm.StartDate = tsvm.StartDate.AddDays(1);
                    datelists.Add(tsvm.StartDate);
                }
                GetLastDayOfMonth(tsvm);
                CheckDateInInterval(tsvm, datelists);
            }
        }
        public JsonResult Save(TimeSheetViewModel obj)
        {
            bool   success = false;
            string message = "";

            if (ModelState.IsValid)
            {
                success = true;
                //db.Entry(obj.TimeSheetList).State = EntityState.Modified;

                foreach (var timesheet in obj.TimeSheetList)
                {
                    TimeSheet t = db.TimeSheets.Find(timesheet.TimeSheetId);
                    t.In              = timesheet.In;
                    t.Out             = timesheet.Out;
                    db.Entry(t).State = EntityState.Modified;
                }
                db.SaveChanges();
            }

            return(Json(new { success = success, message = message }));
        }
        public async void TimeSheet_Delete_Success()
        {
            string messageDelete = "Registro excluído com sucesso!";
            var    timeSheet     = new TimeSheet()
            {
                BeginDate   = DateTime.Now.AddDays(-7),
                EndDate     = DateTime.Now,
                ProjectId   = Guid.Parse("beaf506e-991f-4515-9c3d-2ace55ef1b25"),
                DeveloperId = Guid.Parse("94b6955e-71d1-4409-bcb2-8f8b14c6ef09")
            };

            await Autenticate();

            // Act
            var response = await client.PostAsync(
                BasePath + "add",
                new StringContent(JsonConvert.SerializeObject(timeSheet), Encoding.UTF8)
            {
                Headers = { ContentType = new MediaTypeHeaderValue("application/json") }
            });

            TimeSheet timeSheetResponse = await response.Content.ReadAsAsync <TimeSheet>();

            // Assert1
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            var responseDelete = await client.DeleteAsync(BasePath + "delete/?id=" + timeSheet.TimeSheetId);

            TimeSheetViewModel timeSheetDeleteResponse = await responseDelete.Content.ReadAsAsync <TimeSheetViewModel>();

            Assert.Equal(HttpStatusCode.OK, responseDelete.StatusCode);
            Assert.Equal(messageDelete, timeSheetDeleteResponse.Messages.FirstOrDefault());


            Assert.Equal(timeSheet.TimeSheetId, timeSheetResponse.TimeSheetId);
            // Assert2
            Assert.Equal("application/json; charset=utf-8",
                         response.Content.Headers.ContentType.ToString());
        }
Beispiel #24
0
        public ActionResult PostResourceData(TimeSheetViewModel theModel)
        {
            for (int i = 0; i < theModel.ResourceIDs.Count; i++)
            {
                TimeSheetRegisterModel regModel = new TimeSheetRegisterModel();
                regModel.CandidateNameId = theModel.ResourceIDs[i];
                regModel.Colour          = theModel.Colour;
                regModel.Day             = theModel.Day;
                regModel.EndTime         = theModel.EndTime;
                regModel.Id                  = theModel.Id;
                regModel.OLATarget           = theModel.OLATarget;
                regModel.OpportunityNumberID = theModel.OpportunityID;
                regModel.ProjectID           = theModel.ProjectID;
                regModel.ServiceActivityId   = theModel.ServiceActivityID;
                regModel.StartTime           = theModel.StartTime;
                regModel.StatusID            = theModel.StatusID;
                regModel.WarehouseNameId     = theModel.WarehouseID;

                var test = RegisterTimesheetService.RegisterTimesheetModel(regModel);
            }
            return(RedirectToAction("Index", "ManageCalender"));
        }
Beispiel #25
0
        public IHttpActionResult PostTimeSheet(TimeLogBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // Build timesheet entity with the binding model
            var timeSheet = new TimeSheetViewModel()
            {
                ProjectID       = model.ProjectID,
                TaskID          = model.TaskID,
                UserName        = User.Identity.Name,
                ActualEffort    = model.ActualEffort,
                ActualStartDate = model.ActualStartDate,
                ActualEndDate   = model.ActualEndDate
            };

            db.TimeSheets.Add(timeSheet);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = timeSheet.TimeSheetID }, timeSheet));
        }
Beispiel #26
0
        private static void SetUpDatePicker(TimeSheetViewModel vm)
        {
            jQueryObject      element = jQuery.Select("#datepicker");
            DatePickerOptions options = new DatePickerOptions();

            options.NumberOfMonths = 3;
            options.CalculateWeek  = true;

            string dateFormat = "dd/MM/yy";

            if (OrganizationServiceProxy.UserSettings != null)
            {
                dateFormat = OrganizationServiceProxy.UserSettings.DateFormatString;
            }
            options.DateFormat = dateFormat.Replace("MM", "mm").Replace("yyyy", "yy").Replace("M", "m");

            DatePickerOptions2 options2 = new DatePickerOptions2();

            options2.NumberOfMonths = 3;
            options2.DateFormat     = dateFormat.Replace("MM", "mm").Replace("yyyy", "yy").Replace("M", "m");


            // Wire up onSelect event
            options2.OnSelect = delegate(string dateText, object instance)
            {
                // Commit any of the current edits
                EditController controller   = sessionsGrid.GetEditController();
                bool           editCommited = controller.commitCurrentEdit();
                if (editCommited)
                {
                    DateTime date = (DateTime)element.Plugin <DatePickerObject>().DatePicker(DatePickerMethod.GetDate);
                    vm.SessionDataView.SetCurrentWeek(date);
                }
            };

            element.Plugin <DatePickerPlugIn>().DatePicker(options2);
        }
        public static void Init()
        {
            PageEx.MajorVersion = 2013;

            jQuery.OnDocumentReady(delegate()
            {
                ValidationApi.RegisterExtenders();

                // Init settings
                OrganizationServiceProxy.GetUserSettings();

                TimeSheetViewModel vm = new TimeSheetViewModel();


                SetUpGrids(vm);
                SetUpDatePicker(vm);

                // All Resize Grid

                jQuery.Select("#timesheetGridContainer").Plugin <ResizableObject>().Resizable();

                ViewBase.RegisterViewModel(vm);
            });
        }
Beispiel #28
0
 public ActionResult Index()
 {
     if (Session["Username"] == null)
     {
         return(RedirectToAction("Login", "Login"));
     }
     else
     {
         TimeSheetViewModel model = new TimeSheetViewModel();
         model.Projectlist           = new SelectList(TimeSheetAPIHelperService.CostModelProject().Result, "ID", "Value");
         model.OpportunityNumberList = new SelectList(TimeSheetAPIHelperService.CostModelProject().Result, "ID", "OpportunityNumber");
         var listitem = TimeSheetAPIHelperService.CostModelProject().Result.Select(x => new ListItemViewModel()
         {
             Id    = x.Id,
             Value = x.Value
         });
         int opportunityId = listitem.FirstOrDefault().Id;
         model.ActivityList           = new SelectList(TimeSheetAPIHelperService.ProjectActivities(opportunityId).Result, "ID", "Value");
         model.WarehouseNameList      = new SelectList(ListItemService.Warehouses().Result, "ID", "Value");
         model.CandidateNameList      = new SelectList(ListItemService.Resources().Result, "ID", "Value");
         model.CandidateTimeSheetList = TimeSheetAPIHelperService.TimeSheetList().Result;
         return(View(model));
     }
 }
Beispiel #29
0
 public MainPage()
 {
     this.InitializeComponent();
     TimeSheetViewModel = new TimeSheetViewModel();
 }
        public static void SetUpGrids(TimeSheetViewModel vm)
        {
            // Create Timesheet Grid
            DataViewBase daysDataView = vm.Days;

            List <Column> columns = new List <Column>();

            GridDataViewBinder.BindRowIcon(GridDataViewBinder.AddColumn(columns, "", 50, "icon"), "activity");
            XrmLookupEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Account", 300, "account"), vm.AccountSeachCommand, "accountid", "name", null);
            XrmLookupEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Regarding", 300, "regardingObjectId"), vm.RegardingObjectSearchCommand, "id", "displayName", null);
            XrmLookupEditor.BindColumn(GridDataViewBinder.AddColumn(columns, "Activity", 300, "activity"), vm.ActivitySearchCommand, "activityid", "subject", "activitytypecode");

            string[] daysOfWeek     = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
            int      firstDayOfWeek = OrganizationServiceProxy.OrganizationSettings.WeekStartDayCode.Value.Value;

            GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek], 50, "day0");
            GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 1], 50, "day1");
            GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 2], 50, "day2");
            GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 3], 50, "day3");
            GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 4], 50, "day4");
            GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 5], 50, "day5");
            GridDataViewBinder.AddColumn(columns, daysOfWeek[firstDayOfWeek + 6], 50, "day6");

            GridDataViewBinder daysDataBinder = new GridDataViewBinder();

            daysDataBinder.SelectActiveRow         = true;
            daysDataBinder.AddCheckBoxSelectColumn = false;
            daysGrid = daysDataBinder.DataBindXrmGrid(daysDataView, columns, "timesheetGridContainer", null, true, true);

            // Set the totals row meta data
            daysDataView.OnGetItemMetaData += delegate(object item)
            {
                ItemMetaData metaData = new ItemMetaData();
                DayEntry     day      = (DayEntry)item;
                if (day != null && day.isTotalRow)
                {
                    metaData.Editor               = delegate(EditorArguments args) { return(null); };
                    metaData.Columns              = new Dictionary <object, Column>();
                    metaData.Columns["Account"]   = new Column("editor", null);
                    metaData.Columns["Regarding"] = new Column("editor", null);
                    metaData.Columns["Activity"]  = new Column("editor", null);
                    metaData.Formatter            = delegate(int row, int cell, object value, Column columnDef, object dataContext)
                    {
                        switch (columnDef.Field)
                        {
                        case "account":
                        case "regardingObjectId":
                            return("");

                        case "activity":
                            return("Total");

                        default:
                            return(XrmDurationEditor.Formatter(row, cell, value, columnDef, dataContext));
                        }
                    };

                    metaData.CssClasses = "days_total_row";
                }

                else
                {
                    metaData.Formatter = delegate(int row, int cell, object value, Column columnDef, object dataContext)
                    {
                        switch (columnDef.Field)
                        {
                        case "account":
                        case "regardingObjectId":
                        case "activity":
                            return(XrmLookupEditor.Formatter(row, cell, value, columnDef, dataContext));

                        default:
                            return(XrmDurationEditor.Formatter(row, cell, value, columnDef, dataContext));
                        }
                    };
                }

                return(metaData);
            };

            daysDataBinder.DataBindSelectionModel(daysGrid, daysDataView);


            // ---------------------------------------
            // Sessions Grid
            // ---------------------------------------
            DataViewBase sessionsDataView = vm.SessionDataView;

            List <Column> sessionGridCols = new List <Column>();

            GridDataViewBinder.AddEditIndicatorColumn(sessionGridCols);

            XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Activity", 300, "activitypointer_subject")).Editor = null;



            XrmDateEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Date", 100, "dev1_starttime"), true);

            XrmTimeEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Start", 100, "dev1_starttime")).Validator =
                delegate(object value, object item)
            {
                dev1_session     session      = (dev1_session)item;
                DateTime         newStartTime = (DateTime)value;
                ValidationResult result       = new ValidationResult();

                if (session.dev1_EndTime != null)
                {
                    result.Valid = true;
                    string valueText = (string)value;
                    // Check if the end time is before the start time

                    bool isValid = DateTimeEx.GetTimeDuration(newStartTime) < DateTimeEx.GetTimeDuration(session.dev1_EndTime);

                    result.Valid   = isValid;
                    result.Message = "The start time must be before the end time";
                }
                else
                {
                    result.Valid = true;
                }
                return(result);
            };

            XrmTimeEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "End", 100, "dev1_endtime")).Validator =
                delegate(object value, object item)
            {
                dev1_session session    = (dev1_session)item;
                DateTime     newEndTime = (DateTime)value;

                ValidationResult result = new ValidationResult();

                if (session.dev1_StartTime != null)
                {
                    result.Valid = true;
                    string valueText = (string)value;
                    // Check if the end time is before the start time

                    bool isValid = DateTimeEx.GetTimeDuration(session.dev1_StartTime) < DateTimeEx.GetTimeDuration(newEndTime);

                    result.Valid   = isValid;
                    result.Message = "The end time must be after the start time";
                }
                else
                {
                    result.Valid = true;
                }

                return(result);
            };


            XrmDurationEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Duration", 70, "dev1_duration"));
            XrmTextEditor.BindColumn(GridDataViewBinder.AddColumn(sessionGridCols, "Description", 300, "dev1_description"));


            GridDataViewBinder sessionsDataBinder = new GridDataViewBinder();

            sessionsDataBinder.SelectActiveRow         = false;
            sessionsDataBinder.AddCheckBoxSelectColumn = true;

            sessionsGrid = sessionsDataBinder.DataBindXrmGrid(sessionsDataView, sessionGridCols, "sessionsGridContainer", null, true, true);

            sessionsGrid.OnBeforeEditCell.Subscribe(delegate(EventData e, object args)
            {
                // Stop the row from being edited if locked
                Entity item = (Entity)((EditEventData)args).item;
                bool result = sessionsDataView.OnBeforeEdit(item);
                Script.Literal("return {0}", result);
            });

            daysGrid.OnActiveCellChanged.Subscribe(delegate(EventData e, object args)
            {
                CellSelection activeCell = daysGrid.GetActiveCell();
                if (activeCell != null)
                {
                    if (activeCell.Cell < StartDaysColumnIndex)
                    {
                        // Whole activity is selected
                        vm.Days.SelectedDay = null;
                    }
                    else
                    {
                        vm.Days.SelectedDay = activeCell.Cell - (StartDaysColumnIndex - 1);
                    }
                }
            });
        }
        private void GetLastDayOfMonth(TimeSheetViewModel tsvm)
        {
            int dayinthemonth = DateTime.DaysInMonth(tsvm.StartDate.Year, tsvm.StartDate.Month);

            tsvm.StartDate = new DateTime(tsvm.StartDate.Year, tsvm.StartDate.Month, dayinthemonth);
        }