public ActionResult SearchWithNobetGrupGorevTipId(int?nobetGrupGorevTipId = 0)
        {
            var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup");

            var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(nobetUstGrup.Id)
                                       .Where(w => w.Id == nobetGrupGorevTipId || nobetGrupGorevTipId == 0);

            ViewBag.NobetGrupGorevTipId = new SelectList(nobetGrupGorevTipler, "Id", "Adi");

            var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylarByNobetGrupGorevTipler(nobetGrupGorevTipler.Select(s => s.Id).ToList())
                                     .OrderBy(s => s.NobetGorevTipId)
                                     .ThenBy(s => s.NobetGrupAdi)
                                     .ThenBy(s => s.EczaneAdi).ToList();

            return(PartialView("EczaneNobetGrupPartialView", eczaneNobetGruplar));
        }
Beispiel #2
0
        public JsonResult PlanlanaNobetleriYaz(DateTime?baslangicTarihi, DateTime bitisTarihi, int nobetGrupGorevTipId = 0)
        {
            //baslangicTarihi = new DateTime(2018, 6, 1);
            //baslangicTarihi = new DateTime(2019, 3, 13);
            //bitisTarihi = new DateTime(2020, 12, 31);

            //var eczaneNobetGruplarHepsi = _eczaneNobetGrupService.GetDetaylarByNobetGrupGorevTipler(nobetGrupGorevTipId);//, baslangicTarihi, bitisTarihi);

            //var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(nobetGrupIdListe.ToList());

            //var nobetUstGrupId = nobetGrupGorevTipler.Select(s => s.NobetUstGrupId).FirstOrDefault();

            //_takvimService.SiraliNobetYaz(nobetGrupGorevTipler, eczaneNobetGruplarHepsi, baslangicTarihi, bitisTarihi, nobetUstGrupId);

            //var besinciBolge = nobetGrupGorevTipler.SingleOrDefault(x => x.Id == 8);

            //var nobetGrupGorevTip = _nobetGrupGorevTipService.GetDetayById(nobetGrupGorevTipId);

            var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup");

            var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(nobetUstGrup.Id)
                                       .Where(w => w.Id == nobetGrupGorevTipId || nobetGrupGorevTipId == 0).ToList();

            foreach (var nobetGrupGorevTip in nobetGrupGorevTipler)
            {
                var baslamaTarihi = nobetGrupGorevTip.BaslamaTarihi;

                var eczaneNobetGruplarHepsi = _eczaneNobetGrupService.GetDetaylarByNobetGrupGorevTipler(nobetGrupGorevTip.Id);

                if (baslangicTarihi != null)
                {
                    baslamaTarihi = (DateTime)baslangicTarihi;
                }

                _takvimService.SiraliNobetYazGrupBazinda(
                    nobetGrupGorevTip,
                    eczaneNobetGruplarHepsi,
                    baslamaTarihi,
                    bitisTarihi);
            }

            var jsonResult = Json(nobetGrupGorevTipler.Count(), JsonRequestBehavior.AllowGet);

            //jsonResult.MaxJsonLength = int.MaxValue;

            return(jsonResult);
        }
        // GET: EczaneNobet/EczaneNobetGrupAltGrup/Create
        public ActionResult Create()
        {
            //var user = _userService.GetByUserName(User.Identity.Name);
            var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup");

            var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(nobetUstGrup.Id)
                                       .Select(s => s.Id).ToList();

            var eczaneNobetGrupList = _eczaneNobetGrupService.GetDetaylarByNobetGrupGorevTipler(nobetGrupGorevTipler)
                                      .Where(w => w.BitisTarihi == null).ToList();

            var eczaneNobetGruplar = _eczaneNobetGrupService.GetMyDrop(eczaneNobetGrupList);

            var nobetAltGruplar = _nobetAltGrupService.GetDetaylar(nobetGrupGorevTipler);

            ViewBag.EczaneNobetGrupId = new SelectList(eczaneNobetGruplar, "Id", "Value");
            ViewBag.NobetAltGrupId    = new SelectList(nobetAltGruplar.Select(s => new MyDrop {
                Id = s.Id, Value = $"{s.Adi}, {s.NobetGorevTipAdi}"
            }), "Id", "Value");

            return(View());
        }
