//public string[] GetAll()
        //{
        //    string[] employeeNames = null;
        //    //Employee juu;
        //    MobileDBEntities1 entities = new MobileDBEntities1();
        //    try
        //    {
        //        //juu = (from f in entities.Employees where (f.FirstName == "Hius") && (f.LastName == "Harja") select f ).FirstOrDefault();

        //        //juu.EmployeePicture = File.ReadAllBytes(@"C:\x\HiusHarja2.png");
        //        //entities.SaveChanges();

        //        //Employee newEmployee = new Employee()
        //        //{
        //        //    FirstName = "Hienolainen",
        //        //    LastName = "Harjalainen",
        //        //    Active = true,
        //        //    EmployeePicture = File.ReadAllBytes(@"C:\x\HiusHarja.png")
        //        //};
        //        //entities.Employees.Add(newEmployee);
        //        //entities.SaveChanges();

        //        employeeNames = (from e in entities.Employees
        //                                      where (e.Active == true)
        //                                      select e.FirstName + " " + e.LastName).ToArray();
        //    }
        //    finally
        //    {

        //        entities.Dispose();
        //    }
        //    return employeeNames;
        //}
        public string[] GetEmployee()
        {
            //string[] employeeName = null;
            string[] pekka = null;
            //string[] nn = null;

            MobileDBEntities1 entities = new MobileDBEntities1();

            try
            {
                pekka = (from e in entities.Employees
                         where (e.UserName == LoginController.nimi.UserName)
                         select e.FirstName + " " + e.LastName).ToArray();

                //employeeName = (from e in entities.Employees
                //                 where (e.UserName.ToString() == employeeUsername)
                //                 select e.FirstName + " " + e.LastName).ToArray();

                //nn = (LoginController.nimi.FirstName + " " + LoginController.nimi.LastName).ToArray();
            }
            finally
            {
                entities.Dispose();
            }

            return(pekka);
            //return employeeName;
        }
        public ActionResult HoursPerWorkAssignmentAsExcel2()
        {
            StringBuilder csv = new StringBuilder();

            MobileDBEntities1 entities = new MobileDBEntities1();

            try
            {
                DateTime today    = DateTime.Today;
                DateTime tomorrow = DateTime.Today.AddDays(1);

                List <Timesheet> allTimesheetsToday = (from t in entities.Timesheets
                                                       where (t.StartTime > today) && (t.StartTime < tomorrow) && (t.WorkComplete == true)
                                                       select t).ToList();



                foreach (Timesheet timesheet in allTimesheetsToday)
                {
                    csv.AppendLine(timesheet.Id_Employee + ";" +
                                   timesheet.StartTime + ";" + timesheet.StopTime + ";");
                }
            }
            finally
            {
                entities.Dispose();
            }
            byte[] buffer = Encoding.UTF8.GetBytes(csv.ToString());
            return(File(buffer, "text/csv", "Työtunnit.csv"));
        }
        public ActionResult GetTimesheetCounts(string onlyComplete)
        {
            ReportChartDataViewModel model = new ReportChartDataViewModel();

            MobileDBEntities1 entities = new MobileDBEntities1();

            try
            {
                model.Labels = (from wa in entities.WorkAssignments orderby
                                wa.Id_WorkAssignment select wa.Title).ToArray();

                if (onlyComplete == "1")
                {
                    model.Counts = (from ts in entities.Timesheets
                                    where (ts.WorkComplete == true)
                                    orderby ts.Id_WorkAssignment
                                    group ts by ts.Id_WorkAssignment into grp
                                    select grp.Count()).ToArray();
                }
                else
                {
                    model.Counts = (from ts in entities.Timesheets
                                    orderby ts.Id_WorkAssignment
                                    group ts by ts.Id_WorkAssignment into grp
                                    select grp.Count()).ToArray();
                }
            }
            finally
            {
                entities.Dispose();
            }

            return(Json(model, JsonRequestBehavior.AllowGet));
        }
        // GET: Reports
        public ActionResult HoursPerWorkAssignment()
        {
            MobileDBEntities1 entities = new MobileDBEntities1();

            try
            {
                DateTime today    = DateTime.Today;
                DateTime tomorrow = DateTime.Today.AddDays(1);

                List <Timesheet> allTimesheetsToday = (from t in entities.Timesheets
                                                       where (t.StartTime > today) && (t.StartTime < tomorrow) && (t.WorkComplete == true)
                                                       select t).ToList();

                List <HoursPerWorkAssignmentModel> model = new List <HoursPerWorkAssignmentModel>();

                foreach (Timesheet timesheet in allTimesheetsToday)
                {
                    int assignmentId = timesheet.Id_WorkAssignment.Value;
                    HoursPerWorkAssignmentModel existing = model.Where
                                                               (m => m.WorkAssignmentId == assignmentId).FirstOrDefault();

                    if (existing != null)
                    {
                        existing.TotalHours += (timesheet.StopTime.Value - timesheet.StartTime.Value).TotalHours;
                    }
                    else
                    {
                        existing = new HoursPerWorkAssignmentModel()
                        {
                            WorkAssignmentId   = assignmentId,
                            WorkAssignmentName = timesheet.WorkAssignment.Title,
                            TotalHours         = (timesheet.StopTime.Value - timesheet.StartTime.Value).TotalHours
                        };
                        model.Add(existing);
                    }
                }
                return(View(model));
            }
            finally
            {
                entities.Dispose();
            }
        }
        public string[] GetAll()
        {
            //Employee emp = new Employee();
            //emp.EmployeePicture

            string[]          assignmentNames = null;
            MobileDBEntities1 entities        = new MobileDBEntities1();

            try
            {
                assignmentNames = (from e in entities.WorkAssignments
                                   where (e.Active == true)
                                   select e.Title).ToArray();
            }
            finally
            {
                entities.Dispose();
            }
            return(assignmentNames);
        }
        public byte[] GetEmployeeImage(string employeeName)
        {
            MobileDBEntities1 entities = new MobileDBEntities1();

            try
            {
                string[] nameParts = employeeName.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                string   first     = nameParts[0];
                string   last      = nameParts[1];
                byte[]   bytes     = (from e in entities.Employees
                                      where (e.Active == true) &&
                                      (e.FirstName == first) &&
                                      (e.LastName == last)
                                      select e.EmployeePicture).FirstOrDefault();

                return(bytes);
            }
            finally
            {
                entities.Dispose();
            }
        }
        public bool PostStatus(WorkAssignmentOperationModel input)
        {
            MobileDBEntities1 entities = new MobileDBEntities1();

            try
            {
                WorkAssignment assignment = (from e in entities.WorkAssignments
                                             where (e.Active == true) &&
                                             (e.Title == input.AssignmentTitle)
                                             select e).FirstOrDefault();

                if (assignment == null)
                {
                    return(false);
                }

                if (input.Operation == "Start")
                {
                    int assignmentId = assignment.Id_WorkAssignment;

                    Timesheet newEntry = new Timesheet()
                    {
                        Id_WorkAssignment = assignmentId,
                        StartTime         = DateTime.Now,
                        WorkComplete      = false,
                        Active            = true,
                        CreatedAt         = DateTime.Now
                    };
                    entities.Timesheets.Add(newEntry);

                    //assignment.InProgress = true;
                    //assignment.InProgressAt = DateTime.Now;
                    //assignment.LastModifiedAt = DateTime.Now;
                }
                else if (input.Operation == "Stop")
                {
                    int assignmentId = assignment.Id_WorkAssignment;

                    Timesheet existing = (from op in entities.Timesheets
                                          where (op.Id_WorkAssignment == assignmentId) &&
                                          (op.Active == true) && (op.WorkComplete == false)
                                          orderby op.StartTime descending
                                          select op).FirstOrDefault();

                    if (existing != null)
                    {
                        existing.StopTime       = DateTime.Now;
                        existing.WorkComplete   = true;
                        existing.LastModifiedAt = DateTime.Now;

                        //assignment.InProgress = false;
                        //assignment.Completed = true;
                        //assignment.CompletedAt = DateTime.Now;
                        //assignment.LastModifiedAt = DateTime.Now;
                    }
                    else
                    {
                        return(false);
                    }
                }
                entities.SaveChanges();
            }
            catch
            {
                return(false);
            }
            finally
            {
                entities.Dispose();
            }

            return(true);
        }