//------------------------------------------------------------------------------------ #endregion //------------------------------------------------------------------------------------ #region Buttons //------------------------------------------------------------------------------------ protected void btnExport_Click(object sender, EventArgs e) { int importedInvoiceId = 0; int.TryParse(this.cboFile.SelectedValue, out importedInvoiceId); int businessTypeId = 0; int.TryParse(cboBusinessType.SelectedValue, out businessTypeId); List <int> selectedOrderIDs = new List <int>(); selectedOrderIDs = this.GetOrderIdsForExport(); List <int> importedInvoiceItemIDsToExclude = new List <int>(); importedInvoiceItemIDsToExclude = this.GetImportedInvoiceItemIDsToExclude(); if (selectedOrderIDs.Count > 0) { Facade.ImportedInvoice facimportedInvoice = new Facade.ImportedInvoice(); DataSet ds = facimportedInvoice.GetOrdersForMatchingExport(importedInvoiceId, businessTypeId, selectedOrderIDs, importedInvoiceItemIDsToExclude); Facade.ExtraType facExtraTypes = new Orchestrator.Facade.ExtraType(); List <Entities.ExtraType> extraTypes = facExtraTypes.GetForIsEnabled(true); foreach (Entities.ExtraType et in extraTypes) { ds.Tables[0].Columns.Add("[" + et.Description + "]", typeof(decimal)); } // Extra data foreach (DataRow dr in ds.Tables[0].Rows) { DataRow[] extraRows = ds.Tables[1].Select("OrderID = " + dr["OrderID"]); foreach (DataRow extra in extraRows) { if (dr.Table.Columns.Contains("[" + extra["ExtraType"] + "]")) { dr["[" + extra["ExtraType"] + "]"] = extra["ExtraAmount"]; } } } Session["__ExportDS"] = ds.Tables[0]; Response.Redirect("../reports/csvexport.aspx?filename=InvoiceMatchingExport.CSV"); } else { this.lblStatus.Text = "0 Orders could be exported."; } }
//------------------------------------------------------------------------------------ private void RebindGrid() { int importedInvoiceId = 0; int.TryParse(this.cboFile.SelectedValue, out importedInvoiceId); int businessTypeId = 0; int.TryParse(cboBusinessType.SelectedValue, out businessTypeId); Func <IEnumerable <DataRow>, decimal> getImportedItemDifferenceAmount = drs => drs.Any(dr => dr.Field <int>("ImportedInvoiceItemID") == -1) ? drs.First(dr => dr.Field <int>("ImportedInvoiceItemID") == -1).Field <decimal>("DifferenceAmount") : 0m; Func <IEnumerable <DataRow>, decimal> getImportedItemDifferenceWeightAmount = drs => drs.Any(dr => dr.Field <int>("ImportedInvoiceItemID") == -1) ? drs.First(dr => dr.Field <int>("ImportedInvoiceItemID") == -1).Field <decimal>("DifferenceWeightAmount") : 0m; Func <IEnumerable <DataRow>, string> getOrderStatus = drs => drs.Any(dr => dr.Field <int>("ImportedInvoiceItemID") == -1) ? drs.First(dr => dr.Field <int>("ImportedInvoiceItemID") == -1).Field <string>("OrderStatus") : String.Empty; Func <IEnumerable <DataRow>, string> getLoadNumber = drs => drs.Any(dr => dr.Field <int>("ImportedInvoiceItemID") == -1) ? drs.First(dr => dr.Field <int>("ImportedInvoiceItemID") == -1).Field <string>("Ref2") : String.Empty; Func <IEnumerable <DataRow>, string> getDocketNumber = drs => drs.Any(dr => dr.Field <int>("ImportedInvoiceItemID") == -1) ? drs.First(dr => dr.Field <int>("ImportedInvoiceItemID") == -1).Field <string>("Ref1") : String.Empty; Func <IEnumerable <DataRow>, string> getShipmentNumber = drs => drs.Any(dr => dr.Field <int>("ImportedInvoiceItemID") == -1) ? drs.First(dr => dr.Field <int>("ImportedInvoiceItemID") == -1).Field <string>("Ref3") : String.Empty; Func <IEnumerable <DataRow>, bool> getCanBeInvoiced = drs => drs.Any(dr => dr.Field <int>("ImportedInvoiceItemID") == -1 && dr.Field <int?>("PreinvoiceId") == null && dr.Field <int?>("InvoiceId") == null) ? true : false; Facade.ImportedInvoice facimportedInvoice = new Facade.ImportedInvoice(); DataSet ds = facimportedInvoice.GetImportedInvoiceItems(importedInvoiceId, businessTypeId); if (ds != null) { var queryInvoiceItems = ds.Tables[0].Rows.Cast <DataRow>().AsEnumerable(); var resultRows = from row in queryInvoiceItems where row["OrderID"] != System.DBNull.Value group row by row["OrderID"] into g select new ResultType() { ImportedInvoiceItemID = -1, // we don't need to set this as it is not used for matched orders OrderID = Convert.ToInt32(g.Key), OrderStatus = getOrderStatus(g), Ref1 = getDocketNumber(g), Ref2 = getLoadNumber(g), Ref3 = getShipmentNumber(g), CanBeInvoiced = getCanBeInvoiced(g), DifferenceAmount = getImportedItemDifferenceAmount(g), DifferenceWeightAmount = getImportedItemDifferenceWeightAmount(g), OrderCount = g.Count(), Items = g }; var unMatched = from row in queryInvoiceItems where row["OrderID"] == System.DBNull.Value group row by row["ImportedInvoiceItemID"] into g select new ResultType() { ImportedInvoiceItemID = g.First().Field <int>("ImportedInvoiceItemID"), OrderID = -1, OrderStatus = String.Empty, Ref1 = g.First().Field <string>("Ref1"), Ref2 = g.First().Field <string>("Ref2"), Ref3 = g.First().Field <string>("Ref3"), CanBeInvoiced = false, DifferenceAmount = 0m, DifferenceWeightAmount = 0m, OrderCount = 1, Items = g }; resultRows = resultRows.Concat(unMatched); resultRows = resultRows.OrderBy(res => res.Ref2).ThenBy(res => res.Ref1); lvPreInvoiceItems.DataSource = resultRows; lvPreInvoiceItems.DataBind(); var queryAdditionalItems = ds.Tables[1].Rows.Cast <DataRow>().AsEnumerable(); lvAdditional.DataSource = queryAdditionalItems; lvAdditional.DataBind(); } }