示例#1
0
        public ActionResult AddWorkSchedules(int?shifts, string DayWork, int?StaffId)
        {
            var workSchedules            = WorkSchedulesRepository.GetAllWorkSchedules().AsEnumerable().Where(x => x.ShiftsId == shifts && x.Day.Value == Convert.ToDateTime(DayWork) && x.StaffId == StaffId);
            vwTimekeepingViewModel model = new vwTimekeepingViewModel();
            WorkSchedules          work  = new WorkSchedules();

            if (workSchedules.Count() <= 0)
            {
                work.IsDeleted    = false;
                work.CreatedDate  = DateTime.Now;
                work.ModifiedDate = DateTime.Now;
                work.StaffId      = StaffId;
                work.ShiftsId     = shifts;
                work.Day          = Convert.ToDateTime(DayWork);
                WorkSchedulesRepository.InsertWorkSchedules(work);
                var q = timekeepingRepository.GetvwTimekeepingByWorkSchedulesId(work.Id);
                AutoMapper.Mapper.Map(q, model);
            }
            else
            {
                var q = timekeepingRepository.GetvwTimekeepingByWorkSchedulesId(workSchedules.FirstOrDefault().Id);
                AutoMapper.Mapper.Map(q, model);
            }

            if (string.IsNullOrEmpty(model.HoursIn.ToString()) && string.IsNullOrEmpty(model.HoursOut.ToString()))
            {
                var dayoff = dayoffRepository.GetAllvwDayOff().Where(x => x.StaffId == model.StaffId && x.DayStart <= model.DayWork && model.DayWork <= x.DayEnd);
                foreach (var i in dayoff)
                {
                    //model.Pay = i.Pay;
                    model.DayOff     = "P";
                    model.IdDayOff   = i.Id;
                    model.DayOffName = i.NameSymbol;
                    model.DayOffCode = i.CodeSymbol;
                }

                if (model.DayWork.Value.ToString("dd/MM/yyyy") == DateTime.Now.ToString("dd/MM/yyyy") && string.IsNullOrEmpty(model.DayOff))
                {
                    model.DayOff = "DL";
                    //  model.DayOffTooltip = "Đang làm";
                }
                if (model.DayWork < DateTime.Now && string.IsNullOrEmpty(model.DayOff))
                {
                    model.DayOff = "KP";
                    // model.DayOffTooltip = "Nghỉ không phép";
                }
                if (model.DayWork > DateTime.Now && string.IsNullOrEmpty(model.DayOff))
                {
                    model.DayOff = "CL";
                    //  model.DayOffTooltip = "Chưa làm";
                }
            }

            return(View(model));
        }
示例#2
0
        private void DocSchedule()
        {
            lvSchedule.Items.Clear();
            //Use .Any not Count
            if (lvDoctors.SelectedIndices.Count <= 0)
            {
                return;
            }

            var date = dtpSignPatientDate.Value;

            using (var context = new HospitalDbContext())
            {
                //Select focused Id doctor from list view, lvHeader with id not exist
                int docId = Convert.ToInt32(lvDoctors.FocusedItem.SubItems[4].Text);

                //why static data?
                //int workTime = 17;
                DateTime schedule = dtpSignPatientDate.Value;

                schedule = schedule.AddHours(9);

                while (true)
                {
                    WorkSchedules signIn =
                        context.WorkSchedules.Include(x => x.Worker).
                        Include(x => x.Patient).FirstOrDefault(x => x.Worker.Id == docId &&
                                                               x.Data.Year == date.Year &&
                                                               x.Data.Month == date.Month &&
                                                               x.Data.Day == date.Day &&
                                                               x.Data.Hour == schedule.Hour &&
                                                               x.Data.Minute == schedule.Minute);

                    string patient = $"{signIn?.Patient.LastName} {signIn?.Patient.FirstName}";

                    var time = new ListViewItem(schedule.ToShortTimeString());
                    time.SubItems.Add(signIn == null ? "" : "busy");
                    time.SubItems.Add(patient);
                    lvSchedule.Items.Add(time);

                    schedule = schedule.AddMinutes(30);

                    // repeat till 17 o clock will come
                    if (schedule.Hour > 16 && schedule.Minute > 0)
                    {
                        break;
                    }
                }
            }
        }
