예제 #1
0
        // GET: EczaneNobet/Takvim/Details/5
        public ActionResult Details(int id)
        {
            if (id < 1)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Takvim takvim = _takvimService.GetById(id);

            if (takvim == null)
            {
                return(HttpNotFound());
            }
            return(View(takvim));
        }
        public ActionResult Create([Bind(Include = "Id,EczaneNobetGrupId,IstekId,BaslangicTarihi,BitisTarihi,HaftaninGunu,Aciklama,YinedeEklensinMi")] EczaneNobetIstekCoklu eczaneNobetIstekCoklu)
        {
            var nobetUstGrup       = _nobetUstGrupSessionService.GetSession("nobetUstGrup");
            var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(eczaneNobetIstekCoklu.EczaneNobetGrupId);
            var nobetUstGrupId     = eczaneNobetGruplar.Select(s => s.NobetUstGrupId).Distinct().SingleOrDefault();

            var tarihler = _takvimService.GetList()
                           .Select(s => new MyDrop {
                Id = s.Id, Value = s.Tarih.ToLongDateString()
            });

            if (eczaneNobetIstekCoklu.HaftaninGunu == null)
            {
                eczaneNobetIstekCoklu.HaftaninGunu = new int[1] {
                    0
                };
            }

            var haftaninGunu = eczaneNobetIstekCoklu.HaftaninGunu;

            var bayramlar = _nobetGrupGorevTipTakvimOzelGunService.GetDetaylar(eczaneNobetIstekCoklu.BaslangicTarihi, eczaneNobetIstekCoklu.BitisTarihi, eczaneNobetGruplar.Select(s => s.NobetGrupId).ToList(), 1)
                            .Where(w => eczaneNobetIstekCoklu.HaftaninGunu.Contains(w.NobetGunKuralId)).ToList();

            var tarihAraligi = _takvimService.GetDetaylar(eczaneNobetIstekCoklu.BaslangicTarihi, eczaneNobetIstekCoklu.BitisTarihi);

            if (eczaneNobetIstekCoklu.HaftaninGunu.Count() > 0)
            {
                tarihAraligi = tarihAraligi.Where(w => eczaneNobetIstekCoklu.HaftaninGunu.Contains(w.HaftaninGunu) ||
                                                  bayramlar.Select(s => s.TakvimId).Contains(w.TakvimId)).ToList();
            }


            var eczaneler = _eczaneService.GetDetaylar(nobetUstGrup.Id).Select(s => s.Id).ToList();

            var baslangicTarihi = _takvimService.GetByTarih(eczaneNobetIstekCoklu.BaslangicTarihi);
            var bitisTarihi     = _takvimService.GetByTarih(eczaneNobetIstekCoklu.BitisTarihi);

            ViewBag.EczaneNobetGrupId = new SelectList(_eczaneNobetGrupService.GetDetaylarByEczaneIdList(eczaneler)
                                                       .Select(s => new MyDrop {
                Id = s.Id, Value = $"{s.EczaneAdi}, {s.NobetGrupGorevTipAdi}"
            }).OrderBy(s => s.Value), "Id", "Value", eczaneNobetIstekCoklu.EczaneNobetGrupId);
            ViewBag.IstekId      = new SelectList(_istekService.GetList(), "Id", "Adi", eczaneNobetIstekCoklu.IstekId);
            ViewBag.HaftaninGunu = new SelectList(_takvimService.GetHaftaninGunleri(), "Id", "Value", eczaneNobetIstekCoklu.HaftaninGunu);
            ViewBag.SecilenHaftaninGunuSayisi = eczaneNobetIstekCoklu.HaftaninGunu.Count();

            //seçilen tarih aralığı takvimde olmalıdır.
            if (baslangicTarihi == null || bitisTarihi == null)
            {
                var minYil = _takvimService.GetList().Min(x => x.Tarih.Year);
                var maxYil = _takvimService.GetList().Max(x => x.Tarih.Year);
                ViewBag.minYil = minYil;
                ViewBag.maxYil = maxYil;

                ViewBag.Mesaj = $"Başlangıç-Bitiş tarih aralığı enaz {minYil} ila ençok {maxYil} arasında olmalıdır...";

                return(View(eczaneNobetIstekCoklu));
            }

            //Başlangıç tarihi Bitiş tarihinden büyük olamaz.
            if (baslangicTarihi.Id > bitisTarihi.Id)
            {
                ViewBag.Mesaj2 = $"Başlangıç tarihi ({baslangicTarihi.Tarih}) Bitiş tarihinden ({bitisTarihi.Tarih}) büyük olamaz...";

                return(View(eczaneNobetIstekCoklu));
            }

            var eczaneNobetIstekler = new List <EczaneNobetIstek>();

            foreach (var eczaneNobetGrupId in eczaneNobetIstekCoklu.EczaneNobetGrupId)
            {
                foreach (var item in tarihAraligi)
                {
                    eczaneNobetIstekler.Add(new EczaneNobetIstek
                    {
                        IstekId           = eczaneNobetIstekCoklu.IstekId,
                        EczaneNobetGrupId = eczaneNobetGrupId,
                        TakvimId          = item.TakvimId,
                        Aciklama          = eczaneNobetIstekCoklu.Aciklama,
                    });
                }
            }

            var eklenenEczaneler = new List <EczaneNobetIstekDetay>();

            if (ModelState.IsValid && eczaneNobetIstekler.Count > 0)
            {
                var istekGirilenEczaneninEsOlduguEczaneler = _eczaneGrupService.GetDetaylarEczaneninEsOlduguEczaneler(eczaneNobetGruplar.Select(s => s.Id).ToList());

                var istekGirilenTarihtekiEczaneler = _eczaneNobetIstekService.GetDetaylarByNobetUstGrupId(eczaneNobetIstekCoklu.BaslangicTarihi, eczaneNobetIstekCoklu.BitisTarihi, nobetUstGrupId);

                var istekGirilenTarihtekiEsgrupOlduguEczaneler = _eczaneNobetIstekService.GetDetaylar(istekGirilenTarihtekiEczaneler, istekGirilenEczaneninEsOlduguEczaneler);

                var istekGirilenTarihtekiEsgrupOlduguEczanelerTumu = istekGirilenEczaneninEsOlduguEczaneler
                                                                     .Union(istekGirilenTarihtekiEsgrupOlduguEczaneler)
                                                                     .OrderBy(o => o.EczaneGrupTanimId)
                                                                     .ThenBy(o => o.EczaneAdi)
                                                                     .ToList();

                var istekGirilenTarihtekiEsgrupOlduguEczaneSayisi = istekGirilenTarihtekiEsgrupOlduguEczanelerTumu.Count;

                if (istekGirilenTarihtekiEsgrupOlduguEczaneSayisi > 0)
                {
                    ViewBag.IstekGirilenTarihtekiEsgrupOlduguEczaneler = istekGirilenTarihtekiEsgrupOlduguEczanelerTumu;

                    return(View(eczaneNobetIstekCoklu));
                }
                else
                {
                    try
                    {
                        _eczaneNobetIstekService.CokluEkle(eczaneNobetIstekler);

                        foreach (var item in eczaneNobetIstekler)
                        {
                            eklenenEczaneler.Add(new EczaneNobetIstekDetay
                            {
                                EczaneAdi = _eczaneNobetGrupService.GetDetayById(item.EczaneNobetGrupId).EczaneAdi,
                                Tarih     = _takvimService.GetById(item.TakvimId).Tarih
                            });
                        }
                    }
                    catch (DbUpdateException ex)
                    {
                        var hata = ex.InnerException.ToString();

                        string[] dublicateHata = { "Cannot insert dublicate row in object", "with unique index" };

                        var dublicateRowHatasiMi = dublicateHata.Any(h => hata.Contains(h));

                        if (dublicateRowHatasiMi)
                        {
                            throw new Exception("<strong>Bir eczaneye aynı gün için iki istek kaydı eklenemez...</strong>");
                        }

                        throw ex;
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                TempData["EklenenIstekSayisi"] = eklenenEczaneler.Count;
                TempData["EklenenIstekler"]    = eklenenEczaneler;

                return(View(eczaneNobetIstekCoklu));
            }
            else
            {
                //bayram ve hafta günleri kontrol
                if (bayramlar.Count == 0)
                {
                    if (eczaneNobetIstekCoklu.HaftaninGunu.Where(w => w == 8 && w == 9).Count() > 0)
                    {
                        ViewBag.MesajBayram = $"Girilen tarih aralığına uygun bayram bulunmamaktadır.";
                    }
                    else if (eczaneNobetIstekCoklu.HaftaninGunu.Where(w => w == 8).Count() > 0)
                    {
                        ViewBag.MesajBayram = $"Girilen tarih aralığına uygun dini bayram bulunmamaktadır.";
                    }
                    else if (eczaneNobetIstekCoklu.HaftaninGunu.Where(w => w == 9).Count() > 0)
                    {
                        ViewBag.MesajBayram = $"Girilen tarih aralığına uygun milli bayram bulunmamaktadır.";
                    }
                    else if (eczaneNobetIstekCoklu.HaftaninGunu.Where(w => w <= 7).Count() > 0)
                    {
                        ViewBag.MesajBayram = $"Girilen tarih aralığına uygun hafta günü bulunmamaktadır.";
                    }
                }
                else
                {
                    if (eczaneNobetIstekCoklu.HaftaninGunu.Count() == 1)
                    {
                        ViewBag.MesajBayram = $"Seçilen hafta gününe uygun tarih aralığı bulunmamaktadır.";
                    }
                    else
                    {
                        ViewBag.MesajBayram = $"Seçilen hafta günlerine uygun tarih aralığı bulunmamaktadır.";
                    }
                }
            }
            return(View(eczaneNobetIstekCoklu));
        }
        //[HandleException]
        public ActionResult CreatePartial([Bind(Include = "Id,EczaneNobetGrupId,MazeretId,BaslangicTarihi,BitisTarihi,HaftaninGunu,Aciklama")] EczaneNobetMazeretCoklu eczaneNobetMazeretCoklu)
        {
            var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup");

            //var haftaninGunleri = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>().ToList();
            if (eczaneNobetMazeretCoklu.HaftaninGunu == null)
            {
                eczaneNobetMazeretCoklu.HaftaninGunu = new int[1] {
                    0
                };
            }

            var haftaninGunu = eczaneNobetMazeretCoklu.HaftaninGunu;

            var eczaneNobetGrup = _eczaneNobetGrupService.GetDetaylar(eczaneNobetMazeretCoklu.EczaneNobetGrupId);

            var bayramlar = _nobetGrupGorevTipTakvimOzelGunService.GetDetaylar(eczaneNobetMazeretCoklu.BaslangicTarihi, eczaneNobetMazeretCoklu.BitisTarihi, eczaneNobetGrup.Select(s => s.NobetGrupId).ToList(), 1)
                            .Where(w => eczaneNobetMazeretCoklu.HaftaninGunu.Contains(w.NobetGunKuralId)).ToList();

            var tarihAraligi = _takvimService.GetDetaylar(eczaneNobetMazeretCoklu.BaslangicTarihi, eczaneNobetMazeretCoklu.BitisTarihi);

            if (eczaneNobetMazeretCoklu.HaftaninGunu.Count() > 0)
            {
                tarihAraligi = tarihAraligi.Where(w => eczaneNobetMazeretCoklu.HaftaninGunu.Contains(w.HaftaninGunu) ||
                                                  bayramlar.Select(s => s.TakvimId).Contains(w.TakvimId)).ToList();
            }

            var eczaneler = _eczaneService.GetDetaylar(nobetUstGrup.Id).Select(s => s.Id).ToList();

            var baslangicTarihi = _takvimService.GetByTarih(eczaneNobetMazeretCoklu.BaslangicTarihi);
            var bitisTarihi     = _takvimService.GetByTarih(eczaneNobetMazeretCoklu.BitisTarihi);

            //seçilen tarih aralığı takvimde olmalıdır.
            if (baslangicTarihi == null || bitisTarihi == null)
            {
                var minYil = _takvimService.GetList().Min(x => x.Tarih.Year);
                var maxYil = _takvimService.GetList().Max(x => x.Tarih.Year);
                ViewBag.minYil = minYil;
                ViewBag.maxYil = maxYil;

                ViewBag.Mesaj = $"Başlangıç-Bitiş tarih aralığı enaz {minYil} ila ençok {maxYil} arasında olmalıdır...";

                return(PartialView());
            }

            //Başlangıç tarihi Bitiş tarihinden büyük olamaz.
            if (baslangicTarihi.Id > bitisTarihi.Id)
            {
                ViewBag.Mesaj2 = $"Başlangıç tarihi ({baslangicTarihi.Tarih}) Bitiş tarihinden ({bitisTarihi.Tarih}) büyük olamaz...";

                return(PartialView());
            }

            var eczaneNobetMazeretler = new List <EczaneNobetMazeret>();

            foreach (var eczaneNobetGrupId in eczaneNobetMazeretCoklu.EczaneNobetGrupId)
            {
                foreach (var item in tarihAraligi)
                {
                    eczaneNobetMazeretler.Add(new EczaneNobetMazeret
                    {
                        MazeretId         = eczaneNobetMazeretCoklu.MazeretId,
                        EczaneNobetGrupId = eczaneNobetGrupId,// eczaneNobetMazeretCoklu.EczaneNobetGrupId,
                        TakvimId          = item.TakvimId,
                        Aciklama          = eczaneNobetMazeretCoklu.Aciklama,
                    });
                }
            }

            var eklenecekMazeretSayisi = eczaneNobetMazeretler.Count;
            var eklenenEczaneler       = new List <EczaneNobetMazeretDetay>();

            if (ModelState.IsValid && eklenecekMazeretSayisi > 0)
            {
                try
                {
                    _eczaneNobetMazeretService.CokluEkle(eczaneNobetMazeretler);

                    foreach (var item in eczaneNobetMazeretler)
                    {
                        var eczane = _eczaneNobetGrupService.GetDetayById(item.EczaneNobetGrupId);

                        eklenenEczaneler.Add(new EczaneNobetMazeretDetay
                        {
                            NobetGorevTipAdi = eczane.NobetGorevTipAdi,
                            EczaneAdi        = eczane.EczaneAdi,
                            Tarih            = _takvimService.GetById(item.TakvimId).Tarih,
                            Aciklama         = item.Aciklama
                        });
                    }
                }
                catch (DbUpdateException ex)
                {
                    var hata = ex.InnerException.ToString();

                    string[] dublicateHata = { "Cannot insert dublicate row in object", "with unique index" };

                    var dublicateRowHatasiMi = dublicateHata.Any(h => hata.Contains(h));

                    if (dublicateRowHatasiMi)
                    {
                        //throw new Exception("<strong>Bir eczaneye aynı gün için iki mazeret kaydı eklenemez...</strong>");
                        return(PartialView("ErrorDublicateRowPartial"));
                    }

                    //throw ex;
                }
                catch (Exception)
                {
                    return(PartialView("ErrorPartial"));
                    //throw ex;
                }

                TempData["EklenenMazeretSayisi"] = eklenenEczaneler.Count;

                TempData["EklenenMazeretler"] = eklenenEczaneler;

                ViewBag.SecilenHaftaninGunuSayisi = eczaneNobetMazeretCoklu.HaftaninGunu.Count();
                //return RedirectToAction("Index");
                return(PartialView());
            }
            else
            {
                //bayram ve hafta günleri kontrol
                if (bayramlar.Count == 0)
                {
                    if (eczaneNobetMazeretCoklu.HaftaninGunu.Where(w => w == 8 && w == 9).Count() > 0)
                    {
                        ViewBag.MesajBayram = $"Girilen tarih aralığına uygun bayram bulunmamaktadır.";
                    }
                    else if (eczaneNobetMazeretCoklu.HaftaninGunu.Where(w => w == 8).Count() > 0)
                    {
                        ViewBag.MesajBayram = $"Girilen tarih aralığına uygun dini bayram bulunmamaktadır.";
                    }
                    else if (eczaneNobetMazeretCoklu.HaftaninGunu.Where(w => w == 9).Count() > 0)
                    {
                        ViewBag.MesajBayram = $"Girilen tarih aralığına uygun milli bayram bulunmamaktadır.";
                    }
                    else if (eczaneNobetMazeretCoklu.HaftaninGunu.Where(w => w <= 7).Count() > 0)
                    {
                        ViewBag.MesajBayram = $"Girilen tarih aralığına uygun hafta günü bulunmamaktadır.";
                    }
                }
                else
                {
                    if (eczaneNobetMazeretCoklu.HaftaninGunu.Count() == 1)
                    {
                        ViewBag.MesajBayram = $"Seçilen hafta gününe uygun tarih aralığı bulunmamaktadır.";
                    }
                    else
                    {
                        ViewBag.MesajBayram = $"Seçilen hafta günlerine uygun tarih aralığı bulunmamaktadır.";
                    }
                }
            }

            return(PartialView());
        }