public override object ExecuteReport(MethodReturn refMr = null) { List <SERVISTEKNISYEN_REPORT_DATA> servisTeknisyenler = R.Query <SERVISTEKNISYEN_REPORT_DATA>(refMr).Where(t => t.SERVISID == ServisId).ToList(); //Tarih Aralığında Personelin Hareketlerini Bul List <TEKNISYENHAREKET> hareketler = R.Query <TEKNISYENHAREKET>(refMr).Where(t => t.GIRISTARIHI.Between(StartDate.startOfDay(), FinishDate.endOfDay()) && t.SERVISTEKNISYENID.In(servisTeknisyenler.select(tks => tks.ID)) && t.DURUM == YeniTeknisyenHareketDurum.Cikis).ToList(); //Bu Hareketlerde Kullanılan İşEmirİşlemleri Çek List <Teknisyen_ViewServisIsEmirIslemIscilikler> iscilikler = Teknisyen_ViewServisIsEmirIslemIscilikler.SelectOverloadFromISLEMID(hareketler.select(t => t.ISEMIRISLEMID).Distinct().toList()); PuantajGunlugu pg = new PuantajGunlugu(); List <ServisGunMola> servisGunMolalari = ServisGunMola.SelectServisGunMolalar(ServisId, refMr); List <HareketNeden> hareketNedenler = HareketNeden.Select_Nedenler(); foreach (SERVISTEKNISYEN_REPORT_DATA servisTeknisyen in servisTeknisyenler) { var teknisyenHareketler = hareketler.where (t => t.SERVISTEKNISYENID == servisTeknisyen.ID).orderBy(t => t.GIRISTARIHI).toList(); List <decimal> teknisyenIslemIds = teknisyenHareketler.select(t => t.ISEMIRISLEMID).Distinct().toList(); var teknisyenIscilikler = iscilikler.where (t => teknisyenIslemIds.contains(t.SERVISISEMIRISLEMID)).toList(); servisTeknisyen.Faturalanan_Dakika = (int)teknisyenIscilikler.Sum(t => t.Iscilik_Dakika_Suresi); List <DateTime> tarihler = teknisyenHareketler.select(t => t.GIRISTARIHI.Date).Distinct().toList(); foreach (var tarih in tarihler) { var firstIn = teknisyenHareketler.where (t => t.GIRISTARIHI.Date == tarih).first().GIRISTARIHI; var lastOut = teknisyenHareketler.where (t => t.GIRISTARIHI.Date == tarih).last().CIKISTARIHI; servisTeknisyen.NetMevcudiyet_Dakika += (int)(lastOut - firstIn).TotalMinutes; } TEKNISYENHAREKET.DAGILIM_SONUCLARI hamPntjData = Puantaj.GetPuantajSonuclari(teknisyenHareketler, pg, servisGunMolalari, hareketNedenler); servisTeknisyen.FiiliCalisma_Dakika = hamPntjData.GetSonucSure(NedenFormati.NormalCalisma); } return(servisTeknisyenler); }
public static TEKNISYENHAREKET.DAGILIM_SONUCLARI GetPuantajSonuclari(List <TEKNISYENHAREKET> teknisyenHareketleri, PuantajGunlugu pg, List <ServisGunMola> servisGunMolalari, List <HareketNeden> nedenler) { TEKNISYENHAREKET.DAGILIM_SONUCLARI sonuclar = new TEKNISYENHAREKET.DAGILIM_SONUCLARI(); foreach (TEKNISYENHAREKET hareket in teknisyenHareketleri) { List <DateTimeBetween> tarihler = Antibiotic.Helpers.DateTimeHelper.DatePartials(hareket.GIRISTARIHI, hareket.AktifCikisTarih, Antibiotic.Helpers.eTimeTypes.Gun); foreach (DateTimeBetween tarihArasi in tarihler) { pg.MolalardanDagilimOlustur(servisGunMolalari.first(t => t.HaftaninGunu == tarihArasi.Start.DayOfWeek)); pg.InitNedenler(nedenler); int girisSaati = tarihArasi.Start.toDbIntTimeRoundSecond(); int cikisSaati = tarihArasi.Finish.toDbIntTimeRoundSecond(); pg.Dagilim.forEach(dag => { int intersectValue = 0; int intersectStart = 0; int intersectEnd = 0; if (Antibiotic.Helpers.IntegerHelpers.IsIntersect(dag.BaslangicSaati, dag.BitisSaati, girisSaati, cikisSaati, out intersectValue, out intersectStart, out intersectEnd)) { //Console.WriteLine($"Hrk:[{tarihArasi.Start.ToString("dd.MM.yyyy HH:mm")}, {tarihArasi.Finish.ToString("dd.MM.yyyy HH:mm")}] => Sonuç:{tarihArasi.Start.Date.ToString("dd.MM.yyyy")} [{dag.NedenKodu}] ({intersectStart.toTimeString()}-{intersectEnd.toTimeString()})={intersectValue.toTimeString()}"); TEKNISYENHAREKET.DAGILIM_SONUCU sonuc = new TEKNISYENHAREKET.DAGILIM_SONUCU() { TeknisyenId = hareket.SERVISTEKNISYENID, Hareket = hareket, Tarih = tarihArasi.Start.Date, Neden = dag.Neden, BaslangicSaati = intersectStart, BitisSaati = intersectEnd, Sure = intersectValue, }; sonuclar.Add(sonuc); } }); } } return(sonuclar); }