protected void Page_Load(object sender, EventArgs e)
 {
     if (!Context.User.IsInRole("Store Clerk"))
     {
         Response.Redirect("~/ErrorPages/Unauthorised");
     }
     else
     {
         if (!IsPostBack)
         {
             poNumber     = Convert.ToInt32(Session["PONumber"]);
             supplierCode = Session["SupplierCode"].ToString();
             string status      = Session["Status"].ToString();
             string orderedDate = Session["OrderedDate"].ToString();
             string ordersupply = Session["DateSupply"].ToString();
             lblPONumber.Text     = poNumber.ToString();
             lblSupplierCode.Text = supplierCode;
             lblStatus.Text       = status;
             lblDateofOrder.Text  = orderedDate;
             lblDateSupply.Text   = ordersupply;
             orderDetailslist     = Iod.FindOrderDetailByPONumber(poNumber);
             List <Stationery>         stationerylist         = iss.FindAllStationery();
             List <SupplierStationery> supplierstationerylist = isps.FindStationeryDetailOfSupplier(supplierCode);
             var query = from odl in orderDetailslist
                         join sta in stationerylist on odl.ItemCode equals sta.ItemCode
                         join sp in supplierstationerylist on odl.ItemCode equals sp.ItemCode
                         select new { odl.ItemCode, sta.Description, odl.Quantity, sp.UnitPrice, odl.Remark };
             if (query.Count() == 0)
             {
                 PanelOrderDetail.Visible = false;
                 lblMessage1.Text         = "Nothing in this order!";
                 Panelcheck1.Visible      = true;
             }
             else
             {
                 Panelcheck1.Visible      = false;
                 PanelOrderDetail.Visible = true;
             }
             gvOrderDetails.DataSource = query;
             gvOrderDetails.DataBind();
             double sum = 0;
             for (int i = 0; i < query.Count(); i++)
             {
                 sum = sum + query.ElementAt(i).Quantity *query.ElementAt(i).UnitPrice;
             }
             lblTotalAmount.Text = sum.ToString();
         }
     }
 }
        //to generete graph by click btn
        protected void btnGenerate_Click(object sender, EventArgs e)
        {
            supplierCode1 = ddlSupplier1.SelectedItem.Text;
            supplierCode2 = ddlSupplier2.SelectedItem.Text;
            category      = ddlCategory.SelectedItem.Text;
            categoryId    = ics.FindCategoryByFullName(category).CategoryId;
            startYear     = Convert.ToInt32(ddlStartYear.SelectedItem.Text);
            startMonth    = Convert.ToInt32(ddlStartMonth.SelectedItem.Text);
            endYear       = Convert.ToInt32(ddlEndYear.SelectedItem.Text);
            endMonth      = Convert.ToInt32(ddlEndMonth.SelectedItem.Text);


            if (supplierCode1 == supplierCode2)
            {
                lblSupplierError.Text = "This will only display " + supplierCode1 + "'s data.";
                supplierCode2         = "None";
            }
            else
            {
                lblSupplierError.Text = "";
            }
            string st = startYear.ToString() + "/" + startMonth.ToString() + "/01";
            string ed = endYear.ToString() + "/" + endMonth.ToString() + "/01";

            dts = Convert.ToDateTime(st);
            dte = Convert.ToDateTime(ed);
            if (DateTime.Compare(dts, dte) > 0)
            {
                lblDateError.Text       = "End date can not before start date, please choose again!";
                PanelOrderTrend.Visible = false;
            }
            else
            {
                PanelOrderTrend.Visible = true;
                ordertrendlist1.Clear();
                ordertrendlist2.Clear();

                //identify month amount
                lblDateError.Text = "";
                TimeSpan ts          = dte - dts;
                double   days        = ts.Days;
                int      monthamount = (int)Math.Floor((days + 2) / 30);

                //1. supplier1 data
                for (int k = 0; k < monthamount + 1; k++)
                {
                    DateTime     dts11 = dts.AddDays(30 * k);
                    DateTime     dts12 = dts.AddDays(30 * (k + 1));
                    List <Order> o1    = context.Orders.Where(x => x.DateOrdered.CompareTo(dts11) >= 0 && x.DateOrdered.CompareTo(dts12) <= 0 && x.SupplierCode == supplierCode1).ToList <Order>();
                    int          sum1  = 0;
                    for (int i = 0; i < o1.Count(); i++)
                    {
                        List <OrderDetail> od1 = iod.FindOrderDetailByPONumber(o1.ElementAt(i).PoNumber);
                        for (int j = 0; j < od1.Count(); j++)
                        {
                            if (iss.FindStationeryById(od1.ElementAt(j).ItemCode).CategoryId == categoryId)
                            {
                                sum1 = sum1 + od1.ElementAt(j).Quantity;
                            }
                        }
                    }
                    OrderTrend ot1 = new OrderTrend();
                    if (startMonth + k > 12)
                    {
                        DateTime d11 = new DateTime(startYear + 1, startMonth + k - 12, 1);
                        ot1.Month = string.Format("{0:MMM yyyy}", d11);
                    }
                    else
                    {
                        DateTime d10 = new DateTime(startYear, startMonth + k, 1);
                        ot1.Month = string.Format("{0:MMM yyyy}", d10);
                    }
                    ot1.Quantity = sum1;
                    ordertrendlist1.Add(ot1);
                }

                //2. supplier2 data
                for (int k = 0; k < monthamount + 1; k++)
                {
                    DateTime     dts21 = dts.AddDays(30 * k);
                    DateTime     dts22 = dts.AddDays(30 * (k + 1));
                    List <Order> o2    = context.Orders.Where(x => x.DateOrdered.CompareTo(dts21) >= 0 && x.DateOrdered.CompareTo(dts22) <= 0 && x.SupplierCode == supplierCode2).ToList <Order>();
                    int          sum2  = 0;
                    for (int i = 0; i < o2.Count(); i++)
                    {
                        List <OrderDetail> od2 = iod.FindOrderDetailByPONumber(o2.ElementAt(i).PoNumber);
                        for (int j = 0; j < od2.Count(); j++)
                        {
                            if (iss.FindStationeryById(od2.ElementAt(j).ItemCode).CategoryId == categoryId)
                            {
                                sum2 = sum2 + od2.ElementAt(j).Quantity;
                            }
                        }
                    }
                    CompareOrderTrend ot2 = new CompareOrderTrend();
                    if (startMonth + k > 12)
                    {
                        DateTime d21 = new DateTime(startYear + 1, startMonth + k - 12, 1);
                        ot2.Month = string.Format("{0:MMM yyyy}", d21);
                    }
                    else
                    {
                        DateTime d20 = new DateTime(startYear, startMonth + k, 1);
                        ot2.Month = string.Format("{0:MMM yyyy}", d20);
                    }
                    ot2.CompareQuantity = sum2;
                    ordertrendlist2.Add(ot2);
                }


                //get graphs
                //1. table
                lblTableTiltle.Text = "Order Trend Table";
                var query = from otl1 in ordertrendlist1
                            join otl2 in ordertrendlist2 on otl1.Month equals otl2.Month
                            select new { otl1.Month, otl1.Quantity, otl2.CompareQuantity };
                gvTable.Columns[1].HeaderText = supplierCode1 + "'s Quantity";
                gvTable.Columns[2].HeaderText = supplierCode2 + "'s Quantity";
                gvTable.DataSource            = query;
                gvTable.DataBind();

                //2. bar chart
                lblChartTitle.Text = "Order Trend Chart";
                Chart1.Series["Series1"].XValueMember       = "Month";
                Chart1.Series["Series1"].YValueMembers      = "Quantity";
                Chart1.Series["Series2"].XValueMember       = "Month";
                Chart1.Series["Series2"].YValueMembers      = "CompareQuantity";
                Chart1.ChartAreas["ChartArea1"].AxisX.Title = "Year-Month";
                Chart1.ChartAreas["ChartArea1"].AxisY.Title = "Total Item Amount";
                Chart1.Series["Series1"].Name = supplierCode1;
                Chart1.Series["Series2"].Name = supplierCode2;
                Chart1.DataSource             = query;
                Chart1.DataBind();
            }
        }