You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

360 lines
17 KiB

using BWP.B3UnitedInfos.BO;
using Forks.EnterpriseServices.DataForm;
using System;
using TSingSoft.WebControls2;
using System.Web.UI.HtmlControls;
using TSingSoft.WebPluginFramework.BLExports;
using TSingSoft.WebPluginFramework.Controls;
using BWP.Web.WebControls;
using BWP.Web.Layout;
using BWP.Web.Utils;
using BWP.B3Sale.Utils;
using BWP.B3Frameworks;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.DomainObjects2;
using BWP.B3Frameworks.Utils;
using System.Web.UI.WebControls;
using BWP.B3UnitedInfos;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3ProduceUnitedInfos;
using System.Linq;
using System.Collections.Generic;
using Forks.Utils;
using Forks.EnterpriseServices.BusinessInterfaces;
using BWP.B3Butchery.BL;
using BWP.B3Butchery.BO;
using BWP.Web.Pages.Utils;
namespace BWP.Web.Pages.B3YunKen.ProductTask_
{
public class SaleOrderToProductNoticePage : AppBasePage
{
QueryContainer mQueryContainer;
DFBrowseGrid mBrowseGrid;
private DFCheckBox cbxHideAlready;
Type mType, mDetailType;
DFInfo mDFInfo;
DFInfo mDetailDFInfo;
protected static DFInfo mGoodsDFInfo = DFInfo.Get(typeof(Goods));
protected static DFInfo mPropDFInfo = DFInfo.Get(typeof(GoodsProperty));
private DFChoiceBox ccbxEmployeeUnit, ccbxDepartment, ccbxProductionUnit, ccbxAccountingUnit;
private DFDateInput cDateInput;
private DFTextBox ccbxRemark;
protected override void InitForm(HtmlForm form)
{
if (!PluginInstalled.Installed("MainSystem", "B3Sale"))
{
AspUtil.Alert(this, "没有安装销售模块");
return;
}
mType = Type.GetType("BWP.B3Sale.BO.Order,B3Sale");
mDetailType = Type.GetType("BWP.B3Sale.BO.Order_Detail,B3Sale");
mDFInfo = DFInfo.Get(mType);
mDetailDFInfo = DFInfo.Get(mDetailType);
mQueryContainer = QueryContainer.FromResource(GetType().FullName + ".xml", GetType().Assembly);
form.Controls.Add(new PageTitle("订单转生产"));
CreateQueryPanel(form.EAdd(new TitlePanel("查询条件")));
CreateResultPanel(form.EAdd(new TitlePanel("查询结果")));
}
private void CreateResultPanel(TitlePanel titlePanel)
{
mBrowseGrid = new DFBrowseGrid(new DFDataTableEditor()) { MultiSelectionEnabled = true, Width = Unit.Percentage(100) };
BuildGrid(mBrowseGrid);
titlePanel.EAdd(mBrowseGrid);
new Second_ConvertRatioRowManager(mBrowseGrid, "本次生产数量", "本次生产辅数量");
var hPanelB = titlePanel.EAdd(new HLayoutPanel());
hPanelB.Add(new SimpleLabel("生产单位"));
hPanelB.Add(ccbxProductionUnit = new DFChoiceBox() { Width = 130, EnableTopItem = true, DataKind = B3ProduceUnitedInfosDataSources. });
hPanelB.Add(new SimpleLabel("部门"));
hPanelB.Add(ccbxDepartment = new DFChoiceBox() { Width = 130, EnableTopItem = true, DataKind = B3FrameworksConsts.DataSources. });
hPanelB.Add(new SimpleLabel("会计单位"));
hPanelB.Add(ccbxAccountingUnit = new DFChoiceBox() { Width = 130, EnableTopItem = true,DataKind = B3FrameworksConsts.DataSources. });
hPanelB.Add(new SimpleLabel("经办人"));
hPanelB.Add(ccbxEmployeeUnit = new DFChoiceBox() { Width = 130, EnableTopItem = true, EnableInputArgument = true, DataKind = "授权员工" });
hPanelB.Add(new SimpleLabel("日期"));
hPanelB.Add(cDateInput = new DFDateInput() { Width = 130, Date = DateTime.Today });
hPanelB.Add(new SimpleLabel("摘要"));
hPanelB.Add(ccbxRemark = new DFTextBox(mDFInfo.Fields["Remark"]));
hPanelB.Add(new TSButton("创建生产通知单", (sender, e) => CreateTruckLoadingClick()));
titlePanel.EAdd(new Panel() { Height = 150 });
}
private void CreateTruckLoadingClick()
{
if (string.IsNullOrEmpty(ccbxProductionUnit.Value))
throw new Exception("请选择生产单位");
if (string.IsNullOrEmpty(ccbxDepartment.Value))
throw new Exception("请选择部门");
if (string.IsNullOrEmpty(ccbxEmployeeUnit.Value))
throw new Exception("请选择经办人");
if (string.IsNullOrEmpty(ccbxAccountingUnit.Value))
throw new Exception("请选择会计单位");
if (!cDateInput.Value.HasValue)
throw new Exception("请选择日期");
if (!mBrowseGrid.GetSelectedItems().Any())
throw new Exception("请选择行");
mBrowseGrid.GetFromUI();
var list = new List<tempSaleOrderToProductTaskModel>();
foreach (var row in mBrowseGrid.GetSelectedItems())
{
var customerId = (long)row["Customer_ID"];
var detailId = (long)row["Detail_ID"];
var goodsId = (long)row["Goods_ID"];
var remark = (string)row["Remark"];
var brandItem = Convert.ToInt64(row["BrandItem_ID"]);
var unitNum = (Money<decimal>?)row["本次生产数量"];
var secondNumber = (Money<decimal>?)row["本次生产辅数量"];
var dmoid = (long?)row["DmoID"];
var dmotypeid = (short?)row["DmoTypeID"];
var goodsUnitConvertDirection = (NamedValue<>?)row["Goods_UnitConvertDirection"];
var leftRatio = (Money<decimal>)row["LeftRatio"];
var rightRatio = (Money<decimal>)row["RightRatio"];
var model = new tempSaleOrderToProductTaskModel();
model.CustomerId = customerId;
model.DetailId = detailId;
model.GoodsId = goodsId;
model.UnitNum = unitNum;
model.SecondNumber = secondNumber;
model.DmoID = dmoid;
model.DmoTypeID = dmotypeid;
if (brandItem > 0)
model.BrandItem_ID = brandItem;
model.Remark = remark;
if (goodsUnitConvertDirection == . || goodsUnitConvertDirection == .)
{
model.Number = unitNum * rightRatio / leftRatio;
}
list.Add(model);
}
long taskId = 0;
using (var context = new TransactionContext())
{
UpdateOrderDetail(context.Session, list);
taskId = CreateProductTask(context.Session, list);
context.Commit();
}
AspUtil.Alert(this, "成功创建生产通知单:" + taskId);
StartQuery();
}
private long CreateProductTask(IDmoSessionWithTransaction session, List<tempSaleOrderToProductTaskModel> list)
{
var bl = BIFactory.Create<IProductNoticeBL>(session);
//var accounitingId = long.Parse(ccbxAccountUnit.Value);
var departmentId = long.Parse(ccbxDepartment.Value);
var productionUnitId = long.Parse(ccbxProductionUnit.Value);
var inputDate = cDateInput.Value.Value;
var remark = ccbxRemark.Text;
var employeeID = long.Parse(ccbxEmployeeUnit.Value);
var accounting = ccbxAccountingUnit.Value;
var dmo = new ProductNotice();
//dmo.AccountingUnit_ID = accounitingId;
bl.InitNewDmo(dmo);
dmo.Department_ID = departmentId;
dmo.ProductionUnit_ID = productionUnitId;
dmo.Date = inputDate;
dmo.Employee_ID = employeeID;
dmo.Remark = remark;
dmo.AccountingUnit_ID = long.Parse(accounting);
foreach (var grouping in list.GroupBy(x => x.GoodsId))
{
var goodsId = grouping.Key;
var fd = grouping.FirstOrDefault();
if (fd == null)
{ continue; }
foreach (IGrouping<long?, tempSaleOrderToProductTaskModel> models in grouping.GroupBy(x => x.CustomerId))
{
var det = models.FirstOrDefault();
var customerId = models.Key;
var number = models.Sum(x => (decimal?)x.UnitNum ?? 0);
var secondNumber = models.Sum(x => (decimal?)x.SecondNumber ?? 0);
var detail = new ProductNotice_Detail();
detail.Goods_ID = goodsId;
detail.Number = number;
detail.SecondNumber = secondNumber;
detail.Detail_Customer_ID = customerId;
detail.BrandItem_ID = det.BrandItem_ID;
detail.Remark = det.Remark;
detail.DmoID = det.DmoID;
detail.DmoTypeID = det.DmoTypeID;
dmo.Details.Add(detail);
}
}
bl.Insert(dmo);
return dmo.ID;
}
private void UpdateOrderDetail(IDmoSessionWithTransaction session, List<tempSaleOrderToProductTaskModel> list)
{
foreach (var model in list)
{
var updateDom = new DQUpdateDom(mDetailType);
updateDom.Where.Conditions.Add(DQCondition.EQ("ID", model.DetailId));
updateDom.Columns.Add(new DQUpdateColumn("B3Butcher_UnitNum", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("B3Butcher_UnitNum"), DQExpression.Value(0)), DQExpression.Value(model.UnitNum))));
updateDom.Columns.Add(new DQUpdateColumn("B3Butcher_Num", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("B3Butcher_Num"), DQExpression.Value(0)), DQExpression.Value(model.Number))));
updateDom.Columns.Add(new DQUpdateColumn("B3Butcher_SecondNumber", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("B3Butcher_SecondNumber"), DQExpression.Value(0)), DQExpression.Value(model.SecondNumber))));
session.ExecuteNonQuery(updateDom);
}
}
private void BuildGrid(DFBrowseGrid grid)
{
//grid.Columns.Add(new DFBrowseGridColumn("ID"));
grid.Columns.Add(new DFBrowseGridColumn("Code"));
grid.Columns.Add(new DFBrowseGridColumn("BillState"));
grid.Columns.Add(new DFBrowseGridColumn("BrandItem_Name"));
grid.Columns.Add(new DFBrowseGridColumn("Customer_Name"));
grid.Columns.Add(new DFBrowseGridColumn("Department_Name"));
grid.Columns.Add(new DFBrowseGridColumn("OrderDate"));
grid.Columns.Add(new DFBrowseGridColumn("Goods_Name"));
grid.Columns.Add(new DFBrowseGridColumn("Goods_MainUnit"));
grid.Columns.Add(new DFBrowseGridColumn("Number"));
grid.Columns.Add(new DFBrowseGridColumn("Goods_SecondUnit"));
grid.Columns.Add(new DFBrowseGridColumn("SecondNumber"));
grid.Columns.Add(new DFEditGridColumn<DFTextBox>("Remark"));
grid.Columns.Add(new DFEditGridColumn<DFTextBox>("本次生产数量"));
grid.Columns.Add(new DFEditGridColumn<DFTextBox>("本次生产辅数量"));
grid.Columns.Add(new DFBrowseGridColumn("AccountingUnit_Name"));
grid.Columns.Add(new DFBrowseGridColumn("BrandItem_Name"));
grid.ValueColumns.Add("Goods_MainUnitRatio");
grid.ValueColumns.Add("Goods_SecondUnitRatio");
grid.ValueColumns.Add("Goods_UnitConvertDirection");
grid.ValueColumns.Add("LeftRatio");
grid.ValueColumns.Add("RightRatio");
grid.ValueColumns.Add("Detail_ID");
grid.ValueColumns.Add("Goods_ID");
grid.ValueColumns.Add("Customer_ID");
grid.ValueColumns.Add("BrandItem_ID");
grid.ValueColumns.Add("DmoID");
grid.ValueColumns.Add("DmoTypeID");
}
public void CreateQueryPanel(TitlePanel panel)
{
var manager = new LayoutManager("", mDFInfo, mQueryContainer);
manager.Add("Code", QueryCreator.DFTextBox(mDFInfo.Fields["Code"]));
manager.Add("Customer_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["Customer_ID"], B3SaleDataSources.));
manager.Add("Department_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["Department_ID"], "授权部门"));
manager.Add("OrderDate", QueryCreator.TimeRange(mDFInfo.Fields["OrderDate"], mQueryContainer, "MinOrderDate", "MaxOrderDate"));
manager.Add("LoadTime", new SimpleLabel("出库时间"), QueryCreator.TimeRange(mDFInfo.Fields["LoadTime"], mQueryContainer, "MinLoadTime", "MaxLoadTime"));
manager.Add("CustomerCatalog_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["CustomerCatalog_ID"], "客户分类"));
manager.Add("Employee_ID", new SimpleLabel("经办人"), QueryCreator.DFChoiceBox(mDFInfo.Fields["Employee_ID"], "授权员工"));
manager.Add("Store_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["Store_ID"], B3FrameworksConsts.DataSources.));
//manager.Add("ID", QueryCreator.DFTextBox(mDFInfo.Fields["ID"]));
manager.Add("ProductLine_ID", new SimpleLabel("产品线"), QueryCreator.DFChoiceBox(mGoodsDFInfo.Fields["ProductLine_ID"], "B3UnitedInfos.产品线"));
manager.Add("AccountingUnit_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["AccountingUnit_ID"], B3FrameworksConsts.DataSources.));
manager.Add("BillState", QueryCreator.(mDFInfo.Fields["BillState"]));
manager.Add("BrandItem_ID", new SimpleLabel("品牌项"), QueryCreator.DFChoiceBox(mDetailDFInfo.Fields["BrandItem_ID"], B3UnitedInfosConsts.DataSources.));
cbxHideAlready = new DFCheckBox() { Text = "隐藏已转明细", Checked = true };
manager.Add("隐藏已转明细", cbxHideAlready);
manager["隐藏已转明细"].NoLabel = true;
manager.CreateDefaultConfig(8);
panel.Controls.Add(manager.CreateLayout());
var hPanel = panel.EAdd(new HLayoutPanel());
hPanel.Add(new TSButton("开始查询", delegate { StartQuery(); }));
hPanel.Add(new RedirectTSButton("清除条件"));
}
void StartQuery()
{
mBrowseGrid.Reset();
mBrowseGrid.Query = GetQueryDom();
mBrowseGrid.DataBind();
}
private DQueryDom GetQueryDom()
{
var detail = JoinAlias.Create("detail");
var dom = mQueryContainer.Build();
dom.Where.Conditions.Add(DQCondition.EQ("BillState", .));
dom.Columns.Add(DQSelectColumn.Field("ID", "单号"));
dom.Columns.Add(DQSelectColumn.Field("Code"));
dom.Columns.Add(DQSelectColumn.Field("Customer_ID"));
dom.Columns.Add(DQSelectColumn.Field("Department_ID"));
dom.Columns.Add(DQSelectColumn.Field("BillState"));
dom.Columns.Add(DQSelectColumn.Field("OrderDate"));
dom.Columns.Add(DQSelectColumn.Field("LoadTime"));
dom.Columns.Add(DQSelectColumn.Field("CustomerCatalog_ID"));
dom.Columns.Add(DQSelectColumn.Field("AccountingUnit_ID"));
dom.Columns.Add(DQSelectColumn.Field("Remark"));
dom.Columns.Add(DQSelectColumn.Field("Remark", detail));
dom.Columns.Add(DQSelectColumn.Field("DmoTypeID", detail));
dom.Columns.Add(DQSelectColumn.Field("DmoID", detail));
dom.Columns.Add(DQSelectColumn.Field("BrandItem_ID", detail));
dom.Columns.Add(DQSelectColumn.Field("BrandItem_Name", detail));
dom.Columns.Add(DQSelectColumn.Field("Goods_Code", detail));
dom.Columns.Add(DQSelectColumn.Field("Goods_Name", detail));
dom.Columns.Add(DQSelectColumn.Field("Goods_Spec", detail));
dom.Columns.Add(DQSelectColumn.Field("UnitNum", detail));
dom.Columns.Add(DQSelectColumn.Field("SecondNumber", detail));
dom.Columns.Add(DQSelectColumn.Field("Goods_SecondUnit", detail));
dom.Columns.Add(DQSelectColumn.Field("Goods_MainUnit", detail));
dom.Columns.Add(DQSelectColumn.Field("Number", detail));
dom.Columns.Add(DQSelectColumn.Field("Goods_MainUnitRatio", detail));
dom.Columns.Add(DQSelectColumn.Field("Goods_SecondUnitRatio", detail));
dom.Columns.Add(DQSelectColumn.Field("Goods_UnitConvertDirection", detail));
dom.Columns.Add(DQSelectColumn.Field("LeftRatio", detail));
dom.Columns.Add(DQSelectColumn.Field("RightRatio", detail));
dom.Columns.Add(DQSelectColumn.Field("LeftRatio", detail));
dom.Columns.Add(DQSelectColumn.Field("RightRatio", detail));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(detail, "ID"), "Detail_ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(detail, "SaleGoods_ID"), "Goods_ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.Field(detail, "UnitNum"), DQExpression.IfNull(DQExpression.Field(detail, "B3Butcher_Num"), DQExpression.Value(0))), "本次生产数量"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.Field(detail, "SecondNumber"), DQExpression.IfNull(DQExpression.Field(detail, "B3Butcher_SecondNumber"), DQExpression.Value(0))), "本次生产辅数量"));
dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID));
if (cbxHideAlready.Checked)
{
dom.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(detail, "B3Butcher_UnitNum")), DQCondition.LessThan(DQExpression.IfNull(DQExpression.Field(detail, "B3Butcher_UnitNum"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field(detail, "UnitNum"), DQExpression.Value(0)))));
}
return dom;
}
}
class tempSaleOrderToProductTaskModel
{
public long DetailId { get; set; }
public long GoodsId { get; set; }
public long? CustomerId { get; set; }
public long? DmoID { get; set; }
public short? DmoTypeID { get; set; }
public Money<decimal>? UnitNum { get; set; }
public Money<decimal>? SecondNumber { get; set; }
public Money<decimal>? Number { get; set; }
public long BrandItem_ID { get; set; }
public string Remark { get; set; }
}
}