示例#1
0
        public ActionResult Create(PaymentViewModel model)
        {
            if (ModelState.IsValid)
            {
                var payment = new Payment();
                AutoMapper.Mapper.Map(model, payment);
                payment.IsDeleted      = false;
                payment.CreatedUserId  = WebSecurity.CurrentUserId;
                payment.ModifiedUserId = WebSecurity.CurrentUserId;
                payment.AssignedUserId = WebSecurity.CurrentUserId;
                payment.CreatedDate    = DateTime.Now;
                payment.ModifiedDate   = DateTime.Now;
                var check = Request["group_choice"];
                payment.TargetName = check;
                Erp.Domain.Repositories.CategoryRepository categoryRepository = new Erp.Domain.Repositories.CategoryRepository(new Domain.ErpDbContext());
                var item = categoryRepository.GetCategoryByName(payment.Name).Value;
                payment.ShortName = item.ToString();
                payment.BranchId  = Helpers.Common.CurrentUser.BranchId;
                paymentRepository.InsertPayment(payment);

                payment.Code = Erp.BackOffice.Helpers.Common.GetOrderNo("Payment");
                paymentRepository.UpdatePayment(payment);
                Erp.BackOffice.Helpers.Common.SetOrderNo("Payment");
                var paymentDetail = new PaymentDetail();
                paymentDetail.IsDeleted      = false;
                paymentDetail.CreatedUserId  = WebSecurity.CurrentUserId;
                paymentDetail.ModifiedUserId = WebSecurity.CurrentUserId;
                paymentDetail.AssignedUserId = WebSecurity.CurrentUserId;
                paymentDetail.CreatedDate    = DateTime.Now;
                paymentDetail.ModifiedDate   = DateTime.Now;
                paymentDetail.Name           = model.Name;
                paymentDetail.Amount         = model.Amount;
                paymentDetail.PaymentId      = payment.Id;
                paymentDetailRepository.InsertPaymentDetail(paymentDetail);
                if (Request.IsAjaxRequest())
                {
                    return(Content("success"));
                }
                else
                {
                    TempData[Globals.SuccessMessageKey] = App_GlobalResources.Wording.InsertSuccess;
                    return(RedirectToAction("Index"));
                }
            }
            return(View(model));
        }
示例#2
0
        //custom them mới khi thêm hợp đồng lao động
        #region Create custom
        public static void CreateProcessPay(int?StaffId, int?WageAgreement, DateTime?DayEffective)
        {
            Erp.Domain.Staff.Repositories.ProcessPayRepository processPayRepository = new Erp.Domain.Staff.Repositories.ProcessPayRepository(new Domain.Staff.ErpStaffDbContext());
            Erp.Domain.Repositories.CategoryRepository         categoryRepository   = new Erp.Domain.Repositories.CategoryRepository(new Domain.ErpDbContext());
            var processpay = new ProcessPay();

            processpay.IsDeleted      = false;
            processpay.CreatedUserId  = WebSecurity.CurrentUserId;
            processpay.ModifiedUserId = WebSecurity.CurrentUserId;
            processpay.CreatedDate    = DateTime.Now;
            processpay.ModifiedDate   = DateTime.Now;
            processpay.StaffId        = StaffId;
            processpay.DayEffective   = DayEffective;
            processPayRepository.InsertProcessPay(processpay);
            var prefix1 = Erp.BackOffice.Helpers.Common.GetSetting("prefixOrderNo_ProcessPay");

            processpay.CodePay = Erp.BackOffice.Helpers.Common.GetCode(prefix1, processpay.Id);
            processPayRepository.UpdateProcessPay(processpay);
        }
