private void LoadBtn_Click(object sender, EventArgs e) { loadForm.ShowSplashScreen(); DateTime startDate = Variables.todayDate.Date, endDate = EndDatePicker.Value.Date, currDate = startDate; String kodePkt = KodePktCombo.SelectedItem.ToString(), metode = MetodePenghitunganCombo.SelectedItem.ToString(); List <DateTime> kumpulanTanggal = new List <DateTime>(); List <ViewProyeksiAtm> hasil = new List <ViewProyeksiAtm>(); while (currDate <= endDate) { kumpulanTanggal.Add(currDate); currDate = currDate.AddDays(1); } float targetRasio100 = (float)rasio100Num.Value, targetRasio50 = (float)rasio50Num.Value, targetRasio20 = (float)rasio20Num.Value; KumpulanPrediksi prediksi = new KumpulanPrediksi(kodePkt, loadKumpulanTanggalUntukPrediksi(), startDate, endDate, metode, metode); List <String> eventType = prediksi.eventType; List <JenisEvent> listEvent = new List <JenisEvent>(); String e2e = e2eComboBox.SelectedItem.ToString(); List <PktDenom> hasilPrediksi = prediksi.loadRekomendasiBon(targetRasio100, targetRasio50, targetRasio20, e2e); List <PktDenom> saldoAwalHariH = loadSaldoAwal(prediksi); List <PktDenom> saldoAwals = new List <PktDenom>(); /************************/ /*START Load Saldo Awal*/ /**********************/ saldoAwals.AddRange(saldoAwalHariH); currDate = startDate; Console.WriteLine("Load Saldo Awal\n================="); while (currDate < endDate) { saldoAwals.AddRange( (from x in saldoAwals join isiATM in prediksi.prediksiIsiAtm on new { x.tanggal, x.kodePkt } equals new { isiATM.tanggal, isiATM.kodePkt } join isiCRM in prediksi.isiCrm2 on new { isiATM.tanggal, isiATM.kodePkt } equals new { isiCRM.tanggal, isiCRM.kodePkt } join sislokATM in prediksi.rasioSislokAtm on new { isiATM.tanggal, isiATM.kodePkt } equals new { sislokATM.tanggal, sislokATM.kodePkt } join sislokCRM in prediksi.sislokCrm on new { isiATM.tanggal, isiATM.kodePkt } equals new { sislokCRM.tanggal, sislokCRM.kodePkt } join sislokCDM in prediksi.sislokCdm on new { isiATM.tanggal, isiATM.kodePkt } equals new { sislokCDM.tanggal, sislokCDM.kodePkt } join hasilpred in hasilPrediksi on new { isiATM.tanggal, isiATM.kodePkt } equals new { hasilpred.tanggal, hasilpred.kodePkt } where x.tanggal == currDate select new PktDenom() { tanggal = x.tanggal.AddDays(1), d100 = x.d100 - isiATM.d100 - isiCRM.d100 + (Int64)Math.Round(sislokATM.d100 * isiATM.d100, 0) + sislokCRM.d100 + sislokCDM.d100 + hasilpred.d100, d50 = x.d50 - isiATM.d50 - isiCRM.d50 + (Int64)Math.Round(sislokATM.d50 * isiATM.d50, 0) + sislokCRM.d50 + sislokCDM.d50 + hasilpred.d50, d20 = x.d20 - isiATM.d20 - isiCRM.d20 + (Int64)Math.Round(sislokATM.d20 * isiATM.d20, 0) + sislokCRM.d20 + sislokCDM.d20 + hasilpred.d20, kodePkt = x.kodePkt }).ToList() ); currDate = currDate.AddDays(1); } /************************/ /*END Load Saldo Awal*/ /**********************/ for (int a = 0; a < eventType.Count; a++) { listEvent.Add(new JenisEvent() { tgl = startDate.AddDays(a), eventType = eventType[a].Split(' ')[3] + eventType[a].Split(' ')[4] }); } Console.WriteLine("Isi ATM Count: " + prediksi.prediksiIsiAtm.Count); Console.WriteLine("Isi CRM Count: " + prediksi.isiCrm2.Count); Console.WriteLine("Sislok ATM Count: " + prediksi.rasioSislokAtm.Count); Console.WriteLine("Sislok CRM Count: " + prediksi.sislokCrm.Count); Console.WriteLine("Sislok CDM Count: " + prediksi.sislokCdm.Count); hasil.AddRange((from isiATM in prediksi.prediksiIsiAtm join isiCRM in prediksi.isiCrm2 on new { isiATM.tanggal, isiATM.kodePkt } equals new { isiCRM.tanggal, isiCRM.kodePkt } join sislokATM in prediksi.rasioSislokAtm on new { isiATM.tanggal, isiATM.kodePkt } equals new { sislokATM.tanggal, sislokATM.kodePkt } join sislokCRM in prediksi.sislokCrm on new { isiATM.tanggal, isiATM.kodePkt } equals new { sislokCRM.tanggal, sislokCRM.kodePkt } join sislokCDM in prediksi.sislokCdm on new { isiATM.tanggal, isiATM.kodePkt } equals new { sislokCDM.tanggal, sislokCDM.kodePkt } join saldoAwal in saldoAwals on new { isiATM.tanggal, isiATM.kodePkt } equals new { saldoAwal.tanggal, saldoAwal.kodePkt } join hasilpred in hasilPrediksi on new { isiATM.tanggal, isiATM.kodePkt } equals new { hasilpred.tanggal, hasilpred.kodePkt } join events in listEvent on isiATM.tanggal equals events.tgl select new ViewProyeksiAtm() { tanggal = isiATM.tanggal, saldoAwal100 = saldoAwal.d100, saldoAwal50 = saldoAwal.d50, saldoAwal20 = saldoAwal.d20, isiATM100 = isiATM.d100, isiATM50 = isiATM.d50, isiATM20 = isiATM.d20, isiCRM100 = isiCRM.d100, isiCRM50 = isiCRM.d50, isiCRM20 = isiCRM.d20, sislokATM100 = (Int64)Math.Round(sislokATM.d100 * isiATM.d100), sislokATM50 = (Int64)Math.Round(sislokATM.d50 * isiATM.d50), sislokATM20 = (Int64)Math.Round(sislokATM.d20 * isiATM.d20), sislokCRM100 = sislokCRM.d100, sislokCRM50 = sislokCRM.d50, sislokCRM20 = sislokCRM.d20, sislokCDM100 = sislokCDM.d100, sislokCDM50 = sislokCDM.d50, sislokCDM20 = sislokCDM.d20, bon100 = hasilpred.d100, bon50 = hasilpred.d50, bon20 = hasilpred.d20, eventType = events.eventType, kodePkt = isiATM.kodePkt }).ToList()); hasil = hasil.GroupBy(x => new { x.tanggal, x.eventType }).Select(x => new ViewProyeksiAtm() { tanggal = x.Key.tanggal, saldoAwal100 = x.Sum(y => y.saldoAwal100), saldoAwal50 = x.Sum(y => y.saldoAwal50), saldoAwal20 = x.Sum(y => y.saldoAwal20), isiATM100 = x.Sum(y => y.isiATM100), isiATM50 = x.Sum(y => y.isiATM50), isiATM20 = x.Sum(y => y.isiATM20), isiCRM100 = x.Sum(y => y.isiCRM100), isiCRM50 = x.Sum(y => y.isiCRM50), isiCRM20 = x.Sum(y => y.isiCRM20), sislokATM100 = x.Sum(y => y.sislokATM100), sislokATM50 = x.Sum(y => y.sislokATM50), sislokATM20 = x.Sum(y => y.sislokATM20), sislokCRM100 = x.Sum(y => y.sislokCRM100), sislokCRM50 = x.Sum(y => y.sislokCRM50), sislokCRM20 = x.Sum(y => y.sislokCRM20), sislokCDM100 = x.Sum(y => y.sislokCDM100), sislokCDM50 = x.Sum(y => y.sislokCDM50), sislokCDM20 = x.Sum(y => y.sislokCDM20), bon100 = x.Sum(y => y.bon100), bon50 = x.Sum(y => y.bon50), bon20 = x.Sum(y => y.bon20), eventType = x.Key.eventType, kodePkt = kodePkt }).ToList(); //dataGridView1.DataSource = saldoAwals; dataGridView1.DataSource = hasil; for (int a = 0; a < dataGridView1.ColumnCount; a++) { if (dataGridView1.Columns[a].ValueType == typeof(Int64)) { dataGridView1.Columns[a].DefaultCellStyle.Format = "C0"; dataGridView1.Columns[a].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("id-ID"); } } Console.WriteLine("Target Rasio 100 Input: " + targetRasio100); Console.WriteLine("Target Rasio 50 Input: " + targetRasio50); Console.WriteLine("Target Rasio 20 Input: " + targetRasio20); //dataGridView1.DataSource = hasilPrediksi; loadForm.CloseForm(); }
public List <Denom> loadForecastValue(String jenis, DateTime startDate, DateTime endDate, string metode, List <DateTime> listTanggalHistorisUntukPrediksi, String kodePkt) { Database1Entities db = new Database1Entities(); List <Denom> list = new List <Denom>(); DateTime tanggal = startDate; DateTime maxTanggal = endDate; var q = (from x in db.TransaksiAtms join y in db.Pkts on x.kodePkt equals y.kodePkt where x.kodePkt == kodePkt select x).ToList(); var et = (from x in db.EventTanggals select x).ToList(); KumpulanPrediksi kumpulanPrediksi = new KumpulanPrediksi(kodePkt, listTanggalHistorisUntukPrediksi, startDate, endDate, metode, metode); List <Denom> prediksiIsiAtm = new List <Denom>(), isiCrm = new List <Denom>(), sislokCrm = new List <Denom>(), sislokCdm = new List <Denom>(); List <Rasio> rasioSislokAtm = new List <Rasio>(); if (kumpulanPrediksi.success) { prediksiIsiAtm = kumpulanPrediksi.prediksiIsiAtm.GroupBy(x => x.tanggal).Select(x => new Denom() { tgl = x.Key, d100 = x.Sum(y => y.d100), d50 = x.Sum(y => y.d50), d20 = x.Sum(y => y.d20), }).ToList(); isiCrm = kumpulanPrediksi.isiCrm2.GroupBy(x => x.tanggal).Select(x => new Denom() { tgl = x.Key, d100 = x.Sum(y => y.d100), d50 = x.Sum(y => y.d50), d20 = x.Sum(y => y.d20), }).ToList(); sislokCrm = kumpulanPrediksi.sislokCrm.GroupBy(x => x.tanggal).Select(x => new Denom() { tgl = x.Key, d100 = x.Sum(y => y.d100), d50 = x.Sum(y => y.d50), d20 = x.Sum(y => y.d20), }).ToList(); rasioSislokAtm = kumpulanPrediksi.rasioSislokAtm.GroupBy(x => x.tanggal).Select(x => new Rasio() { tgl = x.Key, d100 = x.Sum(y => y.d100), d50 = x.Sum(y => y.d50), d20 = x.Sum(y => y.d20), }).ToList(); sislokCdm = kumpulanPrediksi.sislokCdm.GroupBy(x => x.tanggal).Select(x => new Denom() { tgl = x.Key, d100 = x.Sum(y => y.d100), d50 = x.Sum(y => y.d50), d20 = x.Sum(y => y.d20), }).ToList(); String eventType = ""; foreach (var temp in kumpulanPrediksi.eventType) { eventType += temp + "\n"; } MessageBox.Show(eventType); Console.WriteLine("Prediksi isi atm count: " + prediksiIsiAtm.Count); Console.WriteLine("Isi crm count: " + isiCrm.Count); Console.WriteLine("Sislok crm count: " + sislokCrm.Count); Console.WriteLine("Rasio Sislok ATM count: " + rasioSislokAtm.Count); Console.WriteLine("Sislok cdm count: " + sislokCdm.Count); } Console.WriteLine("JENIS: " + jenis); Console.WriteLine("COUNT: " + sislokCrm.Count); if (jenis.ToUpper() == "SISLOK CDM") { list = sislokCdm; } if (jenis.ToUpper() == "SISLOK CRM") { list = sislokCrm; } if (jenis.ToUpper() == "SISLOK ATM") { list = (from x in prediksiIsiAtm join y in rasioSislokAtm on x.tgl equals y.tgl select new Denom() { tgl = x.tgl, d100 = (Int64)Math.Round(x.d100 * y.d100), d50 = (Int64)Math.Round(x.d50 * y.d50), d20 = (Int64)Math.Round(x.d20 * y.d20), }).ToList(); } if (jenis.ToUpper() == "ISI CRM") { list = isiCrm; } if (jenis.ToUpper() == "ISI ATM") { list = prediksiIsiAtm; } //while (tanggal <= maxTanggal) //{ // List<TransaksiAtm> query = new List<TransaksiAtm>(); // var eventT = (from x in et // where x.tanggal == tanggal // select new { x.workDay, x.@event }).FirstOrDefault(); // Console.WriteLine(tanggal.ToShortDateString() + "Workday: " + eventT.workDay + " Event: " + eventT.@event); // foreach (var temp in listTanggalHistorisUntukPrediksi) // { // List<TransaksiAtm> q3 = (from x in q // join y in db.EventTanggals.AsEnumerable() on x.tanggal equals y.tanggal // where temp.Month == ((DateTime)x.tanggal).Month // && temp.Year == ((DateTime)x.tanggal).Year // && eventT.workDay == y.workDay // && eventT.@event == y.@event // select x // ).AsEnumerable().Where(x => x.tanggal.DayOfWeek == tanggal.DayOfWeek).ToList(); // query.AddRange(q3); // } // if(query.Count == 0) // { // Console.WriteLine(tanggal + " Masuk Event2"); // foreach (var temp in listTanggalHistorisUntukPrediksi) // { // List<TransaksiAtm> q3 = (from x in q // join y in db.EventTanggals.AsEnumerable() on x.tanggal equals y.tanggal // where temp.Month == ((DateTime)x.tanggal).Month // && temp.Year == ((DateTime)x.tanggal).Year // && eventT.workDay == y.workDay // && eventT.@event == y.@event // select x // ).ToList(); // Console.WriteLine(temp.ToShortDateString() + " " + q3.Count); // query.AddRange(q3); // } // } // Console.WriteLine(tanggal + " Query: " + query.Count); // if (jenis.ToUpper() == "SISLOK CDM") // list.Add(new Denom() { tgl = tanggal, d100 = (Int64)Math.Round((Double)query.Average(x => x.sislokCDM100), 0), d50 = (Int64)Math.Round((Double)query.Average(x => x.sislokCDM50), 0), d20 = (Int64)Math.Round((Double)query.Average(x => x.sislokCDM20), 0) }); // else if(jenis.ToUpper() == "SISLOK CRM") // list.Add(new Denom() { tgl = tanggal, d100 = (Int64)Math.Round((Double)query.Average(x => x.sislokCRM100), 0), d50 = (Int64)Math.Round((Double)query.Average(x => x.sislokCRM50), 0), d20 = (Int64)Math.Round((Double)query.Average(x => x.sislokCRM20), 0) }); // else if (jenis.ToUpper() == "ISI ATM") // list.Add(new Denom() { tgl = tanggal, d100 = (Int64)Math.Round((Double)query.Average(x => x.isiATM100), 0), d50 = (Int64)Math.Round((Double)query.Average(x => x.isiATM50), 0), d20 = (Int64)Math.Round((Double)query.Average(x => x.isiATM20), 0) }); // else if (jenis.ToUpper() == "ISI CRM") // list.Add(new Denom() { tgl = tanggal, d100 = (Int64)Math.Round((Double)query.Average(x => x.isiCRM100), 0), d50 = (Int64)Math.Round((Double)query.Average(x => x.isiCRM50), 0), d20 = (Int64)Math.Round((Double)query.Average(x => x.isiCRM20), 0) }); // else if (jenis.ToUpper() == "SISLOK ATM") // { // Int64 d100 = (Int64)Math.Round((Double)query.Average(x => x.sislokATM100), 0); // Console.WriteLine("D100 : " + d100); // list.Add(new Denom() { tgl = tanggal, d100 = (Int64)Math.Round((Double)query.Average(x => x.sislokATM100), 0), d50 = (Int64)Math.Round((Double)query.Average(x => x.sislokATM50), 0), d20 = (Int64)Math.Round((Double)query.Average(x => x.sislokATM20), 0) }); // } // tanggal = tanggal.AddDays(1); //} Console.WriteLine("LIST COUNT IN FUNC: " + list.Count); return(list); }
List <PktDenom> loadSaldoAwal(KumpulanPrediksi prediksi) { List <PktDenom> ret = new List <PktDenom>(); String kodePkt = KodePktCombo.SelectedItem.ToString(); if (kodePkt.ToLower().Contains("jabo") || kodePkt.ToLower().Contains("kanwil")) { List <String> listPkt = (from x in db.Pkts where x.kanwil == kodePkt && !x.kodePkt.Contains("CCAS") select x.kodePkt).ToList(); foreach (var temp in listPkt) { var q = (from x in db.TransaksiAtms.AsEnumerable() where x.kodePkt == temp && x.tanggal == Variables.todayDate.AddDays(-1) select new PktDenom { kodePkt = x.kodePkt, tanggal = x.tanggal.AddDays(1), d100 = (Int64)x.saldoAkhir100, d50 = (Int64)x.saldoAkhir50, d20 = (Int64)x.saldoAkhir20, }).FirstOrDefault(); if (q != null) { ret.Add(q); } else { ret.Add(new PktDenom() { tanggal = Variables.todayDate, d100 = 0, d50 = 0, d20 = 0, kodePkt = temp }); } } } else if (kodePkt.ToLower() == "all") { List <String> listPkt = (from x in db.Pkts where !x.kodePkt.Contains("CCAS") select x.kodePkt).ToList(); foreach (var temp in listPkt) { var q = (from x in db.TransaksiAtms.AsEnumerable() where x.kodePkt == temp && x.tanggal == Variables.todayDate.AddDays(-1) select new PktDenom { kodePkt = x.kodePkt, tanggal = x.tanggal.AddDays(1), d100 = (Int64)x.saldoAkhir100, d50 = (Int64)x.saldoAkhir50, d20 = (Int64)x.saldoAkhir20, }).FirstOrDefault(); if (q != null) { ret.Add(q); } else { ret.Add(new PktDenom() { tanggal = Variables.todayDate, d100 = 0, d50 = 0, d20 = 0, kodePkt = temp }); } } } else { Denom saldoAwal = prediksi.loadSaldoAwal(kodePkt); var q = (from x in db.TransaksiAtms.AsEnumerable() where x.kodePkt == kodePkt && x.tanggal == Variables.todayDate.AddDays(-1) select new PktDenom { kodePkt = x.kodePkt, tanggal = x.tanggal.AddDays(1), d100 = (Int64)x.saldoAkhir100, d50 = (Int64)x.saldoAkhir50, d20 = (Int64)x.saldoAkhir20, }).FirstOrDefault(); if (q != null) { ret.Add(q); } else { ret.Add(new PktDenom() { tanggal = Variables.todayDate, d100 = 0, d50 = 0, d20 = 0, kodePkt = kodePkt }); } } return(ret); }