diff --git a/YLErpDAL/Modules/TradeModule/QueryModule/TradeConfirmationDocumentQuery.cs b/YLErpDAL/Modules/TradeModule/QueryModule/TradeConfirmationDocumentQuery.cs new file mode 100644 index 00000000..d43a4553 --- /dev/null +++ b/YLErpDAL/Modules/TradeModule/QueryModule/TradeConfirmationDocumentQuery.cs @@ -0,0 +1,42 @@ +namespace YLErp.Modules.TradeModule.QueryModule +{ + public sealed class TradeConfirmationDocumentQueryItem + { + public trade_contract_document Document { get; set; } + + public trade_contract_r Relation { get; set; } + } + + public static class TradeConfirmationDocumentQuery + { + public static IQueryable Create( + IQueryable documents, + IQueryable relations, + IQueryable trades, + DateTime? tradeDateStart, + DateTime? tradeDateEnd) + { + if (tradeDateStart.HasValue) + { + trades = trades.Where(t => t.TradeDate >= tradeDateStart.Value); + } + + if (tradeDateEnd.HasValue) + { + var tradeDateEndExclusive = tradeDateEnd.Value.Date.AddDays(1); + trades = trades.Where(t => t.TradeDate < tradeDateEndExclusive); + } + + return from document in documents + join relation in relations.Where(r => r.IsValid) + on document.Code equals relation.ContractCode + join trade in trades + on relation.TradeId equals trade.id + select new TradeConfirmationDocumentQueryItem + { + Document = document, + Relation = relation + }; + } + } +} diff --git a/YLErpWeb/Controllers/tradeController.cs b/YLErpWeb/Controllers/tradeController.cs index 428a4c66..726e93b5 100644 --- a/YLErpWeb/Controllers/tradeController.cs +++ b/YLErpWeb/Controllers/tradeController.cs @@ -6299,14 +6299,17 @@ namespace YLErp.Web.Controllers return ShowError("请选择文档类型!"); } - if (req.TradeDateStart == null) { req.TradeDateStart = DateTime.MinValue; } - if (req.TradeDateEnd == null) { req.TradeDateEnd = DateTime.MaxValue; } - var db_trade_contract_r = yldb.trade_contract_r.AsQueryable(); + var documentQuery = TradeConfirmationDocumentQuery.Create( + yldb.trade_contract_document, + yldb.trade_contract_r, + yldb.trade, + req.TradeDateStart, + req.TradeDateEnd); - var query = from doc in yldb.trade_contract_document - join r in db_trade_contract_r - on doc.Code equals r.ContractCode - where doc.Type == ContractTypeEnum.Trade && doc.ValueDate >= req.TradeDateStart && doc.ValueDate <= req.TradeDateEnd && r.IsValid + var query = from item in documentQuery + let doc = item.Document + let r = item.Relation + where doc.Type == ContractTypeEnum.Trade select new { doc.ClientId,