|
|
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; }
|
|
|
}
|
|
|
}
|