示例#3
0
        /*public ProductionOrder CreateBomForProductionOrder(decimal quantity, ProductionOrder mainProductionOrder)
         * {
         *  var article = Articles.Include(a => a.ArticleBoms).ThenInclude(c => c.ArticleChild).Single(a => a.Id == mainProductionOrder.ArticleId);
         *  foreach (var item in article.ArticleBoms)
         *  {
         *      var thisQuantity = quantity * item.Quantity;
         *
         *      var prodOrder = new ProductionOrder
         *      {
         *          ArticleId = item.ArticleChildId,
         *          Name = "Prod. Auftrag: " + article.Name,
         *          Quantity = thisQuantity,
         *      };
         *      ProductionOrders.Add(prodOrder);
         *
         *      var prodOrderBom = new ProductionOrderBom
         *      {
         *          Quantity = thisQuantity,
         *          ProductionOrderParentId = mainProductionOrder.Id,
         *
         *      };
         *      mainProductionOrder.ProductionOrderBoms.Add(prodOrderBom);
         *
         *      CreateDemandProductionOrderBom(item.ArticleChildId, thisQuantity);
         *  }
         *  SaveChanges();
         *  return mainProductionOrder;
         * }*/


        public void CreateProductionOrderWorkSchedules(ProductionOrder productionOrder)
        {
            var abstractWorkSchedules = WorkSchedules.Where(a => a.ArticleId == productionOrder.ArticleId).ToList();

            foreach (var abstractWorkSchedule in abstractWorkSchedules)
            {
                //add specific workSchedule
                var workSchedule = new ProductionOrderWorkSchedule();
                abstractWorkSchedule.CopyPropertiesTo <IWorkSchedule>(workSchedule);
                workSchedule.ProductionOrderId = productionOrder.Id;
                workSchedule.MachineId         = null;
                workSchedule.ProducingState    = ProducingState.Created;
                workSchedule.Duration         *= (int)productionOrder.Quantity;
                ProductionOrderWorkSchedules.Add(workSchedule);
                SaveChanges();
            }
        }
示例#4
0
        private void FillLvSchedule(DateTime date)
        {
            lblDayOfWeek.Text = dtpAppointmentTime.Value.DayOfWeek.ToString();

            var workingDate = date;

            // if needed replase this to app.config
            //int workTime = 17;

            lvAppointment.Items.Clear();
            DateTime schedule = dtpAppointmentTime.Value;

            schedule = schedule.AddHours(9);
            using (var context = new HospitalDbContext())
            {
                while (true)
                {
                    WorkSchedules signIn =
                        context.WorkSchedules.Include(x => x.Worker).Include(x => x.Patient).
                        FirstOrDefault(x => x.Worker.Id == currentDoctor &&
                                       x.Data.Year == workingDate.Year &&
                                       x.Data.Month == workingDate.Month &&
                                       x.Data.Day == workingDate.Day &&
                                       x.Data.Hour == schedule.Hour &&
                                       x.Data.Minute == schedule.Minute);

                    string patient = $"{signIn?.Patient.LastName} {signIn?.Patient.FirstName}";

                    var time = new ListViewItem(schedule.ToShortTimeString());
                    //time.SubItems.Add(signIn == null ? "" : "busy");
                    time.SubItems.Add(patient);
                    time.SubItems.Add(signIn?.Patient.Id.ToString());
                    lvAppointment.Items.Add(time);

                    schedule = schedule.AddMinutes(30);

                    //repeat till 17:00 o clock
                    if (schedule.Hour > 16 && schedule.Minute > 0)
                    {
                        break;
                    }
                }
            }
        }
