public ActionResult FastTime(ViewModels.Timing.TimeViewModel viewModel)
        {
            Common.Models.Account.Users currentUser;
            Common.Models.Timing.Time   model;

            currentUser = Data.Account.Users.Get(User.Identity.Name);

            model = Mapper.Map <Common.Models.Timing.Time>(viewModel);

            model = Data.Timing.Time.Create(model, currentUser);

            return(RedirectToAction("Details", new { Id = model.Id }));
        }
        public ActionResult Details(long id)
        {
            ViewModels.Tasks.TaskViewModel viewModel;
            Common.Models.Tasks.Task       model;
            Common.Models.Matters.Matter   matter;

            using (IDbConnection conn = Data.Database.Instance.GetConnection())
            {
                model = Data.Tasks.Task.Get(id, conn, false);

                viewModel = Mapper.Map <ViewModels.Tasks.TaskViewModel>(model);

                viewModel.Notes = new List <ViewModels.Notes.NoteViewModel>();
                Data.Notes.NoteTask.ListForTask(id, conn, false).ForEach(x =>
                {
                    viewModel.Notes.Add(Mapper.Map <ViewModels.Notes.NoteViewModel>(x));
                });

                viewModel.Times = new List <ViewModels.Timing.TimeViewModel>();
                Data.Timing.Time.ListForTask(id, conn, false).ForEach(x =>
                {
                    x.Worker = Data.Contacts.Contact.Get(x.Worker.Id.Value, conn, false);
                    ViewModels.Timing.TimeViewModel vm = Mapper.Map <ViewModels.Timing.TimeViewModel>(x);
                    vm.Worker = Mapper.Map <ViewModels.Contacts.ContactViewModel>(x.Worker);
                    viewModel.Times.Add(vm);
                });

                PopulateCoreDetails(viewModel, conn);

                if (model.Parent != null && model.Parent.Id.HasValue)
                {
                    model.Parent     = Data.Tasks.Task.Get(model.Parent.Id.Value, conn, false);
                    viewModel.Parent = Mapper.Map <ViewModels.Tasks.TaskViewModel>(model.Parent);
                }

                if (model.SequentialPredecessor != null && model.SequentialPredecessor.Id.HasValue)
                {
                    model.SequentialPredecessor     = Data.Tasks.Task.Get(model.SequentialPredecessor.Id.Value, conn, false);
                    viewModel.SequentialPredecessor = Mapper.Map <ViewModels.Tasks.TaskViewModel>(model.SequentialPredecessor);
                }

                matter = Data.Tasks.Task.GetRelatedMatter(model.Id.Value, conn, false);
            }

            ViewBag.Matter = matter;

            return(View(viewModel));
        }
        public ActionResult Edit(Guid id, ViewModels.Timing.TimeViewModel viewModel)
        {
            Common.Models.Account.Users currentUser;
            Common.Models.Timing.Time   model;

            currentUser = Data.Account.Users.Get(User.Identity.Name);

            model = Mapper.Map <Common.Models.Timing.Time>(viewModel);

            if (model.Stop.HasValue)
            {
                List <Common.Models.Timing.Time> conflicts =
                    Data.Timing.Time.ListConflictingTimes(model.Start, model.Stop.Value, model.Worker.Id.Value);

                if (conflicts.Count > 1 ||
                    (conflicts.Count == 1 && conflicts[0].Id != id))
                { // conflict found
                    Common.Models.Contacts.Contact contact;
                    Common.Models.Tasks.Task       task;
                    Common.Models.Matters.Matter   matter;

                    contact          = Data.Contacts.Contact.Get(viewModel.Worker.Id.Value);
                    viewModel.Worker = Mapper.Map <ViewModels.Contacts.ContactViewModel>(contact);

                    task = Data.Timing.Time.GetRelatedTask(model.Id.Value);

                    ModelState.AddModelError(String.Empty, "Time conflicts with other time entries.");

                    matter               = Data.Tasks.Task.GetRelatedMatter(task.Id.Value);
                    ViewData["Task"]     = task.Title;
                    ViewData["TaskId"]   = task.Id;
                    ViewData["Matter"]   = matter.Title;
                    ViewData["MatterId"] = matter.Id;
                    return(View(viewModel));
                }
            }

            model = Data.Timing.Time.Edit(model, currentUser);

            return(RedirectToAction("Details", new { Id = id }));
        }
