예제 #1
0
        public IHttpActionResult setDates([FromBody] ICollection <AdvertUnavailableDate> dates, int id)
        {
            int user_id = Users.GetUserId(User);

            if (!db.advert.Any(a => a.user_id == user_id && a.id == id))
            {
                return(NotFound());
            }

            db.advert_unavaiable_dates.RemoveRange(db.advert_unavaiable_dates.Where(uad => uad.advert_id == id && uad.rezervation_id == 0));

            if (dates != null)
            {
                dates.ToList().ForEach(date =>
                {
                    AdvertUnavailableDate aud = new AdvertUnavailableDate
                    {
                        advert_id      = id,
                        created_date   = DateTime.Now,
                        day            = date.day,
                        month          = date.month,
                        year           = date.year,
                        fulldate       = date.fulldate,
                        rezervation_id = date.rezervation_id
                    };
                    db.advert_unavaiable_dates.Add(aud);
                });
            }
            db.SaveChanges();
            return(Ok(dates));
        }
        public object forceApprove([FromBody] _ExistRezervation rezervations, int id)
        {
            int user_id = Users.GetUserId(User);

            // get exist rezervation id
            List <int> rezervations_id = new List <int>();

            rezervations.rezervations.ToList().ForEach(r =>
            {
                if (!db.rezervations.Any(rr => rr.owner == user_id))
                {
                    ExceptionThrow.Throw("Yetkisiz işlem gerçekleştirildi!", HttpStatusCode.Forbidden);
                }
                rezervations_id.Add(r.id);
            });

            // rezervation validation
            Rezervations rezervation = db.rezervations.Find(id);

            if (rezervation == null)
            {
                return(NotFound());
            }

            // rezervation validation
            if (rezervation.updated_date != null)
            {
                ExceptionThrow.Throw("Yetkisiz işlem gerçekleştirildi!", HttpStatusCode.Forbidden);
            }

            // rezervation advert validation
            RezervationAdverts advert = db.rezervation_adverts.Where(ra => ra.advert_id == rezervation.advert_id).FirstOrDefault();

            if (advert == null)
            {
                return(NotFound());
            }

            // rezervation owner validation
            if (advert.user_id != user_id)
            {
                ExceptionThrow.Throw("Yetkisiz işlem gerçekleştirildi!", HttpStatusCode.Forbidden);
            }

            // rezervation user validation
            Users user = db.users.Find(rezervation.user_id);

            if (user == null)
            {
                return(NotFound());
            }

            rezervation.state        = true;
            rezervation.is_cancel    = false;
            rezervation.updated_date = DateTime.Now;

            // available date validation
            var dateList = new List <DateTime>();

            for (DateTime date = rezervation.checkin; date.Date < rezervation.checkout.Date; date = date.AddDays(1))
            {
                dateList.Add(date);
            }

            // set unavaiable date
            dateList.ForEach(date =>
            {
                AdvertUnavailableDate advertUnavaiableDate = new AdvertUnavailableDate
                {
                    advert_id      = rezervation.advert_id,
                    day            = date.Day,
                    month          = date.Month,
                    year           = date.Year,
                    fulldate       = date,
                    created_date   = DateTime.Now,
                    rezervation_id = rezervation.id
                };
                db.advert_unavaiable_dates.Add(advertUnavaiableDate);
            });


            db.rezervations.Where(r => r.owner == user_id && rezervations_id.Contains(r.id)).ToList().ForEach(rez =>
            {
                rez.state        = false;
                rez.is_cancel    = true;
                rez.updated_date = DateTime.Now;
            });

            db.SaveChanges();

            rezervations.rezervations.ForEach(r =>
            {
                Rezervations rez_ = db.rezervations.Where(r_ => r_.id == r.id && r_.state == false & r_.is_cancel == true).FirstOrDefault();
                if (rez_ != null)
                {
                    Users user_ = db.users.Where(u => u.id == rez_.user_id).FirstOrDefault();
                    if (user_ != null)
                    {
                        // Add notify
                        Notifications notify_ = new Notifications();
                        notify_.add(user_.id, "#" + rez_.id + " nolu " + rez_.days + " günlük rezervasyon talebi iptal edildi!", rez_.id);

                        // Send sms
                        NetGsm.Send(user_.gsm, "#" + rez_.id + " nolu " + "(" + rez_.days + " gün - " + rez_.total_price + " TL) rezervasyonunuz iptal edildi. - Menkule.com.tr");

                        // Send email
                        Mailgun.Send("cancel", new Dictionary <string, object>()
                        {
                            { "fullname", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(user_.name) + " " + System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(user_.lastname) }, { "rezervation_id", rez_.id }, { "checkin", Convert.ToDateTime(rez_.checkin).ToShortDateString() }, { "checkout", Convert.ToDateTime(rez_.checkout).ToShortDateString() }, { "days", rez_.days }, { "price", rez_.total_price + " TL." }
                        }, user_.email, "Rezervasyon talebi iptal edildi.");
                    }
                }
            });

            // send sms
            NetGsm.Send(user.gsm, "#" + rezervation.id + " nolu " + "(" + rezervation.days + " gün - " + rezervation.total_price + " TL) rezervasyonunuz onaylandı. - Menkule.com.tr");

            // send notifications
            Notifications notify = new Notifications();

            notify.add(user.id, "#" + rezervation.id + " nolu rezervasyon talebiniz onaylandı.", rezervation.id);

            // Send email
            Mailgun.Send("approve", new Dictionary <string, object>()
            {
                { "fullname", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(user.name) + " " + System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(user.lastname) }, { "rezervation_id", rezervation.id }, { "checkin", Convert.ToDateTime(rezervation.checkin).ToShortDateString() }, { "checkout", Convert.ToDateTime(rezervation.checkout).ToShortDateString() }, { "days", rezervation.days }, { "price", rezervation.total_price + " TL." }
            }, user.email, "Rezervasyon talebi onaylandı.");

            return(Ok());
        }
        public object approve(int id)
        {
            int user_id = Users.GetUserId(User);

            Rezervations rezervation = db.rezervations.Find(id);

            if (rezervation == null)
            {
                return(NotFound());
            }


            if (rezervation.updated_date != null)
            {
                ExceptionThrow.Throw("Yetkisiz işlem gerçekleştirildi!", HttpStatusCode.Forbidden);
            }

            RezervationAdverts advert = db.rezervation_adverts.Where(ra => ra.advert_id == rezervation.advert_id).FirstOrDefault();

            if (advert == null)
            {
                return(NotFound());
            }

            if (advert.user_id != user_id)
            {
                ExceptionThrow.Throw("Yetkisiz işlem gerçekleştirildi!", HttpStatusCode.Forbidden);
            }

            Users user = db.users.Find(rezervation.user_id);

            if (user == null)
            {
                return(NotFound());
            }

            // exist rezervation validations
            DateTime checkoutDate       = rezervation.checkout.AddDays(-1);
            var      exist_rezervations = db.rezervations.Where(r => ((r.checkin >= rezervation.checkin && r.checkin <= checkoutDate) || (r.checkin <= rezervation.checkin && r.checkout <= checkoutDate)) && r.advert_id == advert.advert_id && r.id != id && r.state == false && r.is_cancel == false && r.checkout > rezervation.checkin).ToList();

            if (exist_rezervations.Count > 0)
            {
                ExceptionThrow.Throw(exist_rezervations, HttpStatusCode.NotImplemented);
            }

            rezervation.state        = true;
            rezervation.is_cancel    = false;
            rezervation.updated_date = DateTime.Now;

            // available date validation
            var dateList = new List <DateTime>();

            for (DateTime date = rezervation.checkin; date.Date < rezervation.checkout.Date; date = date.AddDays(1))
            {
                dateList.Add(date);
            }

            // set unavaiable date
            dateList.ForEach(date =>
            {
                AdvertUnavailableDate advertUnavaiableDate = new AdvertUnavailableDate
                {
                    advert_id      = rezervation.advert_id,
                    day            = date.Day,
                    month          = date.Month,
                    year           = date.Year,
                    fulldate       = date,
                    created_date   = DateTime.Now,
                    rezervation_id = rezervation.id
                };
                db.advert_unavaiable_dates.Add(advertUnavaiableDate);
            });

            db.SaveChanges();

            // send sms
            NetGsm.Send(user.gsm, "#" + rezervation.id + " nolu " + "(" + rezervation.days + " gün - " + rezervation.total_price + " TL) rezervasyonunuz onaylandı. - Menkule.com.tr");

            // send notifications
            Notifications notify = new Notifications();

            notify.add(user.id, "#" + rezervation.id + " nolu rezervasyon talebiniz onaylandı.", rezervation.id);

            // Send email
            Mailgun.Send("approve", new Dictionary <string, object>()
            {
                { "fullname", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(user.name) + " " + System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(user.lastname) }, { "rezervation_id", rezervation.id }, { "checkin", Convert.ToDateTime(rezervation.checkin).ToShortDateString() }, { "checkout", Convert.ToDateTime(rezervation.checkout).ToShortDateString() }, { "days", rezervation.days }, { "price", rezervation.total_price + " TL." }
            }, user.email, "Rezervasyon talebi onaylandı.");

            return(Ok());
        }