Example #1
0
        //
        //GET: /Manage/BuyCoin

        public async Task <ActionResult> BuyCoin(string tx)
        {
            if (tx != null)
            {
                string scheme       = HttpContext.Request.Url.AbsoluteUri;
                string response     = scheme;
                var    Arr_response = response.Split('&');

                if (Arr_response[1] == "st=Completed")
                {
                    var    Arr_price = Arr_response[2].Split('=');
                    double price     = Convert.ToDouble(Arr_price[1]);
                    int    coins     = 0;
                    if (price == 10)
                    {
                        coins = 1000;
                    }
                    if (price == 13)
                    {
                        coins = 1500;
                    }
                    if (price == 16)
                    {
                        coins = 2000;
                    }

                    string user_id = User.Identity.GetUserId();

                    OrderBuyCoin orderbuycoin = new OrderBuyCoin();
                    orderbuycoin.Date        = DateTime.Now;
                    orderbuycoin.Price       = price;
                    orderbuycoin.Coins       = coins;
                    orderbuycoin.UserBuyCoin = user_id;
                    orderbuycoin.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added;

                    _orderBuyCoinsService.Insert(orderbuycoin);

                    //update coins of user
                    var userExisting = await UserManager.FindByIdAsync(user_id);

                    userExisting.Coins = userExisting.Coins + coins;
                    await UserManager.UpdateAsync(userExisting);



                    await _unitOfWorkAsync.SaveChangesAsync();

                    return(RedirectToAction("Dashboard"));
                }
                else
                {
                    //error
                    return(RedirectToAction("BuyCoin"));
                }
            }
            else
            {
                return(View());
            }
        }
