// GET: EczaneNobet/EczaneNobetDegisim/Create public ActionResult Create() { //var user = _userService.GetByUserName(User.Identity.Name); //var nobetUstGruplar = _nobetUstGrupService.GetListByUser(user).Select(s => s.Id); var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup"); var nobetUstGrupId = nobetUstGrup.Id; var sonuclar = _eczaneNobetGrupService.GetDetaylar(nobetUstGrupId); ViewBag.EczaneNobetGrupId = new SelectList(sonuclar, "Id", "Aciklama"); ViewBag.EczaneNobetSonucId = new SelectList(sonuclar, "Id", "Id"); ViewBag.UserId = new SelectList(_userNobetUstGrupService.GetDetaylar(nobetUstGrupId), "Id", "UserName"); return(View()); }
public List <EczaneNobetIstatistik> GetEczaneNobetIstatistik(Expression <Func <EczaneNobetIstatistik, bool> > filter = null) { var eczaneNobetSonuclar = GetDetaylarForIstatistik(); var eczaneNobetSonuclardaOlmayanEczaneler = _eczaneNobetGrupService.GetDetaylar() .Where(w => !eczaneNobetSonuclar.Select(s => s.EczaneNobetGrupId).Contains(w.Id)) .Select(c => new { c.Id, c.EczaneId, c.NobetGrupId }); //sonuç tablosunda olmayanların listeye eklenmesi için foreach (var t in eczaneNobetSonuclardaOlmayanEczaneler) { eczaneNobetSonuclar.Add(new EczaneNobetSonucGunKural() { EczaneNobetGrupId = t.Id, EczaneId = t.EczaneId, NobetGrupId = t.NobetGrupId, NobetGorevTipId = 1, NobetGunKuralId = 0 }); } var nobetIstatistik = eczaneNobetSonuclar .GroupBy(t => new { t.EczaneNobetGrupId, t.EczaneId, t.NobetGrupId, t.NobetGorevTipId }) .Select(grouped => new EczaneNobetIstatistik { EczaneNobetGrupId = grouped.Key.EczaneNobetGrupId, EczaneId = grouped.Key.EczaneId, NobetGrupId = grouped.Key.NobetGrupId, NobetGorevTipId = grouped.Key.NobetGorevTipId, Pazar = grouped.Count(c => c.NobetGunKuralId == 1), Pazartesi = grouped.Count(c => c.NobetGunKuralId == 2), Sali = grouped.Count(c => c.NobetGunKuralId == 3), Carsamba = grouped.Count(c => c.NobetGunKuralId == 4), Persembe = grouped.Count(c => c.NobetGunKuralId == 5), Cuma = grouped.Count(c => c.NobetGunKuralId == 6), Cumartesi = grouped.Count(c => c.NobetGunKuralId == 7), DiniBayram = grouped.Count(c => c.NobetGunKuralId == 8), MilliBayram = grouped.Count(c => c.NobetGunKuralId == 9), ToplamBayram = grouped.Count(c => c.NobetGunKuralId > 7), ToplamHaftaIci = grouped.Count(c => (c.NobetGunKuralId >= 2 && c.NobetGunKuralId <= 7)), ToplamCumaCumartesi = grouped.Count(c => (c.NobetGunKuralId >= 6 && c.NobetGunKuralId <= 7)), Toplam = grouped.Count(c => c.NobetGunKuralId > 0) }).AsQueryable(); return(filter == null ? nobetIstatistik.ToList() : nobetIstatistik.Where(filter).ToList()); }
public List <EczaneGrupDetay> GetMesafeKriterineGoreKontrolEdilecekEczaneGruplar(int mesafeKriter, List <EczaneUzaklikMatrisDetay> eczaneMesafeler) { var mesafeKontrolEczaneler = new List <EczaneGrupDetay>(); var nobetUstGrupId = eczaneMesafeler.Select(s => s.NobetUstGrupId).FirstOrDefault(); var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(nobetUstGrupId); foreach (var eczaneMesafe in eczaneMesafeler) { var eczaneNobetGrupFrom = eczaneNobetGruplar.FirstOrDefault(x => x.EczaneId == eczaneMesafe.EczaneIdFrom); var eczaneNobetGrupTo = eczaneNobetGruplar.FirstOrDefault(x => x.EczaneId == eczaneMesafe.EczaneIdTo); ; var eczaneGrupMaster = new EczaneGrupDetay { EczaneGrupTanimId = eczaneMesafe.Id, //EczaneId = eczaneMesafe.EczaneIdFrom, ArdisikNobetSayisi = 0, NobetUstGrupId = nobetUstGrupId, EczaneGrupTanimAdi = $"{eczaneMesafe.Id}, {eczaneMesafe.EczaneAdiFrom}-{eczaneMesafe.EczaneAdiTo} {eczaneMesafe.Mesafe} ≤ {mesafeKriter}", EczaneGrupTanimTipAdi = $"Mesafeler aynı gün nöbet ", EczaneGrupTanimTipId = 1, NobetGrupId = 1, //EczaneAdi = eczaneMesafe.EczaneAdiFrom, NobetGrupAdi = "Mesafe", //EczaneNobetGrupId = eczaneMesafe.EczaneIdFrom, AyniGunNobetTutabilecekEczaneSayisi = 1, //BirlikteNobetTutmaSayisi = item.BirlikteNobetTutmaSayisi NobetGrupGorevTipIdFrom = eczaneNobetGrupFrom.NobetGrupGorevTipId, NobetGrupGorevTipIdTo = eczaneNobetGrupTo.NobetGrupGorevTipId }; #region eczane from var eczaneFrom = eczaneGrupMaster.Clone(); eczaneFrom.EczaneId = eczaneMesafe.EczaneIdFrom; eczaneFrom.EczaneAdi = eczaneMesafe.EczaneAdiFrom; mesafeKontrolEczaneler.Add(eczaneFrom); #endregion #region eczane to var eczaneTo = eczaneGrupMaster.Clone(); eczaneTo.EczaneId = eczaneMesafe.EczaneIdTo; eczaneTo.EczaneAdi = eczaneMesafe.EczaneAdiTo; mesafeKontrolEczaneler.Add(eczaneTo); #endregion } return(mesafeKontrolEczaneler); }
public ActionResult Create() { var ustGrupSession = _nobetUstGrupSessionService.GetSession("nobetUstGrup"); var eczaneNobetgrupIdler = _eczaneNobetGrupService.GetDetaylar(ustGrupSession.Id).OrderBy(s => s.EczaneAdi); ViewBag.EczaneNobetGrupId = new SelectList(eczaneNobetgrupIdler.Select(s => new { s.Id, s.EczaneNobetGrupAdi }), "Id", "EczaneNobetGrupAdi"); return(View()); }
public List <AyniGunTutulanNobetDetay> IkiliEczaneleriOlustur(int nobetUstGrupId) { //var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(nobetUstGrupId); var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(nobetUstGrupId); IkiliEczaneleriOlustur(eczaneNobetGruplar); return(GetDetaylar(nobetUstGrupId)); }
public ActionResult Create() { //var user = _userService.GetByUserName(User.Identity.Name); var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup"); //var eczaneler = _eczaneService.GetListByUser(user).Select(s => s.Id).ToList(); var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(nobetUstGrup.Id); ViewBag.EczaneNobetGrupId = new SelectList(_eczaneNobetGrupService.GetMyDrop(eczaneNobetGruplar), //.Select(s => new MyDrop { Id = s.Id, Value = $"{s.EczaneAdi}, {s.NobetGrupGorevTipAdi}" }) //.OrderBy(s => s.Value), "Id", "Value"); ViewBag.MazeretId = new SelectList(_mazeretService.GetList().Where(w => w.Id != 3), "Id", "Adi"); ViewBag.HaftaninGunu = new SelectList(_takvimService.GetHaftaninGunleri(), "Id", "Value"); ViewBag.SecilenHaftaninGunuSayisi = 0; return(View()); }
public JsonResult GetTumEczaneler() { //var user = _userService.GetByUserName(User.Identity.Name); //var nobetUstGruplar = _nobetUstGrupService.GetListByUser(user); //var nobetUstGrup = nobetUstGruplar.FirstOrDefault(); var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup"); double _enlem = nobetUstGrup.Enlem; double _boylam = nobetUstGrup.Boylam; var nobetciEczaneler = _eczaneNobetGrupService.GetDetaylar(nobetUstGrup.Id); var IPadres = Request.UserHostAddress; // var ekraninBulundugueczane = _eczaneService.GetList().Where(w=>w.IPadress == IPadres); var model = new NobetciEczaneHaritaViewModel { NobetciEczaneler = new List <NobetciEczane>(), Enlem = _enlem, Boylam = _boylam, //Tarih = tarih }; foreach (var item in nobetciEczaneler) { var eczane = _eczaneService.GetById(item.EczaneId); var adres = eczane.Adres; var enlem = eczane.Enlem; var boylam = eczane.Boylam; var telefonNo = eczane.TelefonNo; var adresTarifi = eczane.AdresTarifi; var adresTarifiKisa = eczane.AdresTarifiKisa; model.NobetciEczaneler.Add(new NobetciEczane { EczaneId = item.EczaneId, NobetUstGrupId = item.NobetUstGrupId, Adi = item.EczaneAdi, NobetGorevTipAdi = item.NobetGorevTipAdi, NobetGrupAdi = item.NobetGrupAdi, Adres = adres, Enlem = enlem, Boylam = boylam, TelefonNo = telefonNo, AdresTarifi = adresTarifi, AdresTarifiKisa = adresTarifiKisa, NobetAltGrupAdi = item.NobetAltGrupAdi, EczaneninAcikOlduguSaatAraligi = item.EczaneninAcikOlduguSaatAraligi }); } var jsonResult = Json(model, JsonRequestBehavior.AllowGet); return(jsonResult); }
public ActionResult Index() { //var user = _userService.GetByUserName(User.Identity.Name); var ustGrupSession = _nobetUstGrupSessionService.GetSession("nobetUstGrup"); //if (ustGrupSession.Id != 0) //{ // nobetUstGrup = ustGrupSession; //} var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(ustGrupSession.Id); ViewBag.NobetGrupGorevTipId = new SelectList(nobetGrupGorevTipler, "Id", "NobetGrupGorevTipAdi"); var model = _eczaneNobetGrupService.GetDetaylar(ustGrupSession.Id) .OrderBy(s => s.NobetGorevTipId) .ThenBy(s => s.NobetGrupAdi) .ThenBy(s => s.EczaneAdi).ToList(); return(View(model)); }
public ActionResult Create() { //var user = _userService.GetByUserName(User.Identity.Name); //var nobetUstGruplar = _nobetUstGrupService.GetListByUser(user).Select(s => s.Id).ToList(); var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup"); var eczaneNobetGrupList = _eczaneNobetGrupService.GetDetaylar(nobetUstGrup.Id); var eczaneNobetGruplar = _eczaneNobetGrupService.GetMyDrop(eczaneNobetGrupList); var kalibrasyonTipList = _kalibrasyonTipService.GetDetaylar(nobetUstGrup.Id); var kalibrasyonTipler = _kalibrasyonTipService.GetMyDrop(kalibrasyonTipList); var nobetUstGrupGunGruplar = _nobetUstGrupGunGrupService.GetDetaylar(nobetUstGrup.Id); var nobetUstGrupGunGrupMydrop = _nobetUstGrupGunGrupService.GetMyDrop(nobetUstGrupGunGruplar); ViewBag.EczaneNobetGrupId = new SelectList(eczaneNobetGruplar, "Id", "Value"); ViewBag.KalibrasyonTipId = new SelectList(kalibrasyonTipler, "Id", "Value"); ViewBag.NobetUstGrupGunGrupId = new SelectList(nobetUstGrupGunGrupMydrop, "Id", "Value"); return(View()); }
// GET: EczaneNobet/EczaneNobetFeragat/Edit/5 public ActionResult Edit(int id) { if (id < 1) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } EczaneNobetFeragatDetay eczaneNobetFeragat = _eczaneNobetFeragatService.GetDetayById(id); if (eczaneNobetFeragat == null) { return(HttpNotFound()); } //var user = _userService.GetByUserName(User.Identity.Name); //var nobetUstGruplar = _nobetUstGrupService.GetListByUser(user).Select(s => s.Id); var nobetUstGrup = _nobetUstGrupSessionService.GetSession("nobetUstGrup"); var eczaneNobetSonuclar = _eczaneNobetSonucService.GetSonuclar(nobetUstGrup.Id) .OrderBy(o => o.TakvimId); var nobetFeragatTipler = _nobetFeragatTipService.GetList(); var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(nobetUstGrup.Id) .OrderBy(s => s.EczaneAdi) .ThenBy(t => t.NobetGrupAdi) .Select(s => new MyDrop { Id = s.Id, Value = $"{s.EczaneAdi} ({s.NobetGrupAdi}, {s.NobetGorevTipAdi})" }); ViewBag.EczaneNobetGrupId = new SelectList(eczaneNobetGruplar, "Id", "Value", eczaneNobetFeragat.EczaneNobetGrupId); ViewBag.NobetFeragatTipId = new SelectList(nobetFeragatTipler.Select(s => new MyDrop { Id = s.Id, Value = s.Adi }), "Id", "Value", eczaneNobetFeragat.NobetFeragatTipId); ViewBag.EczaneNobetSonucId = new SelectList(eczaneNobetSonuclar.Select(s => new MyDrop { Id = s.Id, Value = $"{s.EczaneAdi}, {s.NobetGrupAdi}, {s.Tarih.ToLongDateString()}" }), "Id", "Value", eczaneNobetFeragat.EczaneNobetSonucId); return(View(eczaneNobetFeragat)); }
private IskenderunDataModel 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 nobetGrupGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler.Where(W => nobetGrupIdListe.Contains(W.NobetGrupId)).ToList(); var nobetGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler.Select(s => s.NobetGorevTipId).Distinct().ToList(); #endregion if (baslangicTarihi < nobetUstGrupBaslangicTarihi) { throw new Exception($"Nöbet başlangıç tarihi <strong>({baslangicTarihi.ToShortDateString()})</strong> üst grup başlama tarihinden <strong>({nobetUstGrupBaslangicTarihi.ToShortDateString()})</strong> küçük olamaz."); } var debugYapilacakEczaneler = _debugEczaneService.GetDetaylarAktifOlanlar(nobetUstGrupId); 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.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id) //&& w.EczaneAdi == "ÖZGÜR" ).ToList(); var nobetGorevTipId = 7; //if (!nobetGorevTipler.Contains(nobetGorevTipId)) // nobetGorevTipId = 0; //var eczaneNobetGruplarGorevTip1 = eczaneNobetGruplarTumu // .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); //nobetGorevTipId = 2; //if (!nobetGorevTipler.Contains(nobetGorevTipId)) // nobetGorevTipId = 0; //var eczaneNobetGruplarGorevTip2 = eczaneNobetGruplarTumu // .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); var eczaneNobetSonuclarOncekiAylar = eczaneNobetSonuclar .Where(w => w.Tarih >= nobetUstGrupBaslangicTarihi && 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 sonuclarKontrol = _eczaneNobetSonucService.GetSonuclar(baslangicTarihi, bitisTarihi, eczaneNobetSonuclarCozulenGruplar); if (sonuclarKontrol.Count > 0) { throw new Exception("Kriterlere uygun <strong>daha önce yazılmış nöbetler</strong> bulunmaktadır. Lütfen kontrol ediniz!"); } var enSonNobetler = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclarCozulenGruplar); var eczaneNobetGrupGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler); var eczaneBazliGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneBazliGunKuralIstatistikYatay(enSonNobetler); //var bak = eczaneNobetGrupGunKuralIstatistikYatay.Where(w => w.NobetGorevTipId == 2).ToList(); var anahtarListe = eczaneNobetSonuclar .Where(w => w.Tarih < nobetUstGrupBaslangicTarihi && nobetGrupIdListe.Contains(w.NobetGrupId)).ToList(); //var haftaIciAnahtarListeTumEczaneler = _takvimService.AnahtarListeyiBuGuneTasi(nobetGrupIdListe, 1, nobetUstGrupBaslangicTarihi, eczaneNobetGruplarTumu, eczaneNobetGrupGunKuralIstatistikYatay, anahtarListe, "Hafta İçi"); var haftaIciAnahtarListeTumEczaneler = _takvimService.AnahtarListeyiBuGuneTasi(nobetGrupIdListe, nobetGorevTipId, nobetUstGrupBaslangicTarihi, eczaneNobetGruplarTumu, eczaneNobetGrupGunKuralIstatistikYatay, anahtarListe, "Hafta İçi"); var nobetBorcluEczanelerhaftaIci = (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 = s.NobetSayisiHaftaIci, SonNobetTarihi = s.SonNobetTarihiHaftaIci, AnahtarTarih = b.Tarih, BorcluGunSayisi = (int)(s.NobetSayisiHaftaIci > 0 ? (s.SonNobetTarihiHaftaIci - b.Tarih).TotalDays : (s.SonNobetTarihiHaftaIci - b.Tarih).TotalDays - (s.SonNobetTarihiHaftaIci - b.NobetUstGrupBaslamaTarihi).TotalDays), GunGrupAdi = "Hafta İçi" }).ToList(); foreach (var eczane in nobetBorcluEczanelerhaftaIci) { eczaneNobetGrupGunKuralIstatistikYatay .Where(w => w.EczaneNobetGrupId == eczane.EczaneNobetGrupId) .FirstOrDefault().BorcluNobetSayisiHaftaIci = (int)eczane.BorcluGunSayisi; } 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 tarihAralik = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupGorevTipler); 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()); var eczaneNobetTarihAralikTumu = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGorevTipId, nobetGrupIdListe) .Where(w => eczaneNobetGruplarTumu.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); //new List<EczaneNobetTarihAralik>(); //foreach (var nobetGrupGorevTip in nobetGrupGorevTipler) //{ // nobetGorevTipId = nobetGrupGorevTip.NobetGorevTipId; // var nobetGrupGorevTip1 = nobetGrupGorevTipler.Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); // var eczaneNobetTarihAralik1 = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGrupGorevTip1) // .Where(w => eczaneNobetGruplarTumu.Select(s => s.Id).Contains(w.EczaneNobetGrupId)).ToList(); // eczaneNobetTarihAralikTumu.AddRange(eczaneNobetTarihAralik1); //} var eczaneNobetTarihAralik = _eczaneNobetOrtakService.AmacFonksiyonuKatsayisiBelirle(eczaneNobetTarihAralikTumu, eczaneNobetGrupGunKuralIstatistikYatay); //2. karar değişkeni. her eczane ve ilgili altgrup var eczaneNobetAltGrupTarihAralik = _takvimService.GetEczaneNobetAltGrupTarihAralik(baslangicTarihi, bitisTarihi, nobetGorevTipId, nobetGrupIdListe) .Where(w => eczaneNobetGruplarTumu.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var ikiliEczaneler = _ayniGunTutulanNobetService.GetDetaylar(nobetGrupIdListe); var eczaneNobetIstekler = _eczaneNobetIstekService.GetDetaylarByNobetGrupIdList(baslangicTarihi, bitisTarihi.AddDays(10), 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 = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler(nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupGorevTipler); var eczaneNobetGrupAltGruplar = _eczaneNobetGrupAltGrupService.GetDetaylar(nobetUstGrupId); var eczaneNobetGrupAltGruplarAcil = _eczaneNobetGrupAltGrupService.GetDetaylarByNobetGrupId(53).Where(w => w.NobetAltGrupId == 37).ToList(); var eczaneNobetGrupAltGruplarPalmiye = _eczaneNobetGrupAltGrupService.GetDetaylarByNobetGrupId(54).Where(w => w.NobetAltGrupId == 43).ToList(); var eczaneNobetGrupAltGruplarYeniDevlet = _eczaneNobetGrupAltGrupService.GetDetaylarByNobetGrupId(54).Where(w => w.NobetAltGrupId == 44).ToList(); var altGruplarlaAyniGunNobetTutma = _nobetUstGrupKisitService.GetDetay("altGruplarlaAyniGunNobetTutma", nobetUstGrupId); var altGruplarlaAyniGunNobetTutmaPalmiye = altGruplarlaAyniGunNobetTutma;//_nobetUstGrupKisitService.GetDetay("altGruplarlaAyniGunNobetTutma", nobetUstGrupId); var altGruplarlaAyniGunNobetTutmaYeniDevlet = altGruplarlaAyniGunNobetTutma; var eczaneNobetSonuclarAltGruplaAyniGun = new List <EczaneNobetSonucListe2>(); var eczaneNobetSonuclarAltGruplaAyniGunPalmiye = new List <EczaneNobetSonucListe2>(); var eczaneNobetSonuclarAltGruplaAyniGunYeniDevlet = new List <EczaneNobetSonucListe2>(); var indisId = 0; var altGruplarlaAyniGunNobetTutmayacakEczanelerCarsi = new List <EczaneGrupDetay>(); var altGruplarlaAyniGunNobetTutmayacakEczanelerSsk = new List <EczaneGrupDetay>(); var altGruplarlaAyniGunNobetTutmayacakEczanelerYeniDevlet = new List <EczaneGrupDetay>(); if (!altGruplarlaAyniGunNobetTutma.PasifMi) { //indisId = eczaneGruplar2.Select(s => s.EczaneGrupTanimId).Max(); #region çarşı var altGrupluTakipEdilecekNobetGrupIdList = new List <int> { 44, //Çarşı 53, //SSK - alt grubu olan }; var eczaneNobetGruplarAltGruplaAyniGun = _eczaneNobetGrupService.GetDetaylar(altGrupluTakipEdilecekNobetGrupIdList, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id)).ToList(); eczaneNobetSonuclarAltGruplaAyniGun = eczaneNobetSonuclar .Where(w => altGrupluTakipEdilecekNobetGrupIdList.Contains(w.NobetGrupId)).ToList(); var ayniGunNobetTutmasiTakipEdilecekGruplar = new List <int> { 44, //Çarşı }; var altGrubuOlanNobetGruplar = new List <int> { 53 //SSK }; altGruplarlaAyniGunNobetTutmayacakEczanelerCarsi = _eczaneNobetOrtakService.AltGruplarlaSiraliNobetListesiniOlusturMersin(eczaneNobetSonuclarAltGruplaAyniGun, eczaneNobetGruplarAltGruplaAyniGun, eczaneNobetGrupAltGruplarAcil, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, indisId, ayniGunNobetTutmasiTakipEdilecekGruplar, altGrubuOlanNobetGruplar, 37, (int)altGruplarlaAyniGunNobetTutma.SagTarafDegeri); #endregion } if (!altGruplarlaAyniGunNobetTutmaPalmiye.PasifMi) { //indisId = eczaneGruplar2.Select(s => s.EczaneGrupTanimId).Max(); #region ssk var altGrupluTakipEdilecekNobetGrupIdList = new List <int> { 53, //SSK 54, //Gelişim - alt grubu olan }; var eczaneNobetGruplarAltGruplaAyniGun = _eczaneNobetGrupService.GetDetaylar(altGrupluTakipEdilecekNobetGrupIdList, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id)).ToList(); eczaneNobetSonuclarAltGruplaAyniGun = eczaneNobetSonuclar .Where(w => altGrupluTakipEdilecekNobetGrupIdList.Contains(w.NobetGrupId)).ToList(); var ayniGunNobetTutmasiTakipEdilecekGruplar = new List <int> { 53, //ssk }; var altGrubuOlanNobetGruplar = new List <int> { 54 //gelişim }; altGruplarlaAyniGunNobetTutmayacakEczanelerSsk = _eczaneNobetOrtakService.AltGruplarlaSiraliNobetListesiniOlusturMersin(eczaneNobetSonuclarAltGruplaAyniGun, eczaneNobetGruplarAltGruplaAyniGun, eczaneNobetGrupAltGruplarPalmiye, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, indisId, ayniGunNobetTutmasiTakipEdilecekGruplar, altGrubuOlanNobetGruplar, 43, (int)altGruplarlaAyniGunNobetTutmaPalmiye.SagTarafDegeri); altGruplarlaAyniGunNobetTutmayacakEczanelerYeniDevlet = _eczaneNobetOrtakService.AltGruplarlaSiraliNobetListesiniOlusturMersin(eczaneNobetSonuclarAltGruplaAyniGun, eczaneNobetGruplarAltGruplaAyniGun, eczaneNobetGrupAltGruplarYeniDevlet, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, indisId, ayniGunNobetTutmasiTakipEdilecekGruplar, altGrubuOlanNobetGruplar, 44, (int)altGruplarlaAyniGunNobetTutmaYeniDevlet.SagTarafDegeri); #endregion } #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 #region sonraki aydaki istekler var sonrakiAy = bitisTarihi.AddDays(1); var bitisTarihiSonrakiAy = bitisTarihi.AddMonths((int)oncekiAylarAyniGunNobet.SagTarafDegeri + 2); var eczaneNobetIsteklerSonrakiDonem = _eczaneNobetIstekService.GetDetaylarByNobetGrupIdList(sonrakiAy, bitisTarihiSonrakiAy, nobetGrupIdListe) .Where(w => eczaneNobetGruplarTumu.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var sonrakiDonemAyniGunNobetIstekGirilenler = _eczaneNobetIstekService.SonrakiAylardaAyniGunIstekGirilenEczaneler(eczaneNobetIsteklerSonrakiDonem); #endregion var nobetGrupKurallar = _nobetGrupKuralService.GetDetaylarByNobetGrupGorevTipIdList(nobetGrupGorevTipler.Select(s => s.Id).ToList()); var nobetUstGrupKisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId); var grupBazliKisitlar = _nobetGrupGorevTipKisitService.GetDetaylar(nobetUstGrupId); var iskenderunDataModel = new IskenderunDataModel() { 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 = ayniGunNoetTutanEczaneGruplar, AltGruplarlaAyniGunNobetTutmayacakEczanelerCarsi = altGruplarlaAyniGunNobetTutmayacakEczanelerCarsi, AltGruplarlaAyniGunNobetTutmayacakEczanelerSsk = altGruplarlaAyniGunNobetTutmayacakEczanelerSsk, AltGruplarlaAyniGunNobetTutmayacakEczanelerYeniDevlet = altGruplarlaAyniGunNobetTutmayacakEczanelerYeniDevlet, OncekiAylardaAyniGunNobetTutanEczaneler = oncekiAylardaAyniGunNobetTutanEczaneler, EczaneNobetIstekler = eczaneNobetIstekler, NobetGrupGunKurallar = _nobetGrupGunKuralService.GetDetaylarAktifList(nobetGrupIdListe), NobetGrupGorevTipGunKurallar = _nobetGrupGorevTipGunKuralService.GetDetaylarAktifList(nobetGrupGorevTipler.Select(s => s.Id).ToList()), NobetGrupKurallar = nobetGrupKurallar, NobetGrupGorevTipler = nobetGrupGorevTipler, NobetGrupTalepler = _nobetGrupTalepService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi), EczaneNobetGruplar = eczaneNobetGruplarTumu, Kisitlar = nobetUstGrupKisitlar, NobetUstGrupKisitlar = nobetUstGrupKisitlar, EczaneGrupNobetSonuclar = eczaneGrupNobetSonuclar, EczaneNobetSonuclar = eczaneNobetSonuclarCozulenGruplar, EczaneGrupNobetSonuclarTumu = eczaneNobetSonuclar, EczaneNobetSonuclarAltGruplarlaBirlikte = eczaneNobetSonuclarAltGruplaAyniGun, EczaneNobetGrupGunKuralIstatistikler = enSonNobetler, TakvimNobetGrupGunDegerIstatistikler = takvimNobetGrupGunDegerIstatistikler, EczaneNobetGrupGunKuralIstatistikYatay = eczaneNobetGrupGunKuralIstatistikYatay, EczaneBazliGunKuralIstatistikYatay = eczaneBazliGunKuralIstatistikYatay, EczaneNobetGrupAltGruplar = eczaneNobetGrupAltGruplar, IkiliEczaneler = ikiliEczaneler, SonrakiDonemAyniGunNobetIstekGirilenler = sonrakiDonemAyniGunNobetIstekGirilenler, NobetGrupGorevTipKisitlar = grupBazliKisitlar, EczaneNobetAltGrupTarihAralik = eczaneNobetAltGrupTarihAralik, NobetAltGruplar = _nobetAltGrupService.GetDetaylar(nobetUstGrupId), AyniGunNobetTakipGrupAltGruplar = _ayniGunNobetTakipGrupAltGrupService.GetDetaylar(nobetUstGrupId), DebugYapilacakEczaneler = debugYapilacakEczaneler }; //_eczaneNobetOrtakService.KurallariKontrolEtHaftaIciEnAzEnCok(nobetUstGrupId, eczaneNobetGrupGunKuralIstatistikYatay); _eczaneNobetOrtakService.KurallariKontrolEtMazeretIstek(nobetUstGrupId, eczaneNobetMazeretler, eczaneNobetIstekler); _eczaneNobetOrtakService.KurallariKontrolEtIstek(nobetUstGrupId, eczaneNobetIstekler, nobetGrupKurallar); return(iskenderunDataModel); }
private BartinDataModel 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 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.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id) //&& w.EczaneAdi == "ÖZGÜR" ).ToList(); var eczaneNobetGruplarGorevTip1 = eczaneNobetGruplarTumu; 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 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 anahtarListe = eczaneNobetSonuclar .Where(w => w.Tarih < w.NobetGrupGorevTipBaslamaTarihi && nobetGrupIdListe.Contains(w.NobetGrupId)).ToList(); var borcTakipEdilecekGunGruplar = new int[] { //1, 3,//h.içi //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()); 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.GetDetaylarByNobetGrupGorevTipIdList(nobetGrupGorevTipler.Select(s => s.Id).ToList()); var nobetUstGrupKisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId); var grupBazliKisitlar = _nobetGrupGorevTipKisitService.GetDetaylar(nobetUstGrupId); var bartinDataModel = new BartinDataModel() { 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, EczaneGruplar = eczaneGruplar2, AyniGunNobetTutanEsGruplar = new List <EczaneGrupDetay>(), //ayniGunNoetTutanEczaneGruplar, OncekiAylardaAyniGunNobetTutanEczaneler = oncekiAylardaAyniGunNobetTutanEczaneler, EczaneNobetIstekler = eczaneNobetIstekler, //NobetGrupGunKurallar = _nobetGrupGunKuralService.GetAktifList(nobetGrupIdListe), NobetGrupGorevTipGunKurallar = nobetGrupGorevTipGunKurallar, NobetGrupKurallar = nobetGrupKurallar, NobetGrupGorevTipler = nobetGrupGorevTipler, Kisitlar = nobetUstGrupKisitlar, NobetGrupTalepler = _nobetGrupTalepService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi), EczaneNobetGruplar = eczaneNobetGruplarTumu, 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(bartinDataModel); }
private MersinMerkezDataModelV2 EczaneNobetDataModel(EczaneNobetDataModelParametre eczaneNobetDataModelParametre) { #region parametreler var nobetUstGrupId = eczaneNobetDataModelParametre.NobetUstGrupId; var yilBaslangic = eczaneNobetDataModelParametre.YilBaslangic; var yilBitis = eczaneNobetDataModelParametre.YilBitis; var ayBaslangic = eczaneNobetDataModelParametre.AyBaslangic; var ayBitis = eczaneNobetDataModelParametre.AyBitis; var nobetGrupIdListe = eczaneNobetDataModelParametre.NobetGrupId.ToList(); //var nobetGorevTipId = eczaneNobetDataModelParametre.NobetGorevTipId; var nobetUstGrupBaslangicTarihi = eczaneNobetDataModelParametre.NobetUstGrupBaslangicTarihi; var ayBitisBaslangicGunu = eczaneNobetDataModelParametre.AyBitisBaslangicGunu; var ayBitisBitisGunu = eczaneNobetDataModelParametre.AyBitisBitisGunu; var baslangicTarihi = eczaneNobetDataModelParametre.BaslangicTarihi; var bitisTarihi = eczaneNobetDataModelParametre.BitisTarihi; var nobetGrupGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler; var nobetGorevTipId = nobetGrupGorevTipler.FirstOrDefault().NobetGorevTipId; #endregion if (baslangicTarihi < nobetUstGrupBaslangicTarihi) { throw new Exception($"Nöbet başlangıç tarihi <strong>({baslangicTarihi.ToShortDateString()})</strong> üst grup başlama tarihinden <strong>({nobetUstGrupBaslangicTarihi.ToShortDateString()})</strong> küçük olamaz."); } var debugYapilacakEczaneler = _debugEczaneService.GetDetaylarAktifOlanlar(nobetUstGrupId); var nobetGruplar = _nobetGrupService.GetDetaylar(nobetGrupIdListe).OrderBy(s => s.Id).ToList(); //var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(nobetGorevTipId, nobetGrupIdListe); var eczaneNobetSonuclar = _eczaneNobetSonucService.GetSonuclar(nobetUstGrupId); //nobetGrupIdListe //.Where(w => !(w.EczaneNobetGrupId == 301 && w.TakvimId == 88)).ToList(); //.Where(w => w.Tarih.Year > 2017).ToList(); var eczaneNobetMazeretNobettenDusenler = new List <EczaneNobetMazeretSayilari>(); var mazeret = _nobetUstGrupKisitService.GetKisitPasifMi("mazeret", nobetUstGrupId); if (mazeret) { eczaneNobetMazeretNobettenDusenler = _eczaneNobetMazeretService.GetEczaneNobetMazeretSayilari(baslangicTarihi, bitisTarihi, nobetGrupIdListe); } var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id)).ToList(); var eczaneNobetSonuclarCozulenGruplar = eczaneNobetSonuclar .Where(w => eczaneNobetGruplar.Select(s => s.Id).Contains(w.EczaneNobetGrupId)).ToList(); var eczaneNobetSonuclarBaslamaTarihindenSonrasi = eczaneNobetSonuclarCozulenGruplar .Where(w => w.Tarih >= nobetUstGrupBaslangicTarihi).ToList(); var son3Ay = baslangicTarihi.AddMonths(-3); var eczaneNobetSonuclarSon3Ay = eczaneNobetSonuclarCozulenGruplar .Where(w => w.Tarih >= son3Ay).ToList(); var sonuclarKontrol = _eczaneNobetSonucService.GetSonuclar(baslangicTarihi, bitisTarihi, eczaneNobetSonuclarCozulenGruplar); if (sonuclarKontrol.Count > 0) { throw new Exception("Kriterlere uygun <strong>daha önce yazılmış nöbetler</strong> bulunmaktadır. Lütfen kontrol ediniz!"); } var enSonNobetler = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplar, eczaneNobetSonuclarCozulenGruplar); var enSonNobetlerSon3Ay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplar, eczaneNobetSonuclarSon3Ay); var eczaneNobetGrupGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler); var eczaneNobetGrupGunKuralIstatistikYataySon3Ay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetlerSon3Ay); var grupluEczaneNobetSonuclar = _eczaneNobetSonucService.GetSonuclar(baslangicTarihi, bitisTarihi, eczaneNobetSonuclar); var eczaneGrupEdges = _eczaneGrupService.GetEdges() .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 tarihAralik = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupIdListe, nobetGorevTipId); //var tarihAralikAltGrupluGruplar = _takvimService.GetTakvimNobetGrupAltGruplar(baslangicTarihi, bitisTarihi, nobetGrupIdListe, nobetGorevTipId); var eczaneKumulatifHedefler = new List <EczaneNobetIstatistik>(); var eczaneNobetIstatistikler = new List <EczaneNobetIstatistik>(); var eczaneNobetTarihAralik1 = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGorevTipId, nobetGrupIdListe) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var eczaneNobetTarihAralik = _eczaneNobetOrtakService.AmacFonksiyonuKatsayisiBelirle(eczaneNobetTarihAralik1, eczaneNobetGrupGunKuralIstatistikYatay); var takipEdilecekEczaneler = new List <int> { 664 }; var ikiliEczaneler = _ayniGunTutulanNobetService.GetDetaylar(nobetGrupIdListe) .Where(w => //(eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId1) //|| eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId2)) // (takipEdilecekEczaneler.Contains(w.EczaneNobetGrupId1) //|| takipEdilecekEczaneler.Contains(w.EczaneNobetGrupId2)) ( (w.EczaneAdi1 == "ÖYKÜ" && w.EczaneAdi2 == "ALTUNBAŞ") || (w.EczaneAdi1 == "ÖYKÜ" && w.EczaneAdi2 == "GÜLÇİN") || (w.EczaneAdi1 == "TATLIDİL" && w.EczaneAdi2 == "ANIT") || (w.EczaneAdi1 == "DİCLE" && w.EczaneAdi2 == "AYSEL") || (w.EczaneAdi1 == "POLEN" && w.EczaneAdi2 == "SİTELER") || (w.EczaneAdi1 == "RÜYA" && w.EczaneAdi2 == "AYFER") ) //( // (w.NobetGrupId1 == 15 && w.NobetGrupId2 == 16) //toroslar 1-2 //|| (w.NobetGrupId1 == 17 && w.NobetGrupId2 == 18) //Akdeniz 1-2 //|| (w.NobetGrupId1 == 17 && w.NobetGrupId2 == 19) //Akdeniz 1-3 //|| (w.NobetGrupId1 == 18 && w.NobetGrupId2 == 19) //Akdeniz 2-3 //|| (w.NobetGrupId1 == 20 && w.NobetGrupId2 == 21) //Yenişehir 1-2 //|| (w.NobetGrupId1 == 20 && w.NobetGrupId2 == 22) //Yenişehir 1-3 //|| (w.NobetGrupId1 == 21 && w.NobetGrupId2 == 22) //Yenişehir 2-3 //|| (w.NobetGrupId1 == 23 && w.NobetGrupId2 == 24) //Mezitli 1-2 //) ).ToList(); //2. karar değişkeni. her eczane ve ilgili altgrup var eczaneNobetAltGrupTarihAralik = _takvimService.GetEczaneNobetAltGrupTarihAralik(baslangicTarihi, bitisTarihi, nobetGorevTipId, nobetGrupIdListe) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var eczaneNobetIstekler = _eczaneNobetIstekService.GetDetaylarByNobetGrupIdList(baslangicTarihi, bitisTarihi.AddDays(10), nobetGrupIdListe) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var eczaneNobetMazeretler = _eczaneNobetMazeretService.GetDetaylarByEczaneIdList(baslangicTarihi, bitisTarihi, eczaneNobetGruplar.Select(s => s.EczaneId).Distinct().ToList()) .Where(w => w.MazeretId != 3) .ToList(); var takvimNobetGrupGunDegerIstatistikler = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler(nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupGorevTipler); var eczaneNobetGrupAltGruplarYenisehir2 = _eczaneNobetGrupAltGrupService.GetDetaylarByNobetGrupId(21); var eczaneNobetGrupAltGruplarToroslar1 = _eczaneNobetGrupAltGrupService.GetDetaylarByNobetGrupId(15); var altGruplarlaAyniGunNobetTutma = _nobetUstGrupKisitService.GetDetay("altGruplarlaAyniGunNobetTutma", nobetUstGrupId); var altGruplarlaAyniGunNobetTutmaToroslar = _nobetUstGrupKisitService.GetDetay("altGruplarlaAyniGunNobetTutmaToroslar", nobetUstGrupId); var eczaneNobetSonuclarAltGruplaAyniGun = new List <EczaneNobetSonucListe2>(); var eczaneNobetSonuclarAltGruplaAyniGunToroslar = new List <EczaneNobetSonucListe2>(); var indisId = 0; var altGruplarlaAyniGunNobetTutmayacakEczanelerYeniSehir1_2 = new List <EczaneGrupDetay>(); var altGruplarlaAyniGunNobetTutmayacakEczanelerYeniSehir3_2 = new List <EczaneGrupDetay>(); var altGruplarlaAyniGunNobetTutmayacakEczanelerToroslar = new List <EczaneGrupDetay>(); if (!altGruplarlaAyniGunNobetTutma.PasifMi) { //indisId = eczaneGruplar2.Select(s => s.EczaneGrupTanimId).Max(); #region yenişehir var altGrupluTakipEdilecekNobetGrupIdList = new List <int> { 20, //Yenişehir-1 21, //Yenişehir-2 - alt grubu olan 22 //Yenişehir-3 }; var eczaneNobetGruplarAltGruplaAyniGun = _eczaneNobetGrupService.GetDetaylar(altGrupluTakipEdilecekNobetGrupIdList, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id)).ToList(); eczaneNobetSonuclarAltGruplaAyniGun = eczaneNobetSonuclar .Where(w => altGrupluTakipEdilecekNobetGrupIdList.Contains(w.NobetGrupId)).ToList(); var ayniGunNobetTutmasiTakipEdilecekGruplar_1 = new List <int> { 20, //Yenişehir-1, //22 //Yenişehir-3 (M.Ü. Hastanesi) }; var ayniGunNobetTutmasiTakipEdilecekGruplar_3 = new List <int> { //20,//Yenişehir-1, 22 //Yenişehir-3 (M.Ü. Hastanesi) }; var altGrubuOlanNobetGruplar = new List <int> { 21 //Yenişehir-2 }; altGruplarlaAyniGunNobetTutmayacakEczanelerYeniSehir1_2 = _eczaneNobetOrtakService.AltGruplarlaSiraliNobetListesiniOlusturMersin( eczaneNobetSonuclarAltGruplaAyniGun, eczaneNobetGruplarAltGruplaAyniGun, eczaneNobetGrupAltGruplarYenisehir2, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, indisId, ayniGunNobetTutmasiTakipEdilecekGruplar_1, altGrubuOlanNobetGruplar, 0, (int)altGruplarlaAyniGunNobetTutma.SagTarafDegeri); altGruplarlaAyniGunNobetTutmayacakEczanelerYeniSehir3_2 = _eczaneNobetOrtakService.AltGruplarlaSiraliNobetListesiniOlusturMersin( eczaneNobetSonuclarAltGruplaAyniGun, eczaneNobetGruplarAltGruplaAyniGun, eczaneNobetGrupAltGruplarYenisehir2, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, indisId, ayniGunNobetTutmasiTakipEdilecekGruplar_3, altGrubuOlanNobetGruplar, 0, (int)altGruplarlaAyniGunNobetTutma.SagTarafDegeri); #endregion } if (!altGruplarlaAyniGunNobetTutmaToroslar.PasifMi) { #region toroslar var altGrupluTakipEdilecekNobetGrupIdListToroslar = new List <int> { 15, //Toroslar-1 - alt grubu olan 16 //Toroslar-2 }; var eczaneNobetGruplarAltGruplaAyniGunToroslar = _eczaneNobetGrupService.GetDetaylar(altGrupluTakipEdilecekNobetGrupIdListToroslar, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id)).ToList(); eczaneNobetSonuclarAltGruplaAyniGunToroslar = eczaneNobetSonuclar .Where(w => altGrupluTakipEdilecekNobetGrupIdListToroslar.Contains(w.NobetGrupId)).ToList(); var ayniGunNobetTutmasiTakipEdilecekGruplarToroslar = new List <int> { 16, //Toroslar-1, }; var altGrubuOlanNobetGruplarToroslar = new List <int> { 15 //Toroslar-2 }; altGruplarlaAyniGunNobetTutmayacakEczanelerToroslar = _eczaneNobetOrtakService .AltGruplarlaSiraliNobetListesiniOlusturMersin(eczaneNobetSonuclarAltGruplaAyniGunToroslar, eczaneNobetGruplarAltGruplaAyniGunToroslar, eczaneNobetGrupAltGruplarToroslar1, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, 1, ayniGunNobetTutmasiTakipEdilecekGruplarToroslar, altGrubuOlanNobetGruplarToroslar, 0, (int)altGruplarlaAyniGunNobetTutmaToroslar.SagTarafDegeri); #endregion } #region ikili eczaneler var ikiliEczaneAyniGunNobet = _nobetUstGrupKisitService.GetDetay("ikiliEczaneAyniGunNobet", nobetUstGrupId); var arasindaAyniGun2NobetFarkiOlanIkiliEczaneler = new List <EczaneGrupDetay>(); if (!ikiliEczaneAyniGunNobet.PasifMi) { //indisId = eczaneGruplar2.Select(s => s.EczaneGrupTanimId).Max(); arasindaAyniGun2NobetFarkiOlanIkiliEczaneler = _ayniGunTutulanNobetService.GetArasinda2FarkOlanIkiliEczaneleri( eczaneNobetGruplar, nobetGrupGorevTipler.Select(s => s.Id).ToArray(), (int)ikiliEczaneAyniGunNobet.SagTarafDegeri); } #endregion #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 && (int)oncekiAylarAyniGunNobet.SagTarafDegeri > 0) { indisId = eczaneGruplar2.Select(s => s.EczaneGrupTanimId).Max(); oncekiAylardaAyniGunNobetTutanEczaneler = _eczaneNobetSonucService.OncekiAylardaAyniGunNobetTutanlar( baslangicTarihi, eczaneNobetSonuclarBaslamaTarihindenSonrasi, indisId, (int)oncekiAylarAyniGunNobet.SagTarafDegeri); } #endregion #region sonraki aydaki istekler var sonrakiAy = bitisTarihi.AddDays(1); var bitisTarihiSonrakiAy = bitisTarihi.AddMonths((int)oncekiAylarAyniGunNobet.SagTarafDegeri + 2); var eczaneNobetIsteklerSonrakiDonem = _eczaneNobetIstekService.GetDetaylarByNobetGrupIdList(sonrakiAy, bitisTarihiSonrakiAy, nobetGrupIdListe) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var sonrakiDonemAyniGunNobetIstekGirilenler = _eczaneNobetIstekService.SonrakiAylardaAyniGunIstekGirilenEczaneler(eczaneNobetIsteklerSonrakiDonem); #endregion var nobetGrupKurallar = _nobetGrupKuralService.GetDetaylar(nobetGrupIdListe); var nobetUstGrupKisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId); var grupBazliKisitlar = _nobetGrupGorevTipKisitService.GetDetaylar(nobetUstGrupId); var dataModel = new MersinMerkezDataModelV2() { Yil = yilBitis, Ay = ayBitis, LowerBound = 0, UpperBound = 1, TimeLimit = eczaneNobetDataModelParametre.TimeLimit, CalismaSayisiLimit = eczaneNobetDataModelParametre.CalismaSayisi, BaslangicTarihi = baslangicTarihi, BitisTarihi = bitisTarihi, NobetUstGrupBaslangicTarihi = nobetUstGrupBaslangicTarihi, NobetUstGrupId = nobetUstGrupId, EczaneNobetTarihAralik = eczaneNobetTarihAralik, //karar değişkeni EczaneNobetTarihAralikIkiliEczaneler = new List <EczaneNobetTarihAralikIkili>(), //eczaneNobetTarihAralikIkiliEczaneler, EczaneKumulatifHedefler = eczaneKumulatifHedefler, //.Where(w => w.EczaneId != 121).ToList(), EczaneNobetIstatistikler = eczaneNobetIstatistikler, EczaneNobetMazeretler = eczaneNobetMazeretler, EczaneGrupTanimlar = eczaneGrupTanimlar, TarihAraligi = tarihAralik, NobetGruplar = nobetGruplar, EczaneGruplar = eczaneGruplar2, ArasindaAyniGun2NobetFarkiOlanIkiliEczaneler = arasindaAyniGun2NobetFarkiOlanIkiliEczaneler, OncekiAylardaAyniGunNobetTutanEczaneler = oncekiAylardaAyniGunNobetTutanEczaneler, AltGruplarlaAyniGunNobetTutmayacakEczanelerYenisehir1_2 = altGruplarlaAyniGunNobetTutmayacakEczanelerYeniSehir1_2, AltGruplarlaAyniGunNobetTutmayacakEczanelerYenisehir3_2 = altGruplarlaAyniGunNobetTutmayacakEczanelerYeniSehir3_2, AltGruplarlaAyniGunNobetTutmayacakEczanelerToroslar = altGruplarlaAyniGunNobetTutmayacakEczanelerToroslar, EczaneNobetIstekler = eczaneNobetIstekler, NobetGrupGunKurallar = _nobetGrupGunKuralService.GetDetaylarAktifList(nobetGrupIdListe), NobetGrupKurallar = nobetGrupKurallar, NobetGrupGorevTipler = nobetGrupGorevTipler, NobetGrupTalepler = _nobetGrupTalepService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi), EczaneNobetGruplar = eczaneNobetGruplar, Kisitlar = nobetUstGrupKisitlar, EczaneGrupNobetSonuclar = eczaneGrupNobetSonuclar, //EczaneNobetSonuclarAltGruplarlaBirlikte = eczaneNobetSonuclarAltGruplaAyniGun, EczaneNobetSonuclar = eczaneNobetSonuclarCozulenGruplar, EczaneGrupNobetSonuclarTumu = eczaneNobetSonuclar, EczaneNobetGrupGunKuralIstatistikler = enSonNobetler, TakvimNobetGrupGunDegerIstatistikler = takvimNobetGrupGunDegerIstatistikler, EczaneNobetGrupGunKuralIstatistikYatay = eczaneNobetGrupGunKuralIstatistikYatay, EczaneNobetGrupGunKuralIstatistikYataySon3Ay = eczaneNobetGrupGunKuralIstatistikYataySon3Ay, EczaneNobetGrupAltGruplar = new List <EczaneNobetGrupAltGrupDetay>(), //eczaneNobetGrupAltGruplar, EczaneNobetAltGrupTarihAralik = eczaneNobetAltGrupTarihAralik, IkiliEczaneler = ikiliEczaneler, SonrakiDonemAyniGunNobetIstekGirilenler = sonrakiDonemAyniGunNobetIstekGirilenler, NobetGrupGorevTipKisitlar = grupBazliKisitlar, Kalibrasyonlar = _kalibrasyonService.GetKalibrasyonlarYatay(nobetUstGrupId), DebugYapilacakEczaneler = debugYapilacakEczaneler }; //_eczaneNobetOrtakService.KurallariKontrolEtHaftaIciEnAzEnCok(nobetUstGrupId, eczaneNobetGrupGunKuralIstatistikYatay); _eczaneNobetOrtakService.KurallariKontrolEtMazeretIstek(nobetUstGrupId, eczaneNobetMazeretler, eczaneNobetIstekler); _eczaneNobetOrtakService.KurallariKontrolEtIstek(nobetUstGrupId, eczaneNobetIstekler, nobetGrupKurallar); return(dataModel); }
private MersinMerkezDataModel EczaneNobetDataModel(EczaneNobetDataModelParametre eczaneNobetDataModelParametre) { #region parametreler var nobetUstGrupId = eczaneNobetDataModelParametre.NobetUstGrupId; var yilBaslangic = eczaneNobetDataModelParametre.YilBaslangic; var yilBitis = eczaneNobetDataModelParametre.YilBitis; var ayBaslangic = eczaneNobetDataModelParametre.AyBaslangic; var ayBitis = eczaneNobetDataModelParametre.AyBitis; var nobetGrupIdListe = eczaneNobetDataModelParametre.NobetGrupId.ToList(); var nobetGorevTipId = eczaneNobetDataModelParametre.NobetGorevTipId; var nobetUstGrupBaslangicTarihi = eczaneNobetDataModelParametre.NobetUstGrupBaslangicTarihi; #endregion int aydakiGunSayisi = DateTime.DaysInMonth(yilBitis, ayBitis); var baslangicTarihi = new DateTime(yilBitis, ayBitis, 1); var bitisTarihi = new DateTime(yilBitis, ayBitis, aydakiGunSayisi); var nobetGruplar = _nobetGrupService.GetList(nobetGrupIdListe).OrderBy(s => s.Id).ToList(); var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetList(nobetGorevTipId, nobetGrupIdListe); var eczaneNobetSonuclar = _eczaneNobetSonucService.GetEczaneGrupNobetSonuc(nobetUstGrupId); var eczaneNobetGruplarTumu = _eczaneNobetGrupService.GetList(nobetGrupIdListe, baslangicTarihi, bitisTarihi); var eczaneNobetMazeretNobettenDusenler = _eczaneNobetMazeretService.GetEczaneNobetMazeretSayilari(baslangicTarihi, bitisTarihi, nobetGrupIdListe); //var eczaneNobettenMuafOlanlar = _eczaneNobetMuafiyetService.GetDetaylar(baslangicTarihi, bitisTarihi, nobetGrupIdListe); var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id) //&& !eczaneNobettenMuafOlanlar.Select(s => s.EczaneId).Contains(w.EczaneId) ).ToList(); var eczaneNobetSonuclarCozulenGrup = eczaneNobetSonuclar .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.EczaneNobetGrupId) //&& !eczaneNobettenMuafOlanlar.Select(s => s.EczaneId).Contains(w.EczaneId) && nobetGrupIdListe.Contains(w.NobetGrupId)).ToList(); var enSonNobetDurumlari = eczaneNobetSonuclarCozulenGrup .GroupBy(g => new { g.NobetGunKuralId, g.EczaneNobetGrupId, g.EczaneId, g.EczaneAdi, g.NobetGrupId, g.NobetGrupAdi, g.NobetGorevTipId }) .Select(s => new EczaneNobetGrupGunKuralIstatistik { NobetGunKuralId = s.Key.NobetGunKuralId, EczaneNobetGrupId = s.Key.EczaneNobetGrupId, EczaneId = s.Key.EczaneId, EczaneAdi = s.Key.EczaneAdi, NobetGrupId = s.Key.NobetGrupId, NobetGrupAdi = s.Key.NobetGrupAdi, NobetGorevTipId = s.Key.NobetGorevTipId, IlkNobetTarihi = s.Min(c => c.Tarih), SonNobetTarihi = s.Max(c => c.Tarih), NobetSayisi = s.Count() }).ToList(); var sonucuOlanGunler = enSonNobetDurumlari .Select(s => new { s.NobetGunKuralId, s.NobetGorevTipId }) .Distinct() .OrderBy(o => o.NobetGorevTipId).ThenBy(t => t.NobetGunKuralId).ToList(); var varsayilanBaslangicNobetTarihi = new DateTime(2012, 1, 1); foreach (var nobetGunKural in sonucuOlanGunler) { var nobetDurumlari = enSonNobetDurumlari .Where(w => w.NobetGunKuralId == nobetGunKural.NobetGunKuralId) .Select(s => s.EczaneNobetGrupId).ToList(); var sonucuOlmayanlar = eczaneNobetGruplar .Where(w => !nobetDurumlari.Contains(w.Id)).ToList(); if (sonucuOlmayanlar.Count > 0) { foreach (var eczaneNobetGrup in sonucuOlmayanlar) { enSonNobetDurumlari.Add(new EczaneNobetGrupGunKuralIstatistik { EczaneId = eczaneNobetGrup.EczaneId, EczaneAdi = eczaneNobetGrup.EczaneAdi, NobetGrupAdi = eczaneNobetGrup.NobetGrupAdi, NobetAltGrupId = 0, EczaneNobetGrupId = eczaneNobetGrup.Id, IlkNobetTarihi = varsayilanBaslangicNobetTarihi, // eczaneNobetGrup.BaslangicTarihi, SonNobetTarihi = varsayilanBaslangicNobetTarihi, // eczaneNobetGrup.BaslangicTarihi, NobetGorevTipId = nobetGunKural.NobetGorevTipId, NobetGunKuralId = nobetGunKural.NobetGunKuralId, NobetGrupId = eczaneNobetGrup.NobetGrupId, NobetSayisi = 1 }); } } } var grupluEczaneNobetSonuclar = eczaneNobetSonuclar .Where(w => w.Tarih.Year == yilBitis && w.Tarih.Month == ayBitis).ToList(); var eczaneGrupEdges = _eczaneGrupService.GetEdges() .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(); //sonuclarda ilişkili eczaneler var eczaneGruplar = _eczaneGrupService.GetDetaylar(nobetUstGrupId) .Where(x => x.EczaneGrupTanimBitisTarihi == null //&& x.EczaneGrupTanimTipId == 2 //coğrafi yakınlık hariç && (eczaneGrupEdges.Select(s => s.From).Distinct().Contains(x.EczaneId) || eczaneGrupEdges.Select(s => s.To).Distinct().Contains(x.EczaneId)) && nobetGrupIdListe.Contains(x.NobetGrupId) ) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); //fazladan gelen tanımlar var iyileştirmekte fayda var var eczaneGrupTanimlar = _eczaneGrupTanimService.GetAktifTanimList(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(); var esGrupluEczaneler = _eczaneNobetGrupService.GetDetaylar(nobetUstGrupId) .Where(x => nobetGrupIdListe.Contains(x.NobetGrupId) && x.BitisTarihi == null && !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneId).Contains(x.EczaneId)) .Select(x => x.EczaneId).Distinct().ToList(); //var eczaneNobetGruplar = _eczaneNobetGrupService.GetAktifEczaneGrupList(nobetGruplar.Select(w => w.Id).ToList()) // .Where(s => !eczaneNobetMazeretNobettenDusenler.Select(f => f.EczaneId).Contains(s.EczaneId)).ToList(); //nöbet yazılacak tarih aralığı(örn. Ocak ayının tüm günleri) var tarihAralik = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupIdListe, nobetGorevTipId); //var eczaneKumulatifHedefler = _takvimService // .GetEczaneKumulatifHedeflerTumYillar(yilBaslangic, yilBitis, ayBaslangic, ayBitis, nobetGrupIdListe); var eczaneKumulatifHedefler = _takvimService.GetEczaneKumulatifHedefler(yilBaslangic, yilBitis, ayBaslangic, ayBitis, nobetGrupIdListe, nobetGorevTipId) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var eczaneNobetTarihAralik = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGorevTipId, nobetGrupIdListe) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var takvimNobetGrupGunDegerIstatistikler = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler(nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupIdListe, nobetGorevTipId); #region aynı gün nöbet tutan eczaneler /* * var ayniGunNobetTutmasiTakipEdilecekGruplar = new List<int> { 20, 21, 22 }; * * //nöbet yazılacak tarih aralığı(örn. Ocak ayının tüm günleri) * int cozumOncekiAyi = GetOncekiAy(periyot: 3, cozumAyi: ayBitis); * var cozumOncekiIkiAyi = GetOncekiAy(periyot: 2, cozumAyi: ayBitis); * var aktifSonuclar = _eczaneNobetSonucAktifService.GetSonuclarAylik(yilBitis, ayBitis, nobetUstGrupId); * var ayniAydakiDigerGruplarinSonuclari = _eczaneNobetSonucService.GetSonuclarAylik(yilBitis, ayBitis, nobetUstGrupId) * .Where(w => ayniGunNobetTutmasiTakipEdilecekGruplar.Contains(w.NobetGrupId)).ToList(); * * var ayIcindekiTumSonuclar = aktifSonuclar.Union(ayniAydakiDigerGruplarinSonuclari).ToList(); * var ayIcindeCozulenNobetGruplar = ayIcindekiTumSonuclar.Select(s => s.NobetGrupId).Distinct().ToList(); * #region son iki ay * * var sonIkiAyBakilacakGruplar = new List<int>(); * * foreach (var item in ayIcindeCozulenNobetGruplar) * { * sonIkiAyBakilacakGruplar.Add(item); * } * * //şimdi çözülecek grup * foreach (var item in nobetGrupIdListe) * { * sonIkiAyBakilacakGruplar.Add(item); * } * * var sonIkiAyAyniGunNobetTutanEczaneler = new List<EczaneCiftGrup>(); * var gruplar = sonIkiAyBakilacakGruplar.Distinct().ToList(); * * if (_nobetUstGrupKisitService.GetKisitPasifMi("sonIkiAydakiGrup", nobetUstGrupId) && sonIkiAyBakilacakGruplar.Count() > 1 && ayBitis > 1) * { * var sonIkiAydakiSonuclar = _eczaneNobetSonucService.GetSonuclar(yilBitis, cozumOncekiAyi, ayBitis - 1, nobetUstGrupId) * .Where(x => gruplar.Contains(x.NobetGrupId) * && ayniGunNobetTutmasiTakipEdilecekGruplar.Contains(x.NobetGrupId)).ToList(); * * sonIkiAyAyniGunNobetTutanEczaneler = _eczaneNobetOrtakService.GetCiftGrupluEczaneler(sonIkiAydakiSonuclar, 1); * } #endregion * #region yillik kümülatif * * var yilIcindeAyniGunNobetTutanEczaneler = new List<EczaneCiftGrup>(); * * if (_nobetUstGrupKisitService.GetKisitPasifMi("yildaEncokUcKezGrup", nobetUstGrupId) && sonIkiAyBakilacakGruplar.Count() > 1 && ayBitis > 2) * { * var yillikKumulatifSonuclar = _eczaneNobetSonucService.GetSonuclarYillikKumulatif(yilBitis, ayBitis - 1, nobetUstGrupId) * .Where(x => gruplar.Contains(x.NobetGrupId) * && ayniGunNobetTutmasiTakipEdilecekGruplar.Contains(x.NobetGrupId)).ToList(); * * yilIcindeAyniGunNobetTutanEczaneler = _eczaneNobetOrtakService.GetCiftGrupluEczaneler(yillikKumulatifSonuclar, 3); * * yilIcindeAyniGunNobetTutanEczaneler = (from a in yilIcindeAyniGunNobetTutanEczaneler * from t in _eczaneNobetGrupAltGrupService.GetDetaylar() * .Where(w => w.EczaneId == a.EczaneId).DefaultIfEmpty() * select new EczaneCiftGrup * { * Id = a.Id, * NobetAltGrupId = (t?.EczaneId == a.EczaneId) ? t.NobetAltGrupId : 0, * EczaneId = a.EczaneId, * BirlikteNobetTutmaSayisi = a.BirlikteNobetTutmaSayisi * }).ToList(); * } #endregion * * var ayIcindeAyniGunNobetTutanEczaneler = new List<EczaneCiftGrup>(); */ #endregion var mersinMerkezDataModel = new MersinMerkezDataModel() { Yil = yilBitis, Ay = ayBitis, LowerBound = 0, UpperBound = 1, NobetUstGrupId = nobetUstGrupId, EczaneNobetTarihAralik = eczaneNobetTarihAralik, //karar değişkeni EczaneKumulatifHedefler = eczaneKumulatifHedefler, //.Where(w => w.EczaneId != 121).ToList(), TarihAraligi = tarihAralik, NobetGruplar = nobetGruplar, EczaneGrupTanimlar = eczaneGrupTanimlar, EczaneGruplar = eczaneGruplar2, EczaneNobetMazeretler = _eczaneNobetMazeretService.GetDetaylar(yilBitis, ayBitis, esGrupluEczaneler), EczaneNobetIstekler = _eczaneNobetIstekService.GetDetaylarByNobetGrupIdList(yilBitis, ayBitis, nobetGrupIdListe), NobetGrupGunKurallar = _nobetGrupGunKuralService.GetAktifList(nobetGrupIdListe), NobetGrupKurallar = _nobetGrupKuralService.GetDetaylar(nobetGrupIdListe), NobetGrupGorevTipler = _nobetGrupGorevTipService.GetList(nobetGorevTipId, nobetGrupIdListe), NobetGrupTalepler = _nobetGrupTalepService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi), EczaneNobetGruplar = eczaneNobetGruplar, NobetUstGrupKisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId), EczaneGrupNobetSonuclar = eczaneGrupNobetSonuclar, EczaneGrupNobetSonuclarTumu = eczaneNobetSonuclar, EczaneNobetSonuclar = eczaneNobetSonuclarCozulenGrup, EczaneNobetGrupGunKuralIstatistikler = enSonNobetDurumlari, TakvimNobetGrupGunDegerIstatistikler = takvimNobetGrupGunDegerIstatistikler #region aynı gün nöbet tutma durumu //AyIcindeAyniGunNobetTutanEczaneler = ayIcindeAyniGunNobetTutanEczaneler, //bu alan EczaneNobetCozAktifiGuncelle içinde kullanılıyor. //YilIcindeAyniGunNobetTutanEczaneler = yilIcindeAyniGunNobetTutanEczaneler, //SonIkiAyAyniGunNobetTutanEczaneler = sonIkiAyAyniGunNobetTutanEczaneler, //EczaneNobetSonuclarSonIkiAy = _eczaneNobetSonucService.GetSonuclar(yilBitis, cozumOncekiIkiAyi, ayBitis, nobetUstGrupId), //EczaneNobetSonuclarOncekiAylar = _eczaneNobetSonucService.GetSonuclar(yilBitis, ayBaslangic, ayBitis, nobetUstGrupId) #endregion }; return(mersinMerkezDataModel); }
private MersinMerkezDataModelV2 EczaneNobetDataModel(EczaneNobetDataModelParametre eczaneNobetDataModelParametre) { #region parametreler var nobetUstGrupId = eczaneNobetDataModelParametre.NobetUstGrupId; var yilBaslangic = eczaneNobetDataModelParametre.YilBaslangic; var yilBitis = eczaneNobetDataModelParametre.YilBitis; var ayBaslangic = eczaneNobetDataModelParametre.AyBaslangic; var ayBitis = eczaneNobetDataModelParametre.AyBitis; var nobetGrupIdListe = eczaneNobetDataModelParametre.NobetGrupId.ToList(); var nobetGorevTipId = eczaneNobetDataModelParametre.NobetGorevTipId; var nobetUstGrupBaslangicTarihi = eczaneNobetDataModelParametre.NobetUstGrupBaslangicTarihi; var ayBitisBaslangicGunu = eczaneNobetDataModelParametre.AyBitisBaslangicGunu; var ayBitisBitisGunu = eczaneNobetDataModelParametre.AyBitisBitisGunu; var baslangicTarihi = eczaneNobetDataModelParametre.BaslangicTarihi; var bitisTarihi = eczaneNobetDataModelParametre.BitisTarihi; #endregion #region başlangıç bitiş tarihleri //int aydakiGunSayisi = DateTime.DaysInMonth(yilBitis, ayBitis); //var baslangicTarihi = new DateTime(yilBitis, ayBitis, 1); //var bitisTarihi = new DateTime(yilBitis, ayBitis, aydakiGunSayisi); //if (!eczaneNobetDataModelParametre.BuAyVeSonrasi) //{ // if (ayBitisBaslangicGunu > 1) // { // baslangicTarihi = new DateTime(yilBitis, ayBitis, ayBitisBaslangicGunu); // } // if (ayBitisBitisGunu < aydakiGunSayisi) // { // bitisTarihi = new DateTime(yilBitis, ayBitis, ayBitisBitisGunu); // } //} //özel tarih aralığı //baslangicTarihi = new DateTime(yilBitis, 4, 16); //bitisTarihi = new DateTime(yilBitis, 7, 8); #endregion var nobetGruplar = _nobetGrupService.GetDetaylar(nobetGrupIdListe).OrderBy(s => s.Id).ToList(); var nobetGrupGorevTipler = _nobetGrupGorevTipService.GetDetaylar(nobetGorevTipId, nobetGrupIdListe); var eczaneNobetSonuclar = _eczaneNobetSonucService.GetSonuclar(nobetUstGrupId); //nobetGrupIdListe //.Where(w => !(w.EczaneNobetGrupId == 301 && w.TakvimId == 88)).ToList(); //.Where(w => w.Tarih.Year > 2017).ToList(); var eczaneNobetMazeretNobettenDusenler = _eczaneNobetMazeretService.GetEczaneNobetMazeretSayilari(baslangicTarihi, bitisTarihi, nobetGrupIdListe); var eczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi) .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.Id)).ToList(); var eczaneNobetSonuclarCozulenGrup = eczaneNobetSonuclar .Where(w => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneNobetGrupId).Contains(w.EczaneNobetGrupId) && nobetGrupIdListe.Contains(w.NobetGrupId)).ToList(); var enSonNobetler = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplar, eczaneNobetSonuclarCozulenGrup); var eczaneNobetGrupGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler); var grupluEczaneNobetSonuclar = eczaneNobetSonuclar .Where(w => (w.Tarih >= baslangicTarihi && w.Tarih <= bitisTarihi)).ToList(); var eczaneGrupEdges = _eczaneGrupService.GetEdges() .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 tarihAralik = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupIdListe, nobetGorevTipId); //var tarihAralikAltGrupluGruplar = _takvimService.GetTakvimNobetGrupAltGruplar(baslangicTarihi, bitisTarihi, nobetGrupIdListe, nobetGorevTipId); var eczaneKumulatifHedefler = new List <EczaneNobetIstatistik>(); //_takvimService.GetEczaneKumulatifHedefler(yilBaslangic, yilBitis, ayBaslangic, ayBitis, nobetGrupIdListe, nobetGorevTipId) //.Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var eczaneNobetIstatistikler = new List <EczaneNobetIstatistik>(); //_eczaneNobetSonucService.GetEczaneNobetIstatistik2(nobetGrupIdListe) //.Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var eczaneNobetTarihAralik = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGorevTipId, nobetGrupIdListe) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); //2. karar değişkeni. her eczane ve ilgili altgrup var eczaneNobetAltGrupTarihAralik = _takvimService.GetEczaneNobetAltGrupTarihAralik(baslangicTarihi, bitisTarihi, nobetGorevTipId, nobetGrupIdListe) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var eczaneNobetIstekler = _eczaneNobetIstekService.GetDetaylarByNobetGrupIdList(baslangicTarihi, bitisTarihi.AddDays(10), nobetGrupIdListe) .Where(w => eczaneNobetGruplar.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList(); var eczaneNobetMazeretler = _eczaneNobetMazeretService.GetDetaylarByEczaneIdList(baslangicTarihi, bitisTarihi, eczaneNobetGruplar.Select(s => s.EczaneId).Distinct().ToList()) .Where(w => w.MazeretId != 3) .ToList(); var takvimNobetGrupGunDegerIstatistikler = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler(nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupIdListe, nobetGorevTipId); var eczaneNobetGrupAltGruplar = _eczaneNobetGrupAltGrupService.GetDetaylar(nobetUstGrupId); var mersinMerkezDataModel = new MersinMerkezDataModelV2() { Yil = yilBitis, Ay = ayBitis, LowerBound = 0, UpperBound = 1, 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, EczaneNobetIstekler = eczaneNobetIstekler, NobetGrupGunKurallar = _nobetGrupGunKuralService.GetDetaylarAktifList(nobetGrupIdListe), NobetGrupKurallar = _nobetGrupKuralService.GetDetaylar(nobetGrupIdListe), NobetGrupGorevTipler = nobetGrupGorevTipler, NobetGrupTalepler = _nobetGrupTalepService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi), EczaneNobetGruplar = eczaneNobetGruplar, Kisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId), EczaneGrupNobetSonuclar = eczaneGrupNobetSonuclar, EczaneNobetSonuclar = eczaneNobetSonuclarCozulenGrup, EczaneGrupNobetSonuclarTumu = eczaneNobetSonuclar, EczaneNobetGrupGunKuralIstatistikler = enSonNobetler, TakvimNobetGrupGunDegerIstatistikler = takvimNobetGrupGunDegerIstatistikler, EczaneNobetGrupGunKuralIstatistikYatay = eczaneNobetGrupGunKuralIstatistikYatay, EczaneNobetGrupAltGruplar = eczaneNobetGrupAltGruplar, EczaneNobetAltGrupTarihAralik = eczaneNobetAltGrupTarihAralik }; return(mersinMerkezDataModel); }
private GiresunDataModel 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 nobetGrupGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler; var nobetGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler.Select(s => s.NobetGorevTipId).Distinct().ToList(); #endregion if (baslangicTarihi < nobetUstGrupBaslangicTarihi) { throw new Exception($"Nöbet başlangıç tarihi <strong>({baslangicTarihi.ToShortDateString()})</strong> üst grup başlama tarihinden <strong>({nobetUstGrupBaslangicTarihi.ToShortDateString()})</strong> küçük olamaz."); } var debugYapilacakEczaneler = _debugEczaneService.GetDetaylarAktifOlanlar(nobetUstGrupId); 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.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi) .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 .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); nobetGorevTipId = 2; if (!nobetGorevTipler.Contains(nobetGorevTipId)) { nobetGorevTipId = 0; } var eczaneNobetGruplarGorevTip2 = eczaneNobetGruplarTumu .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); var eczaneNobetSonuclarOncekiAylar = eczaneNobetSonuclar .Where(w => w.Tarih >= nobetUstGrupBaslangicTarihi && 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 son3Ay = new DateTime(2020, 1, 1); //baslangicTarihi.AddMonths(-2); var eczaneNobetSonuclarSon3Ay = eczaneNobetSonuclarCozulenGruplar .Where(w => w.Tarih >= son3Ay).ToList(); var sonuclarKontrol = _eczaneNobetSonucService.GetSonuclar(baslangicTarihi, bitisTarihi, eczaneNobetSonuclarCozulenGruplar); if (sonuclarKontrol.Count > 0) { throw new Exception("Kriterlere uygun <strong>daha önce yazılmış nöbetler</strong> bulunmaktadır. Lütfen kontrol ediniz!"); } var tarihAralik = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupGorevTipler); var enSonNobetler = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclarCozulenGruplar); var enSonNobetlerSon3Ay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclarSon3Ay); var eczaneNobetGrupGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler); var eczaneBazliGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneBazliGunKuralIstatistikYatay(enSonNobetler); var eczaneNobetGrupGunKuralIstatistikYataySon3Ay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetlerSon3Ay); //var bak = eczaneNobetGrupGunKuralIstatistikYatay.Where(w => w.NobetGorevTipId == 2).ToList(); var anahtarListe = eczaneNobetSonuclar .Where(w => w.Tarih < nobetUstGrupBaslangicTarihi && 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, nobetGrupGorevTip1) .Where(w => eczaneNobetGruplarGorevTip1.Select(s => s.Id).Contains(w.EczaneNobetGrupId)).ToList(); 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(); var eczaneNobetTarihAralikTumu = eczaneNobetTarihAralik1.Union(eczaneNobetTarihAralik2).ToList(); //var kd = eczaneNobetTarihAralikTumu.Where(w => w.EczaneAdi == "AHSEN").ToList(); var eczaneNobetTarihAralik = _eczaneNobetOrtakService.AmacFonksiyonuKatsayisiBelirle(eczaneNobetTarihAralikTumu, eczaneNobetGrupGunKuralIstatistikYatay); var ikiliEczaneler = _ayniGunTutulanNobetService.GetDetaylar(nobetGrupIdListe); //.Where(w => w.EczaneId1 != w.EczaneId2).ToList(); //.Select(s => new //{ // s.EczaneAdi1, // s.EczaneAdi2, // s.EczaneId1, // s.EczaneId2 //}) //.Distinct() //.ToList(); //.Where(w => w.NobetGorevTipId1 == 1 && w.NobetGorevTipId2 == 1).ToList(); //var ikiliEczaneler2 = new List<AyniGunTutulanNobetDetay>(); //foreach (var ikiliEczane in ikiliEczaneler) //{ // ikiliEczaneler2.Add(new AyniGunTutulanNobetDetay // { // EczaneId1 = ikiliEczane.EczaneId1, // EczaneId2 = ikiliEczane.EczaneId2, // EczaneAdi1 = ikiliEczane.EczaneAdi1, // EczaneAdi2 = ikiliEczane.EczaneAdi2 // }); //} 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 = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler(nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupGorevTipler); var eczaneNobetGrupAltGruplar = _eczaneNobetGrupAltGrupService.GetDetaylar(nobetUstGrupId); #region alt Gruplarla Aynı Gün Nöbet Tutma var altGruplarlaAyniGunNobetTutma = _nobetUstGrupKisitService.GetDetay("altGruplarlaAyniGunNobetTutma", nobetUstGrupId); var eczaneNobetSonuclarAltGruplaAyniGun = new List <EczaneNobetSonucListe2>(); var altGruplarlaAyniGunNobetTutmayacakEczanelerSehirDisi = new List <EczaneGrupDetay>(); var altGruplarlaAyniGunNobetTutmayacakEczanelerSehirIci1 = new List <EczaneGrupDetay>(); var altGruplarlaAyniGunNobetTutmayacakEczanelerSehirIci2 = new List <EczaneGrupDetay>(); if (!altGruplarlaAyniGunNobetTutma.PasifMi) { eczaneNobetSonuclarAltGruplaAyniGun = eczaneNobetSonuclar .Where(w => eczaneNobetGruplarGorevTip1.Select(s => s.NobetGorevTipId).Contains(w.NobetGorevTipId)).ToList(); #region 13 - 11,12 var ayniGunNobetTutmasiTakipEdilecekAltGruplar = new List <int> { 13 //Şehir dışı (doğu + batı) }; var altGrubuOlanNobetGruplar = new List <int> { 11, //Şehir içi (merkez-1) 12 //Şehir içi (merkez-2) }; altGruplarlaAyniGunNobetTutmayacakEczanelerSehirDisi = _eczaneNobetOrtakService.AltGruplarlaSiraliNobetListesiniOlusturGiresun(eczaneNobetSonuclarAltGruplaAyniGun, eczaneNobetGruplarGorevTip1, eczaneNobetGrupAltGruplar, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, 0, ayniGunNobetTutmasiTakipEdilecekAltGruplar, altGrubuOlanNobetGruplar); #endregion #region 11 - 12,13 ayniGunNobetTutmasiTakipEdilecekAltGruplar = new List <int> { 11//Şehir içi (merkez-1) }; altGrubuOlanNobetGruplar = new List <int> { 12, //Şehir içi (merkez-2) 13 //Şehir dışı (doğu + batı) }; altGruplarlaAyniGunNobetTutmayacakEczanelerSehirIci1 = _eczaneNobetOrtakService.AltGruplarlaSiraliNobetListesiniOlusturGiresun(eczaneNobetSonuclarAltGruplaAyniGun, eczaneNobetGruplarGorevTip1, eczaneNobetGrupAltGruplar, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, 0, ayniGunNobetTutmasiTakipEdilecekAltGruplar, altGrubuOlanNobetGruplar); #endregion #region 12 - 11,13 ayniGunNobetTutmasiTakipEdilecekAltGruplar = new List <int> { 12//Şehir içi (merkez-2) }; altGrubuOlanNobetGruplar = new List <int> { 11, //Şehir içi (merkez-1) 13 //Şehir dışı (doğu + batı) }; altGruplarlaAyniGunNobetTutmayacakEczanelerSehirIci2 = _eczaneNobetOrtakService.AltGruplarlaSiraliNobetListesiniOlusturGiresun(eczaneNobetSonuclarAltGruplaAyniGun, eczaneNobetGruplarGorevTip1, eczaneNobetGrupAltGruplar, altGruplarlaAyniGunNobetTutma, nobetUstGrupBaslangicTarihi, 0, ayniGunNobetTutmasiTakipEdilecekAltGruplar, altGrubuOlanNobetGruplar); #endregion } #endregion #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 nobetGrupKurallar = _nobetGrupKuralService.GetDetaylarByNobetGrupGorevTipIdList(nobetGrupGorevTipler.Select(s => s.Id).ToList()); var nobetUstGrupKisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId); var grupBazliKisitlar = _nobetGrupGorevTipKisitService.GetDetaylar(nobetUstGrupId); var giresunDataModel = new GiresunDataModel() { 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 = ayniGunNoetTutanEczaneGruplar, AltGruplarlaAyniGunNobetTutmayacakEczanelerSehirDisi = altGruplarlaAyniGunNobetTutmayacakEczanelerSehirDisi, AltGruplarlaAyniGunNobetTutmayacakEczanelerSehirIci1 = altGruplarlaAyniGunNobetTutmayacakEczanelerSehirIci1, AltGruplarlaAyniGunNobetTutmayacakEczanelerSehirIci2 = altGruplarlaAyniGunNobetTutmayacakEczanelerSehirIci2, 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, EczaneNobetSonuclarAltGruplarlaBirlikte = eczaneNobetSonuclarAltGruplaAyniGun, EczaneNobetGrupGunKuralIstatistikler = enSonNobetler, TakvimNobetGrupGunDegerIstatistikler = takvimNobetGrupGunDegerIstatistikler, EczaneNobetGrupGunKuralIstatistikYatay = eczaneNobetGrupGunKuralIstatistikYatay, EczaneNobetGrupGunKuralIstatistikYataySon3Ay = eczaneNobetGrupGunKuralIstatistikYataySon3Ay, EczaneBazliGunKuralIstatistikYatay = eczaneBazliGunKuralIstatistikYatay, EczaneNobetGrupAltGruplar = eczaneNobetGrupAltGruplar, NobetGrupGorevTipKisitlar = grupBazliKisitlar, IkiliEczaneler = ikiliEczaneler, DebugYapilacakEczaneler = debugYapilacakEczaneler }; //_eczaneNobetOrtakService.KurallariKontrolEtHaftaIciEnAzEnCok(nobetUstGrupId, eczaneNobetGrupGunKuralIstatistikYatay); _eczaneNobetOrtakService.KurallariKontrolEtMazeretIstek(nobetUstGrupId, eczaneNobetMazeretler, eczaneNobetIstekler); _eczaneNobetOrtakService.KurallariKontrolEtIstek(nobetUstGrupId, eczaneNobetIstekler, nobetGrupKurallar); return(giresunDataModel); }
public void ModelCoz(EczaneNobetModelCoz eczaneNobetModelCoz) { var nobetGruplar = _nobetGrupService.GetListByNobetUstGrupId(eczaneNobetModelCoz.NobetUstGrupId); if (nobetGruplar.Count > 0) { #region başka gruplarla ilişkisi olan gruplar var eczaneGrupDetaylar = _eczaneGrupService.GetDetaylar() .Where(d => d.EczaneGrupTanimBitisTarihi == null && nobetGruplar.Select(s => s.Id).Contains(d.NobetGrupId)).ToList(); //başka gruplarla ilişkisi olan gruplar var esGruplar = eczaneGrupDetaylar.Select(x => x.NobetGrupId).Distinct().OrderBy(x => x).ToList(); //Birbiri ile ilişkili grupların gruplanması var esliNobetGruplar = _eczaneGrupService.EsGrupluEczanelerinGruplariniBelirle(eczaneGrupDetaylar, esGruplar) .Where(w => eczaneNobetModelCoz.NobetGrupId.Contains(w.NobetGrupId)).ToList(); //.Where(w => w.NobetGrupId == eczaneNobetModelCoz.NobetGrupId || eczaneNobetModelCoz.NobetGrupId.Contains(0)).ToList(); #endregion #region başka gruplarla ilişkisi olmayan gruplar var tekEczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(eczaneNobetModelCoz.NobetUstGrupId) .Where(x => !esGruplar.Contains(x.NobetGrupId)).ToList(); var tekliNobetGruplar = tekEczaneNobetGruplar .Where(d => nobetGruplar.Select(s => s.Id).Contains(d.NobetGrupId)) .Select(c => c.NobetGrupId).Distinct().ToList(); #endregion #region tüm nöbet gruplar var tumNobetGruplar = new List <NobetBagGrup>(); foreach (var esliNobetGrup in esliNobetGruplar.Distinct()) { tumNobetGruplar.Add(new NobetBagGrup { Id = esliNobetGrup.Id, NobetGrupId = esliNobetGrup.NobetGrupId }); } var indis = tumNobetGruplar.Select(s => s.Id).LastOrDefault(); foreach (var tekliNobetGrup in tekliNobetGruplar.Distinct()) { indis++; tumNobetGruplar.Add(new NobetBagGrup { Id = indis, NobetGrupId = tekliNobetGrup }); } var nobetGrupTanimlar = tumNobetGruplar.Select(s => s.Id).Distinct().ToList(); #endregion #region Karar kuralları var model = new EczaneNobetDataModelParametre { //AyBaslangic = eczaneNobetModelCoz.AyBaslangic, AyBitis = eczaneNobetModelCoz.AyBitis, NobetGorevTipId = eczaneNobetModelCoz.NobetGorevTipId, NobetGrupId = eczaneNobetModelCoz.NobetGrupId, NobetUstGrupId = eczaneNobetModelCoz.NobetUstGrupId, //YilBaslangic = eczaneNobetModelCoz.YilBaslangic, //YilBitis = eczaneNobetModelCoz.YilBitis }; if (eczaneNobetModelCoz.NobetGrupId.Contains(0) && eczaneNobetModelCoz.AyBitis == 0) {//ay ve gruplar --tümü-- foreach (var ay in _takvimService.GetAylar()) { foreach (var item in nobetGrupTanimlar) { var r = new Random(); var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => r.NextDouble()).ToList(); foreach (var item2 in liste) { var liste2 = new int[] { item2 }; model.AyBitis = ay.Id; model.NobetGrupId = liste2; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } } else if (eczaneNobetModelCoz.NobetGrupId.Contains(0)) {//ay seçili, gruplar --tümü-- if (eczaneNobetModelCoz.BuAyVeSonrasi) { var aylar = _takvimService.GetAylar() .Where(w => w.Id >= eczaneNobetModelCoz.AyBitis).ToList(); foreach (var ay in aylar) { foreach (var item in nobetGrupTanimlar) { var r = new Random(); var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => r.NextDouble()).ToList(); foreach (var item2 in liste) { var liste2 = new int[] { item2 }; model.AyBitis = ay.Id; model.NobetGrupId = liste2; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } } else { foreach (var item in nobetGrupTanimlar) { var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => x).ToList(); foreach (var item2 in liste) { var liste2 = new int[] { item2 }; model.NobetGrupId = liste2; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } } else if (eczaneNobetModelCoz.AyBitis == 0) {//grup seçili, aylar --tümü-- foreach (var ay in _takvimService.GetAylar()) { foreach (var item in tumNobetGruplar .Where(x => eczaneNobetModelCoz.NobetGrupId.Contains(x.NobetGrupId)) //.Where(x => x.NobetGrupId == eczaneNobetModelCoz.NobetGrupId) .Select(s => s.Id).Distinct().ToList()) { var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => x).ToList(); foreach (var item2 in liste) { var liste2 = new int[] { item2 }; model.AyBitis = ay.Id; model.NobetGrupId = liste2; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } } else {//seçili grup ve ay if (eczaneNobetModelCoz.BuAyVeSonrasi) { var aylar = _takvimService.GetAylar() .Where(w => w.Id >= eczaneNobetModelCoz.AyBitis).ToList(); foreach (var ay in aylar) { foreach (var item in tumNobetGruplar .Where(x => eczaneNobetModelCoz.NobetGrupId.Contains(x.NobetGrupId)) //.Where(x => x.NobetGrupId == eczaneNobetModelCoz.NobetGrupId) .Select(s => s.Id).Distinct().ToList()) { var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => x).ToArray(); model.AyBitis = ay.Id; model.NobetGrupId = liste; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } else { foreach (var item in tumNobetGruplar .Where(x => eczaneNobetModelCoz.NobetGrupId.Contains(x.NobetGrupId)) //.Where(x => x.NobetGrupId == eczaneNobetModelCoz.NobetGrupId) .Select(s => s.Id).Distinct().ToList()) { var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => x).ToArray(); model.NobetGrupId = liste; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); } } #endregion } } }
private KirikhanDataModel 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 nobetGrupGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler; var nobetGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler.Select(s => s.NobetGorevTipId).Distinct().ToList(); var yazBaslangic = new DateTime(baslangicTarihi.Year, 6, 1); var yazBitis = new DateTime(baslangicTarihi.Year, 9, 15); #endregion if (baslangicTarihi < nobetUstGrupBaslangicTarihi) { throw new Exception($"Nöbet başlangıç tarihi <strong>({baslangicTarihi.ToShortDateString()})</strong> üst grup başlama tarihinden <strong>({nobetUstGrupBaslangicTarihi.ToShortDateString()})</strong> küçük olamaz."); } var debugYapilacakEczaneler = _debugEczaneService.GetDetaylarAktifOlanlar(nobetUstGrupId); 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.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi) .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 .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); nobetGorevTipId = 13; if (!nobetGorevTipler.Contains(nobetGorevTipId)) { nobetGorevTipId = 0; } var eczaneNobetGruplarGorevTip2 = eczaneNobetGruplarTumu .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); var eczaneNobetSonuclarOncekiAylar = eczaneNobetSonuclar .Where(w => w.Tarih >= nobetUstGrupBaslangicTarihi && 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 son3Ay = baslangicTarihi.AddMonths(-2); var eczaneNobetSonuclarSon3Ay = eczaneNobetSonuclarCozulenGruplar .Where(w => w.Tarih >= son3Ay).ToList(); var sonuclarKontrol = _eczaneNobetSonucService.GetSonuclar(baslangicTarihi, bitisTarihi, eczaneNobetSonuclarCozulenGruplar); if (sonuclarKontrol.Count > 0) { throw new Exception("Kriterlere uygun <strong>daha önce yazılmış nöbetler</strong> bulunmaktadır. Lütfen kontrol ediniz!"); } var tarihAralik = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupGorevTipler); var tarihAralikTumu = _takvimService.GetTakvimNobetGruplar(nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupGorevTipler); var yazDonemiTarihAraligiCts = tarihAralikTumu .Where(w => (w.Tarih >= yazBaslangic && w.Tarih >= baslangicTarihi && w.Tarih <= yazBitis) && w.NobetGunKuralId == 7 && w.NobetGorevTipId == 13 ).ToList(); //var haftaSonlari = tarihAralik.Where(w => w.NobetGunKuralId == 7).ToList(); var enSonNobetler = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclarCozulenGruplar); var enSonNobetlerSon3Ay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclarSon3Ay); var eczaneNobetGrupGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler); var eczaneBazliGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler); var eczaneNobetGrupGunKuralIstatistikYataySon3Ay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetlerSon3Ay); //var bak = eczaneNobetGrupGunKuralIstatistikYatay.Where(w => w.NobetGorevTipId == 2).ToList(); var nobetBorcOdeme = _nobetUstGrupKisitService.GetDetay(39, nobetUstGrupId); if (nobetBorcOdeme.Id == 39) { var anahtarListe = eczaneNobetSonuclar .Where(w => w.Tarih < nobetUstGrupBaslangicTarihi && 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, nobetGrupGorevTip1) .Where(w => eczaneNobetGruplarGorevTip1.Select(s => s.Id).Contains(w.EczaneNobetGrupId)).ToList(); nobetGorevTipId = 13; 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(); if (YazDonemiMi(baslangicTarihi, yazBaslangic, yazBitis)) { eczaneNobetTarihAralik1 = eczaneNobetTarihAralik1.Where(w => !yazDonemiTarihAraligiCts.Select(s => s.TakvimId).Contains(w.TakvimId)).ToList(); //eczaneNobetTarihAralik2 = eczaneNobetTarihAralik1.Where(w => haftaSonlari.Select(s => s.TakvimId).Contains(w.TakvimId)).ToList(); } else { eczaneNobetTarihAralik2 = new List <EczaneNobetTarihAralik>(); } var eczaneNobetTarihAralik3 = new List <EczaneNobetTarihAralik>(); foreach (var nobetGrupGorevTip in nobetGrupGorevTip2) { eczaneNobetTarihAralik3 = eczaneNobetTarihAralik2.Where(w => w.NobetGrupGorevTipId == nobetGrupGorevTip.Id && w.Tarih >= nobetGrupGorevTip.BaslamaTarihi && (w.Tarih <= nobetGrupGorevTip.BitisTarihi || nobetGrupGorevTip.BitisTarihi == null) && yazDonemiTarihAraligiCts.Select(s => s.TakvimId).Contains(w.TakvimId) ).ToList(); } var eczaneNobetTarihAralikTumu = eczaneNobetTarihAralik1.Union(eczaneNobetTarihAralik3).ToList(); //var kd = eczaneNobetTarihAralikTumu.Where(w => w.EczaneAdi == "AHSEN").ToList(); var eczaneNobetTarihAralik = _eczaneNobetOrtakService.AmacFonksiyonuKatsayisiBelirle(eczaneNobetTarihAralikTumu, eczaneNobetGrupGunKuralIstatistikYatay); //var ikiliEczaneler = _ayniGunTutulanNobetService.GetDetaylar(nobetGrupIdListe); 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>(); var takvimTumu = new List <TakvimNobetGrup>(); var cumartesiNobetGunKuralId = new List <int> { 7 }; foreach (var nobetGrupGorevTip in nobetGrupGorevTipler) { var takvimNobetGrupGunDegerIstatistiklerGorevTip = new List <TakvimNobetGrupGunDegerIstatistik>(); var takvimAra = new List <TakvimNobetGrup>(); if (nobetGrupGorevTip.NobetGorevTipId == 13) { var tarihlerYaz = tarihAralikTumu .Where(w => w.NobetGorevTipId == nobetGrupGorevTip.NobetGorevTipId && (w.Tarih >= yazBaslangic && w.Tarih <= yazBitis && w.NobetGunKuralId == 7) ) .Select(s => s.TakvimId).ToArray(); takvimNobetGrupGunDegerIstatistiklerGorevTip = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler( nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupGorevTip.Id, tarihlerYaz).ToList(); takvimAra = tarihAralik .Where(w => w.NobetGorevTipId == nobetGrupGorevTip.NobetGorevTipId && (w.Tarih >= yazBaslangic && w.Tarih <= yazBitis && w.NobetGunKuralId == 7) ).ToList(); } else { var tarihlerYaz = tarihAralikTumu .Where(w => w.NobetGorevTipId == nobetGrupGorevTip.NobetGorevTipId && !(w.Tarih >= yazBaslangic && w.Tarih <= yazBitis && w.NobetGunKuralId == 7) ) .Select(s => s.TakvimId).ToArray(); takvimNobetGrupGunDegerIstatistiklerGorevTip = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler( nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupGorevTip.Id, tarihlerYaz).ToList(); takvimAra = tarihAralik .Where(w => w.NobetGorevTipId == nobetGrupGorevTip.NobetGorevTipId && !(w.Tarih >= yazBaslangic && w.Tarih <= yazBitis && w.NobetGunKuralId == 7) ).ToList(); } takvimTumu.AddRange(takvimAra); takvimNobetGrupGunDegerIstatistikler.AddRange(takvimNobetGrupGunDegerIstatistiklerGorevTip); } //var eczaneNobetGrupAltGruplar = _eczaneNobetGrupAltGrupService.GetDetaylar(nobetUstGrupId); var nobetGrupKurallar = _nobetGrupKuralService.GetDetaylar(nobetGrupIdListe); var nobetUstGrupKisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId); var grupBazliKisitlar = _nobetGrupGorevTipKisitService.GetDetaylar(nobetUstGrupId); var dataModel = new KirikhanDataModel() { 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 = takvimTumu,//tarihAralik, NobetGruplar = nobetGruplar, EczaneGruplar = eczaneGruplar2, 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, EczaneBazliGunKuralIstatistikYatay = eczaneBazliGunKuralIstatistikYatay, EczaneNobetGrupGunKuralIstatistikYataySon3Ay = eczaneNobetGrupGunKuralIstatistikYataySon3Ay, NobetGrupGorevTipKisitlar = grupBazliKisitlar, DebugYapilacakEczaneler = debugYapilacakEczaneler }; //_eczaneNobetOrtakService.KurallariKontrolEtHaftaIciEnAzEnCok(nobetUstGrupId, eczaneNobetGrupGunKuralIstatistikYatay); _eczaneNobetOrtakService.KurallariKontrolEtMazeretIstek(nobetUstGrupId, eczaneNobetMazeretler, eczaneNobetIstekler); _eczaneNobetOrtakService.KurallariKontrolEtIstek(nobetUstGrupId, eczaneNobetIstekler, nobetGrupKurallar); return(dataModel); }
private OsmaniyeDataModel 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 nobetGrupGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler; var nobetGorevTipler = eczaneNobetDataModelParametre.NobetGrupGorevTipler.Select(s => s.NobetGorevTipId).Distinct().ToList(); #endregion if (baslangicTarihi < nobetUstGrupBaslangicTarihi) { throw new Exception($"Nöbet başlangıç tarihi <strong>({baslangicTarihi.ToShortDateString()})</strong> üst grup başlama tarihinden <strong>({nobetUstGrupBaslangicTarihi.ToShortDateString()})</strong> küçük olamaz."); } var debugYapilacakEczaneler = _debugEczaneService.GetDetaylarAktifOlanlar(nobetUstGrupId); 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.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi) .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 .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); nobetGorevTipId = 2; if (!nobetGorevTipler.Contains(nobetGorevTipId)) { nobetGorevTipId = 0; } var eczaneNobetGruplarGorevTip2 = eczaneNobetGruplarTumu .Where(w => w.NobetGorevTipId == nobetGorevTipId).ToList(); var eczaneNobetSonuclarOncekiAylar = eczaneNobetSonuclar .Where(w => w.Tarih >= nobetUstGrupBaslangicTarihi && 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 son3Ay = baslangicTarihi.AddMonths(-2); var eczaneNobetSonuclarSon3Ay = eczaneNobetSonuclarCozulenGruplar .Where(w => w.Tarih >= son3Ay).ToList(); var sonuclarKontrol = _eczaneNobetSonucService.GetSonuclar(baslangicTarihi, bitisTarihi, eczaneNobetSonuclarCozulenGruplar); if (sonuclarKontrol.Count > 0) { throw new Exception("Kriterlere uygun <strong>daha önce yazılmış nöbetler</strong> bulunmaktadır. Lütfen kontrol ediniz!"); } var enSonNobetler = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclarCozulenGruplar); var enSonNobetlerSon3Ay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistik(eczaneNobetGruplarTumu, eczaneNobetSonuclarSon3Ay); var eczaneNobetGrupGunKuralIstatistikYatay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetler); var eczaneNobetGrupGunKuralIstatistikYataySon3Ay = _eczaneNobetOrtakService.GetEczaneNobetGrupGunKuralIstatistikYatay(enSonNobetlerSon3Ay); //var bak = eczaneNobetGrupGunKuralIstatistikYatay.Where(w => w.NobetGorevTipId == 2).ToList(); var anahtarListe = eczaneNobetSonuclar .Where(w => w.Tarih < nobetUstGrupBaslangicTarihi && nobetGrupIdListe.Contains(w.NobetGrupId)).ToList(); //var haftaIciAnahtarListeTumEczaneler = _takvimService.AnahtarListeyiBuGuneTasi(nobetGrupIdListe, 1, nobetUstGrupBaslangicTarihi, eczaneNobetGruplarTumu, eczaneNobetGrupGunKuralIstatistikYatay, anahtarListe, "Hafta İçi"); var haftaIciAnahtarListeTumEczaneler = _takvimService.AnahtarListeyiBuGuneTasi(nobetGrupIdListe, nobetGorevTipId, nobetUstGrupBaslangicTarihi, eczaneNobetGruplarTumu, eczaneNobetGrupGunKuralIstatistikYatay, anahtarListe, "Hafta İçi"); var nobetBorcluEczanelerhaftaIci = (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 = s.NobetSayisiHaftaIci, SonNobetTarihi = s.SonNobetTarihiHaftaIci, AnahtarTarih = b.Tarih, BorcluGunSayisi = (int)(s.NobetSayisiHaftaIci > 0 ? (s.SonNobetTarihiHaftaIci - b.Tarih).TotalDays : (s.SonNobetTarihiHaftaIci - b.Tarih).TotalDays - (s.SonNobetTarihiHaftaIci - b.NobetUstGrupBaslamaTarihi).TotalDays), GunGrupAdi = "Hafta İçi" }).ToList(); foreach (var eczane in nobetBorcluEczanelerhaftaIci) { eczaneNobetGrupGunKuralIstatistikYatay .Where(w => w.EczaneNobetGrupId == eczane.EczaneNobetGrupId) .FirstOrDefault().BorcluNobetSayisiHaftaIci = (int)eczane.BorcluGunSayisi; } 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 tarihAralik = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupGorevTipler); 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, nobetGrupGorevTip1) .Where(w => eczaneNobetGruplarGorevTip1.Select(s => s.Id).Contains(w.EczaneNobetGrupId)).ToList(); //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(); var eczaneNobetTarihAralik = _eczaneNobetOrtakService.AmacFonksiyonuKatsayisiBelirle(eczaneNobetTarihAralik1, eczaneNobetGrupGunKuralIstatistikYatay); //.Union(eczaneNobetTarihAralik2).ToList(); 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 = _takvimService.GetTakvimNobetGrupGunDegerIstatistikler(nobetUstGrupBaslangicTarihi, bitisTarihi, nobetGrupGorevTipler); 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.GetDetaylarByNobetGrupGorevTipIdList(nobetGrupGorevTipler.Select(s => s.Id).ToList()); var dataModel = new OsmaniyeDataModel() { 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, NobetUstGrupKisitlar = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId), EczaneGrupNobetSonuclar = eczaneGrupNobetSonuclar, EczaneNobetSonuclar = eczaneNobetSonuclarCozulenGruplar, EczaneGrupNobetSonuclarTumu = eczaneNobetSonuclar, EczaneNobetGrupGunKuralIstatistikler = enSonNobetler, TakvimNobetGrupGunDegerIstatistikler = takvimNobetGrupGunDegerIstatistikler, EczaneNobetGrupGunKuralIstatistikYatay = eczaneNobetGrupGunKuralIstatistikYatay, EczaneNobetGrupGunKuralIstatistikYataySon3Ay = eczaneNobetGrupGunKuralIstatistikYataySon3Ay, EczaneNobetGrupAltGruplar = eczaneNobetGrupAltGruplar, Kalibrasyonlar = _kalibrasyonService.GetKalibrasyonlarYatay(nobetUstGrupId), IkiliEczaneler = ikiliEczaneler, NobetDurumlar = _nobetDurumService.GetDetaylar(nobetUstGrupId), DebugYapilacakEczaneler = debugYapilacakEczaneler }; //_eczaneNobetOrtakService.KurallariKontrolEtHaftaIciEnAzEnCok(nobetUstGrupId, eczaneNobetGrupGunKuralIstatistikYatay); _eczaneNobetOrtakService.KurallariKontrolEtMazeretIstek(nobetUstGrupId, eczaneNobetMazeretler, eczaneNobetIstekler); _eczaneNobetOrtakService.KurallariKontrolEtIstek(nobetUstGrupId, eczaneNobetIstekler, nobetGrupKurallar); return(dataModel); }