示例#5
0
        private void btnSignUp_Click(object sender, EventArgs e)
        {
            //var a = Registry.Users.GetSubKeyNames();
            var busy = lvSchedule.FocusedItem.SubItems[chBusy.Index].Text;

            if (string.IsNullOrWhiteSpace(busy))
            {
                using (var context = new HospitalDbContext())
                {
                    var doc = SelectedDocId();
                    //var patient = sender.GetType().GUID;
                    var myData = Convert.ToDateTime(lvSchedule.FocusedItem.SubItems[0].Text);

                    var data = dtpSignPatientDate.Value;
                    data = data.AddHours(myData.Hour);
                    data = data.AddMinutes(myData.Minute);

                    //get value via column header
                    var   room  = Convert.ToInt32(lvDoctors.FocusedItem.SubItems[chRoom.Index].Text);
                    Users myDoc =
                        context.Users.Include(x => x.Adress)
                        .Include(x => x.Position.WorkerPositionType)
                        .FirstOrDefault(x => x.Id == doc);
                    var myPatient = context.Users.FirstOrDefault(x => x.Id == _concreteUser);

                    WorkSchedules currentSchedules = new WorkSchedules()
                    {
                        Worker  = myDoc,
                        Patient = myPatient,
                        Data    = data,
                        // why it`s static number?
                        WorkRoom = room,
                    };

                    context.WorkSchedules.Add(currentSchedules);
                    context.SaveChanges();
                    var result =
                        $"\"{myPatient.FirstName} {myPatient.LastName}\" signed to \"{myDoc.Position.WorkerPositionType.Name}\"" +
                        $" {data.ToLongDateString()} {data.ToShortTimeString()}";
                    MessageBox.Show(result, @"Sign up", MessageBoxButtons.OK);
                }
                this.Close();
            }
        }
示例#6
0
        private void DocSchedule()
        {
            lvSchedule.Items.Clear();
            //Use .Any not Count

            var date = dtpSignPatientDate.Value;

            using (var context = new HospitalDbContext())
            {
                //why static data?
                //int workTime = 17;
                DateTime schedule = dtpSignPatientDate.Value;

                schedule = schedule.AddHours(9);

                while (true)
                {
                    WorkSchedules signIn =
                        context.WorkSchedules.Include(x => x.Worker).
                        Include(x => x.Patient).FirstOrDefault(x => x.Worker.Id == _docId &&
                                                               x.Data.Year == date.Year &&
                                                               x.Data.Month == date.Month &&
                                                               x.Data.Day == date.Day &&
                                                               x.Data.Hour == schedule.Hour &&
                                                               x.Data.Minute == schedule.Minute);

                    string patient = $"{signIn?.Patient.LastName} {signIn?.Patient.FirstName}";

                    var time = new ListViewItem(schedule.ToShortTimeString());
                    //time.SubItems.Add(signIn == null ? "" : "busy");
                    time.SubItems.Add(patient);
                    lvSchedule.Items.Add(time);

                    schedule = schedule.AddMinutes(30);

                    // repeat till 17 o clock will come
                    if (schedule.Hour > 16 && schedule.Minute > 0)
                    {
                        break;
                    }
                }
            }
        }
