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(); } }