Beispiel #4
0
        private ZonguldakDataModel EczaneNobetDataModel(EczaneNobetDataModelParametre eczaneNobetDataModelParametre)
        {
            #region parametreler
            var nobetUstGrupId = eczaneNobetDataModelParametre.NobetUstGrupId;
            //var nobetGrupIdListe = eczaneNobetDataModelParametre.NobetGrupId.ToList();
            //var nobetGorevTipId = eczaneNobetDataModelParametre.NobetGorevTipId;
            var nobetUstGrupBaslangicTarihi = eczaneNobetDataModelParametre.NobetUstGrupBaslangicTarihi;
            var baslangicTarihi             = eczaneNobetDataModelParametre.BaslangicTarihi;
            var bitisTarihi = eczaneNobetDataModelParametre.BitisTarihi;
            var nobetGrupGorevTiplerTumu = eczaneNobetDataModelParametre.NobetGrupGorevTipler;//.Where(w => nobetGrupIdListe.Contains(w.NobetGrupId)).ToList();
            var nobetGorevTipler         = eczaneNobetDataModelParametre.NobetGrupGorevTipler.Select(s => s.NobetGorevTipId).Distinct().ToList();
            #endregion

            var nobetGrupIdListe = eczaneNobetDataModelParametre.NobetGrupGorevTipler.Select(s => s.NobetGrupId).ToList();

            foreach (var nobetGrupGorevTip in nobetGrupGorevTiplerTumu)
            {
                if (baslangicTarihi < nobetGrupGorevTip.BaslamaTarihi)
                {
                    throw new Exception($"Nöbet başlangıç tarihi <strong>({baslangicTarihi.ToShortDateString()})</strong> grup başlama tarihinden <strong>({nobetGrupGorevTip.BaslamaTarihi.ToShortDateString()})</strong> küçük olamaz.");
                }
            }

            var debugYapilacakEczaneler = _debugEczaneService.GetDetaylarAktifOlanlar(nobetUstGrupId);

            var sadeceSiraliNobetYazilacakGruplar = _nobetGrupGorevTipKisitService.GetDetaylarByKisitId(63);//Sadece Sıralı Nöbet Yaz

            var nobetGrupGorevTipler = new List <NobetGrupGorevTipDetay>();
            var nobetGrupGorevTiplerSiradanYazilacaklar = new List <NobetGrupGorevTipDetay>();

            //algoritma ile nöbet yazılacak gruplar
            if (sadeceSiraliNobetYazilacakGruplar.Count > 0)
            {
                nobetGrupGorevTipler = nobetGrupGorevTiplerTumu
                                       .Where(w => !sadeceSiraliNobetYazilacakGruplar.Select(s => s.NobetGrupGorevTipId).Contains(w.Id)).ToList();

                nobetGrupGorevTiplerSiradanYazilacaklar = nobetGrupGorevTiplerTumu
                                                          .Where(w => sadeceSiraliNobetYazilacakGruplar.Select(s => s.NobetGrupGorevTipId).Contains(w.Id)).ToList();
            }

            //var nobetGruplar = _nobetGrupService.GetDetaylar(nobetGrupIdListe).OrderBy(s => s.Id).ToList();
            //var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(nobetGrupIdListe); //nobetGorevTipId,
            var eczaneNobetSonuclar = _eczaneNobetSonucService.GetSonuclar(nobetUstGrupId);

            var eczaneNobetMazeretNobettenDusenler = new List <EczaneNobetMazeretSayilari>();

            var mazeret = _nobetUstGrupKisitService.GetKisitPasifMi("mazeret", nobetUstGrupId);

            if (mazeret)
            {
                eczaneNobetMazeretNobettenDusenler = _eczaneNobetMazeretService.GetEczaneNobetMazeretSayilari(baslangicTarihi, bitisTarihi, nobetGrupIdListe);
            }

            var eczaneNobetGruplarTumu = _eczaneNobetGrupService.GetDetaylarByNobetGrupGorevTipler(baslangicTarihi, bitisTarihi, nobetGrupGorevTiplerTumu.Select(s => s.Id).ToList())
                                         .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id)
                                                //&& w.EczaneAdi == "ÖZGÜR"
                                                ).ToList();

            //var nobetGorevTipId = 1;
            //if (!nobetGorevTipler.Contains(nobetGorevTipId))
            //    nobetGorevTipId = 0;

            var eczaneNobetGruplarGorevTip1 = eczaneNobetGruplarTumu;

            //nobetGorevTipId = 2;
            //if (!nobetGorevTipler.Contains(nobetGorevTipId))
            //    nobetGorevTipId = 0;

            //var eczaneNobetGruplarGorevTip2 = eczaneNobetGruplarTumu
            //    .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList();

            var eczaneNobetSonuclarOncekiAylar = eczaneNobetSonuclar
                                                 .Where(w => w.Tarih >= w.NobetGrupGorevTipBaslamaTarihi &&
                                                        eczaneNobetGruplarTumu.Select(s => s.Id).Contains(w.EczaneNobetGrupId) //görevtip: tümü
                                                                                                                               //&& eczaneNobetGruplarGorevTip1.Select(s => s.Id).Contains(w.EczaneNobetGrupId) //görevtip: 1
                                                        ).ToList();

            var eczaneNobetSonuclarCozulenGruplar = eczaneNobetSonuclar
                                                    .Where(w => eczaneNobetGruplarTumu.Select(s => s.Id).Contains(w.EczaneNobetGrupId)).ToList();

            //var kk = eczaneNobetSonuclarCozulenGruplar
            //    .Where(w => w.EczaneAdi == "TUNA"
            //             && w.Tarih == new DateTime(2013, 1, 1)).ToList();
            var tarihAralik = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupGorevTipler);

            var enSonNobetler = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclarCozulenGruplar);

            var eczaneNobetGrupGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler);

            //var bak = eczaneNobetGrupGunKuralIstatistikYatay.Where(w => w.NobetGorevTipId == 2).ToList();
            var nobetBorc = _nobetUstGrupKisitService.GetDetay(39, nobetUstGrupId);

            if (!nobetBorc.PasifMi && nobetBorc.KisitId > 0)
            {
                var anahtarListe = eczaneNobetSonuclar
                                   .Where(w => w.Tarih < w.NobetGrupGorevTipBaslamaTarihi &&
                                          nobetGrupIdListe.Contains(w.NobetGrupId)).ToList();

                var borcTakipEdilecekGunGruplar = new int[]
                {
                    //1,
                    //3,
                    4
                };

                var gunGruplar = tarihAralik
                                 .Where(w => borcTakipEdilecekGunGruplar.Contains(w.GunGrupId))
                                 .Select(s => new { s.GunGrupId, s.GunGrupAdi })
                                 .Distinct()
                                 .OrderBy(o => o.GunGrupId).ToList();

                foreach (var gunGrup in gunGruplar)
                {
                    var haftaIciAnahtarListeTumEczaneler = _takvimService.AnahtarListeyiBuGuneTasi(nobetGrupGorevTipler, eczaneNobetGruplarTumu, eczaneNobetGrupGunKuralIstatistikYatay, anahtarListe, gunGrup.GunGrupAdi);

                    var nobetBorcEczaneler = (from s in eczaneNobetGrupGunKuralIstatistikYatay
                                              from b in haftaIciAnahtarListeTumEczaneler
                                              where s.EczaneNobetGrupId == b.EczaneNobetGrupId &&
                                              s.NobetSayisiHaftaIci == b.NobetSayisi
                                              select new EczaneNobetAlacakVerecek
                    {
                        EczaneNobetGrupId = s.EczaneNobetGrupId,
                        EczaneId = s.EczaneId,
                        EczaneAdi = s.EczaneAdi,
                        NobetGrupAdi = s.NobetGrupAdi,
                        NobetGrupId = s.NobetGrupId,
                        NobetSayisi = gunGrup.GunGrupId == 1
                                                      ? s.NobetSayisiPazar
                                                      : gunGrup.GunGrupId == 4
                                                      ? s.NobetSayisiCumartesi
                                                      : s.NobetSayisiHaftaIci,
                        SonNobetTarihi = gunGrup.GunGrupId == 1
                                                      ? s.SonNobetTarihiPazar
                                                      : gunGrup.GunGrupId == 4
                                                      ? s.SonNobetTarihiCumartesi
                                                      : s.SonNobetTarihiHaftaIci,
                        AnahtarTarih = b.Tarih,
                        BorcluGunSayisi = gunGrup.GunGrupId == 1
                                                      ? ((int)(s.NobetSayisiPazar > 0
                                                          ? (s.SonNobetTarihiPazar - b.Tarih).TotalDays
                                                          : (s.SonNobetTarihiPazar - b.Tarih).TotalDays - (s.SonNobetTarihiPazar - b.NobetUstGrupBaslamaTarihi).TotalDays))
                                                      : gunGrup.GunGrupId == 4
                                                      ? ((int)(s.NobetSayisiCumartesi > 0
                                                          ? (s.SonNobetTarihiCumartesi - b.Tarih).TotalDays
                                                          : (s.SonNobetTarihiCumartesi - b.Tarih).TotalDays - (s.SonNobetTarihiCumartesi - b.NobetUstGrupBaslamaTarihi).TotalDays))
                                                      : ((int)(s.NobetSayisiHaftaIci > 0
                                                          ? (s.SonNobetTarihiHaftaIci - b.Tarih).TotalDays
                                                          : (s.SonNobetTarihiHaftaIci - b.Tarih).TotalDays - (s.SonNobetTarihiHaftaIci - b.NobetUstGrupBaslamaTarihi).TotalDays)),
                        GunGrupAdi = gunGrup.GunGrupAdi,
                        GunGrupId = gunGrup.GunGrupId
                    }).ToList();

                    foreach (var eczane in nobetBorcEczaneler)
                    {
                        if (gunGrup.GunGrupId == 1)
                        {
                            //eczaneNobetGrupGunKuralIstatistikYatay
                            //.Where(w => w.EczaneNobetGrupId == eczane.EczaneNobetGrupId)
                            //.FirstOrDefault().bo = (int)eczane.BorcluGunSayisi;
                        }
                        else if (gunGrup.GunGrupId == 3)
                        {
                            eczaneNobetGrupGunKuralIstatistikYatay
                            .Where(w => w.EczaneNobetGrupId == eczane.EczaneNobetGrupId)
                            .FirstOrDefault().BorcluNobetSayisiHaftaIci = (int)eczane.BorcluGunSayisi;
                        }
                        else if (gunGrup.GunGrupId == 4)
                        {
                        }
                    }
                }
            }

            var grupluEczaneNobetSonuclar = _eczaneNobetSonucService.GetSonuclar(baslangicTarihi, bitisTarihi, eczaneNobetSonuclar);

            var eczaneGrupEdges = _eczaneGrupService.GetEdges(nobetUstGrupId)
                                  .Where(e => (nobetGrupIdListe.Contains(e.FromNobetGrupId) ||
                                               nobetGrupIdListe.Contains(e.ToNobetGrupId)))
                                  .Where(w => (grupluEczaneNobetSonuclar.Select(s => s.EczaneId).Distinct().Contains(w.From) ||
                                               grupluEczaneNobetSonuclar.Select(s => s.EczaneId).Distinct().Contains(w.To))
                                         ).ToList();

            //sonuçlarda ilişkili eczaneler
            var eczaneGruplar = _eczaneGrupService.GetDetaylarAktifGruplar(nobetUstGrupId)
                                .Where(x => (eczaneGrupEdges.Select(s => s.From).Distinct().Contains(x.EczaneId) || eczaneGrupEdges.Select(s => s.To).Distinct().Contains(x.EczaneId)) ||
                                       nobetGrupIdListe.Contains(x.NobetGrupId)
                                       ).ToList();

            //fazladan gelen tanımlar var iyileştirmekte fayda var
            var eczaneGrupTanimlar = _eczaneGrupTanimService.GetDetaylarAktifTanimList(eczaneGruplar.Select(x => x.EczaneGrupTanimId).ToList());
            var eczaneGruplar2     = _eczaneGrupService.GetDetaylarByEczaneGrupTanimId(eczaneGrupTanimlar.Select(s => s.Id).ToList());

            var eczaneGrupNobetSonuclar = grupluEczaneNobetSonuclar
                                          .Where(w => eczaneGruplar2.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList();

            //nöbet yazılacak tarih aralığı(örn. Ocak ayının tüm günleri)

            var eczaneKumulatifHedefler  = new List <EczaneNobetIstatistik>();
            var eczaneNobetIstatistikler = new List <EczaneNobetIstatistik>();

            //2.görev tipi için sadece cumartesi olduğu için tüm günler tüm görev tiplerini almaya gerek yok.
            //var eczaneNobetTarihAralik = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGrupGorevTipler)
            //    .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList();
            var nobetGrupGorevTipGunKurallar = _nobetGrupGorevTipGunKuralService.GetDetaylarAktifList(nobetGrupGorevTipler.Select(s => s.Id).ToList());

            //nobetGorevTipId = 1;
            //var nobetGrupGorevTip1 = nobetGrupGorevTipler.Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList();

            var eczaneNobetTarihAralik1 = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGrupGorevTipler)
                                          .Where(w => eczaneNobetGruplarGorevTip1.Select(s => s.Id).Contains(w.EczaneNobetGrupId)).ToList();

            var eczaneNobetTarihAralik = _eczaneNobetOrtakService.AmacFonksiyonuKatsayisiBelirle(eczaneNobetTarihAralik1, eczaneNobetGrupGunKuralIstatistikYatay);

            var eczaneNobetIstekler = _eczaneNobetIstekService.GetDetaylarByNobetGrupIdList(baslangicTarihi, bitisTarihi, nobetGrupIdListe)
                                      .Where(w => eczaneNobetGruplarTumu.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList();

            var eczaneNobetMazeretler = _eczaneNobetMazeretService.GetDetaylarByEczaneIdList(baslangicTarihi, bitisTarihi, eczaneNobetGruplarTumu.Select(s => s.EczaneId).Distinct().ToList())
                                        .Where(w => w.MazeretId != 3)
                                        .ToList();

            var takvimNobetGrupGunDegerIstatistikler = new List <TakvimNobetGrupGunDegerIstatistik>();

            foreach (var nobetGrupGorevTip in nobetGrupGorevTipler)
            {
                var takvimNobetGrupGunDegerIstatistik = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler(nobetGrupGorevTip.BaslamaTarihi, bitisTarihi, nobetGrupGorevTip.Id);

                takvimNobetGrupGunDegerIstatistikler.AddRange(takvimNobetGrupGunDegerIstatistik);
            }

            var eczaneNobetGrupAltGruplar = _eczaneNobetGrupAltGrupService.GetDetaylar(nobetUstGrupId);


            #region önceki aylar aynı gün nöbet tutanlar çözülen ayda aynı gün nöbetçi olmasın

            var oncekiAylardaAyniGunNobetTutanEczaneler = new List <EczaneGrupDetay>();

            var oncekiAylarAyniGunNobet = _nobetUstGrupKisitService.GetDetay("oncekiAylarAyniGunNobet", nobetUstGrupId);

            if (!oncekiAylarAyniGunNobet.PasifMi)
            {
                oncekiAylardaAyniGunNobetTutanEczaneler = _eczaneNobetSonucService.OncekiAylardaAyniGunNobetTutanlar(baslangicTarihi, eczaneNobetSonuclarOncekiAylar, 0, (int)oncekiAylarAyniGunNobet.SagTarafDegeri);
            }

            #endregion

            var ikiliEczaneler = _ayniGunTutulanNobetService.GetDetaylar(nobetGrupIdListe);

            var nobetGrupKurallar = _nobetGrupKuralService.GetDetaylar(nobetGrupIdListe);

            var nobetUstGrupKisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId);
            var grupBazliKisitlar    = _nobetGrupGorevTipKisitService.GetDetaylar(nobetUstGrupId);

            var zonguldakDataModel = new ZonguldakDataModel()
            {
                Yil                         = eczaneNobetDataModelParametre.YilBaslangic,
                Ay                          = eczaneNobetDataModelParametre.AyBitis,
                TimeLimit                   = eczaneNobetDataModelParametre.TimeLimit,
                CalismaSayisiLimit          = eczaneNobetDataModelParametre.CalismaSayisi,
                LowerBound                  = 0,
                UpperBound                  = 1,
                BaslangicTarihi             = baslangicTarihi,
                BitisTarihi                 = bitisTarihi,
                NobetUstGrupBaslangicTarihi = nobetUstGrupBaslangicTarihi,
                NobetUstGrupId              = nobetUstGrupId,
                EczaneNobetTarihAralik      = eczaneNobetTarihAralik,  //karar değişkeni
                EczaneKumulatifHedefler     = eczaneKumulatifHedefler, //.Where(w => w.EczaneId != 121).ToList(),
                EczaneNobetIstatistikler    = eczaneNobetIstatistikler,
                EczaneNobetMazeretler       = eczaneNobetMazeretler,
                EczaneGrupTanimlar          = eczaneGrupTanimlar,
                TarihAraligi                = tarihAralik,
                //NobetGruplar = nobetGruplar,
                EczaneGruplar = eczaneGruplar2,
                AyniGunNobetTutanEsGruplar = new List <EczaneGrupDetay>(), //ayniGunNoetTutanEczaneGruplar,
                OncekiAylardaAyniGunNobetTutanEczaneler = oncekiAylardaAyniGunNobetTutanEczaneler,
                EczaneNobetIstekler          = eczaneNobetIstekler,
                NobetGrupGunKurallar         = _nobetGrupGunKuralService.GetAktifList(nobetGrupIdListe),
                NobetGrupGorevTipGunKurallar = _nobetGrupGorevTipGunKuralService.GetDetaylarAktifList(nobetGrupGorevTipler.Select(s => s.Id).ToList()),
                NobetGrupKurallar            = nobetGrupKurallar,
                NobetGrupGorevTipler         = nobetGrupGorevTipler,
                NobetGrupTalepler            = _nobetGrupTalepService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi),
                EczaneNobetGruplar           = eczaneNobetGruplarTumu,
                Kisitlar = nobetUstGrupKisitlar,
                EczaneGrupNobetSonuclar                = eczaneGrupNobetSonuclar,
                EczaneNobetSonuclar                    = eczaneNobetSonuclarCozulenGruplar,
                EczaneGrupNobetSonuclarTumu            = eczaneNobetSonuclar,
                EczaneNobetGrupGunKuralIstatistikler   = enSonNobetler,
                TakvimNobetGrupGunDegerIstatistikler   = takvimNobetGrupGunDegerIstatistikler,
                EczaneNobetGrupGunKuralIstatistikYatay = eczaneNobetGrupGunKuralIstatistikYatay,
                EczaneNobetGrupAltGruplar              = eczaneNobetGrupAltGruplar,
                IkiliEczaneler            = ikiliEczaneler,
                NobetGrupGorevTipKisitlar = grupBazliKisitlar,
                DebugYapilacakEczaneler   = debugYapilacakEczaneler
            };

            //_eczaneNobetOrtakService.KurallariKontrolEtHaftaIciEnAzEnCok(nobetUstGrupId, eczaneNobetGrupGunKuralIstatistikYatay);
            _eczaneNobetOrtakService.KurallariKontrolEtMazeretIstek(nobetUstGrupId, eczaneNobetMazeretler, eczaneNobetIstekler);
            _eczaneNobetOrtakService.KurallariKontrolEtIstek(nobetUstGrupId, eczaneNobetIstekler, nobetGrupKurallar);

            return(zonguldakDataModel);
        }
        public EczaneNobetSonucModel ModelCoz(EczaneNobetModelCoz eczaneNobetModelCoz)
        {
            //var nobetGruplarTumu = _nobetGrupService.GetListByNobetUstGrupId(eczaneNobetModelCoz.NobetUstGrupId);
            var nobetGruplar       = eczaneNobetModelCoz.NobetGrupId.ToList();
            var nobetGruplarSirali = new List <NobetGruplarCozumSirali>();
            var sonuclar           = new EczaneNobetSonucModel();
            var baslangicTarihi    = eczaneNobetModelCoz.BaslangicTarihi;
            var bitisTarihi        = eczaneNobetModelCoz.BitisTarihi;

            var indis = 0;

            foreach (var nobetGrupId in nobetGruplar)
            {
                nobetGruplarSirali.Add(new NobetGruplarCozumSirali {
                    NobetGrupId = nobetGrupId, SiraId = indis
                });
                indis++;
            }

            if (nobetGruplar.Count > 0)
            {
                var sonuclarKontrol = _eczaneNobetSonucService.GetDetaylarByNobetGrupGorevTipIdList(baslangicTarihi, bitisTarihi, eczaneNobetModelCoz.NobetGrupGorevTipler.Select(s => s.Id).ToArray());

                if (sonuclarKontrol.Count > 0)
                {
                    throw new Exception("Kriterlere uygun <strong>daha önce yazılmış nöbetler</strong> bulunmaktadır. Lütfen kontrol ediniz!");
                }

                #region başka gruplarla ilişkisi olan gruplar

                var eczaneGruplar = _eczaneGrupService.GetDetaylarAktifGruplar(eczaneNobetModelCoz.NobetUstGrupId)
                                    .Where(d => nobetGruplar.Contains(d.NobetGrupId)).ToList();

                //Birbiri ile ilişkili grupların gruplanması
                var nobetGruplarBagDurumu = _eczaneGrupService.EsGrupluEczanelerinGruplariniBelirleTumu(eczaneGruplar, nobetGruplar);

                var tumNobetGruplar = from g in nobetGruplarSirali
                                      let e = nobetGruplarBagDurumu.SingleOrDefault(x => x.NobetGrupId == g.NobetGrupId) ?? new NobetBagGrup()
                                              orderby e.Id, g.SiraId
                    select new NobetGrupBagGrup
                {
                    BagId       = e.Id,
                    NobetGrupId = g.NobetGrupId
                };

                #endregion

                var nobetGrupBaglar = tumNobetGruplar.Select(s => s.BagId).Distinct().ToList();

                #region Karar kuralları

                var model = new EczaneNobetDataModelParametre
                {
                    AyBitis                     = eczaneNobetModelCoz.AyBitis,
                    NobetGorevTipId             = eczaneNobetModelCoz.NobetGorevTipId,
                    NobetGrupGorevTipler        = eczaneNobetModelCoz.NobetGrupGorevTipler,
                    NobetGrupId                 = eczaneNobetModelCoz.NobetGrupId,
                    NobetUstGrupId              = eczaneNobetModelCoz.NobetUstGrupId,
                    NobetUstGrupBaslangicTarihi = eczaneNobetModelCoz.NobetUstGrupBaslangicTarihi,
                    BuAyVeSonrasi               = eczaneNobetModelCoz.BuAyVeSonrasi,
                    BaslangicTarihi             = eczaneNobetModelCoz.BaslangicTarihi,
                    BitisTarihi                 = eczaneNobetModelCoz.BitisTarihi,
                    TimeLimit                   = eczaneNobetModelCoz.TimeLimit,
                    CalismaSayisi               = eczaneNobetModelCoz.CalismaSayisi
                };

                var aylar = _takvimService.GetAylar()
                            .Where(w => w.Id >= model.AyBitis)
                            .OrderBy(o => o.Id).ToList();

                var ayIndis = 0;

                var nobetGrupGorevTiplerTumu = model.NobetGrupGorevTipler.Where(w => model.NobetGrupId.Contains(w.NobetGrupId)).ToList();

                //Sadece Sıralı Nöbet Yaz
                var sadeceSiraliNobetYazilacakGruplar = _nobetGrupGorevTipKisitService.GetDetaylar(63, nobetGrupGorevTiplerTumu.Select(s => s.Id).ToList());

                var nobetGrupGorevTiplerSiradanYazilacaklar   = new List <NobetGrupGorevTipDetay>();
                var eczaneNobetGruplarSiradanYazilacakGruplar = _eczaneNobetGrupService.GetDetaylarByNobetGrupGorevTipler(sadeceSiraliNobetYazilacakGruplar.Select(s => s.NobetGrupGorevTipId).ToList());

                //algoritma ile nöbet yazılacak gruplar
                if (sadeceSiraliNobetYazilacakGruplar.Count > 0)
                {
                    sonuclar.ResultModel = new List <EczaneNobetCozum>();

                    model.NobetGrupGorevTipler = nobetGrupGorevTiplerTumu
                                                 .Where(w => !sadeceSiraliNobetYazilacakGruplar.Select(s => s.NobetGrupGorevTipId).Contains(w.Id)).ToList();

                    nobetGrupGorevTiplerSiradanYazilacaklar = nobetGrupGorevTiplerTumu
                                                              .Where(w => sadeceSiraliNobetYazilacakGruplar.Select(s => s.NobetGrupGorevTipId).Contains(w.Id)).ToList();

                    #region sıralı nöbet yazma (gün grubu bazında)

                    foreach (var nobetGrupGorevTiplerSiradanYazilacak in nobetGrupGorevTiplerSiradanYazilacaklar)
                    {
                        var siraliSonuclar = _takvimService.SiraliNobetYazGrupBazindaEczaneNobetSonuclar(nobetGrupGorevTiplerSiradanYazilacak, eczaneNobetGruplarSiradanYazilacakGruplar, baslangicTarihi, bitisTarihi);

                        sonuclar.ResultModel.AddRange(siraliSonuclar);
                    }

                    if (model.NobetGrupGorevTipler.Count == 0)
                    {
                        sonuclar.CozumSuresi = new TimeSpan();

                        return(sonuclar);
                    }
                    #endregion
                }

                if (eczaneNobetModelCoz.BuAyVeSonrasi && eczaneNobetModelCoz.CozumTercih == 0 && eczaneNobetModelCoz.SonrakiAylarRasgele)
                {//seçilen ay ve sonrası, gruplar öncelikli - sonraki aylarda gruplar rasgele sıralı
                    foreach (var ay in aylar)
                    {
                        if (eczaneNobetModelCoz.AyBitis == ay.Id)
                        {//ilk ay arayüzdeki sıra
                            foreach (var item in nobetGrupBaglar)
                            {
                                var nobetGrupIdListe = tumNobetGruplar
                                                       .Where(x => x.BagId == item)
                                                       .Select(s => s.NobetGrupId);

                                foreach (var nobetGrupId in nobetGrupIdListe)
                                {
                                    var tarihBas        = model.BaslangicTarihi;
                                    var tarihBit        = model.BitisTarihi;
                                    var aydakiGunSayisi = DateTime.DaysInMonth(tarihBit.Year, ay.Id);
                                    var baslangicGunu   = 1;
                                    if (ayIndis == 1)
                                    {
                                        baslangicGunu = tarihBas.Day;
                                    }

                                    model.BaslangicTarihi = new DateTime(tarihBas.Year, ay.Id, baslangicGunu);
                                    model.BitisTarihi     = new DateTime(tarihBit.Year, ay.Id, aydakiGunSayisi);
                                    model.NobetGrupId     = new int[] { nobetGrupId };
                                    var data = EczaneNobetDataModel(model);
                                    //return EczaneNobetCozSonuclaraEkle(data);
                                    var sonuc = EczaneNobetCozSonuclaraEkle(data);

                                    sonuclar.ObjectiveValue      += sonuc.ObjectiveValue;
                                    sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi;
                                    sonuclar.KisitSayisi         += sonuc.KisitSayisi;

                                    sonuclar.CozumSuresi += sonuc.CozumSuresi;

                                    sonuclar.CalismaSayisi   += sonuc.CalismaSayisi;
                                    sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi;
                                }
                            }
                        }
                        else
                        {
                            foreach (var item in nobetGrupBaglar)
                            {
                                var r = new Random();
                                var nobetGrupIdListe = tumNobetGruplar
                                                       .Where(x => x.BagId == item)
                                                       .Select(s => s.NobetGrupId)
                                                       .OrderBy(x => r.NextDouble());

                                foreach (var nobetGrupId in nobetGrupIdListe)
                                {
                                    var tarihBas        = model.BaslangicTarihi;
                                    var tarihBit        = model.BitisTarihi;
                                    var aydakiGunSayisi = DateTime.DaysInMonth(tarihBit.Year, ay.Id);
                                    var baslangicGunu   = 1;
                                    if (ayIndis == 1)
                                    {
                                        baslangicGunu = tarihBas.Day;
                                    }

                                    model.BaslangicTarihi = new DateTime(tarihBas.Year, ay.Id, baslangicGunu);
                                    model.BitisTarihi     = new DateTime(tarihBit.Year, ay.Id, aydakiGunSayisi);
                                    model.NobetGrupId     = new int[] { nobetGrupId };
                                    var data  = EczaneNobetDataModel(model);
                                    var sonuc = EczaneNobetCozSonuclaraEkle(data);

                                    sonuclar.ObjectiveValue      += sonuc.ObjectiveValue;
                                    sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi;
                                    sonuclar.KisitSayisi         += sonuc.KisitSayisi;

                                    sonuclar.CozumSuresi += sonuc.CozumSuresi;

                                    sonuclar.CalismaSayisi   += sonuc.CalismaSayisi;
                                    sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi;
                                }
                            }
                        }
                    }
                    return(sonuclar);
                }
                else if (eczaneNobetModelCoz.BuAyVeSonrasi && eczaneNobetModelCoz.CozumTercih == 0)
                {//seçilen ay ve sonrası, gruplar öncelikli
                    foreach (var ay in aylar)
                    {
                        ayIndis++;
                        if (tumNobetGruplar.Count() == 1)
                        {
                            model.AyBitis = ay.Id;
                            var data = EczaneNobetDataModel(model);
                            return(EczaneNobetCozSonuclaraEkle(data));
                        }
                        else
                        {
                            foreach (var item in nobetGrupBaglar)
                            {
                                var nobetGrupIdListe = tumNobetGruplar
                                                       .Where(x => x.BagId == item)
                                                       .Select(s => s.NobetGrupId);

                                foreach (var nobetGrupId in nobetGrupIdListe)
                                {
                                    var tarihBas        = model.BaslangicTarihi;
                                    var tarihBit        = model.BitisTarihi;
                                    var aydakiGunSayisi = DateTime.DaysInMonth(tarihBit.Year, ay.Id);
                                    var baslangicGunu   = 1;
                                    if (ayIndis == 1)
                                    {
                                        baslangicGunu = tarihBas.Day;
                                    }

                                    model.BaslangicTarihi = new DateTime(tarihBas.Year, ay.Id, baslangicGunu);
                                    model.BitisTarihi     = new DateTime(tarihBit.Year, ay.Id, aydakiGunSayisi);
                                    model.NobetGrupId     = new int[] { nobetGrupId };
                                    var data  = EczaneNobetDataModel(model);
                                    var sonuc = EczaneNobetCozSonuclaraEkle(data);

                                    sonuclar.ObjectiveValue      += sonuc.ObjectiveValue;
                                    sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi;
                                    sonuclar.KisitSayisi         += sonuc.KisitSayisi;

                                    sonuclar.CozumSuresi += sonuc.CozumSuresi;

                                    sonuclar.CalismaSayisi   += sonuc.CalismaSayisi;
                                    sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi;
                                }
                            }
                        }
                    }
                    return(sonuclar);
                }
                else if (eczaneNobetModelCoz.BuAyVeSonrasi && eczaneNobetModelCoz.CozumTercih == 1)
                {//seçilen ay ve sonrası, gruplar önceliksiz
                    foreach (var ay in aylar)
                    {
                        ayIndis++;
                        foreach (var item in nobetGrupBaglar)
                        {
                            var nobetGrupIdListe = tumNobetGruplar
                                                   .Where(x => x.BagId == item)
                                                   .Select(s => s.NobetGrupId)
                                                   .ToArray();

                            var tarihBas        = model.BaslangicTarihi;
                            var tarihBit        = model.BitisTarihi;
                            var aydakiGunSayisi = DateTime.DaysInMonth(tarihBit.Year, ay.Id);
                            var baslangicGunu   = 1;
                            if (ayIndis == 1)
                            {
                                baslangicGunu = tarihBas.Day;
                            }

                            model.BaslangicTarihi = new DateTime(tarihBas.Year, ay.Id, baslangicGunu);
                            model.BitisTarihi     = new DateTime(tarihBit.Year, ay.Id, aydakiGunSayisi);
                            model.NobetGrupId     = nobetGrupIdListe;
                            var data  = EczaneNobetDataModel(model);
                            var sonuc = EczaneNobetCozSonuclaraEkle(data);

                            sonuclar.ObjectiveValue      += sonuc.ObjectiveValue;
                            sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi;
                            sonuclar.KisitSayisi         += sonuc.KisitSayisi;

                            sonuclar.CozumSuresi += sonuc.CozumSuresi;

                            sonuclar.CalismaSayisi   += sonuc.CalismaSayisi;
                            sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi;
                        }
                    }
                    return(sonuclar);
                }
                else if (eczaneNobetModelCoz.CozumTercih == 0)
                {//ay, gruplar öncelikli
                    if (tumNobetGruplar.Count() == 1)
                    {
                        var data = EczaneNobetDataModel(model);
                        return(EczaneNobetCozAktifiGuncelle(data));
                    }
                    else
                    {
                        foreach (var item in nobetGrupBaglar)
                        {
                            var nobetGrupIdListe = tumNobetGruplar
                                                   .Where(x => x.BagId == item)
                                                   .Select(s => s.NobetGrupId)
                                                   .ToArray();

                            foreach (var nobetGrupId in nobetGrupIdListe)
                            {
                                model.NobetGrupId = new int[] { nobetGrupId };
                                var data  = EczaneNobetDataModel(model);
                                var sonuc = EczaneNobetCozSonuclaraEkle(data);

                                sonuclar.ObjectiveValue      += sonuc.ObjectiveValue;
                                sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi;
                                sonuclar.KisitSayisi         += sonuc.KisitSayisi;

                                sonuclar.CozumSuresi += sonuc.CozumSuresi;

                                sonuclar.CalismaSayisi   += sonuc.CalismaSayisi;
                                sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi;
                            }
                        }
                        return(sonuclar);
                    }
                }
                else if (eczaneNobetModelCoz.CozumTercih == 1)
                {//ay, gruplar önceliksiz
                    foreach (var item in nobetGrupBaglar)
                    {
                        var nobetGrupIdListe = tumNobetGruplar
                                               .Where(x => x.BagId == item)
                                               .Select(s => s.NobetGrupId)
                                               .ToArray();

                        model.NobetGrupId = nobetGrupIdListe;
                        var data = EczaneNobetDataModel(model);
                        //return EczaneNobetCozAktifiGuncelle(data);
                        //sonuclar = EczaneNobetCozAktifiGuncelle(data);
                        var sonuc = EczaneNobetCozSonuclaraEkle(data);
                        sonuclar.ObjectiveValue      += sonuc.ObjectiveValue;
                        sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi;
                        sonuclar.KisitSayisi         += sonuc.KisitSayisi;

                        sonuclar.CozumSuresi += sonuc.CozumSuresi;

                        sonuclar.CalismaSayisi   += sonuc.CalismaSayisi;
                        sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi;
                    }
                    return(sonuclar);
                }
                else
                {//diğer
                    throw new Exception("Nöbet yazdırma kriter seçimi hatalıdır. Lütfen kontrol ediniz.");
                }
                #endregion
            }
            return(sonuclar);
        }