示例#7
0
        public static void KiemTraVaTinhDuLieuChamCong(vwWorkSchedules item, WorkSchedules save_database, DateTime?HourIn, DateTime?HourOut)
        {
            StaffsRepository              staffRepository               = new StaffsRepository(new Domain.Staff.ErpStaffDbContext());
            SymbolTimekeepingRepository   symboltimekeepingRepository   = new SymbolTimekeepingRepository(new Domain.Staff.ErpStaffDbContext());
            DayOffRepository              dayoffRepository              = new DayOffRepository(new Domain.Staff.ErpStaffDbContext());
            ShiftsRepository              shiftsRepository              = new ShiftsRepository(new Domain.Staff.ErpStaffDbContext());
            CheckInOutRepository          checkInOutRepository          = new CheckInOutRepository(new Domain.Staff.ErpStaffDbContext());
            WorkSchedulesRepository       workSchedulesRepository       = new WorkSchedulesRepository(new Domain.Staff.ErpStaffDbContext());
            RegisterForOvertimeRepository registerForOvertimeRepository = new RegisterForOvertimeRepository(new Domain.Staff.ErpStaffDbContext());

            //lấy danh sách đăng ký tăng ca có thời gian bắt đầu tăng ca nằm trong khoảng thời gian của ca làm việc.
            //sắp xếp theo thời gian bắt đầu tăng ca... nếu có nhiều đăng ký tăng ca cùng 1 lúc thì chỉ lấy dòng đăng ký đầu tiên.
            //var dkTangCa = registerForOvertimeRepository.GetAllvwRegisterForOvertime().Where(x => x.StartHour >= item.HoursIn && x.StartHour <= item.HoursOut && x.StaffId == item.StaffId).OrderBy(x => x.StartHour);

            #region chuyển đổi thời gian của ca làm việc từ string sang DateTime
            //tách chuỗi thời gian của ca làm việc
            string strStartTime    = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.StartTime;
            string strStartTimeOut = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.StartTimeOut;
            string strStartTimeIn  = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.StartTimeIn;
            string strEndTime      = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.EndTime;
            string strEndTimeIn    = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.EndTimeIn;
            string strEndTimeOut   = item.Day.Value.ToString("dd/MM/yyyy") + " " + item.EndTimeOut;
            // chuyển đổi thời gian của ca làm việc từ string sang DateTime
            //DateTime d = DateTime.ParseExact("08/11/2017 12:00", "dd/MM/yyyy HH:mm", null);
            DateTime StartTime    = DateTime.ParseExact(strStartTime, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
            DateTime StartTimeOut = DateTime.ParseExact(strStartTimeOut, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
            DateTime StartTimeIn  = DateTime.ParseExact(strStartTimeIn, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
            DateTime EndTime      = DateTime.ParseExact(strEndTime, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
            DateTime EndTimeIn    = DateTime.ParseExact(strEndTimeIn, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
            DateTime EndTimeOut   = DateTime.ParseExact(strEndTimeOut, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
            #endregion

            #region //nếu thời gian kết thúc ca mà nhỏ hơn thời gian bắt đầu ca thì xác định ca đó qua đêm... cộng thêm 1 ngày vào thời gian kết thúc ca.
            if (StartTime > EndTime)
            {
                EndTime = EndTime.AddDays(1);
            }
            if (StartTime > EndTimeIn)
            {
                EndTimeIn = EndTimeIn.AddDays(1);
            }
            if (StartTime > EndTimeOut)
            {
                EndTimeOut = EndTimeOut.AddDays(1);
            }
            #endregion
            //thời gian bắt đầu tính tăng ca
            int      setting_overtime = Convert.ToInt32(Helpers.Common.GetSetting("time_starts_counting_overtime"));
            DateTime DateOverTime     = EndTime.AddMinutes(setting_overtime);


            if (HourIn.Value != null)
            {
                save_database.HoursIn = HourIn;
                #region   //nếu thời gian vào của nhân viên lớn hơn thời gian của ca làm việc thì tính thời gian đi trễ
                if (save_database.HoursIn > StartTime)
                {
                    //tính số phút đi trễ
                    TimeSpan a = save_database.HoursIn.Value.Subtract(StartTime);
                    //trừ đi số giờ đi trễ cho phép.
                    var q = Convert.ToInt32(a.TotalMinutes) - item.MinuteLate;
                    //cập nhật số giờ đi trễ
                    if (q > 0)
                    {
                        //đi trễ
                        save_database.Total_minute_work_late = q;
                    }
                    else
                    {
                        //đi đúng giờ
                        save_database.Total_minute_work_late = 0;
                    }
                }
                else
                {
                    //đi đúng giờ
                    save_database.Total_minute_work_late = 0;
                }
                #endregion
            }
            else
            {
                //để đây xử lý sau, cho=0 để ko bị lỗi... còn trường hợp nghỉ phép nữa
                save_database.Total_minute_work_late = 0;
            }
            //var HourOut = listcheckinout.Where(xx => xx.TimeStr > EndTimeIn && xx.TimeDate.Value.ToString("dd/MM/yyyy") == EndTime.ToString("dd/MM/yyyy") && xx.UserId == item.UserEnrollNumber).OrderByDescending(xx => xx.TimeStr).ToList();
            if (HourOut != null)
            {
                save_database.HoursOut = HourOut;
            }
            if (save_database.HoursOut >= DateOverTime)
            {
                #region tăng ca
                TimeSpan a = save_database.HoursOut.Value.Subtract(EndTime);
                save_database.Total_minute_work_overtime = Convert.ToInt32(a.TotalMinutes);
                #endregion
            }
            else
            {
                #region về sớm (về đúng giờ) không có tăng ca

                TimeSpan a = EndTime.Subtract(save_database.HoursOut.Value);
                var      q = Convert.ToInt32(a.TotalMinutes) - item.MinuteEarly;
                if (q > 0)
                {
                    //về sớm
                    save_database.Total_minute_work_early = q;
                }
                else
                {
                    //về đúng giờ
                    save_database.Total_minute_work_early = 0;
                }
                save_database.Total_minute_work_overtime = 0;
                #endregion
            }
            #region tính số phút làm trong 1 ca
            if (save_database.HoursIn != null && save_database.HoursOut != null)
            {
                TimeSpan total = EndTime.Subtract(StartTime);
                save_database.Total_minute_work = Convert.ToInt32(total.TotalMinutes) + save_database.Total_minute_work_overtime - save_database.Total_minute_work_late - save_database.Total_minute_work_early;
            }
            #endregion

            #region xét ký hiệu chấm công
            if (save_database.Symbol == null)
            {
                //nếu chưa đi làm thì xét trường hợp có phép hoặc không phép.
                if (save_database.HoursIn == null && save_database.HoursOut == null)
                {
                    var phep = dayoffRepository.GetAllvwDayOff().Where(x => x.DayStart <= save_database.Day && x.DayEnd >= save_database.Day && x.StaffId == save_database.StaffId);
                    if (phep.Count() > 0)
                    {
                        save_database.Symbol = phep.FirstOrDefault().TypeDayOffId;
                    }
                    else
                    {
                        save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("K").Id;
                    }
                }

                //nếu chỉ có giờ ra thì lưu ký hiệu đi làm chưa có
                else if (save_database.HoursIn == null)
                {
                    save_database.Symbol                     = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("DLo").Id;
                    save_database.Total_minute_work          = 0;
                    save_database.Total_minute_work_early    = 0;
                    save_database.Total_minute_work_late     = 0;
                    save_database.Total_minute_work_overtime = 0;
                }
                //nếu chỉ có giờ vào thì lưu ký hiệu chưa có giờ vào.
                else if (save_database.HoursOut == null)
                {
                    save_database.Symbol                     = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("DVo").Id;
                    save_database.Total_minute_work          = 0;
                    save_database.Total_minute_work_early    = 0;
                    save_database.Total_minute_work_late     = 0;
                    save_database.Total_minute_work_overtime = 0;
                }
                else
                {
                    //nếu có đi làm thì xét trường hợp đi trễ, về sớm, đi đúng giờ, tăng ca
                    if (save_database.Total_minute_work_late == 0 && save_database.Total_minute_work_early == 0)
                    {
                        save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("X").Id;
                    }
                    else if (save_database.Total_minute_work_late > 0 && save_database.Total_minute_work_early > 0)
                    {
                        save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("Tr,Sm").Id;
                    }
                    else if (save_database.Total_minute_work_late > 0)
                    {
                        save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("Tr").Id;
                    }
                    else if (save_database.Total_minute_work_early > 0)
                    {
                        save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("Sm").Id;
                    }
                    if (save_database.Total_minute_work_overtime > 0)
                    {
                        save_database.Symbol = symboltimekeepingRepository.GetSymbolTimekeepingByCodeDefault("+").Id;
                    }
                }
            }
            #endregion
        }
示例#8
0
        public ActionResult Assign(FormCollection fc)
        {
            var model           = new TimekeepingListViewModel();
            var Id              = Request["timekeepingListId"];
            var timekeepingList = timekeepingListRepository.GetTimekeepingListById(Convert.ToInt32(Id));
            var holiday         = holidayRepository.GetAllHolidays().AsEnumerable().ToList();
            var staff           = StaffsRepository.GetvwAllStaffs().Where(x => x.BranchDepartmentId == timekeepingList.DepartmentId);

            ViewBag.staffList  = staff;
            ViewBag.DayHoliday = holiday;
            DateTime aDateTime = new DateTime(timekeepingList.Year.Value, timekeepingList.Month.Value, 1);
            // Cộng thêm 1 tháng và trừ đi một ngày.
            DateTime retDateTime = aDateTime.AddMonths(1).AddDays(-1);

            ViewBag.aDateTime   = aDateTime;
            ViewBag.retDateTime = retDateTime;
            var DayOff = categoryRepository.GetCategoryByCode("DayOffDefault").Where(x => x.Value == "True").AsEnumerable().ToList();

            ViewBag.DayOff = DayOff;
            var ShiftsList = shiftsRepository.GetAllShifts().Where(x => x.CategoryShifts == timekeepingList.CategoryShifts).AsEnumerable();

            ViewBag.ShiftsList = ShiftsList;

            var           user         = userRepository.GetUserById(WebSecurity.CurrentUserId);
            List <string> listIdShifts = new List <string>();

            if (Request["shifts_id"] != null)
            {
                listIdShifts = Request["shifts_id"].Split(',').ToList();
            }


            List <string> ListWorkSchedules = new List <string>();

            foreach (var item in staff)
            {
                List <string> listIdCurrent = WorkSchedulesRepository.GetAllWorkSchedules().AsEnumerable().Where(x => aDateTime <= x.Day && x.Day <= retDateTime && x.ShiftsId != null && x.StaffId == item.Id).Select(x => x.ShiftsId.ToString().Replace(x.ShiftsId.ToString(), x.StaffId + "-" + x.Day.Value.ToString("dd/MM/yyyy") + "-" + x.ShiftsId)).ToList();
                ListWorkSchedules = ListWorkSchedules.Union(listIdCurrent).ToList();
            }
            // query id new to insert (not in database)
            List <string> listIdNew = listIdShifts.Where(id1 => !ListWorkSchedules.Any(id2 => id2 == id1)).ToList();
            //query id to delete not listIdFromRequest
            List <string> listIdToDelete = ListWorkSchedules.Where(id1 => !listIdShifts.Any(id2 => id2 == id1)).ToList();

            foreach (var id in listIdNew)
            {
                var item = new WorkSchedules();
                item.CreatedUserId  = WebSecurity.CurrentUserId;
                item.ModifiedUserId = WebSecurity.CurrentUserId;
                item.CreatedDate    = DateTime.Now;
                item.ModifiedDate   = DateTime.Now;
                item.IsDeleted      = false;
                string[] arrVal = id.Split('-');
                item.StaffId           = int.Parse(arrVal[0], CultureInfo.InstalledUICulture);
                item.Day               = DateTime.ParseExact(arrVal[1], "dd/MM/yyyy", CultureInfo.InvariantCulture);
                item.ShiftsId          = int.Parse(arrVal[2], CultureInfo.InvariantCulture);
                item.TimekeepingListId = Convert.ToInt32(Id);
                WorkSchedulesRepository.InsertWorkSchedules(item);
            }
            foreach (var id in listIdToDelete)
            {
                string[] arrVal   = id.Split('-');
                int      StaffId  = int.Parse(arrVal[0], CultureInfo.InstalledUICulture);
                string   Day      = arrVal[1];
                int      ShiftsId = int.Parse(arrVal[2], CultureInfo.InvariantCulture);
                WorkSchedulesRepository.Delete(Day, StaffId, ShiftsId);
            }
            timekeepingList.Status = "timekeeping";
            timekeepingListRepository.UpdateTimekeepingList(timekeepingList);
            // TempData[Globals.SuccessMessageKey] = "Lưu phân công ca làm việc thành công";
            return(RedirectToAction("Detail", "TimekeepingList", new { area = "Staff", Id = Convert.ToInt32(Id) }));
        }
示例#9
0
        public ActionResult Edit(TimekeepingListViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (Request["Submit"] == "Save")
                {
                    var TimekeepingList = TimekeepingListRepository.GetTimekeepingListById(model.Id);
                    //nếu danh sách chấm công sửa từ part-time sang full-time thì tự động phân công ca làm việc.
                    if (TimekeepingList.CategoryShifts == "Part-time" && model.CategoryShifts == "Full-time")
                    {
                        //nếu danh sách khởi tạo chấm công là Toàn thời gian thì tự động tạo phân công cho tất cả nhân viên trong phòng ban
                        if (model.CategoryShifts == "Full-time")
                        {
                            //chuẩn bị dữ liệu ngày nghỉ để duyệt ngày nghỉ thì không phân công.
                            var DayOff = categoryRepository.GetCategoryByCode("DayOffDefault").Where(x => x.Value == "True").AsEnumerable().ToList();
                            //lấy ca làm việc toàn thời gian ra.
                            var shift = shiftsRepository.GetAllShifts().Where(x => x.CategoryShifts == "Full-time").OrderByDescending(x => x.CreatedDate).FirstOrDefault();
                            //lấy danh sách nhân viên của phòng ban để phân công.
                            var staff = StaffsRepository.GetAllStaffs().Where(x => x.BranchDepartmentId == TimekeepingList.DepartmentId).ToList();
                            //dựa vào tháng năm của danh sách khởi tạo ở trên, tạo ra list ngày trong tháng.
                            DateTime aDateTime = new DateTime(TimekeepingList.Year.Value, TimekeepingList.Month.Value, 1);
                            // Cộng thêm 1 tháng và trừ đi một ngày.
                            DateTime retDateTime = aDateTime.AddMonths(1).AddDays(-1);
                            //phần duyệt ngày trong tháng để thêm phân công cho từng nhân viên.
                            for (DateTime dt = aDateTime; dt <= retDateTime; dt = dt.AddDays(1))
                            {
                                if (DayOff.Where(x => Convert.ToInt32(x.OrderNo) == (int)dt.DayOfWeek && x.Value == "True").Count() <= 0)
                                {
                                    foreach (var i in staff)
                                    {
                                        var item = new WorkSchedules();
                                        item.CreatedUserId     = WebSecurity.CurrentUserId;
                                        item.ModifiedUserId    = WebSecurity.CurrentUserId;
                                        item.CreatedDate       = DateTime.Now;
                                        item.ModifiedDate      = DateTime.Now;
                                        item.IsDeleted         = false;
                                        item.StaffId           = i.Id;
                                        item.Day               = dt;
                                        item.ShiftsId          = shift.Id;
                                        item.TimekeepingListId = TimekeepingList.Id;
                                        WorkSchedulesRepository.InsertWorkSchedules(item);
                                    }
                                }
                            }
                        }
                    }
                    AutoMapper.Mapper.Map(model, TimekeepingList);
                    TimekeepingList.ModifiedUserId = WebSecurity.CurrentUserId;
                    TimekeepingList.ModifiedDate   = DateTime.Now;
                    //if (model.CategoryShifts == "Full-time")
                    //{
                    //    TimekeepingList.Status = "assigned";
                    //}
                    var department = departmentRepository.GetvwBranchDepartmentById(model.DepartmentId.Value);
                    TimekeepingList.Name = "Danh sách chấm công tháng " + model.Month + " năm " + model.Year + " - " + department.Staff_DepartmentId + " - " + department.BranchName;
                    TimekeepingListRepository.UpdateTimekeepingList(TimekeepingList);
                    TempData[Globals.SuccessMessageKey] = App_GlobalResources.Wording.UpdateSuccess;
                    return(RedirectToAction("Index"));
                }

                return(View(model));
            }

            return(View(model));

            //if (Request.UrlReferrer != null)
            //    return Redirect(Request.UrlReferrer.AbsoluteUri);
            //return RedirectToAction("Index");
        }
示例#10
0
        public ActionResult Create(TimekeepingListViewModel model)
        {
            if (ModelState.IsValid)
            {
                var TimekeepingList = new TimekeepingList();
                AutoMapper.Mapper.Map(model, TimekeepingList);
                TimekeepingList.IsDeleted      = false;
                TimekeepingList.CreatedUserId  = WebSecurity.CurrentUserId;
                TimekeepingList.ModifiedUserId = WebSecurity.CurrentUserId;
                TimekeepingList.AssignedUserId = WebSecurity.CurrentUserId;
                TimekeepingList.CreatedDate    = DateTime.Now;
                TimekeepingList.ModifiedDate   = DateTime.Now;
                TimekeepingList.CheckSalary    = false;
                if (model.Sale_BranchId != null)
                {
                    if (model.DepartmentId != null)
                    {
                        var department = departmentRepository.GetvwBranchDepartmentById(model.DepartmentId.Value);
                        TimekeepingList.Name = "Danh sách chấm công tháng " + model.Month + " năm " + model.Year + " - " + department.Staff_DepartmentId + " - " + department.BranchName;
                    }
                    else
                    {
                        var branch = branchRepository.GetBranchById(model.Sale_BranchId.Value);
                        TimekeepingList.Name = "Danh sách chấm công tháng " + model.Month + " năm " + model.Year + " - " + branch.Name;
                    }
                }
                else
                {
                    TimekeepingList.Name = "Danh sách chấm công tháng " + model.Month + " năm " + model.Year + " - Tất cả chi nhánh";
                }

                //mặc định khởi tạo danh sách thì trạng thái là pending... nếu có thêm phân công tự động thì là assigned
                if (model.CategoryShifts == "Full-time")
                {
                    TimekeepingList.Status = "timekeeping";
                }
                else
                {
                    TimekeepingList.Status = "assign";
                }
                TimekeepingListRepository.InsertTimekeepingList(TimekeepingList);
                var prefix2 = Erp.BackOffice.Helpers.Common.GetSetting("prefixOrderNo_timekeepingList");
                TimekeepingList.Code = Erp.BackOffice.Helpers.Common.GetCode(prefix2, TimekeepingList.Id);
                TimekeepingListRepository.UpdateTimekeepingList(TimekeepingList);
                //nếu danh sách khởi tạo chấm công là Toàn thời gian thì tự động tạo phân công cho tất cả nhân viên trong phòng ban
                if (model.CategoryShifts == "Full-time")
                {
                    //chuẩn bị dữ liệu ngày nghỉ để duyệt ngày nghỉ thì không phân công.
                    var DayOff = categoryRepository.GetCategoryByCode("DayOffDefault").Where(x => x.Value == "True").AsEnumerable().ToList();
                    //lấy ca làm việc toàn thời gian ra.
                    var shift = shiftsRepository.GetAllShifts().Where(x => x.CategoryShifts == "Full-time").OrderByDescending(x => x.CreatedDate).FirstOrDefault();
                    //lấy danh sách nhân viên của phòng ban để phân công.
                    List <vwStaffs> list_staff_insert = new List <vwStaffs>();
                    var             staff             = StaffsRepository.GetvwAllStaffs().Where(x => !string.IsNullOrEmpty(x.BranchName) && x.IsWorking == true);
                    if (model.Sale_BranchId != null)
                    {
                        if (model.DepartmentId != null)
                        {
                            list_staff_insert = staff.Where(x => x.BranchDepartmentId == model.DepartmentId).ToList();
                        }
                        else
                        {
                            list_staff_insert = staff.Where(x => x.Sale_BranchId == model.Sale_BranchId).ToList();
                        }
                    }
                    else
                    {
                        list_staff_insert = staff.OrderBy(x => x.Id).ToList();
                    }
                    //dựa vào tháng năm của danh sách khởi tạo ở trên, tạo ra list ngày trong tháng.
                    DateTime aDateTime = new DateTime(TimekeepingList.Year.Value, TimekeepingList.Month.Value, 1);
                    // Cộng thêm 1 tháng và trừ đi một ngày.
                    DateTime retDateTime = aDateTime.AddMonths(1).AddDays(-1);
                    //phần duyệt ngày trong tháng để thêm phân công cho từng nhân viên.
                    for (DateTime dt = aDateTime; dt <= retDateTime; dt = dt.AddDays(1))
                    {
                        if (DayOff.Where(x => Convert.ToInt32(x.OrderNo) == (int)dt.DayOfWeek && x.Value == "True").Count() <= 0)
                        {
                            foreach (var i in list_staff_insert)
                            {
                                var item = new WorkSchedules();
                                item.CreatedUserId     = WebSecurity.CurrentUserId;
                                item.ModifiedUserId    = WebSecurity.CurrentUserId;
                                item.CreatedDate       = DateTime.Now;
                                item.ModifiedDate      = DateTime.Now;
                                item.IsDeleted         = false;
                                item.StaffId           = i.Id;
                                item.Day               = dt;
                                item.ShiftsId          = shift.Id;
                                item.TimekeepingListId = TimekeepingList.Id;
                                WorkSchedulesRepository.InsertWorkSchedules(item);
                            }
                        }
                    }
                }
                //TempData[Globals.SuccessMessageKey] = App_GlobalResources.Wording.InsertSuccess;
                return(RedirectToAction("Detail", "TimekeepingList", new { area = "Staff", Id = TimekeepingList.Id }));
            }
            return(View(model));
        }