Example #2
0
        public async Task <ActionResult> ListingUpdate(Listing listing, FormCollection form, IEnumerable <HttpPostedFileBase> files)
        {
            if (CacheHelper.Categories.Count == 0)
            {
                TempData[TempDataKeys.UserMessageAlertState] = "bg-danger";
                TempData[TempDataKeys.UserMessage]           = "[[[There are not categories available yet.]]]";

                return(RedirectToAction("Listing", new { id = listing.ID }));
            }

            var userIdCurrent = User.Identity.GetUserId();

            // Register account if not login
            if (!User.Identity.IsAuthenticated)
            {
                var accountController = BeYourMarket.Core.ContainerManager.GetConfiguredContainer().Resolve <AccountController>();

                var modelRegister = new RegisterViewModel()
                {
                    Email           = listing.ContactEmail,
                    Password        = form["Password"],
                    ConfirmPassword = form["ConfirmPassword"],
                };

                // Parse first and last name
                var names = listing.ContactName.Split(' ');
                if (names.Length == 1)
                {
                    modelRegister.FirstName = names[0];
                }
                else if (names.Length == 2)
                {
                    modelRegister.FirstName = names[0];
                    modelRegister.LastName  = names[1];
                }
                else if (names.Length > 2)
                {
                    modelRegister.FirstName = names[0];
                    modelRegister.LastName  = listing.ContactName.Substring(listing.ContactName.IndexOf(" ") + 1);
                }

                // Register account
                var resultRegister = await accountController.RegisterAccount(modelRegister);

                // Add errors
                AddErrors(resultRegister);

                // Show errors if not succeed
                if (!resultRegister.Succeeded)
                {
                    var model = new ListingUpdateModel()
                    {
                        ListingItem = listing
                    };
                    // Populate model with listing
                    await PopulateListingUpdateModel(listing, model);

                    return(View("ListingUpdate", model));
                }

                // update current user id
                var user = await UserManager.FindByNameAsync(listing.ContactEmail);

                userIdCurrent = user.Id;
            }

            bool updateCount = false;

            int nextPictureOrderId = 0;

            // Set default listing type ID
            if (listing.ListingTypeID == 0)
            {
                var listingTypes = CacheHelper.ListingTypes.Where(x => x.CategoryListingTypes.Any(y => y.CategoryID == listing.CategoryID));

                if (listingTypes == null)
                {
                    TempData[TempDataKeys.UserMessageAlertState] = "bg-danger";
                    TempData[TempDataKeys.UserMessage]           = "[[[There are not listing types available yet.]]]";

                    return(RedirectToAction("Listing", new { id = listing.ID }));
                }

                listing.ListingTypeID = listingTypes.FirstOrDefault().ID;
            }

            if (listing.ID == 0)
            {
                listing.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added;
                listing.IP          = Request.GetVisitorIP();
                listing.Expiration  = DateTime.MaxValue.AddDays(-1);
                listing.UserID      = userIdCurrent;
                listing.Enabled     = true;
                listing.Currency    = CacheHelper.Settings.Currency;

                updateCount = true;
                _listingService.Insert(listing);
            }
            else
            {
                if (await NotMeListing(listing.ID))
                {
                    return(new HttpUnauthorizedResult());
                }

                var listingExisting = await _listingService.FindAsync(listing.ID);

                listingExisting.Title       = listing.Title;
                listingExisting.Description = listing.Description;
                listingExisting.Number      = listing.Number;
                listingExisting.Active      = listing.Active;
                listingExisting.Price       = listing.Price;

                listingExisting.ContactEmail = listing.ContactEmail;
                listingExisting.ContactName  = listing.ContactName;
                listingExisting.ContactPhone = listing.ContactPhone;

                listingExisting.Latitude  = listing.Latitude;
                listingExisting.Longitude = listing.Longitude;
                listingExisting.Location  = listing.Location;

                listingExisting.ShowPhone = listing.ShowPhone;
                listingExisting.ShowEmail = listing.ShowEmail;

                listingExisting.CategoryID    = listing.CategoryID;
                listingExisting.ListingTypeID = listing.ListingTypeID;

                listingExisting.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Modified;

                _listingService.Update(listingExisting);
            }

            // Delete existing fields on item
            var customFieldItemQuery = await _customFieldListingService.Query(x => x.ListingID == listing.ID).SelectAsync();

            var customFieldIds = customFieldItemQuery.Select(x => x.ID).ToList();

            foreach (var customFieldId in customFieldIds)
            {
                await _customFieldListingService.DeleteAsync(customFieldId);
            }

            // Get custom fields
            var customFieldCategoryQuery = await _customFieldCategoryService.Query(x => x.CategoryID == listing.CategoryID).Include(x => x.MetaField.ListingMetas).SelectAsync();

            var customFieldCategories = customFieldCategoryQuery.ToList();

            foreach (var metaCategory in customFieldCategories)
            {
                var field       = metaCategory.MetaField;
                var controlType = (BeYourMarket.Model.Enum.Enum_MetaFieldControlType)field.ControlTypeID;

                string controlId = string.Format("customfield_{0}_{1}_{2}", metaCategory.ID, metaCategory.CategoryID, metaCategory.FieldID);

                var formValue = form[controlId];

                if (string.IsNullOrEmpty(formValue))
                {
                    continue;
                }

                formValue = formValue.ToString();

                var itemMeta = new ListingMeta()
                {
                    ListingID   = listing.ID,
                    Value       = formValue,
                    FieldID     = field.ID,
                    ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added
                };

                _customFieldListingService.Insert(itemMeta);
            }

            //.......
            //.......
            //.......
            //after publish product, must pay 100 coins...............................................
            //update coins of user
            string user_id      = User.Identity.GetUserId();
            var    userExisting = await UserManager.FindByIdAsync(user_id);

            userExisting.Coins = userExisting.Coins - 100;
            await UserManager.UpdateAsync(userExisting);

            OrderBuyCoin orderbuycoin = new OrderBuyCoin();

            orderbuycoin.Date        = DateTime.Now;
            orderbuycoin.Price       = 0;
            orderbuycoin.Coins       = 100;
            orderbuycoin.UserBuyCoin = user_id;
            orderbuycoin.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added;
            _orderBuyCoinService.Insert(orderbuycoin);


            await _unitOfWorkAsync.SaveChangesAsync();

            if (Request.Files.Count > 0)
            {
                var itemPictureQuery = _listingPictureservice.Queryable().Where(x => x.ListingID == listing.ID);
                if (itemPictureQuery.Count() > 0)
                {
                    nextPictureOrderId = itemPictureQuery.Max(x => x.Ordering);
                }
            }

            if (files != null && files.Count() > 0)
            {
                foreach (HttpPostedFileBase file in files)
                {
                    if ((file != null) && (file.ContentLength > 0) && !string.IsNullOrEmpty(file.FileName))
                    {
                        // Picture picture and get id
                        var picture = new Picture();
                        picture.MimeType = "image/jpeg";
                        _pictureService.Insert(picture);
                        await _unitOfWorkAsync.SaveChangesAsync();

                        // Format is automatically detected though can be changed.
                        ISupportedImageFormat format = new JpegFormat {
                            Quality = 90
                        };
                        Size size = new Size(500, 0);

                        //https://naimhamadi.wordpress.com/2014/06/25/processing-images-in-c-easily-using-imageprocessor/
                        // Initialize the ImageFactory using the overload to preserve EXIF metadata.
                        using (ImageFactory imageFactory = new ImageFactory(preserveExifData: true))
                        {
                            var path = Path.Combine(Server.MapPath("~/images/listing"), string.Format("{0}.{1}", picture.ID.ToString("00000000"), "jpg"));

                            // Load, resize, set the format and quality and save an image.
                            imageFactory.Load(file.InputStream)
                            .Resize(size)
                            .Format(format)
                            .Save(path);
                        }

                        var itemPicture = new ListingPicture();
                        itemPicture.ListingID = listing.ID;
                        itemPicture.PictureID = picture.ID;
                        itemPicture.Ordering  = nextPictureOrderId;

                        _listingPictureservice.Insert(itemPicture);

                        nextPictureOrderId++;
                    }
                }
            }

            await _unitOfWorkAsync.SaveChangesAsync();

            // Update statistics count
            if (updateCount)
            {
                _sqlDbService.UpdateCategoryItemCount(listing.CategoryID);
                _dataCacheService.RemoveCachedItem(CacheKeys.Statistics);
            }

            TempData[TempDataKeys.UserMessage] = "[[[Listing is updated!]]]";
            return(RedirectToAction("Listing", new { id = listing.ID }));
        }