/// <summary> /// [Son.Vo] - 20140724 - Lấy dữ liệu BC Tổng Hợp Suất Ăn Của Nhân Viên /// </summary> /// <param name="CarteringIDs"></param> /// <param name="CanteenIDS"></param> /// <param name="LineIDS"></param> /// <param name="DateFrom"></param> /// <param name="DateTo"></param> /// <returns></returns> public List<Can_ReportMealTimeSummaryEntity> ReportMealTimeSummary(List<int?> CarteringIDs, List<int?> CanteenIDS, List<int?> LineIDS, DateTime DateFrom, DateTime DateTo) { #region GetData var lstMealRecord = new List<Can_MealRecord>().ToList(); using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repo = new Can_MealRecordRepository(unitOfWork); lstMealRecord = repo.FindBy(m => (m.TimeLog >= DateFrom || m.TimeLog <= DateTo) && m.CardCode != null).ToList(); } var lstCanteens = new List<Can_Canteen>().ToList(); using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repo = new Can_CanteenRepository(unitOfWork); if (CanteenIDS != null) { lstCanteens = repo.FindBy(s => CanteenIDS.Contains(s.Id)).ToList(); } else lstCanteens = repo.GetAll().ToList(); } var lstCaterings = new List<Can_Catering>().ToList(); using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repo = new Can_CateringRepository(unitOfWork); if (CarteringIDs != null) { lstCaterings = repo.FindBy(s => CarteringIDs.Contains(s.Id)).ToList(); } else lstCaterings = repo.GetAll().ToList(); } var lstLines = new List<Can_Line>().ToList(); using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repo = new Can_LineRepository(unitOfWork); if (LineIDS != null) { lstLines = repo.FindBy(s => LineIDS.Contains(s.Id)).ToList(); } else lstLines = repo.GetAll().ToList(); } #endregion List<Can_ReportMealTimeSummaryEntity> lstReportMealTimeSummary = new List<Can_ReportMealTimeSummaryEntity>(); foreach (var cate in lstCaterings) { Can_ReportMealTimeSummaryEntity ReportAdjustmentMealAllowancePayment = new Can_ReportMealTimeSummaryEntity(); ReportAdjustmentMealAllowancePayment.Catering = cate.CateringName; foreach (var item in lstCanteens) { ReportAdjustmentMealAllowancePayment.Canteen = item.CanteenName; foreach (var line in lstLines) { ReportAdjustmentMealAllowancePayment.Line = line.LineName; ReportAdjustmentMealAllowancePayment.Price = line.Amount.Value; var sum = lstMealRecord.Where(s => s.CateringID == cate.Id && s.CanteenID == cate.Id && s.LineID == line.Id).Sum(s => s.Amount); var rate = lstMealRecord.Where(s => s.CateringID == cate.Id && s.LineID == line.Id).Sum(s => s.Amount) / sum; ReportAdjustmentMealAllowancePayment.TotalAmount = sum != null ? sum.Value : 0; ReportAdjustmentMealAllowancePayment.Rate = rate != null ? rate.Value : 0; lstReportMealTimeSummary.Add(ReportAdjustmentMealAllowancePayment); } } } return lstReportMealTimeSummary; }
public List<Can_ReportMealTimeSummaryEntity> ReportMealTimeSummary(List<Guid> CarteringIDs, List<Guid> CanteenIDS, List<Guid> LineIDS, DateTime DateFrom, DateTime dateEndSearch, List<Guid> OrgIds) { #region GetData using (var context = new VnrHrmDataContext()) { DateTime DateTo = dateEndSearch.AddDays(1).AddMilliseconds(-1); List<Can_ReportMealTimeSummaryEntity> lstReportMealTimeSummary = new List<Can_ReportMealTimeSummaryEntity>(); var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repo = new Can_MealRecordRepository(unitOfWork); var lstMealRecord = repo.FindBy(m => m.CateringID != null && m.WorkDay >= DateFrom && m.WorkDay <= DateTo && m.ProfileID != null).ToList(); if (lstMealRecord.Count < 0) { return lstReportMealTimeSummary; } var lstProfileIdsByMealRecord = lstMealRecord.Select(m => m.ProfileID).ToList(); var repoProfile = new Hre_ProfileRepository(unitOfWork); var profiles = repoProfile.FindBy(m => lstProfileIdsByMealRecord.Contains(m.ID)).ToList(); if (OrgIds != null && OrgIds[0] != Guid.Empty) { profiles = profiles.Where(m => m.OrgStructureID != null && OrgIds.Contains(m.OrgStructureID.Value)).ToList(); } if (CanteenIDS != null && CanteenIDS[0] != Guid.Empty) { lstMealRecord = lstMealRecord.Where(m => m.CanteenID != null && CanteenIDS.Contains(m.CanteenID.Value)).ToList(); } if (CarteringIDs != null && CarteringIDs[0] != Guid.Empty) { lstMealRecord = lstMealRecord.Where(m => m.CateringID != null && CarteringIDs.Contains(m.CateringID.Value)).ToList(); } if (lstMealRecord.Count < 1) { return lstReportMealTimeSummary; } if (LineIDS != null && LineIDS[0] != Guid.Empty) { lstMealRecord = lstMealRecord.Where(m => m.LineID != null && LineIDS.Contains(m.LineID.Value)).ToList(); } if (lstMealRecord.Count < 0) { return lstReportMealTimeSummary; } var repoCatering = new Can_CateringRepository(unitOfWork); var caterings = repoCatering.GetAll().ToList(); var repoLine = new Can_LineRepository(unitOfWork); var lines = repoLine.GetAll().ToList(); var repoCanteen = new Can_CanteenRepository(unitOfWork); var canteens = repoCanteen.GetAll().ToList(); #endregion foreach (var canLine in lines) { var cateIDs = lstMealRecord.Where(s => s.LineID == canLine.ID).Select(s => s.CateringID).Distinct().ToList(); foreach (var catering in caterings.Where(s => cateIDs.Contains(s.ID)).ToList()) { var cantenIDs = lstMealRecord.Where(s => s.LineID == canLine.ID).Select(s => s.CanteenID).Distinct().ToList(); foreach (var canteen in canteens.Where(s => cantenIDs.Contains(s.ID)).ToList()) { Can_ReportMealTimeSummaryEntity ReportMealTimeSummaryEntity = new Can_ReportMealTimeSummaryEntity(); ReportMealTimeSummaryEntity.CateringName = catering != null ? catering.CateringName : string.Empty; ReportMealTimeSummaryEntity.CanteenName = canteen != null ? canteen.CanteenName : string.Empty; ReportMealTimeSummaryEntity.DateFrom = DateFrom; ReportMealTimeSummaryEntity.DateTo = DateTo; ReportMealTimeSummaryEntity.LineName = canLine != null ? canLine.LineName : string.Empty; ReportMealTimeSummaryEntity.Price = (double)(canLine.Amount != null ? canLine.Amount.Value : 0); var count = lstMealRecord.Count(s => canLine != null && (canteen != null && (catering != null && (s.CateringID == catering.ID && s.CanteenID == canteen.ID && s.LineID == canLine.ID)))); var sumAll = lstMealRecord.Where(s => catering != null && catering.ID == s.CateringID).Sum(s => s.Amount); if (count > 0) { ReportMealTimeSummaryEntity.Total = count; } if (canLine.Amount != null) { var amount = count * canLine.Amount; if (amount > 0) ReportMealTimeSummaryEntity.TotalAmount = (double)amount; if (amount > 0) { var rate = (double)(amount / sumAll); ReportMealTimeSummaryEntity.Rate = Math.Round(rate, 6); } } ReportMealTimeSummaryEntity.DatePrint = DateTime.Now; if (ReportMealTimeSummaryEntity.Rate > 0) lstReportMealTimeSummary.Add(ReportMealTimeSummaryEntity); } } } return lstReportMealTimeSummary; } }