public ActionResult DisplayAvailable(Guid?id, string breadcrumb, string callingActionDisplayName, bool displayOnly, bool?recalled, string defaultController, string defaultAction, int?maxDistance, double?maxAge)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            Dictionary <int, string> breadcrumbDictionary = new Dictionary <int, string>();

            breadcrumbDictionary.Add(0, breadcrumb);

            if (!recalled.HasValue)
            {
                defaultController = "GeneralInfo";
                defaultAction     = "Available";
            }

            AvailableListingDetailsViewModel model = AvailableListingViewHelpers.CreateAvailableListingDetailsViewModel(db, id.Value, breadcrumb, displayOnly, Request, defaultController, defaultAction, callingActionDisplayName, breadcrumbDictionary, recalled, User, maxDistance, maxAge);

            if (model == null)
            {
                return(HttpNotFound());
            }

            ViewBag.ListingType = "General Information";
            return(View(model));
        }
        public ActionResult DisplayAvailable([Bind(Include = "Breadcrumb,DisplayOnly,CallingAction,CallingController,CallingActionDisplayName,ListingId,ItemDescription,ItemCategory,ItemType,QuantityAvailable,QuantityFulfilled,QuantityOutstanding,UoM,AvailableFrom,AvailableTo,ItemCondition,DisplayUntilDate,SellByDate,UseByDate,DeliveryAvailable,ListingStatus,ListingOrganisationPostcode")] AvailableListingDetailsViewModel model)
        {
            if (Request.Form["resetbutton"] != null)
            {
                return(RedirectToAction("DisplayAvailable", "ManageInfo", new { id = model.ListingId, breadcrumb = model.Breadcrumb, callingActionDisplayName = model.CallingActionDisplayName, displayOnly = model.DisplayOnly, recalled = true, defaultController = model.CallingController, defaultAction = model.CallingAction }));
            }

            if (ModelState.IsValid)
            {
                AvailableListingHelpers.UpdateAvailableListing(db, model, User);
                return(RedirectToAction(model.CallingAction, model.CallingController));
            }

            return(View(model));
        }
        public ActionResult DisplayAvailable([Bind(Include = "MaxDistance,MaxAge,Breadcrumb,DisplayOnly,CallingAction,CallingController,CallingActionDisplayName,ListingId,ItemDescription,ItemCategory,ItemType,QuantityAvailable,QuantityFulfilled,QuantityOutstanding,UoM,AvailableFrom,AvailableTo,ItemCondition,DisplayUntilDate,SellByDate,UseByDate,DeliveryAvailable,ListingStatus,ListingOrganisationPostcode,OfferDescription,OfferId,OfferQty,OfferCounterQty,OfferStatus")] AvailableListingDetailsViewModel model)
        {
            if (Request.Form["resetbutton"] != null)
            {
                return(RedirectToAction("DisplayAvailable", "GeneralInfo", new { id = model.ListingId, breadcrumb = model.Breadcrumb, callingActionDisplayName = model.CallingActionDisplayName, displayOnly = model.DisplayOnly, recalled = true, defaultController = model.CallingController, defaultAction = model.CallingAction, maxDistance = model.MaxDistance, maxAge = model.MaxAge }));
            }

            if (ModelState.IsValid)
            {
                if (Request.Form["saveofferbutton"] != null)
                {
                    OfferHelpers.CreateOffer(db, model.ListingId, model.OfferQty, ListingTypeEnum.Available, null, User);
                }

                if (Request.Form["savebutton"] != null)
                {
                    AvailableListingHelpers.UpdateAvailableListing(db, model, User);
                }

                return(RedirectToAction(model.CallingAction, model.CallingController));
            }

            return(View(model));
        }
        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 AvailableListing UpdateAvailableListing(ApplicationDbContext db, AvailableListingDetailsViewModel model, IPrincipal user)
        {
            AvailableListing listing = GetAvailableListing(db, model.ListingId);

            decimal qtyAvailable;

            decimal.TryParse(model.QuantityAvailable.ToString(), out qtyAvailable);
            decimal qtyFulfilled;

            decimal.TryParse(model.QuantityFulfilled.ToString(), out qtyFulfilled);
            decimal qtyOutstanding;

            decimal.TryParse(model.QuantityOutstanding.ToString(), out qtyOutstanding);

            if (listing != null)
            {
                listing.ItemDescription     = model.ItemDescription;
                listing.ItemCategory        = model.ItemCategory;
                listing.ItemType            = model.ItemType;
                listing.QuantityAvailable   = qtyAvailable;
                listing.QuantityFulfilled   = qtyFulfilled;
                listing.QuantityOutstanding = qtyOutstanding;
                listing.UoM                         = model.UoM;
                listing.AvailableFrom               = model.AvailableFrom;
                listing.AvailableTo                 = model.AvailableTo;
                listing.ItemCondition               = model.ItemCondition;
                listing.DisplayUntilDate            = model.DisplayUntilDate;
                listing.SellByDate                  = model.SellByDate;
                listing.UseByDate                   = model.UseByDate;
                listing.DeliveryAvailable           = model.DeliveryAvailable;
                listing.ListingStatus               = model.ListingStatus;
                listing.ListingOrganisationPostcode = model.ListingOrganisationPostcode;
                listing.RecordChange                = GeneralEnums.RecordChangeEnum.ListingStatusChange;
                listing.RecordChangeBy              = AppUserHelpers.GetAppUserIdFromUser(user);
                listing.RecordChangeOn              = DateTime.Now;

                db.Entry(listing).State = EntityState.Modified;
                db.SaveChanges();
            }

            return(listing);
        }