示例#3
0
        public ActionResult Edit(PaymentViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (Request["Submit"] == "Save")
                {
                    var Payment = paymentRepository.GetPaymentById(model.Id);
                    AutoMapper.Mapper.Map(model, Payment);
                    Payment.ModifiedUserId = WebSecurity.CurrentUserId;
                    Payment.ModifiedDate   = DateTime.Now;
                    var check = Request["group_choice"];
                    Payment.TargetName = check;
                    Erp.Domain.Repositories.CategoryRepository categoryRepository = new Erp.Domain.Repositories.CategoryRepository(new Domain.ErpDbContext());
                    var item = categoryRepository.GetCategoryByName(Payment.Name).Value;
                    Payment.ShortName = item.ToString();
                    paymentRepository.UpdatePayment(Payment);

                    var paymentDetail = paymentDetailRepository.GetPaymentDetailByPaymentId(model.Id);
                    paymentDetail.ModifiedUserId = WebSecurity.CurrentUserId;
                    paymentDetail.ModifiedDate   = DateTime.Now;
                    paymentDetail.Name           = model.Name;
                    paymentDetail.Amount         = model.Amount;
                    paymentDetailRepository.UpdatePaymentDetail(paymentDetail);

                    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");
        }
示例#4
0
        public static void CreateTimekeeping(int?Year, int?Month, int?Id)
        {
            Erp.Domain.Staff.Repositories.HolidaysRepository             holidayRepository = new Erp.Domain.Staff.Repositories.HolidaysRepository(new Domain.Staff.ErpStaffDbContext());
            Erp.Domain.Staff.Repositories.TimekeepingSynthesisRepository timekeepingSynthesisRepository = new Erp.Domain.Staff.Repositories.TimekeepingSynthesisRepository(new Domain.Staff.ErpStaffDbContext());
            Erp.Domain.Repositories.CategoryRepository            categoryRepository      = new Erp.Domain.Repositories.CategoryRepository(new Domain.ErpDbContext());
            Erp.Domain.Staff.Repositories.WorkSchedulesRepository workSchedulesRepository = new Erp.Domain.Staff.Repositories.WorkSchedulesRepository(new Domain.Staff.ErpStaffDbContext());

            //lấy danh sách chấm công từng ngày trong tháng
            var listTinmeKeeping = workSchedulesRepository.GetvwAllWorkSchedules().Where(x => x.TimekeepingListId.Value == Id).ToList();
            var timekeepingList  = listTinmeKeeping.Select(i => new WorkSchedulesViewModel
            {
                BranchDepartmentId = i.BranchDepartmentId,
                Code                       = i.Code,
                CodeShifts                 = i.CodeShifts,
                Color                      = i.Color,
                Day                        = i.Day,
                DayOff                     = i.DayOff,
                DayOffCode                 = i.DayOffCode,
                DayOffName                 = i.DayOffName,
                EndTime                    = i.EndTime,
                EndTimeIn                  = i.EndTimeIn,
                Id                         = i.Id,
                HoursIn                    = i.HoursIn,
                HoursOut                   = i.HoursOut,
                Month                      = i.Month,
                Name                       = i.Name,
                NameShifts                 = i.NameShifts,
                Sale_BranchId              = i.Sale_BranchId,
                ShiftsId                   = i.ShiftsId,
                StaffId                    = i.StaffId,
                StartTime                  = i.StartTime,
                StartTimeOut               = i.StartTimeOut,
                Symbol                     = i.Symbol,
                Timekeeping                = i.Timekeeping,
                Total_minute_work          = i.Total_minute_work,
                Total_minute_work_early    = i.Total_minute_work_early,
                Total_minute_work_late     = i.Total_minute_work_late,
                Total_minute_work_overtime = i.Total_minute_work_overtime,
                UserEnrollNumber           = i.UserEnrollNumber,
                Year                       = i.Year,
                TimekeepingListId          = i.TimekeepingListId,
                Absent                     = i.Absent
            }).OrderBy(x => x.ShiftsId).ToList();
            //lấy danh sách nhân viên trong phòng ban, nên lấy theo danh sách phân công để chính xác
            var StaffList = timekeepingList
                            .GroupBy(x => new { x.StaffId }, (key, group) => new WorkSchedulesViewModel
            {
                StaffId           = key.StaffId,
                Code              = group.FirstOrDefault().Code,
                Name              = group.FirstOrDefault().Name,
                Id                = group.FirstOrDefault().Id,
                TimekeepingListId = group.FirstOrDefault().TimekeepingListId,
                Year              = group.FirstOrDefault().Year,
                Month             = group.FirstOrDefault().Month
            }).ToList();

            //lấy danh sách ngày lễ trog năm
            var holiday = holidayRepository.GetAllHolidays();
            //lấy danh sách các ngày cần xem chấm công
            var datesNghiBu        = new List <DateTime>();
            var datesNghiLe        = new List <DateTime>();
            var datesTatCaNgayNghi = new List <DateTime>();
            //dựa vào tháng, năm truyền vào lấy ngày bắt đầu, kết thúc của tháng
            DateTime aDateTime = new DateTime(Year.Value, Month.Value, 1);
            // Cộng thêm 1 tháng và trừ đi một ngày.
            DateTime retDateTime = aDateTime.AddMonths(1).AddDays(-1);

            // ..duyệt từng ngày
            for (DateTime dt = aDateTime; dt <= retDateTime; dt = dt.AddDays(1))
            {
                //nếu là ngày nghỉ bù của ngày lễ thì thêm vào list datesNghiBu
                if (holiday.Where(x => x.DayStart <= dt && dt <= x.DayEnd && x.DayOffset == true).Count() > 0)
                {
                    datesNghiBu.Add(dt);
                }
                //nếu là ngày nghỉ lễ thì thêm váo list datesNghiLe
                if (holiday.Where(x => x.DayStart <= dt && dt <= x.DayEnd && x.DayOffset != true).Count() > 0)
                {
                    datesNghiLe.Add(dt);
                }
                //lấy danh sách tất cả ngày nghỉ
                if (holiday.Where(x => x.DayStart <= dt && dt <= x.DayEnd).Count() > 0)
                {
                    datesTatCaNgayNghi.Add(dt);
                }
            }
            // ngày nghỉ mặc định trong tuần... theo từng công ty khác nhau thì ngày nghỉ khác nhau.
            var DayOff = categoryRepository.GetCategoryByCode("DayOffDefault").Where(x => x.Value == "True").AsEnumerable().ToList();

            //duyệt danh sách nhân viên
            foreach (var item in StaffList)
            {
                var timekeepingSynthesis = new TimekeepingSynthesis();
                //kiểm tra xem nhân viên có được tổng hợp chấm công theo tháng đó chưa>>> nếu có chỉ cập nhật lại.
                var list = timekeepingSynthesisRepository.GetTimekeepingSynthesisByStaff(item.StaffId.Value, item.Month.Value, item.Year.Value);
                if (list != null)
                {
                    timekeepingSynthesisRepository.DeleteTimekeepingSynthesis(list.Id);
                }
                //dựa vào bảng workSchedules tổng hợp chấm công
                timekeepingSynthesis.IsDeleted      = false;
                timekeepingSynthesis.CreatedUserId  = WebSecurity.CurrentUserId;
                timekeepingSynthesis.ModifiedUserId = WebSecurity.CurrentUserId;
                timekeepingSynthesis.AssignedUserId = WebSecurity.CurrentUserId;
                timekeepingSynthesis.CreatedDate    = DateTime.Now;
                timekeepingSynthesis.ModifiedDate   = DateTime.Now;
                //tính số phút về sớm
                timekeepingSynthesis.GioVeSom = Math.Round(timekeepingList.Where(x => x.StaffId == item.StaffId).Sum(x => Convert.ToDouble(x.Total_minute_work_early)) / Convert.ToDouble(60), 2);
                //tính giờ đi trễ.
                timekeepingSynthesis.GioDiTre = Math.Round(timekeepingList.Where(x => x.StaffId == item.StaffId).Sum(x => Convert.ToDouble(x.Total_minute_work_late)) / Convert.ToDouble(60), 2);
                //lưu lại id chấm công của tháng đó
                timekeepingSynthesis.TimekeepingListId = item.TimekeepingListId;
                //tính ngày nghỉ phép.
                //timekeeping là có tính công
                //absent là vắng group by theo ngày để đếm (vì 1 ngày có thể làm nhiều ca khác nhau.)
                timekeepingSynthesis.NgayNghiCoPhep = timekeepingList.Where(x => x.StaffId == item.StaffId && x.Timekeeping == true && x.Absent == true).GroupBy(x => x.Day).Count();
                //
                var aaa = timekeepingList.Where(x => x.StaffId == item.StaffId);
                List <WorkSchedulesViewModel> listIdDayWork = aaa.Where(id1 => !DayOff.Any(id2 => id2.OrderNo.Value.ToString() == id1.Day.Value.DayOfWeek.ToString())).ToList();
                List <WorkSchedulesViewModel> listIdDayOff  = aaa.Where(id1 => DayOff.Any(id2 => id2.OrderNo.Value.ToString() == id1.Day.Value.DayOfWeek.ToString())).ToList();
                List <WorkSchedulesViewModel> listIdNgayLe  = aaa.Where(id1 => datesTatCaNgayNghi.Any(id2 => id2.DayOfWeek == id1.Day.Value.DayOfWeek)).ToList();
                //tính tổng số phút làm việc trong ngày thường
                timekeepingSynthesis.TrongGioNgayThuong = Math.Round((listIdDayWork.Sum(x => Convert.ToDouble(x.Total_minute_work))) / Convert.ToDouble(60), 2);
                //tính tổng số phút làm việc trong ngày nghỉ cuối tuần (t7, chủ nhật)
                timekeepingSynthesis.TrongGioNgayNghi = Math.Round((listIdDayOff.Sum(x => Convert.ToDouble(x.Total_minute_work))) / Convert.ToDouble(60), 2);
                //tính tổng số phút làm việc trong ngày lễ
                timekeepingSynthesis.TrongGioNgayLe = Math.Round((listIdNgayLe.Sum(x => Convert.ToDouble(x.Total_minute_work))) / Convert.ToDouble(60), 2);
                //tính tổng số phút tăng ca ngày lễ
                timekeepingSynthesis.TangCaNgayLe = Math.Round((listIdNgayLe.Sum(x => Convert.ToDouble(x.Total_minute_work_overtime))) / Convert.ToDouble(60), 2);
                //tính tổng số phút tăng ca ngày nghỉ
                timekeepingSynthesis.TangCaNgayNghi = Math.Round((listIdDayOff.Sum(x => Convert.ToDouble(x.Total_minute_work_overtime))) / Convert.ToDouble(60), 2);
                //tính tổng số phút tăng ca ngày thường
                timekeepingSynthesis.TangCaNgayThuong = Math.Round((listIdDayWork.Sum(x => Convert.ToDouble(x.Total_minute_work_overtime))) / Convert.ToDouble(60), 2);
                //tính số ngày công thực tế là ngày phân công đi làm.
                int ngay_di_lam  = timekeepingList.Where(x => x.StaffId == item.StaffId && x.Absent == false).GroupBy(x => x.Day).Count();
                int nghi_co_phep = timekeepingList.Where(x => x.StaffId == item.StaffId && x.Absent == true && x.Timekeeping == true).GroupBy(x => x.Day).Count();
                timekeepingSynthesis.NgayCongThucTe = ngay_di_lam + nghi_co_phep;
                //timekeepingSynthesis.NgayNghiKoPhep = item.NgayNghiKhongPhep;
                timekeepingSynthesis.StaffId = item.StaffId;
                //timekeepingSynthesis.TongNgayNghi = item.TongNgayNghi;
                timekeepingSynthesis.Year  = item.Year;
                timekeepingSynthesis.Month = item.Month;
                //tính số phút làm ban đêm
                timekeepingSynthesis.GioCaDem = Math.Round((timekeepingList.Where(x => x.StaffId == item.StaffId && x.NightShifts == true).Sum(x => Convert.ToDouble(x.Total_minute_work))) / Convert.ToDouble(60), 2);
                //đếm số ngày nghỉ bù
                timekeepingSynthesis.SoNgayNghiBu = datesNghiBu.Count();
                //số ngày nghỉ lễ
                timekeepingSynthesis.SoNgayNghiLe = datesNghiLe.Count();
                timekeepingSynthesis.NgayVeSom    = aaa.Where(x => x.DayOffCode == "Sm" || x.DayOffCode == "Tr,Sm").Count();
                timekeepingSynthesis.NgayDiTre    = aaa.Where(x => x.DayOffCode == "Tr" || x.DayOffCode == "Tr,Sm").Count();
                timekeepingSynthesisRepository.InsertTimekeepingSynthesis(timekeepingSynthesis);
            }
        }