private void Create(OrderHistoryFile currentFile, bool isSpecialOrder) { EF.OrderHistoryHeader header = GetHeaderAndMergeCurrentFile(currentFile, isSpecialOrder); if (Configuration.DiagnosticsAuditOrderHistoryHeaderChanges) { ChangeAuditor.AuditChanges(_unitOfWork.Context, header, _log); } bool hasSpecialItems = false; foreach (OrderHistoryDetail currentDetail in currentFile.Details.ToList()) { if (string.IsNullOrWhiteSpace(currentDetail.SpecialOrderHeaderId)) { hasSpecialItems = true; } DetermineDetailOnOrder(isSpecialOrder, header, currentDetail); } RecalcOrderSubtotal(currentFile, header); _headerRepo.CreateOrUpdate(header); if (hasSpecialItems) { RemoveSpecialOrderItemsFromHistory(header); } }
private void DetermineDetailOnOrder(bool isSpecialOrder, EF.OrderHistoryHeader header, OrderHistoryDetail currentDetail) { EF.OrderHistoryDetail detail = SeekMatchingDetail(header, currentDetail); if (detail == null) { detail = AddNewDetailToOrder(isSpecialOrder, header, currentDetail); } else { detail = MergeWithCurrentOrderDetail(isSpecialOrder, header, currentDetail, detail); } if (Configuration.DiagnosticsAuditOrderHistoryDetailChanges) { ChangeAuditor.AuditChanges(_unitOfWork.Context, detail, _log); } }