public static List <GroupMemberViewModel> BuildGroupMemberViewListFromGroupMemberList(ApplicationDbContext db, List <GroupMember> groupMemberList) { List <GroupMemberViewModel> list = new List <GroupMemberViewModel>(); foreach (GroupMember member in groupMemberList) { Organisation organisaion = OrganisationHelpers.GetOrganisation(db, member.OrganisationId); AppUser addedBy = AppUserHelpers.GetAppUser(db, member.AddedBy); AppUser recordChangedBy = AppUserHelpers.GetAppUser(db, member.RecordChangeBy); GroupMemberViewModel item = new GroupMemberViewModel() { GroupMemberId = member.GroupMemberId, GroupId = member.GroupId, OrganisationDetails = organisaion, AddedBy = addedBy, AddedDateTime = member.AddedDateTime, Status = member.Status, RecordChange = member.RecordChange, RecordChangeOn = member.RecordChangeOn, RecordChangeBy = recordChangedBy }; list.Add(item); } return(list); }
public static OrganisationAdminView GetOrganisationAdminView(ApplicationDbContext db, Guid organisationId) { Organisation org = OrganisationHelpers.GetOrganisation(db, organisationId); OrganisationAdminView view = new OrganisationAdminView() { OrganisationId = org.OrganisationId, OrganisationName = org.OrganisationName, BusinessType = org.BusinessType, AddressLine1 = org.AddressLine1, AddressLine2 = org.AddressLine2, AddressLine3 = org.AddressLine3, AddressTownCity = org.AddressTownCity, AddressCounty = org.AddressCounty, AddressPostcode = org.AddressPostcode, TelephoneNumber = org.TelephoneNumber, Email = org.Email, Website = org.Website, ContactName = org.ContactName, CompanyRegistrationDetails = org.CompanyRegistrationDetails, CharityRegistrationDetails = org.CharityRegistrationDetails, VATRegistrationDetails = org.VATRegistrationDetails, ListingPrivacyLevel = org.ListingPrivacyLevel, PrivacyLevel = org.PrivacyLevel, GroupPrivacyLevel = org.GroupPrivacyLevel }; return(view); }
public static RequiredListing CreateListing(ApplicationDbContext db, RequiredListingManageCreateViewModel model, IPrincipal user) { AppUser thisUser = AppUserHelpers.GetAppUser(db, user); Organisation thisOrg = OrganisationHelpers.GetOrganisation(db, thisUser.OrganisationId); RequiredListing listing = new RequiredListing() { ListingId = Guid.NewGuid(), ItemDescription = model.ItemDescription, ItemCategory = model.ItemCategory, ItemType = model.ItemType, QuantityRequired = model.QuantityRequired.Value, QuantityOutstanding = model.QuantityRequired.Value, UoM = model.UoM, RequiredFrom = model.RequiredFrom, RequiredTo = model.RequiredTo, AcceptDamagedItems = model.AcceptDamagedItems, AcceptOutOfDateItems = model.AcceptOutOfDateItems, CollectionAvailable = model.CollectionAvailable, ListingStatus = ItemEnums.ItemRequiredListingStatusEnum.Open, ListingOrganisationPostcode = thisOrg.AddressPostcode, RecordChange = GeneralEnums.RecordChangeEnum.NewRecord, RecordChangeBy = thisUser.AppUserId, RecordChangeOn = DateTime.Now, ListingOriginatorAppUserId = thisUser.AppUserId, ListingOriginatorOrganisationId = thisOrg.OrganisationId, ListingOriginatorDateTime = DateTime.Now }; db.RequiredListings.Add(listing); db.SaveChanges(); return(listing); }
public static List <GroupMemberViewCreateModel> BuildGroupMemberViewCreateListFromGroupMemberList(ApplicationDbContext db, List <GroupMember> groupMemberList) { List <GroupMemberViewCreateModel> list = new List <GroupMemberViewCreateModel>(); foreach (GroupMember member in groupMemberList) { Organisation organisaion = OrganisationHelpers.GetOrganisation(db, member.OrganisationId); GroupMemberViewCreateModel item = new GroupMemberViewCreateModel() { GroupMemberId = member.GroupMemberId, GroupId = member.GroupId, OrganisationId = member.OrganisationId, OrganisationName = organisaion.OrganisationName, BusinessType = organisaion.BusinessType, AddressLine1 = organisaion.AddressLine1, AddressTownCity = organisaion.AddressTownCity, AddressPostcode = organisaion.AddressPostcode }; list.Add(item); } return(list); }
public static Offer AcceptOffer(ApplicationDbContext db, Guid offerId, IPrincipal user) { Offer offer = db.Offers.Find(offerId); AppUser appUser = AppUserHelpers.GetAppUser(db, user); Order order = OrderHelpers.CreateOrder(db, offer, user); offer.OfferStatus = OfferStatusEnum.Accepted; offer.AcceptedBy = appUser.AppUserId; offer.AcceptedOn = DateTime.Now; offer.OrderId = order.OrderId; offer.OrderOriginatorAppUserId = appUser.AppUserId; offer.OrderOriginatorOrganisationId = appUser.OrganisationId; offer.OrderOriginatorDateTime = DateTime.Now; db.Entry(offer).State = EntityState.Modified; db.SaveChanges(); //set any related actions to Closed NotificationHelpers.RemoveNotificationsForOffer(db, offerId, user); //set any related current offers to closed if there is no stock left (currentOfferQuantity = 0) if (offer.CurrentOfferQuantity == 0) { OfferHelpers.CloseOffersRelatedToListing(db, offer.ListingId, user); } //Create Action to show order ready Organisation org = OrganisationHelpers.GetOrganisation(db, offer.OfferOriginatorOrganisationId); NotificationHelpers.CreateNotification(db, NotificationTypeEnum.NewOrderReceived, "New order received from " + org.OrganisationName, order.OrderId, appUser.AppUserId, org.OrganisationId, user); return(offer); }
public static Offer CreateOffer(ApplicationDbContext db, Guid listingId, decimal?offerQty, ListingTypeEnum listingType, AppUser currentUser, IPrincipal user) { if (currentUser == null) { currentUser = AppUserHelpers.GetAppUser(db, user); } Guid listingOrigAppUserId = Guid.Empty; Guid listingOrigOrgId = Guid.Empty; DateTime listingOrigDateTime = DateTime.MinValue; string itemDescription = ""; //Get originator information for the correct listing if (listingType == ListingTypeEnum.Available) { AvailableListing availableListing = AvailableListingHelpers.GetAvailableListing(db, listingId); listingOrigAppUserId = availableListing.ListingOriginatorAppUserId; listingOrigOrgId = availableListing.ListingOriginatorOrganisationId; listingOrigDateTime = availableListing.ListingOriginatorDateTime; itemDescription = availableListing.ItemDescription; } else { RequiredListing requiredListing = RequiredListingHelpers.GetRequiredListing(db, listingId); listingOrigAppUserId = requiredListing.ListingOriginatorAppUserId; listingOrigOrgId = requiredListing.ListingOriginatorOrganisationId; listingOrigDateTime = requiredListing.ListingOriginatorDateTime; itemDescription = requiredListing.ItemDescription; } //create offer Offer offer = new Offer() { OfferId = Guid.NewGuid(), ListingId = listingId, ListingType = listingType, OfferStatus = OfferStatusEnum.New, ItemDescription = itemDescription, CurrentOfferQuantity = offerQty.Value, OfferOriginatorAppUserId = currentUser.AppUserId, OfferOriginatorOrganisationId = currentUser.OrganisationId, OfferOriginatorDateTime = DateTime.Now, ListingOriginatorAppUserId = listingOrigAppUserId, ListingOriginatorOrganisationId = listingOrigOrgId, ListingOriginatorDateTime = listingOrigDateTime }; db.Offers.Add(offer); db.SaveChanges(); //Create Action Organisation org = OrganisationHelpers.GetOrganisation(db, currentUser.OrganisationId); NotificationHelpers.CreateNotification(db, NotificationTypeEnum.NewOfferReceived, "New offer received from " + org.OrganisationName, offer.OfferId, listingOrigAppUserId, listingOrigOrgId, user); return(offer); }
public static Offer UpdateOffer(ApplicationDbContext db, Guid offerid, OfferStatusEnum offerStatus, decimal?currentOfferQuantity, decimal?counterOfferQuantity, IPrincipal user) { Offer offer = OfferHelpers.GetOffer(db, offerid); switch (offerStatus) { case OfferStatusEnum.Reoffer: //update offer value and move counter value to previous if (currentOfferQuantity.HasValue) { offer.CurrentOfferQuantity = currentOfferQuantity.Value; offer.PreviousCounterOfferQuantity = offer.CounterOfferQuantity; offer.CounterOfferQuantity = null; offer.LastOfferOriginatorAppUserId = AppUserHelpers.GetAppUserIdFromUser(user); offer.LastOfferOriginatorDateTime = DateTime.Now; offer.OfferStatus = offerStatus; db.Entry(offer).State = EntityState.Modified; db.SaveChanges(); } break; case OfferStatusEnum.Countered: //update counter value and move current offer to previous offer if (counterOfferQuantity.HasValue) { offer.CounterOfferQuantity = counterOfferQuantity; offer.PreviousOfferQuantity = offer.CurrentOfferQuantity; offer.CurrentOfferQuantity = 0.00M; if (!offer.CounterOfferOriginatorOrganisationId.HasValue) { AppUser appUser = AppUserHelpers.GetAppUser(db, AppUserHelpers.GetAppUserIdFromUser(user)); offer.CounterOfferOriginatorAppUserId = appUser.AppUserId; offer.CounterOfferOriginatorDateTime = DateTime.Now; offer.CounterOfferOriginatorOrganisationId = appUser.OrganisationId; } else { offer.LastCounterOfferOriginatorAppUserId = AppUserHelpers.GetAppUserIdFromUser(user); offer.LastCounterOfferOriginatorDateTime = DateTime.Now; } offer.OfferStatus = offerStatus; db.Entry(offer).State = EntityState.Modified; db.SaveChanges(); } break; } //Create Action Organisation org = OrganisationHelpers.GetOrganisation(db, AppUserHelpers.GetAppUser(db, AppUserHelpers.GetAppUserIdFromUser(user)).OrganisationId); NotificationHelpers.CreateNotification(db, NotificationTypeEnum.NewOfferReceived, "New offer received from " + org.OrganisationName, offer.OfferId, offer.ListingOriginatorAppUserId.Value, offer.ListingOriginatorOrganisationId.Value, user); return(offer); }
public static List <GroupViewModel> GetGroupsViewContainingOrg(ApplicationDbContext db, EntityStatusEnum memberStatus, IPrincipal user) { List <GroupViewModel> groupsViewContainingOrg = new List <GroupViewModel>(); //get organisation from User Organisation organisation = OrganisationHelpers.GetOrganisation(db, AppUserHelpers.GetOrganisationIdFromUser(db, user)); //get list of groups containing this organisation List <Group> groupsContainingOrg = GroupHelpers.GetGroupsContainingOrg(db, organisation.OrganisationId, memberStatus); //build view foreach (Group group in groupsContainingOrg) { //Build members view for this group (NOTE, this will not be added to for this list as this is just a list of groups we are part of, no need currently to show the members. List <GroupMemberViewModel> membersView = new List <GroupMemberViewModel>(); //If we do need to show the members then change this to "List<GroupMemberViewModel> membersView = GroupMembersViewHelpers.GetGroupMembersViewForGroup(db, group.GroupId);" //Build objects of guid details AppUser recordChangedBy = AppUserHelpers.GetAppUser(db, group.RecordChangeBy); AppUser groupOriginatorAppUser = AppUserHelpers.GetAppUser(db, group.GroupOriginatorAppUserId); Organisation groupOriginatorOrganisation = OrganisationHelpers.GetOrganisation(db, group.GroupOriginatorOrganisationId); //Build group view GroupViewModel groupView = new GroupViewModel() { GroupId = group.GroupId, Name = group.Name, InviteLevel = group.InviteLevel, VisibilityLevel = group.VisibilityLevel, AcceptanceLevel = group.AcceptanceLevel, EntityStatus = group.EntityStatus, RecordChange = group.RecordChange, RecordChangeOn = group.RecordChangeOn, RecordChangeBy = recordChangedBy, GroupOriginatorAppUser = groupOriginatorAppUser, GroupOriginatorOrganisation = groupOriginatorOrganisation, GroupOriginatorDateTime = group.GroupOriginatorDateTime, GroupMembers = membersView }; groupsViewContainingOrg.Add(groupView); } return(groupsViewContainingOrg); }
public static List <GroupViewModel> GetGroupsViewCreatedByOrg(ApplicationDbContext db, IPrincipal user) { List <GroupViewModel> groupsViewCreatedByOrg = new List <GroupViewModel>(); //get organisation from User Organisation organisation = OrganisationHelpers.GetOrganisation(db, AppUserHelpers.GetOrganisationIdFromUser(db, user)); //get list of groups created by this organisation List <Group> groupsCreatedByOrg = GroupHelpers.GetGroupsCreatedByOrg(db, organisation.OrganisationId); //build view foreach (Group group in groupsCreatedByOrg) { //Build members view for this group List <GroupMemberViewModel> membersView = GroupMembersViewHelpers.GetGroupMembersViewForGroup(db, group.GroupId); //Build objects of guid details AppUser recordChangedBy = AppUserHelpers.GetAppUser(db, group.RecordChangeBy); AppUser groupOriginatorAppUser = AppUserHelpers.GetAppUser(db, group.GroupOriginatorAppUserId); Organisation groupOriginatorOrganisation = OrganisationHelpers.GetOrganisation(db, group.GroupOriginatorOrganisationId); //Build group view GroupViewModel groupView = new GroupViewModel() { GroupId = group.GroupId, Name = group.Name, InviteLevel = group.InviteLevel, VisibilityLevel = group.VisibilityLevel, AcceptanceLevel = group.AcceptanceLevel, EntityStatus = group.EntityStatus, RecordChange = group.RecordChange, RecordChangeOn = group.RecordChangeOn, RecordChangeBy = recordChangedBy, GroupOriginatorAppUser = groupOriginatorAppUser, GroupOriginatorOrganisation = groupOriginatorOrganisation, GroupOriginatorDateTime = group.GroupOriginatorDateTime, GroupMembers = membersView }; groupsViewCreatedByOrg.Add(groupView); } return(groupsViewCreatedByOrg); }
public static SelectList OrganisationsListForGroupDropDown(ApplicationDbContext db, Guid groupId) { List <Organisation> allOrganisations = OrganisationHelpers.GetAllOrganisations(db); List <GroupMember> members = GroupMembersHelpers.GetGroupMembersForGroup(db, groupId); //remove the group orgs from the allOrganisation list foreach (GroupMember member in members) { Organisation org = OrganisationHelpers.GetOrganisation(db, member.OrganisationId); allOrganisations.Remove(org); } //Build custom selectable data to hold org name and address return(new SelectList( allOrganisations.Select( o => new { OrganisationId = o.OrganisationId, OrganisationDetails = o.OrganisationName + ": " + o.AddressLine1 + ", " + o.AddressTownCity }), "OrganisationId", "OrganisationDetails")); }
public static List <AvailableListing> FilterAvailableListingsByDistance(ApplicationDbContext db, List <AvailableListing> currentList, Guid organisationId, int maxDistanceFilter) { //get this organisation post code to match against those of the listed organisations Organisation thisOrganisation = OrganisationHelpers.GetOrganisation(db, organisationId); //hold list of organisationIds already checked - set to true if within range Dictionary <Guid, bool> listingOrgIds = new Dictionary <Guid, bool>(); //hold new list from old List <AvailableListing> newList = new List <AvailableListing>(); foreach (AvailableListing item in currentList) { //if we have checked this org before then just add or not depending on flag if (listingOrgIds.ContainsKey(item.ListingOriginatorOrganisationId)) { if (listingOrgIds[item.ListingOriginatorOrganisationId]) { newList.Add(item); } } else //add the org to the dictionary with the flag set and add to new list if within range { int distanceValue = DistanceHelpers.GetDistance(thisOrganisation.AddressPostcode, item.ListingOrganisationPostcode); if (distanceValue <= maxDistanceFilter) { listingOrgIds.Add(item.ListingOriginatorOrganisationId, true); newList.Add(item); } else { listingOrgIds.Add(item.ListingOriginatorOrganisationId, false); } } } return(newList); }
public static AvailableListing CreateListing(ApplicationDbContext db, AvailableListingManageCreateViewModel model, IPrincipal user) { AppUser thisUser = AppUserHelpers.GetAppUser(db, user); Organisation thisOrg = OrganisationHelpers.GetOrganisation(db, thisUser.OrganisationId); AvailableListing listing = new AvailableListing() { ListingId = Guid.NewGuid(), ItemDescription = model.ItemDescription, ItemCategory = model.ItemCategory, ItemType = model.ItemType, QuantityAvailable = model.QuantityAvailable.Value, QuantityOutstanding = model.QuantityAvailable.Value, UoM = model.UoM, AvailableFrom = model.AvailableFrom, AvailableTo = model.AvailableTo, ItemCondition = model.ItemCondition, DisplayUntilDate = model.DisplayUntilDate, SellByDate = model.SellByDate, UseByDate = model.UseByDate, DeliveryAvailable = model.DeliveryAvailable, ListingStatus = ItemEnums.ItemRequiredListingStatusEnum.Open, ListingOrganisationPostcode = thisOrg.AddressPostcode, RecordChange = GeneralEnums.RecordChangeEnum.NewRecord, RecordChangeBy = thisUser.AppUserId, RecordChangeOn = DateTime.Now, ListingOriginatorAppUserId = thisUser.AppUserId, ListingOriginatorOrganisationId = thisOrg.OrganisationId, ListingOriginatorDateTime = DateTime.Now }; db.AvailableListings.Add(listing); db.SaveChanges(); return(listing); }
//AppUser/Profile public static AppUserProfileView CreateAppUserProfileView(ApplicationDbContext db, Guid appUserId) { AppUser appUser = AppUserHelpers.GetAppUser(db, appUserId); if (appUser == null) { return(null); } AppUserProfileView view = new AppUserProfileView() { AppUserId = appUser.AppUserId, FirstName = appUser.FirstName, LastName = appUser.LastName, EntityStatus = appUser.EntityStatus, LoginEmail = appUser.LoginEmail, PrivacyLevel = appUser.PrivacyLevel, UserRole = appUser.UserRole, SelectedOrganisationId = appUser.OrganisationId }; if (appUser.OrganisationId != Guid.Empty) { Organisation org = OrganisationHelpers.GetOrganisation(db, appUser.OrganisationId); view.OrganisationName = org.OrganisationName; view.BusinessType = org.BusinessType; view.AddressLine1 = org.AddressLine1; view.AddressLine2 = org.AddressLine2; view.AddressLine3 = org.AddressLine3; view.AddressTownCity = org.AddressTownCity; view.AddressCounty = org.AddressCounty; view.AddressPostcode = org.AddressPostcode; } return(view); }
public static HomeDashboardView CreateHomeDashboardView(ApplicationDbContext db, IPrincipal user) { HomeDashboardView view = new HomeDashboardView(); Organisation currentOrg = OrganisationHelpers.GetOrganisation(db, AppUserHelpers.GetOrganisationIdFromUser(db, user)); DateTime weekAgo = DateTime.Now.AddDays(-7); DateTime dayAgo = DateTime.Now.AddDays(-1); List <Notification> openNotifications = NotificationHelpers.GetNotificationsForOrganisationFromUser(db, user, false); view.OpenNotifications = openNotifications.Count; view.OpenNotificationsThisWeek = (from oN in openNotifications where oN.RecordChangeOn >= weekAgo select oN).Count(); if (view.OpenNotificationsThisWeek == 0) { view.OpenNotificationsThisWeekPercent = 0; } else { view.OpenNotificationsThisWeekPercent = (Convert.ToDecimal(view.OpenNotificationsThisWeek) / Convert.ToDecimal(view.OpenNotifications)) * 100; } view.OpenNotificationsPastDay = (from oN in openNotifications where oN.RecordChangeOn >= dayAgo select oN).Count(); if (view.OpenNotificationsPastDay == 0) { view.OpenNotificationsPastDayPercent = 0; } else { view.OpenNotificationsPastDayPercent = (Convert.ToDecimal(view.OpenNotificationsPastDay) / Convert.ToDecimal(view.OpenNotifications)) * 100; } List <UserTask> openUserTasks = UserTasksHelpers.GetUserTasksForOrganisationFromUser(db, user, false); view.OpenTasks = openUserTasks.Count; view.OpenTasksThisWeek = (from oT in openUserTasks where oT.RecordChangeOn >= weekAgo select oT).Count(); if (view.OpenTasksThisWeek == 0) { view.OpenTasksThisWeekPercent = 0; } else { view.OpenTasksThisWeekPercent = (Convert.ToDecimal(view.OpenTasksThisWeek) / Convert.ToDecimal(view.OpenTasks)) * 100; } view.OpenTasksPastDay = (from oT in openUserTasks where oT.RecordChangeOn >= dayAgo select oT).Count(); if (view.OpenTasksPastDay == 0) { view.OpenTasksPastDayPercent = 0; } else { view.OpenTasksPastDayPercent = (Convert.ToDecimal(view.OpenTasksPastDay) / Convert.ToDecimal(view.OpenTasks)) * 100; } List <Offer> offersCreated = OfferHelpers.GetOpenOffersCreatedForOrganisation(db, currentOrg.OrganisationId); view.OffersCreatedOpen = offersCreated.Count; view.OffersCreatedCountered = (from oC in offersCreated where oC.OfferStatus == OfferStatusEnum.Countered select oC).Count(); if (view.OffersCreatedCountered == 0) { view.OffersCreatedCounteredPercent = 0; } else { view.OffersCreatedCounteredPercent = (Convert.ToDecimal(view.OffersCreatedCountered) / Convert.ToDecimal(view.OffersCreatedOpen)) * 100; } view.OffersCreatedReOffered = (from oC in offersCreated where oC.OfferStatus == OfferStatusEnum.Reoffer select oC).Count(); if (view.OffersCreatedReOffered == 0) { view.OffersCreatedReOfferedPercent = 0; } else { view.OffersCreatedReOfferedPercent = (Convert.ToDecimal(view.OffersCreatedReOffered) / Convert.ToDecimal(view.OffersCreatedOpen)) * 100; } List <Offer> offersCreatedClosed = OfferHelpers.GetAllOffersCreatedClosedForWeekForOrganisation(db, currentOrg.OrganisationId); view.OffersCreatedAcceptedThisWeek = (from oCC in offersCreatedClosed where oCC.OfferStatus == OfferStatusEnum.Accepted select oCC).Count(); view.OffersCreatedRejectedThisWeek = (from oCC in offersCreatedClosed where oCC.OfferStatus == OfferStatusEnum.Rejected select oCC).Count(); view.OffersCreatedClosedThisWeek = (from oCC in offersCreatedClosed where oCC.OfferStatus == OfferStatusEnum.ClosedNoStock select oCC).Count(); view.OffersCreatedClosedTotalThisWeek = view.OffersCreatedAcceptedThisWeek + view.OffersCreatedRejectedThisWeek + view.OffersCreatedClosedThisWeek; if (view.OffersCreatedAcceptedThisWeek == 0) { view.OffersCreatedAcceptedThisWeekPercent = 0; } else { view.OffersCreatedAcceptedThisWeekPercent = (Convert.ToDecimal(view.OffersCreatedAcceptedThisWeek) / Convert.ToDecimal(view.OffersCreatedClosedTotalThisWeek)) * 100; } if (view.OffersCreatedRejectedThisWeek == 0) { view.OffersCreatedRejectedThisWeekPercent = 0; } else { view.OffersCreatedRejectedThisWeekPercent = (Convert.ToDecimal(view.OffersCreatedRejectedThisWeek) / Convert.ToDecimal(view.OffersCreatedClosedTotalThisWeek)) * 100; } if (view.OffersCreatedClosedThisWeek == 0) { view.OffersCreatedClosedThisWeekPercent = 0; } else { view.OffersCreatedClosedThisWeekPercent = (Convert.ToDecimal(view.OffersCreatedClosedThisWeek) / Convert.ToDecimal(view.OffersCreatedClosedTotalThisWeek)) * 100; } List <Offer> offersReceived = OfferHelpers.GetOpenOffersReceivedForOrganisation(db, currentOrg.OrganisationId); view.OffersReceivedOpen = offersReceived.Count; view.OffersReceivedCountered = (from oR in offersReceived where oR.OfferStatus == OfferStatusEnum.Countered select oR).Count(); if (view.OffersReceivedCountered == 0) { view.OffersReceivedCounteredPercent = 0; } else { view.OffersReceivedCounteredPercent = (Convert.ToDecimal(view.OffersReceivedCountered) / Convert.ToDecimal(view.OffersReceivedOpen)) * 100; } view.OffersReceivedReOffered = (from oR in offersReceived where oR.OfferStatus == OfferStatusEnum.Reoffer select oR).Count(); if (view.OffersReceivedReOffered == 0) { view.OffersReceivedReOfferedPercent = 0; } else { view.OffersReceivedReOfferedPercent = (Convert.ToDecimal(view.OffersReceivedReOffered) / Convert.ToDecimal(view.OffersReceivedOpen)) * 100; } List <Offer> offersReceivedClosed = OfferHelpers.GetAllOffersReceivedClosedForWeekForOrganisation(db, currentOrg.OrganisationId); view.OffersReceivedAcceptedThisWeek = (from oRC in offersReceived where oRC.OfferStatus == OfferStatusEnum.Accepted select oRC).Count(); view.OffersReceivedRejectedThisWeek = (from oRC in offersReceived where oRC.OfferStatus == OfferStatusEnum.Rejected select oRC).Count(); view.OffersReceivedClosedThisWeek = (from oRC in offersReceived where oRC.OfferStatus == OfferStatusEnum.ClosedNoStock select oRC).Count(); view.OffersReceivedClosedTotalThisWeek = view.OffersReceivedAcceptedThisWeek + view.OffersReceivedRejectedThisWeek + view.OffersReceivedClosedThisWeek; if (view.OffersReceivedAcceptedThisWeek == 0) { view.OffersReceivedAcceptedThisWeekPercent = 0; } else { view.OffersReceivedAcceptedThisWeekPercent = (Convert.ToDecimal(view.OffersReceivedAcceptedThisWeek) / Convert.ToDecimal(view.OffersReceivedClosedTotalThisWeek)) * 100; } if (view.OffersReceivedRejectedThisWeek == 0) { view.OffersReceivedRejectedThisWeekPercent = 0; } else { view.OffersReceivedRejectedThisWeekPercent = (Convert.ToDecimal(view.OffersReceivedRejectedThisWeek) / Convert.ToDecimal(view.OffersReceivedClosedTotalThisWeek)) * 100; } if (view.OffersReceivedClosedThisWeek == 0) { view.OffersReceivedClosedThisWeekPercent = 0; } else { view.OffersReceivedClosedThisWeekPercent = (Convert.ToDecimal(view.OffersReceivedClosedThisWeek) / Convert.ToDecimal(view.OffersReceivedClosedTotalThisWeek)) * 100; } view.OrdersInOpen = OrderHelpers.GetOrdersInForOganisationCount(db, currentOrg.OrganisationId); List <Order> ordersIn = OrderHelpers.GetOrdersInForWeekForOrganisation(db, currentOrg.OrganisationId); view.OrdersInCollectedThisWeek = (from oI in ordersIn where oI.OrderInStatus == OrderInStatusEnum.Collected select oI).Count(); view.OrdersInReceivedThisWeek = (from oI in ordersIn where oI.OrderInStatus == OrderInStatusEnum.Received select oI).Count(); view.OrdersInClosedThisWeek = (from oI in ordersIn where oI.OrderInStatus == OrderInStatusEnum.Closed select oI).Count(); int ordersInClosedCount = view.OrdersInCollectedThisWeek + view.OrdersInReceivedThisWeek + view.OrdersInClosedThisWeek; if (view.OrdersInCollectedThisWeek == 0) { view.OrdersInCollectedThisWeekPercent = 0; } else { view.OrdersInCollectedThisWeekPercent = (Convert.ToDecimal(view.OrdersInCollectedThisWeek) / Convert.ToDecimal(ordersInClosedCount)) * 100; } if (view.OrdersInReceivedThisWeek == 0) { view.OrdersInReceivedThisWeekPercent = 0; } else { view.OrdersInReceivedThisWeekPercent = (Convert.ToDecimal(view.OrdersInReceivedThisWeek) / Convert.ToDecimal(ordersInClosedCount)) * 100; } if (view.OrdersInClosedThisWeek == 0) { view.OrdersInClosedThisWeekPercent = 0; } else { view.OrdersInClosedThisWeekPercent = (Convert.ToDecimal(view.OrdersInClosedThisWeek) / Convert.ToDecimal(ordersInClosedCount)) * 100; } view.OrdersOutOpen = OrderHelpers.GetOrdersOutForOganisationCount(db, currentOrg.OrganisationId); List <Order> ordersOut = OrderHelpers.GetOrdersOutForWeekForOganisation(db, currentOrg.OrganisationId); view.OrdersOutDespatchedThisWeek = (from oO in ordersOut where oO.OrderOutStatus == OrderOutStatusEnum.Dispatched select oO).Count(); view.OrdersOutDeliveredThisWeek = (from oO in ordersOut where oO.OrderOutStatus == OrderOutStatusEnum.Delivered select oO).Count(); view.OrdersOutClosedThisWeek = (from oO in ordersOut where oO.OrderOutStatus == OrderOutStatusEnum.Closed select oO).Count(); int ordersOutClosedCount = view.OrdersOutDespatchedThisWeek + view.OrdersOutDeliveredThisWeek + view.OrdersOutClosedThisWeek; if (view.OrdersOutDespatchedThisWeek == 0) { view.OrdersOutDespatchedThisWeekPercent = 0; } else { view.OrdersOutDespatchedThisWeekPercent = (Convert.ToDecimal(view.OrdersOutDespatchedThisWeek) / Convert.ToDecimal(ordersOutClosedCount)) * 100; } if (view.OrdersOutDeliveredThisWeek == 0) { view.OrdersOutDeliveredThisWeekPercent = 0; } else { view.OrdersOutDeliveredThisWeekPercent = (Convert.ToDecimal(view.OrdersOutDeliveredThisWeek) / Convert.ToDecimal(ordersOutClosedCount)) * 100; } if (view.OrdersOutClosedThisWeek == 0) { view.OrdersOutClosedThisWeekPercent = 0; } else { view.OrdersOutClosedThisWeekPercent = (Convert.ToDecimal(view.OrdersOutClosedThisWeek) / Convert.ToDecimal(ordersOutClosedCount)) * 100; } return(view); }
public static AvailableListingDetailsViewModel CreateAvailableListingDetailsViewModel(ApplicationDbContext db, Guid listingId, string breadcrumb, bool displayOnly, HttpRequestBase request, string controllerValue, string actionValue, string callingActionDisplayName, Dictionary <int, string> breadcrumbDictionary, bool?recalled, IPrincipal user, int?maxDistance, double?maxAge) { AvailableListing listing = AvailableListingHelpers.GetAvailableListing(db, listingId); if (listing != null) { //Set up the calling fields if (!recalled.HasValue) { GeneralHelpers.GetCallingDetailsFromRequest(request, controllerValue, actionValue, out controllerValue, out actionValue); } AppUser recordChangedBy = AppUserHelpers.GetAppUser(db, listing.RecordChangeBy); AppUser listingOriginatorAppUser = AppUserHelpers.GetAppUser(db, listing.ListingOriginatorAppUserId); AvailableListingDetailsViewModel model = new AvailableListingDetailsViewModel() { MaxDistance = maxDistance, MaxAge = maxAge, Breadcrumb = breadcrumb, DisplayOnly = displayOnly, ListingId = listing.ListingId, ItemDescription = listing.ItemDescription, ItemCategory = listing.ItemCategory, ItemType = listing.ItemType, QuantityAvailable = listing.QuantityAvailable, QuantityFulfilled = listing.QuantityFulfilled, QuantityOutstanding = listing.QuantityOutstanding, UoM = listing.UoM, AvailableFrom = listing.AvailableFrom, AvailableTo = listing.AvailableTo, ItemCondition = listing.ItemCondition, DisplayUntilDate = listing.DisplayUntilDate, SellByDate = listing.SellByDate, UseByDate = listing.UseByDate, DeliveryAvailable = listing.DeliveryAvailable, ListingStatus = listing.ListingStatus, ListingOrganisationPostcode = listing.ListingOrganisationPostcode, RecordChange = listing.RecordChange, RecordChangeOn = listing.RecordChangeOn, RecordChangeByName = recordChangedBy.FirstName + " " + recordChangedBy.LastName, RecordChangeByEmail = recordChangedBy.LoginEmail, ListingOriginatorAppUserName = listingOriginatorAppUser.FirstName + " " + listingOriginatorAppUser.LastName, ListingOriginatorAppUserEmail = listingOriginatorAppUser.LoginEmail, ListingOriginatorDateTime = listing.ListingOriginatorDateTime, CallingController = controllerValue, CallingAction = actionValue, CallingActionDisplayName = callingActionDisplayName, BreadcrumbTrail = breadcrumbDictionary }; if (controllerValue == "GeneralInfo" && actionValue == "Available") { //Get user info for the offer side of the display AppUser currentUser = AppUserHelpers.GetAppUser(db, user); Organisation currentOrg = OrganisationHelpers.GetOrganisation(db, currentUser.OrganisationId); Offer offer = OfferHelpers.GetOfferForListingByUser(db, listing.ListingId, currentUser.AppUserId, currentOrg.OrganisationId, currentOrg.ListingPrivacyLevel); if (offer == null) { model.OfferDescription = "Make an offer"; } else { model.OfferDescription = "Current offer"; model.OfferId = offer.OfferId; model.OfferQty = offer.CurrentOfferQuantity; model.OfferCounterQty = offer.CounterOfferQuantity; model.OfferStatus = offer.OfferStatus; } } return(model); } else { return(null); } }
public static AvailableListingGeneralViewListModel GetAvailableListingGeneralViewListModel(ApplicationDbContext db, IPrincipal user, int?maxDistance, double?maxAge) { List <AvailableListingGeneralViewModel> list = new List <AvailableListingGeneralViewModel>(); //Get user so we can get the settings to initialise the search on the screen AppUser currentUser = AppUserHelpers.GetAppUser(db, user); Organisation currentOrg = OrganisationHelpers.GetOrganisation(db, currentUser.OrganisationId); //set the search criteria. If nothing passed in then take the values from the settings. If values past in then this is the dynamic changes made on the list screen and resubmitted int? maxDistanceFilter = maxDistance ?? currentUser.MaxDistanceFilter ?? 1500; double?maxAgeFilter = maxAge ?? currentUser.MaxAgeFilter ?? 9999; //Get the group Member IDs from groups that this user/organisation are part of, so we can remove them from the list List <Guid> groupMemberOrgIds = null; if (currentUser.SelectionLevelFilter == ExternalSearchLevelEnum.Group) { groupMemberOrgIds = GroupMembersHelpers.GetGroupsMembersOrgGuidsForGroupsFromOrg(db, currentOrg.OrganisationId); } //build the age filter to apply when building list double negativeDays = 0 - maxAgeFilter.Value; var dateCheck = DateTime.Now.AddDays(negativeDays); //build list depending on whether to filter on groups or not (settings, search level = groups) if (groupMemberOrgIds == null) { list = (from al in db.AvailableListings join org in db.Organisations on al.ListingOriginatorOrganisationId equals org.OrganisationId where (al.ListingOriginatorOrganisationId != currentUser.OrganisationId && (al.ListingStatus == ItemEnums.ItemRequiredListingStatusEnum.Open || al.ListingStatus == ItemEnums.ItemRequiredListingStatusEnum.Partial) && al.ListingOriginatorDateTime >= dateCheck) select new AvailableListingGeneralViewModel() { ListingId = al.ListingId, ItemDescription = al.ItemDescription, ItemType = al.ItemType, QuantityOutstanding = al.QuantityOutstanding, UoM = al.UoM, AvailableTo = al.AvailableTo, ItemCondition = al.ItemCondition, ExpiryDate = al.SellByDate ?? al.UseByDate, DeliveryAvailable = al.DeliveryAvailable, SupplierDetails = org.OrganisationName, ListingOriginatorOrganisationId = al.ListingOriginatorOrganisationId, ListingOrganisationPostcode = al.ListingOrganisationPostcode }).Distinct().ToList(); } else { list = (from al in db.AvailableListings join org in db.Organisations on al.ListingOriginatorOrganisationId equals org.OrganisationId join grpmem in groupMemberOrgIds on al.ListingOriginatorOrganisationId equals grpmem where (al.ListingOriginatorOrganisationId != currentUser.OrganisationId && (al.ListingStatus == ItemEnums.ItemRequiredListingStatusEnum.Open || al.ListingStatus == ItemEnums.ItemRequiredListingStatusEnum.Partial) && al.ListingOriginatorDateTime >= dateCheck) select new AvailableListingGeneralViewModel() { ListingId = al.ListingId, ItemDescription = al.ItemDescription, ItemType = al.ItemType, QuantityOutstanding = al.QuantityOutstanding, UoM = al.UoM, AvailableTo = al.AvailableTo, ItemCondition = al.ItemCondition, ExpiryDate = al.SellByDate ?? al.UseByDate, DeliveryAvailable = al.DeliveryAvailable, SupplierDetails = org.OrganisationName, ListingOriginatorOrganisationId = al.ListingOriginatorOrganisationId, ListingOrganisationPostcode = al.ListingOrganisationPostcode }).Distinct().ToList(); } //Filter by DISTANCE and add OFFER info also. //hold list of organisationIds already checked - set to true if within range Dictionary <Guid, bool> listingOrgIds = new Dictionary <Guid, bool>(); //hold new list from old List <AvailableListingGeneralViewModel> newList = new List <AvailableListingGeneralViewModel>(); foreach (AvailableListingGeneralViewModel item in list) { //if we have checked this org before then just add or not depending on flag if (listingOrgIds.ContainsKey(item.ListingOriginatorOrganisationId)) { if (listingOrgIds[item.ListingOriginatorOrganisationId]) { //quick check for offer Offer offer = OfferHelpers.GetOfferForListingByUser(db, item.ListingId, currentUser.AppUserId, currentOrg.OrganisationId, currentOrg.ListingPrivacyLevel); if (offer == null) { item.OfferQty = 0.00M; } else { item.OfferId = offer.OfferId; item.OfferQty = offer.CurrentOfferQuantity; } newList.Add(item); } } else //add the org to the dictionary with the flag set and add to new list if within range { int distanceValue = DistanceHelpers.GetDistance(currentOrg.AddressPostcode, item.ListingOrganisationPostcode); if (distanceValue <= maxDistanceFilter) { listingOrgIds.Add(item.ListingOriginatorOrganisationId, true); //quick check for offer Offer offer = OfferHelpers.GetOfferForListingByUser(db, item.ListingId, currentUser.AppUserId, currentOrg.OrganisationId, currentOrg.ListingPrivacyLevel); if (offer == null) { item.OfferQty = 0.00M; } else { item.OfferId = offer.OfferId; item.OfferQty = offer.CurrentOfferQuantity; } newList.Add(item); } else { listingOrgIds.Add(item.ListingOriginatorOrganisationId, false); } } } AvailableListingGeneralViewListModel model = new AvailableListingGeneralViewListModel() { MaxDistance = maxDistanceFilter, MaxAge = maxAgeFilter, EditableFields = newList.Any(x => x.OfferId == null), //only set if there are no offers in the list Listing = newList }; return(model); }