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 } } }