private void SendForOrdersWithNotSendReceipts(IUnitOfWork uow, IEnumerable <ReceiptForOrderNode> nodes, ref int notValidCount) { IList <PreparedReceiptNode> receiptNodesToSend = new List <PreparedReceiptNode>(); int sentBefore = 0; foreach (var receipt in uow.GetById <CashReceipt>(nodes.Select(n => n.ReceiptId).Where(x => x.HasValue).Select(x => x.Value))) { if (receipt.Sent) { sentBefore++; continue; } var doc = new SalesDocumentDTO(receipt.Order, receipt.Order.Contract?.Organization?.Leader?.ShortName); CashBox cashBox = null; if (receipt.Order.Contract?.Organization?.CashBoxId != null) { cashBox = cashBoxes.FirstOrDefault(x => x.Id == receipt.Order.Contract.Organization.CashBoxId); } if (doc.IsValid && cashBox != null) { var newPreparedReceiptNode = new PreparedReceiptNode { CashReceipt = receipt, SalesDocumentDTO = doc, CashBox = cashBox }; receiptNodesToSend.Add(newPreparedReceiptNode); if (receiptNodesToSend.Count >= maxReceiptsAllowedToSendInOneGo) { break; } } else { if (cashBox == null) { logger.Warn($"Для заказа №{receipt.Order.Id} не удалось подобрать кассовый аппарат для отправки. Пропускаю"); } notValidCount++; receipt.HttpCode = 0; receipt.Sent = false; uow.Save(receipt); } } if (sentBefore > 0) { logger.Info($"{sentBefore} {NumberToTextRus.Case(sentBefore, "документ был отправлен", "документа было отправлено", "документов было отправлено")} ранее."); } logger.Info($"Количество чеков для переотправки: {receiptNodesToSend.Count} (Макс.: {maxReceiptsAllowedToSendInOneGo})"); if (!receiptNodesToSend.Any()) { return; } var result = salesReceiptSender.SendReceipts(receiptNodesToSend.ToArray()); foreach (var sendReceiptNode in result) { sendReceiptNode.CashReceipt.Sent = sendReceiptNode.SendResultCode == HttpStatusCode.OK; sendReceiptNode.CashReceipt.HttpCode = (int)sendReceiptNode.SendResultCode; uow.Save(sendReceiptNode.CashReceipt); } }
private void SendForOrdersWithoutReceipts(IUnitOfWork uow, IEnumerable <ReceiptForOrderNode> nodes, ref int notValidCount) { IList <PreparedReceiptNode> receiptNodesToSend = new List <PreparedReceiptNode>(); foreach (var order in uow.GetById <Order>(nodes.Select(x => x.OrderId))) { var newReceipt = new CashReceipt { Order = order }; var doc = new SalesDocumentDTO(order, order.Contract?.Organization?.Leader?.ShortName); CashBox cashBox = null; if (order.Contract?.Organization?.CashBoxId != null) { cashBox = cashBoxes.FirstOrDefault(x => x.Id == order.Contract.Organization.CashBoxId); } if (doc.IsValid && cashBox != null) { var newPreparedReceiptNode = new PreparedReceiptNode { CashReceipt = newReceipt, SalesDocumentDTO = doc, CashBox = cashBox }; receiptNodesToSend.Add(newPreparedReceiptNode); if (receiptNodesToSend.Count >= maxReceiptsAllowedToSendInOneGo) { break; } } else { if (cashBox == null) { logger.Warn($"Для заказа №{order.Id} не удалось подобрать кассовый аппарат для отправки. Пропускаю"); } notValidCount++; newReceipt.HttpCode = 0; newReceipt.Sent = false; uow.Save(newReceipt); } } logger.Info($"Количество новых чеков для отправки: {receiptNodesToSend.Count} (Макс.: {maxReceiptsAllowedToSendInOneGo})"); if (!receiptNodesToSend.Any()) { return; } var result = salesReceiptSender.SendReceipts(receiptNodesToSend.ToArray()); foreach (var sendReceiptNode in result) { sendReceiptNode.CashReceipt.Sent = sendReceiptNode.SendResultCode == HttpStatusCode.OK; sendReceiptNode.CashReceipt.HttpCode = (int)sendReceiptNode.SendResultCode; uow.Save(sendReceiptNode.CashReceipt); } }