Esempio n. 4
0
        public ActionResult Edit(Guid id, ViewModels.Timing.TimeViewModel viewModel)
        {
            Common.Models.Account.Users currentUser;
            Common.Models.Timing.Time   model;
            List <Common.Models.Timing.TimeCategory> timeCategoryList;

            using (Data.Transaction trans = Data.Transaction.Create(true))
            {
                try
                {
                    currentUser = Data.Account.Users.Get(trans, User.Identity.Name);

                    model = Mapper.Map <Common.Models.Timing.Time>(viewModel);

                    if (model.Stop.HasValue)
                    {
                        List <Common.Models.Timing.Time> conflicts =
                            Data.Timing.Time.ListConflictingTimes(trans, model.Start, model.Stop.Value, model.Worker.Id.Value);

                        if (conflicts.Count > 1 ||
                            (conflicts.Count == 1 && conflicts[0].Id != id))
                        { // conflict found
                            Common.Models.Contacts.Contact contact;
                            Common.Models.Tasks.Task       task;
                            Common.Models.Matters.Matter   matter;
                            string errorListString = "";
                            List <ViewModels.Contacts.ContactViewModel> employeeContactList;

                            contact          = Data.Contacts.Contact.Get(trans, viewModel.Worker.Id.Value);
                            viewModel.Worker = Mapper.Map <ViewModels.Contacts.ContactViewModel>(contact);

                            task = Data.Timing.Time.GetRelatedTask(trans, model.Id.Value);

                            foreach (Common.Models.Timing.Time time in conflicts)
                            {
                                time.Worker      = Data.Contacts.Contact.Get(time.Worker.Id.Value);
                                errorListString += "<li>" + time.Worker.DisplayName +
                                                   "</a> worked from " + time.Start.ToString("M/d/yyyy h:mm tt");

                                if (time.Stop.HasValue)
                                {
                                    errorListString += " to " + time.Stop.Value.ToString("M/d/yyyy h:mm tt") +
                                                       " [<a href=\"/Timing/Edit/" + time.Id.Value.ToString() + "\">edit</a>]";
                                }
                                else
                                {
                                    errorListString += " to an unknown time " +
                                                       "[<a href=\"/Timing/Edit/" + time.Id.Value.ToString() + "\">edit</a>]";
                                }

                                errorListString += "</li>";
                            }

                            ViewBag.ErrorMessage = "Time conflicts with the following other time entries:<ul>" + errorListString + "</ul>";

                            //ModelState.AddModelError(String.Empty, "Time conflicts with other time entries.");

                            matter = Data.Tasks.Task.GetRelatedMatter(trans, task.Id.Value);

                            timeCategoryList = Data.Timing.TimeCategory.List(trans);
                            timeCategoryList.Insert(0, new Common.Models.Timing.TimeCategory()
                            {
                                Id    = 0,
                                Title = "Standard"
                            });

                            employeeContactList = new List <ViewModels.Contacts.ContactViewModel>();
                            Data.Contacts.Contact.ListEmployeesOnly(trans).ForEach(x =>
                            {
                                employeeContactList.Add(Mapper.Map <ViewModels.Contacts.ContactViewModel>(x));
                            });

                            ViewBag.Task                = task;
                            ViewBag.Matter              = matter;
                            ViewBag.TimeCategoryList    = timeCategoryList;
                            ViewBag.EmployeeContactList = employeeContactList;
                            return(View(viewModel));
                        }
                    }

                    model = Data.Timing.Time.Edit(trans, model, currentUser);

                    trans.Commit();

                    return(RedirectToAction("Details", new { Id = id }));
                }
                catch
                {
                    trans.Rollback();
                    return(Edit(id));
                }
            }
        }