public string FetchStaff(int?StaffId)
        {
            StaffsRepository staffRepository = new StaffsRepository(new ErpStaffDbContext());
            var profileimage = staffRepository.GetvwStaffsById(StaffId.Value);

            return(Erp.BackOffice.Helpers.Common.KiemTraTonTaiHinhAnh(profileimage.ProfileImage, "Staffs", "user"));
        }
        public vwStaffs FetchListStaff(int?StaffId)
        {
            StaffsRepository staffRepository = new StaffsRepository(new ErpStaffDbContext());
            //CategoryRepository categoryRepository = new CategoryRepository(new ErpDbContext());
            vwStaffs staff = staffRepository.GetvwStaffsById(StaffId.Value);

            staff.ProfileImage = Erp.BackOffice.Helpers.Common.KiemTraTonTaiHinhAnh(staff.ProfileImage, "Staff", "user");
            return(staff);
        }
        public IEnumerable <int> FetchListStaffLabourContractType(string LabourContractName, bool?IsSeniority, string BranchId)
        {
            //tìm ds các nhân viên thuộc khu vực và phòng ban
            StaffsRepository staffRepository = new StaffsRepository(new ErpStaffDbContext());
            var listStaffSeniority           = new List <int?>();



            var staff = new List <int>();
            IEnumerable <vwStaffs> listStaffs;

            if (string.IsNullOrEmpty(LabourContractName))
            {
                listStaffs = staffRepository.GetvwAllStaffs().ToList();
            }
            else
            {
                listStaffs = staffRepository.GetvwAllStaffs().ToList();
            }

            if (BranchId != null)
            {
                listStaffs = listStaffs.Where(n => n.DrugStore == BranchId).ToList();
            }
            //listStaffs = staffRepository.GetvwAllStaffs().Where(u => u.LabourContractName == LabourContractName).ToList();

            //if (IsSeniority != null && IsSeniority.Value == true)
            //{
            //    DateTime dateNow = DateTime.Now;
            //    int monthsetup = 5;
            //    if (dateNow.Month <= monthsetup)
            //        listStaffSeniority = salarySeniority.GetAllSalarySeniority()
            //            .Where(n => n.NgayTinhHuong.Value.Month <= monthsetup && n.NgayTinhHuong.Value.Year == dateNow.Year).Select(n => n.StaffId).Distinct().ToList();
            //    else
            //        listStaffSeniority = salarySeniority.GetAllSalarySeniority()
            //            .Where(n => n.NgayTinhHuong.Value.Month > monthsetup && n.NgayTinhHuong.Value.Year == dateNow.Year).Select(n => n.StaffId).Distinct().ToList();

            //    //setup list staff
            //    listStaffs = listStaffs.Where(n => listStaffSeniority.Contains(n.Id));
            //}

            foreach (var item in listStaffs)
            {
                staff.Add(item.Id);
            }
            //staff.Position = Erp.BackOffice.Helpers.Common.GetCategoryByValueCodeOrId("value", staff.Position, "position").Name.ToString();

            return(staff);
        }
Ejemplo n.º 4
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
        }
Ejemplo n.º 5
0
 public StaffsService(StaffsRepository repository)
 {
     _repository = repository;
 }
        public static void SyncCommissionStaff(ProductInvoice model, int?CurrentUserId)
        {
            try
            {
                ProductInvoiceRepository         productInvoiceRepository         = new ProductInvoiceRepository(new ErpSaleDbContext());
                StaffsRepository                 staffRepository                  = new StaffsRepository(new ErpStaffDbContext());
                HistoryCommissionStaffRepository historyCommissionStaffRepository = new HistoryCommissionStaffRepository(new ErpStaffDbContext());
                //lấy danh sách nhà thuốc ra để bắt đầu đồng bộ dữ liệu
                var list_staff = staffRepository.GetvwAllStaffs().Where(x => (x.PositionCode == "ASM" || x.PositionCode == "TDV")).ToList();
                list_staff = list_staff.Where(x => ("," + x.DrugStore + ",").Contains("," + model.BranchId.ToString() + ",") == true).ToList();
                //lấy toàn bộ danh sách hóa đơn trong 1 tháng của tất cả nhà thuốc ra để xử lý 1 lần.
                var list_productInvoice = productInvoiceRepository.GetAllvwProductInvoice().Where(x => x.Month == model.CreatedDate.Value.Month && x.Year == model.CreatedDate.Value.Year && x.IsArchive == true).ToList();
                //lấy list đã insert nếu có
                var list_old = historyCommissionStaffRepository.GetAllHistoryCommissionStaffFull().Where(x => x.Month == model.CreatedDate.Value.Month && x.Year == model.CreatedDate.Value.Year).ToList();
                foreach (var item in list_staff)
                {
                    //lấy danh sách đơn bán hàng của nhà thuốc trong tháng
                    var list_invoice_by_drugStore = list_productInvoice.Where(x => ("," + item.DrugStore + ",").Contains("," + x.BranchId.ToString() + ",") == true).ToList();

                    decimal RevenueDS         = list_invoice_by_drugStore.Sum(x => x.TotalAmount);
                    decimal CommissionPercent = item.CommissionPercent == null ? 0 : item.CommissionPercent.Value;
                    decimal MinimumRevenue    = item.MinimumRevenue == null ? 0 : item.MinimumRevenue.Value;
                    decimal AmountCommission  = (CommissionPercent * RevenueDS) / 100;
                    if (list_old.Where(x => x.StaffId == item.Id).Count() > 0)
                    {
                        var update = list_old.Where(x => x.StaffId == item.Id).FirstOrDefault();
                        update.IsDeleted         = MinimumRevenue > RevenueDS ? true : false;
                        update.ModifiedUserId    = CurrentUserId;
                        update.ModifiedDate      = DateTime.Now;
                        update.StaffId           = item.Id;
                        update.PositionName      = item.PositionName;
                        update.Month             = model.CreatedDate.Value.Month;
                        update.Year              = model.CreatedDate.Value.Year;
                        update.CommissionPercent = CommissionPercent;
                        update.MinimumRevenue    = MinimumRevenue;
                        update.RevenueDS         = RevenueDS;
                        update.AmountCommission  = AmountCommission;
                        update.StaffName         = item.Name;
                        update.StaffParentId     = item.StaffParentId;
                        historyCommissionStaffRepository.UpdateHistoryCommissionStaff(update);
                    }
                    else
                    {
                        //thêm mới vào data.
                        var add = new HistoryCommissionStaff();
                        add.IsDeleted         = MinimumRevenue > RevenueDS ? true : false;
                        add.CreatedUserId     = CurrentUserId;
                        add.ModifiedUserId    = CurrentUserId;
                        add.AssignedUserId    = CurrentUserId;
                        add.CreatedDate       = DateTime.Now;
                        add.ModifiedDate      = DateTime.Now;
                        add.StaffId           = item.Id;
                        add.PositionName      = item.PositionName;
                        add.Month             = model.CreatedDate.Value.Month;
                        add.Year              = model.CreatedDate.Value.Year;
                        add.CommissionPercent = item.CommissionPercent;
                        add.MinimumRevenue    = item.MinimumRevenue;
                        add.RevenueDS         = RevenueDS;
                        add.AmountCommission  = AmountCommission;
                        add.StaffName         = item.Name;
                        add.StaffParentId     = item.StaffParentId;
                        historyCommissionStaffRepository.InsertHistoryCommissionStaff(add);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }