public BookingResponse ReleaseItem(BookingDetailInfor bookingDetailInfor) { using (StageBitzDB dataContext = new StageBitzDB()) { InventoryBL inventoryBL = new InventoryBL(dataContext); ItemBooking itemBooking = inventoryBL.GetItemBooking(bookingDetailInfor.ItemBookingId); BookingResponse bookingResponse = new BookingResponse(); if (itemBooking != null) { if (itemBooking != null && (!(Utils.IsCompanyInventoryAdmin(itemBooking.Item.CompanyId.Value, bookingDetailInfor.UserId) || Utils.IsCompanyInventoryStaffMember(itemBooking.Item.CompanyId.Value, bookingDetailInfor.UserId, itemBooking.Item.LocationId, dataContext)))) { bookingResponse.Status = "NOTOK"; bookingResponse.ErrorCode = (int)ErrorCodes.NoEditPermissionForInventory; bookingResponse.Message = "Could not release the Item."; return(bookingResponse); } bool isSuccess = inventoryBL.RemoveInUseItemFromItemBrief(itemBooking.RelatedId, bookingDetailInfor.UserId); bookingResponse.Status = isSuccess ? "OK" : "NOTOK"; } else { bookingResponse.Status = "NOTOK"; } return(bookingResponse); } }
/// <summary> /// Sends the booking overdue emails. /// </summary> /// <param name="dateToConsider">The date to consider.</param> public static void SendBookingOverdueEmails(DateTime dateToConsider) { using (StageBitzDB dataContext = new StageBitzDB()) { InventoryBL inventoryBL = new InventoryBL(dataContext); int overdueEmailCodeId = Utils.GetCodeIdByCodeValue("EmailTemplateTypeCode", "BOOKINGOVERDUE"); var overdueBookings = (from ibs in dataContext.ItemBookings.Where(ibs => dataContext.IsItemBookingOverdueByDate(ibs.ItemBookingId, dateToConsider)) from eh in dataContext.EmailHistories.Where(eh => ibs.ItemBookingId == eh.RelatedId && eh.RelatedTable == "ItemBooking" && eh.EmailTemplateTypeCodeId == overdueEmailCodeId).DefaultIfEmpty().Take(1) //join ib in dataContext.ItemBriefs on ibs.RelatedId equals ib.ItemBriefId join b in dataContext.Bookings on ibs.BookingId equals b.BookingId from ib in dataContext.ItemBriefs.Where(ib => ib.ItemBriefId == ibs.RelatedId && b.RelatedTable == "Project").DefaultIfEmpty().Take(1) join i in dataContext.Items on ibs.ItemId equals i.ItemId // join b in dataContext.Bookings on ib.ProjectId equals b.RelatedId join cbn in dataContext.CompanyBookingNumbers on b.BookingId equals cbn.BookingId //join p in dataContext.Projects on ib.ProjectId equals p.ProjectId from p in dataContext.Projects.Where(p => p.ProjectId == b.RelatedId && b.RelatedTable == "Project").DefaultIfEmpty().Take(1) from np in dataContext.NonProjectBookings.Where(npb => npb.NonProjectBookingId == b.RelatedId && b.RelatedTable == "NonProject").DefaultIfEmpty().Take(1) where eh == null && ibs.IsActive && i.CompanyId.HasValue && i.CompanyId.Value == cbn.CompanyId group new { Booking = b, CompayBookingNumber = cbn, Project = p, NonProject = np, ItemBooking = ibs } by cbn.CompanyId into grp select new { BookingInfo = grp.GroupBy(g => g.Booking.BookingId). Select(g => new { Booking = g.FirstOrDefault().Booking, CompayBookingNumber = g.FirstOrDefault().CompayBookingNumber, BookingName = g.FirstOrDefault().Project != null ? g.FirstOrDefault().Project.ProjectName : g.FirstOrDefault().NonProject.Name, ItemBookingIds = g.Select(gx => gx.ItemBooking.ItemBookingId), CompanyId = grp.Key }), CompanyId = grp.Key }).ToList(); string userWebUrl = Utils.GetSystemValue("SBUserWebURL"); Dictionary <User, List <dynamic> > userBookings = new Dictionary <User, List <dynamic> >(); foreach (var companyBookings in overdueBookings) { foreach (var bookingInfo in companyBookings.BookingInfo) { foreach (var itemBookingId in bookingInfo.ItemBookingIds) { ItemBooking itemBooking = inventoryBL.GetItemBooking(itemBookingId); if (itemBooking != null) { User locationManager = inventoryBL.GetContactBookingManager(itemBooking.Item.CompanyId.Value, itemBooking.Item.LocationId); if (locationManager != null) { if (userBookings.Keys.Where(ul => ul.UserId == locationManager.UserId).FirstOrDefault() == null) { userBookings[locationManager] = new List <dynamic>(); } User key = userBookings.Keys.Where(ul => ul.UserId == locationManager.UserId).FirstOrDefault(); if (userBookings[key].Where(bi => bi.Booking.BookingId == bookingInfo.Booking.BookingId).FirstOrDefault() == null) { userBookings[key].Add(bookingInfo); } Data.EmailHistory emailHistory = new EmailHistory { EmailTemplateTypeCodeId = overdueEmailCodeId, RelatedId = itemBookingId, RelatedTable = "ItemBooking", CreatedDate = Utils.Now }; dataContext.EmailHistories.AddObject(emailHistory); } } } dataContext.SaveChanges(); } } foreach (User user in userBookings.Keys) { StringBuilder bookingLinks = new StringBuilder(); List <dynamic> bookingInfos = userBookings[user]; foreach (dynamic bookingInfo in bookingInfos) { if (bookingInfo != null) { string url = string.Format("{0}/Inventory/BookingDetails.aspx?BookingId={1}&CompanyId={2}", userWebUrl, bookingInfo.Booking.BookingId, bookingInfo.CompanyId); string link = string.Format("Booking name: <a href='{0}' target='_blank'>{1}</a> - Booking ID: {2} <br />", url, bookingInfo.BookingName, bookingInfo.CompayBookingNumber.BookingNumber); bookingLinks.Append(link); } } EmailSender.SendBookingOverdueEmail(user.Email1, user.FirstName, bookingLinks.ToString()); } } }