diff --git a/B3SheepButcherManage.Web/B3SheepButcherManage.Web.csproj b/B3SheepButcherManage.Web/B3SheepButcherManage.Web.csproj index c700425..f8550f7 100644 --- a/B3SheepButcherManage.Web/B3SheepButcherManage.Web.csproj +++ b/B3SheepButcherManage.Web/B3SheepButcherManage.Web.csproj @@ -144,6 +144,18 @@ ASPXCodeBehind + + ASPXCodeBehind + + + ASPXCodeBehind + + + ASPXCodeBehind + + + ASPXCodeBehind + ASPXCodeBehind @@ -177,6 +189,9 @@ ASPXCodeBehind + + ASPXCodeBehind + ASPXCodeBehind @@ -235,6 +250,13 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/B3SheepButcherManage.Web/Utils/B3SheepButcherManageChoiceBoxProvider.cs b/B3SheepButcherManage.Web/Utils/B3SheepButcherManageChoiceBoxProvider.cs index 74fbf8a..1430b67 100644 --- a/B3SheepButcherManage.Web/Utils/B3SheepButcherManageChoiceBoxProvider.cs +++ b/B3SheepButcherManage.Web/Utils/B3SheepButcherManageChoiceBoxProvider.cs @@ -59,6 +59,8 @@ namespace BWP.Web.Utils { dom.Where.Conditions.Add(DQCondition.EQ("Supplier_ID", long.Parse(argu.CodeArgument))); } + if (!string.IsNullOrEmpty(argu.InputArgument)) + dom.Where.Conditions.Add(DQCondition.Like("ID", argu.InputArgument)); OrganizationUtil.AddOrganizationLimit(dom, typeof(WeightBill)); dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID)); return Query(dom); diff --git a/B3SheepButcherManage/B3SheepButcherManage.csproj b/B3SheepButcherManage/B3SheepButcherManage.csproj index 8a8e3ce..558cbdd 100644 --- a/B3SheepButcherManage/B3SheepButcherManage.csproj +++ b/B3SheepButcherManage/B3SheepButcherManage.csproj @@ -91,6 +91,7 @@ + @@ -100,6 +101,8 @@ + + diff --git a/B3SheepButcherManage/BL/Bill/PayBL/PayBL.cs b/B3SheepButcherManage/BL/Bill/PayBL/PayBL.cs new file mode 100644 index 0000000..6fe5c79 --- /dev/null +++ b/B3SheepButcherManage/BL/Bill/PayBL/PayBL.cs @@ -0,0 +1,83 @@ +using BWP.B3Frameworks.BL; +using BWP.B3Frameworks.BO.MoneyTemplate; +using BWP.B3Frameworks.BO.NamedValueTemplate; +using BWP.B3SheepButcherManage.BO; +using Forks.EnterpriseServices; +using Forks.EnterpriseServices.BusinessInterfaces; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.SqlDoms; +using Forks.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TSingSoft.WebPluginFramework; + +namespace BWP.B3SheepButcherManage.BL.Bill.PayBL +{ + [BusinessInterface(typeof(PayBL))] + [LogicName("羊付款单")] + public interface IPayBL : IDepartmentWorkFlowBillBL + { } + + public class PayBL : DepartmentWorkFlowBillBL, IPayBL + { + protected override void doCheck(Pay dmo) + { + + foreach (var detail in dmo.Details) + { + var notPayMoney = (detail.StatPay_Money ?? 0) - (detail.AlreadyPaidMoney ?? 0); + if ((detail.Money ?? 0) > notPayMoney) + { + throw new ApplicationException(string.Format("结算单No.{0} 本次付款金额{1}大于未付款金额{2}", detail.StatPay_ID, detail.Money, notPayMoney)); + } + else + { + detail.AlreadyPaidMoney = detail.AlreadyPaidMoney + detail.Money; + } + } + + base.doCheck(dmo); + UpdateStatPayMoney(dmo); + } + + protected override void doUnCheck(Pay dmo) + { + + base.doUnCheck(dmo); + UpdateStatPayMoney(dmo); + } + + private void UpdateStatPayMoney(Pay dmo) + { + var statPayIds = dmo.Details.Select(x => x.StatPay_ID).ToList(); + var detail = new JoinAlias(typeof(Pay_Detail)); + var bill = new JoinAlias(typeof(Pay)); + var dom = new DQueryDom(detail); + dom.From.AddJoin(JoinType.Inner, new DQDmoSource(bill), DQCondition.EQ(bill, "ID", detail, "Pay_ID")); + dom.Where.Conditions.Add(DQCondition.Or(DQCondition.EQ(bill, "BillState", 单据状态.已审核), DQCondition.EQ(bill, "BillState", 单据状态.已完毕))); + dom.Where.Conditions.EFieldInList("StatPay_ID", statPayIds); + + dom.Columns.Add(DQSelectColumn.Sum(detail, "Money")); + dom.Columns.Add(DQSelectColumn.Field("StatPay_ID", detail)); + dom.Columns.Add(DQSelectColumn.Sum(detail, "AlreadyPaidMoney")); + + dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "StatPay_ID")); + + var tupleList = dom.EExecuteList?, long, Money<金额>?>(Session); + foreach (var statPayId in statPayIds) + { + var money = tupleList.Sum(x => x.Item2 == statPayId ? ((x.Item1 ?? 0).Value + (x.Item3 ?? 0).Value) : 0m); + + var update = new DQUpdateDom(typeof(StatPay)); + update.Columns.Add(new DQUpdateColumn("PaidMoney", money)); + update.Columns.Add(new DQUpdateColumn("RowVersion", + DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.ConstValue(1)))); + update.Where.Conditions.Add(DQCondition.EQ("ID", statPayId)); + Session.ExecuteNonQuery(update); + } + } + } +} diff --git a/B3SheepButcherManage/BL/Bill/StatPayBL/StatPayBL.cs b/B3SheepButcherManage/BL/Bill/StatPayBL/StatPayBL.cs index 71de6d9..39aee1b 100644 --- a/B3SheepButcherManage/BL/Bill/StatPayBL/StatPayBL.cs +++ b/B3SheepButcherManage/BL/Bill/StatPayBL/StatPayBL.cs @@ -453,69 +453,68 @@ namespace BWP.B3SheepButcherManage.BL public void CancelAllHurryButchers(long statPayID) { - //CancelAllDetails(statPayID); + CancelAllDetails(statPayID); } public void AddHurryButchers(StatPay dmo) { - return; - //var detailAlias = new JoinAlias(typeof(HurryButcher_Detail)); - //var billAlias = new JoinAlias(typeof(HurryButcher)); - //var dom = new DQueryDom(detailAlias); - //dom.From.AddJoin(JoinType.Inner, new DQDmoSource(billAlias), DQCondition.EQ(billAlias, "ID", detailAlias, "HurryButcher_ID")); - - //dom.Where.Conditions.Add(DQCondition.EQ(detailAlias, "StatPay_ID", dmo.ID)); - - //dom.Columns.Add(DQSelectColumn.Field("HurryButcher_ID")); - //dom.GroupBy.Expressions.Add(DQExpression.Field("HurryButcher_ID")); - - //dom.Columns.Add(DQSelectColumn.Field("Livestock_ID")); - //dom.GroupBy.Expressions.Add(DQExpression.Field("Livestock_ID")); - - //dom.Columns.Add(DQSelectColumn.Field("Livestock_Name")); - //dom.GroupBy.Expressions.Add(DQExpression.Field("Livestock_Name")); - - //dom.Columns.Add(DQSelectColumn.Sum("Weight")); - //dom.Columns.Add(DQSelectColumn.Sum("Number")); - - //dom.Columns.Add(DQSelectColumn.Field("Remark")); - //dom.GroupBy.Expressions.Add(DQExpression.Field("Remark")); - - //dom.Columns.Add(DQSelectColumn.Sum("GrossWeight")); - - //dom.Columns.Add(DQSelectColumn.Field("LiveVarieties_ID")); - //dom.GroupBy.Expressions.Add(DQExpression.Field("LiveVarieties_ID")); - - //dom.Columns.Add(DQSelectColumn.Field("LiveVarieties_Name")); - //dom.GroupBy.Expressions.Add(DQExpression.Field("LiveVarieties_Name")); - - //using (var reader = Session.ExecuteReader(dom)) - //{ - // dmo.HurryButcherDetails.Clear(); - // while (reader.Read()) - // { - // var detail = new StatPay_HurryButcher(); - // detail.HurryButcher_ID = (long?)reader[0]; - // detail.Livestock_ID = (long?)reader[1]; - // detail.Livestock_Name = (string)reader[2]; - // detail.Weight = (Money?)reader[3]; - // detail.Number = (int?)reader[4]; - // detail.Remark = (string)reader[5]; - // detail.PriceWeight = detail.Weight; - // detail.GrossWeight = (Money?)reader[6]; - // detail.LiveVarieties_ID = (long?)reader[7]; - // detail.LiveVarieties_Name = (string)reader[8]; - // dmo.HurryButcherDetails.Add(detail); - // } - //} - - //SetPrice(dmo, dmo.HurryButcherDetails); - //foreach (var detail in dmo.HurryButcherDetails) - //{ - // detail.Money = detail.Price * detail.Weight; - //} - - //ResetAcquisitionInfo(dmo); + var detailAlias = new JoinAlias(typeof(HurryButcher_Detail)); + var billAlias = new JoinAlias(typeof(HurryButcher)); + var dom = new DQueryDom(detailAlias); + dom.From.AddJoin(JoinType.Inner, new DQDmoSource(billAlias), DQCondition.EQ(billAlias, "ID", detailAlias, "HurryButcher_ID")); + + dom.Where.Conditions.Add(DQCondition.EQ(detailAlias, "StatPay_ID", dmo.ID)); + + dom.Columns.Add(DQSelectColumn.Field("HurryButcher_ID")); + dom.GroupBy.Expressions.Add(DQExpression.Field("HurryButcher_ID")); + + dom.Columns.Add(DQSelectColumn.Field("Livestock_ID")); + dom.GroupBy.Expressions.Add(DQExpression.Field("Livestock_ID")); + + dom.Columns.Add(DQSelectColumn.Field("Livestock_Name")); + dom.GroupBy.Expressions.Add(DQExpression.Field("Livestock_Name")); + + dom.Columns.Add(DQSelectColumn.Sum("Weight")); + dom.Columns.Add(DQSelectColumn.Sum("Number")); + + dom.Columns.Add(DQSelectColumn.Field("Remark")); + dom.GroupBy.Expressions.Add(DQExpression.Field("Remark")); + + dom.Columns.Add(DQSelectColumn.Sum("GrossWeight")); + + dom.Columns.Add(DQSelectColumn.Field("LiveVarieties_ID")); + dom.GroupBy.Expressions.Add(DQExpression.Field("LiveVarieties_ID")); + + dom.Columns.Add(DQSelectColumn.Field("LiveVarieties_Name")); + dom.GroupBy.Expressions.Add(DQExpression.Field("LiveVarieties_Name")); + + using (var reader = Session.ExecuteReader(dom)) + { + dmo.HurryButcherDetails.Clear(); + while (reader.Read()) + { + var detail = new StatPay_HurryButcher(); + detail.HurryButcher_ID = (long?)reader[0]; + detail.Livestock_ID = (long?)reader[1]; + detail.Livestock_Name = (string)reader[2]; + detail.Weight = (Money?)reader[3]; + detail.Number = (int?)reader[4]; + detail.Remark = (string)reader[5]; + detail.PriceWeight = detail.Weight; + detail.GrossWeight = (Money?)reader[6]; + detail.LiveVarieties_ID = (long?)reader[7]; + detail.LiveVarieties_Name = (string)reader[8]; + dmo.HurryButcherDetails.Add(detail); + } + } + + SetPrice(dmo, dmo.HurryButcherDetails); + foreach (var detail in dmo.HurryButcherDetails) + { + detail.Money = detail.Price * detail.Weight; + } + + ResetAcquisitionInfo(dmo); } public void AddOtherReward(StatPay dmo) diff --git a/B3SheepButcherManage/BO/Bill/Pay/Pay.cs b/B3SheepButcherManage/BO/Bill/Pay/Pay.cs new file mode 100644 index 0000000..09d1461 --- /dev/null +++ b/B3SheepButcherManage/BO/Bill/Pay/Pay.cs @@ -0,0 +1,111 @@ +using BWP.B3Frameworks; +using BWP.B3Frameworks.BO; +using BWP.B3Frameworks.BO.MoneyTemplate; +using BWP.B3ProcurementInterface.BO; +using BWP.B3ProcurementInterface.Utils; +using BWP.B3UnitedInfos; +using BWP.B3UnitedInfos.BO; +using Forks.EnterpriseServices; +using Forks.EnterpriseServices.DataForm; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BWP.B3SheepButcherManage.BO +{ + [Serializable] + [DFClass] + [LogicName("羊付款单")] + [BillAccountTarget(typeof(Supplier))] + [DmoTypeID(B3FrameworksConsts.DmoTypeIDBases.B3SheepButcherManage, B3SheepButcherManageConsts.DmoTypeIDOffsets.Pay)] + public class Pay : DepartmentWorkFlowBill + { + [LogicName("供应商")] + [DFDataKind(B3ProcurementInterfaceDataSources.供应商)] + [DFExtProperty(B3FrameworksConsts.DFExtProperties.DisplayField, "Supplier_Name")] + [DFExtProperty(B3FrameworksConsts.DFExtProperties.QueryDataKind, B3ProcurementInterfaceDataSources.供应商全部)] + public long? Supplier_ID { get; set; } + + private DateTime? mDate = DateTime.Today; + + [LogicName("付款日期")] + public DateTime? Date + { + get { return mDate; } + set { mDate = value; } + } + + [LogicName("付款账户")] + [DFDataKind(B3UnitedInfosConsts.DataSources.账户)] + [DFExtProperty(B3FrameworksConsts.DFExtProperties.DisplayField, "Account_Name")] + public long? Account_ID { get; set; } + + [LogicName("付款金额")] + public Money<金额>? Money { get; set; } + + [LogicName("付款对象")] + [DFDataKind(B3ProcurementInterfaceDataSources.供应商)] + [DFExtProperty(B3FrameworksConsts.DFExtProperties.DisplayField, "PaySupplier_Name")] + [DFExtProperty(B3FrameworksConsts.DFExtProperties.QueryDataKind, B3ProcurementInterfaceDataSources.供应商全部)] + public long? PaySupplier_ID { get; set; } + + [LogicName("付款对象")] + [ReferenceTo(typeof(Supplier), "Name")] + [Join("PaySupplier_ID", "ID")] + public string PaySupplier_Name { get; set; } + + + [LogicName("支付账户")] + [ReferenceTo(typeof(Supplier), "AccountNo")] + [Join("PaySupplier_ID", "ID")] + public string PaySupplier_AccountNo { get; set; } + + private Pay_DetailCollection mDetails = new Pay_DetailCollection(); + + [OneToMany(typeof(Pay_Detail), "ID")] + [Join("ID", "Pay_ID")] + public Pay_DetailCollection Details + { + get + { + return mDetails; + } + } + + #region ReferenceTo + + [LogicName("供应商")] + [ReferenceTo(typeof(Supplier), "Name")] + [Join("Supplier_ID", "ID")] + public string Supplier_Name { get; set; } + + [LogicName("付款账户")] + [ReferenceTo(typeof(Account), "Name")] + [Join("Account_ID", "ID")] + public string Account_Name { get; set; } + + [ReferenceTo(typeof(Account), "BankAccountNumber")] + [Join("Account_ID", "ID")] + [DFPrompt("银行账号")] + public string Account_BankAccountNumber { get; set; } + + #endregion + + public IList CreateBillAccount() + { + var list = new List(); + var target = new BaseDetailAccountInfo(); + var dateTime = Date; + if (dateTime != null) + target.Date = dateTime.Value.Date; + //target.Money = Money ?? 0; + target.TargetID = Supplier_ID ?? 0; + target.TargetTypeID = DmoTypeIDAttribute.GetID(typeof(Supplier)); + list.Add(target); + return list; + } + } +} diff --git a/B3SheepButcherManage/BO/Bill/Pay/Pay_Detail.cs b/B3SheepButcherManage/BO/Bill/Pay/Pay_Detail.cs new file mode 100644 index 0000000..9189b4f --- /dev/null +++ b/B3SheepButcherManage/BO/Bill/Pay/Pay_Detail.cs @@ -0,0 +1,58 @@ +using BWP.B3Frameworks.BO; +using BWP.B3Frameworks.BO.MoneyTemplate; +using Forks.EnterpriseServices; +using Forks.EnterpriseServices.DataDictionary; +using Forks.EnterpriseServices.DataForm; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BWP.B3SheepButcherManage.BO +{ + [LogicName("付款明细")] + [DFClass, Serializable] + public class Pay_Detail : Base + { + [LogicName("付款单号"), DbColumn(Index = IndexType.Normal)] + public long Pay_ID { get; set; } + + [LogicName("结算单")] + public long? StatPay_ID { get; set; } + + [LogicName("备注")] + public string Remark { get; set; } + + [LogicName("本次付款金额")] + public Money<金额>? Money { get; set; } + + [LogicName("结算日期")] + [ReferenceTo(typeof(StatPay), "Date")] + [Join("StatPay_ID", "ID")] + public DateTime? StatPay_Date { get; set; } + + [LogicName("过磅时间")] + [ReferenceTo(typeof(StatPay), "WeighTime")] + [Join("StatPay_ID", "ID")] + public DateTime? WeighTime { get; set; } + + [LogicName("过磅单")] + [ReferenceTo(typeof(StatPay), "WeightBill_ID")] + [Join("StatPay_ID", "ID")] + public long? Weigh_ID { get; set; } + + [LogicName("应付金额")] + [ReferenceTo(typeof(StatPay), "ActualMoney")] + [Join("StatPay_ID", "ID")] + public Money<金额>? StatPay_Money { get; set; } + + [LogicName("已付金额")] + public Money<金额>? AlreadyPaidMoney { get; set; } + } + + [Serializable] + public class Pay_DetailCollection : DmoCollection + { } +} diff --git a/B3SheepButcherManage/DmoTypeIDOffsets.cs b/B3SheepButcherManage/DmoTypeIDOffsets.cs index 068f85a..0312e01 100644 --- a/B3SheepButcherManage/DmoTypeIDOffsets.cs +++ b/B3SheepButcherManage/DmoTypeIDOffsets.cs @@ -16,6 +16,7 @@ namespace BWP.B3SheepButcherManage public const byte Butcher = 5; public const byte StatPay = 6; public const byte HurryButcher = 7; + public const byte Pay = 8; } public static class DataSources diff --git a/WebFolder/config/Plugins/B3SheepButcherManage.Plugin b/WebFolder/config/Plugins/B3SheepButcherManage.Plugin index e06aed6..a661caa 100644 --- a/WebFolder/config/Plugins/B3SheepButcherManage.Plugin +++ b/WebFolder/config/Plugins/B3SheepButcherManage.Plugin @@ -116,6 +116,22 @@ + + + + + + + + + + + + + + + + @@ -128,12 +144,14 @@ + + diff --git a/WebFolder/config/billreports/B3SheepButcherManage/PayPrint.xml b/WebFolder/config/billreports/B3SheepButcherManage/PayPrint.xml new file mode 100644 index 0000000..089a2f3 --- /dev/null +++ b/WebFolder/config/billreports/B3SheepButcherManage/PayPrint.xml @@ -0,0 +1,32 @@ + + + + + + 羊付款单№$Dmo.ID + + + + + + + + + + + 付款明细]]> + + + + + + + + + + + + + + +