예제 #1
0
        public SmsSendPanelView()
        {
            this.Build();
            validatedPhoneEntry.WidthRequest   = 135;
            validatedPhoneEntry.ValidationMode = QSWidgetLib.ValidationType.phone;
            yPhonesListTreeView.ColumnsConfig  = ColumnsConfigFactory.Create <Phone>()
                                                 .AddColumn("Телефоны")
                                                 .AddTextRenderer(x => x.Number)
                                                 .Finish();

            yPhonesListTreeView.Selection.Changed += (sender, args) =>
            {
                selectedPhone            = yPhonesListTreeView.GetSelectedObject() as Phone;
                validatedPhoneEntry.Text = selectedPhone?.Number ?? "";
            };

            ySendSmsButton.Pressed += (btn, args) =>
            {
                if (string.IsNullOrWhiteSpace(validatedPhoneEntry.Text))
                {
                    MessageDialogHelper.RunErrorDialog("Вы забыли выбрать номер.", "Ошибка при отправке Sms");
                    return;
                }

                ySendSmsButton.Sensitive = false;
                GLib.Timeout.Add(10000, () =>
                {
                    ySendSmsButton.Sensitive = true;
                    return(false);
                });

                var smsSender = new SmsPaymentSender();
                var result    = smsSender.SendSmsPaymentToNumber(Order.Id, validatedPhoneEntry.Text);
                switch (result.Status)
                {
                case PaymentResult.MessageStatus.Ok:
                    MessageDialogHelper.RunInfoDialog("Sms отправлена успешно");
                    break;

                case PaymentResult.MessageStatus.Error:
                    MessageDialogHelper.RunErrorDialog(result.ErrorDescription, "Ошибка при отправке Sms");
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            };
        }
        private void OnSendSmsButtonPressed(object btn, EventArgs args)
        {
            if (_order.Id == 0)
            {
                _interactiveService.ShowMessage(ImportanceLevel.Error, "Перед отправкой SMS необходимо сохранить заказ",
                                                "Не удалось отправить SMS");
                return;
            }
            if (string.IsNullOrWhiteSpace(validatedPhoneEntry.Text))
            {
                _interactiveService.ShowMessage(ImportanceLevel.Error, "Вы забыли выбрать номер.", "Не удалось отправить SMS");
                return;
            }

            var alreadySentSms = _smsPaymentRepository.GetSmsPaymentsForOrder(
                InfoProvider.UoW,
                _order.Id,
                _excludeSmsPaymentStatuses
                );

            var paidSmsPayments    = alreadySentSms.Where(x => x.SmsPaymentStatus == SmsPaymentStatus.Paid).ToList();
            var waitingSmsPayments = alreadySentSms.Where(x =>
                                                          x.SmsPaymentStatus == SmsPaymentStatus.WaitingForPayment &&
                                                          DateTime.Now.Subtract(x.CreationDate).TotalMinutes < 60
                                                          ).ToList();

            if (paidSmsPayments.Any())
            {
                var paidStringBuilder = new StringBuilder();

                foreach (var payment in paidSmsPayments)
                {
                    paidStringBuilder.AppendLine($"\tКод платежа:     {payment.Id}");
                    paidStringBuilder.AppendLine($"\tТелефон:            +7 {_phoneFormatter.FormatString(payment.PhoneNumber)}");
                    paidStringBuilder.AppendLine($"\tДата создания:  {payment.CreationDate}");
                    paidStringBuilder.AppendLine($"\tДата оплаты:     {payment.PaidDate}");
                    paidStringBuilder.AppendLine($"\tНомер оплаты:  {payment.ExternalId}");
                    paidStringBuilder.AppendLine();
                }

                var sendPayment = _interactiveService.Question("Для заказа уже есть ранее оплаченные платежи по SMS:\n\n" +
                                                               $"{paidStringBuilder}" +
                                                               "Вы уверены что хотите отправить ещё одну SMS?");

                if (!sendPayment)
                {
                    return;
                }
            }
            else if (waitingSmsPayments.Any())
            {
                var waitingStringBuilder = new StringBuilder();

                foreach (var payment in waitingSmsPayments)
                {
                    waitingStringBuilder.AppendLine($"\tКод платежа:     {payment.Id}");
                    waitingStringBuilder.AppendLine($"\tТелефон:            +7 {_phoneFormatter.FormatString(payment.PhoneNumber)}");
                    waitingStringBuilder.AppendLine($"\tДата создания:  {payment.CreationDate}");
                    waitingStringBuilder.AppendLine();
                }

                var sendPayment = _interactiveService.Question("Для заказа найдены SMS, ожидающие оплату клиента:\n\n" +
                                                               $"{waitingStringBuilder}" +
                                                               "Вы уверены что хотите отправить ещё одну SMS?");

                if (!sendPayment)
                {
                    return;
                }
            }

            btnSendFastPaymentPayByQrUrlBySms.Sensitive = btnSendFastPaymentPayByCardUrlBySms.Sensitive = ySendSmsButton.Sensitive = false;
            GLib.Timeout.Add(10000, () =>
            {
                btnSendFastPaymentPayByQrUrlBySms.Sensitive   = true;
                btnSendFastPaymentPayByCardUrlBySms.Sensitive = _canSendSmsForPayFromSbpByCard;
                ySendSmsButton.Sensitive = _canSendSmsForPayFromYookassa;

                return(false);
            });

            var           smsSender = new SmsPaymentSender();
            PaymentResult result;

            try
            {
                result = smsSender.SendSmsPaymentToNumber(_order.Id, validatedPhoneEntry.Text);
            }
            catch (TimeoutException)
            {
                _interactiveService.ShowMessage(ImportanceLevel.Warning,
                                                "Превышено время ожидания ответа от сервиса оплаты по SMS.\nЕсли SMS не была отправлена, произведите повторную отправку");
                return;
            }
            switch (result.Status)
            {
            case PaymentResult.MessageStatus.Ok:
                _interactiveService.ShowMessage(ImportanceLevel.Info, "SMS отправлена успешно");
                break;

            case PaymentResult.MessageStatus.Error:
                _interactiveService.ShowMessage(ImportanceLevel.Error, result.ErrorDescription, "Не удалось отправить SMS");
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }