public async Task <ActionResult> Order(Model.Models.Order order) { var listing = await _listingService.FindAsync(order.ListingID); var ordersListing = await _orderService.Query(x => x.ListingID == order.ListingID).SelectAsync(); if ((order.ToDate.Value - order.FromDate.Value).Days < 2) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = "[[[The minium quantity for order is two nights]]]"; return(RedirectToAction("Listing", "Listing", new { id = order.ListingID })); } if (order.ToDate < order.FromDate) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = "[[[The date of check out can't be less than the check in date]]]"; return(RedirectToAction("Listing", "Listing", new { id = order.ListingID })); } if ((order.Children + order.Adults) > listing.Max_Capacity) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = string.Format("La maxima capacidad de pasajeros es de {0}", listing.Max_Capacity); return(RedirectToAction("Listing", "Listing", new { id = order.ListingID })); } if (listing == null) { return(new HttpNotFoundResult()); } // Redirect if not authenticated if (!User.Identity.IsAuthenticated) { if (Session["fechas"] != null) { SearchListingModel fecha = (SearchListingModel)Session["fechas"]; fecha.FromDate = order.FromDate; fecha.ToDate = order.ToDate; fecha.Niños = order.Children; fecha.Passengers = order.Adults; Session["fechas"] = fecha; } return(RedirectToAction("Login", "Account", new { ReturnUrl = Url.Action("Listing", "Listing", new { id = order.ListingID }), FromDate = order.FromDate, ToDate = order.ToDate, Adults = order.Adults, Children = order.Children })); } var userCurrent = User.Identity.User(); //validar que los dias no esten reservados List <DateTime> FechasCocinadas = new List <DateTime>(); for (DateTime date = order.FromDate.Value; date < order.ToDate.Value; date = date.Date.AddDays(1)) { FechasCocinadas.Add(date); } foreach (Model.Models.Order ordenesArrendadas in ordersListing.Where(x => x.Status != (int)Enum_OrderStatus.Cancelled)) { for (DateTime date = ordenesArrendadas.FromDate.Value; date < ordenesArrendadas.ToDate.Value; date = date.Date.AddDays(1)) { if (FechasCocinadas.Contains(date)) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = "[[[You can not book with these selected dates!]]]"; return(RedirectToAction("Listing", "Listing", new { id = listing.ID })); } } } // Check if payment method is setup on user or the platform var descriptors = _pluginFinder.GetPluginDescriptors <IHookPlugin>(LoadPluginsMode.InstalledOnly, "Payment").Where(x => x.Enabled); if (descriptors.Count() == 0) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = "[[[The provider has not setup the payment option yet, please contact the provider.]]]"; return(RedirectToAction("Listing", "Listing", new { id = order.ListingID })); } if (!User.IsInRole("Administrator")) { if (listing.UserID != userCurrent.Id) { //foreach (var descriptor in descriptors) //{ // var controllerType = descriptor.Instance<IHookPlugin>().GetControllerType(); // var controller = ContainerManager.GetConfiguredContainer().Resolve(controllerType) as IPaymentController; // if (!controller.HasPaymentMethod(listing.UserID)) // { // TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; // TempData[TempDataKeys.UserMessage] = string.Format("[[[The provider has not setup the payment option for {0} yet, please contact the provider.]]]", descriptor.FriendlyName); // return RedirectToAction("Listing", "Listing", new { id = order.ListingID }); // } //} if (order.ID == 0) { order.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added; order.Created = DateTime.Now; order.Modified = DateTime.Now; order.Status = (int)Enum_OrderStatus.Created; order.UserProvider = listing.UserID; order.UserReceiver = userCurrent.Id; order.ListingTypeID = order.ListingTypeID; order.Currency = listing.Currency; order.OrderType = 3; order.Price = 0; order.Quantity = 0; var listingPrice = await _listingPriceService.Query(x => x.ListingID == order.ListingID).SelectAsync(); var precioEnero = listingPrice.FirstOrDefault(x => x.FromDate.Month.Equals(01)); var precioFebrero = listingPrice.FirstOrDefault(x => x.FromDate.Month.Equals(02)); for (DateTime date = order.FromDate.Value; date <= order.ToDate.Value.AddDays(-1); date = date.Date.AddDays(1)) { if (date >= precioEnero.FromDate && date <= precioEnero.ToDate) { order.Price = order.Price + precioEnero.Price; order.Quantity = order.Quantity + 1; } else if (date >= precioFebrero.FromDate && date <= precioFebrero.ToDate) { order.Price = order.Price + precioFebrero.Price; order.Quantity = order.Quantity + 1; } else { order.Price = order.Price + listing.Price; order.Quantity = order.Quantity + 1; } } var servicio = order.Price * 0.04; order.Total = order.Price + listing.CleanlinessPrice + servicio; order.Description = HttpContext.ParseAndTranslate( string.Format("{0} #{1} ([[[From]]] {2} [[[To]]] {3})", listing.Title, listing.ID, order.FromDate.Value.ToShortDateString(), order.ToDate.Value.ToShortDateString())); _orderService.Insert(order); var provider = await _aspNetUserService.FindAsync(order.UserProvider); //await EnviarCorreo(confirmacion, provider.Email); } await _unitOfWorkAsync.SaveChangesAsync(); ClearCache(); return(RedirectToAction("ConfirmOrder", "Payment", new { id = order.ID })); } else { order.OrderType = 2; if (order.ID == 0) { order.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added; order.Created = DateTime.Now; order.Modified = DateTime.Now; order.Status = (int)Enum_OrderStatus.Pending; order.UserProvider = listing.UserID; order.UserReceiver = userCurrent.Id; order.ListingTypeID = order.ListingTypeID; order.Currency = listing.Currency; if (order.ToDate.HasValue && order.FromDate.HasValue) { order.Description = HttpContext.ParseAndTranslate( string.Format("{0} #{1} ([[[From]]] {2} [[[To]]] {3})", listing.Title, listing.ID, order.FromDate.Value.ToShortDateString(), order.ToDate.Value.ToShortDateString())); order.Quantity = order.ToDate.Value.Subtract(order.FromDate.Value.Date).Days; order.Price = 0; } else if (order.Quantity.HasValue) { order.Description = string.Format("{0} #{1}", listing.Title, listing.ID); order.Quantity = order.Quantity.Value - 1; order.Price = 0; } else { // Default order.Description = string.Format("{0} #{1}", listing.Title, listing.ID); order.Quantity = 1; order.Price = 0; } _orderService.Insert(order); } await _unitOfWorkAsync.SaveChangesAsync(); ClearCache(); TempData[TempDataKeys.UserMessage] = string.Format("[[[Has bloqueado correctamenter tu propiedad entre las fechas {0} y {1}]]]", order.FromDate.Value.ToString("dd-MM-yyyy"), order.ToDate.Value.ToString("dd-MM-yyyy")); return(RedirectToAction("Listing", "Listing", new { id = listing.ID })); } } else { order.OrderType = 1; if (order.ID == 0) { order.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added; order.Created = DateTime.Now; order.Modified = DateTime.Now; order.Status = (int)Enum_OrderStatus.Pending; order.UserProvider = listing.UserID; order.UserReceiver = userCurrent.Id; order.ListingTypeID = order.ListingTypeID; order.Currency = listing.Currency; if (order.ToDate.HasValue && order.FromDate.HasValue) { order.Description = HttpContext.ParseAndTranslate( string.Format("{0} #{1} ([[[From]]] {2} [[[To]]] {3})", listing.Title, listing.ID, order.FromDate.Value.ToShortDateString(), order.ToDate.Value.ToShortDateString())); order.Quantity = order.ToDate.Value.Subtract(order.FromDate.Value.Date).Days; order.Price = 0; } else if (order.Quantity.HasValue) { order.Description = string.Format("{0} #{1}", listing.Title, listing.ID); order.Quantity = order.Quantity.Value - 1; order.Price = 0; } else { // Default order.Description = string.Format("{0} #{1}", listing.Title, listing.ID); order.Quantity = 1; order.Price = 0; } _orderService.Insert(order); } await _unitOfWorkAsync.SaveChangesAsync(); ClearCache(); TempData[TempDataKeys.UserMessage] = "[[[The maintenance was scheduled successfully!]]]"; return(RedirectToAction("Listing", "Listing", new { id = listing.ID })); } }
public async Task <ActionResult> ListingUpdate(Listing listing, FormCollection form, IEnumerable <HttpPostedFileBase> files, int[] idcama, int[] cantidad) { 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 })); } int actualiza = 0; bool updateCount = false; int nextPictureOrderId = 0; var user = await _aspNetUserService.FindAsync(listing.UserID); // Add new listing if (listing.ID == 0) { listing.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added; listing.IP = Request.GetVisitorIP(); listing.ListingTypeID = 1; listing.Title = ""; listing.Expiration = DateTime.MaxValue.AddDays(-1); listing.ContactName = user.FullName; listing.ContactEmail = user.Email; listing.ShowPhone = false; listing.ShowEmail = false; listing.UserID = user.Id; updateCount = true; if (listing.Children == false) { listing.Children = true; } else { listing.Children = false; } _listingService.Insert(listing); listing.Currency = "CLP"; } else { // Update listing var listingExisting = await _listingService.FindAsync(listing.ID); listingExisting.Title = listing.ID.ToString(); listingExisting.Description = listing.Description; listingExisting.CategoryID = listing.CategoryID; listingExisting.Enabled = listing.Enabled; listingExisting.Active = listing.Active; listingExisting.Premium = listing.Premium; var propietario = UserManager.FindById(listing.UserID); listingExisting.ContactEmail = propietario.Email; listingExisting.ContactName = propietario.FullName; listingExisting.ContactPhone = propietario.PhoneNumber; listingExisting.Latitude = listing.Latitude; listingExisting.Longitude = listing.Longitude; listingExisting.Location = listing.Location; listingExisting.ShowPhone = listing.ShowPhone; listingExisting.ShowEmail = listing.ShowEmail; listingExisting.Beds = listing.Beds; listingExisting.Rooms = listing.Rooms; if (listing.Children == false) { listingExisting.Children = true; } else { listingExisting.Children = false; } listingExisting.UserID = listing.UserID; listingExisting.Price = listing.Price; listingExisting.Currency = listing.Currency; listingExisting.Tv = listing.Tv; listingExisting.TV_cable = listing.TV_cable; listingExisting.Wifi = listing.Wifi; listingExisting.Grill = listing.Grill; listingExisting.Dishwasher = listing.Dishwasher; listingExisting.Elevator = listing.Elevator; listingExisting.ShortDescription = listing.ShortDescription; listingExisting.SafetyMesh = listing.SafetyMesh; listingExisting.Smoker = listing.Smoker; listingExisting.Pets = listing.Pets; listingExisting.Terrace = listing.Terrace; //listingExisting.DescribeCondominium = listing.DescribeCondominium; listingExisting.FirstLine = listing.FirstLine; listingExisting.FloorNumber = listing.FloorNumber; listingExisting.M2 = listing.M2; listingExisting.Max_Capacity = listing.Max_Capacity; listingExisting.NroOfParking = listing.NroOfParking; listingExisting.Suite = listing.Suite; listingExisting.Washer = listing.Washer; listingExisting.Warranty = listing.Warranty; listingExisting.CleanlinessPrice = listing.CleanlinessPrice; listingExisting.Address = listing.Address; listingExisting.Stay = listing.Stay; //listingExisting.ListingTypeID = listing.ListingTypeID; listingExisting.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Modified; _listingService.Update(listingExisting); actualiza = 1; } // 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); } // Elimina las camas var listacama = await _detailBedService.Query(x => x.ListingID == listing.ID).SelectAsync(); var lista = listacama.Select(x => x.ID).ToList(); foreach (var id in lista) { await _detailBedService.DeleteAsync(id); } // Get custom fields var customFieldCategoryQuery = await _customFieldCategoryService.Query(x => x.CategoryID == listing.CategoryID).Include(x => x.MetaField.ListingMetas).SelectAsync(); var customFieldCategories = customFieldCategoryQuery.ToList(); // Update custom fields 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); } await _unitOfWorkAsync.SaveChangesAsync(); // Update photos 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++; } } } //INSERTANDO CAMAS if (idcama != null) { List <int> listaid = new List <int>(); for (int i = 0; i < idcama.Length; i++) { if (listaid.Count != 0) //entra aca cuando no es la primera recorrida { if (!listaid.Contains(idcama[i])) { DetailBed detallecama = new DetailBed(); detallecama.TypeOfBedID = idcama[i]; detallecama.Quantity = cantidad[i]; detallecama.ListingID = listing.ID; _detailBedService.Insert(detallecama); listaid.Add(idcama[i]); } } else //entra primero por no tener ninguna cama en la listaid { DetailBed detallecama = new DetailBed(); detallecama.TypeOfBedID = idcama[i]; detallecama.Quantity = cantidad[i]; detallecama.ListingID = listing.ID; listaid.Add(idcama[i]); _detailBedService.Insert(detallecama); } } } //fin insertando cama await _unitOfWorkAsync.SaveChangesAsync(); if (actualiza == 0) { listing.Title = listing.ID.ToString(); _listingService.Update(listing); await _unitOfWorkAsync.SaveChangesAsync(); } // Update statistics count if (updateCount) { _sqlDbService.UpdateCategoryItemCount(listing.CategoryID); _dataCacheService.RemoveCachedItem(CacheKeys.Statistics); } return(RedirectToAction("Listings")); }