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)); }
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()); }
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); }
//[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); }