示例#1
0
        /// <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;
        }
示例#2
0
        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;
            }
        }