private void UploadFile()
        {
            string fileName = Path.GetFileName(fuReciept.PostedFile.FileName);

            try
            {
                if (fileName != String.Empty)
                {
                    ELRAttachment attachment = new ELRAttachment();
                    attachment.FilePath = "~/ELUploads/" + fileName;
                    fuReciept.PostedFile.SaveAs(Server.MapPath("~/ELUploads/") + fileName);
                    //Response.Redirect(Request.Url.AbsoluteUri);
                    _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.ELRAttachments.Add(attachment);

                    grvAttachments.DataSource = _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.ELRAttachments;
                    grvAttachments.DataBind();
                }
                else
                {
                    Master.ShowMessage(new AppMessage("Please select file ", Chai.WorkflowManagment.Enums.RMessageType.Error));
                }
            }
            catch (HttpException ex)
            {
                Master.ShowMessage(new AppMessage("Unable to upload the file,The file is to big or The internet is too slow " + ex.InnerException.Message, Chai.WorkflowManagment.Enums.RMessageType.Error));
            }
        }
        protected void dgExpenseLiquidationDetail_ItemCommand(object source, DataGridCommandEventArgs e)
        {
            if (e.CommandName == "AddNew")
            {
                decimal totalActExp = 0;
                try
                {
                    ExpenseLiquidationRequestDetail elrd = new ExpenseLiquidationRequestDetail();
                    elrd.ExpenseLiquidationRequest = _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest;
                    DropDownList ddlFAccountDescription = e.Item.FindControl("ddlFAccountDescription") as DropDownList;
                    elrd.ItemAccount = _presenter.GetItemAccount(Convert.ToInt32(ddlFAccountDescription.SelectedValue));
                    DropDownList ddlExpenseType = e.Item.FindControl("ddlExpenseType") as DropDownList;
                    elrd.ExpenseType = _presenter.GetExpenseType(Convert.ToInt32(ddlExpenseType.SelectedValue));
                    DropDownList ddlFProject = e.Item.FindControl("ddlFProject") as DropDownList;
                    elrd.Project = _presenter.GetProject(Convert.ToInt32(ddlFProject.SelectedValue));
                    DropDownList ddlFGrant = e.Item.FindControl("ddlFGrant") as DropDownList;
                    elrd.Grant = _presenter.GetGrant(Convert.ToInt32(ddlFGrant.SelectedValue));
                    TextBox txtFAmount = e.Item.FindControl("txtFAmount") as TextBox;
                    elrd.AmountAdvanced = Convert.ToDecimal(txtFAmount.Text);
                    TextBox txtFActualExpenditure = e.Item.FindControl("txtFActualExpenditure") as TextBox;
                    elrd.ActualExpenditure = Convert.ToDecimal(txtFActualExpenditure.Text);
                    TextBox txtFVariance = e.Item.FindControl("txtFVariance") as TextBox;
                    txtFVariance.Text = (elrd.AmountAdvanced - elrd.ActualExpenditure).ToString();
                    elrd.Variance     = Convert.ToDecimal(txtFVariance.Text);

                    //Add Checklists for attachments if available
                    foreach (ItemAccountChecklist checklist in elrd.ItemAccount.ItemAccountChecklists)
                    {
                        ELRAttachment attachment = new ELRAttachment();
                        attachment.ExpenseLiquidationRequestDetail = elrd;
                        attachment.ItemAccountChecklists.Add(checklist);
                        elrd.ELRAttachments.Add(attachment);
                    }
                    _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.ExpenseLiquidationRequestDetails.Add(elrd);

                    foreach (ExpenseLiquidationRequestDetail eld in _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.ExpenseLiquidationRequestDetails)
                    {
                        totalActExp += eld.ActualExpenditure;
                    }

                    _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.TotalActualExpenditure = totalActExp;
                    txtTotActual.Text = (_presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.TotalActualExpenditure).ToString();

                    BindAttachments();

                    dgExpenseLiquidationDetail.EditItemIndex = -1;
                    BindExpenseLiquidationDetailGrid();

                    Master.ShowMessage(new AppMessage("Expense Liquidation Detail Successfully Added!", RMessageType.Info));
                }
                catch (Exception ex)
                {
                    Master.ShowMessage(new AppMessage("Error: Unable to Add Expense Liquidation Detail " + ex.Message, RMessageType.Error));
                    ExceptionUtility.LogException(ex, ex.Source);
                    ExceptionUtility.NotifySystemOps(ex, _presenter.CurrentUser().FullName);
                }
            }
        }
        protected void grvAttachments_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (_presenter.CurrentPaymentReimbursementRequest != null)
            {
                int           attachmentId = Convert.ToInt32(grvAttachments.SelectedDataKey.Value);
                ELRAttachment attachment   = _presenter.GetAttachment(attachmentId);

                string Filename = attachment.FilePath;



                System.Web.HttpContext context = System.Web.HttpContext.Current;
                context.Response.Clear();
                context.Response.ClearHeaders();
                context.Response.ClearContent();
                //context.Response.AppendHeader("content-length", FileData.Length.ToString());
                context.Response.ContentType = GetMimeTypeByFileName(Filename);
                context.Response.AppendHeader("content-disposition", "attachment; filename=" + Filename);
                // context.Response.BinaryWrite(FileData);

                context.ApplicationInstance.CompleteRequest();
            }
        }
        protected void dgExpenseLiquidationDetail_UpdateCommand(object source, DataGridCommandEventArgs e)
        {
            int eldId = (int)dgExpenseLiquidationDetail.DataKeys[e.Item.ItemIndex];
            ExpenseLiquidationRequestDetail elrd;
            decimal totalActExp = 0;

            if (eldId > 0)
            {
                elrd = _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.GetExpenseLiquidationRequestDetail(eldId);
            }
            else
            {
                elrd = _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.ExpenseLiquidationRequestDetails[e.Item.ItemIndex];
            }

            try
            {
                DropDownList ddlAccountDescription = e.Item.FindControl("ddlAccountDescription") as DropDownList;
                elrd.ItemAccount = _presenter.GetItemAccount(Convert.ToInt32(ddlAccountDescription.SelectedValue));
                DropDownList ddlProject = e.Item.FindControl("ddlProject") as DropDownList;
                elrd.Project = _presenter.GetProject(Convert.ToInt32(ddlProject.SelectedValue));
                DropDownList ddlGrant = e.Item.FindControl("ddlGrant") as DropDownList;
                elrd.Grant = _presenter.GetGrant(Convert.ToInt32(ddlGrant.SelectedValue));
                DropDownList ddlEdtExpenseType = e.Item.FindControl("ddlEdtExpenseType") as DropDownList;
                elrd.ExpenseType = _presenter.GetExpenseType(Convert.ToInt32(ddlEdtExpenseType.SelectedValue));
                TextBox txtAmount = e.Item.FindControl("txtAmount") as TextBox;
                elrd.AmountAdvanced = Convert.ToDecimal(txtAmount.Text);
                TextBox txtActualExpenditure = e.Item.FindControl("txtActualExpenditure") as TextBox;
                elrd.ActualExpenditure = Convert.ToDecimal(txtActualExpenditure.Text);
                TextBox txtVariance = e.Item.FindControl("txtVariance") as TextBox;
                txtVariance.Text = (elrd.AmountAdvanced - elrd.ActualExpenditure).ToString();
                elrd.Variance    = Convert.ToDecimal(txtVariance.Text);

                foreach (ExpenseLiquidationRequestDetail eld in _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.ExpenseLiquidationRequestDetails)
                {
                    totalActExp += eld.ActualExpenditure;
                }

                _presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.TotalActualExpenditure = totalActExp;
                txtTotActual.Text = (_presenter.CurrentTravelAdvanceRequest.ExpenseLiquidationRequest.TotalActualExpenditure).ToString();

                //Add Checklists for attachments if available but clear all attachments first because this is update
                elrd.ELRAttachments = new List <ELRAttachment>();
                foreach (ItemAccountChecklist checklist in elrd.ItemAccount.ItemAccountChecklists)
                {
                    ELRAttachment attachment = new ELRAttachment();
                    attachment.ExpenseLiquidationRequestDetail = elrd;
                    attachment.ItemAccountChecklists.Add(checklist);
                    elrd.ELRAttachments.Add(attachment);
                }
                BindAttachments();

                dgExpenseLiquidationDetail.EditItemIndex = -1;
                BindExpenseLiquidationDetailGrid();
                Master.ShowMessage(new AppMessage("Liquidation Detail Successfully Updated", RMessageType.Info));
            }
            catch (Exception ex)
            {
                Master.ShowMessage(new AppMessage("Error: Unable to Update liquidation detail. " + ex.Message, RMessageType.Error));
                ExceptionUtility.LogException(ex, ex.Source);
                ExceptionUtility.NotifySystemOps(ex, _presenter.CurrentUser().FullName);
            }
        }