예제 #1
0
    public void QueryData(int IDpelanggan, int searchBY, int tahun)
    {
        #region Pengaturan Label Tahun
        LabelTahunIni1.Text  = tahun.ToString();
        LabelTahunIni2.Text  = tahun.ToString();
        LabelTahunLalu1.Text = (tahun - 1).ToString();
        LabelTahunLalu2.Text = (tahun - 1).ToString();
        #endregion

        Literal LiteralChart = (Literal)this.Page.Master.FindControl("LiteralChart");
        LiteralChart.Text = string.Empty;

        using (DataClassesDatabaseDataContext db = new DataClassesDatabaseDataContext())
        {
            TBTransaksiDetail[] DetailTransaksiDB;
            var KombinasiProdukDB = db.TBKombinasiProduks.ToArray();

            #region Query perilaku belanja pelanggan [average budget, average quantity, most buy category]

            #region Master Query
            //AMBIL DATA MASTER DARI DB
            if (IDpelanggan != 0)
            {
                DetailTransaksiDB = db.TBTransaksiDetails.Where(item => item.TBTransaksi.IDPelanggan == IDpelanggan &&
                                                                item.TBTransaksi.IDStatusTransaksi == (int)EnumStatusTransaksi.Complete &&
                                                                (item.TBTransaksi.TanggalTransaksi.Value.Year == tahun || item.TBTransaksi.TanggalTransaksi.Value.Year == tahun - 1)).ToArray();
            }
            else
            {
                DetailTransaksiDB = db.TBTransaksiDetails.Where(item => item.TBTransaksi.IDStatusTransaksi == (int)EnumStatusTransaksi.Complete &&
                                                                (item.TBTransaksi.TanggalTransaksi.Value.Year == tahun || item.TBTransaksi.TanggalTransaksi.Value.Year == tahun - 1)).ToArray();
            }

            if (DetailTransaksiDB.Count() != 0)
            {
                //TAHUN INI
                var _dataDetailTransaksiTahunIni = DetailTransaksiDB
                                                   .Where(item => item.TBTransaksi.TanggalTransaksi.Value.Year == tahun)
                                                   .GroupBy(item => item.TBTransaksi.TanggalTransaksi.Value.Month)
                                                   .Select(item => new
                {
                    Key               = item.Key,
                    GrandTotal        = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
                    TotalQty          = item.Sum(item2 => item2.Quantity) == 0 ? 0 : item.Sum(item2 => item2.Quantity),
                    AverageGrandTotal = item.Average(item2 => item2.TBTransaksi.GrandTotal),
                    AverageQty        = item.Average(item2 => item2.TBTransaksi.JumlahProduk)
                }).ToArray();

                var _dataDetailTransaksiTahunIniNoFilter = DetailTransaksiDB
                                                           .Where(item => item.TBTransaksi.TanggalTransaksi.Value.Year == tahun)
                                                           .GroupBy(item => item.TBTransaksi.TanggalTransaksi.Value.Month)
                                                           .Select(item => new
                {
                    Key               = item.Key,
                    GrandTotal        = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
                    TotalQty          = item.Sum(item2 => item2.Quantity) == 0 ? 0 : item.Sum(item2 => item2.Quantity),
                    AverageGrandTotal = item.Average(item2 => item2.TBTransaksi.GrandTotal),
                    AverageQty        = item.Average(item2 => item2.TBTransaksi.JumlahProduk)
                }).ToArray();
                //TAHUN LALU
                var _dataDetailTransaksiTahunLalu = DetailTransaksiDB
                                                    .Where(item => item.TBTransaksi.TanggalTransaksi.Value.Year == tahun - 1)
                                                    .GroupBy(item => item.TBTransaksi.TanggalTransaksi.Value.Month)
                                                    .Select(item => new
                {
                    Key               = item.Key,
                    GrandTotal        = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
                    TotalQty          = item.Sum(item2 => item2.Quantity) == 0 ? 0 : item.Sum(item2 => item2.Quantity),
                    AverageGrandTotal = item.Average(item2 => item2.TBTransaksi.GrandTotal),
                    AverageQty        = item.Average(item2 => item2.TBTransaksi.JumlahProduk)
                }).ToArray();

                var _dataDetailTransaksiTahunLaluNoFilter = DetailTransaksiDB
                                                            .Where(item => item.TBTransaksi.TanggalTransaksi.Value.Year == tahun - 1)
                                                            .GroupBy(item => item.TBTransaksi.TanggalTransaksi.Value.Month)
                                                            .Select(item => new
                {
                    Key               = item.Key,
                    GrandTotal        = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
                    TotalQty          = item.Sum(item2 => item2.Quantity) == 0 ? 0 : item.Sum(item2 => item2.Quantity),
                    AverageGrandTotal = item.Average(item2 => item2.TBTransaksi.GrandTotal),
                    AverageQty        = item.Average(item2 => item2.TBTransaksi.JumlahProduk)
                }).ToArray();
                #endregion

                var averageBudget   = DetailTransaksiDB.Average(item => item.TBTransaksi.GrandTotal);
                var averageQty      = DetailTransaksiDB.Average(item => item.TBTransaksi.JumlahProduk);
                var mostBuyCategory = DetailTransaksiDB.GroupBy(item => item.TBKombinasiProduk.TBProduk.TBRelasiProdukKategoriProduks.Count == 0 ? "" : item.TBKombinasiProduk.TBProduk.TBRelasiProdukKategoriProduks.Count == 1 ? item.TBKombinasiProduk.TBProduk.TBRelasiProdukKategoriProduks.FirstOrDefault().TBKategoriProduk.Nama : item.TBKombinasiProduk.TBProduk.TBRelasiProdukKategoriProduks.Skip(1).FirstOrDefault().TBKategoriProduk.Nama)
                                      .Select(item => new
                {
                    Key            = item.Key,
                    Quantity       = item.Sum(item2 => item2.Quantity),
                    TotalPenjualan = item.Sum(item2 => item2.Subtotal)
                }).OrderByDescending(item => item.TotalPenjualan).FirstOrDefault().Key;
                #endregion

                #region Query rekomendasi [ algo people also buy, top product , dead stock ]
                List <string> ListSuggestProduk = new List <string>();

                var rekomendasiByCategory = db.TBKategoriProduks
                                            .Where(item => item.TBRekomendasiKategoriProduks.Count > 0 && item.TBRekomendasiKategoriProduks1.Count > 0)
                                            .Select(item => new
                {
                    Nama        = item.Nama,
                    Jumlah      = (item.TBRekomendasiKategoriProduks.Count > 0 ? item.TBRekomendasiKategoriProduks.Sum(item2 => item2.Jumlah) : 0) + (item.TBRekomendasiKategoriProduks1.Count > 0 ? item.TBRekomendasiKategoriProduks1.Sum(item2 => item2.Jumlah) : 0),
                    Nilai       = (item.TBRekomendasiKategoriProduks.Count > 0 ? item.TBRekomendasiKategoriProduks.Sum(item2 => item2.Nilai) : 0) + (item.TBRekomendasiKategoriProduks1.Count > 0 ? item.TBRekomendasiKategoriProduks1.Sum(item2 => item2.Nilai) : 0),
                    Rekomendasi = GabungRekomendasi(item.TBRekomendasiKategoriProduks.ToList(), item.TBRekomendasiKategoriProduks1.ToList())
                })
                                            .OrderByDescending(item => item.Jumlah)
                                            .FirstOrDefault();

                var topProduk = db.TBTransaksiDetails.Where(item => item.HargaJual <= averageBudget
                                                            ).GroupBy(item => new
                {
                    Produk   = item.TBKombinasiProduk.TBProduk.Nama,
                    Kategori = item.TBKombinasiProduk.TBProduk.TBRelasiProdukKategoriProduks.FirstOrDefault().TBKategoriProduk != null ?
                               item.TBKombinasiProduk.TBProduk.TBRelasiProdukKategoriProduks.FirstOrDefault().TBKategoriProduk.Nama : string.Empty,
                    HargaJual = item.TBKombinasiProduk.TBStokProduks.FirstOrDefault().HargaJual
                })
                                .Select(item => new
                {
                    Key            = item.Key,
                    Quantity       = item.Sum(item2 => item2.Quantity),
                    TotalDiscount  = item.Sum(item2 => item2.Discount * item2.Quantity),
                    TotalPenjualan = item.Sum(item2 => item2.Subtotal)
                }).OrderByDescending(item => item.TotalPenjualan).Take(20).ToArray();

                var DeadStockProduct = KombinasiProdukDB.Where(item => item.TBStokProduks.FirstOrDefault().HargaJual <= averageBudget)
                                       .OrderBy(item => item.TanggalDaftar).Take(20).ToArray();

                //var suggest1_TopProduk_FilteredByPeopleAlsoBuy = topProduk.Where(item => item.Key.HargaJual <= averageBudget &&
                //                                                 item.Key.Kategori == rekomendasiByCategory.Nama).Take(2);

                for (int i = 0; i < topProduk.Count(); i++)
                {
                    if (ListSuggestProduk.Count != 0)
                    {
                        if (ListSuggestProduk[i].ToString() != topProduk[i].Key.Produk)
                        {
                            ListSuggestProduk.Add(topProduk[i].Key.Produk);
                        }

                        if (ListSuggestProduk[i].ToString() != DeadStockProduct[i].Nama)
                        {
                            ListSuggestProduk.Add(DeadStockProduct[i].Nama);
                        }
                    }
                    else
                    {
                        ListSuggestProduk.Add(topProduk[i].Key.Produk);
                        ListSuggestProduk.Add(DeadStockProduct[i].Nama);
                    }
                }

                RepeaterSuggestProduct.DataSource = ListSuggestProduk.Select(item => new
                {
                    Nama = item.ToString()
                }).Take(10).ToArray();
                RepeaterSuggestProduct.DataBind();

                //var suggest1_TopProduk_FilteredByPeopleAlsoBuy = topProduk.Where(item => item.Key.HargaJual <= averageBudget).Take(2);

                //var suggest2_TopProduk = topProduk.Where(item => item.Key.HargaJual <= averageBudget).Take(2);

                //var suggest3_deadStock = KombinasiProdukDB.Where(item => item.TBProduk.TBRelasiProdukKategoriProduks.Count == 1 ?
                //    item.TBProduk.TBRelasiProdukKategoriProduks.FirstOrDefault().TBKategoriProduk.Nama == rekomendasiByCategory.Nama && item.TBStokProduks.FirstOrDefault().HargaJual <= averageBudget :
                //    item.TBProduk.TBRelasiProdukKategoriProduks.Skip(1).FirstOrDefault().TBKategoriProduk.Nama == rekomendasiByCategory.Nama && item.TBStokProduks.FirstOrDefault().HargaJual <= averageBudget)
                //    .OrderBy(item => item.TanggalDaftar).Take(2);

                var suggest3_deadStock = KombinasiProdukDB.Where(item => item.TBProduk.TBRelasiProdukKategoriProduks.Count == 1 ?
                                                                 item.TBStokProduks.FirstOrDefault().HargaJual <= averageBudget :
                                                                 item.TBStokProduks.FirstOrDefault().HargaJual <= averageBudget)
                                         .OrderBy(item => item.TanggalDaftar).Take(2);

                #endregion

                #region Line Chart - Customer Analysis Monthly (tahun ini dan tahun lalu)
                LiteralChart.Text += "<script> $(function () { var dataChart = [";

                //If searched by Penjualan
                if (searchBY == 1)
                {
                    for (int i = 1; i <= 12; i++)
                    {
                        var _transaksiTahunIni  = _dataDetailTransaksiTahunIniNoFilter.FirstOrDefault(item => item.Key == i);
                        var _transaksiTahunLalu = _dataDetailTransaksiTahunLaluNoFilter.FirstOrDefault(item => item.Key == i);

                        decimal averagePenjualanTahunIni = 0, averagePenjualanTahunLalu = 0;

                        if (_transaksiTahunIni != null)
                        {
                            averagePenjualanTahunIni = (decimal)_transaksiTahunIni.AverageGrandTotal;
                        }

                        if (_transaksiTahunLalu != null)
                        {
                            averagePenjualanTahunLalu = (decimal)_transaksiTahunLalu.AverageGrandTotal;
                        }

                        LiteralChart.Text += "{ 'y': '" + new DateTime(DropDownListTahun.SelectedValue.ToInt(), i, 1).ToString("MMM") + "', '" + (tahun - 1) + "': " + Math.Ceiling(averagePenjualanTahunLalu) + ", '" + tahun + "': " + Math.Ceiling(averagePenjualanTahunIni) + " }, ";
                    }
                }
                else //searched by Qty
                {
                    for (int i = 1; i <= 12; i++)
                    {
                        var _transaksiTahunIni  = _dataDetailTransaksiTahunIniNoFilter.FirstOrDefault(item => item.Key == i);
                        var _transaksiTahunLalu = _dataDetailTransaksiTahunLaluNoFilter.FirstOrDefault(item => item.Key == i);

                        decimal averageQtyTahunIni = 0, averageQtyTahunLalu = 0;

                        if (_transaksiTahunIni != null)
                        {
                            averageQtyTahunIni = (decimal)_transaksiTahunIni.AverageQty;
                        }

                        if (_transaksiTahunLalu != null)
                        {
                            averageQtyTahunLalu = (decimal)_transaksiTahunLalu.AverageQty;
                        }

                        LiteralChart.Text += "{ 'y': '" + new DateTime(DropDownListTahun.SelectedValue.ToInt(), i, 1).ToString("MMM") + "', '" + (tahun - 1) + "': " + Math.Ceiling(averageQtyTahunLalu) + ", '" + tahun + "': " + Math.Ceiling(averageQtyTahunIni) + " }, ";
                    }
                }

                LiteralChart.Text += "]; Morris.Line({ element: 'graph11', behaveLikeLine: true, data: dataChart, xkey: 'y', ";

                LiteralChart.Text += "ykeys: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
                LiteralChart.Text += "labels: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
                LiteralChart.Text += "lineColors:['#7FC4C1','#FF625D'],";
                LiteralChart.Text += " parseTime: false}); eval(dataChart); }); </script>";
                #endregion

                #region RepeaterDetail dari Trend Analysis Monthly
                PanelDetail.Visible = true;
                //Group by Month & Year, ini digunakan untuk tampilan repeater detail
                var _dataDetail2Tahun = DetailTransaksiDB
                                        .GroupBy(item => new
                {
                    item.TBTransaksi.TanggalTransaksi.Value.Month,
                    item.TBTransaksi.TanggalTransaksi.Value.Year
                })
                                        .Select(item => new
                {
                    Key                  = item.Key,
                    GrandTotal           = item.Sum(item2 => item2.Subtotal),
                    TotalTransaksi       = item.Count(),
                    TotalNominalDiscount = item.Sum(item2 => item2.Discount) == 0 ? 0 : item.Sum(item2 => item2.Discount * item2.Quantity),
                    AverageGrandTotal    = item.Average(item2 => item2.TBTransaksi.GrandTotal),
                    AverageQty           = item.Average(item2 => item2.TBTransaksi.JumlahProduk),
                }).ToArray();

                List <int> Bulan = new List <int>();
                for (int i = 1; i <= 12; i++)
                {
                    Bulan.Add(i);
                }

                if (searchBY == 1)
                {
                    PanelReportPenjualan.Visible = true;
                    PanelReportQty.Visible       = false;

                    var Data = Bulan.Select(item => new
                    {
                        Bulan = new DateTime(DropDownListTahun.SelectedValue.ToInt(), item, 1).ToString("MMMM"),
                        TotalTransaksiTahunLalu    = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Sum(item2 => item2.TotalTransaksi),
                        TotalTransaksiTahunIni     = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Sum(item2 => item2.TotalTransaksi),
                        averageGrandTotalTahunLalu = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Count() == 0 ? 0 : Math.Ceiling((decimal)_dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Sum(item2 => item2.AverageGrandTotal)),
                        averageGrandTotalTahunIni  = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Count() == 0 ? 0 : Math.Ceiling((decimal)_dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Sum(item2 => item2.AverageGrandTotal)),
                    }).ToArray();

                    RepeaterDetail.DataSource = Data;
                    RepeaterDetail.DataBind();

                    #region Labelling
                    LabelAverageSalesTahunIni.Text         = Math.Ceiling(Data.Average(item => item.averageGrandTotalTahunIni)).ToFormatHarga();
                    LabelAverageSalesTahunLalu.Text        = Math.Ceiling(Data.Average(item => item.averageGrandTotalTahunLalu)).ToFormatHarga();
                    LabelTotalAverageSales.Text            = Pertumbuhan(Math.Ceiling(Data.Average(item => item.averageGrandTotalTahunIni - item.averageGrandTotalTahunLalu)).ToDecimal());
                    LabelTotalGrowthSalesVolumePanel1.Text = Pertumbuhan(Math.Ceiling(Data.Average(item => item.TotalTransaksiTahunIni - item.TotalTransaksiTahunLalu)).ToDecimal());
                    LabelSalesVolumeTahunIniPanel1.Text    = Math.Ceiling(Data.Average(item => item.TotalTransaksiTahunIni)).ToFormatHargaBulat();
                    LabelSalesVolumeTahunLaluPanel1.Text   = Math.Ceiling(Data.Average(item => item.TotalTransaksiTahunLalu)).ToFormatHargaBulat();
                    #endregion
                }
                else
                {
                    PanelReportPenjualan.Visible = false;
                    PanelReportQty.Visible       = true;

                    var Data = Bulan.Select(item => new
                    {
                        Bulan = new DateTime(DropDownListTahun.SelectedValue.ToInt(), item, 1).ToString("MMMM"),
                        TotalTransaksiTahunLalu    = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Sum(item2 => item2.TotalTransaksi),
                        TotalTransaksiTahunIni     = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Sum(item2 => item2.TotalTransaksi),
                        averageGrandTotalTahunLalu = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Count() == 0 ? 0 : Math.Ceiling(_dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Sum(item2 => item2.AverageQty).ToDecimal()),
                        averageGrandTotalTahunIni  = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Count() == 0 ? 0 : Math.Ceiling(_dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Sum(item2 => item2.AverageQty).ToDecimal()),
                    }).ToArray();

                    RepeaterDetailQty.DataSource = Data;
                    RepeaterDetailQty.DataBind();

                    #region Labelling
                    LabelAverageQtyTahunIni.Text           = Math.Ceiling(Data.Average(item => item.averageGrandTotalTahunIni)).ToFormatHargaBulat();
                    LabelAverageQtyTahunLalu.Text          = Math.Ceiling(Data.Average(item => item.averageGrandTotalTahunLalu)).ToFormatHargaBulat();
                    LabelTotalAvgItems.Text                = Pertumbuhan(Math.Ceiling(Data.Average(item => item.averageGrandTotalTahunIni - item.averageGrandTotalTahunLalu)).ToDecimal());
                    LabelTotalGrowthSalesVolumePanel2.Text = Pertumbuhan(Math.Ceiling(Data.Average(item => item.TotalTransaksiTahunIni - item.TotalTransaksiTahunLalu)).ToDecimal());
                    LabelSalesVolumeTahunIniPanel2.Text    = Math.Ceiling(Data.Average(item => item.TotalTransaksiTahunIni)).ToFormatHargaBulat();
                    LabelSalesVolumeTahunLaluPanel2.Text   = Math.Ceiling(Data.Average(item => item.TotalTransaksiTahunLalu)).ToFormatHargaBulat();
                    #endregion
                }
                #endregion

                #region DONUT TOP PRODUCT
                var _dataDetailTransaksiTahunIniDatabase = DetailTransaksiDB
                                                           .Where(item => item.TBTransaksi.TanggalTransaksi.Value.Year == tahun && item.TBTransaksi.IDStatusTransaksi == (int)EnumStatusTransaksi.Complete);

                var TotalQty       = _dataDetailTransaksiTahunIniDatabase.Sum(item => item.Quantity);
                var TotalPenjualan = _dataDetailTransaksiTahunIniDatabase.Sum(item => item.Subtotal);

                var _data = _dataDetailTransaksiTahunIniDatabase.GroupBy(item => new
                {
                    Kode     = item.TBKombinasiProduk.KodeKombinasiProduk,
                    Produk   = item.TBKombinasiProduk.TBProduk.Nama,
                    Varian   = item.TBKombinasiProduk.TBAtributProduk.Nama ?? string.Empty,
                    Warna    = item.TBKombinasiProduk.TBProduk.TBWarna.Nama ?? string.Empty,
                    Kategori = item.TBKombinasiProduk.TBProduk.TBRelasiProdukKategoriProduks.FirstOrDefault().TBKategoriProduk.Nama ?? string.Empty,
                    Brand    = item.TBKombinasiProduk.TBProduk.TBPemilikProduk.Nama ?? string.Empty
                })
                            .Select(item => new
                {
                    Key                 = item.Key,
                    Quantity            = item.Sum(item2 => item2.Quantity),
                    TotalDiscount       = item.Sum(item2 => item2.Discount * item2.Quantity),
                    TotalPenjualan      = item.Sum(item2 => item2.Subtotal),
                    PersentaseQty       = ((item.Sum(item2 => item2.Quantity)) * 100) / TotalQty,
                    PersentasePenjualan = ((item.Sum(item2 => item2.Subtotal)) * 100) / TotalPenjualan
                });
                //Quantity
                var _sortedDataQty = _data.OrderByDescending(item => item.Quantity).Take(10).ToArray().ToArray();
                //Penjualan
                var _sortedDataPenjualan = _data.OrderByDescending(item => item.TotalPenjualan).Take(10).ToArray().ToArray();

                LiteralChart.Text += "<script> $(function () { var dataChart = [";
                foreach (var item in _sortedDataQty)
                {
                    LiteralChart.Text += "{ 'label': '" + item.Key.Produk + "', 'value': " + item.Quantity + "}, ";
                }
                LiteralChart.Text += "]; Morris.Donut({ element: 'graph7', behaveLikeLine: true, data: dataChart, xkey: 'y', ";


                LiteralChart.Text += "colors:['#A9ED9B','#7FC4C1','#C320C4','#6168FF','#EDE18E','#73C489','#74A5FF','#FFC7FE','#00FFF7','#FFCBA0'], ";
                LiteralChart.Text += "resize:true});}); </script>";

                LiteralChart.Text += "<script> $(function () { var dataChart = [";
                foreach (var item in _sortedDataPenjualan)
                {
                    LiteralChart.Text += "{ 'label': '" + item.Key.Produk + "', 'value': " + item.TotalPenjualan + "}, ";
                }
                LiteralChart.Text += "]; Morris.Donut({ element: 'graph8', behaveLikeLine: true, data: dataChart, xkey: 'y', ";


                LiteralChart.Text += "colors:['#A9ED9B','#7FC4C1','#C320C4','#6168FF','#EDE18E','#73C489','#74A5FF','#FFC7FE','#00FFF7','#FFCBA0'], ";
                LiteralChart.Text += "resize:true});}); </script>";
                #endregion

                //#region MARKET SHARE
                //List<string> ListKota = new List<string>();
                //var KotaDB = db.TBAlamats.Select(item => item.Kota).Distinct();

                //foreach (var item in KotaDB)
                //{
                //    ListKota.Add(item);
                //}

                //var DataSalesDB = db.TBTransaksis.Where(item => item.IDStatusTransaksi == (int)EnumStatusTransaksi.Complete).GroupBy(item => new
                //                              {
                //                                  item.TBPelanggan.TBAlamats.FirstOrDefault().Kota
                //                              })
                //                              .Select(item => new
                //                              {
                //                                  Key = item.Key,
                //                                  GrandTotal = item.Sum(item2 => item2.GrandTotal),
                //                                  TotalTransaksi = item.Where(item2 => item2.IDStatusTransaksi == (int)EnumStatusTransaksi.Complete).Count(),
                //                                  TotalNominalDiscount = item.Sum(item2 => item2.TotalPotonganHargaJualDetail),
                //                                  JumlahProduk = item.Sum(item2 => item2.JumlahProduk)
                //                              }).OrderByDescending(item=> item.GrandTotal).ToArray();

                //var DataSales = ListKota.Select(item => new
                //{
                //    Kota = item,
                //    JumlahTransaksi = DataSalesDB.Where(item2 => item2.Key.Kota == item).Count() == 0 ? 0 : DataSalesDB.Where(item2 => item2.Key.Kota == item).Sum(item2 => item2.TotalTransaksi),
                //    GrandTotal = DataSalesDB.Where(item2 => item2.Key.Kota == item).Count() == 0 ? 0 : DataSalesDB.Where(item2 => item2.Key.Kota == item).Sum(item2 => item2.GrandTotal),
                //    JumlahProduk = DataSalesDB.Where(item2 => item2.Key.Kota == item).Count() == 0 ? 0 : DataSalesDB.Where(item2 => item2.Key.Kota == item).Sum(item2 => item2.JumlahProduk),
                //    SumJumlahProduk = DataSalesDB.Sum(item2 => item2.JumlahProduk),
                //    SumJumlahTransaksi = DataSalesDB.Sum(item2 => item2.TotalTransaksi),
                //    SumGrandTotal = DataSalesDB.Sum(item2 => item2.GrandTotal)
                //}).ToArray();

                //RepeaterMarketShare.DataSource = DataSales.OrderByDescending(item2 => item2.GrandTotal).ToArray();
                //RepeaterMarketShare.DataBind();

                //var Data5Kota = DataSales.OrderByDescending(item2 => item2.GrandTotal).Take(5).ToArray();
                //List<string> Top5_Kota = new List<string>();

                //for (int i = 0; i < Data5Kota.Count(); i++)
                //{
                //    Top5_Kota.Add(Data5Kota[i].Kota);
                //}

                //LiteralChart.Text += "<script> $(function () { var dataChart = [";

                //for (int i = 0; i < Top5_Kota.Count(); i++)
                //{
                //    var _transaksiTahunIni = DataSalesDB.FirstOrDefault(item => item.Key.Kota == Top5_Kota[i].ToString());
                //    //var _transaksiTahunLalu = _dataDetailTransaksiTahunLaluGroupByIDTempat.FirstOrDefault(item => item.Key.IDTempat == tempatDatabase[i].IDTempat);

                //    decimal _grandTotal = 0, _grandTotalTahunLalu = 0;

                //    if (_transaksiTahunIni != null)
                //        _grandTotal = (decimal)_transaksiTahunIni.GrandTotal;

                //    //if (_transaksiTahunLalu != null)
                //    //    _grandTotalTahunLalu = (decimal)_transaksiTahunLalu.GrandTotal;

                //    LiteralChart.Text += "{ 'y': '" + Top5_Kota[i].ToString() + "', '" + (tahun - 1) + "': " + _grandTotalTahunLalu + ", '" + tahun + "': " + _grandTotal + " }, ";
                //}
                //LiteralChart.Text += "]; Morris.Bar({ element: 'graph13', behaveLikeLine: true, data: dataChart, xkey: 'y', ";

                //LiteralChart.Text += "ykeys: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
                //LiteralChart.Text += "labels: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
                //LiteralChart.Text += "barColors:['#7FC4C1','#FF625D'],";
                //LiteralChart.Text += " parseTime: false,resize:true}); eval(dataChart); }); </script>";

                //#region Labelling
                //LabelTotalJumlahTransaksiHeader.Text = DataSales.Sum(item => item.JumlahTransaksi).ToFormatHargaBulat();
                //LabelTotalGrandTotalHeader.Text = DataSales.Sum(item => item.GrandTotal).ToFormatHarga();
                //LabelJumlahProdukHeader.Text = DataSales.Sum(item => item.JumlahProduk).ToFormatHargaBulat();

                //LabelTotalJumlahTransaksiFooter.Text = DataSales.Sum(item => item.JumlahTransaksi).ToFormatHargaBulat();
                //LabelTotalGrandTotalFooter.Text = DataSales.Sum(item => item.GrandTotal).ToFormatHarga();
                //LabelJumlahProdukFooter.Text = DataSales.Sum(item => item.JumlahProduk).ToFormatHargaBulat();
                //#endregion

                //#endregion
            }
        }
    }
    protected void LoadChartKategori(int tahun, int idkategori, int idtempat, int searchby)
    {
        using (DataClassesDatabaseDataContext db = new DataClassesDatabaseDataContext())
        {
            if (searchby == 1)
            {
                PanelReportPenjualan.Visible = true;
                PanelReportQty.Visible       = false;
                //PanelSalesPerChannelPenjualan.Visible = true;
                //PanelSalesPerChannelQty.Visible = false;
            }
            else
            {
                PanelReportPenjualan.Visible = false;
                PanelReportQty.Visible       = true;
                //PanelSalesPerChannelPenjualan.Visible = false;
                //PanelSalesPerChannelQty.Visible = true;
            }

            LabelHeader.Text = "SALES TREND ANALYSIS " + tahun.ToString().ToUpper();
            //Literal LiteralChart = (Literal)this.Page.Master.FindControl("LiteralChart");
            LiteralChart.Text = string.Empty;

            var _dataDetailTransaksi2TahunDataBase = (from itemDetailTransaksi in db.TBTransaksiDetails
                                                      join itemKombinasiProduk in db.TBKombinasiProduks on itemDetailTransaksi.IDKombinasiProduk equals itemKombinasiProduk.IDKombinasiProduk
                                                      join itemProduk in db.TBProduks on itemKombinasiProduk.IDProduk equals itemProduk.IDProduk
                                                      join itemRelasiKategori in db.TBRelasiProdukKategoriProduks on itemProduk.IDProduk equals itemRelasiKategori.IDProduk
                                                      where
                                                      itemDetailTransaksi.TBTransaksi.TanggalOperasional.Value.Year >= tahun - 1
                                                      select new
            {
                Kode = itemKombinasiProduk.KodeKombinasiProduk,
                IDPelanggan = itemDetailTransaksi.TBTransaksi.IDPelanggan,
                Produk = itemKombinasiProduk.Nama,
                Warna = itemProduk.TBWarna.Nama ?? string.Empty,
                IDKategori = itemRelasiKategori.IDKategoriProduk,
                Kategori = StokProduk_Class.GabungkanSemuaKategoriProduk(db, null, itemKombinasiProduk),
                Brand = itemProduk.TBPemilikProduk.Nama ?? string.Empty,
                JumlahProduk = itemDetailTransaksi.Quantity,
                HargaPokok = itemDetailTransaksi.HargaBeli,
                HargaJual = itemDetailTransaksi.HargaJual,
                PotonganHargaJual = itemDetailTransaksi.Discount,
                Subtotal = itemDetailTransaksi.Subtotal,
                TanggalOperasional = itemDetailTransaksi.TBTransaksi.TanggalOperasional,
                IDTempat = itemDetailTransaksi.TBTransaksi.IDTempat,
                Nama = itemDetailTransaksi.TBTransaksi.TBTempat.Nama,
                Kota = itemDetailTransaksi.TBTransaksi.TBPelanggan.TBAlamats.FirstOrDefault().TBWilayah.TBWilayah1.Nama,
                TBTransaksi = itemDetailTransaksi.TBTransaksi
            }).ToArray();

            var _dataDetailTransaksi2TahunDataBaseDefault = (from itemDetailTransaksi in db.TBTransaksiDetails
                                                             join itemKombinasiProduk in db.TBKombinasiProduks on itemDetailTransaksi.IDKombinasiProduk equals itemKombinasiProduk.IDKombinasiProduk
                                                             join itemProduk in db.TBProduks on itemKombinasiProduk.IDProduk equals itemProduk.IDProduk
                                                             join itemRelasiKategori in db.TBRelasiProdukKategoriProduks on itemProduk.IDProduk equals itemRelasiKategori.IDProduk
                                                             where
                                                             itemDetailTransaksi.TBTransaksi.TanggalOperasional.Value.Year >= tahun - 1
                                                             select new
            {
                Kode = itemKombinasiProduk.KodeKombinasiProduk,
                IDPelanggan = itemDetailTransaksi.TBTransaksi.IDPelanggan,
                Produk = itemKombinasiProduk.Nama,
                Warna = itemProduk.TBWarna.Nama ?? string.Empty,
                IDKategori = itemRelasiKategori.IDKategoriProduk,
                Kategori = StokProduk_Class.GabungkanSemuaKategoriProduk(db, null, itemKombinasiProduk),
                Brand = itemProduk.TBPemilikProduk.Nama ?? string.Empty,
                JumlahProduk = itemDetailTransaksi.Quantity,
                HargaPokok = itemDetailTransaksi.HargaBeli,
                HargaJual = itemDetailTransaksi.HargaJual,
                PotonganHargaJual = itemDetailTransaksi.Discount,
                Subtotal = itemDetailTransaksi.Subtotal,
                TanggalOperasional = itemDetailTransaksi.TBTransaksi.TanggalOperasional,
                IDTempat = itemDetailTransaksi.TBTransaksi.IDTempat,
                Nama = itemDetailTransaksi.TBTransaksi.TBTempat.Nama,
                Kota = itemDetailTransaksi.TBTransaksi.TBPelanggan.TBAlamats.FirstOrDefault().TBWilayah.TBWilayah1.Nama,
                TBTransaksi = itemDetailTransaksi.TBTransaksi
            }).ToArray();

            if (idkategori != 0)
            {
                //Detail transaksi tahun ini, dan setahun yg lalu.. di seluruh tempat
                _dataDetailTransaksi2TahunDataBase = _dataDetailTransaksi2TahunDataBase.Where(item => item.IDKategori == idkategori).ToArray();
            }
            else
            {
                //Detail transaksi tahun ini, dan setahun yg lalu.. di seluruh tempat
                _dataDetailTransaksi2TahunDataBase = _dataDetailTransaksi2TahunDataBase.ToArray();
            }

            //Group by Month
            var _dataDetailTransaksiTahunIni = _dataDetailTransaksi2TahunDataBase
                                               .Where(item => item.TanggalOperasional.Value.Year == tahun)
                                               .GroupBy(item => item.TanggalOperasional.Value.Month)
                                               .Select(item => new
            {
                Key        = item.Key,
                GrandTotal = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
                TotalQty   = item.Sum(item2 => item2.JumlahProduk) == 0 ? 0 : item.Sum(item2 => item2.JumlahProduk)
            }).ToArray();

            var _dataDetailTransaksiTahunIniNoFilter = _dataDetailTransaksi2TahunDataBase
                                                       .Where(item => item.TanggalOperasional.Value.Year == tahun)
                                                       .GroupBy(item => item.TanggalOperasional.Value.Month)
                                                       .Select(item => new
            {
                Key        = item.Key,
                GrandTotal = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
                TotalQty   = item.Sum(item2 => item2.JumlahProduk) == 0 ? 0 : item.Sum(item2 => item2.JumlahProduk)
            }).ToArray();

            //Group by Month
            var _dataDetailTransaksiTahunLalu = _dataDetailTransaksi2TahunDataBase
                                                .Where(item => item.TanggalOperasional.Value.Year == tahun - 1)
                                                .GroupBy(item => item.TanggalOperasional.Value.Month)
                                                .Select(item => new
            {
                Key        = item.Key,
                GrandTotal = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
                TotalQty   = item.Sum(item2 => item2.JumlahProduk) == 0 ? 0 : item.Sum(item2 => item2.JumlahProduk)
            }).ToArray();

            var _dataDetailTransaksiTahunLaluNoFilter = _dataDetailTransaksi2TahunDataBase
                                                        .Where(item => item.TanggalOperasional.Value.Year == tahun - 1)
                                                        .GroupBy(item => item.TanggalOperasional.Value.Month)
                                                        .Select(item => new
            {
                Key        = item.Key,
                GrandTotal = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
                TotalQty   = item.Sum(item2 => item2.JumlahProduk) == 0 ? 0 : item.Sum(item2 => item2.JumlahProduk)
            }).ToArray();

            #region Line Chart - Trend Analysis Monthly (tahun ini dan tahun lalu)
            LiteralChart.Text += "<script> $(function () { var dataChart = [";
            if (idtempat == 0)
            {
                //If searched by Penjualan
                if (searchby == 1)
                {
                    for (int i = 1; i <= 12; i++)
                    {
                        var _transaksiTahunIni  = _dataDetailTransaksiTahunIniNoFilter.FirstOrDefault(item => item.Key == i);
                        var _transaksiTahunLalu = _dataDetailTransaksiTahunLaluNoFilter.FirstOrDefault(item => item.Key == i);

                        decimal _grandTotal = 0, _grandTotalTahunLalu = 0;

                        if (_transaksiTahunIni != null)
                        {
                            _grandTotal = (decimal)_transaksiTahunIni.GrandTotal;
                        }

                        if (_transaksiTahunLalu != null)
                        {
                            _grandTotalTahunLalu = (decimal)_transaksiTahunLalu.GrandTotal;
                        }

                        LiteralChart.Text += "{ 'y': '" + new DateTime(DropDownListTahun.SelectedValue.ToInt(), i, 1).ToString("MMM") + "', '" + (tahun - 1) + "': " + _grandTotalTahunLalu + ", '" + tahun + "': " + _grandTotal + " }, ";
                    }
                }
                else //searched by Qty
                {
                    for (int i = 1; i <= 12; i++)
                    {
                        var _transaksiTahunIni  = _dataDetailTransaksiTahunIniNoFilter.FirstOrDefault(item => item.Key == i);
                        var _transaksiTahunLalu = _dataDetailTransaksiTahunLaluNoFilter.FirstOrDefault(item => item.Key == i);

                        decimal _totalQty = 0, _totalQtyTahunLalu = 0;

                        if (_transaksiTahunIni != null)
                        {
                            _totalQty = (decimal)_transaksiTahunIni.TotalQty;
                        }

                        if (_transaksiTahunLalu != null)
                        {
                            _totalQtyTahunLalu = (decimal)_transaksiTahunLalu.TotalQty;
                        }

                        LiteralChart.Text += "{ 'y': '" + new DateTime(DropDownListTahun.SelectedValue.ToInt(), i, 1).ToString("MMM") + "', '" + (tahun - 1) + "': " + _totalQtyTahunLalu + ", '" + tahun + "': " + _totalQty + " }, ";
                    }
                }

                LiteralChart.Text += "]; Morris.Line({ element: 'graph11', behaveLikeLine: true, data: dataChart, xkey: 'y', ";

                LiteralChart.Text += "ykeys: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
                LiteralChart.Text += "labels: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
                LiteralChart.Text += "lineColors:['#7FC4C1','#FF625D'],";
                LiteralChart.Text += " parseTime: false}); eval(dataChart); }); </script>";
            }
            else
            {
                //If searched by Penjualan
                if (searchby == 1)
                {
                    for (int i = 1; i <= 12; i++)
                    {
                        var _transaksiTahunIni  = _dataDetailTransaksiTahunIni.FirstOrDefault(item => item.Key == i);
                        var _transaksiTahunLalu = _dataDetailTransaksiTahunLalu.FirstOrDefault(item => item.Key == i);

                        decimal _grandTotal = 0, _grandTotalTahunLalu = 0;

                        if (_transaksiTahunIni != null)
                        {
                            _grandTotal = (decimal)_transaksiTahunIni.GrandTotal;
                        }

                        if (_transaksiTahunLalu != null)
                        {
                            _grandTotalTahunLalu = (decimal)_transaksiTahunLalu.GrandTotal;
                        }

                        LiteralChart.Text += "{ 'y': '" + new DateTime(DropDownListTahun.SelectedValue.ToInt(), i, 1).ToString("MMM") + "', '" + (tahun - 1) + "': " + _grandTotalTahunLalu + ", '" + tahun + "': " + _grandTotal + " }, ";
                    }
                }
                else //searched by Qty
                {
                    for (int i = 1; i <= 12; i++)
                    {
                        var _transaksiTahunIni  = _dataDetailTransaksiTahunIni.FirstOrDefault(item => item.Key == i);
                        var _transaksiTahunLalu = _dataDetailTransaksiTahunLalu.FirstOrDefault(item => item.Key == i);

                        decimal _totalQty = 0, _totalQtyTahunLalu = 0;

                        if (_transaksiTahunIni != null)
                        {
                            _totalQty = (decimal)_transaksiTahunIni.TotalQty;
                        }

                        if (_transaksiTahunLalu != null)
                        {
                            _totalQtyTahunLalu = (decimal)_transaksiTahunLalu.TotalQty;
                        }

                        LiteralChart.Text += "{ 'y': '" + new DateTime(DropDownListTahun.SelectedValue.ToInt(), i, 1).ToString("MMM") + "', '" + (tahun - 1) + "': " + _totalQtyTahunLalu + ", '" + tahun + "': " + _totalQty + " }, ";
                    }
                }

                LiteralChart.Text += "]; Morris.Line({ element: 'graph11', behaveLikeLine: true, data: dataChart, xkey: 'y', ";

                LiteralChart.Text += "ykeys: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
                LiteralChart.Text += "labels: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
                LiteralChart.Text += "lineColors:['#7FC4C1','#FF625D'],";
                LiteralChart.Text += " parseTime: false}); eval(dataChart); }); </script>";
            }
            #endregion

            #region RepeaterDetail dari Trend Analysis Monthly
            PanelDetail.Visible = true;
            //Group by Month & Year, ini digunakan untuk tampilan repeater detail
            var _dataDetail2Tahun = _dataDetailTransaksi2TahunDataBase
                                    .GroupBy(item => new
            {
                item.TanggalOperasional.Value.Month,
                item.TanggalOperasional.Value.Year
            })
                                    .Select(item => new
            {
                Key                  = item.Key,
                GrandTotal           = item.Sum(item2 => item2.Subtotal),
                TotalQty             = item.Sum(item2 => item2.JumlahProduk),
                TotalNominalDiscount = item.Sum(item2 => item2.PotonganHargaJual) == 0 ? 0 : item.Sum(item2 => item2.PotonganHargaJual * item2.JumlahProduk)
            }).ToArray();

            List <int> Bulan = new List <int>();
            for (int i = 1; i <= 12; i++)
            {
                Bulan.Add(i);
            }

            if (DropDownListFilter.SelectedValue.ToInt() == 1)
            {
                var Data = Bulan.Select(item => new
                {
                    Bulan = new DateTime(DropDownListTahun.SelectedValue.ToInt(), item, 1).ToString("MMMM"),
                    GrandTotalTahunLalu           = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Sum(item2 => item2.GrandTotal),
                    GrandTotalTahunIni            = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Sum(item2 => item2.GrandTotal),
                    TotalNominalDiscountTahunLalu = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Sum(item2 => item2.TotalNominalDiscount),
                    TotalNominalDiscountTahunIni  = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Sum(item2 => item2.TotalNominalDiscount)
                }).ToArray();

                RepeaterDetail.DataSource = Data;
                RepeaterDetail.DataBind();

                LabelTotalNormalSalesTahunIni.Text  = Data.Sum(item => item.GrandTotalTahunIni + item.TotalNominalDiscountTahunIni).ToFormatHarga();
                LabelTotalDiscountTahunIni.Text     = Data.Sum(item => item.TotalNominalDiscountTahunIni).ToFormatHarga();
                LabelGrandTotalTahunIni.Text        = Data.Sum(item => item.GrandTotalTahunIni).ToFormatHarga();
                LabelTotalNormalSalesTahunLalu.Text = Data.Sum(item => item.GrandTotalTahunLalu + item.TotalNominalDiscountTahunLalu).ToFormatHarga();
                LabelTotalDiscountTahunLalu.Text    = Data.Sum(item => item.TotalNominalDiscountTahunLalu).ToFormatHarga();
                LabelGrandTotalTahunLalu.Text       = Data.Sum(item => item.GrandTotalTahunLalu).ToFormatHarga();
                LabelTotalSelisih.Text = Pertumbuhan((decimal)Data.Sum(item => item.GrandTotalTahunIni - item.GrandTotalTahunLalu));
            }
            else
            {
                var Data = Bulan.Select(item => new
                {
                    Bulan = new DateTime(DropDownListTahun.SelectedValue.ToInt(), item, 1).ToString("MMMM"),
                    GrandTotalTahunLalu           = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Sum(item2 => item2.TotalQty),
                    GrandTotalTahunIni            = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Sum(item2 => item2.TotalQty),
                    TotalNominalDiscountTahunLalu = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun - 1).Sum(item2 => item2.TotalNominalDiscount),
                    TotalNominalDiscountTahunIni  = _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Count() == 0 ? 0 : _dataDetail2Tahun.Where(item2 => item2.Key.Month == item && item2.Key.Year == tahun).Sum(item2 => item2.TotalNominalDiscount)
                }).ToArray();

                RepeaterDetailQty.DataSource = Data;
                RepeaterDetailQty.DataBind();

                LabelTotalQtyTahunIni.Text  = Data.Sum(item => item.GrandTotalTahunIni).ToFormatHargaBulat();
                LabelTotalQtyTahunLalu.Text = Data.Sum(item => item.GrandTotalTahunLalu).ToFormatHargaBulat();
                LabelTotalGrowthQty.Text    = Pertumbuhan((decimal)Data.Sum(item => item.GrandTotalTahunIni - item.GrandTotalTahunLalu));;
            }
            #endregion

            //#region Bar Chart - Sales per channel
            //TBTempat[] tempatDatabase = Database.db.TBTempats.ToArray();
            //List<int> datatempat = new List<int>();
            //for (int i = 0; i < tempatDatabase.Count(); i++)
            //{
            //    datatempat.Add(tempatDatabase[i].IDTempat);
            //}
            ////Detail Transaksi tahun ini, Group by Tempat
            //var _dataDetailTransaksiTahunIniGroupByIDTempat = _dataDetailTransaksi2TahunDataBase
            //                        .Where(item => item.TanggalOperasional.Value.Year == tahun)
            //                       .GroupBy(item => new
            //                       {
            //                           item.IDTempat,
            //                           item.Nama
            //                       })
            //                       .Select(item => new
            //                       {
            //                           Key = item.Key,
            //                           GrandTotal = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
            //                           TotalQty = item.Sum(item2 => item2.JumlahProduk) == 0 ? 0 : item.Sum(item2 => item2.JumlahProduk),
            //                           TotalNominalDiscount = item.Sum(item2 => item2.PotonganHargaJual) == 0 ? 0 : item.Sum(item2 => item2.PotonganHargaJual * item2.JumlahProduk)
            //                       }).ToArray();

            ////Detail Transaksi tahun lalu, Group by Tempat
            //var _dataDetailTransaksiTahunLaluGroupByIDTempat = _dataDetailTransaksi2TahunDataBase
            //                       .Where(item => item.TanggalOperasional.Value.Year == tahun - 1)
            //                       .GroupBy(item => new
            //                       {
            //                           item.IDTempat,
            //                           item.Nama
            //                       })
            //                       .Select(item => new
            //                       {
            //                           Key = item.Key,
            //                           NormalSales = item.Sum(item2 => item2.HargaJual) * item.Sum(item2 => item2.JumlahProduk),
            //                           GrandTotal = item.Sum(item2 => item2.Subtotal) == 0 ? 0 : item.Sum(item2 => item2.Subtotal),
            //                           TotalQty = item.Sum(item2 => item2.JumlahProduk) == 0 ? 0 : item.Sum(item2 => item2.JumlahProduk),
            //                           TotalNominalDiscount = item.Sum(item2 => item2.PotonganHargaJual) == 0 ? 0 : item.Sum(item2 => item2.PotonganHargaJual * item2.JumlahProduk)
            //                       }).ToArray();
            //LiteralChart.Text += "<script> $(function () { var dataChart = [";

            //for (int i = 0; i < datatempat.Count(); i++)
            //{
            //    var _transaksiTahunIni = _dataDetailTransaksiTahunIniGroupByIDTempat.FirstOrDefault(item => item.Key.IDTempat == tempatDatabase[i].IDTempat);
            //    var _transaksiTahunLalu = _dataDetailTransaksiTahunLaluGroupByIDTempat.FirstOrDefault(item => item.Key.IDTempat == tempatDatabase[i].IDTempat);

            //    decimal _grandTotal = 0, _grandTotalTahunLalu = 0;

            //    if (_transaksiTahunIni != null)
            //        _grandTotal = (decimal)_transaksiTahunIni.GrandTotal;

            //    if (_transaksiTahunLalu != null)
            //        _grandTotalTahunLalu = (decimal)_transaksiTahunLalu.GrandTotal;

            //    LiteralChart.Text += "{ 'y': '" + tempatDatabase[i].Nama + "', '" + (tahun - 1) + "': " + _grandTotalTahunLalu + ", '" + tahun + "': " + _grandTotal + " }, ";
            //}
            //LiteralChart.Text += "]; Morris.Bar({ element: 'graph13', behaveLikeLine: true, data: dataChart, xkey: 'y', ";

            //LiteralChart.Text += "ykeys: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
            //LiteralChart.Text += "labels: ['" + (DropDownListTahun.SelectedValue.ToInt() - 1) + "','" + DropDownListTahun.SelectedValue.ToInt() + "'],";
            //LiteralChart.Text += "barColors:['#7FC4C1','#FF625D'],";
            //LiteralChart.Text += " parseTime: false,resize:true}); eval(dataChart); }); </script>";

            //if (DropDownListFilter.SelectedValue) == 1)
            //{
            //    var DataSalesPerChannel = datatempat.Select(item => new
            //    {
            //        NamaTempat = tempatDatabase.FirstOrDefault(item2 => item2.IDTempat == item).Nama,
            //        GrandTotalTahunLalu = _dataDetailTransaksiTahunLaluGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Count() == 0 ? 0 : _dataDetailTransaksiTahunLaluGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Sum(item2 => item2.GrandTotal),
            //        GrandTotalTahunIni = _dataDetailTransaksiTahunIniGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Count() == 0 ? 0 : _dataDetailTransaksiTahunIniGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Sum(item2 => item2.GrandTotal),
            //        TotalNominalDiscountTahunLalu = _dataDetailTransaksiTahunLaluGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Count() == 0 ? 0 : _dataDetailTransaksiTahunLaluGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Sum(item2 => item2.TotalNominalDiscount),
            //        TotalNominalDiscountTahunIni = _dataDetailTransaksiTahunIniGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Count() == 0 ? 0 : _dataDetailTransaksiTahunIniGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Sum(item2 => item2.TotalNominalDiscount)
            //    }).ToArray();

            //    RepeaterSalesPerChannel.DataSource = DataSalesPerChannel;
            //    RepeaterSalesPerChannel.DataBind();

            //    LabelTotalNormalSalesTahunLaluPerChannel.Text = DataSalesPerChannel.Sum(item => item.GrandTotalTahunLalu + item.TotalNominalDiscountTahunLalu).ToFormatHarga();
            //    LabelTotalDiscountTahunLaluPerChannel.Text = DataSalesPerChannel.Sum(item => item.TotalNominalDiscountTahunLalu).ToFormatHarga();
            //    LabelGrandTotalTahunLaluPerChannel.Text = DataSalesPerChannel.Sum(item => item.GrandTotalTahunLalu).ToFormatHarga();
            //    LabelTotalNormalSalesTahunIniPerChannel.Text = DataSalesPerChannel.Sum(item => item.GrandTotalTahunIni + item.TotalNominalDiscountTahunIni).ToFormatHarga();
            //    LabelTotalDiscountTahunIniPerChannel.Text = DataSalesPerChannel.Sum(item => item.TotalNominalDiscountTahunIni).ToFormatHarga();
            //    LabelGrandTotalTahunIniPerChannel.Text = DataSalesPerChannel.Sum(item => item.GrandTotalTahunIni).ToFormatHarga();
            //    LabelTotalSelisihPerChannel.Text = Pertumbuhan((decimal)DataSalesPerChannel.Sum(item => item.GrandTotalTahunIni - item.GrandTotalTahunLalu));
            //}
            //else
            //{
            //    var DataSalesPerChannel = datatempat.Select(item => new
            //    {
            //        NamaTempat = tempatDatabase.FirstOrDefault(item2 => item2.IDTempat == item).Nama,
            //        GrandTotalTahunLalu = _dataDetailTransaksiTahunLaluGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Count() == 0 ? 0 : _dataDetailTransaksiTahunLaluGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Sum(item2 => item2.TotalQty),
            //        GrandTotalTahunIni = _dataDetailTransaksiTahunIniGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Count() == 0 ? 0 : _dataDetailTransaksiTahunIniGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Sum(item2 => item2.TotalQty),
            //        TotalNominalDiscountTahunLalu = _dataDetailTransaksiTahunLaluGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Count() == 0 ? 0 : _dataDetailTransaksiTahunLaluGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Sum(item2 => item2.TotalNominalDiscount),
            //        TotalNominalDiscountTahunIni = _dataDetailTransaksiTahunIniGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Count() == 0 ? 0 : _dataDetailTransaksiTahunIniGroupByIDTempat.Where(item2 => item2.Key.IDTempat == item).Sum(item2 => item2.TotalNominalDiscount)
            //    }).ToArray();

            //    RepeaterSalesPerChannelQty.DataSource = DataSalesPerChannel;
            //    RepeaterSalesPerChannelQty.DataBind();

            //    LabelTotalQtySalesPerChannelTahunLalu.Text = DataSalesPerChannel.Sum(item => item.GrandTotalTahunLalu).ToFormatHargaBulat();
            //    LabelTotalQtySalesPerChannelTahunIni.Text = DataSalesPerChannel.Sum(item => item.GrandTotalTahunIni).ToFormatHargaBulat();
            //    LabelTotalGrowthQtySalesPerChannel.Text = Pertumbuhan((decimal)DataSalesPerChannel.Sum(item => item.GrandTotalTahunIni - item.GrandTotalTahunLalu));
            //}

            //#endregion

            #region Sales per kota
            List <string> ListKota = new List <string>();
            var           KotaDB   = db.TBAlamats.Select(item => item.TBWilayah.TBWilayah1.Nama).Distinct();

            if (KotaDB != null)
            {
                foreach (var item in KotaDB)
                {
                    ListKota.Add(item);
                }

                var DataSalesPerKota = _dataDetailTransaksi2TahunDataBase
                                       .Where(item => item.TanggalOperasional.Value.Year == tahun &&
                                              item.IDPelanggan != 1 &&
                                              item.TBTransaksi.TBPelanggan.TBAlamats.FirstOrDefault().TBWilayah != null)
                                       .GroupBy(item => new
                {
                    Kota     = item.Kota,
                    Provinsi = item.TBTransaksi.TBPelanggan.TBAlamats.FirstOrDefault().TBWilayah.TBWilayah1.TBWilayah1.Nama,
                })
                                       .Select(item => new
                {
                    Key                  = item.Key,
                    GrandTotal           = item.Sum(item2 => item2.HargaJual * item2.JumlahProduk),
                    TotalTransaksi       = item.Where(item2 => item2.TBTransaksi.IDStatusTransaksi == 5).Count(),
                    TotalNominalDiscount = item.Sum(item2 => item2.PotonganHargaJual),
                    JumlahProduk         = item.Sum(item2 => item2.JumlahProduk)
                }).OrderByDescending(item => item.GrandTotal).ToArray();

                var DataSalesPerKotaSum = ListKota.Select(item => new
                {
                    Kota               = item,
                    Provinsi           = DataSalesPerKota.Where(item2 => item2.Key.Kota == item).Count() == 0 ? "" : DataSalesPerKota.FirstOrDefault(item2 => item2.Key.Kota == item).Key.Provinsi,
                    JumlahTransaksi    = DataSalesPerKota.Where(item2 => item2.Key.Kota == item).Count() == 0 ? 0 : DataSalesPerKota.FirstOrDefault(item2 => item2.Key.Kota == item).TotalTransaksi,
                    GrandTotal         = DataSalesPerKota.Where(item2 => item2.Key.Kota == item).Count() == 0 ? 0 : DataSalesPerKota.FirstOrDefault(item2 => item2.Key.Kota == item).GrandTotal,
                    JumlahProduk       = DataSalesPerKota.Where(item2 => item2.Key.Kota == item).Count() == 0 ? 0 : DataSalesPerKota.FirstOrDefault(item2 => item2.Key.Kota == item).JumlahProduk,
                    SumJumlahProduk    = DataSalesPerKota.Sum(item2 => item2.JumlahProduk),
                    SumJumlahTransaksi = DataSalesPerKota.Sum(item2 => item2.TotalTransaksi),
                    SumGrandTotal      = DataSalesPerKota.Sum(item2 => item2.GrandTotal)
                }).ToArray();

                RepeaterMarketShare.DataSource = DataSalesPerKotaSum.Where(item2 => item2.GrandTotal != 0)
                                                 .OrderByDescending(item2 => item2.GrandTotal).ToArray();
                RepeaterMarketShare.DataBind();

                #region Labelling
                LabelTotalJumlahTransaksiHeader.Text = DataSalesPerKotaSum.Sum(item => item.JumlahTransaksi).ToFormatHargaBulat();
                LabelTotalGrandTotalHeader.Text      = DataSalesPerKotaSum.Sum(item => item.GrandTotal).ToFormatHarga();
                LabelJumlahProdukHeader.Text         = DataSalesPerKotaSum.Sum(item => item.JumlahProduk).ToFormatHarga();

                LabelTotalJumlahTransaksiFooter.Text = DataSalesPerKotaSum.Sum(item => item.JumlahTransaksi).ToFormatHargaBulat();
                LabelTotalGrandTotalFooter.Text      = DataSalesPerKotaSum.Sum(item => item.GrandTotal).ToFormatHarga();
                LabelJumlahProdukFooter.Text         = DataSalesPerKotaSum.Sum(item => item.JumlahProduk).ToFormatHarga();
                #endregion

                var SettingGrafik = DataSalesPerKotaSum.Where(item2 => item2.GrandTotal != 0)
                                    .OrderByDescending(item2 => item2.GrandTotal)
                                    .Take(20);

                int Height = SettingGrafik.Count() * 25;

                container.Attributes.Add("style", "width: auto; height: " + (Height > 600 ? Height : 600) + "px; margin: 0 auto;");

                string Judul    = "";
                string SubJudul = "";
                string JudulX   = "Sales Per Kota";
                string DataX    = "";

                string JudulY = "Sales";

                string DataY   = "";
                string Tooltip = "";

                if (DropDownListFilter.SelectedItem.Value == "1")
                {
                    foreach (var item in SettingGrafik)
                    {
                        DataX += "'" + item.Kota + "',";
                        DataY += item.GrandTotal + ",";
                    }
                }
                else
                {
                    foreach (var item in SettingGrafik)
                    {
                        DataX += "'" + item.Kota + "',";
                        DataY += item.JumlahProduk + ",";
                    }
                }

                LiteralChart.Text += "<script type=\"text/javascript\">";
                LiteralChart.Text += "$(function () { $('#container').highcharts({";
                LiteralChart.Text += "        chart: { type: 'bar' },";
                LiteralChart.Text += "        title: { text: '" + Judul + "' },";
                LiteralChart.Text += "        subtitle: { text: '" + SubJudul + "' },";
                LiteralChart.Text += "        xAxis: { categories: [" + DataX + "] },";
                LiteralChart.Text += "        yAxis: { min: 0, title: { text: '" + JudulY + "' } },";
                LiteralChart.Text += "        tooltip: { valueSuffix: '" + Tooltip + "' },";
                LiteralChart.Text += "        legend: { reversed: true },";
                LiteralChart.Text += "        plotOptions: { series: { stacking: 'normal' } },";
                LiteralChart.Text += "        credits: { enabled: false },";
                LiteralChart.Text += "        exporting: { enabled: false },";
                LiteralChart.Text += "        series: [";
                LiteralChart.Text += "		{";
                LiteralChart.Text += "            name: '" + JudulX + "',";
                LiteralChart.Text += "            data: [" + DataY + "]";
                LiteralChart.Text += "        },";
                LiteralChart.Text += "		]";
                LiteralChart.Text += "    }); });";
                LiteralChart.Text += "</script>";

                #endregion
            }
        }
    }