public ActionResult LoadPrintStocktaking(string warehouse, string location) { string strErrText; //读取公司名称 OrganizationSystem organ = new OrganizationSystem(); List<Organization> listOrgan = organ.LoadOrganizations(LoginAccountId, LoginStaffName, out strErrText); if (listOrgan == null) { throw new Exception(strErrText); } Organization root = listOrgan.Find(delegate(Organization o) { return o.ParentId == 0; }); //读取库存数据 StockSystem stock = new StockSystem(); List<Stock> listStock = stock.LoadStocktakingByConditions(warehouse, location, LoginAccountId, LoginStaffName, out strErrText); if (listStock == null) { throw new Exception(strErrText); } //生成HTML int nTotalPackages = 0; decimal decTotalTunnages = 0; decimal decTotalPiles = 0; decimal decTotalTenThousands = 0; StringBuilder sb = new StringBuilder(); //标题 sb.Append("<table border='0' cellpadding='0' cellspacing='0' style='margin-left: auto; margin-right: auto; text-align: left;'>"); sb.Append("<tr>"); sb.Append("<td align='center' style='font-size: 20pt; font-weight: bold;'>"); sb.Append(root.Name); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td align='center' style='font-size: 16pt;'>"); sb.Append(InnoSoft.LS.Resources.Titles.Stocktaking); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td>"); //表头 sb.Append("<table id='stocktaking' border='0' cellpadding='0' cellspacing='0'>"); sb.Append("<tr>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 60px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.Warehouse); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 40px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.Location); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 120px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.GoodsNo); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 150px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.GoodsName); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 80px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.Specification); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 50px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.GrammeWeight); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 50px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.Grade); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 200px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.CustomerName); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 60px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.Pieces); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 80px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.Tunnages); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; width: 80px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.Piles); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; width: 80px;'>"); sb.Append(InnoSoft.LS.Resources.Labels.TenThousands); sb.Append("</td>"); sb.Append("</tr>"); //生成仓库数据 //var grpWarehouses = from s in listStock // group s by s.Warehouse; var grpWarehouses = listStock.GroupBy(s => s.Warehouse).OrderBy(s => s.Key); foreach (var grpWarehouse in grpWarehouses) { string strWarehouse = grpWarehouse.Key; int nWarehouseTotalPackages = grpWarehouse.Sum(s => s.Packages); decimal decWarehouseTotalTunnages = grpWarehouse.Sum(s => s.Tunnages); decimal decWarehouseTotalPiles = grpWarehouse.Sum(s => s.Piles); decimal decWarehouseTotalTenThousands = grpWarehouse.Sum(s => s.TenThousands); nTotalPackages += nWarehouseTotalPackages; decTotalTunnages += decWarehouseTotalTunnages; decTotalPiles += decWarehouseTotalPiles; decTotalTenThousands += decWarehouseTotalTenThousands; sb.Append("<tr>"); sb.Append("<td rowspan='").Append((from s in listStock where s.Warehouse == strWarehouse group s by s.Location).Count() + (from s in listStock where s.Warehouse == strWarehouse select s.CustomerId).Count() + 1).Append("' align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(strWarehouse); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(nWarehouseTotalPackages.ToString()); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(decWarehouseTotalTunnages.ToString("#0.######")); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(decWarehouseTotalPiles.ToString("#0.######")); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-right: 1px solid black;'>"); sb.Append(decWarehouseTotalTenThousands.ToString("#0.######")); sb.Append("</td>"); sb.Append("</tr>"); //生成货位数据 //var grpLocations = from s in listStock // where s.Warehouse == strWarehouse // group s by s.Location; var grpLocations = grpWarehouse.GroupBy(s => s.Location).OrderBy(s => s.Key); foreach (var grpLocation in grpLocations) { string strLocation = grpLocation.Key; int nLocationTotalPackages = grpLocation.Sum(s => s.Packages); decimal decLocationTotalTunnages = grpLocation.Sum(s => s.Tunnages); decimal decLocationTotalPiles = grpLocation.Sum(s => s.Piles); decimal decLocationTotalTenThousands = grpLocation.Sum(s => s.TenThousands); sb.Append("<tr>"); sb.Append("<td rowspan='").Append((from s in listStock where s.Warehouse == strWarehouse && s.Location == strLocation select s.CustomerId).Count() + 1).Append("' align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(strLocation); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(nLocationTotalPackages.ToString()); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(decLocationTotalTunnages.ToString("#0.######")); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(decLocationTotalPiles.ToString("#0.######")); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-right: 1px solid black;'>"); sb.Append(decLocationTotalTenThousands.ToString("#0.######")); sb.Append("</td>"); sb.Append("</tr>"); //生成货位明细数据 //var goods = from s in listStock // where s.Warehouse == strWarehouse && s.Location == strLocation // select new // { // s.GoodsNo, // s.GoodsName, // s.SpecModel, // s.GWeight, // s.Grade, // s.CustomerName, // s.Packages, // s.Tunnages // }; var goods = from s in grpLocation select new { s.GoodsNo, s.GoodsName, s.SpecModel, s.GWeight, s.Grade, s.CustomerName, s.Packages, s.Tunnages, s.Piles, s.TenThousands }; foreach (var g in goods) { sb.Append("<tr>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.GoodsNo); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.GoodsName); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.SpecModel); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.GWeight); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.Grade); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.CustomerName); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.Packages.ToString()); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.Tunnages.ToString("#0.######")); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black;'>"); sb.Append(g.Piles.ToString("#0.######")); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-right: 1px solid black;'>"); sb.Append(g.TenThousands.ToString("#0.######")); sb.Append("</td>"); sb.Append("</tr>"); } } } //合计 sb.Append("<tr>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(InnoSoft.LS.Resources.Labels.FinalTotal); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(" "); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(nTotalPackages.ToString()); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(decTotalTunnages.ToString("#0.######")); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(decTotalPiles.ToString("#0.######")); sb.Append("</td>"); sb.Append("<td align='center' valign='top' style='border-top: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black;'>"); sb.Append(decTotalTenThousands.ToString("#0.######")); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); return Content(sb.ToString()); }
public ActionResult ExportStocktaking() { //读取条件 var request = HttpContext.Request; string warehouse = request.QueryString["Warehouse"] ?? string.Empty; string location = request.QueryString["Location"] ?? string.Empty; //读取库存数据 string strErrText; StockSystem stock = new StockSystem(); List<Stock> listStock = stock.LoadStocktakingByConditions(warehouse, location, LoginAccountId, LoginStaffName, out strErrText); if (listStock == null) { throw new Exception(strErrText); } //生成GridView数据源 int nTotalPackages = 0; decimal decTotalTunnages = 0; decimal decTotalPiles = 0; decimal decTotalTenThousands = 0; List<Stock> listSource = new List<Stock>(); //var grpWarehouses = from s in listStock // group s by s.Warehouse; var grpWarehouses = listStock.GroupBy(s => s.Warehouse).OrderBy(s => s.Key); foreach (var grpWarehouse in grpWarehouses) { string strWarehouse = grpWarehouse.Key; int nWarehouseTotalPackages = grpWarehouse.Sum(s => s.Packages); decimal decWarehouseTotalTunnages = grpWarehouse.Sum(s => s.Tunnages); decimal decWarehouseTotalPiles = grpWarehouse.Sum(s => s.Piles); decimal decWarehouseTotalTenThousands = grpWarehouse.Sum(s => s.TenThousands); nTotalPackages += nWarehouseTotalPackages; decTotalTunnages += decWarehouseTotalTunnages; decTotalPiles += decWarehouseTotalPiles; decTotalTenThousands += decWarehouseTotalTenThousands; //生成货位数据 //var grpLocations = from s in listStock // where s.Warehouse == strWarehouse // group s by s.Location; var grpLocations = grpWarehouse.GroupBy(s => s.Location).OrderBy(s => s.Key); foreach (var grpLocation in grpLocations) { string strLocation = grpLocation.Key; int nLocationTotalPackages = grpLocation.Sum(s => s.Packages); decimal decLocationTotalTunnages = grpLocation.Sum(s => s.Tunnages); decimal decLocationTotalPiles = grpLocation.Sum(s => s.Piles); decimal decLocationTotalTenThousands = grpLocation.Sum(s => s.TenThousands); //生成货位明细数据 //var goods = from s in listStock // where s.Warehouse == strWarehouse && s.Location == strLocation // select new // { // s.GoodsNo, // s.GoodsName, // s.SpecModel, // s.GWeight, // s.Grade, // s.CustomerName, // s.Packages, // s.Tunnages // }; var goods = from s in grpLocation select new { s.GoodsNo, s.GoodsName, s.SpecModel, s.GWeight, s.Grade, s.CustomerName, s.Packages, s.Tunnages, s.Piles, s.TenThousands }; foreach (var g in goods) { Stock g2 = new Stock(); g2.Warehouse = strWarehouse; g2.Location = strLocation; g2.GoodsNo = g.GoodsNo; g2.GoodsName = g.GoodsName; g2.SpecModel = g.SpecModel; g2.GWeight = g.GWeight; g2.Grade = g.Grade; g2.CustomerName = g.CustomerName; g2.Packages = g.Packages; g2.Tunnages = g.Tunnages; g2.Piles = g.Piles; g2.TenThousands = g.TenThousands; listSource.Add(g2); } //货位小计 Stock l = new Stock(); l.Warehouse = strWarehouse; l.Location = strLocation; l.GoodsNo = InnoSoft.LS.Resources.Labels.Subtotal; l.Packages = nLocationTotalPackages; l.Tunnages = decLocationTotalTunnages; l.Piles = decLocationTotalPiles; l.TenThousands = decLocationTotalTenThousands; listSource.Add(l); } //仓库合计 Stock w = new Stock(); w.Warehouse = strWarehouse; w.Location = InnoSoft.LS.Resources.Labels.Total; w.Packages = nWarehouseTotalPackages; w.Tunnages = decWarehouseTotalTunnages; w.Piles = decWarehouseTotalPiles; w.TenThousands = decWarehouseTotalTenThousands; listSource.Add(w); } //总计 Stock t = new Stock(); t.Warehouse = InnoSoft.LS.Resources.Labels.FinalTotal; t.Packages = nTotalPackages; t.Tunnages = decTotalTunnages; t.Piles = decTotalPiles; t.TenThousands = decTotalTenThousands; listSource.Add(t); //生成GridView BoundField colWarehouse = new BoundField(); colWarehouse.HeaderText = InnoSoft.LS.Resources.Labels.Warehouse; colWarehouse.DataField = "Warehouse"; BoundField colLocation = new BoundField(); colLocation.HeaderText = InnoSoft.LS.Resources.Labels.Location; colLocation.DataField = "Location"; BoundField colGoodsNo = new BoundField(); colGoodsNo.HeaderText = InnoSoft.LS.Resources.Labels.GoodsNo; colGoodsNo.DataField = "GoodsNo"; BoundField colGoodsName = new BoundField(); colGoodsName.HeaderText = InnoSoft.LS.Resources.Labels.GoodsName; colGoodsName.DataField = "GoodsName"; BoundField colSpecification = new BoundField(); colSpecification.HeaderText = InnoSoft.LS.Resources.Labels.Specification; colSpecification.DataField = "SpecModel"; BoundField colGrammeWeight = new BoundField(); colGrammeWeight.HeaderText = InnoSoft.LS.Resources.Labels.GrammeWeight; colGrammeWeight.DataField = "GWeight"; BoundField colGrade = new BoundField(); colGrade.HeaderText = InnoSoft.LS.Resources.Labels.Grade; colGrade.DataField = "Grade"; BoundField colCustomerName = new BoundField(); colCustomerName.HeaderText = InnoSoft.LS.Resources.Labels.CustomerName; colCustomerName.DataField = "CustomerName"; BoundField colPieces = new BoundField(); colPieces.HeaderText = InnoSoft.LS.Resources.Labels.Pieces; colPieces.DataField = "Packages"; BoundField colTunnages = new BoundField(); colTunnages.HeaderText = InnoSoft.LS.Resources.Labels.Tunnages; colTunnages.DataField = "Tunnages"; BoundField colPiles = new BoundField(); colPiles.HeaderText = InnoSoft.LS.Resources.Labels.Piles; colPiles.DataField = "Piles"; BoundField colTenThousands = new BoundField(); colTenThousands.HeaderText = InnoSoft.LS.Resources.Labels.TenThousands; colTenThousands.DataField = "TenThousands"; var grid = new GridView(); grid.Columns.Add(colWarehouse); grid.Columns.Add(colLocation); grid.Columns.Add(colGoodsNo); grid.Columns.Add(colGoodsName); grid.Columns.Add(colSpecification); grid.Columns.Add(colGrammeWeight); grid.Columns.Add(colGrade); grid.Columns.Add(colCustomerName); grid.Columns.Add(colPieces); grid.Columns.Add(colTunnages); grid.Columns.Add(colPiles); grid.Columns.Add(colTenThousands); grid.AutoGenerateColumns = false; grid.DataSource = from s in listSource select new { Warehouse = s.Warehouse, Location = s.Location, GoodsNo = s.GoodsNo, GoodsName = s.GoodsName, SpecModel = s.SpecModel, GWeight = s.GWeight, Grade = s.Grade, CustomerName = s.CustomerName, Packages = s.Packages > 0 ? s.Packages.ToString() : string.Empty, Tunnages = s.Tunnages > 0 ? s.Tunnages.ToString("#0.######") : string.Empty, Piles = s.Piles > 0 ? s.Piles.ToString("#0.######") : string.Empty, TenThousands = s.TenThousands > 0 ? s.TenThousands.ToString("#0.######") : string.Empty }; grid.DataBind(); //导出GridView Response.ClearContent(); Response.Charset = InnoSoft.LS.Resources.Encoding.ExcelCharset; Response.ContentEncoding = System.Text.Encoding.GetEncoding(InnoSoft.LS.Resources.Encoding.ExcelContent); Response.ContentType = "application/ms-excel"; Response.Write("<meta http-equiv=Content-Type content=text/html charset=" + InnoSoft.LS.Resources.Encoding.ExcelCharset + ">"); Response.AddHeader("content-disposition", "attachment; filename=Stocktaking.xls"); StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); return View("PrintStocktaking"); }