Beispiel #6
0
        //[HttpPost]
        public JsonResult GetAmacFonksiyonuKatsayilari(DateTime baslangicTarihi, DateTime bitisTarihi, int[] nobetGrupGorevTipId)
        {
            //DateTime baslangicTarihi = new DateTime(2019, 4, 1);
            //DateTime bitisTarihi = new DateTime(2019, 4, 28);
            //var user = _userService.GetByUserName(User.Identity.Name);
            //var nobetUstGruplar = _nobetUstGrupService.GetListByUser(user);
            //var nobetUstGrup = nobetUstGruplar.FirstOrDefault();
            var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup");

            var nobetGrupGorevTipIdList = nobetGrupGorevTipId.ToList();

            var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylarByIdList(nobetGrupGorevTipIdList);

            //var eczaneNobetMazeretNobettenDusenler = new List<EczaneNobetMazeretSayilari>();

            //var mazeret = _nobetUstGrupKisitService.GetKisitPasifMi("mazeret", nobetUstGrup.Id);

            //if (mazeret)
            //    eczaneNobetMazeretNobettenDusenler = _eczaneNobetMazeretService.GetEczaneNobetMazeretSayilari(baslangicTarihi, bitisTarihi, nobetGrupIdListe);

            var eczaneNobetGruplarTumu = _eczaneNobetGrupService.GetDetaylarByNobetGrupGorevTipler(baslangicTarihi, bitisTarihi, nobetGrupGorevTipIdList);
            //.Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id)
            //&& w.EczaneAdi == "ÖZGÜR"
            //).ToList();

            var eczaneNobetSonuclar = _eczaneNobetSonucService.GetSonuclar(nobetGrupGorevTipId);

            var eczaneNobetSonuclarPlanlanan = _eczaneNobetSonucPlanlananService.GetSonuclar(nobetGrupGorevTipId);

            var enSonNobetler = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclar);

            //var kontrol = enSonNobetler.Where(w => new int[] { 61, 100 }.Contains(w.EczaneNobetGrupId));

            var eczaneNobetGrupGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler);

            var eczaneNobetTarihAralik1 = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGrupGorevTipler);

            //nobetGorevTipId = 2;
            //var nobetGrupGorevTip2 = nobetGrupGorevTipler.Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList();
            //var noberGunKurallar = nobetGrupGorevTipGunKurallar.Where(w => nobetGrupGorevTip2.Select(s => s.Id).Contains(w.NobetGrupGorevTipId)).Select(s => s.NobetGunKuralId).ToList();

            //var eczaneNobetTarihAralik2 = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGrupGorevTip2, noberGunKurallar)
            //    .Where(w => eczaneNobetGruplarGorevTip2.Select(s => s.Id).Contains(w.EczaneNobetGrupId)).ToList();
            //.Union(eczaneNobetTarihAralik2).ToList();

            var kalibrasyonlar = new List <KalibrasyonYatay>();

            if (nobetUstGrup.Id == 5)
            {
                kalibrasyonlar = _kalibrasyonService.GetKalibrasyonlarYatay(nobetUstGrup.Id);
            }

            var eczaneNobetAlacakVerecek = _takvimService.EczaneNobetAlacakVerecekHesaplaAntalya(nobetGrupGorevTipler, eczaneNobetSonuclarPlanlanan, eczaneNobetGruplarTumu, eczaneNobetGrupGunKuralIstatistikYatay);

            var eczaneNobetTarihAralik = _eczaneNobetOrtakService.AmacFonksiyonuKatsayisiBelirle(eczaneNobetTarihAralik1, eczaneNobetGrupGunKuralIstatistikYatay, kalibrasyonlar, eczaneNobetAlacakVerecek);

            var jsonResult = Json(eczaneNobetTarihAralik, JsonRequestBehavior.AllowGet);

            jsonResult.MaxJsonLength = int.MaxValue;

            return(jsonResult);
        }