// GET: /Reconciliation/Delete/<id>
        public ActionResult Delete(
            Int32?ReconciliationID
            )
        {
            if (
                ReconciliationID == null
                )
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            dtInvoice = Reconciliation_InvoiceData.SelectAll();

            Reconciliation Reconciliation = new Reconciliation();

            Reconciliation.ReconciliationID = System.Convert.ToInt32(ReconciliationID);
            Reconciliation         = ReconciliationData.Select_Record(Reconciliation);
            Reconciliation.Invoice = new Invoice()
            {
                InvoiceID   = (Int32)Reconciliation.InvoiceID
                , InvoiceNo = (from DataRow rowInvoice in dtInvoice.Rows
                               where Reconciliation.InvoiceID == (int)rowInvoice["InvoiceID"]
                               select(String) rowInvoice["InvoiceNo"]).FirstOrDefault()
            };

            if (Reconciliation == null)
            {
                return(HttpNotFound());
            }
            return(View(Reconciliation));
        }
        public ActionResult Edit(Reconciliation Reconciliation)
        {
            Reconciliation oReconciliation = new Reconciliation();

            oReconciliation.ReconciliationID = System.Convert.ToInt32(Reconciliation.ReconciliationID);
            oReconciliation = ReconciliationData.Select_Record(Reconciliation);

            if (ModelState.IsValid)
            {
                bool bSucess = false;
                bSucess = ReconciliationData.Update(oReconciliation, Reconciliation);
                if (bSucess == true)
                {
                    return(RedirectToAction("Index"));
                }
                else
                {
                    ModelState.AddModelError("", "Can Not Update");
                }
            }
            // ComboBox
            ViewData["InvoiceID"] = new SelectList(Reconciliation_InvoiceData.List(), "InvoiceID", "InvoiceNo", Reconciliation.InvoiceID);

            return(View(Reconciliation));
        }
        // GET: /Reconciliation/Edit/<id>
        public ActionResult Edit(
            Int32?ReconciliationID
            )
        {
            if (
                ReconciliationID == null
                )
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            Reconciliation Reconciliation = new Reconciliation();

            Reconciliation.ReconciliationID = System.Convert.ToInt32(ReconciliationID);
            Reconciliation = ReconciliationData.Select_Record(Reconciliation);

            if (Reconciliation == null)
            {
                return(HttpNotFound());
            }
            // ComboBox
            ViewData["InvoiceID"] = new SelectList(Reconciliation_InvoiceData.List(), "InvoiceID", "InvoiceNo", Reconciliation.InvoiceID);

            return(View(Reconciliation));
        }
        public ActionResult Create([Bind(Include =
                                             "InvoiceID"
                                             + "," + "PaymentDate"
                                             + "," + "PaymentAmount"
                                             + "," + "TDSAmount"
                                             + "," + "Remarks"
                                         )] Reconciliation Reconciliation)
        {
            if (ModelState.IsValid)
            {
                bool bSucess = false;
                bSucess = ReconciliationData.Add(Reconciliation);
                if (bSucess == true)
                {
                    return(RedirectToAction("Index"));
                }
                else
                {
                    ModelState.AddModelError("", "Can Not Insert");
                }
            }
            // ComboBox
            ViewData["InvoiceID"] = new SelectList(Reconciliation_InvoiceData.List(), "InvoiceID", "InvoiceNo", Reconciliation.InvoiceID);

            return(View(Reconciliation));
        }
        // GET: /Reconciliation/Create
        public ActionResult Create()
        {
            // ComboBox
            ViewData["InvoiceID"] = new SelectList(Reconciliation_InvoiceData.List(), "InvoiceID", "InvoiceNo");

            return(View());
        }
        // GET: /Reconciliation/
        public ActionResult Index(string sortOrder,
                                  String SearchField,
                                  String SearchCondition,
                                  String SearchText,
                                  String Export,
                                  int?PageSize,
                                  int?page,
                                  string command)
        {
            if (command == "Show All")
            {
                SearchField                = null;
                SearchCondition            = null;
                SearchText                 = null;
                Session["SearchField"]     = null;
                Session["SearchCondition"] = null;
                Session["SearchText"]      = null;
            }
            else if (command == "Add New Record")
            {
                return(RedirectToAction("Create"));
            }
            else if (command == "Export")
            {
                Session["Export"] = Export;
            }
            else if (command == "Search" | command == "Page Size")
            {
                if (!string.IsNullOrEmpty(SearchText))
                {
                    Session["SearchField"]     = SearchField;
                    Session["SearchCondition"] = SearchCondition;
                    Session["SearchText"]      = SearchText;
                }
            }
            if (command == "Page Size")
            {
                Session["PageSize"] = PageSize;
            }

            ViewData["SearchFields"]     = GetFields((Session["SearchField"] == null ? "Reconciliation I D" : Convert.ToString(Session["SearchField"])));
            ViewData["SearchConditions"] = Library.GetConditions((Session["SearchCondition"] == null ? "Contains" : Convert.ToString(Session["SearchCondition"])));
            ViewData["SearchText"]       = Session["SearchText"];
            ViewData["Exports"]          = Library.GetExports((Session["Export"] == null ? "Pdf" : Convert.ToString(Session["Export"])));
            ViewData["PageSizes"]        = Library.GetPageSizes();

            ViewData["CurrentSort"] = sortOrder;
            ViewData["ReconciliationIDSortParm"] = sortOrder == "ReconciliationID_asc" ? "ReconciliationID_desc" : "ReconciliationID_asc";
            ViewData["InvoiceIDSortParm"]        = sortOrder == "InvoiceID_asc" ? "InvoiceID_desc" : "InvoiceID_asc";
            ViewData["PaymentDateSortParm"]      = sortOrder == "PaymentDate_asc" ? "PaymentDate_desc" : "PaymentDate_asc";
            ViewData["PaymentAmountSortParm"]    = sortOrder == "PaymentAmount_asc" ? "PaymentAmount_desc" : "PaymentAmount_asc";
            ViewData["TDSAmountSortParm"]        = sortOrder == "TDSAmount_asc" ? "TDSAmount_desc" : "TDSAmount_asc";
            ViewData["RemarksSortParm"]          = sortOrder == "Remarks_asc" ? "Remarks_desc" : "Remarks_asc";

            dtReconciliation = ReconciliationData.SelectAll();
            dtInvoice        = Reconciliation_InvoiceData.SelectAll();

            try
            {
                if (!string.IsNullOrEmpty(Convert.ToString(Session["SearchField"])) & !string.IsNullOrEmpty(Convert.ToString(Session["SearchCondition"])) & !string.IsNullOrEmpty(Convert.ToString(Session["SearchText"])))
                {
                    dtReconciliation = ReconciliationData.Search(Convert.ToString(Session["SearchField"]), Convert.ToString(Session["SearchCondition"]), Convert.ToString(Session["SearchText"]));
                }
            }
            catch { }

            var Query = from rowReconciliation in dtReconciliation.AsEnumerable()
                        join rowInvoice in dtInvoice.AsEnumerable() on rowReconciliation.Field <Int32>("InvoiceID") equals rowInvoice.Field <Int32>("InvoiceID")
                        select new Reconciliation()
            {
                ReconciliationID = rowReconciliation.Field <Int32>("ReconciliationID")
                ,
                Invoice = new Invoice()
                {
                    InvoiceID   = rowInvoice.Field <Int32>("InvoiceID")
                    , InvoiceNo = rowInvoice.Field <String>("InvoiceNo")
                }
                , PaymentDate   = rowReconciliation.Field <DateTime>("PaymentDate")
                , PaymentAmount = rowReconciliation.Field <Decimal>("PaymentAmount")
                , TDSAmount     = rowReconciliation.Field <Decimal>("TDSAmount")
                , Remarks       = rowReconciliation.Field <String>("Remarks")
            };

            switch (sortOrder)
            {
            case "ReconciliationID_desc":
                Query = Query.OrderByDescending(s => s.ReconciliationID);
                break;

            case "ReconciliationID_asc":
                Query = Query.OrderBy(s => s.ReconciliationID);
                break;

            case "InvoiceID_desc":
                Query = Query.OrderByDescending(s => s.Invoice.InvoiceNo);
                break;

            case "InvoiceID_asc":
                Query = Query.OrderBy(s => s.Invoice.InvoiceNo);
                break;

            case "PaymentDate_desc":
                Query = Query.OrderByDescending(s => s.PaymentDate);
                break;

            case "PaymentDate_asc":
                Query = Query.OrderBy(s => s.PaymentDate);
                break;

            case "PaymentAmount_desc":
                Query = Query.OrderByDescending(s => s.PaymentAmount);
                break;

            case "PaymentAmount_asc":
                Query = Query.OrderBy(s => s.PaymentAmount);
                break;

            case "TDSAmount_desc":
                Query = Query.OrderByDescending(s => s.TDSAmount);
                break;

            case "TDSAmount_asc":
                Query = Query.OrderBy(s => s.TDSAmount);
                break;

            case "Remarks_desc":
                Query = Query.OrderByDescending(s => s.Remarks);
                break;

            case "Remarks_asc":
                Query = Query.OrderBy(s => s.Remarks);
                break;

            default:      // Name ascending
                Query = Query.OrderBy(s => s.ReconciliationID);
                break;
            }

            if (command == "Export")
            {
                GridView  gv = new GridView();
                DataTable dt = new DataTable();
                dt.Columns.Add("Reconciliation I D", typeof(string));
                dt.Columns.Add("Invoice I D", typeof(string));
                dt.Columns.Add("Payment Date", typeof(string));
                dt.Columns.Add("Payment Amount", typeof(string));
                dt.Columns.Add("T D S Amount", typeof(string));
                dt.Columns.Add("Remarks", typeof(string));
                foreach (var item in Query)
                {
                    dt.Rows.Add(
                        item.ReconciliationID
                        , item.Invoice.InvoiceNo
                        , item.PaymentDate
                        , item.PaymentAmount
                        , item.TDSAmount
                        , item.Remarks
                        );
                }
                gv.DataSource = dt;
                gv.DataBind();
                ExportData(Export, gv, dt);
            }

            int pageNumber = (page ?? 1);
            int?pageSZ     = (Convert.ToInt32(Session["PageSize"]) == 0 ? 5 : Convert.ToInt32(Session["PageSize"]));

            return(View(Query.ToPagedList(pageNumber, (pageSZ ?? 5))));
        }