/// <summary> /// Sends the booking delayed emails. /// </summary> /// <param name="dateToConsider">The date to consider.</param> public static void SendBookingDelayedEmails(DateTime dateToConsider) { using (StageBitzDB dataContext = new StageBitzDB()) { InventoryBL inventoryBL = new InventoryBL(dataContext); int delayedEmailCodeId = Utils.GetCodeIdByCodeValue("EmailTemplateTypeCode", "BOOKINGDELAYED"); string userWebUrl = Utils.GetSystemValue("SBUserWebURL"); var delayedBookings = (from ibs in dataContext.ItemBookings.Where(ibs => dataContext.IsItemBookingDelayedByDate(ibs.ItemBookingId, dateToConsider)) from eh in dataContext.EmailHistories.Where(eh => ibs.ItemBookingId == eh.RelatedId && eh.RelatedTable == "ItemBooking" && eh.EmailTemplateTypeCodeId == delayedEmailCodeId).DefaultIfEmpty().Take(1) 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) from npb in dataContext.NonProjectBookings.Where(npb => npb.NonProjectBookingId == b.RelatedId && b.RelatedTable == "NonProject").DefaultIfEmpty().Take(1) join i in dataContext.Items on ibs.ItemId equals i.ItemId join u in dataContext.Users on ibs.CreatedBy equals u.UserId where eh == null && ibs.IsActive && i.CompanyId.HasValue select new { ItemBrief = ib, NonProjectBooking = npb, CompanyId = i.CompanyId.Value, CreatedBy = u, ItemBooking = ibs, Item = i }).ToList(); foreach (var delayedBooking in delayedBookings) { User locationManager = inventoryBL.GetContactBookingManager(delayedBooking.Item.CompanyId.Value, delayedBooking.Item.LocationId); if (locationManager != null) { Data.EmailHistory emailHistory = new EmailHistory { EmailTemplateTypeCodeId = delayedEmailCodeId, RelatedId = delayedBooking.ItemBooking.ItemBookingId, RelatedTable = "ItemBooking", CreatedDate = Utils.Now }; dataContext.EmailHistories.AddObject(emailHistory); dataContext.SaveChanges(); string inventoryManagerName = string.Concat(locationManager.FirstName, " ", locationManager.LastName); if (delayedBooking.ItemBrief != null) { string url = string.Format("{0}/ItemBrief/ItemBriefDetails.aspx?ItemBriefId={1}&TabId=3", userWebUrl, delayedBooking.ItemBrief.ItemBriefId); EmailSender.SendBookingDelayedEmail(delayedBooking.CreatedBy.Email1, delayedBooking.CreatedBy.FirstName, delayedBooking.ItemBrief.Name, url, inventoryManagerName, locationManager.Email1); } else { EmailSender.SendBookingDelayedEmailForNonProject(delayedBooking.CreatedBy.Email1, delayedBooking.CreatedBy.FirstName, delayedBooking.NonProjectBooking.Name, inventoryManagerName, locationManager.Email1); } } } } }
/// <summary> /// Gets the item details. /// </summary> /// <param name="itemId">The item identifier.</param> /// <param name="itemBriefId">The item brief identifier.</param> /// <param name="userId">The user identifier.</param> /// <param name="itemTypeIdToBeLoad">The item type identifier to be load.</param> /// <param name="fromDate">From date.</param> /// <param name="toDate">To date.</param> /// <returns></returns> public ItemDetails GetItemDetails(int itemId, int itemBriefId, int userId, int?itemTypeIdToBeLoad, DateTime?fromDate = null, DateTime?toDate = null) { bool isItemCreated = false; bool isReadOnly = false; int itemTypeId = 0; InventoryBL inventoryBL = new InventoryBL(DataContext); ItemBriefBL itemBriefBL = new ItemBriefBL(DataContext); ItemDetails itemDetails = new ItemDetails(); InitializeIds(ref itemId, ref itemBriefId, ref isItemCreated); if (itemId > 0) { StageBitz.Data.Item item = inventoryBL.GetItem(itemId); if (item != null) { ItemBooking itemBooking = null; itemDetails.IsEditableToAdminOnly = true; if (itemBriefId > 0) { ProjectBL projectBL = new ProjectBL(DataContext); itemBooking = itemBriefBL.GetInUseItemBooking(itemBriefId); itemDetails.CanEditInItemBrief = inventoryBL.CanEditIteminItemBrief(itemBriefId, itemId); itemDetails.IsEditableToAdminOnly = inventoryBL.IsItemGeneretedFromGivenItemBrief(itemId, itemBriefId) && !projectBL.IsReadOnlyRightsForProject(itemBriefBL.GetItemBrief(itemBriefId).ProjectId, userId, true); } else { itemDetails.MinQuantity = inventoryBL.GetMaxBookedQuantityForAllDuration(item.ItemId); ItemStatusInformationForUser itemStatusInformationForUser = inventoryBL.GetItemStatusInformationForUser(item, item.CompanyId.Value, userId); isReadOnly = itemStatusInformationForUser.IsReadOnly; itemDetails.IsEditableToAdminOnly = itemStatusInformationForUser.CanEditQuantity; } itemDetails.Name = item.Name; itemDetails.Description = item.Description; itemDetails.LocationId = item.LocationId; itemDetails.Quantity = itemBooking != null ? itemBooking.Quantity : item.Quantity.HasValue ? item.Quantity.Value : item.Quantity; User bookingManager = inventoryBL.GetContactBookingManager(item.CompanyId.Value, item.LocationId); if (bookingManager != null) { itemDetails.BookingManagerName = Utils.GetFullName(bookingManager); itemDetails.BookingManagerEmail = bookingManager.Email1; } if (fromDate.HasValue && toDate.HasValue) { itemDetails.AvailableQty = DataContext.GetAvailableItemQuantity(itemId, fromDate.Value, toDate.Value, 0).FirstOrDefault().Value; } itemDetails.CreatedFor = item.CreatedFor; itemDetails.ItemBriefId = itemBriefId; itemDetails.LastUpdatedDate = item.LastUpdatedDate; itemTypeId = itemTypeIdToBeLoad.HasValue ? itemTypeIdToBeLoad.Value : item.ItemTypeId.Value; itemDetails.LastUpdatedDate = item.LastUpdatedDate; itemDetails.ItemStatus = itemBooking != null?inventoryBL.GetItemBookingStatus(itemBooking.ItemBookingId).Description : string.Empty; itemDetails.ItemId = itemId; itemDetails.ItemValues = GetItemFieldValues(itemId).Select(iv => new ValuesInfo { Id = iv.ItemValueId, FieldId = iv.FieldId, FieldOptionId = iv.FieldOptionId, Value = iv.Value }).ToList(); itemDetails.CountryId = inventoryBL.GetCountryIdByItemId(item.ItemId); itemDetails.ItemTypeId = item.ItemTypeId; itemDetails.Status = "OK"; } } else if (itemBriefId > 0) { Data.ItemVersionHistory itemVersionHistory = inventoryBL.GetItemVersionHistoryByItemBriefId(itemBriefId); itemDetails.ItemBriefId = itemBriefId; if (itemVersionHistory != null) { itemId = itemVersionHistory.ItemId; itemDetails.Name = itemVersionHistory.Name; itemDetails.Description = itemVersionHistory.Description; itemDetails.LocationId = null; //itemVersionHistory.Location; itemDetails.Quantity = itemVersionHistory.Quantity.HasValue ? itemVersionHistory.Quantity.Value : itemDetails.Quantity; itemDetails.IsEditableToAdminOnly = false; itemDetails.ItemBriefId = itemVersionHistory.ItemBriefId; itemDetails.ItemValues = GetItemVersionHistoryValues(itemVersionHistory.ItemVersionHistoryId).Select(ivhv => new ValuesInfo { Id = ivhv.ItemVersionHistoryId, FieldId = ivhv.FieldId, FieldOptionId = ivhv.FieldOptionId, Value = ivhv.Value }).ToList(); itemTypeId = itemTypeIdToBeLoad.HasValue ? itemTypeIdToBeLoad.Value : itemVersionHistory.ItemTypeId.Value; itemDetails.CountryId = inventoryBL.GetCountryIdByItemId(itemVersionHistory.ItemId); itemDetails.ItemTypeId = itemVersionHistory.ItemTypeId; itemDetails.Status = "OK"; } else { StageBitz.Data.ItemBrief itemBrief = itemBriefBL.GetItemBrief(itemBriefId); if (itemBrief != null) { itemDetails.Name = itemBrief.Name; itemDetails.Description = itemBrief.Description; itemDetails.LocationId = null; itemDetails.IsEditableToAdminOnly = true; itemDetails.ItemBriefId = itemBriefId; itemDetails.Quantity = itemBrief.Quantity.HasValue ? itemBrief.Quantity.Value : itemBrief.Quantity; itemDetails.ItemBriefId = itemBrief.ItemBriefId; itemDetails.ItemValues = GetItemBriefFieldValues(itemBriefId).Select(ibfv => new ValuesInfo { Id = 0, FieldId = ibfv.FieldId, FieldOptionId = ibfv.FieldOptionId, Value = ibfv.Value }).ToList(); itemTypeId = itemTypeIdToBeLoad.HasValue ? itemTypeIdToBeLoad.Value : itemBriefBL.GetItemBriefType(itemBrief.ItemBriefId).ItemTypeId; itemDetails.CountryId = itemBriefBL.GetCountryIdByItemBriefId(itemBrief.ItemBriefId); itemDetails.Status = "OK"; itemDetails.CanEditInItemBrief = true; itemDetails.ItemTypeId = itemBrief.ItemBriefTypes.FirstOrDefault().ItemTypeId; } } } itemDetails.IsReadOnly = isReadOnly; itemDetails.DisplayMarkUp = GetItemTypeHTML(itemTypeId); Data.ItemType itemType = Utils.GetItemTypeById(itemDetails.ItemTypeId.Value); itemDetails.ItemTypeName = itemType != null ? itemType.Name : string.Empty; return(itemDetails); }
/// <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()); } } }