public IHttpActionResult update([FromBody] Advert advert, int id) { int user_id = Users.GetUserId(User); if (!ModelState.IsValid) { return(BadRequest(ModelState)); } // Advert Images Validation var imagesList = advert.images.ToList(); if (imagesList.FindAll(img => !img.deleted).Count > 20) { ExceptionThrow.Throw("Maksimum fotoğraf limitini aştınız.", System.Net.HttpStatusCode.BadRequest); } if (imagesList.FindAll(img => img.is_default && !img.deleted).Count == 0) { ExceptionThrow.Throw("Varsayılan fotoğraf seçin.", System.Net.HttpStatusCode.BadRequest); } if (imagesList.FindAll(img => !img.deleted).Count < 3) { ExceptionThrow.Throw("En az 3 fotoğraf yüklemelisiniz.", System.Net.HttpStatusCode.BadRequest); } if (imagesList.FindAll(img => img.is_default).Count > 1) { ExceptionThrow.Throw("En fazla 1 fotoğraf varsayılan olarak seçilebilir.", System.Net.HttpStatusCode.BadRequest); } if (db.advert.Where(a => a.id == id && a.user_id == user_id).FirstOrDefault() == null) { return(NotFound()); } db.Entry(advert).State = System.Data.Entity.EntityState.Detached; AdvertPossibilities apos = db.advert_possibilities.Where(aposs => aposs.advert_id == id).First(); db.Entry(advert.possibility).State = System.Data.Entity.EntityState.Detached; AdvertProperties ap = db.advert_properties.Where(app => app.advert_id == id).First(); db.Entry(advert.properties).State = System.Data.Entity.EntityState.Detached; db.advert_avaiable_dates.RemoveRange(db.advert_avaiable_dates.Where(ad => ad.advert_id == id)); db.advert_unavaiable_dates.RemoveRange(db.advert_unavaiable_dates.Where(ud => ud.advert_id == id)); //Images imagesList.ForEach(i => { if (i.is_new && !db.advert_images.Any(ai => ai.advert_id == id && ai.image_id == i.id)) { AdvertImages ai = new AdvertImages() { advert_id = id, image_id = i.id, is_default = i.is_default }; db.advert_images.Add(ai); } if (i.is_default) { AdvertImages defaultImage = db.advert_images.Where(img => img.image_id == i.id && img.advert_id == id).FirstOrDefault(); if (defaultImage != null) { db.advert_images.Where(ai => ai.advert_id == id).ToList().ForEach(ai => ai.is_default = false); defaultImage.is_default = true; } } if (i.deleted) { AdvertImages deletedImage = db.advert_images.Where(img => img.image_id == i.id && img.advert_id == id).FirstOrDefault(); if (deletedImage != null) { db.advert_images.Remove(deletedImage); } } }); db.SaveChanges(); using (var dbContext = new DatabaseContext()) { //Advert advert.id = id; advert.user_id = user_id; advert.updated_date = DateTime.Now; advert.state = false; dbContext.Entry(advert).State = System.Data.Entity.EntityState.Modified; dbContext.Entry(advert).Property("score").IsModified = false; dbContext.Entry(advert).Property("views").IsModified = false; dbContext.Entry(advert).Property("user_id").IsModified = false; //Possibilities advert.possibility.advert_id = advert.id; advert.possibility.id = apos.id; advert.possibility.updated_date = DateTime.Now; dbContext.Entry(advert.possibility).State = System.Data.Entity.EntityState.Modified; //Properties advert.properties.advert_id = advert.id; advert.properties.id = ap.id; advert.properties.updated_date = DateTime.Now; dbContext.Entry(advert.properties).State = System.Data.Entity.EntityState.Modified; //Unavaiable Dates if (advert.unavaiable_date != null) { advert.unavaiable_date.ToList().ForEach(i => { i.advert_id = advert.id; dbContext.advert_unavaiable_dates.Add(i); }); } //Avaiable Dates if (advert.available_date != null) { advert.available_date.ToList().ForEach(ad => { for (DateTime date = ad.from_fulldate; date.Date <= ad.to_fulldate.Date; date = date.AddDays(1)) { AdvertAvailableDate avaiableDate = new AdvertAvailableDate() { day = date.Day, month = date.Month, year = date.Year, fulldate = date, uniq = String.Format("{0:MMddyyyy}", ad.from) + String.Format("{0:MMddyyyy}", ad.to), advert_id = advert.id }; dbContext.advert_avaiable_dates.Add(avaiableDate); } }); } dbContext.SaveChanges(); } return(Ok(advert)); }
public IHttpActionResult add([FromBody] _Rezervation _rezervation) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } // get user int user_id = Users.GetUserId(User); Users user = db.users.Where(u => u.id == user_id && u.state == true).FirstOrDefault(); if (user == null) { ExceptionThrow.Throw("Lütfen hesabınızı doğrulayın.", HttpStatusCode.Forbidden); } // existence Advert advert = db.advert.Where(a => a.state == true && a.id == _rezervation.advert_id).FirstOrDefault(); if (advert == null) { return(NotFound()); } if (db.rezervations.Any(rez => rez.user_id == user_id && rez.advert_id == _rezervation.advert_id && rez.checkin == _rezervation.checkin && rez.checkout == _rezervation.checkout)) { ExceptionThrow.Throw("Zaten aynı tarih için bir rezervasyon talebiniz bulunmakta.", HttpStatusCode.Forbidden); } if (user_id == advert.user_id) { ExceptionThrow.Throw("Lütfen farklı bir hesap ile deneyin.", HttpStatusCode.Forbidden); } // visitor validation AdvertProperties properties = db.advert_properties.Where(ap => ap.advert_id == advert.id).FirstOrDefault(); if (properties == null) { return(NotFound()); } if (properties.visitor < _rezervation.visitors.Count) { ExceptionThrow.Throw("Bu ilan için en fazla. " + properties.visitor + " misafir kabul edilebilmektedir.", HttpStatusCode.Forbidden); } // get owner Users owner = db.users.Where(u => u.id == advert.user_id).FirstOrDefault(); if (owner == null) { return(NotFound()); } // rezervation dates list var RezervationDates = new List <DateTime>(); for (DateTime date = _rezervation.checkin; date.Date < _rezervation.checkout.Date; date = date.AddDays(1)) { RezervationDates.Add(date); } // available dates validation List <AdvertAvailableDate> avaiableDates = db.advert_avaiable_dates.Where(aad => aad.advert_id == _rezervation.advert_id).ToList(); if (avaiableDates.Count > 0) { RezervationDates.ForEach(rd => { if (avaiableDates.Find(a => a.fulldate == rd) == null) { ExceptionThrow.Throw("İlan belirtilen tarih için müsait değil.", HttpStatusCode.Forbidden); } }); } // unavailable dates validation if (db.advert_unavaiable_dates.Where(i => i.advert_id == _rezervation.advert_id && RezervationDates.Contains(i.fulldate)).Count() > 0) { ExceptionThrow.Throw("İlan belirtilen tarih için müsait değil.", HttpStatusCode.Forbidden); } // min layover date validation if ((_rezervation.checkout - _rezervation.checkin).TotalDays < advert.min_layover) { ExceptionThrow.Throw("Bu ilan için en az " + advert.min_layover + " günlük rezervasyon oluşturulabilir.", HttpStatusCode.Forbidden); } // create rezervation Rezervations rezervation = new Rezervations { advert_id = _rezervation.advert_id, checkin = _rezervation.checkin, checkout = _rezervation.checkout, created_date = DateTime.Now, gsm = user.gsm, name = user.name, lastname = user.lastname, visitor = _rezervation.visitors.Count, user_id = user.id, day_price = advert.price, owner = advert.user_id, note = _rezervation.note }; db.rezervations.Add(rezervation); db.SaveChanges(); // create rezervations advert RezervationAdverts rezervation_advert = new RezervationAdverts { adress = advert.adress, advert_id = advert.id, cancel_time = advert.cancel_time, city_id = advert.city_id, town_id = advert.town_id, title = advert.title, description = advert.description, entry_time = advert.entry_time, exit_time = advert.exit_time, latitude = advert.latitude, longitude = advert.longitude, rezervation_id = rezervation.id, created_date = advert.created_date, user_id = advert.user_id, advert_type_id = advert.advert_type_id }; db.rezervation_adverts.Add(rezervation_advert); // create visitors _rezervation.visitors.ToList().ForEach(v => { RezervationVisitors visitor = new RezervationVisitors { created_date = DateTime.Now, fullname = v.fullname, gender = v.gender, rezervation_id = rezervation.id, tc = v.tc }; db.rezervation_visitors.Add(visitor); }); db.SaveChanges(); // send notifications Notifications notify = new Notifications(); notify.add(advert.user_id, "#" + advert.id + " nolu ilanınız için " + rezervation.days + " günlük rezervasyon talebi!", rezervation.id); // send sms NetGsm.Send(owner.gsm, "#" + advert.id + " nolu ilaniniz icin toplam " + rezervation.days + " günlük (" + rezervation.total_price + " TL) rezervasyon talebi oluşturuldu. - Menkule.com.tr"); //send mail Mailgun.Send("rezervation", new Dictionary <string, object>() { { "fullname", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(user.name) + " " + System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(user.lastname) }, { "advert_id", advert.id }, { "checkin", Convert.ToDateTime(rezervation.checkin).ToShortDateString() }, { "checkout", Convert.ToDateTime(rezervation.checkout).ToShortDateString() }, { "days", rezervation.days }, { "price", rezervation.total_price + " TL." } }, owner.email, "Yeni rezervasyon talebi"); return(Ok()); }