Browse Source

打印

master
luanhui 8 years ago
parent
commit
663f562fd5
2 changed files with 256 additions and 3 deletions
  1. +2
    -3
      B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj
  2. +254
    -0
      B3QingDaoWanFu.Web/Pages/TypeIOCs/CarLoadingTypeIOC.cs

+ 2
- 3
B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj View File

@ -153,12 +153,11 @@
<Compile Include="Pages\B3QingDaoWanFu\Reports\ComprehensiveReport.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\TypeIOCs\CarLoadingTypeIOC.cs" />
<Compile Include="PluginClass.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Pages\TypeIOCs\" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<EmbeddedResource Include="Pages\B3QingDaoWanFu\Reports\ComprehensiveReport.xml" />
</ItemGroup>


+ 254
- 0
B3QingDaoWanFu.Web/Pages/TypeIOCs/CarLoadingTypeIOC.cs View File

@ -0,0 +1,254 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using BWP.B3Frameworks;
using BWP.B3Sale.BO;
using BWP.Web.Pages.B3Sale;
using BWP.Web.Pages.B3Sale.Bills.CarLoading_;
using Forks.Drawing;
using Forks.EnterpriseServices.DataForm;
using Forks.Utils;
using TSingSoft.WebControls2.BillReports;
using TSingSoft.WebPluginFramework;
namespace BWP.Web.Pages.TypeIOCs
{
[TypeIOC(typeof(CarLoadingPrint), typeof(CarLoadingPrint.AfterAddParameters))]
public class CarLoadingTypeIOC : CarLoadingPrint.AfterAddParameters
{
public void Invoke(IDictionary<string, object> dic, CarLoading dmo)
{
AddParameterss(dic, dmo);
}
//定制打印格式【装车单】
protected void AddParameterss(IDictionary<string, object> dic, CarLoading Dmo)
{
PageSize = 100;
dic.Add("$DetailInfo2", new Func<object>(() => GetPrintStyle(Dmo, true)));
}
readonly StringBuilder mHtml = new StringBuilder();
//readonly StringBuilder mHtml2 = new StringBuilder();
protected int mTotalCount { get; private set; }
private string GetPrintStyle(CarLoading dmo, bool haveaddress)
{
StringBuilder html = BuildHtml(dmo, haveaddress);
return html.ToString();
}
protected int PageSize { get; private set; }
private StringBuilder BuildHtml(CarLoading dmo, bool haveaddress)
{
StringBuilder html = new StringBuilder();
DFDataTable dt = new DFDataAdapter(CarLoadingUtil.GetGoodsDetailGroupByOutStoreID(dmo)).Fill();
mTotalCount = dt.Rows.Count;
var pageCount = mTotalCount <= 0 ? 1 : ((mTotalCount + PageSize - 1) / PageSize);
Money<decimal>? allSecNum = GetAllNum(dt, "SecondNumber");
Money<decimal>? allMainNum = GetAllNum(dt, "Number");
var infoBand = GetInfoBand(dmo, allSecNum, allMainNum);
for (int i = 0; i < pageCount; i++)
{
var report = new BillReport();
report.Bands.Add(new TextBand("装车单№" + dmo.ID, new Font("黑体", 15), TextAlignMode.Center));
report.Bands.Add(infoBand);
report.FindControl("");
html.Append(ToHtmlStr(report));
HtmlTable table = NewHtmlTable();
table.EAddRow("center", 1, 1, "单号", "客户", "仓库", "存货编号", "存货名称", "规格", "辅单位", "件数", "主单位", "数量", "备注", "发货标记");
int i1 = i;
var groups = dt.Rows.Where(detail => detail.RowID >= i1 * PageSize && detail.RowID < (i1 + 1) * PageSize).GroupBy(detail => ((long?)detail["BillID"]).Value);
AddDetails(table, groups, haveaddress);
html.Append(ToHtmlStr(table));
var reportBottom = new BillReport();
reportBottom.Bands.Add(GetBottomInfoBand(dmo, pageCount, i + 1));
reportBottom.FindControl("");
html.Append(ToHtmlStr(reportBottom));
if (i + 1 != pageCount)
{
html.Append("<div STYLE='page-break-before:always'></div>");
}
}
return html;
}
private static DFInfoBand<CarLoading> GetBottomInfoBand(CarLoading dmo, int pageCount, int currentPage)
{
var dfInfoBand = new DFInfoBand<CarLoading>(dmo, 4);
dfInfoBand.AddField("CreateUser_Name", 4);
dfInfoBand.AddField("CheckUser_Name", 4);
dfInfoBand.AddText("页码", currentPage + "" + (pageCount == -1 ? "" : ("/" + pageCount)));
dfInfoBand.AddText("打印时间", BLContext.Now.ToString());
return dfInfoBand;
}
private static DFInfoBand<CarLoading> GetInfoBand(CarLoading dmo, Money<decimal>? allSecNum, Money<decimal>? allMainNum)
{
var dfInfoBand = new DFInfoBand<CarLoading>(dmo, 3);
dfInfoBand.AddField("Car_Name", 4);
dfInfoBand.AddField("AccountingUnit_Name", 4);
dfInfoBand.AddField("Date", 4);
dfInfoBand.AddField("Deliveryman_Name", 4);
dfInfoBand.AddText("总 件 数", allSecNum.HasValue ? allSecNum.ToString() : "");
dfInfoBand.AddText("总 数 量", allMainNum.HasValue ? allMainNum.ToString() : "");
dfInfoBand.AddField("Remark", 4, 3, Font.Empty, WrapMode.Wrap);
return dfInfoBand;
}
private static Money<decimal>? GetAllNum(DFDataTable dt, string fieldName)
{
Money<decimal>? num = 0;
foreach (DFDataRow row in dt.Rows)
{
num = num + (((Money<decimal>?)row[fieldName]) ?? 0);
}
return num;
}
private static Money<decimal>? GetAllGroupNum(IGrouping<object, DFDataRow> dt, string fieldName)
{
Money<decimal>? num = 0;
foreach (var row in dt)
{
num = num + (((Money<decimal>?)row[fieldName]) ?? 0);
}
return num;
}
//readonly IntConfigRef mPageSize = new IntConfigRef(1000);
//[LogicName("装车单复杂打印格式分页")]
//[ConfigurationItemGroup("装车单")]
//[ConfigurationItemDescription("默认一页打印1000个产品,此配置影响装车单定制打印格式 ")]
//public IntConfigRef PageSize
//{
// get { return mPageSize; }
//}
private void AddDetails(HtmlTable table, IEnumerable<IGrouping<long, DFDataRow>> groups, bool haveaddress)
{
HtmlTableExtentions.rowCount = 0;
foreach (var group in groups)
{
bool first = true;
Money<decimal>? main = null;
Money<decimal>? sec = null;
HtmlTableRow row;
foreach (DFDataRow dataRow in group)
{
row = new HtmlTableRow();
table.Rows.Add(row);
if (first)
{
row.EAdd("center", group.Count() + 1, 1, ((long?)dataRow["BillID"]).Value.ToString(), (string)dataRow["Customer_Name"], (string)dataRow["Store_Name"]);
if (haveaddress)
{
Address = (string)dataRow["DeliverAddress"];
Remark = (string)dataRow["Remark"];
}
first = false;
}
var secNum = (Money<decimal>?)dataRow["SecondNumber"];
var mainNum = (Money<decimal>?)dataRow["Number"];
row.EAdd("center", 1, 1, (string)dataRow["Goods_Code"], (string)dataRow["Goods_Name"], (string)dataRow["Goods_Spec"], (string)dataRow["Goods_SecondUnit"], (secNum ?? 0).ToString(), (string)dataRow["Goods_MainUnit"], (mainNum ?? 0).ToString(), (string)dataRow["Goods_Remark"], "");
main = (main ?? 0) + (mainNum ?? 0);
sec = (sec ?? 0) + (secNum ?? 0);
}
table.EAddRow("center", 1, 1, "小计", "", "", "", sec.ToString(), "", main.ToString(), "", "");
if (haveaddress)
{
row = new HtmlTableRow();
table.Rows.Add(row);
row.EAdd("center", 1, 1, "地址");
row.EAdd("left", 1, 11, Address);
row = new HtmlTableRow();
table.Rows.Add(row);
row.EAdd("center", 1, 1, "备注");
row.EAdd("left", 1, 11, Remark);
}
}
}
private string Address { get; set; }
private string Remark { get; set; }
private static string ToHtmlStr(Control ctrl)
{
var sb = new StringBuilder();
using (var writer = new HtmlTextWriter(new StringWriter(sb)))
{
ctrl.RenderControl(writer);
}
return sb.ToString();
}
private static HtmlTable NewHtmlTable()
{
var table = new HtmlTable();
table.Style.Add("border-collapse", "collapse");
table.Width = "100%";
table.BorderColor = "Black";
table.Border = 1;
return table;
}
}
public static class HtmlTableExtentions
{
public static void EAdd(this HtmlTableRow row, string align, int rowSpan, int colSpan, params string[] innerHtmls)
{
foreach (var innerHtml in innerHtmls)
{
var cell = new HtmlTableCell
{
Align = align,
RowSpan = rowSpan,
ColSpan = colSpan,
InnerHtml = innerHtml
};
cell.Style["Font-size"] = "15px";
row.Cells.Add(cell);
}
}
public static void EAddRow(this HtmlTable table, string align, int rowSpan, int colSpan, params string[] innerHtmls)
{
var row = new HtmlTableRow();
row.EAdd(align, rowSpan, colSpan, innerHtmls);
table.Rows.Add(row);
}
public static int rowCount;
}
}

Loading…
Cancel
Save