private SubagentInfo GetSubagentInfo(int сustomerId)
        {
            SubagentInfo subagentInfo = null;

            using (OTAFinanceDbDataContext db = new OTAFinanceDbDataContext())
            {
                var subagent = db.UnitellerFiscalizationPaymentSubagentData.FirstOrDefault(x => x.SubagentId == сustomerId && !x.Deleted);
                if (subagent != null)
                {
                    subagentInfo = new SubagentInfo
                    {
                        Id             = subagent.Id,
                        SubagentId     = subagent.SubagentId,
                        PrimaryEmail   = subagent.PrimaryEmail,
                        SecondaryEmail = subagent.SecondaryEmail,
                        TertiaryEmail  = subagent.TertiaryEmail,
                        Phone          = subagent.Phone,
                        Inn            = subagent.Inn,
                        Name           = subagent.Name,
                        ContractNumber = subagent.ContractNumber,
                        СontractDate   = subagent.СontractDate,
                        Description    = subagent.Description,
                    };
                }
            }

            return(subagentInfo);
        }
        private void UpdateUnitellerResultCheck(EFiscalizationPaymentState state, ErrorOperationResult operationResult, FiscalizationData fiscalizationData)
        {
            using (OTAFinanceDbDataContext db = new OTAFinanceDbDataContext())
            {
                var unitellerResultCheck = db.UnitellerResultCheckByWidget.FirstOrDefault(x => string.Equals(x.UnitellerOrderPaymentId, fiscalizationData.OrderID));
                if (unitellerResultCheck != null)
                {
                    unitellerResultCheck.SubagentId       = fiscalizationData.СustomerId == 0 ? (int?)null : fiscalizationData.СustomerId;
                    unitellerResultCheck.PaymentAttemptId = string.IsNullOrWhiteSpace(fiscalizationData.PaymentAttemptID) ? null : fiscalizationData.PaymentAttemptID;
                    unitellerResultCheck.Receipt          = string.IsNullOrWhiteSpace(fiscalizationData.Receipt) ? null : fiscalizationData.Receipt;
                    unitellerResultCheck.Message          = string.IsNullOrWhiteSpace(fiscalizationData.ErrorMessage) ? null : fiscalizationData.ErrorMessage;
                    unitellerResultCheck.ErrorCode        = (short)operationResult;
                    unitellerResultCheck.ProcessingStatus = (short)state;
                    unitellerResultCheck.ProcessEndTime   = fiscalizationData.ProcessEndTime;

                    db.SubmitChanges();
                }
            }
        }
        public void UnitellerFiscalizationPayment()
        {
            logger.Info("UnitellerFiscalizationPayment - запущена процедура формирования данных по фискализации и их отправке");
            //List<FiscalizationData> fiscalizationDataList = new List<FiscalizationData>();
            List <ErrorOperationResult> ErrorOperationResultList = new List <ErrorOperationResult>();

            try
            {
                using (OTAFinanceDbDataContext db = new OTAFinanceDbDataContext())
                {
                    // ОСТАВЛЕНО для тестирования
                    //var payment = db.UnitellerOrderPayments.FirstOrDefault(x => x.UnitellerOrderPaymentId.Contains("5ee243234ec347"));
                    //if (payment != null)
                    //{
                    //    {
                    //        // из поля comment надо получить ID субагента
                    //        int? subagentIdFromComment = null;
                    //        if (!string.IsNullOrWhiteSpace(payment.Comment))
                    //        {
                    //            subagentIdFromComment = UnitellerFiscalizationHelper.GetPaymentId(payment.Comment);
                    //        }

                    //        var unitellerResultCheckByWidget = new UnitellerResultCheckByWidget
                    //        {
                    //            UnitellerShopPointId = payment.UnitellerShopPointId,
                    //            UnitellerOrderPaymentId = payment.UnitellerOrderPaymentId,
                    //            UnitellerPaidTotal = payment.PaidTotal,
                    //            UnitellerOwnerEmail = payment.OwnerEmail,
                    //            UnitellerSubagentId = (subagentIdFromComment != null && subagentIdFromComment.HasValue) ? subagentIdFromComment.Value : (int?)null,

                    //            ProcessingStatus = (short)EFiscalizationPaymentState.Unknown,
                    //            ErrorCode = 0
                    //        };

                    //        db.UnitellerResultCheckByWidget.InsertOnSubmit(unitellerResultCheckByWidget);
                    //        db.SubmitChanges();
                    //    }
                    //}

                    // в этой части ничего не анализируем
                    // у нас есть UnitellerResultCheckByWidget и набор данных
                    //UnitellerShopPointId,
                    //UnitellerOrderPaymentId
                    //UnitellerPaidTotal
                    //UnitellerOwnerEmail - email для отправки чека (мыло из виджета)
                    //UnitellerSubagentId - ID субагента из виджета (поле комментарии)

                    // вытаскиваем из БД нужную информацию, формируем данные, отправляем в очередь
                    var payments = (from p in db.UnitellerResultCheckByWidget
                                    where p.ProcessingStatus == (short)EFiscalizationPaymentState.Unknown
                                    select p).ToList();

                    //List<UnitellerOrderPayment> payments = db.UnitellerOrderPayments
                    //    .Where(t => t.UnitellerOrderPaymentId == null && t.FiscalizationPaymentState != (short)EFiscalizationPaymentState.PrintFiscalCheck)
                    //    .OrderByDescending(t => t.CreateDate).ToList();
                    foreach (var pay in payments)
                    {
                        var data = db.UnitellerResultCheckByWidget.FirstOrDefault(x => x.Id == pay.Id);
                        if (data != null)
                        {
                            var fiscalizationData = new FiscalizationData
                            {
                                ShopID        = data.UnitellerShopPointId,
                                OrderID       = data.UnitellerOrderPaymentId,
                                PaidTotal     = (float)data.UnitellerPaidTotal,
                                СustomerId    = data.UnitellerSubagentId ?? 0,
                                СustomerEmail = data.UnitellerOwnerEmail,
                            };

                            // выставляем новый статус - обработка
                            data.ProcessingStatus = (short)(EFiscalizationPaymentState.Processing);
                            db.SubmitChanges();

                            ControllerNewTaskQueue.Add(fiscalizationData);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, "UnitellerFiscalizationPaymentAdapter.UnitellerFiscalizationPayment Exception: ");
            }
        }