コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }